Передовица » Hardware » Частные разработки » Модуль ПЗУ большого объёма

Модуль ПЗУ большого объёма

Проектировался как частичная замена дисководу, автор - инженер из г. Камышин, представляет собой 32+2 Кб постоянной памяти, доступной через регистры ввода/вывода. Был предназначен для частичной замены дисководу. Может использоваться для автозагрузки при включении компьютера. Выполнен в единственном экземпляре.

Конструкция

Состоит из двух микросхем ПЗУ и нескольких вспомогательных микросхем:

  1. 2 Кб-ПЗУ (D1) - первые 256 байт доступны через адресное окно драйвера ячейки и в них размещается код автозагрузчика, таким образом ячейка может распознаваться системным монитором как источник операционной системы;
  2. 32 Кб-ПЗУ (D3) - доступны через адресное окно портов ввода/вывода ячейки;
  3. Дешифраторы адресов портов;
  4. Счётчики адреса для D3.

Адреса регистров

Для выбора адреса D3 используются два счётчика адреса, обозначаемых далее как AdrL (155ие19, 8 бит) и AdrH (2 x 155ие15, 4 + 4 бит), итого 16 разрядов, из них используется 15.

x - номер слота, n - номер слота + 8:

  • Cx00..CxFF - младшие 256 байт D1. Остальные адреса этого ПЗУ недоступны.
  • C0n0 - чтение текущего байта D3, заданного состоянием AdrH:AdrL.
  • C0n1 - инкремент Adr (все 16 разрядов).
  • C0n2 - запись AdrH.
  • C0n3 - сброс AdrH и AdrL.

Порядок работы с устройством

ПЗУ D1 может содержать любой программный код, который напрямую доступен центральному процессору. В частности, там может содержаться сигнатура автозагрузчика, в этом случае системный монитор при включении машины передаст управление коду, хранящемуся в D1 (т.е. устройство будет загрузочным).

D3 разбито на блоки по 256 байт. Чтобы считать блок, нужно задать его адрес и в цикле запросить все 256 байт. Адрес задаётся сбросом счётчиков адреса (C0n3) с последующей записью номера блока в регистр AdrH (C0n2). Чтение очередного байта происходит из регистра чтения (C0n0), для перехода к следующему байту необходимо увеличить счётчик, выполнив произвольную операцию с регистром увеличения адреса (C0n1).

Сброс счётчиков можно не выполнять, если предыдущий блок прочитан полностью. Если считываются несколько блоков подряд, можно также пропустить запись номера блока в регистр AdrH для второго и последующих читаемых блоков.

Простейший автозагрузчик нулевого блока D3 в ОЗУ, с последующей передачей управления:

0004-  A2 20 ..   ""?"    LDX  #$20   '?
0006-  A0 00 ..   " ?"    LDY  #$00   '?
0008-  A2 03 ..   ""?"    LDX  #$03   '?
000A-  86 3C ..   "??"    STX  $3C
000C-  84 50 ..   "?p"    STY  $50
000E-  A9 00 ..   ")?"    LDA  #$00   '?
0010-  85 51 ..   "?q"    STA  $51
0012-  AD B3 C0   "-3@"   LDA  $C0B3
0015-  AD B0 C0   "-0@"   LDA  $C0B0
0018-  91 50 ..   "?p"    STA  ($50), Y
001A-  AD B1 C0   "-1@"   LDA  $C0B1
001D-  C8 .. ..   "H"     INY  
001E-  D0 F5 ..   "PУ"    BNE  $0015
0020-  4C 00 08   "l??"   JMP  $0800

На сайте "Проект создания реплик ПЭВМ Агат" выложен проект данной платы.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *