Как я уже говорил, в исходном Uzix CPM-эмулятор линковался к каждому CPM-файлу, причем неперемещаемо, отчего ВСЕ файлы были размером 47к. И что бы запустить еще какой-то новый CP/Mфайл, его надо было таким же образом слепить с эмулятором получив 47-килобайтный гибрид. Коряво, вы скажете, и будете правы!Поэтому я всё переделал. Теперь эмулятор отдельно, а котлеты{зачеркнуто} CP/M-файлы отдельно (и их вообще не меняем, достаточно их тупо скопировать на файловую систему Юзикса и дать права на исполнение).
Как всё работает:
при старте приложения (вызов execve() ) Юзикс проверяет атрибут "исполняемый файл", байт 0C3h в первом байте кода файла (для всех), и имя файла на наличие 3-символьного расширения. Исполняемые бинарные файлы с 3-символьным (строго 3) расширением считаются файлами эмулятора и одновременно с загрузкой исполняемого файла в озу процесса, ищется грузится и эмулятор /usr/lib/emu.* (у эмулятора расширение ставится такое же как у исполняемого файла этого типа!). Т.е. для исполняемых файлов CP/M (у которых расширение .com) это будет /usr/lib/emu.com.
Файл эмулятора в первых 6 байтах содержит:
- сигнатуру "E",0C9h (0C9h чтобы при попытке выполнить его самостоятельно {а не запуском файла с нужным расширением} сразу происходил RET)
- адрес загрузки в пространстве запускаемого процесса
- стартовый адрес куда передается управление после загрузки исполняемого бинарника и бинарника эмулятора (обычно этот адрес внутри эмулятора).
Эмуляторов (и эмулируемых окружений) может быть несколько и эмулятор указывать не надо, достаточно давать бинарям с других платформ соответствующие 3-символьные расширения в именах файлов (ну и конечно иметь нужный эмулятор в /usr/lib/).
Пример запуска:
sed.com text.txt # запустятся sed (на редактирование файла text.txt) и эмулятор CP/M /usr/lib/emu.com
game.spc # запустятся игра и эмулятор Специалиста /usr/lib/emu.spc
Поправленное - во вложении (и на GIT). Сегодня уже поигрался в King, Ladder ну и конечно же sed. Как добавить: ядро uzix.com кладем в образ в юзер0 вместо старого, остальное, предположим, в юзер 4 (диска С). А далее (внимательнее: первый get, затем все bget):
idebdos {или idebdos sd}
ucp 2:
UCP>
UCP> cd /usr/lib/
UCP> get 4:c:liberror.txt
UCP> bget 4:c:emu.com
UCP> chmod 744 emu.com
UCP> cd /bin
UCP> bget 4:c:king.com
UCP> bget 4:c:ladder.com
UCP> bget 4:c:ladder.dat
UCP> bget 4:c:sed.com
UCP> bget 4:c:sed.hlp
UCP> chmod 744 king.com
UCP> chmod 744 ladder.com
UCP> chmod 744 sed.com
UCP> exit
uzix 2:
- - - Добавлено - - -
А вот кстати вопрос. Какие интересные 8-битные платформы проца 8080/Z80, работающие через некую документированную керналь вызовов (т.н. "Монитор"), можно эмулировать в случае с Юзикс где свободное ОЗУ с 0000 (строго говоря с 0100H, но можно и с 0000) до 0E800h т.е. низшие 58кб? Вызовы в верхние 6кб недопустимы, т.е. отпадают РК-86 и Ордосовское от Ориона (т.к. эта недосистема не содержит в себе кернали для вывода на экран и ввода с клавиатуры, и всё ордосовское ПО лезет за этим прямо в МониторF800). Идеально получается CP/M (что уже сделано), и наверное Специалист с его ПЗУ Монитора с 0С000h (вроде) эмуляцию которого можно попробовать сделать. А что еще?





И оно заработало, я сам в шоке.
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
