Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 24.07.2023 savelij
  3.  
  4. PRINT_MSG       LD A,(HL)
  5.                 INC HL
  6.                 AND A
  7.                 RET Z
  8.                 CALL .CODES
  9.                 JR PRINT_MSG
  10.  
  11. .CODES          CP ' '
  12.                 JR NC,PRINT_A_
  13.                 CP 0x0D
  14.                 JR NZ,.COD16
  15. ; перевод строки
  16.                 EXX
  17.                 LD HL,VVARS.PPOS_X
  18.                 LD (HL),0
  19.                 INC HL
  20.                 INC (HL)
  21.                 EXX
  22.                 RET
  23.  
  24. .COD16          CP 0x16
  25.                 JR NZ,.COD17
  26. ; установка позиции печати
  27. ; 0x16 X (0..41) Y (0..23)
  28.                 LD A,(HL)
  29.                 INC HL
  30.                 LD (VVARS.PPOS_X),A
  31.                 LD A,(HL)
  32.                 INC HL
  33.                 LD (VVARS.PPOS_Y),A
  34.                 RET
  35.  
  36. .COD17          CP 0x17
  37.                 RET NZ
  38.                 LD A,(HL)
  39.                 INC HL
  40.                 LD (VVARS.COLOR_TEXT),A
  41.                 RET
  42.  
  43. ; рисование символа 6x8
  44. PRINT_A_        PUSH HL
  45.                 EXX
  46.                 LD L,A
  47.                 LD H,0
  48.                 ADD HL,HL
  49.                 ADD HL,HL
  50.                 ADD HL,HL
  51.                 LD DE,FONT
  52.                 ADD HL,DE
  53.                 PUSH HL
  54.                 LD HL,VVARS.PPOS_X
  55.                 LD E,(HL)               ; X
  56.                 INC (HL)                ; следующий X
  57.                 INC HL
  58.                 LD A,(HL)               ; Y
  59.                 ADD A,A
  60.                 ADD A,A
  61.                 ADD A,A                 ; Y координата в таблице адресов экрана
  62.                 LD B,A
  63.                 LD A,E
  64.                 ADD A,A                 ; *2
  65.                 ADD A,A                 ; *4
  66.                 ADD A,E                 ; *5
  67.                 ADD A,E                 ; *6
  68.                 LD D,A
  69.                 EX AF,AF'
  70.                 LD A,D
  71.                 SRL A
  72.                 SRL A
  73.                 SRL A
  74.                 LD C,A                  ; X смещение
  75.                 LD H,HIGH (BUFTSC)
  76.                 LD L,B
  77.                 LD A,(HL)
  78.                 ADD A,C
  79.                 LD E,A
  80.                 INC H
  81.                 LD D,(HL)
  82.                 POP HL
  83.                 EX AF,AF'
  84.                 AND 7
  85.                 JP NZ,.L0
  86. ; POS = 0       0000 0011 1111 1111
  87.         REPT 8
  88.                 LD A,(DE)
  89.                 AND %00000011
  90.                 OR (HL)
  91.                 LD (DE),A
  92.                 INC D
  93.                 INC HL
  94.         ENDM
  95.                 JP .RET
  96.  
  97. ; POS = 2       1100 0000 1111 1111
  98. .L0             SUB 2
  99.                 JP NZ,.L1
  100.         REPT 8
  101.                 LD A,(HL)
  102.                 RRA
  103.                 RRA
  104.                 LD C,A
  105.                 LD A,(DE)
  106.                 AND %11000000
  107.                 OR C
  108.                 LD (DE),A
  109.                 INC D
  110.                 INC HL
  111.         ENDM
  112.                 JP .RET
  113.  
  114. ; POS = 4       1111 0000 0011 1111
  115. .L1             SUB 2
  116.                 JP NZ,.L2
  117.         REPT 8
  118.                 LD C,0
  119.                 LD A,(HL)
  120.                 RRA
  121.                 RRA
  122.                 RRA
  123.                 RR C
  124.                 RRA
  125.                 RR C
  126.                 LD B,A
  127.                 LD A,(DE)
  128.                 AND %11110000
  129.                 OR B
  130.                 LD (DE),A
  131.                 INC E
  132.                 LD A,(DE)
  133.                 AND %00111111
  134.                 OR C
  135.                 LD (DE),A
  136.                 DEC E
  137.                 INC D
  138.                 INC HL
  139.         ENDM
  140.                 JP .RET
  141.  
  142. ; POS = 6       1111 1100 0000 1111
  143. .L2
  144.         REPT 8
  145.                 LD B,0
  146.                 LD A,(HL)
  147.                 ADD A,A
  148.                 RL B
  149.                 ADD A,A
  150.                 RL B
  151.                 LD C,A
  152.                 LD A,(DE)
  153.                 AND %11111100
  154.                 OR B
  155.                 LD (DE),A
  156.                 INC E
  157.                 LD A,(DE)
  158.                 AND %00001111
  159.                 OR C
  160.                 LD (DE),A
  161.                 DEC E
  162.                 INC D
  163.                 INC HL
  164.         ENDM
  165. .RET
  166.                 LD A,(VVARS.COLOR_TEXT)
  167.                 LD C,A
  168.                 INC A
  169.                 JR Z,.RET1
  170.                 DEC D
  171.                 LD A,D
  172.                 RRCA
  173.                 RRCA
  174.                 RRCA
  175.                 AND 3
  176.                 OR 0x58
  177.                 LD D,A
  178.                 EX DE,HL
  179.                 LD (HL),C
  180. .RET1          
  181.                 EXX
  182.                 POP HL
  183.                 RET
  184.  
  185. ; генерация адресов экрана
  186. FADRTSC         LD B,0x18
  187.                 LD DE,0x4000
  188.                 LD HL,BUFTSC
  189. .L1             LD C,8
  190. .L2             LD (HL),E
  191.                 INC H
  192.                 LD (HL),D
  193.                 DEC H
  194.                 INC L
  195.                 INC D
  196.                 DEC C
  197.                 JR NZ,.L2
  198.                 LD A,0x20
  199.                 ADD A,E
  200.                 LD E,A
  201.                 JR C,.L3
  202.                 LD A,D
  203.                 SUB 8
  204.                 LD D,A
  205. .L3             DJNZ .L1
  206.                 RET
  207.