?login_element?

Subversion Repositories NedoOS

Rev

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

  1. COLOR=1
  2. ;; Usual speccy screen driver
  3.     module TextMode
  4. init:
  5.     ld hl, font_file, b, Dos.FMODE_READ
  6.     call Dos.fopen
  7.     push af
  8.     ld bc, 2048, hl, font64
  9.     call Dos.fread
  10.     pop af
  11.     call Dos.fclose
  12.         xor a : out (#fe), a
  13.         ret
  14. cls:
  15.     ld de, 0 : call gotoXY
  16.     ld a, 7 : call Memory.setPage
  17.     xor a : out (#fe), a
  18.     ld hl, #c000, de, #c001, bc, 6911, (hl), a : ldir
  19.     jp Memory.setPage
  20.    
  21.  
  22. ; Set console coordinates
  23. ; d = row(0..23), e = column (0..63)
  24. gotoXY:
  25.         rr e
  26.         ld a, 0
  27.         ld (half_tile_screen), a
  28.     ld (col_screen), de
  29.     ret    
  30.  
  31. disable:
  32.     ; Nothing to disable
  33.     ret
  34.  
  35. ; H - line
  36. ; A - char
  37. fillLine:
  38.     push af
  39.     ld d, h, e, 0 : call gotoXY
  40.     pop af
  41.     ld hl, fill_buff, de, fill_buff + 1, bc, 63, (hl), a : ldir
  42.     ld hl, fill_buff : jp printZ
  43.  
  44. usualLine:
  45.     ld b, a
  46.     ld c, 0
  47.     call bc_to_attr
  48.     ld a, 7 : call Memory.setPage
  49.     ld (hl), #7
  50.     ld de, hl
  51.     inc de
  52.     ld bc, 31
  53.     ldir
  54.     xor a : call Memory.setPage
  55.     ret
  56.  
  57. highlightLine:
  58.     ld b, a
  59.     ld c, 0
  60.     call bc_to_attr
  61.     ld a, 7 : call Memory.setPage
  62.     ld (hl), #C
  63.     ld de, hl
  64.     inc de
  65.     ld bc, 31
  66.     ldir
  67.     xor a : call Memory.setPage
  68.     ret
  69.  
  70. mvCR
  71.         ld de, (col_screen)
  72.         inc d
  73.         ld e, 0
  74.         ld a, 0
  75.         ld (half_tile_screen), a
  76.         jp gotoXY
  77.        
  78. ; Print just one symbol
  79. ; A - symbol
  80. putC
  81.     cp 13 : jp z, mvCR
  82.  
  83.         ld hl, single_symbol
  84.         ld (hl), a
  85.         ld a, 7 : call Memory.setPage
  86.     ld hl, single_symbol_print
  87.     call printL
  88.     xor a : jp Memory.setPage
  89.  
  90. ; Put string
  91. ; hl - string pointer that's begins from symbol count
  92. printZ
  93.     ld a, (hl) : and a : ret z
  94.     push hl
  95.     call putC
  96.     pop hl
  97.     inc hl
  98.     jr printZ
  99.    
  100. printL 
  101.         ld      a, (hl)
  102.                 and     a
  103.                 ret     z
  104.  
  105.                 push    hl
  106.                 call    calc_addr_attr
  107.                 ld      a,(attr_screen)
  108.                 ld      (hl),a
  109.                 pop     hl
  110.  
  111.                 call    calc_addr_scr
  112.  
  113.                 ld      a,(half_tile_screen)
  114.                 bit     0,a
  115.                 ld      a,(hl)
  116.                 jp      nz,print64_4
  117. print64_3
  118.         push    af
  119.                 push    hl
  120.                 call    calc_addr_attr
  121.                 ld      a,(attr_screen)
  122.                 ld      (hl),a
  123.                 pop     hl
  124.        
  125.         inc     hl
  126.         push    hl
  127.        
  128.         ld      a,(hl)
  129.                 ld      l,a
  130.                 ld      h,0
  131.                 add     hl,hl
  132.                 add     hl,hl
  133.                 add     hl,hl
  134.         ld      bc,font64
  135.         add     hl,bc
  136.  
  137.         push    de
  138.        
  139.         ld      b,6
  140.                 xor     a
  141.                 ld      (de),a
  142. print64_1  
  143.         inc     d
  144.         ld      a,(hl)
  145.         and     #f0
  146.         ld      (de),a
  147.         inc     hl
  148.         djnz    print64_1
  149.  
  150.         inc     d
  151.         xor     a
  152.         ld      (de),a
  153.  
  154.         ld      a,1
  155.         ld      (half_tile_screen),a
  156.  
  157.         pop     de
  158.         pop     hl
  159.         pop     af
  160.  
  161.         dec     a
  162.         ret     z
  163.  
  164. print64_4      
  165.         push    af
  166.  
  167.         inc     hl
  168.         push    hl
  169.  
  170.         ld      a,(hl)
  171.         ld      l,a
  172.         ld      h,0
  173.         add     hl,hl
  174.         add     hl,hl
  175.         add     hl,hl
  176.         ld      bc,font64
  177.         add     hl,bc
  178.  
  179.         push    de
  180.  
  181.         ld      b,6
  182.         xor     a
  183.         ld      (de),a
  184. print64_2      
  185.         inc     d
  186.         ld      a,(hl)
  187.         and     #0f
  188.         ld      c,a
  189.         ld      a,(de)
  190.         or      c
  191.         ld      (de),a
  192.         inc     hl
  193.         djnz    print64_2
  194.  
  195.         inc     d
  196.         xor     a
  197.         ld      (de),a
  198.  
  199.         ld      (half_tile_screen),a
  200.  
  201.         pop     de
  202.  
  203.         call    move_cr64
  204.  
  205.         pop     hl
  206.         pop     af
  207.         dec     a
  208.        
  209.         jp      nz,print64_3
  210.  
  211.         ret
  212.  
  213. ; move cursor
  214. move_cr64      
  215.         inc     de
  216.  
  217.         ld      hl,col_screen
  218.         inc     (hl)
  219.         ld      a,(hl)
  220.  
  221.         cp      32
  222.         ret     c
  223.  
  224.         xor     a
  225.         ld      (half_tile_screen),a
  226.         ld      (hl),a
  227.         ld      c,a
  228.  
  229.         inc     hl
  230.         inc     (hl)
  231.         ld      a,(hl)
  232.         ld      b,a
  233.  
  234.         cp      24
  235.         jp      c,move_cr64_01
  236.  
  237.         ld      a,23
  238.         ld      (hl),a
  239.         ld      b,a
  240.  
  241.         push    bc
  242.         call    scroll_up8
  243.         pop     bc
  244.  
  245. move_cr64_01   
  246.         call    calc_addr_scr
  247.         ret
  248.  
  249. calc_addr_scr          
  250.         ld      a,b
  251.         ld      d,a
  252.         rrca
  253.         rrca
  254.         rrca
  255.         and     a,224
  256.         add     a,c
  257.         ld      e,a
  258.         ld      a,d
  259.         and     24
  260.         or      #c0
  261.         ld      d,a
  262.         ret
  263.  
  264. calc_addr_attr         
  265.         ld      bc,(col_screen)
  266. bc_to_attr:
  267.         ld      a,b
  268.         rrca
  269.         rrca
  270.         rrca
  271.         ld      l,a
  272.         and     31
  273.         or      #d8
  274.         ld      h,a
  275.         ld      a,l
  276.         and     252
  277.         or      c
  278.         ld      l,a
  279.         ret
  280.  
  281. scroll_up8             
  282.         ld      hl,table_addr_scr
  283.         ld      b,184
  284.  
  285. scroll_up8_01          
  286.         push    bc
  287.  
  288.         ld      e,(hl)
  289.         inc     hl
  290.         ld      d,(hl)
  291.         inc     hl
  292.  
  293.         push    hl
  294.  
  295.         ld      bc,14
  296.         add     hl,bc
  297.         ld      c,(hl)
  298.         inc     hl
  299.         ld      b,(hl)
  300.  
  301.         ld      h,b
  302.         ld      l,c
  303.  
  304.         ld      bc,32
  305.         ldir
  306.  
  307.         pop     hl
  308.         pop     bc
  309.         djnz    scroll_up8_01
  310.  
  311.         ld      b,8
  312.  
  313. scroll_up8_02          
  314.         push    bc
  315.  
  316.         ld      e,(hl)
  317.         inc     hl
  318.         ld      d,(hl)
  319.         inc     hl
  320.  
  321.         push    hl
  322.  
  323.         ld      h,d
  324.         ld      l,e
  325.         inc     de
  326.         ld      (hl),0
  327.         ld      bc,31
  328.         ldir
  329.  
  330.         pop     hl
  331.         pop     bc
  332.         djnz    scroll_up8_02
  333.         ld      de,#D800, hl,#D820, bc,736
  334.         ldir
  335.         ld      a,(de)
  336.         ld      hl,#dae0, de,#dae1, (hl),a, bc,31
  337.         ldir
  338.  
  339.         ret
  340.  
  341. font64 equ #4000 ; Using ZX-Spectrum screen as font buffer
  342. font_file db "data/font64.bin", 0
  343.  
  344.  
  345. table_addr_scr         
  346.         defw    #4000,#4100,#4200,#4300,#4400,#4500,#4600,#4700
  347.         defw    #4020,#4120,#4220,#4320,#4420,#4520,#4620,#4720
  348.         defw    #4040,#4140,#4240,#4340,#4440,#4540,#4640,#4740
  349.         defw    #4060,#4160,#4260,#4360,#4460,#4560,#4660,#4760
  350.         defw    #4080,#4180,#4280,#4380,#4480,#4580,#4680,#4780
  351.         defw    #40a0,#41a0,#42a0,#43a0,#44a0,#45a0,#46a0,#47a0
  352.         defw    #40c0,#41c0,#42c0,#43c0,#44c0,#45c0,#46c0,#47c0
  353.         defw    #40e0,#41e0,#42e0,#43e0,#44e0,#45e0,#46e0,#47e0
  354.  
  355.         defw    #4800,#4900,#4a00,#4b00,#4c00,#4d00,#4e00,#4f00
  356.         defw    #4820,#4920,#4a20,#4b20,#4c20,#4d20,#4e20,#4f20
  357.         defw    #4840,#4940,#4a40,#4b40,#4c40,#4d40,#4e40,#4f40
  358.         defw    #4860,#4960,#4a60,#4b60,#4c60,#4d60,#4e60,#4f60
  359.         defw    #4880,#4980,#4a80,#4b80,#4c80,#4d80,#4e80,#4f80
  360.         defw    #48a0,#49a0,#4aa0,#4ba0,#4ca0,#4da0,#4ea0,#4fa0
  361.         defw    #48c0,#49c0,#4ac0,#4bc0,#4cc0,#4dc0,#4ec0,#4fc0
  362.         defw    #48e0,#49e0,#4ae0,#4be0,#4ce0,#4de0,#4ee0,#4fe0
  363.  
  364.         defw    #5000,#5100,#5200,#5300,#5400,#5500,#5600,#5700
  365.         defw    #5020,#5120,#5220,#5320,#5420,#5520,#5620,#5720
  366.         defw    #5040,#5140,#5240,#5340,#5440,#5540,#5640,#5740
  367.         defw    #5060,#5160,#5260,#5360,#5460,#5560,#5660,#5760
  368.         defw    #5080,#5180,#5280,#5380,#5480,#5580,#5680,#5780
  369.         defw    #50a0,#51a0,#52a0,#53a0,#54a0,#55a0,#56a0,#57a0
  370.         defw    #50c0,#51c0,#52c0,#53c0,#54c0,#55c0,#56c0,#57c0
  371.         defw    #50e0,#51e0,#52e0,#53e0,#54e0,#55e0,#56e0,#57e0
  372.  
  373.  
  374. col_screen                      db      0              
  375. row_screen                      db      0                                      
  376. half_tile_screen        db      0                                      
  377. attr_screen                     db      07                                     
  378.  
  379. col_screen_temp                 dw      0                              
  380. half_tile_screen_temp   db      0                              
  381.  
  382. single_symbol_print db 1
  383. single_symbol           db 0
  384.  
  385. fill_buff ds 65
  386.  
  387.     endmodule