... продолжу
Заносим с адреса 0000: 3E 55 32 С0 77 3E AA
На ассемблере будет так
Код:
MVI A, 55h ; Занести 55h в аккумулятор
STA 77C0h ; записать из аккумулятора по адресу 77С0h
MVI A, 0AAh ; Занести 0AAh в аккумулятор
Процессор на шинах будет творить следующее
Код:
шина
адрес данные управление
0000 3E -MEMRD (чтение из памяти)
0001 55 -MEMRD (чтение из памяти)
0002 32 -MEMRD (чтение из памяти)
0003 C0 -MEMRD (чтение из памяти)
0004 77 -MEMRD (чтение из памяти)
77C0 55 -MEMWR (запись в память) Во блин, куда это проц полез. Сказал я себе в 1987году.
0005 3E -MEMRD (чтение из памяти)
0006 AA -MEMRD (чтение из памяти)
Ещё интиресно посмотреть как проц себя ведёт когда мы обращаемся к подпрограммам.
Заносим с адреса 0000: 31 FF 74 21 12 17 CD 0A 00 76 E5 21 99 88 00 E1 C9
На ассемблере будет так
Код:
0000 31 FF 74 LXI SP, 74FFH ; НАСТРОИТЬ УКАЗАТЕЛЬ СТЕКА
0003 21 12 17 LXI H, 1712h ; посестить в HL пару значение 1712h
0006 CD 0A 00 CALL DELAY ; ВЫЗОВ ПОДПРОГРАММЫ Delay
0009 76 HLT ; останов
000A E5 DELAY: PUSH H ; СОХРАНИТЬ В СТЕКЕ ЗНАЧЕНИЕ РЕГИСТРОВОЙ ПАРЫ HL
000B 21 99 88 LXI 8899h ; ТУТ САМА ПОДПРОГРАММА. И она "портит" регистрвую пару HL,
000E 00 NOP ; НО МЫ СЕЙЧАС больше НИЧЕГО НЕ ДЕЛАЕМ
000F E1 POP H ; ВОССТАНОВИТЬ HL пару
0010 C9 RET ; ВОЗВРАТ ИЗ ПОДПРОГРАММЫ
Процессор на шинах будет творить следующее
Код:
шина
адрес данные управление
0000 31 -MEMRD (чтение из памяти)
0001 FF -MEMRD (чтение из памяти)
0002 74 -MEMRD (чтение из памяти)
0003 21 -MEMRD (чтение из памяти)
0004 12 -MEMRD (чтение из памяти)
0005 17 -MEMRD (чтение из памяти)
0006 CD -MEMRD (чтение из памяти)
0007 0A -MEMRD (чтение из памяти)
0008 00 -MEMRD (чтение из памяти)
74FE 00 -MEMWR (запись в память) ; ЭТО ПРОЦЕССОР СОХРАНИЛ В СТЕКЕ АДРЕС КУДА ОН ДОЛЖЕН
74FD 09 -MEMWR (запись в память) ; ВЕРНУТЬСЯ ИЗ ПОДПРОГРАММЫ. АДРЕС 0009
000A E5 -MEMRD (чтение из памяти)
74FC 17 -MEMWR (запись в память) ; ЭТО ПРОЦЕССОР СОХРАНИЛ В СТЕКЕ ЗНАЧЕНИЕ HL ПАРЫ.
74FB 12 -MEMWR (запись в память) ; в HL ПАРЕ ЗНАЧЕНИЕ 1712h
000B 21 -MEMRD (чтение из памяти)
000C 99 -MEMRD (чтение из памяти)
000D 88 -MEMRD (чтение из памяти)
000E 00 -MEMRD (чтение из памяти)
000F E1 -MEMRD (чтение из памяти)
74FB 12 -MEMRD (чтение из памяти) ; ЭТО ПРОЦЕССОР ВОССТАНОВИЛ ИЗ СТЕКА
74FC 17 -MEMRD (чтение из памяти) ; ЗНАЧЕНИЕ HL ПАРЫ 1712h
0010 C9 -MEMRD (чтение из памяти)
74FD 09 -MEMRD (чтение из памяти) ; ЭТО ПРОЦЕССОР ВОССТАНОВИЛ ИЗ СТЕКА
74FE 00 -MEMRD (чтение из памяти) ; АДРЕС СЛЕДУЮЩЕЙ КОМАНДЫ ПОСЛЕ ВЫЗОВА ПОДПРОГРАММЫ. АДРЕС 0009
0009 76 -MEMRD (чтение из памяти)
Вот так.
На процессорной плате стоит ПЗУ 8кБ и занимает стандартные адреса РК E000-FFFFh. Да, да с E000. Именно так разбито адресное пространство 555ИД7 в РК. Значит по адресу 0000 в ПЗУ я пишу команду безусловного перехода на адрес F800h. Остальное место (6кБ) остается под наши дополнения. Об этом чуть позже.
Для подключения к VGA монитору я изменил в мониторе настройку контроллера дисплея 580ВГ75 (идею взял отсюда http://www.zx-pk.ru/showthread.php?t=13148). Все программы РК-86 работают нормально. ОЗУ поставил статическое на 32кБ.
Сначала в схеме у меня стоял системный контроллер 580ВК28 - для буферирования шины данных и дешифрации сигналов чтение/запись памяти и чтение/запись портов. В РК-86 как известно обращение ко всем контроллерам идёт как к ячейкам памяти, а не портам. Ну я то делал пульт на котором есть светодиоды обращения к портам (команды IN, OUT). Короче не получилось жить вместе 580ВК28 и 580ВТ57. ПДП нормально не стартовал. Я поставил ПДП 1810ВТ37, написал прогу инициализации 1810ВТ37 и 580ВГ75, прошил в ПЗУ и изображение на мониторе появилось - ПДП заработало. Но инициализация ВТ37 длиннее, чем ВТ57. Пришлось выкинуть системный контроллер и заменить его на 555АП6 и 555ЛП8. На плате так и осталась пустая панель под 580ВК28.
Для превращения в полноценный РК-86 была разработана плата на которой стояли контроллер ПДП (580ВТ57), контроллер дисплея (580ВГ75) со своей "обвязкой", порты 580ВВ55. Клавиатуру решил подключить от PC PS/2. Контроллер PS/2-клавиатуры был взят из http://www.zx-pk.ru/showthread.php?t=9294
Надо было ещё откуда то и программы загружать. Придумал ROM-диск. Флеш память использовал PA28F400 512КБ. Ну просто была микросхема. Как я ее "прошивал" отдельная история.
Схемы я рисую в программе Orcad v9.2 Печатные платы разрабатываю в SprintLayOut. Выложить всё сюда я не смог. Больно много и размеры ... Всё в архиве можно скачать отсюда http://narod.ru/disk/65375399001.094.../RK86.rar.html
Там схемы, платы, фотографии, прошивки. Кстати там в прошивке Монитора 4 раза одно и тоже записано. После эксперементов осталось.
Что творю сейчас. Ну надо как то связать РК и РС. Придумал схему на 580ВВ51. Сделал дополнительные 2 директивы для ввода и вывода по COM (место то в ПЗУ 6кБ свободно). Прога со стороны PC написана на Delphi. И уже собирался печатную плату травить, как передумал. Хочу сделать так. Берем SD диск и форматируем на РС в FAT16. Пишем нужные нам файлы на SD. Вставляем в РК. Читаем с SD и запускаем. Переписать назад с РК на PC не обдумывал. Мне вроде не надо.
Может что то забыл написать. Спрашивайте.