Кроме CP/M работающей без дисковода странслировал и RKDOS работающую без дисковода. В качестве носителя используется дополнительное ОЗУ физически образуемое из двух банок 565 РУ7. К сожалению, в этой версии дополнительные банки не "целиковые", а именно, в каждой банке используется не все 64 кб, а только 48 кб.
Но в ближайшее время Pyk собирался составить конфиг для эмулятора EMU80, что обеспечивает в каждой банке 62 кб. При этом, естественно, ПЗУ в банках 1...7 отстутствует. Т.е при включении портом F9 банки 1 (или выше) в адресном пространстве 0...F7FF включается ОЗУ из банки 1, а ПЗУ в адресах C000...DFFF совсем изчезает. Это позволят в каждой банке выше 0-вой получить 62 кб полезной памяти и поиметь RAM-диск объёмом в 7*62= 434 кб, тогда как в том варианте, что используется сейчас RAM-диск имеет размер всего в 7*48= 336 кб.
Данная RKDOS имеет только один VDISK из ОЗУ и не имеет второго привода, т.е дисковода. Сама эта RKDOS тоже не стандартная. Она не нуждается во внешних SYS-файлах, хотя их поддержка из кода не удалена. В SYS-файлах нет никакой пользы, - их концепция интересна, но непонятно зачем.
SYS-файлы отличаются от COM-файлов только тем, что они являются как бы программами написанными только JR-командами, отчего могут работать в любой области памяти. Вот только зачем это надо для резидентной команды DOS ? Резидентная команда должна быть в коде DOS, а не в виде файла, пусть и работающего в любом месте памяти. Работать в любом месте памяти требуется только драйверам, загружаемым по RAMTOP, зачем это прикладным программам, а тем более командам DOS ?
Делать программы в виде SYS-файлов совсем несложно, а вот получать из них исходники - это морока. Ведь перед тем, как сделать переход, программа с помощью специальной функции DOS узнаёт в каком адресе она находится и затем выполняет переход на нужный адрес с помощью цепочки команд ADD HL,BC : JP (HL) или, если переход условный, то ADD HL,BC : PUSH HL : RET FLAG. При разработке программы расчёты делает ассемблер, а вот при дизассемблировании приходится считать эти смещения вручную и разобраться в программе намного сложнее.
Да и неудобно иметь команды DOS в виде внешних файлов. В данной версии не нужны файлы LOADA.SYS, ATTRIB.SYS, ERASE.SYS и RENAME.SYS. Вместо них в DOS просто есть команды LOAD, ATTR, DEL и REN. Синтаксис полностью идентичен внешним SYS-командам. При желании, естественно, можно пользоваться и внешними SYS-файлами.
Внешние файлы RKDOS служащие для обслуживания BAT-файлов, для копирования и восстановления удалённых файлов, т.е COMMAND.COM, COPY.COM и RESTORE.COM также было бы несложно перенести в код DOS. RESTORE (который правильно называть RECLAIM) нужен редко, а COPY и COMMAND не такие маленькие как SYS-файлы, а по ~500 байт каждый, отчего с ними код DOS сильно разбухнет. Потому не уверен, что это стоит делать.
Ещё мне не нравится использование в качестве разделителя в командах DOS запятой вместо пробела. Собираюсь это исправить. Но в итоге объём кода увеличится до 6 кб даже без дисководных подпрограмм, а в версии для дисковода аж до 7 кб. В итоге решающее преимущество RKDOS (малый объём кода) теряется, быстро приближаясь к размеру кода CP/M.




Ответить с цитированием