nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 14:22



Reply to topic  [ 20 posts ]  Go to page 1, 2  Next
(Без)умная идея 
Author Message
Novelist

Joined: 03 Mar 2018 01:22
Posts: 32
Reply with quote
Многие, наверное, видели мой эмулятор Радио-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-памятью, таймеры, возможно звук

Есть ли у кого интерес к такого рода железке ? Реализовать такое я смогу буквально за пару дней, наработок уже очень много.


Attachments:
rk8266_kbd.jpg
rk8266_kbd.jpg [ 96.65 KiB | Viewed 10455 times ]
19 Apr 2018 08:39
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Лучше уже Специалист заэмулить ИМХО ;)

_________________
:dj: https://mastodon.social/@Shaos


19 Apr 2018 18:43
Profile WWW
Novelist

Joined: 03 Mar 2018 01:22
Posts: 32
Reply with quote
Специалист уже в процессе. Будет точно.
К сожалению, времени сейчас крайне мало :(
Просто есть еще идея выжать максимум из этого железа, если это кому-то интересно. Мне в первую очередь нужна поддержка тех, кто готов делать софт под это чудо.

P.S. barsik, извини, что не отвечаю в личку, по существу пока заняться некогда, а пустобрехом заниматься нет смысла. DOS и переключаемые шрифты точно сделаю - вопрос времени.


19 Apr 2018 21:32
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
heavy wrote:
делать софт под это чудо.

Софт под софт? Если это эмулятор, то смысл в том, чтобы запускать горы имеющегося софта, CP/M выше упомянут кстати. BIOS настрочить не проблема.
Если софта нет, то не лучше ли по требуемой спецификации написать без промежуточной эмуляции? И каков смысл эмуляции именно 8080 в этом случае?


20 Apr 2018 02:42
Profile
Fanat

Joined: 10 Mar 2018 12:50
Posts: 67
Reply with quote
Интерес есть. Если получится сделать что то на базе CP/M 80 будет совсем замечательно


22 Apr 2018 01:08
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
а можно поподробней, как ставить CP/M ?
т.е. рисуем BIOS под свое железо.
а как получить BDOS под конкретные адреса?
и как можно-ли организовать BIOS, BDOS, CCP на одной флешке (at28c64) скажем с адреса 0A000h...
конкретная машинка называется Партнер 01.01.


22 Apr 2018 22:50
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
В принципе можно выбросить родной монитор (в смысле сделать переключатель ПЗУ).
Тогда памяти получится около 54К.
В качестве внешнего накопителя планируется связь с ПС через COM-порт.
Тем более ВВ51 без проблем разогналась до 19200.


23 Apr 2018 00:17
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post .
aav8 wrote:
как получить BDOS под конкретные адреса?

Для получения 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.

heavy wrote:
ОЗУ видеоадаптера будет в "верхней" памяти

С учётом того, что с экраном работает или ROM-BIOS или CP/M-BIOS которые сами и их стек располагаются именно в верхних адресах, то отключаемое окно экрана разумно как раз располагать в нижних адресах, ниже 8000. А окно коммутации разумно ограничить в 16 кб. Например, во Львове экранное ОЗУ на время вывода в экран временно включается в окне с 4000.

rw6hrm wrote:
Изредка появляется тут пользователь barsik (а также на zx-pk.ru), он, думаю, сможет дать более подробную консультацию по железу.

На ZX-PK.ru я уже не могу появляться, т.к забанен.


Last edited by barsik on 24 Apr 2018 01:51, edited 10 times in total.



23 Apr 2018 13:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
rw6hrm wrote:
Если доступного непрерывного (!) ОЗУ 48К и меньше, то печаль, разве что только на попробовать.

Для "ЮТ-88" вроде как была версия CP/M крайне обрезанная и крайне нетребовательная к железу.
Если я не ошибаюсь, она и на эмуляторах вполне запускалась "на попробовать".
Ну а, собственно, попробовать и можно!

У меня где-то была, но вряд ли найду сходу...

_________________
iLavr


23 Apr 2018 14:04
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
вроде нашел все исходники cpm22
и для z80 и i8080 и даже примерчик bios правда для z80.
rw6hrm wrote:
Ненене, нужен именно "диск". Реализации "дисков" по СОМ-порту чтот не встречал. Если есть - дайте ссылку.

диски (точнее открыть, читать файлы) на PC через COM-порт у меня сделана для
самописной оси. На PC запускается сервер, который все это обслуживает.


24 Apr 2018 00:37
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
На ZX-PK.ru я уже не могу появляться, т.к забанен.

Ну заходите к нам почаще! У нас контингент во многом пересекается с ZX-PK.ru.

_________________
iLavr


24 Apr 2018 08:00
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
heavy wrote:
столкнулся с проблемой. Что-то не разберусь с клавиатурой Специалиста. Монитор почему-то не перебирает строки, т.е. он выставляет строку, я отдаю столбец с нажатой кнопкой, а он после не перебирает строки, чтобы понять что нажато. Соответственно, работает как-то очень криво. В отладчике сидеть пока нет времени, если кто-то скинет дизассемлированный код считывания кнопки из монитора Специалиста - это сильно ускорит процесс.

Это цитата с другого форума, где я не могу ответить, потому отвечаю здесь.

В Специалисте не принцип сканирования бегущим нулём, а табличный метод определения кода клавиатуры. Там на матрицу по вертикали выкидываются все нули и считывается матрица по горизонтали, затем наоборот, выкидывается все нули по горизонтали и считывается матрица по вертикали. Номер бита в котором 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
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
barsik wrote:
В Специалисте не принцип сканирования бегущим нулём, а табличный метод определения кода клавиатуры. Там на матрицу по вертикали выкидываются все нули и считывается матрица по горизонтали, затем наоборот, выкидывается все нули по горизонтали и считывается матрица по вертикали. Номер бита в котором 0 по вертикали сдвигами умножается на 16, к результату прибавляется номер бита (0...11) по горизонтали, что даёт смещение в таблице. Затем из таблицы берётся код. Это в 1.5 раза больше объём кода, но намного быстрее.

А что будет, если нажато более 1 кнопки?

_________________
привет засранцу лавру :)


