Январь 2019
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

Календарь Календарь

Последние темы
» Разработка "Радио - РК2019М".
автор alemorf Сегодня в 12:39

» Карта памяти ИРИШИ для программистов
автор barsik Сегодня в 11:20

» [ANN] RCO Rampant Coin (RCO). Криптовалюта Rampant Coin.
автор Viktor2312 Сегодня в 05:04

» Статьи, заметки, очерки, разное...
автор Viktor2312 Сегодня в 04:53

» Новинки.
автор Viktor2312 Сегодня в 04:22

» Немного о портах
автор barsik Вчера в 11:27

» ПЭВМ "АПОГЕЙ - БК01Ц".
автор alemorf Пн Янв 14 2019, 14:26

» Сборка и настройка платы Apple-II
автор barsik Пн Янв 14 2019, 13:28

» Апогей-БК01Ц: Online эмулятор
автор alemorf Пн Янв 14 2019, 10:31

» Жалобы/пожелания по работе форума
автор alemorf Пн Янв 14 2019, 10:00

» Апогей-БК01Ц: Внешнее ПЗУ
автор alemorf Пн Янв 14 2019, 09:52

» Радио-86РК: внешние видео-адаптеры
автор barsik Пн Янв 14 2019, 03:04

» Прошивки УФ-ПЗУ и РПЗУ ИРИШИ
автор Viktor2312 Вс Янв 13 2019, 12:07

» Юниор ПК ФВ 6506. Информация, докуметы, фото.
автор alemorf Вс Янв 13 2019, 02:54

» Схема блока питания В265.
автор sergey1966 Сб Янв 12 2019, 17:46

» Кратко о компьютере АГАТ
автор alemorf Пт Янв 11 2019, 10:44

» Эльф 2
автор alemorf Чт Янв 10 2019, 23:01

» Упрощаем схему Микро-80 и исправляем косяки. И собираем по технологиям 80-х годов.
автор alemorf Чт Янв 10 2019, 14:51

» ПО ИРИТЕКСТ
автор barsik Чт Янв 10 2019, 09:58

» РК86: подключение винчестера IDE (или CF-карты)
автор bug19 Ср Янв 09 2019, 05:04

» Датчики. Статьи, описания, разное...
автор Viktor2312 Ср Янв 09 2019, 02:16

» Радио-86РК: Подключение дисковода
автор barsik Пн Янв 07 2019, 01:46

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Вс Янв 06 2019, 17:22

» РК86 в роли терминала
автор barsik Пт Янв 04 2019, 17:06

» Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Янв 01 2019, 20:45

Самые активные пользователи за месяц
Viktor2312
 
barsik
 
alemorf
 
bug19
 
QUATTRO
 
san010101
 
sergey1966
 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Апогей-БК01Ц: Внешнее ПЗУ

Перейти вниз

Апогей-БК01Ц: Внешнее ПЗУ

Сообщение  alemorf в Пн Янв 14 2019, 09:52

Исходники: http://github.com/alemorf/retro/tree/master/apogee_bk01-rom_disk

Это плата внешнего ПЗУ для компьютера Апогей БК01. Она нужна, что бы быстро запускать программы. Набор программ вы выбираете сами. Используется микросхема ПЗУ от 128 до 512 кБ. Программы хранятся в сжатом виде, я записал 740 кБ программ на 512 кБ плату. Это почти все разработанные программы для Апогея.

На основе ПЗУ 49LF00x

Однажды я вытащил целую горсть микросхем ПЗУ 49LF004 из старых материнских плат. Хотелось использовать их, но на первый взгляд эти ПЗУ не совместимы со стандартными ПЗУ серий 27C, 49F, которые подключаются к Апогею. Отличие в том, что у 49LF шина адреса мультиплексирована. У микросхемы 11 линий адреса и вход ROW/COLUMN. Сначала надо подать на шину адреса старшую часть адреса, затем подать 0 на вход R/C, затем подать младшие 11 бит адреса, затем подать 1 на вход R/C. И только после этого на выходе появятся данные.

Казалось бы, что компьютер, не предназначенный для работы с такой ПЗУ, ничего прочитать из неё не сможет. Но я придумал как. Если подключить линию A0 адреса компьютера, ко входу R/C ПЗУ, а линии адреса A1-A11 компьютера к A0-A10 ПЗУ, то два последовательных чтения из ПЗУ будут загружать старшую и младшую часть адреса идентичными значениями. И новые данные будут появляться на каждом нечетном адресе.

