Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 12.02.2011 savelij
  3.  
  4. WR_TXT_TIME     EQU BUFF4TXT+5
  5. WR_TXT_DATA     EQU BUFF4TXT+0X10
  6.  
  7. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  8. ;          L-ПРОЧИТАННОЕ ЗНАЧЕНИЕ
  9. READCMOS        DI
  10.                 PUSH BC
  11.                 LD BC,CMOSD_SET_ADR
  12.                 OUT (C),H
  13.                 LD B,HIGH (CMOSD_RD_WR)
  14.                 IN L,(C)
  15.                 JR OFF_CMOS
  16.  
  17. ;НА ВХОДЕ: H-АДРЕС ЯЧЕЙКИ
  18. ;          L-ЧТО ТУДА ЗАПИСАТЬ
  19. WRITECMOS       DI
  20.                 PUSH BC
  21.                 LD BC,CMOSD_SET_ADR
  22.                 OUT (C),H
  23.                 LD B,HIGH (CMOSD_RD_WR)
  24.                 OUT (C),L
  25. OFF_CMOS        LD B,HIGH (CMOSD_SET_ADR)
  26.                 LD A,0XE1
  27.                 OUT (C),A
  28.                 POP BC
  29.                 LD A,L
  30.                 AND A
  31.                 RET
  32.  
  33. ;ЧТЕНИЕ ВЕРСИИ FPGA ИЛИ BOOTLOADER, ЕСЛИ ЭТО ПЕНТЕВА
  34. GET_VERS_EVO    LD C,L
  35.                 LD H,0XF0
  36.                 CALL WRITECMOS                  ;ПИШЕМ В АДРЕС 0XF0 ДЛЯ ПОЛУЧЕНИЯ ВЕРСИИ
  37.                 CALL READCMOS                   ;ЧИТАЕМ ОТВЕТ
  38.                 CP C                            ;СОВПАЛО С ТЕМ ЧТО ЗАПИСАНО, НЕ ПОДДЕРЖИВАЕТСЯ
  39.                 RET Z                           ;И ЭТО НЕ ПЕНТЕВА (ИЛИ ВЕРСИЯ FPGA СТАРАЯ). ВЫХОДИМ
  40.                 INC A                           ;ПРИШЕЛ 0XFF, ЗНАЧИТ ЧАСОВ НЕТУ
  41.                 RET Z                           ;ВЫХОДИМ
  42.                 DI
  43.                 DEC A                           ;ВОЗВРАЩАЕМ СЧИТАННОЕ ЗНАЧЕНИЕ
  44.                 PUSH DE
  45.                 LD (DE),A                       ;ПОЛОЖИЛИ В БУФЕР УЖЕ ПРОЧИТАННЫЙ БАЙТ
  46.                 INC DE
  47.                 LD B,0X0F                       ;ОСТАЛОСЬ ПРОЧИТАТЬ ОСТАЛЬНЫЕ ЕЩЕ 15 БАЙТ
  48. GVE1            INC H
  49.                 CALL READCMOS                   ;ЧИТАЕМ БАЙТ
  50.                 LD (DE),A
  51.                 INC DE
  52.                 DJNZ GVE1                       ;ЧИТАЕМ ПОКА ВСЕ БАЙТЫ НЕ КОНЧАТСЯ
  53.                 POP DE                          ;ПРОВЕРЯМ В БУФЕРЕ 12 БАЙТ ТЕКСТА
  54.                 LD H,D
  55.                 LD L,E
  56.                 LD B,0X0C                       ;ЕСЛИ ТЕКСТ КОРОЧЕ ИЩЕМ БАЙТ 0 (ПРИЗНАК КОНЦА ТЕКСТА)
  57. GVE2            LD A,(DE)
  58.                 AND A
  59.                 JR Z,GVE3
  60.                 INC DE
  61.                 DJNZ GVE2
  62. GVE3            LD BC,0X0C                      ;ЗАБРАЛИ ИЗ БУФЕРА 2 БАЙТА ДАТЫ В СПЕЦФОРМАТЕ
  63.                 ADD HL,BC
  64.                 LD C,(HL)
  65.                 INC HL
  66.                 LD B,(HL)
  67.                 EX DE,HL
  68.                 LD (HL)," "                     ;ДОБАВЛЯЕМ К ТЕКСТУ ПРОБЕЛ-РАЗДЕЛИТЕЛЬ
  69.                 INC HL
  70.  
  71. ;РАСПАКОВЩИК ДАТЫ
  72. UNVERS          LD A,C
  73.                 AND 0X1F                        ;НУЖНЫ 5 БИТ-ЧИСЛО МЕСЯЦА
  74.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ДАТЫ
  75.                 SRL B
  76.                 RR C                            ;СДВИНУЛИ ДЛЯ ЦЕЛОСТНОСТИ НОМЕРА МЕСЯЦА
  77.                 LD A,C                          ;ВЗЯЛИ БИТЫ МЕСЯЦА
  78.                 RRCA
  79.                 RRCA
  80.                 RRCA
  81.                 RRCA                            ;СДВИНУЛИ В МЛАДШИЕ БИТЫ
  82.                 AND 0X0F                        ;НАМ НУЖНЫ ТОЛЬКО 4 БИТА МЕСЯЦА
  83.                 LD (HL),"."                     ;РАЗДЕЛИТЕЛЬНАЯ ТОЧКА
  84.                 INC HL
  85.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА МЕСЯЦА
  86.                 LD (HL),"."                     ;РАЗДЕЛИТЕЛЬНАЯ ТОЧКА
  87.                 INC HL
  88.                 LD (HL),"2"
  89.                 INC HL
  90.                 LD (HL),"0"                     ;ДОБАВИЛИ К ГОДУ ДВЕ ЦИФЕРКИ
  91.                 INC HL
  92.                 LD A,B                          ;ВЗЯЛИ НОМЕР ГОДА
  93.                 AND 0X3F                        ;НУЖНЫ ТОЛЬКО 6 БИТ
  94.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ГОДА
  95.                 BIT 6,B                         ;ЕСЛИ БИТ 6 (СДВИНУТЫЙ БИТ 7) УСТАНОВЛЕН
  96.                 RET NZ  ;JR NZ,GVE4             ;ТО ЗАВЕРШАЕМ СТРОКУ
  97.                 EX DE,HL                        ;ИНАЧЕ ВЕРСИЯ БЕТА, О ЧЕМ ДОБАВЛЯЕМ ТЕКСТ В БУФЕР
  98.                 LD HL,TXT_BETA
  99.                 LD BC,5
  100.                 LDIR
  101.                 EX DE,HL
  102.                 RET
  103.  
  104. ;ЕСЛИ В БАЙТЕ КМОС ПО СМЕЩЕНИЮ 0X11 НЕ 0XAA ИЛИ 0X55, ТО КМОС СЧИТАЕТСЯ ЗАПОЛНЕН НЕИЗВЕСТНО ЧЕМ
  105. ;ИЛИ ЭТО ПЕРВОЕ ВКЛЮЧЕНИЯ. ЗАПИСЫВЕМ ДЕФОЛТНЫЕ ЗНАЧЕНИЯ В КМОС.
  106. SET_CMOS_DEFAULT
  107.                 LD DE,CMOS_DEFAULT
  108.                 LD H,0X0A
  109.                 LD B,8
  110. SCD1            EX DE,HL
  111.                 LD E,(HL)
  112.                 INC HL
  113.                 EX DE,HL
  114.                 CALL WRITECMOS
  115.                 INC H
  116.                 DJNZ SCD1
  117.                 RET
  118.  
  119. ;РАСПЕЧАТКА НА ЭКРАНЕ ВРЕМЕНИ, ДАТЫ И ДНЯ НЕДЕЛИ
  120. PRINTTIME       LD A,(FLAGS)
  121.                 AND 4
  122.                 RET Z                           ;ЧАСЫ НЕ ОБНАРУЖЕНЫ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
  123.                 LD H,0X0C
  124.                 CALL READCMOS
  125.                 AND 0X10
  126.                 RET Z                           ;ЕСЛИ ВРЕМЯ ЕЩЕ НЕ ОБНОВИЛОСЬ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
  127.                 LD H,0X11
  128.                 CALL READCMOS
  129.                 CP 0X55
  130.                 RET Z                           ;ОТОБРАЖЕНИЕ ВЫКЛЮЧЕНО, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
  131.                 DI
  132.                 EXX
  133.                 LD HL,BUFF_TIME
  134.                 LD DE,BUFF4TXT
  135.                 LD BC,EBUFF_TIME-BUFF_TIME
  136.                 LDIR
  137.                 LD BC,WR_TXT_TIME               ;ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ВРЕМЕНИ
  138.                 LD H,4
  139.                 CALL READCMOS                   ;ПРОЧИТАЛИ ЧАСЫ
  140.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  141.                 LD A,(BC)
  142.                 XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  143.                 LD (BC),A
  144.                 INC BC
  145.                 LD H,2
  146.                 CALL READCMOS                   ;ПРОЧИТАЛИ МИНУТЫ
  147.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  148.                 LD A,(BC)
  149.                 XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  150.                 LD (BC),A
  151.                 INC BC
  152.                 LD H,0
  153.                 CALL READCMOS                   ;ПРОЧИТАЛИ СЕКУНДЫ
  154.                 CALL BYTE2TXT
  155.                 LD BC,WR_TXT_DATA               ;ДАЛЕЕ ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ДАТЫ
  156.                 LD H,7
  157.                 CALL READCMOS
  158.                 CALL BYTE2TXT
  159.                 INC BC
  160.                 LD H,8
  161.                 CALL READCMOS
  162.                 CALL BYTE2TXT
  163.                 INC BC
  164.                 LD H,9
  165.                 CALL READCMOS
  166.                 CALL BYTE2TXT
  167.                 LD HL,BUFF4TXT                  ;ПЕЧАТАЕМ ВРЕМЯ ИЗ БУФЕРА
  168.                 CALL NEXT
  169.                 EXX
  170.                 RET
  171.  
  172. ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
  173. A2TXT           PUSH HL
  174.                 LD L,A
  175.                 LD H,0
  176.                 LD DE,10
  177.                 XOR A
  178.                 DEC A
  179.                 INC A
  180.                 SBC HL,DE
  181.                 JR NC,$-3
  182.                 ADD HL,DE
  183.                 ADD A,"0"
  184.                 LD D,A
  185.                 LD A,L
  186.                 ADD A,"0"
  187.                 POP HL
  188.                 LD (HL),D
  189.                 INC HL
  190.                 LD (HL),A
  191.                 INC HL
  192.                 RET
  193.  
  194. BYTE2TXT        LD L,A
  195.                 LD H,"0"
  196.                 RRCA
  197.                 RRCA
  198.                 RRCA
  199.                 RRCA
  200.                 AND 0X0F
  201.                 ADD A,H
  202.                 LD (BC),A
  203.                 INC BC
  204.                 LD A,L
  205.                 AND 0X0F
  206.                 ADD A,H
  207.                 LD (BC),A
  208.                 INC BC
  209.                 RET
  210.