Subversion Repositories pentevo

Rev

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