RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Апрель 2024
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930     

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний

Перейти вниз

Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Empty Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний

Сообщение  barsik Вс Май 06 2018, 23:30

1
В этом разделе хочу подумать о аппаратной эмуляции РК86 (а также возможно Специалиста) на базовом ОРИОНЕ с КР580. Хочу поделиться одной мыслью, на которую наткнулся пытаясь по схеме понять как когда-то работал мой аппаратный эмулятор ZX на ОРИОНЕ. Цель этого поста - подумать самому (когда пишу лучше обдумываю), а возможно дать наводки другим любителям рэтро хобби.

Как раз сейчас я нуждаюсь в эмуляторе РК86 на ОРИОНЕ. Дело в том, что пытаюсь изучить программирование на Паскале для РК86. Естественно, это удобнее делать не в реале, а на IBM PC, используя эмулятор.

Свой PC-эмулятор РК86 (для MSDOS) у меня есть, но он убогий (первый блин комом из 1998), - не эмулирует режимы ВГ75, отчего работают только системные программы и лишь часть игр. Но даже, если бы он был великолепен, это не важно, т.к на РК86 вообще нет CP/M, потому транслировать программу Паскаль-компилятором я могу лишь в своём эмуляторе ОРИОНА, где есть CP/M с высоким TPA.

Кстати, чужие эмуляторы ОРИОНА для данной цели почти не годятся, у них неудобный обмен файлами (чтобы получить CP/M-файл в эмуляторе надо с помощью читалки образов дискет 'SteinBlume' копировать файл в образ дискеты). Мой эмулятор ОРИОНА этого не требует и стартует мгновенно.

Потому для разработки программ используя CP/M-компилятор нужны два эмулятора - полноценный эмулятор CP/M и эмулятор РК86. Тогда цикл модификация исходника - проверка, теоретически должен делаться так:

Заканчиваю очередную модификацию исходника Паскаль-программы. Захожу в эмулятор ОРИОНА, запускаю CP/M, транслирую Паскаль программу и копирую готовый COM-файл на винчестер PC. Затем вручную конвертирую этот файл в TAPE-формат, который может загрузить эмулятор РК86 (RKR, но удобнее GAM, т.к он универсальный, грузится и на эмуляторах всех клонов и эмуляторе Специалиста). После чего запускаю эмулятор EMU80 в режиме эмуляции РК86, гружу в него TAPE-файл программы и запускаю её для проверки.

Как видите, получается очень долгий цикл одной итерации. А с учётом того, что выгоднее как можно чаще делать проверку, то выгодно иметь как можно более короткий цикл.

Причём и сама трансляция больших программ в CP/M под эмулятором длится долго. Кстати, наиболее короткое время занимает проверка при разработке на ассеблере, т.к M80/L80 работают под TSR-эмулятором CP/M и стартуют как программы MSDOS. Тогда закончив редактирование, - хлоп по кнопке, - запускается BAT-файл, который транслирует, компонует, копирует файл в каталог эмулятора и стартует эмулятор, в котором автоматически стартует программа. На всё это уходит секунда.

А вот с использованием CP/M-Паскаля потери времени на проверку гораздо бОльшие. Даже с использованием пакетного ввода команд с помощью AUTOEXEC.SUB (благодаря чему сразу же по старту эмулятора начинается трансляция Паскаль программы) уходит много времени. Сначала с помощью M80 транслируются ASM-модули, затем компилятором Паскаля транслируются Паскаль модули, затем происходит линковка с помощью LINKMT. Все трансляции и линковка происходят на скоростях 8-ми разрядки, отчего длится долго (даже Hello World транслируется 15 секунд, а программа в тысячу строк траслируется ~5 минут).

С учётом того, что постоянно возникают ошибки трансляции и её приходится многократно повторять, то потери времени чуть ли не уравнивают трудоёмкость процесса с разработкой на голом ассемблере. Т.е, по крайней мере на несложных по логике программах, из-за длительности процедуры трансляции и отладки, ассемблер оказывается быстрее при разработке, чем ЯВУ.

Потому для сокращения времени, я и проверку РК-программы делаю на ОРИОНЕ, точнее в эмуляторе ОРИОНА. Пользуясь тем, что программы РК не лезующие в экран и к ППА клавиатуры и не вызывающие F812, без проблем работают на ОРИОНЕ. Чтобы проверить программу РК на ОРИОНЕ, мне нужно запустить её в банке 0 на адресе 100. CP/M ОРИОНА работает в банке 1. Потому я отладчиком ZSID3 загружаю код скомпилированной РК-программы на адрес 100, затем делаю сброс (клав.F8) и оказавшись в M3-EXT директивой P копирую банку 1 в банку 0, получив тем самым код программы в банке 0. Далее просто запускаю РК-программу командой G100<ВК>. Такой трюк, благодаря совместимости ОРИОНА и РК86 экономит мне на каждой итерации пару минут.

