Реализован ввод с перфокарт
Dec. 10th, 2020 11:32 pmВ версии, доступной на https://github.com/besm6/simh можно вводить задачи с "перфокарт". Это и быстрее, чем с "перфоленты", и в целом удобнее, хотя из-за отсутствия точных данных о временны́х характеристиках устройства ввода, иногда при вводе очень длинных "колод перфокарт" бывают сбои ("НЕТ КНЦА ПК"). Тогда нужно просто повторить ввод (снова attach ..., ВВД).
Отличия:
Таким образом, формат пакетной задачи для SIMH стал идентичен формату для эмулятора Диспака.
Ради прикола был реализована опциональная перекодировка вводимого текста в поколонный формат УПДК, о деталях которого ИТМ и ВТ и ОИЯИ так и не смогли договориться, поэтому он практически не использовался.
Но работает.
Отличия:
- в команде SIMH attach вместо fs0 или fs1 говорить vu0 или vu1. Ключ -t больше не нужен (игнорируется).
- команда Диспака ФС8 продолжает работать, хотя более правильно давать команду ВВД.
- управляющий символ ^] в первой позиции строки после В1А3 нужно удалить вовсе
- вместо управляющего символа ^] перед ЕКОНЕЦ нужно вставить строку, состоящую ровно из шести символов ``````
- стало можно вводить образы перфокарт, нарисованные точками и буквами О: https://github.com/besm6/besm6.github.io/blob/master/wiki/examples/punchtest.b6
Таким образом, формат пакетной задачи для SIMH стал идентичен формату для эмулятора Диспака.
Ради прикола был реализована опциональная перекодировка вводимого текста в поколонный формат УПДК, о деталях которого ИТМ и ВТ и ОИЯИ так и не смогли договориться, поэтому он практически не использовался.
Но работает.
no subject
Date: 2020-12-11 08:29 am (UTC)no subject
Date: 2020-12-11 04:04 pm (UTC)no subject
Date: 2020-12-11 02:29 pm (UTC)lib paths are: /lib/ /lib64/ /usr/lib/ /usr/lib64/ /usr/lib64/nsl/
include paths are: /usr/lib64/gcc/x86_64-alt-linux/8/include /usr/local/include /usr/include
using libm: /usr/lib64/libm.so
using librt: /usr/lib64/librt.so
using libpthread: /usr/lib64/libpthread.so /usr/include/pthread.h
using semaphore: /usr/include/semaphore.h
using libdl: /usr/lib64/libdl.so /usr/include/dlfcn.h
using mman: /usr/include/sys/mman.h
using libSDL2: /usr/include/SDL2/SDL.h
***
*** besm6 Simulator being built with:
*** - compiler optimizations and no debugging support. GCC Version: 8.4.1.
*** - video capabilities provided by libSDL2 (Simple Directmedia Layer).
*** - Per simulator tests will be run.
***
*** git commit id is 15001b09dbebc8216c346dd018d184048ec28cb1.
*** git commit time is 2020-12-10T23:27:24-08:00.
***
font paths are: /usr/share/fonts/ /usr/lib/jvm/
font names are: DejaVuSans.ttf LucidaSansRegular.ttf FreeSans.ttf AppleGothic.ttf tahoma.ttf
using libSDL2_ttf: /usr/lib64/libSDL2_ttf.so /usr/include/SDL2/SDL_ttf.h
***
gcc -std=gnu99 -U__STRICT_ANSI__ -O2 -finline-functions -fgcse-after-reload -fpredictive-commoning -fipa-cp-clone -fno-unsafe-loop-optimizations -fno-strict-overflow -DSIM_GIT_COMMIT_ID=15001b09dbebc8216c346dd018d184048ec28cb1 -DSIM_GIT_COMMIT_TIME=2020-12-10T23:27:24-08:00 -DSIM_COMPILER="GCC Version: 8.4.1" -DSIM_BUILD_TOOL=simh-makefile -I . -D_GNU_SOURCE -DUSE_READER_THREAD -DSIM_ASYNCH_IO -DHAVE_SEMAPHORE -DHAVE_SYS_IOCTL -DHAVE_LINUX_CDROM -DHAVE_DLOPEN=so -DHAVE_UTIME -DHAVE_GLOB -DHAVE_SHM_OPEN ./BESM6/besm6_cpu.c ./BESM6/besm6_sys.c ./BESM6/besm6_mmu.c ./BESM6/besm6_arith.c ./BESM6/besm6_disk.c ./BESM6/besm6_drum.c ./BESM6/besm6_tty.c ./BESM6/besm6_panel.c ./BESM6/besm6_printer.c ./BESM6/besm6_punch.c ./BESM6/besm6_punchcard.c ./BESM6/besm6_vu.c ./scp.c ./sim_console.c ./sim_fio.c ./sim_timer.c ./sim_sock.c ./sim_tmxr.c ./sim_ether.c ./sim_tape.c ./sim_disk.c ./sim_serial.c ./sim_video.c ./sim_imd.c ./sim_card.c -I ./BESM6 -DUSE_INT64 -DFONTFILE=/usr/share/fonts/ttf/dejavu/DejaVuSans.ttf -DHAVE_LIBSDL -DUSE_SIM_VIDEO `/usr/bin/sdl2-config --cflags` `/usr/bin/sdl2-config --libs` -lSDL2_ttf -DFONTFILE=/usr/share/fonts/ttf/dejavu/DejaVuSans.ttf -DHAVE_LIBSDL -DUSE_SIM_VIDEO `/usr/bin/sdl2-config --cflags` `/usr/bin/sdl2-config --libs` -lSDL2_ttf -o BIN/besm6 -lm -lrt -lpthread -ldl
/usr/bin/ld.default: /tmp/.private/ilin_alexander/ccYlaHIO.o: in function `prettycard':
besm6_vu.c:(.text+0x6d0): undefined reference to `utf8_getc'
/usr/bin/ld.default: besm6_vu.c:(.text+0x755): undefined reference to `utf8_getc'
/usr/bin/ld.default: besm6_vu.c:(.text+0x797): undefined reference to `utf8_getc'
/usr/bin/ld.default: /tmp/.private/ilin_alexander/ccYlaHIO.o: in function `vu_event':
besm6_vu.c:(.text+0x93d): undefined reference to `utf8_getc'
/usr/bin/ld.default: besm6_vu.c:(.text+0x995): undefined reference to `utf8_getc'
/usr/bin/ld.default: /tmp/.private/ilin_alexander/ccYlaHIO.o:besm6_vu.c:(.text+0xaa5): more undefined references to `utf8_getc' follow
collect2: error: ld returned 1 exit status
make: *** [makefile:2769: BIN/besm6] Ошибка 1
no subject
Date: 2020-12-11 02:55 pm (UTC)Можно вставить вместо строки 401 файла BESM6/besm6_vu.c
static int utf8_getc (FILE *fin) { int c1, c2, c3; again: c1 = getc (fin); if (c1 < 0 || ! (c1 & 0x80)) return c1; c2 = getc (fin); if (! (c1 & 0x20)) return (c1 & 0x1f) << 6 | (c2 & 0x3f); c3 = getc (fin); if (c1 == 0xEF && c2 == 0xBB && c3 == 0xBF) { /* Skip zero width no-break space. */ goto again; } return (c1 & 0x0f) << 12 | (c2 & 0x3f) << 6 | (c3 & 0x3f); }Теперь проект не ругается на эту функцию, но дальше валится так:
BIN/besm6 RegisterSanityCheck </dev/null Running internal register sanity checks on БЭСМ-6 simulator. БЭСМ-6 VU:Готов used the REGDATA macro to describe a 8 bits wide and 8 elements deep array therefore SAVE/RESTORE operations will affect 32 bytes of memory while the variable lives in 4 bytes of memory Simulator device register sanity check error make: *** [makefile:2770: BIN/besm6] Ошибка 1no subject
Date: 2020-12-11 04:02 pm (UTC)no subject
Date: 2020-12-11 03:52 pm (UTC)GCC=clang make besm6
У меня собрался, но какую команду ему дать чтобы проверить ввод с перфокарт я не знаю.
no subject
Date: 2020-12-11 04:03 pm (UTC)no subject
Date: 2020-12-11 04:10 pm (UTC)no subject
Date: 2020-12-11 05:22 pm (UTC)no subject
Date: 2020-12-11 08:22 pm (UTC)no subject
Date: 2020-12-11 07:02 pm (UTC)no subject
Date: 2020-12-11 08:30 pm (UTC)no subject
Date: 2020-12-12 11:29 am (UTC)no subject
Date: 2020-12-12 05:24 pm (UTC)ЕВ1А3 как в каком примере? Разборщик паспорта в эмуляторе Диспака сделан вручную и может быть менее строгий, чем настоящий. Если какой-то из примеров для эмулятора Диспака не работает на SIMH - возможно, в нём опечатка.
no subject
Date: 2020-12-12 07:35 pm (UTC)Вывод на ПИ отрабатывает штатно. В СИПРОД пока ввожу через ФС8. Пробовал меня управляющие символы выходит ЗМЛ.
Пример я имел в виду вот этот
https://github.com/besm6/besm6.github.io/blob/master/wiki/examples/punchtest.b6 Он отрабатывает с vu.
no subject
Date: 2020-12-13 04:50 am (UTC)Первоначальный синтаксис задания в ОС Диспак таков (для удобства разбитый на строки; везде, кроме карт, вводимых по А3, концы строк игнорируются):
ШИФР {6 или 12 цифр}^
{директивы заказа ресурсов и режимов, оканчивающиеся на ^}
E {это признак конца паспорта задачи}
Далее идёт один или несколько массивов данных, каждый из которых может состоять из одной или нескольких групп данных вида
В{адрес ввода}
{данные в разнообразных форматах, напр. К - команда, С - слово, Б - буквенное слово, Ч - число с плавающей точкой, А1 - непрерывная последовательность символов вплоть до _$, A3 - последовательность образов перфокарт вплоть до "диспетчерского конца" },
после которых следует буква Е.
После последнего массива следует слово КОНЕЦ.
Пока нет никакого резона писать две буквы Е подряд. Но потом ввели понятие стандартного паспорта (Зxx после цифр шифра). Стандартный паспорт сам по себе может состоять из директив заказа ресурсов, буквы Е и группы данных.
Тогда задача, использующая такой стандартный паспорт, должна была содержать одну букву Е как признак конца своего паспорта, и за ней сразу же еще одну, как признак конца массива данных, начатого в стандартном паспорте.
Я сейчас попробовал (у себя в SIMH), и оказалось, что ничто не мешает написать ЕВ1А3 в конце стандартного паспорта, и тогда можно будет писать примерно так:
Существующая система (с ЕЕВ1А3) была сделана для того, чтобы при необходимости, например, для отладки, пользователь мог добавить какие-нибудь дополнительные флаги или команды для вызываемой системы перед вводом текстовых данных. Тогда пакет задания выглядел бы как
ШИФР ...... Зхх^ .....^
ЕВ адрес_флагов С флаги
ЕВ1А3
*name
...
Возможно, это было полезно в самые первые годы эксплуатации, но потом необходимость отпала, а традиция сохранилась.