Subversion Repositories pentevo

Rev

Rev 736 | 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. ;LAST UPDATE: 30.06.2019 savelij
  11.  
  12. ;START   EQU     #6000
  13.  ;       ORG     START
  14.  
  15. FREAD           EQU CPU1+OFFSET_SCRSAVE;OFFSET_FNTSAVE;-0X800
  16. FONT            EQU CPU1+OFFSET_FNTSAVE;0XD800
  17. ;FLDIR          EQU 0XD800
  18.  
  19. SCAN_FONT
  20. ;        DI
  21.  
  22. ;        LD      A,1
  23. ;        OUT     (0XFE),A
  24.  
  25. ;        XOR     A
  26. ;        OUT     (PEVO_CONF),A
  27.  
  28. ;        LD      BC,0XEFF7
  29. ;        OUT     (C),A   ;ставим ефф7, который доступен только в нешедоу-режиме
  30.  
  31. ;        INC     A
  32. ;        OUT     (PEVO_CONF),A
  33.  
  34.         LD      A,0XA7
  35.         LD      BC,0XFF77
  36.         OUT     (C),A     ;включаем новый пентевный текстмод - 1-страничный
  37.                           ; заодно ефф7 и фф77 ставят нам 7 МГц частоту
  38.                 EVOPORT WIN_P1,RAM_SCR_FONT
  39.         CALL    OUTPAGE   ;выводим все символы на экран
  40.  
  41. LOOP
  42.         CALL    SYNCREAD   ;считываем фонтром методом чтения байтиков, которые на экране
  43.         JP    DECODEFONT ; перекодируем в обычный формат фонтрома ИИНВЕРТИМ СЧИТАННЫЙ ФОНТ
  44. ;        CALL    INVERTFONT ; инвертируем все байты фонта
  45. ;        CALL    WRITEFONT  ; пишем взад
  46.  
  47. ;        LD      A,0X7F
  48. ;        IN      A,(0XFE)
  49. ;        RRA
  50. ;        JR      C,LOOP     ;итого всё мигает пока не нажмём any key
  51.  
  52. ;        LD      A,0XFF
  53. ;        LD      BC,WIN_A3
  54. ;        OUT     (C),A
  55.  
  56. ;        LD      A,0XA3
  57. ;        LD      BC,0XFF77
  58. ;        OUT     (C),A ; восстанавливаем 6912-режим
  59.  
  60. ;        XOR     A
  61. ;        OUT     (PEVO_CONF),A ;закрываем шедоу
  62.  
  63. ;        RET
  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.                 XOR A
  77.                 LD HL,CPU3+LATTR
  78.                 ROMCALL CLSTXTMD1,ROM_RST82
  79.                 XOR A
  80.                 LD HL,CPU3+RATTR
  81.                 ROMCALL CLSTXTMD1,ROM_RST82
  82.  
  83.         XOR     A         ; код печатаемого символа
  84.         LD      HL,CPU3+LSYM    ;0XC1C0  ; откуда начинаем печатать
  85.         LD      DE,64-40
  86.         LD      C,25      ; сколько строк печатаем. Достаточно напечатать 16 строк сверху.
  87. STRLOOP
  88.         LD      B,80/5
  89. SYMLOOP
  90.         CALL    PRINC  ; повторяем каждый символ 5 раз
  91.         CALL    PRINC
  92.         CALL    PRINC
  93.         CALL    PRINC
  94.         CALL    PRINC
  95.  
  96.         INC     A
  97.  
  98.         DJNZ    SYMLOOP
  99.  
  100.         ADD     HL,DE ; смещение на следующую строку
  101.  
  102.         DEC     C
  103.         JR      NZ,STRLOOP
  104.  
  105.         RET
  106.  
  107. PRINC   ; печатаем символ и апдейтим указатель в HL на следующий символ
  108.         LD      (HL),A
  109.         BIT     4,H
  110.         SET     4,H
  111.         RET     Z
  112.         RES     4,H
  113.         INC     HL
  114.         RET
  115.  
  116. SYNCREAD
  117.  
  118.         ; эта процедура должна выполняться при частоте процессора 7 МГц!!!!!!!
  119.  
  120.         ; сначала включаем IM 2 и делаем таблички для него
  121.         DI
  122. ;        IM      2  
  123.  
  124.         ; setup IM2 tables
  125.  
  126. ;        LD      HL,INTTAB
  127. ;        LD      A,1
  128. ;        LD      I,A
  129. ;        INC     A
  130.  
  131. ;        LD      (HL),A
  132. ;        INC     L
  133. ;        JR      NZ,$-2
  134.  
  135. ;        INC     H
  136. ;        LD      (HL),A
  137.  
  138. ;        LD      L,H
  139. ;        LD      (HL),0XC3 ; JP
  140. ;        INC     HL
  141. ;        LD      (HL)LOW (INTPROC)
  142. ;        INC     HL
  143. ;        LD      (HL),HIGH (INTPROC)
  144.  
  145.  
  146.                 LD HL,EI_RET
  147.                 LD (ADR_INT),HL
  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            ;10
  166.         DI                      ;4
  167.         LD      B,2             ;7
  168.         DJNZ    $               ;13*2+8
  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.