-
TU58fs
Пока большая часть моих программ - RequestWare, то есть, если что-то из написанного мной кому-то интересно, а у меня на недо-сайте не выложено - пишем в теме или в личку - обсуждаемо.
Устроил себе небольшое развлечение - переписываю эмулятор TU58 c С на C# :)
Скорее всего, на неделе (ближе к выходным) дойду до отладки :)
Некоторые шанс, что к стенду подключу DX/DY - есть, а вот DD - это в ближайшей перспективе - врят ли..
И учитывая, что загрузчик с DD в ПЗУ есть - будет на чём проверить :)
-
Перепили чуть менее половины кода. В том числе два (самых) больших по размеру модуля работы с файловыми системами. Судя по скорости и доступному времени - то, что к следующим выходным перейду к отладке - эт я погорячился. Хорошо, если ЗА следующие выходные всё допилю :) Ну и поскольку это первый проект по переделки с С на С# - не всё сразу пошло так, как надо - некоторые веСТЧи пришёл слегка переделать уже в процессе. Посмотрим как пойдёт работа по допиливанию работы с файловой системой PC и разборка опций командной строки - они следующие по размеру....
-
167 кб в 11-ти файлах перепелил, 147 кб в 7-ми осталось
Как ни странно, болит средний палец на правой руке :):):) Видимо, нелюбовь к С сказывается :D
-
С кодом по разнообразным ФС и образам вроде всё, на очереди высокоуровневое общение с TU58 (низкоуровневое - это com порт).
-
Что бы поменьше было красного - приходится параллельно пилить модуль uart и модуль tu58. С модулем uart сложней - сильно завязан на unix вариант, так что внутри пока много красного, но некоторая его подчистка позволяет уменшить количество красного в tu58 - и он, скорее всего, будет закончен первым :) А потом уже uart...
-
Закончил первый проход причёски модулей tu58 и uart - там остался системно-зависимый код (потоки и работа с ком-портами) - его буду править уже в процесс отладки.
На текущий момент
- есть "синтаксические ошибки" в tu58 и uart (то самое, системно-зависимое).
- не добавлены три модуля из исходного проекта (разборка командой строки, работа с консолью и передача загрузчика - аналогичное по смыслу есть в HX сервере Патрона)
- крайне слабо причёсан модуль main - им я займусь после добавления и причёски трех модулей из предыдущего пункта.
По прикидкам, за выходные я должен как минимум причесать три оставшиеся модуля и начать работу с main. Ну а если свезёт - то и начну отладку :)
-
Как подготовка к будущей отладке - сделал проброс com портов с физического компа внутри виртуалки, где у меня всё разрабатывается :) Ну, на первый взгляд, проброс грамотный, даже break прошёл :)
-
Загнал последние модули в проект, теперь только изменение кода - примерно так пяти модулей..
-
Вычистил модуль main.
Закомментил в модулях Monitor, TU58 и uart все, что зависит от работы с com портами и протокол TU58.
Осталось допилить модуль GetOpt (работа с опциями в командной строке) и можно потихоньку начинать отлаживать :)
-
Уффф.. GetOpt допилил (у него встроенный help на основе определения опций - с его методами долго возился).
Первый запуск :) Null reference exception :) Ну... в принципе ожидаемо :)
- - - Добавлено - - -
Удобная вещь в VS - можно редактировать исходники прямо во время отладки и продолжать отлаживать :) Поправил первые ошибки и
Код:
NAME
tu58fs - DEC TU58 tape emulator with File Sharing v1.3.0
(compile 27.03.2022 on 03:57:12)
(c) 2022 Hunta <some@where.on.net
(C) 2017 Joerg Hoppe <j_hoppe@t-online.de>
(C) 2005-2017 Don North <ak6dn@mindspring.com>,
(C) 1984 Dan Ts'o <Rockefeller University>
SYNOPSIS
Command line options are processed strictly left-to-right.
TU58fs --help --version --debug --verbose --mrsp --nosync --vax --background
--timing <parameter> --baudrate <baudrate> --format <bits_parity_stop>
--port <serial_device> --xxdp --rt11 --size <size>
--device <unit> <read_write_create> <filename>
--shareddevice <unit> <read_write_create> <directory>
--synctimeout <seconds> --unpack <filename> <dirname> <devicetype>
--pack <dirname> <filename> <devicetype> --boot <monitor> [ <keep>]
--usbdelay <milliseconds>
--usbdelay <milliseconds>
-? | --help
Print help.
-V | --version
Output version string.
-dbg | --debug
Enable debug output to console.
-v | --verbose
Enable verbose output to terminal.
-m | --mrsp
Disable sending INIT at initial startup.
-n | --nosync
enable standard MRSP mode (byte-level handshake).
-x | --vax
Remove delays for aggressive timeouts of VAX console.
-bk | --background
Run in background mode, no console I/O except errors.
-t | --timing <parameter>
timing 1: add timing delays to spoof diagnostic into passing.
timing 2: add timing delays to mimic a real TU58.
-b | --baudrate <baudrate>
Set serial line speed to 300..3000000 baud. Default: "38400"
-f | --format <bits_parity_stop>
Set format parameters for serial line as a 3 char string <bitcount><parity><stopbits>
<bitcount> maybe 7 or 8, <parity> is n (no), e (even) or o (odd), <stopbits> is 1 or 2.
Set to special console params for --boot operation. leave default for device emulation.
Default: "8N1"
Simple example: -f 7e2
Set for 7 bit even parity with 2 stop bits (--boot)
-p | --port <serial_device>
Select serial port: "COM<serial_device>:" or <serial_device> is a node like "/dev/ttyS1"
-xx | --xxdp
Select XXDP file system for following --device or --shareddevice options.
New image files are create with an empty XXDP file system.
-rt | --rt11
Same as --xxdp, but RT11 file system is selected.
-s | --size <size>
Override size of TU58 imagefile.
<size> is number of bytes; suffix "K": * 1024, suffix "M": * K * K.
Smaller images are enlarged, greater are trunc'd if possible.
Devices and file system try to adapt.
Works for XXDP non-boot-tapes, and RT-11 with patched DD.SYS driver.
"--size std" clears overriden size.
Simple example: -s 10M
image is 10 Megabytes = RL02 sized.
-d | --device <unit> <read_write_create> <filename>
Open image file for a TU58 drive
<unit>: File is mounted in this drive (0..7).
<read_write_create>: "r" = device is read-only, "w" = writable,
"c" = writable and file is created if not existent.
Also the --xxdp, --rt11 and --size options are evaluated.
A missing file is created and initialized with 0s or empty XXDP or RT11 filesystem.
Simple example: -d 0 r 11XXDP.DSK
mount image file XXDP.DSK into slot #0.
-sd | --shareddevice <unit> <read_write_create> <directory>
same as --device, but image is filled with files from a host directory.
-xxdp or -rt11 must be specified. <directory> must be writable and
must not contain subdirs, it is created only with "c" option.
Simple example: -sd 1 w /home/user/tu58/data.dir
fill image with files in a directory.
-st | --synctimeout <seconds>
An image changed by PDP is written to disk after this idle period.
Default: "3"
-up | --unpack <filename> <dirname> <devicetype>
Read a binary disk/tape image, and extract files into directory
A filesystem type must be specified (like -xxdp)
<device_type> can specify a different device geometry for the image,
allowed: TU58,RP0456,RK035,RL01,RL02,RK067,RM03,RS034,TU56,RX01,RX02
-pk | --pack <dirname> <filename> <devicetype>
Read files from a directory and pack into binary disk/tape image
<device_type> can specify a different device geometry for the image,
allowed: TU58,RP0456,RK035,RL01,RL02,RK067,RM03,RS034,TU56,RX01,RX02
-boot | --boot <monitor> [ <keep>]
Deposits a TU58 bootloader over console monitor into PDP-11, then starts it.
The TU58 emulator must have been started on a different serial port before.
<port> and <baudrate> of the console are set by "-p" and "-b" options
left of "--boot".
<monitor> specifies the implemented console: "odt", "m9312", or "m9301".
"code" displays the bootloader code as value/address pairs on stdout.
With <keep>=true the transfer dialog terminal window remains active, so you can
immediately operate the booted TU58 OS. With <keep>=false connection is terminated and
you have to start a more comfortable terminal emulator.
- The serial CONSOLE port is always DIFFERENT from the TU58 port!
- The PDP-11 must be HALTed and show its monitor prompt,
with the HALT/RUN switch in RUN position.
- the bootloader doesn't catch any TRAPs, so turn off the BEVENT/LTC signal.
The code is loaded at end of first 4k page at address 7000.
-ud | --usbdelay <milliseconds>
Specifies extra delay for protocol in "--boot" operation.
Some USB-RS232 adapters have large delays when polling input (for example FTDIs).
Other brands (Prolific) and non-USB RS232 ports should never need this.
Experiment for an optimum between download speed and reliability, recommended range 5-20.
Option names are case sensitive.
EXAMPLES
TU58fs -p COM52 -b 38400 -d 0 r 11XXDP.DSK
Define device #0: tape image file is 11XXDP.DSK .
Access to serial line device requires "sudo". Image is readonly.
If it not exist, an error is signaled.
TU58fs <serial params> -d 0 c 11XXDP.DSK
Same. If "11XXDP.DSK" does not exists, an unformatted 0-filled image file is created.
TU58fs <serial params> -rt11 -sd 1 w tinyrt11
Shared device image for device #1, "tinyrt11" is a directory:
Image is constructed from file content, to a max size of 256kb, else error.
Can be accessed with "DD1:"
TU58fs <serial params> --size 10M -rt11 -d 1 w bigrt11
Same, but device image is automatically enlarged to 10MBytes, max 32MB.
A modified DD.SYS driver must be used on the RT11 system.
TU58fs <serial params> -xxdp -d 0 r 11XXDP.DSK -d 1 w data.dsk -sd 7 w shared.dir
Define device #0:
Standard 256kb image, loaded from file "11XXDP.DSK", not created.
Device #1:
If "data.dsk" does not exist, a file is create and formatted as empty XXDP
If "data.dsk" exists, it is opened for read/write
Device #7:
contains the files in a sub directory "shared.dir" on the host.
Can be accessed with "DD0:", "DD1:", "DD7:"
TU58fs -xxdp --unpack 11XXDP.DSK 11xxdp.dir TU58
Extracts all files from an TU58 image into a directory.
If image is bootable, pseudofiles for bootloader and monitor are generated.
The directory is then bootable too.
TU58fs <serial params> -xxdp -sd 0 w 11xxdp.dir
Define device #0:
Standard 256kb image, loaded from file "11xxdp.dir", not created.
Dir is bootable, if it contains the pseudo files for monitor and boot block.
A bootable dir is can be created by unpacking a bootable image file.
TU58fs <serial params> -rt11 -unpack RT11V53.DSK rt11v53.imgdir TU58 -sd 0 w rt11v53.imgdir
Combination of exmaples before:
Extract content of image into shared directory, then run TU58 emulator on that directory.
Dir is bootable, if the image is bootable.
TU58fs -p /dev/ttyS1 -b 9600 -f 7e2 --boot odt 1
Deposit TU58 bootloader over serial console port into PDP-11 and try to start it.
The console is configured for 7 bit, even parity and 2 stop bits.
A LSI-11 with ODT monitor is assumed, boot loader is dumped into memory at
address octal 7000 (at end of first 4K page).
The actual TU58 emulator must have been started on a different serial port before.
The boot loader will try to boot from TU58 tape.
After that the terminal window remains active, so you have a primitive
teletype to operate the booted PDP_11
TU58fs -p 9 -b 115200 --usbdelay 10 --boot odt 1
Boot under MS-Windows. Console connected to COM9, an USB-RS2323 adapter.
The console DL11 is tuned for 115200 baudrate, the USB dongle needs 10 ms extra delay (FTDI!)
SEE ALSO
Online docs: www.retrocmp.com/tools/tu58fs
Source version Repository: https://github.com/j-hoppe/tu58fs
Source version Contact: j_hoppe@t-online.de
Есть определённые косяки форматирования, но количество правильно отработанного кода - после редактирования вслепую и по наитию... :)
-
Чистка ошибок продолжается...
Код:
# $VOLUM.INF - info about RT-11 volume on RL02 device.
# Produced by TU58FS at 2022-мар-27 13:28:48
pack_cluster_size=1
# Block number of first directory segment
first_dir_blocknr=6
system_version=V05
volume_id=BC-P607F-BC
owner_name=RL2 1/1
system_id=DECRT11A
# number of 512 byte blocks on volume
block_count=20480
# number of extra bytes per directory entry
dir_entry_extra_bytes=0
# Total number of segments in this directory (can hold 2139 files)
dir_total_seg_num=31
# Number of highest dir segment in use
dir_max_seg_nr=5
# Start block of file area = 68
# File 0,00 "SWAP .SYS".
No prefix.
Data 13824 = 0x13824 bytes, start block 68 @ 0x8800.
# File 1,00 "RT11AI.SYS".
No prefix.
Data 40960 = 0x40960 bytes, start block 95 @ 0xBE00.
# File 2,00 "RT11PI.SYS".
No prefix.
Data 48640 = 0x48640 bytes, start block 175 @ 0x15E00.
# File 3,00 "RT11BL.SYS".
No prefix.
Data 39936 = 0x39936 bytes, start block 270 @ 0x21C00.
- - - Добавлено - - -
Ещё почистил ошибки
TU58fs умеет распаковывать образы
Код:
SWAP .SYS 27P 20-дек-85 RT11AI.SYS 80P 20-дек-85
RT11PI.SYS 95P 20-дек-85 RT11BL.SYS 78P 20-дек-85
RT11SJ.SYS 79P 20-дек-85 RT11FB.SYS 93P 20-дек-85
RT11XM.SYS 106P 20-дек-85 CR .SYS 3P 20-дек-85
CT .SYS 6P 20-дек-85 DD .SYS 5P 20-дек-85
.....................
RTXM .MAP 33P 20-дек-85 SYSGEN.COM 230P 20-дек-85
BL .ANS 9P 20-дек-85 SJFB .ANS 9P 20-дек-85
XM .ANS 9P 20-дек-85 CONFIG.COM 27P 20-дек-85
CONFIG.SAV 7P 20-дек-85 V5USER.TXT 3P 20-дек-85
V5NOTE.TXT 41P 20-дек-85 CUSTOM.TXT 9P 20-дек-85
CONSOL.MAC 6P 20-дек-85 NITEST.MAC 22P 20-дек-85
206 files, 5023 blocks
15359 Free blocks
[2022-мар-27 13:52:11 info] Files extracted from "K:\Repo\2022\ForDebug\RT11.V05.03.RL.var1.dsk" and written to "K:\Repo\2022\ForDebug\Unpacked".
[2022-мар-27 13:52:11 info] Using serial port at 38400 baud with 8N1 format.
[2022-мар-27 13:52:11 info] No simulated drives were specified, emulator not started.
-
И после очередного исправления найденных ошибок...
TU58fs может собирать образы
Код:
SWAP .SYS 27 27-мар-99 RT11AI.SYS 80 27-мар-99
RT11BL.SYS 78 27-мар-99 RT11FB.SYS 93 27-мар-99
RT11PI.SYS 95 27-мар-99 RT11SJ.SYS 79 27-мар-99
RT11XM.SYS 106 27-мар-99 DD .SYS 5 27-мар-99
DDX .SYS 5 27-мар-99 TT .SYS 2 27-мар-99
DL .SYS 4 27-мар-99 DLX .SYS 5 27-мар-99
CR .SYS 3 27-мар-99 CT .SYS 6 27-мар-99
DM .SYS 5 27-мар-99 DMX .SYS 5 27-мар-99
DP .SYS 3 27-мар-99 DS .SYS 3 27-мар-99
DT .SYS 3 27-мар-99 DU .SYS 8 27-мар-99
DUX .SYS 9 27-мар-99 DW .SYS 5 27-мар-99
..........
USR .MAC 74 27-мар-99 V5NOTE.TXT 41 27-мар-99
V5USER.TXT 3 27-мар-99 VBGEXE.SAV 16 27-мар-99
VDT .OBJ 8 27-мар-99 VERIFY.COM 3 27-мар-99
VM .MAC 21 27-мар-99 VTCOM .REL 27 27-мар-99
VTCOM .SAV 24 27-мар-99 VTHDLR.OBJ 8 27-мар-99
VTMAC .MAC 7 27-мар-99 XC .MAC 1 27-мар-99
XL .MAC 28 27-мар-99 XM .ANS 9 27-мар-99
XM .MAC 1 27-мар-99 XMSUBS.MAC 40 27-мар-99
206 files, 5023 blocks
15417 Free blocks
[2022-мар-27 17:37:29 info] Files from "K:\Repo\2022\ForDebug\Unpacked" written to "K:\Repo\2022\ForDebug\test.dsk".
[2022-мар-27 17:37:29 info] Using serial port at 38400 baud with 8N1 format.
[2022-мар-27 17:37:29 info] No simulated drives were specified, emulator not started.
Вот только по идее образ должен был стать тоже загрузочным, но... Очередная ошибка? :)
- - - Добавлено - - -
Пока не понял, но вроде нет...
На очереди проверка работы с XXDP образами :)
- - - Добавлено - - -
Очередной фикс некоторого количества ошибок...
Нет некоторой уверенности - правильно ли прошло извлечение файлов, но по крайне мере всякие характеристики в листинге показываются правильно :)
Код:
[2022-мар-27 19:16:51 Warning] Monitor core start is 170 in RADI, but 189 in MFD1/2
[2022-мар-27 19:16:51 Warning] Position of bad block file not yet evaluated
[2022-мар-27 19:16:51 Warning] Monitor core start is 170 in RADI, but 189 in MFD1/2
[2022-мар-27 19:16:51 Warning] Position of bad block file not yet evaluated
ENTRY# FILNAM.EXT DATE LENGTH START VERSION
1 XXDPXM.SYS 24-янв-1988 39 2
2 XXDPSM.SYS 24-янв-1988 29 422
3 DRSXM .SYS 24-янв-1988 48 457
4 DRSSM .SYS 24-янв-1988 24 537
5 DIR .SYS 24-янв-1988 7 567
6 DB .SYS 24-янв-1988 2 576
7 DD .SYS 24-янв-1988 3 600
8 DL .SYS 24-янв-1988 4 603
9 DM .SYS 24-янв-1988 4 607
10 DR .SYS 24-янв-1988 3 613
11 DU .SYS 24-янв-1988 4 616
........................
696 ZVSVA0.BIN 24-янв-1988 11 41371
697 ZVSWB0.BIN 24-янв-1988 25 41404
698 ZVTHC0.BIC 24-янв-1988 25 41435
699 ZVTJB0.BIN 24-янв-1988 26 41466
700 ZVTLA0.BIN 24-янв-1988 12 41520
701 ZVTMA0.BIN 24-янв-1988 29 41534
702 ZVTNA0.BIC 24-янв-1988 13 41571
703 ZVTVA0.BIN 24-янв-1988 9 41606
FREE BLOCKS: 3197
[2022-мар-27 19:16:52 info] Files extracted from "K:\Repo\2022\ForDebug\XXDP_V2.6_L_DL.DSK" and written to "K:\Repo\2022\ForDebug\UXXDP".
[2022-мар-27 19:16:52 info] Using serial port at 38400 baud with 8N1 format.
[2022-мар-27 19:16:52 info] No simulated drives were specified, emulator not started.
Теперь уже есть определённая статистика по ошибкам. Если не считать некоторое количество пропущенного кода (из-за определённых переделок и пару раз - по невнимательности), то самые распространненные ошибки - ошибки двух классов. Не созданные внутренние объекты (в C нет классов, поэтому выделение памяти протекает малость по другому) и ошибки форматирования при выводе :)
И надо будет проверить - чего там наизвлекалось и навставлялось - в RT-11 вроде норм (но всё равно буду проверять), а вот с XXDP есть ошибка извлечения с вероятнстью 99,99 процентов :)
- - - Добавлено - - -
А вот и нет - месяц не правильно (должен быть февраль) :)
- - - Добавлено - - -
Месяц поправил.
RT-11 извлечение - ок, XXDP - бэд. Ну с XXDP ишо вожусь.
RT-11 запаковка - похоже бэд...
- - - Добавлено - - -
С файловой системой RT-11 вроде все ошибки поправил - и извлечение из образа и создание образа - узвлечённое из созданного образа совпадает с оригиналом по количеству и по содержимому :)
Теперь разборки с XXDP...
-
Распаковка-сборка RT11 и XXDP образов до какой то степени проверена :) В том числе (вроде) распакованный загрузочный RT11 и XXDP образ после сборки должен остататься загрузочным :) Но это надо будет проверить...
- - - Добавлено - - -
А, да - и первый коммит. Но в нём ещё никакой эмуляции и отсылки загрузчика... Этот код ещё надо допилить..
-
Допиливание COM порта, пока минимальный функционал.
-
Первый контакт Falcon-а и типа "TU58" есть :) Теперь напильничком по модулю TU58Drive :)
-
АССССА :D
Код:
@DD0
RT-11SJ V05.04 F
?LD-W-Unable to update disk copy of LD handler
.R MSCPCK
.SHO CONF
RT-11SJ V05.04 F
Booted from DD0:RT11SJ
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
KMON nesting depth is 3
SBC 11/21 (T11) Processor
56KB of memory
60 Cycle System Clock
FPU support
.
-
Где то (я уже примерно догадываюсь, где) сидит ошибка при записи, так что пускать на rw образ эмулятор не стОит
Чтение же вроде работает ок
Из интересных особенностей данного эмулятора:
Код:
@DD0
RT-11SB V05.07
?LD-W-Unable to update disk copy of LD handler
.R MSCPCK
.DIR
SWAP .SYS 28P 31-Oct-1998 RT11AI.SYS 96P 31-Oct-1998
RT11SB.SYS 97P 31-Oct-1998 RT11FB.SYS 106P 31-Oct-1998
.......
ARK .DSK 1200P 31-Oct-1998 MSRT .DSK 1000P 31-Oct-1998
DISSAV.DSK 200P 31-Oct-1998 TIMIT .MAC 1 29-Mar-2022
ERLG .MAC 1 29-Mar-2022 DD .SYS 5 29-Mar-2022
DDX .SYS 5 29-Mar-2022
231 Files, 16560 Blocks
3822 Free blocks
.TYP ERLG.MAC
ERL$G = 1
.
Если почитать доку по реальному TU58, то можно узнать, что его размер - всего 512 блоков :) Но эмулятор умеет работать и с образами бОльшего размера (до 32 мб, как обычно для XXDP, DOS-11 и RT-11), при этом он при запуске (если файловая система - RT) ищет DD.SYS и DDX.SYS и патчит их под размер текущего образа, а при остановке эмуляции - депатчит :) Результат виден по логу - был использован образ от RL02
- - - Добавлено - - -
Чито и требовалось доказать :)
Код:
@DD0
RT-11SB V05.07
.R MSCPCK
.COP TT: TEST.TXT
Files copied:
^WRITE TEST
^ZTT: to DK:TEST.TXT
.TYP TEST.TXT
WRITE TEST
.DIR/BLO TEST.TXT
TEST .TXT 1 16628
1 Files, 1 Blocks
3821 Free blocks
.
Из общего впечатления - какая то тормозная эта эмуляция девайса... На 38400 работает примерно как HX на 9600.
Подозрение, что я чего то недоперемудрил при переделки работы с временными задержками (есть там такое) под Windows.
Так что теперь в плане проверок - этот момент.
-
А фот виг вам - принял (не)желаемое за действительное.
Сделал два одинаковых образа, в одном настроил загрузку с HX, в другом - с DD и с секундамером засёк время загрузки (на одной скорости портов - 38400). HX - 2:37, а DD - 2:25, то есть DD даже чуть лучше :) Видимо в первый момент сказалось психологически привычное время загрузки с настроенной системы (и минимум драйверов), а на DD грузился с дистрибутивного носителя (а там куча драйверов, которые при загрузке RT проверяет).
Из ещё отмеченного - этот эмулятор TU58 (после переделки, понятно, но все переделки были сделаны в лоб) сильно грузит проц. Сказывается то, что он постоянно работает (в потоке эмуляции TU58) и не уводит этот поток в sleep. Надо будет подумать и переделать это
- - - Добавлено - - -
В целом, эмулятор доведён до приличного состояния - можно возвращатся к допиливанию ПЗУ Falcon-а :)
Ну и ещё в мыслях - на основе его кода сделать экстрактор файлов из образов для командной строки. А то TC я не жалую, а плагин ещё не удобен в том плане, что у меня 64-ёх битный FAR, да и люблю я командную строку :) Надо только попробовать допилить извлечение файлов из образов XXDP до полной поддержки этой файловой системы, а как ни странно, она поддерживает (но XXDP это почти не использует) двухуровневую систему каталогов :)
-
Работу с образом и подключенной папкой вроде проверил-поправил, но вот то ли второй уарт на плате, то ли работа с подключенной папкой сбоят, но - при копировании на устройство с подключенной папкой - эпизодический ошибки. Причём частота и место возникновения - не предсказуемы..
Я, конечно, привык сначала валить на себя, но как бы я не извращался с работой с ком-портом - эффекта ноль. Чисто внешне - приходит с Falcon-а пакет с ошибкой в контрольной сумме - при попытки записи на "устройство".. Вот уже начал думать, что, может - этот уарт на плате сбоит?
<Эксперименты с Falcon-ом, KDJ11-B, четырёхпортовкой и мултиконтроллером>
-
Продолжаю резку зависимостей и переделку внутренней структуры эмулятора. Переделал внутреннюю зависимость работы с файловой системой от конкретной реализации (читай - от конкретной ФС). Не могу пока сказать, насколько полностью, но прицел идёт - да-да - на ODS1 :) И появиться в RSX возможность работать с подмонтированной папкой :) Ну и как вишенка - автоматом - возможность распаковывать-упаковывать образы дисков (а потом и не только) RSX :)
Когда - пока не могу сказать - всё упирается в свободное время...
-
В DOS-11 в файловой системе (в отличии от XXDP) активней используются непрерывные файлы - по идее, ускоряется загрузка.
А у не непрерывных файлов (как и в XXDP) - интересная структура - первое слово блока файла - это номер следующего блока. То есть в каждом блоке всего 510 байт доступно пользователю.
Такое впечатление, что файловую систему MSDOS писали под впечатлением от DOS-11, но хоть догадались эту цепочку убрать из самого файла :)
Хотя, чему тут удивляться, если Windows NT проектировал Дэйв Катлер :) Возможно, разработчки того времени находились под сильным впечатлением от продуктов DEC :D Ну и как было не переманить архитектора из самого DEC :)
-
То, как пишется файловая система DOS-11 (а возможно и XXDP) на DT: (ака TU56) - это полный армаггедец. Учитывая, что TU56 (лента!) прикидывается устройством с блочным прямым доступом - что бы ускорить работу на нём - DEC реализовала возможность записи как в прямом направлении, так и в обратном, причём, записанное в обратном направлении надо и читать в обратном направлении, иначе слова (не байты!) будут идти с конца блока в его начало... И учитывая, что в DOS-11 (и в XXDP) есть понятие связанных (linked) файлов (это когда первое слово блока указывает номер следующего блока) - что бы подсказать, что следующий (который на ленте - предыдущий!) блок записан в обратном направлении (и читать его надо так) - номер следующего блока будет отрицательным (благо, блоков всего 576). Но пока это поймешь, читая доку... Позеленеть можно :D Плюс, в доке скромно так, со вкусом, для всех устройств характеристики ФС указаны десятичными числами, а вот для TU56 (Б!!!!) - восьмеричными. Не, DEC прямо жирным шрифтом указало, где десятчное, а где восьмеричное, но кто ж на эту грёбаную точку после числа обратил внимание... Так что перед тем как позеленеть - я успел посинеть :D
- - - Добавлено - - -
Зато теперь распаковщик принял и DT образы и даже правильно распаковал :)
Правда, функционл каталогов в файловой системе DOS-11 (в XXDP формально они тоже как бы есть - но используется только один каталог [1,1] - и его как бы нет - то есть XXDP его не кажет) ещё прога не разбирает (только первый, который обычно [1,1]), но.. лиха беда начало :)
Щас подсуну ещё DT образ от XXDP (если найду), посмотрю, что получится - и спааааать!!
- - - Добавлено - - -
Блин. DT-шный образ есть только от какой то типа первой версии XXDP и чего там и где - надо на свежую голову смотреть, но вроде как замечаны признаки обратной записи :(
-
Пока с образом первой версии XXDP не понятно. Знакомые места есть, картинка не складывается.
Занимательно про расположение блоков файла на DT:
Код:
# $VOLUM.INF - info about XXDP volume on TU56 device.
# Produced by XXDPFileSystem at 10-апр-2022 12:00:35
...
# File 0 SYSLOD.SYS (C) Data 15872/000037000 bytes, start block 1/000001 @ 0x200
# File 1 MONLIB.SYS Data 42496/000123000 bytes, start block 32/000040 @ 0x4000
32 36 40 44 48 52 69 73
77 81 85 89 93 97 101 105
109 113 117 121 125 129 133 137
141 145 149 153 157 161 165 169
173 177 181 185 189 193 197 201
205 204 200 196 192 188 184 180
176 172 168 164 160 156 152 148
144 140 136 132 128 124 120 116
112 108 104 100 96 92 88 84
80 76 72 55 51 47 43 39
35 37 41
Видно, что блоки сначала распологаются в прямом направлении, но после 204 направление меняется на обратное :) Ещё из занимательного - неинтерливный интерливинг - блоки идут через 4 - не всегда, но идея в том, что когда лента DT останавливается и стартует - то под головкой оказывается блок с номером +4 и изредка +5 от ранее прочитанного (и -4 или -5 при реверсе). Таким образом, если нужно прочитать следующий блок, то при таком выделении как раз есть хорошая (DEC в доках пишет - ОЧЕНЬ хорошая при правильной юстировке механики) вероятность, что это он и будет - ещё сокращается время доступа :)
В целом из серии - сначала мы создали себе проблемы, а потом успешно начали их преодолевать :) Ну учитывая, какой была тогда (это 1971 год!) комп техника и её стоимость.. Ну.. Не плохо, не плохо! :)
- - - Добавлено - - -
А, да, на следущем варианте этой лентопротяжке (TU58 ака DD) всех этих извратов не наблюдается :)
-
Уф... Прикол за прколом. Сижу я тут примерно с обеда (точнее - с утра, но плотно - с обеда) и туплю над образом диска DOS-11, снятым с RF11 (диск с фиксированными головками - всё что могу про него пока сказать). Вроде как есть знакомые места - а картинка не складывается. И вот минут 10-15 назад начинает нисходить на меня просветление.. Прикидываю, смотрю на данные, и...
ААААААААА, Б!, DOS-11 на RF11 работает с нативными блоками. А они у него, внезапно - 128 байт. Трындец.
Соотвественно - всю логику работы с блоками (в случае DOS-11 образов) нужно допиливать напильником с учётом этого. К сожалению, образов XXDP для этого диска не нашлось (или плохо искал) - пока сложно сказать - как оно тама будет - попробовать побаловаться под simh надо.
Из хорошего - пару-тройку дней назад подумалось мне, что всю работу с секторами нужно выносить из модулей работы с ФС.
Из плохого - понятно, что не всё в коде допилено в этом направлении.
Из хорошего - вот блин как же всё таки хорошо, что DEC не использует геометрию дисков в ФС (ну или я на это не налетал) - ибо ваще трындец бы был.
-
Два вечера плотно... И работа с образом на уровне блока. Образ диска RF c DOS-11 V09-20C, который по началу вынес мне мозги :)
Код:
# $VOLUM.INF - info about XXDP volume on RF11 device.
# Produced by XXDPFileSystem at 12-апр-2022 21:00:27
# Blocks on device
nblockcount=4096
prealloc_blocks_num=560
interleave=1
boot_block=0
monitor_block=10
# Master File Directory Var1: MFD1+MFD2
mfd1=1
mfd2=3
# Bitmap of used blocks:
bitmap_block_1=4
bitmaps_num=5
# User File Directory:
ufd_block_1=9
ufd_blocks_num=14
# File 0 BADB.SYS Data 128/000000200 bytes, start block 2/000002 @ 0x400
2
# File 1 MONLIB.CIL (C) Data 70400/000211400 bytes, start block 10/000012 @ 0x1400
# File 2 LINK.LDA Data 31616/000075600 bytes, start block 560/001060 @ 0x46000
560 561 562 563 564 565 566 567
......................
808 809
# File 3 PIP.LDA Data 15872/000037000 bytes, start block 810/001452 @ 0x65400
810 811 812 813 814 815 816 817
......................
930 931 932 933 934
# File 4 EDIT.LDA Data 6400/000014400 bytes, start block 1091/002103 @ 0x88600
1091 1092 1093 1094 1095 1096 1097 1098
......................
1139 1140
# File 5 MACRO.LDA Data 20352/000047600 bytes, start block 1258/002352 @ 0x9D400
1258 1259 1260 1261 1262 1263 1264 1265
......................
1418
# File 6 CREF.LDA Data 4864/000011400 bytes, start block 1419/002613 @ 0xB1600
1419 1420 1421 1422 1423 1424 1425 1426
......................
1451 1452 1453 1454 1455 1456
# File 7 SYSMAC.SML Data 13056/000031400 bytes, start block 1495/002727 @ 0xBAE00
1495 1496 1497 1498 1499 1500 1501 1502
......................
1591 1592 1593 1594 1595 1596 1597
# File 8 CL0.SYS Data 128/000000200 bytes, start block 1598/003076 @ 0xC7C00
1598
# File 9 CL1.SYS Data 128/000000200 bytes, start block 1600/003100 @ 0xC8000
1600
# File 10 CL2.SYS Data 128/000000200 bytes, start block 1601/003101 @ 0xC8200
1601
# File 11 CL3.SYS Data 256/000000400 bytes, start block 1602/003102 @ 0xC8400
1602 1603
# File 12 CL4.SYS Data 128/000000200 bytes, start block 1604/003104 @ 0xC8800
1604
# File 13 CL5.SYS Data 256/000000400 bytes, start block 1605/003105 @ 0xC8A00
1605 1606
# File 14 CL6.SYS Data 256/000000400 bytes, start block 1607/003107 @ 0xC8E00
1607 1608
# File 15 CL7.SYS Data 256/000000400 bytes, start block 1609/003111 @ 0xC9200
1609 1610
# File 16 LDUMP.LDA Data 14720/000034600 bytes, start block 1612/003114 @ 0xC9800
1612 1613 1614 1615 1616 1617 1618 1619
......................
1724 1725 1726 1727
# File 17 FORTRN.LDA Data 17408/000042000 bytes, start block 1728/003300 @ 0xD8000
1728 1729 1730 1731 1732 1733 1734 1735
......................
1864 1865
# File 18 FORCOM.DGN (C) Data 10752/000025000 bytes, start block 3540/006724 @ 0x1BA800
# File 19 FORRUN.DGN (C) Data 8192/000020000 bytes, start block 3476/006624 @ 0x1B2800
# File 20 TRCLIB.OBJ Data 5888/000013400 bytes, start block 1866/003512 @ 0xE9400
1866 1867 1868 1869 1870 1871 1872 1873
......................
1906 1907 1908 1909 1910 1911
# File 21 FTNLIB.OBJ Data 88192/000254200 bytes, start block 2565/005005 @ 0x140A00
2565 2566 2567 2568 2569 2570 2571 2572
......................
3262 3263 3264
# File 22 FORTRN.OVR (C) Data 60416/000166000 bytes, start block 3624/007050 @ 0x1C5000
Ежели мне не изменяет память, именно на ней я знакомился с програмированием на FORTRAN-IV и с компьютерами :) В принципе, программировать я начал примерно за два года с чем-то до этого - на Б3-34 :)
- - - Добавлено - - -
Ну что, Фортран в образе есть - можно вспомнить молодось :D
- - - Добавлено - - -
А, да, ещё из занимательного с этим образом - загрузочный блок у него - 128 байт :)
-
Вернулся к эмулятору TU56 и распаковщику образом. Между делом я его потихоньку причёсываю. После некоторых размешлений, решил всё таки сделать отдельными файловые системы XXDP и DOS-11 - несмотря на то, что по сути - одинаковые, некоторые отличия всё таки есть. Пока делаю вариант - основа - DOS-11, модифицированный вариант - XXDP. Посмотрим, насколько удачен этот вариант :)
-
Звездец :) Подложил себе с мультиконтроллером боНбу замедленного действа :) Из-за одного оператора, точнее его отсутствия (результат одной переделки, которую я потом в других модулях и PDP-2011 отменил, а вот в мультиконтроллере нет) - феерическая работа :) Из всего, что на нём было, с новой прошивкой работали только CF-ки, а практически всё остальное даже не откликалось :) Ну.. Поломав голову в выходные и сегодня вечером, до меня всё таки дошло - что не так. Так что теперь FALCON-ы попробую погонять в плане проверки работы с эмулятором TU58 на ненаплатном уарте. Не прям вот щаз, но теперь это стало реальней. А пока попробую посмотреть, как будет работать эмулятор TU58 на скорости 115200 и выше :)
- - - Добавлено - - -
Ну, в принципе, конечно, получше, но.. всё равно - так себе :) Попробую на большей скорости, но позже. Пока восстановлю полный функционал прошивки мультиконтроллера на обновлённых модулях :)
- - - Добавлено - - -
Ожидаемо - и это действительно ожидаемо :) нарушилась работа устройств с ПДП :) Но тут хоть понятно, что надо просто правильно подключить их к новому варианту корзины :) Завтра буду смотреть, что надо перекоммутировать :)
-
Начал добавлять поддержку (программного) интерлейса :) Пока проверено (проверяется) на распаковку и RT-11 - но уже неплохо, неплохо :)
-
RT-11, интерлив для RX01, RX02 и RX50, пока только в режиме - извлечение. Не скорректированы процедуры, которые пишут данные в образ. Но теперь, когда есть образец процедур чтения - это не сложно, но точно не сейчас :)
Ну и надо посмотреть на образы от XXDP.
Насколько я помню, ничего DOS-11 на таких дискетах у меня нет...
-
Из занимательного. Найдено на диске с исходниками RT
Код:
RT11SR.SYS 97. 1997-02-29
- - - Добавлено - - -
И там даже не один такой файл...
Код:
RT11SR.SYS 97. 1997-02-29
SBROL .CND 2. 1997-02-29
SBROL .ANS 6. 1997-02-29
SBROL .BLD 1. 1997-02-29
SBROL .MON 3. 1997-02-29
SBROL .DEV 2. 1997-02-29
SBROL .TBL 4. 1997-02-29
- - - Добавлено - - -
Код:
!SYSGEN Edit level = V05.14001
! SBROL.DEV Created 29-Feb-97 00:33:11
- - - Добавлено - - -
Имя COM1.COM - тоже неплохое :)
-
В процессе переноса TU58fs и (использующего его кодовую базу) ImageUtils в Shared Project общую кодовую базу. Из получаемых плюшек - избавление от повторов кода по всем моим C# проектам и возможность использовать модули работы с DEC ФС в других проектах - например, можно будет открывать в DisAsm-11 файлы программных модулей прямо в ФС образов диска - без распаковки. Ну и как прикол - сохранять результаты прямо туда же :)
Ну и некоторые наработки из других проектов (в первую очередь, из того же DisAsm-11) поедут в TU58fs и ImageUtils