Subversion Repositories pentevo

Rev

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