Rev 831 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 831 | Rev 1186 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | 1 | ||
| 2 | ;LAST UPDATE: 30.06.2019 savelij |
2 | ; LAST UPDATE: 13.02.2025 savelij |
| 3 | 3 | ||
| 4 | ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ |
4 | ; на входе: H-адрес ячейки |
| 5 | ; L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ |
5 | ; L-прочитанное значение |
| 6 | READCMOS DI |
6 | READCMOS DI |
| 7 | PUSH BC |
7 | PUSH BC |
| 8 | LD BC,CMOSD_SET_ADR |
8 | LD BC,CMOSD_SET_ADR |
| 9 | OUT (C),H |
9 | OUT (C),H |
| 10 | LD B,HIGH (CMOSD_RD_WR) |
10 | LD B,HIGH (CMOSD_RD_WR) |
| 11 | IN L,(C) |
11 | IN L,(C) |
| 12 | JR OFF_CMOS |
12 | JR OFF_CMOS |
| 13 | 13 | ||
| 14 | ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ |
14 | ; на входе: H-адрес ячейки |
| 15 | ; L-ЧТО ТУДА ЗАПИСАТЬ |
15 | ; L-что туда записать |
| 16 | WRITECMOS DI |
16 | WRITECMOS DI |
| 17 | PUSH BC |
17 | PUSH BC |
| 18 | LD BC,CMOSD_SET_ADR |
18 | LD BC,CMOSD_SET_ADR |
| 19 | OUT (C),H |
19 | OUT (C),H |
| 20 | LD B,HIGH (CMOSD_RD_WR) |
20 | LD B,HIGH (CMOSD_RD_WR) |
| Line 22... | Line 22... | ||
| 22 | OFF_CMOS POP BC |
22 | OFF_CMOS POP BC |
| 23 | LD A,L |
23 | LD A,L |
| 24 | AND A |
24 | AND A |
| 25 | RET |
25 | RET |
| 26 | 26 | ||
| - | 27 | CMOS_RW |
|
| 27 | CMOS_RW ROMCALL P5_READ_BYTE,ROM_RST83 |
28 | ROMCALL P5_READ_BYTE,ROM_RST83 |
| 28 | LD A,(NEXTBYTERST8) |
29 | LD A,(NEXTBYTERST8) |
| 29 | ADD A,A |
30 | ADD A,A |
| 30 | ADD A,LOW (CMOSRW_TAB) |
31 | ADD A,LOW (CMOSRW_TAB) |
| 31 | LD L,A |
32 | LD L,A |
| 32 | ADC A,HIGH (CMOSRW_TAB) |
33 | ADC A,HIGH (CMOSRW_TAB) |
| Line 36... | Line 37... | ||
| 36 | INC HL |
37 | INC HL |
| 37 | LD H,(HL) |
38 | LD H,(HL) |
| 38 | LD L,A |
39 | LD L,A |
| 39 | JP (HL) |
40 | JP (HL) |
| 40 | 41 | ||
| 41 | CMOSRW_TAB DW INIT_CMOS ;ПРОВЕРКА CRC CMOS И ИНИЦИАЛИЗАЦИЯ ПРИ ОШИБКЕ |
42 | CMOSRW_TAB DW INIT_CMOS ; проверка CRC CMOS и инициализация при ошибке |
| 42 | DW EREAD_CMOS ;ЧТЕНИЕ ЯЧЕЙКИ CMOS |
43 | DW EREAD_CMOS ; чтение ячейки CMOS |
| 43 | DW EWRITE_CMOS ;ЗАПИСЬ ЯЧЕЙКИ CMOS С ПЕРЕСЧЕТОМ CRC |
44 | DW EWRITE_CMOS ; запись ячейки CMOS с пересчетом CRC |
| 44 | DW CLEAR_CMOS ;ПРИНУДИТЕЛЬНЫЙ СБРОС ЗНАЧЕНИЙ CMOS |
45 | DW CLEAR_CMOS ; принудительный сброс значений CMOS |
| 45 | 46 | ||
| 46 | ;ЧТЕНИЕ ЯЧЕЕК ЗАЩИЩАЕМЫХ CRC16 И ПОДСЧЕТ CRC |
47 | ; чтение ячеек защищаемых CRC16 и подсчет CRC |
| 47 | ;НА ВЫХОДЕ: HL=CRC16 БЛОКА |
48 | ; на выходе: HL=CRC16 блока |
| 48 | READCMOS2BUF PUSH DE |
49 | READCMOS2BUF PUSH DE |
| 49 | LD DE,CMOS4CRC16 |
50 | LD DE,CMOS4CRC16 |
| 50 | PUSH DE |
51 | PUSH DE |
| 51 | LD H,CMOS_BYTE_00 |
52 | LD H,CMOS.BYTE_00 |
| 52 | LD B,ECMOS_DEFAULT-CMOS_DEFAULT |
53 | LD B,ECMOS_DEFAULT-CMOS_DEFAULT |
| 53 | RDCMOS2BUF1 CALL READCMOS |
54 | RDCMOS2BUF1 CALL READCMOS |
| 54 | LD (DE),A |
55 | LD (DE),A |
| 55 | INC DE |
56 | INC DE |
| 56 | DEC H |
57 | DEC H |
| 57 | DJNZ RDCMOS2BUF1 |
58 | DJNZ RDCMOS2BUF1 |
| 58 | POP HL |
59 | POP HL |
| 59 | PUSH HL |
60 | PUSH HL |
| 60 | POP IX ;IX=АДРЕС ГДЕ БАЙТЫ ДЛЯ СЧЕТА CRC |
61 | POP IX ; IX=адрес где байты для счета CRC |
| 61 | EX DE,HL |
62 | EX DE,HL |
| 62 | AND A |
63 | AND A |
| 63 | SBC HL,DE ;HL=КОЛИЧЕСТВО ЯЧЕЕК ДЛЯ СЧЕТА |
64 | SBC HL,DE ; HL=количество ячеек для счета |
| 64 | ROMCALL CRC16_FAST,ROM_RST81 |
65 | ROMCALL CRC16_FAST,ROM_RST81 |
| 65 | POP DE |
66 | POP DE |
| 66 | RET |
67 | RET |
| 67 | 68 | ||
| 68 | ;ВНЕШНИЙ ВЫЗОВ ЧТЕНИЯ CMOS |
69 | ; внешний вызов чтения CMOS |
| 69 | EREAD_CMOS LD HL,(RREG_L) ;H=АДРЕС ЯЧЕЙКИ КМОС ОТКУДА ЧИТАТЬ |
70 | EREAD_CMOS LD HL,(RREG_L) ; H=адрес ячейки кмос откуда читать |
| 70 | CALL READCMOS |
71 | CALL READCMOS |
| 71 | LD (RREG_L),HL ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР L |
72 | LD (RREG_L),HL ; вернули прочитанное в регистр L |
| 72 | PUSH AF |
73 | PUSH AF |
| 73 | POP HL |
74 | POP HL |
| 74 | LD (RREG_F),HL ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР A ВМЕСТЕ С ФЛАГАМИ |
75 | LD (RREG_F),HL ; вернули прочитанное в регистр A вместе с флагами |
| 75 | RET |
76 | RET |
| 76 | 77 | ||
| 77 | ;ВНЕШНИЙ ВЫЗОВ ЗАПИСИ В CMOS С ПЕРЕСЧЕТОМ CRC |
78 | ; внешний вызов записи в CMOS с пересчетом CRC |
| 78 | EWRITE_CMOS LD HL,(RREG_L) |
79 | EWRITE_CMOS LD HL,(RREG_L) |
| 79 | ;ВНУТРЕННИЙ ВЫЗОВ ЗАПИСИ В CMOS С ПЕРЕСЧЕТОМ CRC |
80 | ; внутренний вызов записи в CMOS с пересчетом CRC |
| 80 | IWRITECMOS PUSH IX |
81 | IWRITECMOS PUSH IX |
| 81 | PUSH DE |
82 | PUSH DE |
| 82 | CALL WRITECMOS |
83 | CALL WRITECMOS |
| 83 | CALL READCMOS2BUF |
84 | CALL READCMOS2BUF |
| 84 | EX DE,HL |
85 | EX DE,HL |
| 85 | LD H,CRCCMOSHIGH |
86 | LD H,CMOS.CRCHIGH |
| 86 | LD L,D |
87 | LD L,D |
| 87 | CALL WRITECMOS |
88 | CALL WRITECMOS |
| 88 | DEC H |
89 | DEC H |
| 89 | LD L,E |
90 | LD L,E |
| 90 | CALL WRITECMOS |
91 | CALL WRITECMOS |
| 91 | POP DE |
92 | POP DE |
| 92 | POP IX |
93 | POP IX |
| 93 | RET |
94 | RET |
| 94 | 95 | ||
| 95 | INIT_CMOS CALL READCMOS2BUF ;БУФЕР ДЛЯ ЧТЕНИЯ ЯЧЕЕК ИЗ CMOS |
96 | INIT_CMOS CALL READCMOS2BUF ; буфер для чтения ячеек из CMOS |
| 96 | EX DE,HL ;CRC СПРЯТАЛИ В DE |
97 | EX DE,HL ; CRC спрятали в DE |
| 97 | LD H,CRCCMOSHIGH |
98 | LD H,CMOS.CRCHIGH |
| 98 | CALL READCMOS ;ПРОЧИТАЛИ СТАРШИЙ БАЙТ CRC |
99 | CALL READCMOS ; прочитали старший байт CRC |
| 99 | LD C,L |
100 | LD C,L |
| 100 | LD H,CRCCMOSLOW |
101 | LD H,CMOS.CRCLOW |
| 101 | CALL READCMOS ;ПРОЧИТАЛИ МЛАДШИЙ БАЙТ CRC |
102 | CALL READCMOS ; прочитали младший байт CRC |
| 102 | LD H,C |
103 | LD H,C |
| 103 | AND A |
104 | AND A |
| 104 | SBC HL,DE ;СРАВНИЛИ |
105 | SBC HL,DE ; сравнили |
| 105 | RET Z ;ЕСЛИ СОВПАЛО, ТО ВЫХОД |
106 | RET Z ; если совпало, то выход |
| 106 | CLEAR_CMOS LD HL,CMOS_DEFAULT ;ОТКУДА БРАТЬ ДЕФОЛТНЫЕ ЗНАЧЕНИЯ |
107 | CLEAR_CMOS LD HL,CMOS_DEFAULT ; откуда брать дефолтные значения |
| 107 | LD DE,CMOS4CRC16 ;КУДА ПОЛОЖИТЬ |
108 | LD DE,CMOS4CRC16 ; куда положить |
| 108 | PUSH DE |
109 | PUSH DE |
| 109 | LD BC,ECMOS_DEFAULT-CMOS_DEFAULT |
110 | LD BC,ECMOS_DEFAULT-CMOS_DEFAULT |
| 110 | LDIR ;ПЕРЕНЕСЛИ В БУФЕР ДЕФОЛТНЫЕ ЗНАЧЕНИЯ |
111 | LDIR ; перенесли в буфер дефолтные значения |
| 111 | POP DE |
112 | POP DE |
| 112 | PUSH DE |
113 | PUSH DE |
| 113 | LD H,CMOS_BYTE_00 |
114 | LD H,CMOS.BYTE_00 |
| 114 | LD B,ECMOS_DEFAULT-CMOS_DEFAULT |
115 | LD B,ECMOS_DEFAULT-CMOS_DEFAULT |
| 115 | INITCMOS3 LD A,(DE) |
116 | INITCMOS3 LD A,(DE) |
| 116 | INC DE |
117 | INC DE |
| 117 | LD L,A |
118 | LD L,A |
| 118 | CALL WRITECMOS |
119 | CALL WRITECMOS |
| 119 | DEC H |
120 | DEC H |
| 120 | DJNZ INITCMOS3 ;ПИШЕМ ЯЧЕЙКИ В CMOS |
121 | DJNZ INITCMOS3 ; пишем ячейки в CMOS |
| 121 | POP HL |
122 | POP HL |
| 122 | PUSH HL |
123 | PUSH HL |
| 123 | POP IX |
124 | POP IX |
| 124 | EX DE,HL |
125 | EX DE,HL |
| 125 | AND A |
126 | AND A |
| 126 | SBC HL,DE |
127 | SBC HL,DE |
| 127 | ROMCALL CRC16_FAST,ROM_RST81 |
128 | ROMCALL CRC16_FAST,ROM_RST81 |
| 128 | EX DE,HL |
129 | EX DE,HL |
| 129 | LD H,CRCCMOSHIGH |
130 | LD H,CMOS.CRCHIGH |
| 130 | LD L,D |
131 | LD L,D |
| 131 | CALL WRITECMOS ;ЗАПИСАЛИ СТАРШИЙ БАЙТ ПОСЧИТАННОГО CRC |
132 | CALL WRITECMOS ; записали старший байт посчитанного CRC |
| 132 | DEC H |
133 | DEC H |
| 133 | LD L,E |
134 | LD L,E |
| 134 | JP WRITECMOS ;ЗАПИСАЛИ МЛАДШИЙ БАЙТ ПОСЧИТАННОГО CRC |
135 | JP WRITECMOS ; записали младший байт посчитанного CRC |