К сожалению, при написании игр для РК, ради скорости выгоднее выводить в экран не стандартной подпрограммой F809, позиционируя курсор с помощью ESC+Y, а напрямую записывая байт в экранный буфер. Для РК-программ это общепринятая практика, т.к это проще, хотя и не рекомендуется. Даже игры, что выводят на экран п/п-ммой F809 иногда не работают, т.к стандартная п/п-мма для считывания байта с экрана не работает. Т.е при прямой записи в экран проверять программу в ОРИОНЕ уже невозможно. Остаётся только записывать результат трансляции на винчестер PC, вручную конвертировать его в TAPE-формат и проверять в EMU80 эмулирующем РК86.

Мой эмулятор ОРИОНА эмулирует "голый Z80", но прерывания 50 Гц, включаемые портом FB эмулируются. Это даёт возможность написать программый эмулятор, точнее визуализатор программ РК86 (это не эмулятор, потому что доступ в порт клавиатуры 8000, а тем более режимы ВГ75 не эмулируются).

Для чего достаточно к Паскаль программе подключить написанный на ассемблере модуль визуализции экрана РК86 на ОРИОНЕ. Тогда при старте Паскаль программы в ОЗУ ОРИОНА выше 8000 загружается модуль визуализации, который включает прерывания, причём даже не обязательно в MODE2 (MODE 0, с вектором на адресе 38 тоже годится, т.к Паскаль программа выше 100H) и 5-20 раз в секунду визуализирует экран РК86 на экране ОРИОНА. Понятно, что для каждого режима РК86 (которые отличаются адресами экранных строк) нужен свой визуализатор. В простейшем случае это визуализатор базового режима РК86 в 31 строку (25 видимых строк, что устанавливается по сбросу). Понятно, что визуализатор, это крошечная программка всего в сотню байт (плюс фонт псевдографики). Но уже это позволяет запускать на ОРИОНЕ РК-программы, что не лезут в ППА клавиатуры.

А изменив в РК-программе адрес ППА клавиатуры (что работа всего на несколько минут), можно прогонять большинство программ РК. В том числе и графические, изменяющие режим ВГ75 и адрес экрана. Понятно, что для каждой такой игры, к ней должен подключаться свой блок визуализации. Но и это не проблема, т.к половина игр использует ущёрбный стандартный режим с 31-й строкой и межстрочными разрывами, а вторая половина - режим в 39 строк (это режим без межстрочных разрывов). Таким образом достаточно написать программу, которая автоматически прилепляет к каждой РК-игре модуль визуализатора, делая эту игру пригодной для использования на ОРИОНЕ.

К сожалению, не всё так радужно. Разработчики ОРИОНА допустили непростительную ошибку, - подпрограммы опроса клавиатуры работают с отличием от аналогичных подпрограмм РК86 (кстати, подпрограммы опроса клавиатуры РК лучше, т.к короче орионовских). Это приводит к тому, что даже вполне корректные программы РК86 нихрена не работают на ОРИОНЕ, а виснут на опросе клавиатуры.

Это легко исправляется, если на Вашем ОРИОНЕ два банка ПЗУ по 2К в области F800 (коммутируемые портом FC), что я впервые применил в 1991 и с тех пор это на всех моих ОРИОНАХ, т.к очень удобно. Потому два ПЗУ F800, естественно, есть и в моём эмуляторе ОРИОНА из 1999 года. Тогда в режиме прогона РК-программ в окне ПЗУ F800 включается исправленная версия ПЗУ, где подпрограммы опроса клавиатуры работают точно как на РК86, что и позволит прогонять все программы РК, что не лезут в ППА клавиатуры (а те что лезут несложно доработать переадресовав обращения к клавиатуре 8000 на F400).

Таким образом, если в Вашем ОРИОНЕ есть аппаратные прерывания (5...50 ГЦ), то такой ОРИОН позволяет Вам использовать программы от РК86. При некотором усложнении концепции (при переносе кода программы и визуализатора в банку 1), можно эмулировать и Специалист, по крайней мере для программ, что не лезут к матрице клавиатуры напрямую.

Это будет первое полезное применение прерываний на ОРИОНЕ. Для эмуляции РК и Специалиста достаточно даже КР580, если ввести возможность иметь обработчик прерываний на любых адресах. Но и без этого можно использовать прерывания в тех программах, что не затирают область ниже 100H.

Для начала, попробую в своём эмуляторе ОРИОНА визуализатор лишь для самого базового режима (25*64). Позднее, естественно, напишу и визуализатор для 39-строчного режима РК86.

Для реального ОРИОНА иметь эмулятор РК86 мне не особо надо, но впоследствии, естественно попробую и на реальном ОРИОНЕ. Главное, что эта идея позволит мне транслировать и отлаживать программы для РК86 в эмуляторе ОРИОНА.

http://zx-pk.ru/threads/23491-chto-zhe-predlozhil-izobretatel.html?p=940395&viewfull=1#post940395
barsik
barsik
Ветеран

Сообщения : 1032
Дата регистрации : 2016-11-10
Откуда : Россия

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения