?login_element?

Subversion Repositories NedoOS

Rev

Rev 767 | Blame | Compare with Previous | Last modification | View Log | Download

  1. cls
  2.         call setscrpg
  3.         ld hl,0x4000
  4.         ld de,0x4001
  5.         ld bc,0x17ff
  6.         ld (hl),l;0
  7.         ldir
  8.         jp setpgroots
  9.  
  10.         if 1==0
  11. downhl
  12.         inc h
  13. downhl_afterinch
  14.         ld a,h
  15.         and 7
  16.         ret nz
  17.         ld a,l
  18.         add a,32
  19.         ld l,a
  20.         ret c
  21.         ld a,h
  22.         sub 8
  23.         ld h,a
  24.         ret
  25.         endif
  26.  
  27. nextchrline_de
  28.         ld a,e
  29.         add a,32
  30.         ld e,a
  31.         ret nc;jr nc,$+6
  32.          ld a,d
  33.          add a,8
  34.          ld d,a
  35.         ret
  36.  
  37. nextchrline_hl
  38.         ld a,l
  39.         add a,32
  40.         ld l,a
  41.         ret nc;jr nc,$+6
  42.          ld a,h
  43.          add a,8
  44.          ld h,a
  45.         ret
  46.  
  47. prchardig
  48.         push de
  49.         ;push hl
  50.         ld h,digfont/256
  51.         jr prchar_h
  52. prcharnote
  53.         push de
  54.         ;push hl
  55.         ld h,notefont/256
  56.         jr prchar_h
  57. prchar
  58.         push de
  59.         ;push hl
  60.         ld h,font/256
  61. prchar_h
  62.         ld l,a
  63.         push bc
  64.         call setscrpg
  65.         pop bc
  66.         dup 7
  67.         ld a,(de)
  68.         xor (hl)
  69.         and c
  70.         xor (hl)
  71.         ld (de),a
  72.         inc h
  73.         inc d
  74.         edup
  75.         ld a,(de)
  76.         xor (hl)
  77.         and c
  78.         xor (hl)
  79.         ld (de),a
  80.         ;pop hl
  81.         pop de
  82.         push bc
  83.         call setpgroots
  84.         pop bc
  85.         ld a,c
  86.         xor 0xff
  87.         ld c,a
  88.         ret m
  89.         inc e
  90.         ret
  91.  
  92. prcur
  93. ;bc=YX
  94. ;0b000YYyyy 0b00XXXXXx
  95. ;0b010YY000 0byyyXXXXX
  96.         push bc
  97.         call setscrpg
  98.         pop bc
  99.         ld a,b
  100.         and 0x18
  101.         add a,0x40
  102.         ld d,a
  103.         ld a,c
  104.         add a,a
  105.         add a,a ;0bXXXXXx00
  106.         rr b
  107.         rra
  108.         rr b
  109.         rra
  110.         rr b
  111.         rra ;0xbyyyXXXXX, CY=x
  112.         ld e,a
  113.         sbc a,a
  114.         xor 0xf0
  115.         ld c,a
  116.         dup 7
  117.         ld a,(de)
  118.         xor c
  119.         ld (de),a
  120.         inc d
  121.         edup
  122.         ld a,(de)
  123.         xor c
  124.         ld (de),a
  125.         call setpgroots
  126.         ret
  127.  
  128. prtext
  129. prtext0keepde
  130.         ld (prtext_cr_de),de
  131.         ld a,c
  132.         ld (prtext_cr_c),a
  133. prtext0
  134.         ld a,(hl)
  135.         or a
  136.         ret z
  137.         inc hl
  138.         cp 13
  139.         jr z,prtext_cr
  140.         push hl
  141.         call prchar
  142.         pop hl
  143.         jr prtext0
  144. prtext_cr
  145. prtext_cr_c=$+1
  146.         ld c,0
  147. prtext_cr_de=$+1
  148.         ld de,0
  149.         call nextchrline_de
  150.         jr prtext0keepde
  151.  
  152.         align 256
  153. font
  154.         incbin "64qua.fnt"
  155. fnotes
  156.         incbin "fnotes.fnt"
  157. notefont=0x6000
  158.         ;ds 2048
  159. digfont=0x6800
  160.         ;ds 2048
  161.  
  162. ;;;;;;;;;;;;;;;;;;;;;;;;; high level view ;;;;;;;;;;;;;;;;;;;;;;;;
  163. getscrntracks
  164.         ld a,(ntracks)
  165.         ld b,SCRNTRACKS
  166.         cp b
  167.         ret nc
  168.         ld b,a
  169.         ret
  170.  
  171. setneedprtypes
  172.         ld a,55 ;"scf"
  173.         ld (needprtypes),a
  174.         ret
  175. setneedprtracks
  176.         ld a,-1
  177.         ld (oldtoptrack),a
  178.         ret
  179.  
  180. updatescr
  181. ;сейчас виден курсор
  182.  
  183. ;обновляем, если изменился lefttime или toptrack
  184. ;при смене toptrack также перерисовать описатели треков
  185.         call getcurplayxonscreen
  186.         ld (curplayxonscreen),a
  187. oldcurplayxonscreen=$+1
  188. oldcurplayyonscreen=$+2
  189.         ld bc,0
  190.         ;cp c
  191.         ;jr z,updatescr_noplaycur
  192.         ld a,c
  193.         or a
  194.         call nz,prcur
  195. updatescr_noplaycur
  196.  
  197.         call getcurx
  198. tracksmode=$+1
  199.         ld c,0
  200.         dec c
  201.         jr nz,$+5
  202.          ld a,(tracks_curx) ;edit tracks mode
  203.         ld (curxonscreen),a
  204. oldcurxonscreen=$+1
  205. oldcuryonscreen=$+2
  206.         ld bc,0
  207.         ;cp c
  208.         ;jr z,updatescr_nocur
  209.         call prcur
  210. updatescr_nocur
  211.  
  212. ;теперь курсор не виден
  213.         ld a,(toptrack)
  214. oldtoptrack=$+1
  215.         ld c,-1
  216.         ld (oldtoptrack),a
  217.         ld hl,(lefttime)
  218.         ld (curlefttime),hl
  219. oldlefttime=$+1
  220.         ld de,0x8000
  221.         ld (oldlefttime),hl
  222.         cp c
  223.         jp nz,updatescr_scrollupdown
  224.         or a
  225.         sbc hl,de
  226.         jr nz,updatescr_scroll
  227.         jp updatescr_scrollq
  228. updatescr_scrollupdown
  229.         call setneedpralltracks
  230.         call setneedprtypes
  231.         jp updatescr_scroll_noprall
  232.  
  233. updatescr_scroll
  234. ;hl=lefttime-oldlefttime
  235.         bit 7,h
  236.         jp nz,updatescr_scroll_right        
  237. ;updatescr_scroll_left
  238.         ld bc,9
  239.         or a
  240.         sbc hl,bc
  241.         jp nc,updatescr_scroll_prall
  242.         add hl,bc
  243.         ld c,l;1
  244.         ld hl,0x4020+(TRACKX/2);+(SCRTRACKWID/2)-1
  245.         call getscrntracks;ld b,SCRNTRACKS
  246.         ld a,(toptrack)
  247.         ld hx,a;0 ;track
  248.         call scroll_left_c ;c=scroll amount (in chars)
  249.         call setpgroots
  250.         jp updatescr_scroll_noprall
  251.  
  252. updatescr_scroll_right
  253.         xor a
  254.         sub l
  255.         ld l,a
  256.         sbc a,h
  257.         sub l
  258.         ld h,a ;hl=-hl
  259.         ld bc,9
  260.         or a
  261.         sbc hl,bc
  262.         jp nc,updatescr_scroll_prall
  263.         add hl,bc
  264.         ld c,l;1
  265.         ld hl,0x4020+(TRACKX/2)
  266.         call getscrntracks;ld b,SCRNTRACKS
  267.         ld a,(toptrack)
  268.         ld hx,a;0 ;track
  269.         call scroll_right_c ;c=scroll amount (in chars)
  270.         call setpgroots
  271.         jp updatescr_scroll_noprall
  272.  
  273. updatescr_scroll_prall
  274.         call setneedpralltracks
  275. updatescr_scroll_noprall
  276. ;показывать время только при скролле (TODO по одной цифре)
  277.         ld de,0x4000+(TRACKX/2)
  278.         ld b,SCRTRACKWID
  279.         ld c,0x0f
  280.         ld hl,(curlefttime)
  281.         inc hl
  282.         inc hl
  283. updatescr_time0
  284. ;печатаем только на барах (32), 2 цифры слева и 2 справа
  285.         ld a,l
  286.         and 31
  287.         cp 4
  288.         ld a,'.'
  289.         jr nc,updatescr_time0_skip
  290.         ld a,l
  291.         and 0xfc
  292.         bit 1,l
  293.         jr nz,$+3
  294.          ld a,h
  295.         bit 0,l
  296.         jr nz,$+6
  297.          rra
  298.          rra
  299.          rra
  300.          rra
  301.         or 0xf0
  302.         daa
  303.         add a,0xa0
  304.         adc a,0x40
  305. updatescr_time0_skip
  306.         push hl
  307.         call prchar
  308.         pop hl
  309.         inc hl
  310.         inc c
  311.         djnz updatescr_time0
  312.  
  313. updatescr_scrollq
  314.         ;xor a
  315.         ;ld (untr_needredraw),a
  316.         ;ld de,0x4001
  317.         ;ld c,0x0f
  318.         ;ld hl,ttypes
  319. needprtypes=$
  320.         scf
  321.         call c,prtypes
  322.         ld a,55+128 ;"or a"
  323.         ld (needprtypes),a
  324.  
  325. ;needpralltracks=$
  326. ;        scf
  327.         ;jr nc,updatescr_prcurtrack
  328. ;обновлять только треки, которые изменились (обновление одного не прокатит при асинхронном рисовании!!!)
  329.         ld de,0x4020+(TRACKX/2)
  330.         call getscrntracks;ld b,SCRNTRACKS
  331.         ld a,(toptrack)
  332.         ld hx,a;0 ;track
  333. updatescr_tracks0
  334.         push bc
  335.         push de
  336.         ld c,0x0f
  337.         ld b,SCRTRACKWID
  338.         call prtrack
  339.         pop de
  340.         call nextchrline_de
  341.         pop bc
  342.         inc hx ;track
  343.         djnz updatescr_tracks0
  344. ;        ld a,55+128 ;"or a"
  345. ;        ld (needpralltracks),a
  346. ;        jr updatescr_prcurtrackq
  347. ;updatescr_prcurtrack
  348. ;        ld a,(curtrack)
  349. ;        ld hx,a
  350. ;        ld c,0x0f
  351. ;        call prtrack
  352. ;updatescr_prcurtrackq
  353.  
  354.         ld hl,(FreeMem_value)
  355.         ld de,0x4000
  356.         ld c,0x0f
  357.         push hl
  358.         ld a,h
  359.         call prhex
  360.         pop hl
  361.         ld a,l
  362.         call prhex
  363.  
  364. ;draw cursors
  365. curplayxonscreen=$+1
  366.         ld a,0
  367.         ld (oldcurplayxonscreen),a
  368.         ld c,a
  369.         xor a ;call getcury
  370.         ld (oldcurplayyonscreen),a
  371.         ld b,a
  372.         ld a,c
  373.         or a
  374.         call nz,prcur
  375.  
  376. curxonscreen=$+1
  377.         ld a,0
  378.         ld (oldcurxonscreen),a
  379.         ld c,a
  380.         call getcury
  381.         ld (oldcuryonscreen),a
  382.         ld b,a
  383.         call prcur
  384.  
  385.         ret
  386. prhex
  387.         call prhexdig
  388. prhexdig
  389.         rrca
  390.         rrca
  391.         rrca
  392.         rrca
  393.         push af
  394.         or 0xf0
  395.         daa
  396.         add a,0xa0
  397.         adc a,0x40
  398.         call prchar
  399.         pop af
  400.         ret
  401.  
  402. prtypes
  403.         ld hl,ttypes
  404.         ld a,(toptrack)
  405.         add a,a
  406.         add a,a
  407.         add a,a
  408.         ld e,a
  409.         ld d,0
  410.         add hl,de
  411.         ld de,0x4020
  412.         call getscrntracks;ld b,SCRNTRACKS
  413. prtypes0
  414.         push bc
  415.         push de
  416.         ld bc,0x070f
  417. prtypes0new0
  418.         ld a,(hl)
  419.         push hl
  420.         call prchardig
  421.         pop hl
  422.         inc hl
  423.         djnz prtypes0new0
  424.         inc hl
  425.         pop de
  426.         call nextchrline_de
  427.         pop bc
  428.         djnz prtypes0
  429.         ret
  430.  
  431. prtrack_gettype
  432.         ld a,hx
  433.         call gettracktype
  434.         ld hl,prcharnote
  435.         cp _t;CHNTYPE_NOTES
  436.         jr z,$+5
  437.          ld hl,prchardig
  438.         ld (prtrack_prproc),hl
  439.         ret
  440.  
  441. prtrack_Nchars
  442. ;(after prtrack_gettype)
  443. ;de=scr
  444. ;hx=track
  445. ;c=0x0f/0xf0
  446. ;b=SCRTRACKWID
  447. ;hl=time
  448. prtrack0
  449.         push hl
  450.         push de
  451.         ld a,hx ;track
  452.         call tracktime_totrackpartindex ;out: a=track, hl=index, ly=part
  453.         call peektrackpartindex
  454.         pop de
  455. prtrack_prproc=$+1
  456.         call prcharnote
  457.         pop hl
  458.          inc hl
  459.         djnz prtrack0
  460.         ret
  461.  
  462. prtrack
  463. ;de=scr
  464. ;hx=track
  465. ;c=0x0f/0xf0
  466. ;b=SCRTRACKWID
  467.         push de
  468.         ld a,hx
  469.         call amulchnsstep_tohl
  470.         ld de,chns-2;tracks
  471.         add hl,de
  472.         pop de
  473.         ld a,(hl)
  474.         or a
  475.         ret p ;трек не обновился
  476.          res 7,(hl)
  477.         call prtrack_gettype
  478.  
  479.         ld hl,(curlefttime)
  480.         push de
  481.         call prtrack_Nchars
  482.         pop de
  483.        
  484.         call setscrpg
  485.  
  486.         ld hl,(curlefttime)
  487.         ld c,0x01
  488.         dec e
  489.         push hl
  490.         ld a,l
  491.         sub 8
  492.         ld l,a
  493.         and 7
  494.         push de
  495.         call prbar_or_nobar
  496.         pop de
  497.         pop hl
  498.         inc e
  499.         ld a,l
  500.         cpl
  501.         and 7 ;если l&7=0, то прибавляем 3... если 7, то прибавляем 0
  502.         rra
  503.         add a,e
  504.         ld e,a
  505.         bit 0,l
  506.         jr z,$+4
  507.          ld c,0x10        
  508.         ld b,SCRTRACKWID/8
  509. prtrack_bars0
  510.         push de
  511.         call prbar
  512.         pop de
  513.         ld a,e
  514.         add a,4
  515.         ld e,a
  516.         djnz prtrack_bars0
  517.  
  518.         call setpgroots
  519.         ret
  520.  
  521.         macro BARPIXEL
  522.         ld a,(de)
  523.         or c
  524.         ld (de),a
  525.         endm
  526.        
  527.         macro NOBARPIXEL
  528.         ld a,(de)
  529.         cpl
  530.         or c
  531.         cpl
  532.         ld (de),a
  533.         endm
  534.        
  535. nobar
  536. ;c=0x10/0x01
  537.         dup 7
  538.         NOBARPIXEL
  539.         inc d
  540.         edup
  541.         NOBARPIXEL
  542.         ret
  543.  
  544. prbar_or_nobar
  545.         jr nz,nobar
  546. prbar
  547. ;l=lefttime
  548.         ld a,l
  549.         add a,8
  550.         ld l,a
  551.         and 3*8
  552.         jr z,prbar_lined
  553. prbar_dotted
  554. ;c=0x10/0x01
  555.         BARPIXEL
  556.         inc d
  557.         NOBARPIXEL
  558.         inc d
  559.         BARPIXEL
  560.         inc d
  561.         NOBARPIXEL
  562.         inc d
  563.         BARPIXEL
  564.         inc d
  565.         NOBARPIXEL
  566.         inc d
  567.         BARPIXEL
  568.         inc d
  569.         NOBARPIXEL
  570.         ret
  571.  
  572. prbar_lined
  573.         ld a,l
  574.         and 3*16
  575.         jr z,prbar_solid
  576. ;c=0x10/0x01
  577.         BARPIXEL
  578.         inc d
  579.         BARPIXEL
  580.         inc d
  581.         BARPIXEL
  582.         inc d
  583.         NOBARPIXEL
  584.         inc d
  585.         BARPIXEL
  586.         inc d
  587.         BARPIXEL
  588.         inc d
  589.         BARPIXEL
  590.         inc d
  591.         NOBARPIXEL
  592.         ret
  593.  
  594. prbar_solid
  595. ;c=0x10/0x01
  596.         dup 7
  597.         BARPIXEL
  598.         inc d
  599.         edup
  600.         BARPIXEL
  601.         ret
  602.  
  603. ;========================== init =====================
  604. gennotefont
  605.         ld hl,notefont
  606.         ld de,notefont+1
  607.         ld bc,2*2048-1 ;digfont тоже
  608.         ld (hl),l;0
  609.         ldir
  610.        
  611.         ld hx,font/256
  612.         ld de,digfont+1
  613.         ld hl,tdigfont
  614.         ld bc,62*256+8
  615.         call gennotefont120
  616.        
  617.         ld hl,tpausefont
  618.         ld de,notefont+(NOTE_GLISS&0xff)
  619.         ld bc,2*256+8
  620.         ld hx,font/256
  621.         call gennotefont120
  622.  
  623.         ld e,NOTE_LOWEST
  624.         ld c,7
  625.         ld hx,0 ;ld hx,font/256
  626.         ld d,notefont/256+1
  627.         call gennotefont12768 ;ноты сдвинуты вниз
  628.         ld c,8
  629.         ld hx,0 ;ld hx,font/256
  630.         ld d,notefont/256
  631.         call gennotefont12768
  632.         ld c,7
  633.         ld hx,1 ;ld hx,font/256+1
  634.         ld d,notefont/256
  635.         ;call gennotefont12 ;ноты сдвинуты вверх
  636.         ;ret
  637.  
  638. gennotefont12768
  639. ;c=nlines
  640. ;hx=font/256+
  641. ;d=notefont/256+
  642.         ld hl,tnotefont
  643.         ld b,12
  644. gennotefont127680
  645.         push bc
  646.         push hl
  647.         ;ld l,(hl)
  648.         ;ld a,hx
  649.         ;ld h,a;font/256
  650.         ;jr $
  651.         ld l,(hl)
  652.         ld h,0
  653.         add hl,hl
  654.         add hl,hl
  655.         add hl,hl
  656.         ld a,h
  657.         add a,fnotes/256-1
  658.         ld h,a
  659.         ld a,l
  660.         add a,hx
  661.         ld l,a
  662.          dec hl
  663.         push de
  664.         ld b,c
  665. gennotefont127681
  666.         ld a,(hl)
  667.         inc hl
  668.         ld (de),a
  669.         inc d
  670.         djnz gennotefont127681
  671.         pop de
  672.         pop hl
  673.         pop bc
  674.         inc hl
  675.         inc e ;next symbol in notefont
  676.         djnz gennotefont127680
  677.         ret
  678.  
  679. gennotefont12
  680. ;c=nlines
  681. ;hx=font/256+
  682. ;d=notefont/256+
  683.         ld hl,tnotefont
  684.         ld b,12
  685. gennotefont120
  686.         push bc
  687.         push hl
  688.         ld l,(hl)
  689.         ld a,hx
  690.         ld h,a;font/256
  691.         push de
  692.         ld b,c
  693. gennotefont121
  694.         ld a,(hl)
  695.         inc h
  696.         ld (de),a
  697.         inc d
  698.         djnz gennotefont121
  699.         pop de
  700.         pop hl
  701.         pop bc
  702.         inc hl
  703.         inc e ;next symbol in notefont
  704.         djnz gennotefont120
  705.         ret
  706.  
  707. tpausefont
  708.         db "-|"
  709. tnotefont
  710. ;в шрифте начиная с кода 1
  711.         db "CcDdEFfGgAaB"
  712. tdigfont
  713. ;в шрифте начиная с кода 1
  714.         db "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  715.