... продолжу
Заносим с адреса 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 не обдумывал. Мне вроде не надо.
Может что то забыл написать. Спрашивайте.




Ответить с цитированием