EasyEDA EasyEDA EasyEDA

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

В 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 кб для "Мониторов" (переключаются встроенными средствами процессора) и 64кб для ROM-диска, 3 порта 82C55, дешифратор на ПЛИС Altera EPM7032/7064, видеоформирователь на EPM7128/7160, при желании звуковой чип AY8910 и часы.
Выведены внешние разъёмы D-SUB, Serial RS232, клавиатура "Микро/Радио" DB25, звук с AY и вход/выход магнитофона 3,5мм, пользовательский разъём DIN41612 3x10 pin, сбоку такой-же разъём для ROM-диска. 3 системных разъёма DIN41612 3x32 pin для плат расширения. Крайний разъём возможно угловой для платы-удлиннителя DIN или адаптер ISA-8 bit. Дабы, хоть как-то стандартизировать, расстояние от края платы до 1 контакта будет 25,4 мм, как и на ISA платах. Межплатное расстояние 20,32 мм.

Примерно так будет. FDD контроллер CF + SD + USB Storage Расширитель слотов Переходник на шину ISA и ZXBUS/NEMO I2C адаптер


Логику работы видеоадаптера на ПЛИС с процессором Z180 вижу так: по пиксельклоку или удвоенному пиксельклоку видеомодуль запрашивает у процессора доступ к шине, посредством сигнала /BUSREQ и, получив разрешение выставляет нужный адрес и читает байт в промежуточный буфер. Так от 1-й до 6-х "плоскостей" в зависимости от видеорежима. Второй вариант аналогичен орионовскому прозрачному доступу к памяти. Синхронизация осуществляется через сигнал PHI процессора. Из промежуточного буфера байты данных с частотой пиксельклока переписываются в регистр вывода и через ЦАП на VGA-монитор.
Оба эти способа позволяют использовать любую частоту тактирования процессора независимо от частоты пиксельклока.
ЦАП 2 бита на каждый из 3-х цветов достаточен для отображения 16 цветов, а в перспективе 64 цвета.
Внутренние счётчики определяют кадровую и строчную частоты, так-же моменты, когда нужно читать видеопамять. Для орионовского экрана 384 пиксела по горизонтали и 256 по вертикали
калькулятор выдал пиксельклок 8,75 мГц, или 17,25 мГц при двойном сканировании. Неотображаемых строк 19, и 160 пикселей по сторонам, которые в дальнейшем можно будет использовать для режимов 480 или 512 точек по горизонтали.
Т.к. физически ОЗУ представляет собой 1 мб линейного пространства, то и "видеоплоскости" будут распологаться в любом месте, а логически, с соответствующими поправками Монитора, всё останется, как и в стандартном "Орион-128".
Порты управления так-же останутся для совместимости, но можно и расширить. Например 0FA00H задаёт начало адреса экранной области, но использует только 2 бита. Управляя всеми 8 битами можно задавать начало с шагом 256 байт, или 8 точек по горизонтали. Получим этакий аппаратный горизонтальный скроллинг по всей оперативке!
Но! Это ещё не всё! Удвоим количество точек по вертикали! А что? Памяти много, сканировать строки всё равно два раза, пусть их будет 512.
А можно показать из них 256 и делать аппаратный вертикальный скроллинг. Подозреваю, что сделать это нетрудно, знакомому с 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. LoRa radio Module. WiFi/BT radio Module.

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

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


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

Подпрограммы "Монитора"
0F803HВвод символа с клавиатурыA - введенный символ
0F806HВвод байта с магнитофона
0F809HВывод символа на экранC - выводимый символ
0F80CHЗапись байта на магнитофон
0F80FHВывод символа на дисплейКод символа в А, регистры сохраняются.
0F812HОпрос состаяния клавиатурыA=00 - клавиши не нажаты, A=0FFH - нажата любая клавиша
0F815HВывод байта на экран в HEXA - выводимый символ
0F818HВывод на экран сообщенияHL - адрес начала сообщения, 00 - конец.
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Генерация звукового сигнала
0F84EHопрос порта мыши
0F854Hчтение сектора с диска
0F857Hзапись сектора на диск
0F85AHA=2 - получить системное время
A=3 - установить системное время
A=4 - прочитать дату из часов реального времени
A=5 - установить дату в часах реального времени
0F85DHРабота с последовательными портами
0F85DHОпрос джойстика

Служебные ячейки "Монитора"
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Н (для процессора КР580ВМ80 с частотой 2,5 МГц).
0F3DBHячейка, хранящая константу чтения с магнитной ленты. Для стандартной скорости - 60Н (для процессора КР580ВМ80 с частотой 2,5 МГц).
0F3E7HТон звука подпрограммы F83FH
0F3DH
0F3DH
0F3DH

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

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

Порты "Орион-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)/ВИ53
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ВН59
0F748H-0F74FHМузыкальный процессор AY8910/12
0F750H-0F75FHЧасы, календарь 512ВИ1 (DS12885)/IDE адаптер ПРО
0F752H-0F753HSD карта - введено 28/06/2022
0F760H-0F76FHКонтроллер прерываний КР580ВН59 RTC (часы) на ИМС 512ВИ1 схема Акимова, рег-ры данных и адреса поменяны местамиВВ51
0F770H-0F77FHМегапорт КР580ВВ55 4 шт. Ethernet RTL8019AS/DM9000
0F780H-0F78FHКР580ВВ55 Ethernet RTL8019AS/DM9000
0F790H-0F797HАппаратная клавиатура PS/2 HT6542B Накопитель ЖД IDE
0F798H-0F79FHПоследовательный интерфейс КР580ВВ51
0F7A0H-0F7AFHВнешний квазидиск большой ёмкости Музыкальный процессор AY8910/12
0F7B0H-0F7BFHCF карта (IDE) RTC (часы) на ИМС 512ВИ1 (авторская схема)
0F7C0H-0F7CFНЧасы DS1307
0F7D0H-0F7DFHМегапорт КР580ВВ55 4 шт.
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
Только для записи с Z80 Card-II Чистякова:
0F8H
0F9H
0FAH
0FAH
0FCH
0FDHAY8910/12 по схеме, совместимой со Спектрумом
0FEH D4 - звук Спектрума. Выбор старших адресов ROM
0FFHЗвук


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

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

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