Subversion Repositories pentevo

Rev

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