Rev 826 | 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)
config1: $51 - только запись:
биты 3..0: маска дисководов для подмены ROM
биты 7..4: не исп.
Доступ к 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.