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 |