?login_element?

Subversion Repositories NedoOS

Rev

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

  1. COLOR=0
  2.     module TextMode
  3. PORT_SELECT = #7c3b
  4. init:
  5.     ld hl, font_file, b, Dos.FMODE_READ
  6.     call Dos.fopen
  7.     push af
  8.     ld bc, 2048, hl, font
  9.     call Dos.fread
  10.     pop af
  11.     call Dos.fclose
  12. cls:
  13.     ld a, 7 : call Memory.setPage
  14.  
  15.     ld a, #3E : out (#ff), a
  16.  
  17.     di
  18.     ld  hl,0, d,h, e,h, b,h, c,b
  19.     add hl,sp
  20.     ld  sp,#c000 + 6144
  21. .loop
  22.     dup 12
  23.         push    de
  24.     edup
  25.  
  26.     djnz        .loop
  27.  
  28.     ld  b,c
  29.     ld  sp,#e000 + 6144
  30. .loop2:
  31.     dup 12
  32.         push    de
  33.     edup
  34.  
  35.     djnz .loop2
  36.     ld  sp,hl
  37.     ld hl ,0 : ld (coords), hl
  38.     xor a : call Memory.setPage
  39.    
  40.     ei
  41.     ret
  42.  
  43. ; A - line
  44. usualLine:
  45.    ld d, a
  46.    jr fill
  47. ; A - line
  48. highlightLine:
  49.     ld d, a
  50. fill:
  51.     ld e, 0, b, 64
  52. .lloop
  53.         push bc
  54.         push de
  55.         call findAddr
  56.     ld a, 7 : call Memory.setPage
  57.        
  58.         ld b, 8
  59. .cloop 
  60.         ld a, (de) : xor #ff : ld (de), a
  61.         inc d
  62.         djnz .cloop
  63.         pop de
  64.         inc e
  65.         pop bc
  66.         djnz .lloop
  67.  
  68.     xor a : call Memory.setPage
  69.     ret
  70.  
  71. printZ:
  72.     ld a, (hl) : and a : ret z
  73.     push hl
  74.     call putC
  75.     pop hl
  76.     inc hl
  77.     jr printZ
  78.  
  79.  
  80. ; A - char
  81. putC:
  82.         cp 13
  83.         jp z, .cr
  84.  
  85.     ld b, a
  86.    
  87.     ld de, (coords)
  88.     ld a, e
  89.     cp 64
  90.     ret nc
  91.  
  92.         push bc
  93.  
  94.     ld a, 7
  95.     call Memory.setPage
  96.  
  97.         call findAddr
  98.         pop af
  99.         ld l, a
  100.         ld h, 0
  101.         add hl, hl
  102.         add hl, hl
  103.         add hl, hl
  104.         ld bc, font
  105.         add hl, bc
  106.         ld b, 8
  107. .loop
  108.         ld a, (HL)
  109.         ld (DE), A
  110.         inc hl
  111.         inc d
  112.         djnz .loop
  113.         ld hl, (coords)
  114.         inc l
  115.         ld (coords), hl
  116.  
  117.     xor a : call Memory.setPage
  118.         ret
  119. .cr
  120.         ld hl, (coords)
  121.         inc h
  122.         ld l, 0, (coords), hl
  123.         cp 24
  124.         ret c
  125.         ld hl, 0, (coords), hl
  126.     xor a : call Memory.setPage
  127.         ret    
  128.  
  129. ; H - line
  130. ; A - char
  131. fillLine:
  132.     ld d, h, e, 0 : call gotoXY
  133.     ld b, 64
  134. .loop
  135.     push af, bc
  136.     call putC
  137.     pop bc, af
  138.     djnz .loop
  139.     ret
  140.  
  141.  
  142. gotoXY:
  143.     ld (coords), de
  144.     ret
  145.  
  146. ; D - Y
  147. ; E - X
  148. ; OUT: de - coords
  149. findAddr:
  150.     ld a, e
  151.     srl a
  152.     ld e, a, hl, #A000
  153.     jr c, fa1
  154.     ld hl, #8000
  155. fa1:               
  156.     LD A,D
  157.     AND 7
  158.     RRCA
  159.     RRCA
  160.     RRCA
  161.     OR E
  162.     LD E,A
  163.     LD A,D
  164.     AND 24
  165.     OR 64
  166.     LD D,A
  167.     ADD hl, de
  168.     ex hl, de
  169.     ret
  170.  
  171. disable:
  172.     xor a : out (#fe), a : out (#ff), a
  173.     ret
  174.  
  175. coords dw 0
  176. font equ #4000 ; Using ZX-Spectrum screen as font buffer
  177. font_file db "data/font.bin", 0
  178.     endmodule
  179.  
  180. exit:
  181.     ld bc, TextMode.PORT_SELECT, a, 1          
  182.     out (c), a
  183.     inc b : xor a
  184.     out (c), a
  185.     rst 0