"Орион-М" - очередное воплощение.

В 1990 году в журнале "Радио" вышел цикл статей о любительском компьютере "Орион-128". В отличии от "Радио-86РК" "Орион" содержал 128КБ (в минимуме 64 кБ) оперативной памяти в стандартной комплектации и поддерживал графический цветной (2, 4 или 16 цветов) экран с разрешением 384х256 пикселей.

Существует множество вариантов, но все они достаточно сложные, содержат кучу мелкой логики. Есть идея засунуть её в ПЛИС. В продаже ещё встречаются CPLD в корпусах PLCC, удобные для пайки через панельку DIP-84: Altera EPM7128, EPM7160. Или EPM3256 под TQFP144 через плату-переходник.
Нашёлся, правда, готовый вариант и плата у Чипкина. Но своё интересней воплотить, мозги расшевелить!

Кто помнит? Кто знает? Кто может помощь оказать? Тряхнуть, так сказать, стариной!

Задумка оформилась в 2022 году, изначально придумал индекс 128.22, но, т.к. ОЗУ стало 1 МБ, то и название пусть будет "Орион-М" - Мегабайт или Модернизированный (Modification).
Обсуждение в Telegram

В итоге должна получиться полная совместимость с классическим Орионом, а при желании и с Орионом-про, и ещё немного плюшек:


О конструкции.
Компьютер в минимальной конфигурации расположен на плате формата micro-ATX 221x173 мм содержит процессор Z180 с тактовым генератором 18,432мГц, 2шт ОЗУ по 512кб, ПЗУ 32кб для Монитора и 64кб для ROM-диска, 3 порта 82C55, дешифратор на ПЛИС Altera EPM7032/7064, видеоформирователь на EPM7128/7160, при желании звуковой чип AY8910 и часы
Выведены внешние разъёмы D-SUB, Serial RS232, клавиатура DB25, звук 3,5мм, пользовательский разъём DIN41612 3x10 pin, сбору такоё-же разъём для ROM-диска. 3 системных разъёма DIN41612 3x32 pin для плат расширения. Крайний разъём возможно угловой для платы-удлиннителя DIN или ISA-8 bit. Дабы, хоть как-то стандартизировать, расстояние от края платы до 1 контакта будет 25,4 мм, как и на ISA платах.
Логику работы видеоадаптера на ПЛИС с процессором Z180 вижу так: по пиксельклоку или удвоенному пиксельклоку видеомодуль запрашивает у процессора доступ к шине, и, получив разрешение выставляет нужный адрес и читает байт в промежуточный буфер. Так от 1-й до 6-х "плоскостей" в зависимости от видеорежима. Из промежуточного буфера байт данных через каждые 8 (16) тактов переписываются в регистр вывода и выводятся на ЦАП, далее на VGA-монитор. ЦАП 2 бита на каждый из 3-х цветов достаточен для отображения 16 цветов, а в перспективе 64 цвета.
Внутренние счётчики определяют кадровую и строчную частоты, так-же моменты, когда нужно читать видеопамять. Для орионовского экрана 384 пиксела по горизонтали и 256 по вертикали
калькулятор выдал пиксельклок 8,75 мГц, неотображаемых строк 19, и 160 пикселей по сторонам, которые в дальнейшем можно будет использовать для режимов 480 или 512 точек по горизонтали.
Т.к. физически ОЗУ представляет собой 1 мб линейного пространства, то и "видеоплоскости" будут распологаться в любом месте, а логически, с соответствующими поправками Монитора, всё останется, как и в стандартном "Орион-128".
Порты управления так-же останутся для совместимости, но можно и расширить. Например 0FA00H задаёт начало адреса экранной области, но использует только 2 бита. Управляя всеми 8 битами можно задавать начало с шагом 256 байт, или 8 точек по горизонтали. Получим этакий аппаратный горизонтальный скроллинг по всей оперативке!
Подозреваю, что сделать это нетрудно, знакомому с VHDL/Verilog. Но я пока только учусь!
Есть другой вариант: прилепляем ISA SVGA адаптер, и через Feature Connector транслируем туда память Ориона!



Примерно так будет.

Клавиатура от Микро-80/Радио-86РК на кнопках Cherry подключается кабелем-удлиннителем DB25 или ленточным в варианте моноблока. Примерно так будет. Примерно так будет.

О RAM-дисках: при объёме памяти 1024 (512) КБ, как-то коряво будет иметь 15 (7) дисков по 60 КБ. Логичнее создать один непрерывный из всех страниц начиная с последней доступной, ибо снизить вероятность заползания на 1-ю страницу, где лежат атрибуты цвета. Программно это сделать нетрудно, было-бы желание автора или исходники и толковый программист!

CPU Module. I/O Module. CPLD Module. ROM Disk. PS/2 Adapter. Extender.

Для работы с ПЛИС используется "Quartus II" 10.0 (в следующих нет поддержки 3000/7000 серии). Для программирования заказан китайский "USB Blaster".
Можно использовать более простой - ByteBlaster. Что-бы установить его драйвер, в папке bin Квартуса запускаем bblpt /i
Визуально строить схему, конечно, можно. Но до определённой сложности и размера. Нырнуть более глубоко нам поможет язык описания аппаратуры - VHDL

