Subversion Repositories pentevo

Rev

Rev 585 | Rev 623 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 20.01.2013 savelij
  3.  
  4. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  5. ;          L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ
  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.  
  14. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  15. ;          L-ЧТО ТУДА ЗАПИСАТЬ
  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
  22. OFF_CMOS        LD B,HIGH (CMOSD_SET_ADR)
  23.                 LD A,0XE1
  24.                 OUT (C),A
  25.                 POP BC
  26.                 LD A,L
  27.                 AND A
  28.                 RET
  29.  
  30. CMOS_RW         PCALL P5_READ_BYTE,P_RST8
  31.                 LD A,(NEXTBYTERST8)
  32.                 ADD A,A
  33.                 ADD A,LOW (CMOSRW_TAB)
  34.                 LD L,A
  35.                 ADC A,HIGH (CMOSRW_TAB)
  36.                 SUB L
  37.                 LD H,A
  38.                 LD A,(HL)
  39.                 INC HL
  40.                 LD H,(HL)
  41.                 LD L,A
  42.                 JP (HL)
  43.  
  44. CMOSRW_TAB      DW INIT_CMOS                    ;ПРОВЕРКА CRC CMOS И ИНИЦИАЛИЗАЦИЯ ПРИ ОШИБКЕ
  45.                 DW EREAD_CMOS                   ;ЧТЕНИЕ ЯЧЕЙКИ CMOS
  46.                 DW EWRITE_CMOS                  ;ЗАПИСЬ ЯЧЕЙКИ CMOS С ПЕРЕСЧЕТОМ CRC
  47.                 DW CLEAR_CMOS                   ;ПРИНУДИТЕЛЬНЫЙ СБРОС ЗНАЧЕНИЙ CMOS
  48.  
  49. ;ЧТЕНИЕ ЯЧЕЕК ЗАЩИЩАЕМЫХ CRC16 И ПОДСЧЕТ CRC
  50. ;НА ВЫХОДЕ: HL=CRC16 БЛОКА
  51. READCMOS2BUF    PUSH DE
  52.                 LD DE,CMOS4CRC16
  53.                 PUSH DE
  54.                 LD H,TURBO_MEMORY
  55.                 LD B,4
  56. RDCMOS2BUF1     CALL READCMOS
  57.                 LD (DE),A
  58.                 INC DE
  59.                 INC H
  60.                 DJNZ RDCMOS2BUF1
  61.                 LD H,CMOS_BYTE_00
  62.                 LD B,2
  63. RDCMOS2BUF2     CALL READCMOS
  64.                 LD (DE),A
  65.                 INC DE
  66.                 DEC H
  67.                 DJNZ RDCMOS2BUF2
  68.                 POP HL
  69.                 PUSH HL
  70.                 POP IX                          ;IX=АДРЕС ГДЕ БАЙТЫ ДЛЯ СЧЕТА CRC
  71.                 EX DE,HL
  72.                 AND A
  73.                 SBC HL,DE                       ;HL=КОЛИЧЕСТВО ЯЧЕЕК ДЛЯ СЧЕТА
  74.                 CALL CRC16_FAST
  75.                 POP DE
  76.                 RET
  77.  
  78. EREAD_CMOS      LD HL,(RREG_L)                  ;H=АДРЕС ЯЧЕЙКИ КМОС ОТКУДА ЧИТАТЬ
  79.                 CALL READCMOS
  80.                 LD (RREG_L),HL                  ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР L
  81.                 PUSH AF
  82.                 POP HL
  83.                 LD (RREG_F),HL                  ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР A ВМЕСТЕ С ФЛАГАМИ
  84.                 RET
  85.  
  86. EWRITE_CMOS     LD HL,(RREG_L)
  87. IWRITECMOS      PUSH IX
  88.                 PUSH DE
  89.                 CALL WRITECMOS
  90.                 CALL READCMOS2BUF
  91.                 EX DE,HL
  92.                 LD H,CRCCMOSHIGH
  93.                 LD L,D
  94.                 CALL WRITECMOS
  95.                 DEC H
  96.                 LD L,E
  97.                 CALL WRITECMOS
  98.                 POP DE
  99.                 POP IX
  100.                 RET
  101.  
  102. INIT_CMOS       CALL READCMOS2BUF               ;БУФЕР ДЛЯ ЧТЕНИЯ ЯЧЕЕК ИЗ CMOS
  103.                 EX DE,HL                        ;СПРЯТАЛИ В DE
  104.                 LD H,CRCCMOSHIGH
  105.                 CALL READCMOS                   ;ПРОЧИТАЛИ СТАРШИЙ БАЙТ CRC
  106.                 LD C,L
  107.                 LD H,CRCCMOSLOW
  108.                 CALL READCMOS                   ;ПРОЧИТАЛИ МЛАДШИЙ БАЙТ CRC
  109.                 LD H,C
  110.                 AND A
  111.                 SBC HL,DE                       ;СРАВНИЛИ
  112.                 RET Z                           ;ЕСЛИ СОВПАЛО, ТО ВЫХОД
  113. CLEAR_CMOS      LD HL,CMOS_DEFAULT              ;ОТКУДА БРАТЬ ДЕФОЛТНЫЕ ЗНАЧЕНИЯ
  114.                 LD DE,CMOS4CRC16                ;КУДА ПОЛОЖИТЬ
  115.                 PUSH DE
  116.                 LD BC,ECMOS_DEFAULT-CMOS_DEFAULT
  117.                 LDIR                            ;ПЕРЕНЕСЛИ В БУФЕР ДЕФОЛТНЫЕ ЗНАЧЕНИЯ
  118.                 POP DE
  119.                 PUSH DE
  120.                 LD H,TURBO_MEMORY
  121.                 LD B,4
  122. INITCMOS3       LD A,(DE)
  123.                 INC DE
  124.                 LD L,A
  125.                 CALL WRITECMOS
  126.                 INC H
  127.                 DJNZ INITCMOS3                  ;ПИШЕМ 4 ЯЧЕЙКИ В НАЧАЛО CMOS
  128.                 LD H,CMOS_BYTE_00
  129.                 LD B,2
  130. INITCMOS4       LD A,(DE)
  131.                 INC DE
  132.                 LD L,A
  133.                 CALL WRITECMOS
  134.                 DEC H
  135.                 DJNZ INITCMOS4                  ;ПИШЕМ ОСТАЛЬНЫЕ НАСТРОЙКИ В КОНЕЦ CMOS
  136.                 POP HL
  137.                 PUSH HL
  138.                 POP IX
  139.                 EX DE,HL
  140.                 AND A
  141.                 SBC HL,DE
  142.                 CALL CRC16_FAST
  143.                 EX DE,HL
  144.                 LD H,CRCCMOSHIGH
  145.                 LD L,D
  146.                 CALL WRITECMOS                  ;ЗАПИСАЛИ СТАРШИЙ БАЙТ ПОСЧИТАННОГО CRC
  147.                 DEC H
  148.                 LD L,E
  149.                 JP WRITECMOS                    ;ЗАПИСАЛИ МЛАДШИЙ БАЙТ ПОСЧИТАННОГО CRC
  150.