RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Сентябрь 2020
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930    

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

Последние темы
» Тема для вопросов, консультаций и т. д...
автор Atari1974 Вчера в 16:12

» ZX Microdrive
автор barsik Вчера в 02:44

» Флейм только по теме "Радио-86РК".
автор barsik Пн Сен 28 2020, 09:24

» Трансформатор электронный Taschibra 230/12В 60Вт для галогенных ламп. Перестал работать.
автор Viktor2312 Ср Сен 23 2020, 15:05

» Купил с али БП 12в 100w для питания LED лент подсветки. Проблема
автор Viktor2312 Вс Сен 20 2020, 18:07

» Жалобы/пожелания по работе форума
автор Viktor2312 Вс Сен 20 2020, 11:54

» Стабилизированный преобразователь напряжения.
автор Viktor2312 Пн Сен 14 2020, 23:12

» Простые доработки ZX-48К: RAM-монитор в ПЗУ и экран на E000
автор barsik Сб Сен 12 2020, 23:47

» Применение КР580 ВИ53 для генерации музыки
автор Viktor2312 Сб Сен 12 2020, 20:09

» STM32. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Сен 03 2020, 12:09

» STM32G0. Документация (Datasheet, разное).
автор Viktor2312 Чт Сен 03 2020, 11:52

» Новинки. Книги. Часть 1.
автор Viktor2312 Ср Сен 02 2020, 14:21

» STM32F4. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Сен 01 2020, 14:44

» Ленинград-0,-1,-2,-3. Статьи, заметки, очерки, разное...
автор barsik Вс Авг 30 2020, 08:32

» Ленинград-0
автор barsik Вс Авг 30 2020, 08:01

» STM32F4. Изучение.
автор Viktor2312 Пт Авг 28 2020, 00:07

» Орион-128: Полезные доработки ПЭВМ
автор barsik Чт Авг 27 2020, 11:21

» STM32H7. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Авг 25 2020, 10:43

» Радио-86РК: По страницам журнала "Радио" и не только...
автор barsik Вт Авг 25 2020, 01:28

» STM32L0. Документация (Datasheet, разное).
автор Viktor2312 Вс Авг 23 2020, 10:10

» STM32L0. Отладочные платы.
автор Viktor2312 Сб Авг 22 2020, 20:22

» STM32L0. Программное обеспечение, разное...
автор Viktor2312 Сб Авг 22 2020, 17:24

» STM32L0. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Авг 20 2020, 19:37

» STM32H7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:33

» STM32F7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:32

Самые активные пользователи за месяц
Viktor2312
Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_l10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Voting10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_r10 
barsik
Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_l10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Voting10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_r10 
Atari1974
Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_l10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Voting10Аппаратная эмуляция РК86 на ОРИОНЕ за счёт прерываний Vote_r10 

Поиск
 
 

Результаты :
 


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
Мастер++

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

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

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


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