Начнём:

Первая примерка. Прикидка компановки. Адаптер для PS/2 клавы.

Возникла ещё такая идея: использовать огромный ассортимент переферии от Ардуино на шине SPI, через последовательный интерфейс процессора Z180. Это модуль часов реального времени DS3231, модуль карты MicroSD, сетевой модуль ENC28J60/W5500, WIFI модуль ESP8266 ESP-07, Bluetooth HC-05/06, RFID, ИК приёмник...
А прикрутив драйверы внешних устройств можно управлять более мощными железяками! Электроприводы, замки, освещение!

SPI Interface
Micro SD Module. Ethernet Module. RFID Module.

I2C Interface
Real Time Clock Module. Flash memory. Videocamera Module.

Serial Interface
USB Keyboard&Mouse Module. BlueTooth Module. RS-232 Radio Module.


Источники вдохновения:
Справочно:

Подпрограммы ОРДОС
0A800HГотовность принтера
0A803HПечатьВыдача кода в регистре C на принтер.
0A806H

Служебные ячейки ОРДОС
0A800H - 0A87FHДрайвер принтера LPT
0A800H - 0AFFFHДрайверы
0BFFDHгорячий выход в ОРДОС
0BFB8H

Подпрограммы "Монитора"
0F803HВвод символа с клавиатурыA - введенный символ
0F806HВвод байта с магнитофона
0F809HВывод символа на экранC - выводимый символ
0F80CHЗапись байта на магнитофон
0F80FHВывод символа на дисплейКод символа в А, регистры сохраняются.
0F812HОпрос состаяния клавиатурыA=00 - клавиши не нажаты, A=0FFH - нажата любая клавиша
0F815HВывод байта на экран в HEXA - выводимый символ
0F818HВывод на экран сообщенияHL - адрес начала сообщения, 0 - конец.
0F81BHВвод кода нажатой клавишиA=0FFH - не нажата, 0FEH - рус.лат, или код клавиши.
0F81EHЗапрос положения курсораH - номер строки, L - номер позиции
0F821HДрайвер печатающего устройства
0F824HЧтение файла с магнитной ленты
0F827HЗапись файла на магнитофонОтключено в Монитор-2
0F82AH
0F82DHраспаковка и размещение внутреннего знакогенератора в области служебного ОЗУ. Обращение к этой подпрограмме (без входных параметров) позволяет восстановить знакогенератор.
0F830H
0F833H
0F836HЧтение байта из доп. страницы.HL - адрес ячейки, A - номер страницы, C - считанный байт
0F839HЗапись байта в доп. страницу.HL - адрес ячейки, A - номер страницы, C - записываемый байт
0F83CHустановка курсора в заданное знакоместо на экране дисплея. В регистр «Н» заносится значение номера строки (0—18Н), регистр «L» — номер позиции (0—3FH).
0F83FHГенерация звукового сигнала

Служебные ячейки "Монитора"
0F3C4H-0F3C5Hадрес подпрограммы звукового сигнала 0F83FH
0F3C7H-0F3C8Hадрес подпрограммы ввода символа с клавиатуры 0F803H
0F3CAH-0F3CBHадрес подпрограммы принтера 0F821H
0F3CDH-0F3CEHадрес подпрограммы вывода символа на экран 0F809H
0F3D1Hячейка, в которой хранится начальный адрес знакогенератора. При инициализации МОНИТОР записывает в эту ячейку значение - 0F000H. При необходимости пользователь может указать свой адрес, по которому размещен другой знакогенератор. При этом, однако, следует помнить, что драйвер дисплея символы с кодом 00-1FH на экран не выводит и в знакогенераторе для них место не выделяется. Таким образом, знакогенератор всегда начинается с кода 20Н, т. е. "пробела".
0F3D3Hячейка, хранящая признак прямого (00Н) вывода (светлые символы на темном фоне) или инверсного (0FFH) вывода (темные символы на светлом фоне). В цветном режиме цвета изображения и фона меняются местами.
0F3D6H-0F3D7HТёплый старт Монитора
0F3D8Hячейка, содержащая адрес возврата из подпрограммы чтения байта (OF806H) при "зависании" или выпадании сигнала. МОНИТОР заносит в эту ячейку адрес "теплого старта". Программа пользователя должна заносить в эту ячейку свой адрес возврата, в противном случае при невозможности чтения байта программа осуществит возврат в МОНИТОР.
0F3DAHячейка, в которой хранится константа записи на магнитную ленту. Для скорости 1200 бод. Она имеет значение 40Н.
0F3DBHячейка, хранящая константу чтения с магнитной ленты. Для стандартной скорости - 60Н.
0F3E7HТон звука подпрограммы F83FH
0F3DH
0F3DH
0F3DH