Адрес чтения 0 (000b). Старшая часть адреса - 0 (00b). Вход R/C - 0. На выходе ПЗУ данные для адреса 0h
Адрес чтения 1 (001b). Младшая часть адреса - 0 (00b). Вход R/C - 1. На выходе ПЗУ данные для адреса 0h
Адрес чтения 2 (010b). Старшая часть адреса - 1 (01b). Вход R/C - 0. На выходе ПЗУ данные для адреса 0h
Адрес чтения 3 (011b). Младшая часть адреса - 1 (01b). Вход R/C - 1. На выходе ПЗУ данные для адреса 801h
Адрес чтения 4 (100b). Старшая часть адреса - 2 (10b). Вход R/C - 0. На выходе ПЗУ данные для адреса 801h
Адрес чтения 5 (101b). Младшая часть адреса - 2 (10b). Вход R/C - 1. На выходе ПЗУ данные для адреса 1002h
Адрес чтения 6 (110b). Старшая часть адреса - 3 (11b). Вход R/C - 0. На выходе ПЗУ данные для адреса 1002h
Адрес чтения 7 (111b). Младшая часть адреса - 3 (11b). Вход R/C - 1. На выходе ПЗУ данные для адреса 1803h


Проверка на реальном компьютере:



Получается, что компьютер может прочитать из такой ПЗУ программу длиной 2 Кб. Только записывать эту программу надо "по диагонали", по адресам: 0, 801h, 1002h, 1803h.

При чтении у нас каждый прочитанный байт дублируется. Мне пришлось разработать программу, машинный код которой представляет собой повторяющиеся байты. Интересная задача? На первый взгляд эта задача кажется сложной, но оказалось, что программа пишется без проблем. Многие команды размером в один байт можно безопасно выполнять два раза, например, чтение или запись в память. Чуточку сложнее с 3-байтными командами, командами сложения и перехода.

В приведенной ниже программе байты получившегося машинного кода указаны после запяточего. Все байты дублируются.

Код:

org 0h
 NOP            ; 00
 NOP            ; 00
 NOP            ; 00
 LD DE, 11h     ; 11 11 00
 NOP            ; 00
 LD H, D       ; 62
 LD H, D       ; 62 лишняя команда
 LD L, D       ; 6A
 LD L, D       ; 6A лишняя команда
 LD BC, 0AE01h  ; 01 01 AE
 XOR (HL)       ; AE лишняя команда, портит регистр A.
 JP 0x00C3      ; C3 C3 00
 NOP            ; 00 лишняя команда
 org 013h
 db 0 байт, 0 байт, 1 байт, 1 байт, 2 байт, 2 байт...
 org 0C1h
 DEC HL         ; 2B
C2: DEC HL         ; 2B
C3: INC DE         ; 13
 INC DE         ; 13
 LD A,(DE)      ; 1A
 LD A,(DE)      ; 1A
 LD (HL),A      ; 77
 LD (HL),A      ; 77
 INC HL         ; 23
 INC HL         ; 23
 DEC B          ; 05
 DEC B          ; 05
 JP NZ,0x00C2   ; C2 C2 00
 NOP            ; 00
 LD DE, 0xC311  ; 11 11 C3
 JP 0           ; C3 00 00

Эта программа копирует массив значений после директивы "org 013h" в начало памяти, пропуская каждый четный байт, а затем запускает. В этом массиве содержится наша программа, которая загрузит из ПЗУ все, что нам требуется по правилам ПЗУ:

Адрес чтения 000h (0000b). Старшая часть адреса - 0 (000b). Вход R/C - 0.
Адрес чтения 001h (0011b). Младшая часть адреса - 1 (001b). Вход R/C - 1. На выходе ПЗУ данные для адреса 1h.
Адрес чтения 000h (0000b). Старшая часть адреса - 0 (000b). Вход R/C - 0.
Адрес чтения 003h (0101b). Младшая часть адреса - 1 (010b). Вход R/C - 1. На выходе ПЗУ данные для адреса 2h.
Адрес чтения 000h (0000b). Старшая часть адреса - 0 (000b). Вход R/C - 0.
Адрес чтения 005h (0111b). Младшая часть адреса - 2 (011b). Вход R/C - 1. На выходе ПЗУ данные для адреса 3h.
...
Адрес чтения 000h (0000b). Старшая часть адреса - 000h (000b). Вход R/C - 0.
Адрес чтения FFFh (1111b). Младшая часть адреса - 3FFh (1111b). Вход R/C - 1. На выходе ПЗУ данные для адреса 7FFh
Адрес чтения 002h (0010b). Старшая часть адреса - 001h (001b). Вход R/C - 0.
Адрес чтения 001h (0001b). Младшая часть адреса - 000h (000b). Вход R/C - 1. На выходе ПЗУ данные для адреса 800h


У Апогея шина адреса всего 16 бит. Для того, что бы подключить ПЗУ с шиной адреса 19 бит нам не потребовалось ни одной дополнительной микросхемы, потому что шина адреса у этой ПЗУ мультиплексирована. Получилась плата внешнего ПЗУ увеличенного объема содержащая всего одну микросхему.

Схема:



Готовая плата:





Меню платы ПЗУ:



На основе стандартной микросхемы ПЗУ

Так же я разработал плату на основе стандартной ПЗУ 128-512 Кб и программу формирования прошивки для неё. Плата содежит дополнительную микросхему К555ТМ9, которая расширяет шину адреса компьютера с 16 до 19 бит.

Схема:



Готовая плата:








alemorf
новичёк

Сообщения : 39
Дата регистрации : 2018-12-17

Посмотреть профиль http://alemorf.ru/

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения