![](http://www.nedopc.org/nedopc/image/nedobanner3.gif) |
nedoPC.orgElectronics hobbyists community established in 2002 |
![](http://www.nedopc.org/nedopc/image/nedobanner4.gif) |
|
Page 1 of 1
|
[ 4 posts ] |
|
EMU80, дискетные ДОС и продвинутые возможности
Author |
Message |
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
Сначала хочу отметить, что EMU80 отличный эмулятор, по крайней мере для Специалиста, ОРИОНА и РК86 и для их стандартного железа и их стандартного массового ПО. EMU80 поддерживает даже загрузку WAV-файлов и дисководы (хотя логику смены дискет можно улучшить). Дисководы для ОРИОНА и РК86 нормально эмулируются (по крайней мере в массовых для них форматах 800 и 400, другие я ещё не проверял). Не менее ценно наличие в EMU80 конфигов, что позволяет делать аппаратные доработки буквально "лишь взмахом пера", точнее "стуком по клавишам". В EMU80 это может быть и чуть-чуть посложнее, чем в EMU, но при наличии советов от автора, и самостоятельно экспериментируя, несложно разобраться. Таким образом мне удалось поиметь конфиг дающий Специалисту расширение архитектуры, примерно такое же как в Специалисте-MX, но без вредной смены адресации и более совместимое (в том числе и с ОРИОНОМ). В железе это делается так. С помощью двух диодов делаем, чтобы кусок ПЗУ C800 из адресов C800...C8FF читался в окне F800...F8FF (это идея совместимости с РК от КООП SP-580 из 1988 года). Тогда сделав некоммутируемым ПЗУ участок F800...F8FF, в этом окне F800...F8FF будет в любой банке читаться ПЗУ с типовыми подпрограммами F836/39, предназначенными, чтобы с их помощью из банки 0 лазить в другие банки ОЗУ с целью считать/записать байт. Два диода нужны лишь когда ПЗУ на РФ2. В случае ПЗУ 27256 ещё проще (диоды не нужны, т.к не нужна переадресация с C800), читается ПЗУ по реальным адресам. Старым портам Специалиста F900, FA00... FE00, FF00 два диода служащие для получения области ПЗУ в окне F800...F8FF не мешают. Порты F8, F9 и FA разумно использовать лишь под OUT-порты, т.е системные регистры. Например, порт F9 годится под порт коммутации банок, а порт F8 годится для включения/выключения волковского 2-х битового цвета. Такая простая доработка даёт нечто близкое к архитектуре ОРИОНА (отличие лишь, что банка в 62К, вместо 60, экран в другом месте и матрица клавиш другая). Этим решается задача поиметь большой VDISK. Он полезен не только как собственно диск для работы программ, а он нужен, чтобы с его помощью отлаживать дискетное и винчестерное системное ПО. Кстати, наличие эмулятора существенно упрощает написание дискетного ПО. В реале это морока, отнимающая очень много времени. Я бы оценил, что для дискетного ПО эмулятор упрощает разработку на порядок (для недискетного ПО в несколько раз). Для коммутации банок, также аналогично ОРИОНУ, используется OUT-порт F9 (зачем менять, пусть будет совместимость). Это не создаёт проблем, т.к OUT-порт только на вывод, а ПЗУ F800...F8FF только читается. Чтобы в банке 0 (где экран с 9000) тоже не пропадало 14К и, чтобы можно было при желании коммутировать банки не в окне 62К, а лишь в окне 48К (что аппаратно делается намного проще, один TTL-корпус) вводится доп.бит управляющий областью C000...F7FF (чего нет в порту F9 ОРИОНА). Для этого бит D7 порта F9 отключает/включает ПЗУ Специалиста в окне C000...F7FF, т.е позволяет "открыть" под-ПЗУ-шечное ОЗУ в области C000...F7FF. Т.е выводя в порт F9 номер банки с битом D7=1 заданная банка включается лишь в окне 0000...BFFF, т.е не только порты, но и ПЗУ остаётся. Так даже при единственной банке РУ5-тых добавляется 14 кб ОЗУ (но ПЗУ при таком открытии ОЗУ уже нет в адресном пространстве). Это не лучший вариант использования под-ПЗУ-шечного ОЗУ, т.к более ценится большое сплошное ОЗУ, а в Специалисте с одной банкой посередине маячит экран с 9000. В соответствующей теме в разделе Специалиста (когда там будет исправлена модерация) я выложу подробности и иллюстрирующую картинку. Эта тема о другом. Здесь я хочу выложить сам конфиг и версию EMU80, которая реализует такую расширенную архитектуру, а также выложить SDI-файлы для какой-нибудь ДОС для Специалиста. С КНГМД на ВГ93 проблем нет, тут достаточно переименовать KDI или ODI в SDI, даже менять системную информацию в BOOT-секторе не надо, т.к системная информация в дискетах Корвета, ОРИОНА и Специалиста совпадает. Но вот с РК-КНГМД пока есть проблемка. Не эмулятора, а образа диска. Дело в том, что РК-ДОС использует сектора с нумерацией начинающейся с 0, а эта информация записывается в байтах для посекторной синхронизации. А в CP/M нумерация секторов начинается с 1. Нужна дискета с секторами с 1. Я попытался это обойти программно, но с ходу не вышло. Надо писать тесты и попытаться понять в чём дело. Раз сам РК-КНГМД эмулируется со свистом, то проблема решаема. Можно было бы использовать эмулятор для разработки программ в среде CP/M. Включив в эмуляторе полноэкранный режим мы редактируем исходник в редакторе SuperText, а затем включив турбо-режим транслируем программу компилятором (например Си, Паскаля, ассемблера или PL/I). Это ничем не отличается от реала, только намного удобнее и лучше. В реале компиляция на дискетах реальных (т.е больших) программ длится многие минуты, особенно при компиляторах ЯВУ. Если бы в EMU80 была команда включить/выключить турбо-режим, то я бы без сомнения так и делал бы. SUB-файлом перед запуском компилятора программка TURBO включает турбо, а по завершении трансляции запускает программка NOTURBO выключающая турбо. В турбо режиме вводить команды с клавиатуры не получается, т.к происходит бешенный автоповтор. Зато эмулируется максимальный клок Z80, что м.быть намного более 200 МГЦ. Но увы, ни в EMU от b2m, ни в EMU80 от Pyk нет встроенных функций, т.е команд доступных из программы 8-ми разрядки.
В моём эмуляторе ОРИОНА для MSDOS есть десятки команд доступных Z80-программе в эмуляторе. Например, есть функция считать системное время IBM PC, что существенно упрощает написание бенчмарков (не надо сидеть с секундомером засекая время). На 386-той можно было из эмулятора читать реальные дискеты в формате CP/M вставленные в дисковод PC (на более современных PC дисковые процедуры низкого уровня перестали работать, там вообще отсутствует БИС 8272).
Даже возможность узнать, что программа работает в эмуляторе полезна. Например, в любой текстов редактор легко встраивается заплатка, которая приводит к тому, что хотя исходно клавиши соответствуют клавиатуре 8-ми разрядки (и надписи на PC-клавишах во многом не соответствуют), но заплатка конвертирует коды от CP/M процедур CONIN так, что все надписи во всех регистрах точно соответствуют PC-шной клавиатуре.
В общем, думаю, что уже пора разархивировать из архива редактор SuperText и искать в папках с ретро-доками, его отпечатанный на принтере DOC-файл в 300 страниц. Я провёл в SuperText-е более 5 лет (пока не сделал эмулятор ОРИОНА и не смог перенести и написание и отладку на 486-тую PC). И после перехода на PC долго жалел о SuperText-е, пришлось привыкать к MultiEdit 7.0. EMU80 при эмуляции использует файлы формата ODI, что аббревиатура от ORION DISK (хотя и для MX-специалистовских образов сдуру заимствовали это же расширение для имени файла образа, хотя они совершенно левые и не читаются SteinBlume). Это просто посекторное чтение секторов впритык (а вот образ диска для РК-КНГМД сложнее, там процессор сам считывает межсекторные GAP-ы, данные служащие для идентификации секторов и обнаружения начала сектора). Обычно реальные дискеты считывают Теледиском в файлы TD0, а затем с помощью SteinBlume конвертируют в ODI. У меня есть более сотни дискет 8-ми разрядок, но ни одну не перевести в ODI. Во-первых, для теледиска годится максимум Windows 98 (лучше MSDOS 3.30...6.22), а во вторых компьютер той эпохи. А главное все мои диски даже считанные теледиском не конвертируются. Конвертируются только диски одного формата 780/800. А я такой формат почти не использовал. Даже в формате DD, каталог имел не на 4-й дорожке, а на 2-рой или 1-вой, и не 80, а 83 физических трека. Но больше было дискет на 1300...1600 кб на диск. Они не считываются ни теледиском, ни медиамастером. По счастью многие свои исходники я уже давно перенёс на винт PC. Сами COM-файлы я обычно не храню (зачем, если не используешь), наличие исходника позволяет при потребности их странслировать. Несколько ODI-файлов я нашёл в форумах в выложенных чужих архивах и использовал как болванку для записи на их системные треки разных версий CP/M и других DOS. Начал использовать полученные ODI и резко обломился. То работает, то непонятные проблемы. Потратив десяток часов впустую наконец разобрался. Оказывается в эмуляторе есть ошибка в логике установки дискет. А именно, если мы дискету, что уже конфигом или вручную установлена в привод B: ставим в привод A:, то дискета не снимается с привода B: автоматически, что логично, а остаётся там. Т.е одна дискета как бы раздвоилась. В результате, при попытке работать с дисками я постоянно видел какое-то обидное сообщение. Обычно инсталлируют новые системы так. Загружаемся с дискеты на которой собрана куча SG-файлов. В привод B: конфигом ставим целевой диск. Запускаем SG с дискеты A: и записываем систему на диск B:. Затем в эмуляторе я жму на АЛЬ+A и ставлю проинсталлированную дискету в привод A:, а затем жму на АЛЬТ+F11, что имитирует кнопку СБРОС. Т.к в ROM-диске сделан автостарт дискетного загрузчика, то начинается загрузка и происходит завис... А я знаю, что инсталляторы DOS исправны. А когда делал инсталяцию на диск A:, то всё работало без проблем. А ещё часто с непривычки (давно не имел дисковода на ОРИОНЕ) путался с версиями DOS у которых привод A: эл.диск. Тогда иногда зависало, иногда нет, но на образ ODI естественно ничего не писалось, это ещё добавило путаницы. Но в итоге разобрался. В общем вот такая мелкая недоработка есть в смене дискет в EMU80 (по крайней мере в версиях, что до марта 2018, когда автор перевёл эмулятор на библиотеку QT). Ещё неудобство в отстутствии индикации дискет. Возможно в новых версиях это исправлено, но в той версии EMU80, что пользуюсь я (02.2018), нет индикации какие дискеты уже стоят в приводах (это было бы реально полезно видеть в окне выбора ODI-файла). Конечно возможно, что в новых версиях и это исправлено, но непривычно, что нет индикации лампочки на дисководе, когда он выбран и колесо крутится. Для эмулятора это даже более важно, т.к неизвестно завис или дисковод читает. В эмуляторе Amiga, я видел, что там отображают даже трек и сектор, который читается. Ещё можно сделать в КНГМД поддержку HD-бита системного регистра F720. При записи туда 1, переключается кварц в 8 МГЦ на 16 МГЦ и можно работать с HD-дисководами. Для эмулятора это не обязательно, потому что какую емкость дискеты я себе "нарисую" в BOOT-секторе образа диска, столько и будет (например, кто мешает сделать 255 дорожек и 16 секторов. Хотя сколько максимум секторов в треке поддерживает ВГ93 не знаю (может тоже 255), но 16 точно поддерживает, столько в TR-DOS. В эмуляторе, если DOS выставила в КНГМД бит-HD, то должны считываться только образы дисков с размером более 830 кб. Кстати, если иметь больше дорожек или секторов, то все ДОС ОРИОНА, кроме рассчитанных на HD-формат успешно глюкнутся, т.к у них буфера рассчитаны всего на 800К (некоторые даже при всего 830К виснут). Ну и конечно же не хватает поддержки порта FA. Бит D7 в нём должен включать расширенный экран 480 или 512 точек (конкретно это должно задаваться в конфиге). Т.е если бит D7 в порту FA =1, то экран расширяется, и не просто вправо, а центруется. А если выставлен и бит D7 и бит D6, то включается экран 448 (так надо, чтобы была совместимость). На экран 448 драйвер D7 выводит 64 символа шрифта 7*10. Вполне приличный шрифт для скромной текстообработки. По всему конечно ширина в 512 лучше, чем 480. Но на советских телевизорах влезает лишь 448 точек. Чтобы влезало 480 точек надо менять кварц 10 на 10.5 МГЦ. А для 512 точек надо менять кварц на 11.5 МГЦ. Не зря же в Векторе кварц 12 МГЦ. Для программ разницы нет (в драйверах при перетрансляции меняется один параметр SHIRST - ширина строки экрана в байтах). Все программы на 480, не используют 1 кб выше экрана, зачерняя его. Потому можно визуально видеть экран 512, просто картинка будет чуть не по центру. Т.к есть соответствующие программы ОРИОНА/Специалиста надеюсь, что можно сделать поддержку любых физических форматов ВГ93. В частности, формата MSDOS. Для ОРИОНА есть читалки дискет MSDOS. Например, MS-Commander С.Коровкина выполняет фунцию LORD-а (для обмена между ORDOS и дискетой), но использует дискеты формата MSDOS. Если ВГ93 в EMU эмулируется точно, то можно будет работать с образом дискеты MSDOS в формате 720 кб. Для этого достаточно создать файл заполненный кодом E5 (или тем, чем форматёры MSDOS заполняют сектора при формате) и записать в образ 720К BOOT-сектор с параметрами дискеты MSDOS. У меня тоже есть DOS с дискетами на формат 512 байт, проверю позднее. А ещё в EMU80 мне лично нужна эмуляция мыши от Корвета, т.к она у меня есть. Это вот такая мышь, называемая "Манипулятор ММ-8031". Паять контроллер PC-мыши пока нет смысла, потому для начала хочу использовать эту. Она имеет параллельный вывод и её обслуга программно проста. При желании можно на микроконтроллере или на простом МП-ядре с Z80 сделать конвертор в такой интерфейс обычной PS/2 мыши. Это будет не сложнее, чем трахаться с 580 ВВ51, ВИ53 и 170УП?? и прерывания не нужны. Сейчас у меня нет под рукой документации, а детали интерфейса мыши помню лишь смутно, это не важно, драйвер отлажу потом в реале. Чтобы начать программировать достаточно, чтобы EMU80 по перемещениям PC-мыши клал в заданные ячейки ОЗУ два или три байта - задающих смещения по горизонтали/вертикали и нажатия кнопок. Бит D7 в двух байтах задаёт направление влево-вправо, вверх-вниз, а биты D0...D3 задают на сколько пунктов было смещение. Третий байт в двух битах содержит информацию о двух кнопках (кнопки читаются через порт напрямую). Эмулятор должен отслеживать мышь и класть байты в ОЗУ. Как только 8-ми разрядный процессор выдаст строб сброса мыши, то отсчёт смещений начинается заново.
|
23 Nov 2019 04:50 |
|
![](./styles/getaway/theme/images/spacer.gif) |
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | Code: Файл specbars.conf реализует следующую конфигурацию:
0000-F7FF - страницы коммутируемые портом F9. В странице 0 RAM лишь до C000 (см.ниже), 1-15 - всё RAM
F800-F8FF - по чтению - начало ROM, по записи - выбор страницы ROM (биты 0-2), если D7=1, то C000...F7FF RAM.
F900-F9FF - запись. Выбор страницы памяти биты 0-3. Аппаратное включение подачи импульсов 50 Гц на вход INT - бит 7 FB00-FBFF - контроллер по схеме РК-КНГМД FC00-FCFF - контроллер ОРИОНА (FC00...FC03 ВГ93, FC04/FC20 рег.упр) FE00-FEFF - ППА ROM-диска FF00-FFFF - ППА клавиатуры
В странице 0:
0000-BFFF - RAM страницы 0 C000-DFFF - если F800/D7=0 - ROM (8 страниц ПЗУ по 8К), если F800/D7=1 - RAM страницы 0 E000-F7FF - RAM страницы 0
На диапазон F800-F8FF в странице 0 отображается начало ROM C800, причём в соответствии с выбранной портом F800 страницей ROM.
Бит 7 порта F900 включает периодические прерывания частотой 50 Гц на RST 7, точнее при установке этого бита в 1 на вход INT CPU проходят импульсы сформированные из переднего фронта кадрового бордёра.
По аппаратному сбросу номера страниц ОЗУ и ПЗУ устанавливаются в 0.
Для эмуляции КНГМД от ОРИОНА следует раскомментировать строки, начинающиеся с:
FdImage diskA = diskA.filter = orionFdc.fdImage =
и закомментировать аналогичные строки, относящиеся к контроллеру РК-НГМД рядом. Аналогично - для диска B.
| ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
Last edited by barsik on 26 Nov 2019 08:14, edited 3 times in total.
|
25 Nov 2019 22:21 |
|
![](./styles/getaway/theme/images/spacer.gif) |
gdv2002
Fanat
Joined: 22 Mar 2018 20:46 Posts: 52
|
А можно простым языком и покороче, что в сущности дают ваши наработки? Вот к примеру в эмуляторе реализована эмуляция работы с магнитофоном (Орион, Радио-86РК...), со звуками и долгой записью-считыванием, все как на магнитофоне. Хотелось-бы иметь такую же эмуляцию дисковода, полноценную, чтобы к примеру создать свою "дискету" или отредактировать-изменить программы в существующем образе, и вывести это на винт тоже в виде готового образа. Как к примеру в железе реализовано в ZXM-Phoenix, когда можно в виртуальный диск загрузить образ ТР-ДОС, поизгаляться с ним и сохранить.
|
25 Nov 2019 22:36 |
|
![](./styles/getaway/theme/images/spacer.gif) |
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
Это не наработки, наработки это программы. А чтобы чуть изменить архитектуру, чтобы сделать её поудобнее, - труда и даже много ума не надо. Как это сделать аппаратно очевидно любому, кто в 80-тые годы читал журнал Радио с описанием работы микросхем TTL-серий. Если совсем коротко, то речь идёт о том, как наиболее просто и по-возможности удобно для программирования расширить ОЗУ и ПЗУ в Специалисте (как при одной банке РУ5, так и при нескольких). Об этом я и писал на каком-то форуме 2 года назад, и даже странслировал вариант CP/M Специалиста для такой архитектуры. Архитектура страницы 0 придумана не 2 года назад, а ещё в начале 90-тых для использования CP/M на Специалисте с одной банкой РУ5. Добавка банок потребовала лишь ввести ПЗУ на F800. Могу даже пояснить почему наиболее простой и оптимальной для Специалиста получается именно такая архитектура. Тут все решения исходят не от балды, а от потребностей и из простоты модификаций имеющейся платы ЭКСПРЕСС. Эта архитектура просто самоочевидна. Коммутирует банки программа в ПЗУ, значит не имея ПЗУ в высоких адресах, в базовом Специалисте можно включить вторую (и другие) банку только ниже C000. Тогда на C836 и C839 прошиваем в ПЗУ подпрограммы, которые есть полные аналоги подпрограмм F836/39 в ПЗУ ОРИОНА, служащих для чтения/записи других банок. Такой вариант расширения ОЗУ невыгоден, в каждой банке 16 кб пропадет впустую. Для чего надо расширять ПЗУ? Потому что для графической машины драйверы экрана и другое системное ПО работающее с экраном имеют большой объём. Их в 2 кб, что в ОРИОНЕ (или даже 4 кб, что в Специалисте) не упихать. Как минимум надо 16 кб, а оптимальнее 32 кб. Причём этот код должен оставаться в той же странице, что и экран. Эту проблему обычно решают введя диспетчер памяти с окном размером в 8 или 16 кб, в котором можно прокачивать килограмм ОЗУ. В Специалисте нет диспетчера памяти с окном в 8 кб, но есть ПЗУ в 14К которое можно странично переключать (всё равно ПЗУ на 16К не существуют, есть только на 32К). Введение страничности ПЗУ почти ничего не стОит по деталям - например для окна в 14 кб лишь подаём управление на A14 у ПЗУ 27256 (которая уже изначально стоит на плате ЭКСПРЕСС). Тогда как диспетчер типа эриковского обойдётся в кучу дополнительных корпусов, а главное он имеет смысл лишь при ОЗУ более 64К, потому бессмысленен для Специалиста с одной банкой РУ5. Напротив, введение страниц ПЗУ ничего не стОит по деталям, а главное применимо и для Специалиста с одной страницей ОЗУ. Коммутацию ПЗУ, чтобы объём не пропадал впустую, разумно делать в окне с размером кратным степени двойки, т.е 4, 8, 16 кб. И для архитектуры Специалиста самым разумным является окно ПЗУ в 8 кб. Что я и пытался объяснить тем, кто собрал плату "Восточный ЭКСПРЕСС"), но никто это не понял и не оценил, т.к большинству любителей канифоли достаточно лишь посмотреть ретро-игры и убрать Специалист на полку под стекло. Так и получается архитектура страницы 0. Как видите от журнальной она отличается только "открытым ОЗУ" в области E000...F7FF. Уже этих 6 кб верхнего ОЗУ достаточно, чтобы на базовом Специалисте иметь DOS с TPA в 34 кб. BDOS это 3.75 кб, а BIOS умещается в оставшиеся 2.25 кб (и ещё ~2 кб отжирается в основном ОЗУ на дисковые буфера КНГМД и раб.ячейки CP/M). Наличие страничного ПЗУ позволяет при сохранении 100% совместимости иметь для CP/M полноценный терминал VT52 (а если надо можно поиметь там набор подрограмм GUI-интерфейса). А когда надо добавлять ещё одну банку ОЗУ, то как объяснено выше, требуется поиметь в вершине адресного пространства некоммутируемое ПЗУ. Тупым лобовым решением было бы одно ПЗУ РФ2 из платы Специалиста включить в окне F800...FEFF (выше FF00 нельзя, там клавиатура). Это в принципе неплохо, РФ2 используется на 87%. Но лучшее решение в 1988 придумал КООП SP-580. Решение было в том, чтобы с помощью двух диодов сделать так, чтобы участок ПЗУ C800...C8FF читался в окне F800. Это им дало совместимость по ПЗУ-входам с РК86. Но увы, в ж.МК Орлов опубликовал монитор на адрес C800 и грамотный вариант доработки Специалиста умер. В ПЗУ Специалиста свободного места килограмм, а входов C836/39 нет, потому ничего не препятствует прошить с адреса C836 подпрограммы чтения/записи других банок ОЗУ, причём эти п/п-ммы должны быть странслированы на адрес F836...F8FF. Т.о минимальный объём переделок чтобы поиметь вторую банку ОЗУ на 62К вместо 48К, - включает не только детали нужные для установки самОй второй банки ОЗУ, но нужны ещё и два диода и резистор (дающие ПЗУ на F800). Для CP/M это идеальная архитектура (намного лучшая, чем у ЭРИКА и лучшая, чем у ОРИОНА, т.к 62 больше, чем 60 и цвет не мешает CP/M) и для реализации GUI тоже остаются шансы. При чтении вышеприведённого описания конфига, программист сразу обратит внимание на то, что ПЗУ совсем отключается битом D7 порта F800 (что логично, т.к этот порт как-раз и управляет ПЗУ). Это даёт 62 кб ОЗУ и в банке 0. Хотя 12 кб тут отжирает экран, тем не менее 50 кб для простенького GUI-интерфейса с корявенькими самодельными иконками и в монохроме вполне хватит. Для самого минимального (по объёму доработок) варианта поиметь DOS в Специалисте разумен вариант с всего двумя страницами ПЗУ в 8К. В Специалисте есть истраченный на сигнал НП бит порта клавиатуры. Важно то, что он всеми программами не меняется. Потому его можно без опаски задействовать под бит коммутирующий страницы ПЗУ. Таким образом, чтобы поиметь 6 кб верхнего ОЗУ и 16 кб ПЗУ детали вообще не нужны, хватит куска МГТФ-0.03 длиной в 15 см. Тогда в 2*8-4= 12 кб ПЗУ влезет драйвер VT52 с шрифтом 6*8, а при желании ещё и CP/M (но это не увеличит TPA, там нужно сплошное ОЗУ). Если же CP/M не нужна и экономить объём ПЗУ не надо, то можно отказаться от верхнего ОЗУ и размер окна коммутации ПЗУ сделать в 14 кб. Основным препятствие поднять уровень TPA в Специалисте с единственной банкой ОЗУ, является то, что в его архитектуре экран маячит посередине адресного пространства. С учётом вот этой схемы приходится признать, что для однобанкового Специалиста представленная архитектура не является самой лучшей. Вариант с "заворотом верхней памяти" даёт 48К сплошного ОЗУ, что при переносе CP/M в ПЗУ позволяет поиметь TPA в 47 кб. Этого может хватить даже для некоторых компиляторов. В принципе годится любое техническое решение добавляющее в Специалист ПЗУ и доп.банки ОЗУ. Можно заимствовать для базового Специалиста и диспетчер памяти от ЭРИКА вместе с ПЗУ 64К. Но это будет и хуже по параметрам и сложнее по объёму доработок. Это-то как раз я и сделал 2 года назад. В качестве дисковода тогда я хотел РК-КНГМД, но с ходу не получилось. Теперь я просто поменял при сборке инклюдэ-файл RK-FLOP.INC на FLOP.INC для КНГМД ОРИОНА и получил CP/M Специалиста с КНГМД от ОРИОНА. На реале в формате DD 800K это будет работать только после замены кварца с 8 МГЦ на 10 МГЦ. Но в формате SD 400K эта же CP/M в реале работает на самом тормозном Специалисте с тем же самым КНГМД от ОРИОНА. Пока без драйвера VT52 (с переадресацией CONOUT/CONIN на C809/C803). Когда в ПЗУ Специалиста будет стоять альтернативный ROM-BIOS, то он и будет работать как VT52. Пока этим альтернативным ROM-BIOS не занимался, но это несложно. Хотя хочу сделать это только для Z80 (т.к для этого мне удобно взять готовые драйверы D6 и D7). Драйвер D6 для экрана 384*256, а драйвер D7 для экрана 448*256. Две страницы ПЗУ необходимы для размещения драйвера CP/M в ПЗУ, а лучше и целого CP/M-BIOS, как было в промышленных ЭВМ. В одну страницу в 8 кб влезет лишь драйвер, т.к D6 и D7 имеют размеры в 7.5 и 8 кб. Для BDOS+BIOS+CCP понадобится ещё одна страница ПЗУ. Итого в первой странице ПЗУ - базовое ПЗУ Специалиста, а в двух других можно разместить CP/M или хотя бы драйвер VT52. А без верхнего ОЗУ DOS для Специалиста вообще бессмысленна, т.к если её грузить ниже 9000, то, т.к DOS отнимет ~10 кб, можно будет запускать только маленькие программы. А зачем нужна такая DOS, где можно грузить и запускать лишь половину программ? DOS с TPA на 34К достаточно, чтобы запускать игры Специалиста (я нашёл лишь несколько программ Специалиста по 31...32 кб). А в эмуляторах отсутствует CP/M для Специалиста просто потому, что историческая версия просто отсутствует в Интернете. Видимо ни у кого не сохранилась украинская версия CP/M Специалиста от КООП Колед из 1992. Может у кого-то из украинцев эта CP/M сохранилась и ещё всплывёт. На дистрибутивных дисках CP/M ОРИОНА в 1991 распространялась CP/M для Специалиста (файл с именем SYS???.COM), кстати, ранняя CP/M-48К для ОРИОНА ничем не отличалась от специалистовской версии (лишь адрес ВГ93 и адрес BDOS - другие). Все программы Специалиста уже можно запускать в эмуляторе с дискеты. CP/M для этого есть, но надо ещё написать конвертор RKS в COM-файлы. Дело в том, что CP/M сдуру запускает все программы с адреса $100, а игры Специалиста, наоборот, никогда не стартуют с адреса $100. Потому в начало каждой программы Специалиста надо ставить крошечный блочок-стартёр. Это несложно делается и вручную отладчиком, но лучше это делать программкой, с именем типа GameMaker. Есть такие программки для CP/M ОРИОНА банки 1 и 2. Можно их использовать, указывая в ком.строке имя файла своего блочка-стартёра.
|
26 Nov 2019 01:32 |
|
|
|
Page 1 of 1
|
[ 4 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 42 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|