Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 27.06.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        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,FIRST_CRCBYTE
  52.                 LD B,CMOS_BYTE_00-FIRST_CRCBYTE+1
  53. RDCMOS2BUF1     CALL READCMOS
  54.                 LD (DE),A
  55.                 INC DE
  56.                 INC 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. EREAD_CMOS      LD HL,(RREG_L)                  ;H=АДРЕС ЯЧЕЙКИ КМОС ОТКУДА ЧИТАТЬ
  69.                 CALL READCMOS
  70.                 LD (RREG_L),HL                  ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР L
  71.                 PUSH AF
  72.                 POP HL
  73.                 LD (RREG_F),HL                  ;ВЕРНУЛИ ПРОЧИТАННОЕ В РЕГИСТР A ВМЕСТЕ С ФЛАГАМИ
  74.                 RET
  75.  
  76. EWRITE_CMOS     LD HL,(RREG_L)
  77. IWRITECMOS      PUSH IX
  78.                 PUSH DE
  79.                 CALL WRITECMOS
  80.                 CALL READCMOS2BUF
  81.                 EX DE,HL
  82.                 LD H,CRCCMOSHIGH
  83.                 LD L,D
  84.                 CALL WRITECMOS
  85.                 DEC H
  86.                 LD L,E
  87.                 CALL WRITECMOS
  88.                 POP DE
  89.                 POP IX
  90.                 RET
  91.  
  92. INIT_CMOS       CALL READCMOS2BUF               ;БУФЕР ДЛЯ ЧТЕНИЯ ЯЧЕЕК ИЗ CMOS
  93.                 EX DE,HL                        ;CRC СПРЯТАЛИ В DE
  94.                 LD H,CRCCMOSHIGH
  95.                 CALL READCMOS                   ;ПРОЧИТАЛИ СТАРШИЙ БАЙТ CRC
  96.                 LD C,L
  97.                 LD H,CRCCMOSLOW
  98.                 CALL READCMOS                   ;ПРОЧИТАЛИ МЛАДШИЙ БАЙТ CRC
  99.                 LD H,C
  100.                 AND A
  101.                 SBC HL,DE                       ;СРАВНИЛИ
  102.                 RET Z                           ;ЕСЛИ СОВПАЛО, ТО ВЫХОД
  103. CLEAR_CMOS      LD HL,CMOS_DEFAULT              ;ОТКУДА БРАТЬ ДЕФОЛТНЫЕ ЗНАЧЕНИЯ
  104.                 LD DE,CMOS4CRC16                ;КУДА ПОЛОЖИТЬ
  105.                 PUSH DE
  106.                 LD BC,ECMOS_DEFAULT-CMOS_DEFAULT
  107.                 LDIR                            ;ПЕРЕНЕСЛИ В БУФЕР ДЕФОЛТНЫЕ ЗНАЧЕНИЯ
  108.                 POP DE
  109.                 PUSH DE
  110.                 LD H,FIRST_CRCBYTE
  111.                 LD B,CMOS_BYTE_00-FIRST_CRCBYTE+1
  112. INITCMOS3       LD A,(DE)
  113.                 INC DE
  114.                 LD L,A
  115.                 CALL WRITECMOS
  116.                 INC H
  117.                 DJNZ INITCMOS3                  ;ПИШЕМ ЯЧЕЙКИ В CMOS
  118.                 POP HL
  119.                 PUSH HL
  120.                 POP IX
  121.                 EX DE,HL
  122.                 AND A
  123.                 SBC HL,DE
  124.                 PCALL CRC16_FAST,P_ADDON1
  125.                 EX DE,HL
  126.                 LD H,CRCCMOSHIGH
  127.                 LD L,D
  128.                 CALL WRITECMOS                  ;ЗАПИСАЛИ СТАРШИЙ БАЙТ ПОСЧИТАННОГО CRC
  129.                 DEC H
  130.                 LD L,E
  131.                 JP WRITECMOS                    ;ЗАПИСАЛИ МЛАДШИЙ БАЙТ ПОСЧИТАННОГО CRC
  132.