?login_element?

Subversion Repositories NedoOS

Rev

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