Rev 543 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
826 | lvd | 1 | формат и адреса регистров на spi-шине avr<>fpga. |
67 | lvd | 2 | |
826 | lvd | 3 | напоминаю, установка номера - при spics_n=1, далее в 0 и шлём байт (1 или |
4 | несколько). |
||
67 | lvd | 5 | |
88 | lvd | 6 | |
826 | lvd | 7 | Статус подготавливается к выдаче (лочится) в момент spics_n 0->1. |
8 | Cтатус: (считывается при spics_n=1 в момент записи номера): |
||
9 | bit.7 - Read-Not-Write (rnw): =1 - спектрум заваитился на чтении, =0 - на записи. |
||
10 | \bits.6..0 - какой девайс заваитил, если =1. Пока есть |
||
11 | bit.0 - если 1, заваитили глюк-часы. |
||
12 | bit.1 - 1 если заваитил модем по кондрашкину |
||
88 | lvd | 13 | |
826 | lvd | 14 | Чтобы только считать статус - надо сгенерировать фронт spics_n 0->1. |
15 | Если spics_n был в 1 - надо его передёрнуть. |
||
88 | lvd | 16 | |
95 | lvd | 17 | |
826 | lvd | 18 | после передерга spics_n 0->1 номер заново надо ставить. |
67 | lvd | 19 | |
20 | |||
826 | lvd | 21 | регистр $00 - дефолтный номер, в него можно писать, это пойдёт в |
22 | игнор. Устанавливается автоматически в момент spics_n 0->1 |
||
67 | lvd | 23 | |
24 | |||
826 | lvd | 25 | регистр $10 - данные для клавиатуры (40 бит сдвиговый рег), запоминаются |
26 | последние 40 вдвинутых битов. Процесс вдвига бит можно проводить или сразу |
||
27 | пока spics_n=0, или с перерывами, каждый раз устанавливая номер этого |
||
28 | регистра. |
||
29 | регистр $11 - в момент spics_n 0->1 с этим установленным регистром |
||
30 | уходят данные в рабочий регистр клавиатуры (то, что записано было в $10). |
||
67 | lvd | 31 | |
543 | lvd | 32 | |
33 | |||
826 | lvd | 34 | регистр $20 - X coord мыши |
35 | $21 - Y coord мыши |
||
36 | $22 - кнопки мыши |
||
37 | $23 - кемстон жойстик |
||
38 | каждый из регистров уходит в спектрум по факту spics_n 0->1 |
||
67 | lvd | 39 | |
110 | lvd | 40 | |
826 | lvd | 41 | регистр $30 - регистр сброса - задает сам факт сброса Z80. Факт |
42 | сброса - spics_n 0->1. вдвигать данные не обязательно (они в игнор). |
||
67 | lvd | 43 | |
88 | lvd | 44 | |
45 | |||
46 | |||
826 | lvd | 47 | часики и прочие ваит-порты: |
228 | lvd | 48 | |
49 | |||
826 | lvd | 50 | $40 - регистр чтения-записи данных, которые ожидает спектрум в ваите. То, что |
51 | в него пишется - идёт в спектрум, если тот ваитится на чтении, или же из этого |
||
52 | регистра считывается то, что спектрумом записано, если тот ваитится на записи. |
||
53 | После обмена, в момент spics_n 0->1 спектрум разваитивается, прерывание на |
||
54 | аврку снимается, из статуса битик обнуляется. |
||
88 | lvd | 55 | |
826 | lvd | 56 | регистр $40 общий для всех ваит-портов |
88 | lvd | 57 | |
98 | lvd | 58 | |
826 | lvd | 59 | $41 [7:0] - регистр чтения адреса, который был установлен спектрумом для глюкочасов. |
228 | lvd | 60 | |
826 | lvd | 61 | $42 [2:0] - регистр, в котором адреса ША Z80 A[10:8] в момент чтения или записи в |
62 | компорты ($F8EF..$FFEF). Позволяет, собственно, различать эти самые $F8..$FF. |
||
228 | lvd | 63 | |
64 | |||
65 | |||
66 | |||
826 | lvd | 67 | Конфиг - регистры: |
98 | lvd | 68 | |
826 | lvd | 69 | config0: $50 - только на запись: |
98 | lvd | 70 | |
826 | lvd | 71 | бит 0 - включение ВГА (=1) регистр актуализируется после записи данных по фронту spics_n 0->1. |
123 | lvd | 72 | |
826 | lvd | 73 | бит 1 - подача нми. переход из 1 в 0 вызывает nmi на z80 |
213 | lvd | 74 | |
826 | lvd | 75 | бит 2 - транслируется на $FE.D6 (чтение спеком с мафона). |
284 | lvd | 76 | |
826 | lvd | 77 | бит 3 - если 1, то выводится tape-out, иначе - beeper |
284 | lvd | 78 | |
826 | lvd | 79 | биты 5..4 -- режим растра (pent/60hz/48k/128k) |
543 | lvd | 80 | |
826 | lvd | 81 | config1: $51 - только запись: |
82 | |||
83 | биты 3..0: маска дисководов для подмены ROM |
||
84 | биты 7..4: не исп. |
||
543 | lvd | 85 | |
86 | |||
87 | |||
826 | lvd | 88 | Доступ к SD-карте: |
543 | lvd | 89 | |
826 | lvd | 90 | Регистр данных - $60, |
91 | регистр управления - $61: |
||
92 | bit 7 - lock (R/W), 0 после сброса. |
||
93 | bit 0 - CS_n на карту (W/O), 1 после сброса. |
||
543 | lvd | 94 | |
826 | lvd | 95 | Получение доступа: |
96 | 1. записать в $61 CS_n=1, lock=1 |
||
97 | 2. Считывая $61, дождаться lock=1. Это произойдёт, когда Z80 установит CS_n в 1 или же сразу, |
||
98 | если Z80 CS_n стояло в 1. Пока lock=1, Z80 не видит SD-карту, доступ у АВРки, пока она |
||
99 | не отдаст доступ обратно Z80. |
||
543 | lvd | 100 | |
826 | lvd | 101 | Работа с SD-картой: |
102 | 1. Удерживая lock=1, управлять CS_n. |
||
103 | 2. Считанное из $60 значение - последний пришедший байт из SD-карты, отправленное в $60 |
||
104 | значение - отправляется в SD-карту. Обмен с SD-картой инициируется сразу же после |
||
105 | spics_n 0->1, потому перед считыванием принятого в процессе этого обмена байта |
||
106 | необходима пауза. Такой паузой служит установка адреса регистра при spi_cs_n=1. |
||
107 | Внимание: первое считанное из $60 значение после установки lock 0->1 - случайное. |
||
108 | |||
109 | Отпускание SD-карты: |
||
110 | 1. Удерживая lock=1, установить CS_n=1. |
||
111 | 2. Установить lock=0, CS_n=1. |
||
112 |