|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Многие, наверное, видели мой эмулятор Радио-86РК в железе. viewtopic.php?f=93&t=18795Кто не в курсе, кратко: - миниатюрная плата размером примерно 15х25мм, на ней готовый модуль ESP-01, микросхема логики и немного мелочевки - стоимость всего железа легко укладывается в 200 рублей - это все встраивается внутрь обычной PS/2 клавиатуры и получается аккуратный моноблок - видеовыход - композитный PAL (черно-белый без градаций) - управление - клавиатура PS/2 - встроенная память 0,5-3,5 Мбайт - внешняя связь - WiFi (правда, запускается отдельно от эмулятора из-за ограниченности ресурсов) - питание - от USB Возникла дурацкая идея - сделать на базе этой железки некий Недо-ПиСи. Потому выкладываю вопрос на обсуждение. Я распишу технические характеристики, и хотелось бы получить некую желаемую архитектуру, которую я реализую. Что у меня есть на борту: - процессор довольно мощный (позволяет эмулировать i8080 на 8МГц, при этом еще поспевая рисовать графику) - ОЗУ 80кб (для работы эмулятора будет достаточно оставить 5-10 кб) - IRAM 64кб - это такое спец.ОЗУ, из которого выполняется программа, к нему просто доступ только 32-битными словами, на эмуляцию мне будет достаточно 32кб, значит оставшиеся 32кб можно будет использовать - 0,5-3,5мб флэша (в зависимости от используемого модуля), сектор стирания - 4кб - PAL-сигнал могу генерить хоть с текстом, хоть с графикой Как я пока что это вижу: - только графический режим 384x256 (как у Специалиста), но адресация по-другому - вертикальными столбиками по 8 бит (точек) - будет удобно рисовать любые шрифты (даже разно-ширинные) - ядро i8080 - ОЗУ 96кб: "нижние" 32кб всегда присутствуют, "верхние" 32кб переключаемые (2 набора) банками по 4кб (всего 8 банков) - ОЗУ видеоадаптера будет в "верхней" памяти, таким образом можно будет быстро переключать кадры - через IO проца реализовать: переключение банков памяти, чтение кодов PS/2 клавы, работу с Flash-памятью, таймеры, возможно звук Есть ли у кого интерес к такого рода железке ? Реализовать такое я смогу буквально за пару дней, наработок уже очень много.
|
19 Apr 2018 08:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Лучше уже Специалист заэмулить ИМХО
|
19 Apr 2018 18:43 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Специалист уже в процессе. Будет точно. К сожалению, времени сейчас крайне мало Просто есть еще идея выжать максимум из этого железа, если это кому-то интересно. Мне в первую очередь нужна поддержка тех, кто готов делать софт под это чудо. P.S. barsik, извини, что не отвечаю в личку, по существу пока заняться некогда, а пустобрехом заниматься нет смысла. DOS и переключаемые шрифты точно сделаю - вопрос времени.
|
19 Apr 2018 21:32 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 463 Location: Москва
|
Софт под софт? Если это эмулятор, то смысл в том, чтобы запускать горы имеющегося софта, CP/M выше упомянут кстати. BIOS настрочить не проблема. Если софта нет, то не лучше ли по требуемой спецификации написать без промежуточной эмуляции? И каков смысл эмуляции именно 8080 в этом случае?
|
20 Apr 2018 02:42 |
|
|
Shumadan
Fanat
Joined: 10 Mar 2018 12:50 Posts: 67
|
Интерес есть. Если получится сделать что то на базе CP/M 80 будет совсем замечательно
|
22 Apr 2018 01:08 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
а можно поподробней, как ставить CP/M ? т.е. рисуем BIOS под свое железо. а как получить BDOS под конкретные адреса? и как можно-ли организовать BIOS, BDOS, CCP на одной флешке (at28c64) скажем с адреса 0A000h... конкретная машинка называется Партнер 01.01.
|
22 Apr 2018 22:50 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
В принципе можно выбросить родной монитор (в смысле сделать переключатель ПЗУ). Тогда памяти получится около 54К. В качестве внешнего накопителя планируется связь с ПС через COM-порт. Тем более ВВ51 без проблем разогналась до 19200.
|
23 Apr 2018 00:17 |
|
|
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
Для получения BDOS (и CCP) на конкретные адреса в CP/M была специальная программа MOVCPM.COM. Она перенастраивает адреса переходов и записывает код в файл. Понятно, что MOVCPM работает только с одним конкретным кодом CP/M. Но в тех CP/M, что были распространены в СССР, код модулей уже был чуть-чуть изменён и MOVCPM была бесполезна. Потому для перемещения кода CP/M на другие адреса использовали просто перетрансляцию исходника на нужные адреса. Если исходники есть, по сути весь труд по получению CP/M заключается в написании всего двух подпрограмм RD128 и WR128 - чтение и запись блока в 128 байт. А т.к подпрограммы для всех известных КНГМД есть и менять их не надо, то всё что требуется сделать, - это изменить одну цифру в файле PARAMS.INC (этот инклюдэ-файл включается при трансляции во все модули, потому сами модули вообще менять не надо). Трансляция и компоновка в MSDOS делается CP/M ассемблером M80-L80 с помощью резидентного TSR-эмулятора BAT-файлом (на реале это SUB-файл). M80 =A.ASM @pause M80 =BIOS.ASM @pause M80 =BDOS.ASM M80 =CCP.ASM L80 A,CCP,BDOS,BIOS,CPM/N/E @pause В классической CP/M всего 3 модуля, но в грамотных реализациях CP/M обычно есть 4-тый модуль A.ASM, который стартует первым при загрузке CP/M и выполняет формат эл.диска, обслуживает файл AUTOEXEC.SUB и делает резервирование CCP+BDOS в доп.ОЗУ, чтобы избавиться от подкачки с дискеты. Вот готовые для трансляции оригинальные модули BDOS и CCP. При Z80 в CCP освобождается ~80 байтов, а с использованием RST более 100 байтов, что позволяет встроить команды ECHO и CLS и префикс @. Чисто теоретически, архитектура с двумя страницами памяти в окне 8000...FFFF позволяет получить CP/M с очень высоким TPA. При этом код BDOS и BIOS переносится во вторую банку, а в основной банке остаются только входы. Такие реализации известны. Однако на практике нет смысла на это тратить усилия. Высокий TPA теоретически нужен только для прогона очень больших программ (но их нет), а реально требуется только для некоторых, в основном экзотических, компиляторов Турбо-Модула-2, Лисп, Ада и т.п. Но сейчас незачем транслировать что-то на реале, т.к TSR-эмуляторы CP/M на PC 22NICE, Z80MU дают CP/M с TPA аж в 63.5 кб. А для использования CP/M-компиляторов Си и Паскаля достаточно TPA в 50-52 кб, что получается при ОЗУ для программ в 60 кб. Почти все прикладные программы работают при наличии всего 54 кб ОЗУ, что даёт уровень TPA в 48 кб. Если же от CP/M требуется только файловая система, то достаточно иметь размер свободного ОЗУ примерно на 8 кб больший, чем размер максимальной имеющейся программы. Потому нет особого смысла делать многобанковую архитектуру. Достаточно реализовать традиционный текстовый компьютер. В графическом режиме отображения я сейчас не вижу особого выигрыша. Всё-равно от графики будет использоваться только возможность смены фонта. А это можно сделать и при текстовом экране. С другой стороны, если вывод символов на граф.экран делать не драйвером в кодах КР580, а встроенной функцией самого эмулятора на скорости 160 МГЦ, то это даже лучше. Зато текстовый экран мал по размеру и к нему удобно иметь прямой доступ из программы на ЯВУ. Сейчас более реально написать программу на ЯВУ для текстового режима (например игру с тайловой графикой спрайтов), чем на ассемблере для графического режима С текстовым экраном получается простая архитектура - это 2 кб ПЗУ на F800, ниже 3 (4) кб текстовый экран 64*25 (80*32) и остальные 56-58 кб для программ. Это оптимальная мифическая ЭВМ, чтобы использовать CP/M-программы. Если же использовать графический экран, то естественно его лучше иметь отключаемым. Удобно иметь 2 страницы памяти. В первой странице 0 (включаемой по сбросу) на адресах 0...3FFF - ПЗУ 16К с ROM-BIOS, в адресах 4000...7FFF - экран, а выше 8000 - некоммутируемое сплошное ОЗУ. При старте входы в ROM-BIOS грузятся в ОЗУ на F800, а затем включается страница 1, в которой всё адресное пространство 64К - ОЗУ. Несложно переделать реальный Специалист ЭКСПРЕСС под такую архитектуру. Это лишь перенос адресов ПЗУ и установка доп.статики в 32К, чтобы закрывать ей ПЗУ и экран. Для монохромного компьютера лучшей архитектуры не придумать. С учётом высокой скорости эмулированного CPU, можно использовать программы странслированные компиляторами ЯВУ, даже не используя вкрапления ассемблера (что обычно применяют для замены критичных по скорости процедур). А с учётом, что программ для Z80 больше и они из более позднего периода времени (и потому более качественные), то можно подумать о эмуляции Z80. С учётом того, что с экраном работает или ROM-BIOS или CP/M-BIOS которые сами и их стек располагаются именно в верхних адресах, то отключаемое окно экрана разумно как раз располагать в нижних адресах, ниже 8000. А окно коммутации разумно ограничить в 16 кб. Например, во Львове экранное ОЗУ на время вывода в экран временно включается в окне с 4000. На ZX-PK.ru я уже не могу появляться, т.к забанен.
Last edited by barsik on 24 Apr 2018 01:51, edited 10 times in total.
|
23 Apr 2018 13:43 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Для "ЮТ-88" вроде как была версия CP/M крайне обрезанная и крайне нетребовательная к железу. Если я не ошибаюсь, она и на эмуляторах вполне запускалась "на попробовать". Ну а, собственно, попробовать и можно! У меня где-то была, но вряд ли найду сходу...
_________________ iLavr
|
23 Apr 2018 14:04 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
вроде нашел все исходники cpm22 и для z80 и i8080 и даже примерчик bios правда для z80. диски (точнее открыть, читать файлы) на PC через COM-порт у меня сделана для самописной оси. На PC запускается сервер, который все это обслуживает.
|
24 Apr 2018 00:37 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну заходите к нам почаще! У нас контингент во многом пересекается с ZX-PK.ru.
_________________ iLavr
|
24 Apr 2018 08:00 |
|
|
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
Это цитата с другого форума, где я не могу ответить, потому отвечаю здесь. В Специалисте не принцип сканирования бегущим нулём, а табличный метод определения кода клавиатуры. Там на матрицу по вертикали выкидываются все нули и считывается матрица по горизонтали, затем наоборот, выкидывается все нули по горизонтали и считывается матрица по вертикали. Номер бита в котором 0 по вертикали сдвигами умножается на 16, к результату прибавляется номер бита (0...11) по горизонтали, что даёт смещение в таблице. Затем из таблицы берётся код. Это в 1.5 раза больше объём кода, но намного быстрее. Исходники ROM-BIOS Специалиста я положил вот здесь. Изучая исходник вспомните, что в порт ППА по программированию его режима на вывод выводятся все нули (т.е необходимые нули выдаются автоматически). "вся подпрограмма ввода" | | | | Code: INKEY: PUSH HL PUSH BC LD BC,0FFFBH CALL PPA91 ; задать реж.ППА PA,PCL ввод, PB,PCH вывод LD A,(PPA) LD L,A LD A,(PC) OR 0F0H LD H,A AND L CP B CALL PPA82 ; задать реж.ППА PB ввод, PA,PC вывод LD A,B JP Z,INK1 INK2: INC C ADD HL,HL JP C,INK2 LD A,(PB) OR 00000011B CP B JP Z,INK1 LD L,0FDH INK3: INC L RRCA JP C,INK3 LD A,L RLCA RLCA RLCA RLCA ; шаг рядов по вертикали в таблице = 16 ADD A,0A0H ; начало таблицы - C4A0 OR C LD L,A LD H,0C4H ; начало таблицы - C4A0 LD A,(HL) INK1: POP BC POP HL RET
| | | | |
Last edited by barsik on 31 Jan 2019 09:25, edited 1 time in total.
|
27 Apr 2018 08:07 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
А что будет, если нажато более 1 кнопки?
_________________ привет засранцу лавру :)
|
27 Apr 2018 09:42 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это смотря в каком "Специалисте" и какая программа... Когда разбирали всё это, чтобы подключить к "Специалисту" PS/2 клавиатуру через микроконтроллер, чтобы полностью имитировать матрицу клавиатуры реального "Специалиста", выяснили, что в зависимости от того, под каким ПО работает "Специалист" там как бы не 3 метода в совокупности. Точно я сейчас уже не помню, но материал этот на форуме должен быть. P.S. В частности: http://www.nedopc.org/forum/viewtopic.php?f=46&t=9081
_________________ iLavr
|
27 Apr 2018 11:01 |
|
|
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
Для апп.эмулятора ПЗУ Специалиста надо слегка изменить. Т.к загрузки с МГ всё-равно нет, то по сбросу надо сделать сразу выход в монитор или на процедуру выбора запускаемой программы из числа резидентных. Иначе при уходе на п/п-мму ввода блока по сбросу, произойдёт завис на определении константы ввода по пилотону, т.к при этом PB0 читается напрямую и перехват п/п-ммы LDBYTE не поможет от зависа (даже нажатие <НР> + <F9> не поможет, т.к клавиатура контроллируется только в процедуре ввода байта). heavy, если Вам лень тратить время на это самому, то могу странслировать 100% совместимую версию ПЗУ, забив в нём все МГ-подпрограммы, это работа на 10 минут. И для начала совсем не обязательно клавиатуру эмулировать правильно. Чтобы получить версию позволяющую прогонять системное ПО, это не требуется. Когда я в 1997-1998 писал свой эмулятор РК86, я изначально вообще не собирался (да и не знал как) делать полноценную эмуляцию клавиатуры. Я полагал, что достаточно проэмулировать только стандартные входные точки ПЗУ, т.к в ж.РАДИО в 80-тые читал призывы делать только корректное ПО, работающее с железом корректно. Потому вообще не собирался эмулировать ПЗУ F800. При любом вызове подпрограмм выше F800 управление возвращалось к эмулятору и работа стандартных подпрограмм эмулировалась. Например, при вызове п/п-ммы F809 обслуживались упр.коды, а печатаемый символ из регистра C, клался в экранное ОЗУ по адресу из ячеек 7600/7601, затем текущий адрес вывода в этой ячейке сдвигался, также менялись координаты POSX,POSY в ячейках 7602/7603. Это выполнялось в 100 раз быстрее, чем прогон программы в ПЗУ, что было важно. Кстати, такой подход позволяет эмулировать РК86 на ОРИОНЕ с тактом в 5 МГЦ. При этом даже в некоторые РК-игры можно играть, несмотря на эмулируемую скорость всего в 200 КГЦ (это потому, что в играх в качестве "паузы-тормозилки" используется время прогона п/п-ммы опроса клавиатуры, которое в таком эмуляторе в 25 раз быстрее) В разных версиях ПЗУ разные адреса внутренних исполнительных частей стандартных подпрограмм. Но т.к эмулятор работает с одной версией ПЗУ и пользователь не может это изменить, то не проблема перехватить п/п-мму INKEY (что я привёл выше) и эмулировать её работу 32-х разрядным процессором контроллера. Эта п/п-мма возвращает код символьных клавиш в нижнем регистре, не делая обработки нажатия клавиши <НР> и состояния флага RUSLAT. Потому в эмуляторе достаточно возвращать код и правильно ставить состояние порта PB1, по которому читается клавиша <НР> (её должна заменять Shift на PC-клавиатуре). Так, что всё, что требуется сделать, чтобы вообще не возиться с клавиатурой, - это перехватывать точку INKEY (узнать её адрес можно из PRN листинга трансляции). При этом (т.е без полноценной эмуляции клавиатуры) будут работать почти все игры адаптированные от РК86, т.к они обычно читают клавиатуру вызовом п/п-ммы C81B. Это не приведёт к проблемам. Лишь соединятся два выхода ППА запрограммированых на вывод на которые выведены нули. Это никак не повредит ППА, а программно будет определено нажатие только одной клавиши (чей ряд опрашивается первым).
|
28 Apr 2018 06:51 |
|
|
Who is online |
Users browsing this forum: No registered users and 5 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
|
|