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