Subversion Repositories pentevo

Rev

Rev 646 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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