Subversion Repositories pentevo

Rev

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