nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 May 2018 16:45



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

Joined: 03 Mar 2018 02: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 660 times ]
19 Apr 2018 09:39
Profile
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 213
Location: Ставрополь
Reply with quote
Разве что попробовать СР/М-совместимый агрегат, дабы потом не морочиться с софтом... Но ВиФи в качестве виртуального СОМ-порта будет нужна ;)


19 Apr 2018 12:01
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16525
Location: Colorado
Reply with quote
Лучше уже Специалист заэмулить ИМХО ;)

_________________
:eugeek: https://twitter.com/Shaos1973


19 Apr 2018 19:43
Profile WWW
Novelist

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

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


19 Apr 2018 22:32
Profile
Maniac

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

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


20 Apr 2018 03:42
Profile
Writer

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


22 Apr 2018 02:08
Profile
Maniac

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


22 Apr 2018 23:50
Profile
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 213
Location: Ставрополь
Reply with quote
1. Допиливаем биос под своё железо. Ну плюс минимальный загрузчик, из Монитора или холодный.
2. Нужен внешний диск, ибо ось работает только и исключительно с "внешними" (для неё) накопителями. ROM-диск для загрузки оси пойдёт, но надо же будет на чём-то и сейвиться...
3. BDOS, CCP есть вещи стандартные и не правятся, а загружаются с внешнего носителя в ОЗУ в верхние адреса, в основном с адреса 0D00H, туда же и передаётся управление после старта. Хотя стартовый адрес зависит от количества доступного ОЗУ. Если доступного непрерывного (!) ОЗУ 48К и меньше, то печаль, разве что только на попробовать. Идеал - полностью отдаваемые для оси 64К.
Для начала можно почитать пару книжек, https://vk.com/doc117527293_437544955 и https://vk.com/doc117527293_437544965 (вторая на английском). Если нужны будут сорцы для правки - сообщите. Их, конечно, можно найти и в сети, только применительно к конкретному компу.
Изредка у нас появляется тут пользователь barsik (а также на zx-pk.ru), он, думаю, сможет дать более подробную консультацию по железу.


23 Apr 2018 00:29
Profile WWW
Maniac

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


23 Apr 2018 01:17
Profile
Writer

Joined: 19 Feb 2017 04:46
Posts: 24
Location: 600 км от Москвы
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 02:51, edited 10 times in total.



23 Apr 2018 14:43
Profile
Supreme God
User avatar

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

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

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

_________________
iLavr


23 Apr 2018 15:04
Profile
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 213
Location: Ставрополь
Reply with quote
У меня сходу только бумажный вариант, либо пдф. В любом случае перебирать ручками. И не переделать, ибо только ассемблерный вариант.
Далее, для увеличения ТРА можно предусмотреть полное отключение ПЗУ после загрузки и отдавать управление всему ОЗУ сразу. Как раз 52К получается, если не мусорить в биосе.
aav8 wrote:
В качестве внешнего накопителя планируется связь с ПС через COM-порт.

Ненене, нужен именно "диск". Реализации "дисков" по СОМ-порту чтот не встречал. Если есть - дайте ссылку.
Вариант СР/М-32 для ЮТа предусматривал отведение части ОЗУ под РАМ-диск, но это в качестве варианта.
barsik wrote:
На ZX-PK.ru я уже не могу появляться

Грустьпечаль...


23 Apr 2018 23:14
Profile WWW
Maniac

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

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


24 Apr 2018 01:37
Profile
Supreme God
User avatar

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

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

_________________
iLavr


24 Apr 2018 09:00
Profile
Writer

Joined: 19 Feb 2017 04:46
Posts: 24
Location: 600 км от Москвы
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


27 Apr 2018 09:07
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 23 posts ]  Go to page 1, 2  Next

Who is online

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