Порты "Орион-128" (Радио 1993 №4) [ Info ]
0F400H-0F403Hпорты программной клавиатуры (РК86, МС7007)
0F500H-0F503Hпорты внешнего ROM-диска
0F600H-0F603Hпорты для проведения экспериментов, временного использования. Определенного назначения не имеют
Платы расширения
0F700H-0F70FHРезерв (системные регистры "ORION-Рго") КНГМД выбирается по адресам F700/F720 (SP-Comp. Club)
0F710H-0F71FHКонтроллер НГМД и НТМД
0F720H-0F72FHПорт принтера, джойстики, дополнительные параллельные портыКНГМД выбирается по адресам F700/F720 (SP-Comp. Club)
0F730H регистр данных КР580ВВ51 (COM1)
0F731H регистр управления КР580ВВ51 (СОМ1)
0F734H регистр данных КР580ВВ51 (COM2)
0F735H регистр управления КР580ВВ51 (СОМ2)
0F738H счетчик канала 0 КР580ВИ53
0F739H счетчик канала 1 КР580ВИ53
0F73AH счетчик канала 2 КР580ВИ53
0F739H регистр управления КР580ВИ53
0F740H-0F747HТаймер звукового сигнала КР580ВИ53
0F748H-0F74FHМузыкальный процессор AY8910/12
0F750H-0F75FHЧасы, календарь 512ВИ1 (DS12885)/IDE адаптер ПРО
0F752H-0F753HSD карта - введено 28/06/2022
0F760H-0F76FHКонтроллер прерываний КР580ВН59 RTC (часы) на ИМС 512ВИ1 схема Акимова, рег-ры данных и адреса поменяны местами
0F770H-0F77FHEthernet RTL8019AS/DM9000
0F780H-0F78FHКР580ВВ55 Ethernet RTL8019AS/DM9000
0F790H-0F797HАппаратная клавиатура PS/2 HT6542B
0F798H-0F79FHПоследовательный интерфейс КР580ВВ51
0F7A0H-0F7AFHВнешний квазидиск большой ёмкости Музыкальный процессор AY8910/12
0F7B0H-0F7BFHCF карта (IDE) RTC (часы) на ИМС 512ВИ1 (авторская схема)
0F7C0H-0F7CFНЧасы DS1307
0F7D0H-0F7DFHРезерв
0F7E0H-0F7EFHПорт RS232 СОМ2 (и COM3) 16С550
0F7F0H-0F7FFHМузыкальный процессор AY8910/12
Только для записи, при чтении будет доступно ПЗУ с Монитором:
0F800H-0F8FFHColor Mode
0F900H-0F9FFHRAM Page
0FA00H-0FAFFHVideo Address
0FB00H-0FBFFHDisplay Type: Graphics/Text


Разъём расширения (Радио 1993 №4) [ Info ]
Контакт ЦепьКонтактЦепь КонтактЦепь
Орион-128 классика Восточный Экспресс 512 Орион-М Орион-128 классикаВосточный Экспресс 512Орион-МОрион-128 классикаВосточный Экспресс 512Орион-М
A1 /F70x B1 C1 /RES /RES
A2 /F71x B2 -5V -5V -5V C2 +12V +12V+12V
A3 /F72x B3 D0 D0 D0 C3 D1 D1 D1
A4 /F73x B4 D2 D2 D2 C4 D3 D3 D3
A5 /F74x B5 D4 D4 D4 C5 D5 D5 D5
A6 /F75x B6 D6 D6 D6 C6 D7 D7 D7
A7 /F76x B7 /SYNC C7 A10 A10 A10
A8 /F77x B8 C8 A11 A11 A11
A9 /F78x B9 C9 A14 A14 A14
A10 /F79x B10 A19 C10A13 A13 A13
A11 /F7Ax B11 A18 C11A12 A12 A12
A12 /F7Bx B12 A17 C12A15 A15 A15
A13 /F7Cx B13 A16 C13A9 A9 A9
A14 /F7Dx B14A8 A8 A8 C14/WR /WR /WR
A15GND GND GND B15GND GND GND C15GND GND GND
A16 /F7Fx B16BEEP BEEP C16/INT /INT/INT-/INT0
A17 SPI MISO B17 /INT1 C17A7 A7 A7
A18 SPI MOSI B18 /NMI C18A6 A6 A6
A19 SPI SCK B19 /M1 C19A5 A5 A5
A20 I2C SDA B20RESET RESET C20A4 A4 A4
A21 I2C SCL B21 C21A3 A3 A3
A22 B22/BACS /IORQ C22A2 A2 A2
A23 B23CLKF1 PHI C23A1 A1 A1
A24 B24CLK1,25 C24A0 A0 A0
A25 B25IKS /INT2 C25/RD /RD /RD
A26 B26/SELROM /F8xx C26
A27 +5V B27+5V +5V +5V C27+5V +5V +5V
A28 B28 C28/INTE
A29 +3,3V B29/SELP4 /FBxx C29READY /WAIT
A30 /F7E0H B30/SELPR /F7xx C30/RESKEY /RESKEY/RESKEY
A31 CLK B31/CLK10 /OSC C31/блок. RAM
A32 B32/DSYN 50/60Hz/MREQ C32DSYN DSYN

Дополнительно:
Mirror Orion site
Eugene's site
Old Lazy Cats Group
Mirror efu site

reliablecounter.com
reliablecounter blog
Посещений - счетчик посещений