Просмотр полной версии : Эмулятор CPM, text only
Error404
11.06.2019, 18:20
(я про CPM32_04)
Там при сборке генерится файл em180.asm (если его не было). Вот там и .... самый форменный =/
Попробую найти АСМ, который скомпилит его...
Я сейчас по-другому сделал. Заменил оригинальный АСМ-движок Z80 ядром Z80 на C (2 файла) из этого проекта что рекомендовал mastermind :
https://github.com/MockbaTheBorg/RunCPM - этот эмулятор не годится? Он уже кросс-платформенный, ничего допиливать не надо.
Работает. Конечно, помедленнее чем версия на ASM. Но зато теперь нет преград andreil для портирования на Линупс ибо никакого ASM, pure C only (кстати, я бы тоже поюзал когда будет результат). Сам пока не стал - там надо заморочиться с консолью, как бы не ncurses придется заюзать чтобы портануть 1:1 (ибо позиционирование курсора и т.п.).
На винде проверял на ядре Юзикса. Собирает бинарник 1 в 1 с тем, что выпекает исходный вариант мастера Мураками. Получившееся положил пока что тут (исходники):
https://github.com/serge-404/CPM32
Собирал в Borland C Builder 5 (удобно жеж: отладка, GUI - вот это вот всё). Планирую пару мелких усовершенствований чуть погодя, раз уж под рукой теперь есть рабочий проект.
Error404
13.06.2019, 23:08
Планирую пару мелких усовершенствований чуть погодя, раз уж под рукой теперь есть рабочий проект.
Слегка увеличил TPA до 59.75к (т.е на 256 байт). BDOS теперь начинается на 0FF00h а BIOS на 0FFCAh. Да, дистанция от BDOS до BIOS теперь не кратна 256 байтам, но сохранять эту древнюю традицию времен CPM 1.x не считаю нужным - за всю практику мне попадалось только одно кривое приложение, считающее высоту BDOS/BIOS по регистру H (т.е. кратно 256), остальные делают грамотно - по полному 16-битному значению ячеек (1-2) и (6-7). В принципе, можно еще сотню байт добавить в TPA вычистив пустоты между буферами BDOS, но это уже будет "лучшее враг хорошего".
Добавил частичную (для наиболее распространенных кодов) поддержку орионовской разновидности VT-52. Теперь экранные CP/M-приложения с позиционированием курсора и очистками строк/экрана работают как надо, а не кашей символов:
1.
https://i.ibb.co/vB8SYyq/lzx.png (https://ibb.co/ZJC0m4X)
2.
https://i.ibb.co/4mbYHwP/sed.png (https://ibb.co/WxrPLNg)
.
Актуальное залил на GIT. Прикинул объем переделки под Линпус - приличненько, не зря andreil прячется.
Error404
15.06.2019, 14:07
Добавил в cpm.exe поддержку KOI8, с псевдографикой. Конечно, мелочь, а приятно. :)
https://i.ibb.co/CVbZZ5K/Screen-Hunter-02-Jun-15-14-05.gif (https://ibb.co/mh9wwC5)
Пока не придумал как поддержать в консоли Винды включение и выключение инверсии символов для VT52. То, как оно было сделано у Мураками, в современных консолях Винды (W7...W10) не работает (хотя в доках не пишут как такое может быть).
Error404
22.06.2019, 00:46
Добил инверсию, еще будет часть кодов Robotron-1715 эмулироваться (т.к. на Орионе было прилично софта от Роботрона, работало через драйвер-транслятор).
Также, почти готова версия для Линукс (ну как для Линукс, оно же и для Винды - на дефайнах компилируется из общего исходника) - набит и отлажен код, на чтение уже работает, осталось чуть поднажать.
Подумываю на основе этого сделать текстовую эмуляцию Ориона - добавить страницы памяти и порт F9, без графики (консоль - клавиатуру и текст - перехватывать на обращениях к определенным подпрограммам как и было сделано у Мураками для эмуляции CP/M).
https://i.ibb.co/XsSQSPZ/CPM32.png (https://ibb.co/XsSQSPZ)
- - - Добавлено - - -
Ну, типа чтобы Юзикс работал в этом текстовом окошке
Error404,Вот еще эмулятор СРМ. Работет и под Linux.
Я для себя переделал для I8085 вместо Z80.Работает с консолью.
Error404
22.06.2019, 12:53
Error404,Вот еще эмулятор СРМ. Работет и под Linux.
Я для себя переделал для I8085 вместо Z80.Работает с консолью.
Отлично. Наши разработчики UZIX теперь будут иметь обширный инструментарий. Вот только все попрятались. :)
Тем не менее я все же доделаю версию эмуля Мураками для Линукса, т.к. он ориентирован на Hitech-C (в частности обработка статусов завершения чего нет в оригинальной CPM 2.2, но есть в самом компиляторе и оно нужно для пакетной обработки). Потом сравню обе версии, главный критерий - компилируемость UZIX (не код же сравнивать - там наверчено у обоих, причем эмуль из вложения вроде посложнее смотрится). Компиляция UZIX задает нативной CPM-версии Hitech-C и эмулятору передельные нагрузки по ресурсам, которые вывозит далеко не каждый эмулятор CPM.
Есть и более далеко идущие планы: когда версия эмуля CPM для Linux будет полностью готова, я вкручу ее в сам UZIX (уже имеющийся ассемблерный эмуль уступает по возможностям) - там он будет запускать код CP/M (т.е. имитировать BDOS/BIOS, оставляя всё ОЗУ ТРА) в дополнительной целой 64к странице. Этим получим "UZIX собирает UZIX", что сейчас вообще ни один 8-битный юникс клонов UZI пока еще не делает.
Error404
04.07.2019, 19:45
В-общем, эмулятор для линупса испёк. Hitech С работает, псевдографику, спецрежимы символов, эмуляцию экрана ROBOTRON1715 и Kaypro тоже вроде как-то впилил.
Осталось допилить makefile для UZIX и далее будет стресс-тест. :)
Неприятно удивило, что правила makefile написанные под виндовозный make (который вообще-то тоже GNU) не работают под линупсом (и тамошний make говнит, утомил).
В-общем, эмулятор для линупса испёк. Hitech С работает, псевдографику, спецрежимы символов, эмуляцию экрана ROBOTRON1715 и Kaypro тоже вроде как-то впилил.
Осталось допилить makefile для UZIX и далее будет стресс-тест. :)
Неприятно удивило, что правила makefile написанные под виндовозный make (который вообще-то тоже GNU) не работают под линупсом (и тамошний make говнит, утомил).
Всё нормально там написано.
Проблема только в Windows-API, растущем везде и отовсюду ;) В *NIX нет функций _splitpath, _makepath, _searchenv - надо переписывать места с их использованием.
И ещё - в линуксе пути регистрозависимы, так что путь, используемый в функции load_program, некорректен. Там сперва проверяется доступность файла, потом его имя и путь приводятся к верхнему регистру:v2_dizzy_facepalm:
Error404
04.07.2019, 21:33
Всё нормально там написано.
Проблема только в Windows-API, растущем везде и отовсюду ;) В *NIX нет функций _splitpath, _makepath, _searchenv - надо переписывать места с их использованием.
И ещё - в линуксе пути регистрозависимы, так что путь, используемый в функции load_program, некорректен. Там сперва проверяется доступность файла, потом его имя и путь приводятся к верхнему регистру:v2_dizzy_facepalm:
Это все сделано уже, думаешь чем я тут столько времени занят? :) И консоль в т.ч. (которая в оргинале тоже вся Винда-платформеннозависимая), там тоже пришлось подумать и погуглить т.к. для BIOS CPM нужен небуферизированный ввод-вывод на консоль и просто линуксовый putchar/getchar не проканает. Мулятор который на git (https://github.com/serge-404/CPM32) уже содержит в cpm.c код для обоих ОС (Win/Lin). Я про другое спрашивал - про makefile для сборки уже самого UZIX, который ты как пишешь тут (https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=981710&viewfull=1#post981710) у тебя уже переделанный под Линукс есть. Это сэкономит мне пол дня как минимум, что по нынешним временам немало.
Error404
05.07.2019, 17:01
В-общем, эмулятор причесал, Hitech C собрало UZIX под эмуляцией на Linux. Цель номер один (эмуляция CP/M) достигнута.
Далее попробую впилить в этот эмуль дополнительно включаемый режим эмуляции АльтаирДОС (т.е. неполный Орион - без графики), чтобы можно было под Линукс "не отходя от кассы" запускать в эмуляции UZIX.COM (ядро Юзикса, которое есть CP/M приложение, но оперирующее страницами ОЗУ через орионовский порт F9). Но в отличии от, работать оно будет уже не с локальными файлами, а с образом, т.к. эмулировать ФС Юзикса из локальных файлов шибко геморно ИМХО т.к. там отстуствует какой-то уровень абстрагирования, а устроено оно сложнее CP/M.
Нашел еще один продвинутый эмулятор. RunCPM.
RunCPM is an application which can execute vintage CP/M 8 bits programs on many modern platforms,
like Windows, Mac OS X, Linux, FreeBSD, MS-DOS, Arduino DUE and variants, like the Teensy or ESP32.
It can be built both on 32 and 64 bits host environments and should be easily portable to other platforms.<br>
RunCPM is fully written in C and in a modular way, so porting to other platforms should be only a matter of
writing an abstraction layer file for it. No modification to the main code modules should be necessary.
Error404
23.09.2019, 18:52
Нашел еще один продвинутый эмулятор. RunCPM.
Я из него движок Z80 использую (https://zx-pk.ru/threads/30597-emulyator-cpm-text-only.html?p=1016250&viewfull=1#post1016250). :) \
И очень не хватает в нем растактовки опкодов процессора (чтобы корректно впилить эмуляцию прерываний).
А эмулятор BIOS CP/M использую от CPM32.EXE Мураками, который пришлось адаптировать к Linux (оно теперь собирается там и там).
Вот такой гибрид ужа и ежа.
И конечно, лучший эмулятор - который сам под себя запилишь. Во взятых с инета какие-то недоделки всегда, вот из последнего - допилил русские буквы в Линуксе в эмуляции KOI8.
очень не хватает в нем растактовки опкодов процессора (чтобы корректно впилить эмуляцию прерываний).
Когда я писал свой эмулятор CP/M, я использовал libz80ex от boo_boo. Там такты считаются.
https://zx-pk.ru/threads/2464-liba-dlya-emulyatsii-z80-v0-1.html
Есть еще некий ZXCC (https://www.seasip.info/Unix/Zxcc/) и его порт под венду (https://github.com/Tbxxx/zxcc-windows) . Я это не смог заставить работать - при запуске zxcc.exe <имяфайла.com> ничего не происходит.
В итоге пользуюсь RunCPM - все хорошо, кроме нереальной скорости выполнения (и похоже, не возможности эту скорость принудительно занизить).
Error404
23.09.2019, 21:53
Когда я писал свой эмулятор CP/M, я использовал libz80ex от boo_boo. Там такты считаются.
https://zx-pk.ru/threads/2464-liba-dlya-emulyatsii-z80-v0-1.html
Спасибо, будем посмотреть.
- - - Добавлено - - -
Есть еще некий ZXCC (https://www.seasip.info/Unix/Zxcc/) и его порт под венду (https://github.com/Tbxxx/zxcc-windows) . Я это не смог заставить работать - при запуске zxcc.exe <имяфайла.com> ничего не происходит.
В итоге пользуюсь RunCPM - все хорошо, кроме нереальной скорости выполнения (и похоже, не возможности эту скорость принудительно занизить).
А зачем в СР/М занижать скорость? На ум приходят только ASCII-игры.
А зачем в СР/М занижать скорость? На ум приходят только ASCII-игры.
Ну, в том числе.... Просто вон давеча игрушку 2048 (https://zx-pk.ru/threads/29372-ayusha-z80-sr-m-sovmestimyj-kompyuter.html?p=1027581&viewfull=1#post1027581) скомпилил, тестил в RunCPM. Все вроде красиво и хорошо. А на реальной борде по другому выглядит. Скорость отрисовки... Фиг знает, но я бы хотел иметь опцию в эмуляторе что-то типа CPU_CLOCK=4000000 или CPU_CLOCK=MAX
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot