Subversion Repositories pentevo

Rev

Rev 896 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

формат и адреса регистров на spi-шине avr<>fpga.

напоминаю, установка номера - при spics_n=1, далее в 0 и шлём байт (1 или
несколько).


Статус подготавливается к выдаче (лочится) в момент spics_n 0->1.
Cтатус: (считывается при spics_n=1 в момент записи номера):
bit.7 - Read-Not-Write (rnw): =1 - спектрум заваитился на чтении, =0 - на записи.
\bits.6..0 - какой девайс заваитил, если =1. Пока есть
 bit.0 - если 1, заваитили глюк-часы.
 bit.1 - 1 если заваитил модем по кондрашкину

Чтобы только считать статус - надо сгенерировать фронт spics_n 0->1.
Если spics_n был в 1 - надо его передёрнуть.


после передерга spics_n 0->1 номер заново надо ставить.


регистр $00 - дефолтный номер, в него можно писать, это пойдёт в
игнор. Устанавливается автоматически в момент spics_n 0->1


регистр $10 - данные для клавиатуры (40 бит сдвиговый рег), запоминаются
              последние 40 вдвинутых битов. Процесс вдвига бит можно проводить или сразу
              пока spics_n=0, или с перерывами, каждый раз устанавливая номер этого
              регистра.
регистр $11 - в момент spics_n 0->1 с этим установленным регистром
уходят данные в рабочий регистр клавиатуры (то, что записано было в $10).



регистр $20 - X coord мыши
        $21 - Y coord мыши
        $22 - кнопки мыши
        $23 - кемстон жойстик
каждый из регистров уходит в спектрум по факту spics_n 0->1


регистр $30 - регистр сброса - задает сам факт сброса Z80. Факт
сброса - spics_n 0->1. вдвигать данные не обязательно (они в игнор).




часики и прочие ваит-порты:


$40 - регистр чтения-записи данных, которые ожидает спектрум в ваите. То, что
в него пишется - идёт в спектрум, если тот ваитится на чтении, или же из этого
регистра считывается то, что спектрумом записано, если тот ваитится на записи.
После обмена, в момент spics_n 0->1 спектрум разваитивается, прерывание на
аврку снимается, из статуса битик обнуляется.

регистр $40 общий для всех ваит-портов


$41 [7:0] - регистр чтения адреса, который был установлен спектрумом для глюкочасов.

$42 [2:0] - регистр, в котором адреса ША Z80 A[10:8] в момент чтения или записи в
компорты ($F8EF..$FFEF). Позволяет, собственно, различать эти самые $F8..$FF.




Конфиг - регистры:

config0: $50 - только на запись:

         бит 0 - включение ВГА (=1) регистр актуализируется после записи данных по фронту spics_n 0->1.

         бит 1 - подача нми. переход из 1 в 0 вызывает nmi на z80

         бит 2 - транслируется на $FE.D6 (чтение спеком с мафона).

         бит 3 - если 1, то выводится tape-out, иначе - beeper

         биты 5..4 -- режим растра (pent/60hz/48k/128k)




Доступ к SD-карте:

Регистр данных     - $60,
регистр управления - $61:
                         bit 7 - lock (R/W), 0 после сброса.
                         bit 0 - CS_n на карту (W/O), 1 после сброса.

Получение доступа:
1. записать в $61 CS_n=1, lock=1
2. Считывая $61, дождаться lock=1. Это произойдёт, когда Z80 установит CS_n в 1 или же сразу,
   если Z80 CS_n стояло в 1. Пока lock=1, Z80 не видит SD-карту, доступ у АВРки, пока она
   не отдаст доступ обратно Z80.

Работа с SD-картой:
1. Удерживая lock=1, управлять CS_n.
2. Считанное из $60 значение - последний пришедший байт из SD-карты, отправленное в $60
   значение - отправляется в SD-карту. Обмен с SD-картой инициируется сразу же после 
   spics_n 0->1, потому перед считыванием принятого в процессе этого обмена байта
   необходима пауза. Такой паузой служит установка адреса регистра при spi_cs_n=1.
Внимание: первое считанное из $60 значение после установки lock 0->1 - случайное.

Отпускание SD-карты:
1. Удерживая lock=1, установить CS_n=1.
2. Установить lock=0, CS_n=1.