?login_element?

Subversion Repositories NedoOS

Rev

Rev 1764 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; Colourful pseudo-text code
  2. VDP_DATA_PORT    = #98
  3. VDP_COMMAND_PORT = #99
  4.     module TextMode
  5.  
  6.     macro vdp_reg reg, value
  7.     di
  8.     ld a, value
  9.     out (VDP_COMMAND_PORT), a
  10.     nop
  11.     ld a, #80 or reg
  12.     ei
  13.     out (VDP_COMMAND_PORT), a
  14.     endm
  15.  
  16. init:
  17.     call vdpWait
  18.     vdp_reg 1, 48 ; Shutdown screen
  19.     xor a
  20.     ld (#f3dc), a, (#f3dd), a
  21.     vdp_reg 0, 4
  22.  
  23.     ld hl, #1000 : call vdpSetWrite
  24.     ld bc, 2048 : ld hl, font
  25. .fontLoop
  26.     ld a, (hl)
  27.     out (VDP_DATA_PORT), a
  28.     nop
  29.     inc hl : dec bc
  30.     ld a, b : or c : jr nz, .fontLoop
  31. cls:
  32.     vdp_reg 1, 48 ; Shutdown screen
  33.     ld hl, #0000 : call vdpSetWrite
  34.     ld bc, #90D ; To the end attrs
  35. .loop
  36.     xor a
  37.     out (VDP_DATA_PORT), a
  38.     nop
  39.     dec bc
  40.     ld a, b : or c : jr nz, .loop
  41.     ld hl, 0, (coords), hl
  42.     vdp_reg 2, 3
  43.     vdp_reg 4, 2
  44.     vdp_reg 7, #F1    ; Color 1
  45.     vdp_reg 12, #F4   ; Color 2
  46.     vdp_reg 13, #f0   ; Flashing using as second color
  47.     ; Set attrs begin to #800
  48.     vdp_reg 3,  #20 or #7  ; A13-A9 bits and 111 for attributes address bus
  49.     vdp_reg 10, #00        ; 00000 and A16-A14 for attributes address bus
  50.     vdp_reg 1, 112 ; Screen 0/Text 2
  51.     ret
  52.  
  53. ; A - line
  54. usualLine:
  55.     push af
  56.     xor a
  57.     ld (fillLineColor.loop + 1), a
  58.     pop af
  59.     jr fillLineColor
  60. ; A - line
  61. highlightLine:
  62.     push af
  63.     ld a, #ff
  64.     ld (fillLineColor.loop + 1), a
  65.     pop af
  66. fillLineColor:
  67.     ld h, 0, l, a
  68.     and a : jr z, .skip
  69.     add hl, hl
  70.     ld bc, hl
  71.     add hl, hl
  72.     add hl, hl
  73.     add hl, bc ; x10
  74. .skip
  75.     ld a, h : add #8 : ld h, a
  76.     call vdpSetWrite
  77.  
  78.     ld b, 10
  79. .loop
  80.     ld a, #ff
  81.     out (VDP_DATA_PORT), a
  82.     nop
  83.     djnz .loop
  84.     ret
  85.  
  86. printZ:
  87.     ld a, (hl) : and a : ret z
  88.     push hl
  89.     call putC
  90.     pop hl
  91.     inc hl
  92.     jr printZ
  93.  
  94.  
  95. ; A - char
  96. putC:
  97.     cp 13 : jr z, .nl
  98.     push af
  99.     ld de, (coords)
  100.     call xyToAddr
  101.     call vdpSetWrite
  102.     pop af
  103.     out (VDP_DATA_PORT), a
  104.     ld a, (coords)
  105.     inc a
  106.     cp 80 : jr nz, .write
  107. .nl
  108.     ld hl, coords + 1
  109.     inc (hl)
  110.     xor a
  111. .write
  112.     ld (coords), a
  113.     ret
  114.  
  115. fillLine:
  116.     ld l, h, h, 0
  117.     dup 4
  118.     add hl, hl
  119.     edup
  120.     push bc
  121.     ld bc, hl
  122.     add hl,hl
  123.     add hl,hl
  124.     add hl, bc
  125.     ex af, af'
  126.    call vdpSetWrite
  127.    ex af, af'
  128.     ld b, 80
  129. .loop
  130.     out (VDP_DATA_PORT), a
  131.     nop
  132.     djnz .loop
  133.     pop bc
  134.     ret
  135.  
  136. ; DE - coord(E - X, D - Y)
  137. xyToAddr:
  138.     ld h, 0, l, d
  139.     dup 4
  140.     add hl, hl
  141.     edup
  142.     push bc
  143.     ld bc, hl
  144.     add hl,hl
  145.     add hl,hl
  146.     add hl, bc
  147.     ld d, 0
  148.     add hl, de
  149.     pop bc
  150.     ret
  151.  
  152. vdpWait:
  153.     vdp_reg 15, 2
  154.     di
  155.     in a, (VDP_COMMAND_PORT)
  156.     rrca
  157.     vdp_reg 15, 0
  158.     ei
  159.     jr c, vdpWait
  160.  
  161.     ret
  162.  
  163. ;
  164. ; Set VDP address counter to write from address AHL (17-bit)
  165. ; Enables the interrupts
  166. ;
  167. vdpSetWrite:
  168.     di
  169.     ld a, l : out (VDP_COMMAND_PORT), a
  170.     nop : nop
  171.     ld a, h : or #40 : out (VDP_COMMAND_PORT), a
  172.     nop
  173.     ei
  174.     ret
  175.  
  176. vdpSetRead:
  177.     ld a, l : out (VDP_COMMAND_PORT), a
  178.     nop
  179.     ld a, h  : out (VDP_COMMAND_PORT), a
  180.     ret
  181.  
  182. gotoXY:
  183.     ld (coords), de
  184.     ret
  185.  
  186. coords dw 0
  187.  
  188. loadFont:
  189. ; Loading font
  190.     ld de, fontName, a, FMODE_NO_WRITE : call Dos.fopen
  191.     push bc
  192.     ld de, font, hl, 2048 :call Dos.fread
  193.     pop bc
  194.     call Dos.fclose
  195.     ret
  196.     endmodule
  197.  
  198. exit:
  199.     vdp_reg 1, 48 ; Shutdown screen
  200.     ld c, 0
  201.     or a : ld ix, #0185
  202.         call callSub
  203.     rst 0