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 |