Subversion Repositories pentevo

Rev

Rev 646 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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