27 Apr 2018 09:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
В Специалисте не принцип сканирования бегущим нулём, а табличный метод определения кода клавиатуры.

Это смотря в каком "Специалисте" и какая программа...
Когда разбирали всё это, чтобы подключить к "Специалисту" PS/2 клавиатуру через микроконтроллер,
чтобы полностью имитировать матрицу клавиатуры реального "Специалиста", выяснили, что в зависимости
от того, под каким ПО работает "Специалист" там как бы не 3 метода в совокупности.

Точно я сейчас уже не помню, но материал этот на форуме должен быть.


P.S. В частности: http://www.nedopc.org/forum/viewtopic.php?f=46&t=9081
Attachment:
SPkbdBB55.gif
SPkbdBB55.gif [ 47.65 KiB | Viewed 7614 times ]

_________________
iLavr


27 Apr 2018 11:01
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Для апп.эмулятора ПЗУ Специалиста надо слегка изменить.

Т.к загрузки с МГ всё-равно нет, то по сбросу надо сделать сразу выход в монитор или на процедуру выбора запускаемой программы из числа резидентных. Иначе при уходе на п/п-мму ввода блока по сбросу, произойдёт завис на определении константы ввода по пилотону, т.к при этом 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.

angry_troll wrote:
А что будет, если нажато более 1 кнопки?

Это не приведёт к проблемам. Лишь соединятся два выхода ППА запрограммированых на вывод на которые выведены нули. Это никак не повредит ППА, а программно будет определено нажатие только одной клавиши (чей ряд опрашивается первым).


28 Apr 2018 06:51
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 20 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 22 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.