Subversion Repositories pentevo

Rev

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

  1.  
  2. ; Пример чтения фонтрома в пентеве
  3. ;
  4. ; (c) lvd^nedopc 2012
  5. ;
  6. ; сорец для аласма
  7.  
  8. ;ПЕРЕДЕЛКА ДЛЯ КОМПИЛЯЦИИ В СОСТАВЕ EVO RESET SERVICE 18.01.2012 savelij
  9.  
  10. ;START   EQU     #6000
  11.  ;       ORG     START
  12.  
  13. FREAD           EQU 0X8000+OFFSET_FNTSAVE-0X800
  14. FONT            EQU 0X8000+OFFSET_FNTSAVE;0XD800
  15. ;FLDIR          EQU 0XD800
  16.  
  17. SCAN_FONT
  18. ;        DI
  19.  
  20. ;        LD      A,1
  21. ;        OUT     (0XFE),A
  22.  
  23. ;        XOR     A
  24. ;        OUT     (PEVO_CONF),A
  25.  
  26. ;        LD      BC,0XEFF7
  27. ;        OUT     (C),A   ;ставим ефф7, который доступен только в нешедоу-режиме
  28.  
  29. ;        INC     A
  30. ;        OUT     (PEVO_CONF),A
  31.  
  32.         LD      A,0XA7
  33.         LD      BC,0XFF77
  34.         OUT     (C),A     ;включаем новый пентевный текстмод - 1-страничный
  35.                           ; заодно ефф7 и фф77 ставят нам 7 МГц частоту
  36.  
  37.         CALL    OUTPAGE   ;выводим все символы на экран
  38.  
  39. LOOP
  40.         CALL    SYNCREAD   ;считываем фонтром методом чтения байтиков, которые на экране
  41.         JP    DECODEFONT ; перекодируем в обычный формат фонтрома ИИНВЕРТИМ СЧИТАННЫЙ ФОНТ
  42. ;        CALL    INVERTFONT ; инвертируем все байты фонта
  43. ;        CALL    WRITEFONT  ; пишем взад
  44.  
  45. ;        LD      A,0X7F
  46. ;        IN      A,(0XFE)
  47. ;        RRA
  48. ;        JR      C,LOOP     ;итого всё мигает пока не нажмём any key
  49.  
  50. ;        LD      A,0XFF
  51. ;        LD      BC,WIN_A3
  52. ;        OUT     (C),A
  53.  
  54. ;        LD      A,0XA3
  55. ;        LD      BC,0XFF77
  56. ;        OUT     (C),A ; восстанавливаем 6912-режим
  57.  
  58. ;        XOR     A
  59. ;        OUT     (PEVO_CONF),A ;закрываем шедоу
  60.  
  61. ;        RET
  62.  
  63.  
  64.  
  65. OUTPAGE
  66. ;        LD      A,0X7F-8    ;где находится 1страничный текстмод (см доку)
  67. ;        LD      BC,WIN_A3
  68. ;        OUT     (C),A
  69.  
  70. ;        LD      HL,0XC000   ; ставим атрибуты. Не обязательно, чтоб символы были видимы,
  71. ;        LD      DE,0XC001   ; можно нафигачить нулей
  72. ;        LD      (HL),0X01;5
  73. ;        LD      BC,0X3FFF
  74. ;        LDIR
  75.  
  76.                 LD HL,0XE1C0
  77.                 LD D,H
  78.                 LD E,L
  79.                 INC DE
  80.                 LD BC,0X40*25-1
  81.                 LD (HL),0
  82.                 LDIR
  83.                 LD HL,0XF1C0
  84.                 LD D,H
  85.                 LD E,L
  86.                 INC DE
  87.                 LD BC,0X40*25-1
  88.                 LD (HL),0
  89.                 LDIR
  90.  
  91.         XOR     A         ; код печатаемого символа
  92.         LD      HL,0XC1C0  ; откуда начинаем печатать
  93.         LD      DE,64-40
  94.         LD      C,25      ; сколько строк печатаем. Достаточно напечатать 16 строк сверху.
  95. STRLOOP
  96.         LD      B,80/5
  97. SYMLOOP
  98.         CALL    PRINC  ; повторяем каждый символ 5 раз
  99.         CALL    PRINC
  100.         CALL    PRINC
  101.         CALL    PRINC
  102.         CALL    PRINC
  103.  
  104.         INC     A
  105.  
  106.         DJNZ    SYMLOOP
  107.  
  108.         ADD     HL,DE ; смещение на следующую строку
  109.  
  110.         DEC     C
  111.         JR      NZ,STRLOOP
  112.  
  113.         RET
  114.  
  115. PRINC   ; печатаем символ и апдейтим указатель в HL на следующий символ
  116.         LD      (HL),A
  117.         BIT     4,H
  118.         SET     4,H
  119.         RET     Z
  120.         RES     4,H
  121.         INC     HL
  122.         RET
  123.  
  124. SYNCREAD
  125.  
  126.         ; эта процедура должна выполняться при частоте процессора 7 МГц!!!!!!!
  127.  
  128.         ; сначала включаем IM 2 и делаем таблички для него
  129.         DI
  130. ;        IM      2  
  131.  
  132.         ; setup IM2 tables
  133.  
  134. ;        LD      HL,INTTAB
  135. ;        LD      A,1
  136. ;        LD      I,A
  137. ;        INC     A
  138.  
  139. ;        LD      (HL),A
  140. ;        INC     L
  141. ;        JR      NZ,$-2
  142.  
  143. ;        INC     H
  144. ;        LD      (HL),A
  145.  
  146. ;        LD      L,H
  147. ;        LD      (HL),0XC3 ; JP
  148. ;        INC     HL
  149. ;        LD      (HL)LOW (INTPROC)
  150. ;        INC     HL
  151. ;        LD      (HL),HIGH (INTPROC)
  152.  
  153.  
  154.         LD      HL,FREAD ; заранее ставим куда будем читать фонт
  155.  
  156.         EI  
  157.         HALT
  158.         EI
  159.         HALT ; делаем халт чтоб после инта и задержки попасть чтением спецпорта прямо
  160.              ; в момент начала отображения символов. делаем халт 2 раза, чтоб убедиццо,
  161.              ; что инт будет схвачен в своем начале, а не в середине.
  162.              ; обработчик инта - сначала JP, потом RET.
  163.  
  164.  
  165.  
  166.  
  167.         ; делаем задержку до момента отображения первого символа. Он повторяется 5 раз,
  168.         ; а первая команда INI попадает циклом ввода примерно в середину этих
  169.         ; 5 символов
  170.         LD      BC,0
  171.         DI
  172.         LD      B,2
  173.         DJNZ    $
  174.         LD      D,76
  175. LINWAIT
  176.         LD      BC,256*33
  177.         DJNZ    $
  178.         DEC     D
  179.         JP      NZ,LINWAIT
  180.         LD      BC,0X0EBE  ; заодно в процессе задержки грузим адрес порта
  181.         LD      D,128     ; и счётчик для 128 строк
  182.  
  183.  
  184. READLOOP
  185.         ; читаем 16 байт. Как раз INI:INC B выполняется за 20 тактов, и 5 символов
  186.         ; длятся тоже 20 тактов (@7MHz nowait)
  187.        REPT     16
  188.         INI
  189.         INC     B
  190.        ENDM
  191.  
  192.         LD      E,7    ; просираем оставшееся время строки
  193.         DEC     E
  194.         JR      NZ,$-1
  195.  
  196.         DEC     D
  197.         JP      NZ,READLOOP ; итого весь этот луп занимает 448 тактов
  198.  
  199.  
  200.         ; всё считали, идём на йух...
  201.         DI
  202.  ;       IM      1
  203.         RET
  204.  
  205. INTPROC ; обработчег инта :)
  206.         RET
  207.  
  208.  
  209.  
  210.  
  211. DECODEFONT
  212.        
  213.         ; перекодируем считанный фонт в обычный формат
  214.  
  215.         LD      HL,FREAD
  216.         LD      DE,FONT
  217.  
  218.  
  219.         LD      IXH,16
  220. DF256L
  221.         LD      IXL,16
  222. DF16L
  223.         LD      BC,16
  224.        REPT     8
  225.         LD      A,(HL)
  226.         ADD     HL,BC
  227.         LD      (DE),A
  228.         INC     DE
  229.        ENDM
  230.  
  231.         LD      BC,1-128
  232.         ADD     HL,BC
  233.  
  234.         DEC     IXL
  235.         JR      NZ,DF16L
  236.  
  237.         LD      BC,128-16
  238.         ADD     HL,BC
  239.  
  240.         DEC     IXH
  241.         JR      NZ,DF256L
  242.  
  243.         RET
  244.  
  245.  
  246.  
  247. ;INVERTFONT
  248.  
  249.         ; инвертируем фонт
  250.  
  251. ;        LD      HL,FONT
  252. ;        LD      BC,2048
  253. ;IFLOOP
  254. ;        LD      A,(HL)
  255. ;        CPL
  256. ;        LD      (HL),A
  257. ;        CPI
  258. ;        JP      PE,IFLOOP
  259.  
  260. ;        RET
  261.  
  262.  
  263.  
  264. ;WRITEFONT
  265.  
  266.         ; пишем фонт обратно в фонтром
  267.  
  268. ;        LD      A,0X05
  269. ;        OUT     (PEVO_CONF),A
  270.  
  271. ;        LD      HL,FONT
  272. ;        LD      DE,FLDIR ; лдирим из озу в озу -- всё работает
  273. ;        LD      BC,2048
  274. ;        LDIR
  275.  
  276. ;        LD      A,1
  277. ;        OUT     (PEVO_CONF),A
  278. ;        RET
  279.  
  280.  
  281.  
  282. ;        ORG     ($+255)&0XFF00
  283. ;INTTAB
  284. ;        DS      512
  285.  
  286.  
  287. ;FREAD   DS      2048
  288. ;FONT    DS      2048
  289.  
  290. ;FLDIR   EQU     FONT & 0XF800
  291.  
  292. ;ENDD
  293. ;        ORG     START
  294.