?login_element?

Subversion Repositories NedoOS

Rev

Rev 766 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.         if 1==0
  153. ;lx=background color %33210210
  154. ;hx=color %33210210
  155. ;de=font char
  156. ;hl=screen
  157. prchar48ega_hxoncolor0
  158.         ld b,hx
  159.         ld a,(de)
  160.         ld c,a
  161.         ld a,lx
  162.         rl c
  163.         jr nc,$+2+4
  164.          xor b
  165.          and 0xb8;%10111000
  166.          xor b
  167.         rl c
  168.         jr nc,$+2+4
  169.          xor b
  170.          and 0x47;%01000111
  171.          xor b
  172.         ld (hl),a
  173.         set 6,h
  174.         ld a,lx
  175.         rl c
  176.         jr nc,$+2+4
  177.          xor b
  178.          and 0xb8;%10111000
  179.          xor b
  180.         rl c
  181.         jr nc,$+2+4
  182.          xor b
  183.          and 0x47;%01000111
  184.          xor b
  185.         ld (hl),a
  186.         inc d
  187.         ld bc,+(40-0x4000)
  188.         add hl,bc
  189.         dec hy
  190.         jp nz,prchar48ega_hxoncolor0
  191.  
  192. ;c=ink (IIiiiiii)
  193. ;b=paper (PPpppppp)
  194.         ld a,(hl)
  195.         rla
  196.         sbc a,a
  197.         ld e,a ;RRRRRRRR
  198.         ld a,(hl)
  199.         rla
  200.         rla
  201.         sbc a,a ;LLLLLLLL
  202.         xor e
  203.         and 0b01000111
  204.         xor e
  205.         ld d,a
  206. ;a=%RLRRRLLL        
  207.         and c ;ink (IIiiiiii)
  208.         ld e,a
  209.         ld a,d
  210.         cpl
  211.         and b ;paper (PPpppppp)
  212.         or e
  213.         ld (hl),a
  214.  
  215. ;несколько шрифтов в зависимости от цвета:
  216. ;один шрифт = 2(столбца)*8(высота)*2(байта)*256(символов) = 0x2000
  217. ;с версией, сдвинутой на 1 пикс. вправо, он даже не поместится в страницу
  218.         pop de
  219.         ld a,(hl)
  220.         and e
  221.         or d
  222.         ld (hl),a
  223.         add hl,bc
  224. ;43t/b (последний add не нужен, так что 41.625t/b)
  225. ;но неудобно вычислять начальный адрес (+33t) и сохранять стек (+36t или 16t всегда на одной глубине), причём первое слово надо брать не из стека (+12t), итого 51.75t/b
  226.  
  227. ;или
  228.         ld a,(de)
  229.         and (hl)
  230.         inc d
  231.         ex de,hl
  232.         or (hl)
  233.         ex de,hl
  234.         ld (hl),a
  235.         inc d
  236.         add hl,bc
  237. ;55t/b (последний inc d и add не нужны, так что 53.125t/b)
  238.  
  239. ;или
  240.         ld a,(de)
  241.         and (hl)
  242.         inc h
  243.         or (hl)
  244.         ld (de),a
  245.         inc h
  246.         ld a,e
  247.         add a,c
  248.         ld e,a
  249.         jp nc,$+3 ;10.625t
  250.          inc d
  251. ;10.625+28+20 = 58.625t/b (последний inc h и пересчёт не нужны, так что 55.3t/b)
  252.  
  253. ;или (с огромной таблицей перехода по стеку для всех случаев)
  254.         pop de
  255.         ld a,(de)
  256.         and (hl)
  257.         inc h
  258.         or (hl)
  259.         ld (de),a
  260.         inc h
  261. ;46t/b (45.5 без последнего inc h), но надо сохранять стек (+36t/8) = 50t/b
  262.         endif
  263.  
  264. scrollleft
  265. ;hl=linestart
  266. ;c=scroll amount
  267. ;c=1: scrollleft_rld с c=0
  268. ;c=2: scrollleft_ld с c=1
  269. ;c=3: scrollleft_rld с c=1
  270.         srl c
  271.         jp c,scrollleft_rld
  272. scrollleft_ld
  273. ;hl=linestart
  274. ;c=scroll amount
  275.         ld d,h
  276.         ld a,l
  277.         add a,c
  278.         ld e,a
  279.         ex de,hl
  280. ;hl=from
  281. ;de=to
  282.         ld a,SCRTRACKWID/2
  283.         sub c
  284.         ld c,a
  285. ;c=SCRTRACKWID/2-scrollamount
  286.         ld b,8
  287. scrollleft_ld0
  288.         push bc
  289.         push de
  290.         push hl
  291.         ld b,0
  292.         ldir
  293.         pop hl
  294.         pop de
  295.         pop bc
  296.         inc d
  297.         inc h
  298.         djnz scrollleft_ld0
  299.         ret
  300.  
  301. scrollright
  302. ;hl=linestart
  303. ;c=scroll amount
  304. ;c=1: scrollright_rrd с c=0
  305. ;c=2: scrollright_ld с c=1
  306. ;c=3: scrollright_rrd с c=1
  307.         srl c
  308.         jp c,scrollright_rrd
  309. scrollright_ld
  310. ;hl=linestart
  311. ;c=scroll amount
  312.         ld a,l
  313.         add a,SCRTRACKWID/2-1
  314.         ld l,a
  315.         ld d,h
  316.         sub c
  317.         ld e,a
  318.         ex de,hl
  319. ;hl=from
  320. ;de=to
  321.         ld a,SCRTRACKWID/2
  322.         sub c
  323.         ld c,a
  324. ;c=SCRTRACKWID/2-scrollamount
  325.         ld b,8
  326. scrollright_ld0
  327.         push bc
  328.         push de
  329.         push hl
  330.         ld b,0
  331.         lddr
  332.         pop hl
  333.         pop de
  334.         pop bc
  335.         inc d
  336.         inc h
  337.         djnz scrollright_ld0
  338.         ret
  339.  
  340. scrollleft_rld
  341. ;hl=linestart
  342.         ;ld c,0
  343. ;c=scroll amount
  344.         ld d,h
  345.         ld a,l
  346.         add a,c
  347.         ld e,a
  348.         ex de,hl
  349. ;hl=from
  350. ;de=to
  351.         ld a,SCRTRACKWID/2
  352.         sub c
  353.         ld c,a
  354. ;c=SCRTRACKWID/2-scrollamount
  355.         ld b,8
  356. scrollleft0p
  357.         push bc
  358.         push de
  359.         push hl
  360.         ld b,0
  361.         ld a,l
  362.         cp e
  363.         jr z,scrollleft_noldir
  364.         ldir
  365. scrollleft_noldir
  366.         add hl,bc
  367.         dec hl
  368.         xor a
  369.        dup SCRTRACKWID/2-1
  370.         rld
  371.         dec l
  372.        edup
  373.         rld
  374.         pop hl
  375.         pop de
  376.         pop bc
  377.         inc d
  378.         inc h
  379.         djnz scrollleft0p
  380.         ret
  381.  
  382. scrollright_rrd
  383. ;hl=linestart
  384.         ;ld c,0
  385. ;c=scroll amount
  386.         ld a,l
  387.         add a,SCRTRACKWID/2-1
  388.         ld l,a
  389.         ld d,h
  390.         sub c
  391.         ld e,a
  392.         ex de,hl
  393.         ld a,SCRTRACKWID/2
  394.         sub c
  395.         ld c,a
  396. ;c=SCRTRACKWID/2-scrollamount
  397.         ld b,8
  398. scrollright0p
  399.         push bc
  400.         push de
  401.         push hl
  402.         ld b,0
  403.         ld a,l
  404.         cp e
  405.         jr z,scrollright_nolddr
  406.         lddr
  407. scrollright_nolddr
  408.         or a
  409.         sbc hl,bc
  410.         inc hl
  411.         xor a
  412.         dup SCRTRACKWID/2-1
  413.         rrd
  414.         inc l
  415.         edup
  416.         rrd
  417.         pop hl
  418.         pop de
  419.         pop bc
  420.         inc d
  421.         inc h
  422.         djnz scrollright0p
  423.         ret
  424.  
  425.         align 256
  426. font
  427.         incbin "64qua.fnt"
  428. fnotes
  429.         incbin "fnotes.fnt"
  430. notefont=0x6000
  431.         ;ds 2048
  432. digfont=0x6800
  433.         ;ds 2048
  434.  
  435. ;;;;;;;;;;;;;;;;;;;;;;;;; high level view ;;;;;;;;;;;;;;;;;;;;;;;;
  436. getscrntracks
  437.         ld a,(ntracks)
  438.         ld b,SCRNTRACKS
  439.         cp b
  440.         ret nc
  441.         ld b,a
  442.         ret
  443.  
  444. setneedprtypes
  445.         ld a,55 ;"scf"
  446.         ld (needprtypes),a
  447.         ret
  448. setneedprtracks
  449.         ld a,-1
  450.         ld (oldtoptrack),a
  451.         ret
  452.  
  453. updatescr
  454. ;сейчас виден курсор
  455.  
  456. ;обновляем, если изменился lefttime или toptrack
  457. ;при смене toptrack также перерисовать описатели треков
  458.         call getcurplayxonscreen
  459.         ld (curplayxonscreen),a
  460. oldcurplayxonscreen=$+1
  461. oldcurplayyonscreen=$+2
  462.         ld bc,0
  463.         ;cp c
  464.         ;jr z,updatescr_noplaycur
  465.         ld a,c
  466.         or a
  467.         call nz,prcur
  468. updatescr_noplaycur
  469.  
  470.         call getcurx
  471. tracksmode=$+1
  472.         ld c,0
  473.         dec c
  474.         jr nz,$+5
  475.          ld a,(tracks_curx) ;edit tracks mode
  476.         ld (curxonscreen),a
  477. oldcurxonscreen=$+1
  478. oldcuryonscreen=$+2
  479.         ld bc,0
  480.         ;cp c
  481.         ;jr z,updatescr_nocur
  482.         call prcur
  483. updatescr_nocur
  484.  
  485. ;теперь курсор не виден
  486.         ld a,(toptrack)
  487. oldtoptrack=$+1
  488.         ld c,-1
  489.         ld (oldtoptrack),a
  490.         ld hl,(lefttime)
  491.         ld (curlefttime),hl
  492. oldlefttime=$+1
  493.         ld de,0x8000
  494.         ld (oldlefttime),hl
  495.         cp c
  496.         jp nz,updatescr_scrollupdown
  497.         or a
  498.         sbc hl,de
  499.         jr nz,updatescr_scroll
  500.         jp updatescr_scrollq
  501. updatescr_scrollupdown
  502.         call setneedpralltracks
  503.         call setneedprtypes
  504.         jp updatescr_scroll_noprall
  505.  
  506. updatescr_scroll
  507. ;hl=lefttime-oldlefttime
  508. ;если скролл на 1 символ, то реально скроллим, иначе перепечатываем?
  509.         bit 7,h
  510.         jp nz,updatescr_scroll_right
  511.         ;ld a,l
  512.         ;and h
  513.         ;inc a
  514.         ;jp z,updatescr_scroll_right
  515.         ;ld a,l
  516.         ;dec a
  517.         ;or h
  518.         ;jp nz,updatescr_scroll_prall
  519.        
  520. updatescr_scroll_left
  521.         ld bc,9
  522.         or a
  523.         sbc hl,bc
  524.         jp nc,updatescr_scroll_prall
  525.         add hl,bc
  526.         ld c,l;1
  527. ;c=scroll amount (in chars)
  528.         ld a,c
  529.         ld (scrollleft_Nchars),a
  530.         push bc
  531.         call setscrpg
  532.         pop bc
  533.         ld hl,0x4020+(TRACKX/2);+(SCRTRACKWID/2)-1
  534.         call getscrntracks;ld b,SCRNTRACKS
  535.         ld a,(toptrack)
  536.         ld hx,a;0 ;track
  537. scrollleft0
  538.         push bc
  539.         push hl
  540.         call scrollleft ;scrollleft_rld
  541.         pop hl
  542. ;обновить бар слева
  543.         push hl
  544.         ld d,h
  545.         ld e,l
  546.         dec e
  547.         ld c,0x01
  548.         ld a,(curlefttime)
  549.         sub 8
  550.         ld l,a
  551.         and 7
  552.         call prbar_or_nobar
  553.         call setpgroots
  554. ;допечатать столбик справа и его бар
  555.         call prtrack_gettype ;uses hx
  556.         pop hl
  557.         push hl
  558.         ld d,h
  559.         ld a,l
  560.         add a,SCRTRACKWID/2-1
  561.         ld e,a
  562. curlefttime=$+1
  563.         ld hl,0;(curlefttime)
  564.         ld bc,SCRTRACKWID-1
  565.         add hl,bc
  566. scrollleft_Nchars=$+2
  567.         ld bc,1*256+0xf0
  568. ;de=scr
  569. ;hx=track
  570. ;c=0x0f/0xf0
  571. ;b=SCRTRACKWID
  572. ;hl=time
  573.         push bc
  574.         push de
  575.         push bc
  576.         ld a,c
  577.         dec b
  578.         jr z,scrollleft_beforeprtrack0q
  579. scrollleft_beforeprtrack0
  580.         dec hl
  581.         rlca
  582.         rlca
  583.         rlca
  584.         rlca
  585.         jr c,$+3
  586.         dec e
  587.         djnz scrollleft_beforeprtrack0
  588. scrollleft_beforeprtrack0q
  589.         pop bc
  590.         ld c,a
  591.         call prtrack_Nchars
  592.         pop de
  593.         call setscrpg
  594.         ld a,(curlefttime)
  595.         add a,SCRTRACKWID-8
  596.         ld l,a
  597.         pop bc ;ld b,1
  598.         ld c,0x01
  599. scrollleft_prbars0
  600.         push de
  601.         ld a,l
  602.         and 7
  603.         call prbar_or_nobar
  604.         pop de
  605.         dec l
  606.         ld a,c
  607.         rlca
  608.         rlca
  609.         rlca
  610.         rlca
  611.         ld c,a
  612.         jr nc,$+3
  613.         dec e
  614.         djnz scrollleft_prbars0
  615.         pop hl
  616.         call nextchrline_hl
  617.         pop bc
  618.         inc hx ;track
  619.         dec b
  620.         jp nz,scrollleft0
  621.         call setpgroots
  622.         jp updatescr_scroll_noprall
  623.  
  624. updatescr_scroll_right
  625.         xor a
  626.         sub l
  627.         ld l,a
  628.         sbc a,h
  629.         sub l
  630.         ld h,a ;hl=-hl
  631.         ld bc,9
  632.         or a
  633.         sbc hl,bc
  634.         jp nc,updatescr_scroll_prall
  635.         add hl,bc
  636.         ld c,l;1
  637. ;c=scroll amount (in chars)
  638.         ld a,c
  639.         ld (scrollright_Nchars),a
  640.         push bc
  641.         call setscrpg
  642.         pop bc
  643.         ld hl,0x4020+(TRACKX/2)
  644.         call getscrntracks;ld b,SCRNTRACKS
  645.         ld a,(toptrack)
  646.         ld hx,a;0 ;track
  647. scrollright0
  648.         push bc
  649.         push hl
  650.         call scrollright ;scrollright_rrd
  651.         pop hl
  652. ;обновить бар слева (вне поля скролла)
  653.         push hl
  654.         ld d,h
  655.         ld e,l
  656.         push de
  657.         dec e
  658.         ld c,0x01
  659.         ld a,(curlefttime)
  660.         sub 8
  661.         ld l,a
  662.         and 7
  663.         call prbar_or_nobar
  664.         call setpgroots
  665. ;допечатать столбик слева и его бар
  666.         call prtrack_gettype ;uses hx
  667.         pop de
  668.         ld hl,(curlefttime)
  669. scrollright_Nchars=$+2
  670.         ld bc,1*256+0x0f
  671. ;de=scr
  672. ;hx=track
  673. ;c=0x0f/0xf0
  674. ;b=SCRTRACKWID
  675. ;hl=time
  676.         push bc
  677.         push de
  678.         call prtrack_Nchars
  679.         pop de
  680.         call setscrpg
  681.         ld a,(curlefttime)
  682.         add a,1-8
  683.         ld l,a
  684.         pop bc;ld b,1
  685.         ld c,0x10
  686. scrollright_prbars0
  687.         push de
  688.         ld a,l
  689.         and 7
  690.         call prbar_or_nobar
  691.         pop de
  692.         inc l
  693.         ld a,c
  694.         rlca
  695.         rlca
  696.         rlca
  697.         rlca
  698.         ld c,a
  699.         jr c,$+3
  700.         inc e
  701.         djnz scrollright_prbars0
  702.        
  703.         pop hl
  704.         call nextchrline_hl
  705.         pop bc
  706.         inc hx ;track
  707.         dec b
  708.         jp nz,scrollright0
  709.         call setpgroots
  710.         jp updatescr_scroll_noprall
  711.  
  712. updatescr_scroll_prall
  713.         call setneedpralltracks
  714. updatescr_scroll_noprall
  715. ;показывать время только при скролле (TODO по одной цифре)
  716.         ld de,0x4000+(TRACKX/2)
  717.         ld b,SCRTRACKWID
  718.         ld c,0x0f
  719.         ld hl,(curlefttime)
  720.         inc hl
  721.         inc hl
  722. updatescr_time0
  723. ;печатаем только на барах (32), 2 цифры слева и 2 справа
  724.         ld a,l
  725.         and 31
  726.         cp 4
  727.         ld a,'.'
  728.         jr nc,updatescr_time0_skip
  729.         ld a,l
  730.         and 0xfc
  731.         bit 1,l
  732.         jr nz,$+3
  733.          ld a,h
  734.         bit 0,l
  735.         jr nz,$+6
  736.          rra
  737.          rra
  738.          rra
  739.          rra
  740.         or 0xf0
  741.         daa
  742.         add a,0xa0
  743.         adc a,0x40
  744. updatescr_time0_skip
  745.         push hl
  746.         call prchar
  747.         pop hl
  748.         inc hl
  749.         inc c
  750.         djnz updatescr_time0
  751.  
  752. updatescr_scrollq
  753.         ;xor a
  754.         ;ld (untr_needredraw),a
  755.         ;ld de,0x4001
  756.         ;ld c,0x0f
  757.         ;ld hl,ttypes
  758. needprtypes=$
  759.         scf
  760.         call c,prtypes
  761.         ld a,55+128 ;"or a"
  762.         ld (needprtypes),a
  763.  
  764. ;needpralltracks=$
  765. ;        scf
  766.         ;jr nc,updatescr_prcurtrack
  767. ;обновлять только треки, которые изменились (обновление одного не прокатит при асинхронном рисовании!!!)
  768.         ld de,0x4020+(TRACKX/2)
  769.         call getscrntracks;ld b,SCRNTRACKS
  770.         ld a,(toptrack)
  771.         ld hx,a;0 ;track
  772. updatescr_tracks0
  773.         push bc
  774.         push de
  775.         ld c,0x0f
  776.         ld b,SCRTRACKWID
  777.         call prtrack
  778.         pop de
  779.         call nextchrline_de
  780.         pop bc
  781.         inc hx ;track
  782.         djnz updatescr_tracks0
  783. ;        ld a,55+128 ;"or a"
  784. ;        ld (needpralltracks),a
  785. ;        jr updatescr_prcurtrackq
  786. ;updatescr_prcurtrack
  787. ;        ld a,(curtrack)
  788. ;        ld hx,a
  789. ;        ld c,0x0f
  790. ;        call prtrack
  791. ;updatescr_prcurtrackq
  792.  
  793.         ld hl,(FreeMem_value)
  794.         ld de,0x4000
  795.         ld c,0x0f
  796.         push hl
  797.         ld a,h
  798.         call prhex
  799.         pop hl
  800.         ld a,l
  801.         call prhex
  802.  
  803. ;draw cursors
  804. curplayxonscreen=$+1
  805.         ld a,0
  806.         ld (oldcurplayxonscreen),a
  807.         ld c,a
  808.         xor a ;call getcury
  809.         ld (oldcurplayyonscreen),a
  810.         ld b,a
  811.         ld a,c
  812.         or a
  813.         call nz,prcur
  814.  
  815. curxonscreen=$+1
  816.         ld a,0
  817.         ld (oldcurxonscreen),a
  818.         ld c,a
  819.         call getcury
  820.         ld (oldcuryonscreen),a
  821.         ld b,a
  822.         call prcur
  823.  
  824.         ret
  825. prhex
  826.         call prhexdig
  827. prhexdig
  828.         rrca
  829.         rrca
  830.         rrca
  831.         rrca
  832.         push af
  833.         or 0xf0
  834.         daa
  835.         add a,0xa0
  836.         adc a,0x40
  837.         call prchar
  838.         pop af
  839.         ret
  840.  
  841. prtypes
  842.         ld hl,ttypes
  843.         ld a,(toptrack)
  844.         add a,a
  845.         add a,a
  846.         add a,a
  847.         ld e,a
  848.         ld d,0
  849.         add hl,de
  850.         ld de,0x4020
  851.         call getscrntracks;ld b,SCRNTRACKS
  852. prtypes0
  853.         push bc
  854.         push de
  855.         ld bc,0x070f
  856. prtypes0new0
  857.         ld a,(hl)
  858.         push hl
  859.         call prchardig
  860.         pop hl
  861.         inc hl
  862.         djnz prtypes0new0
  863.         inc hl
  864.         pop de
  865.         call nextchrline_de
  866.         pop bc
  867.         djnz prtypes0
  868.         ret
  869.  
  870. prtrack_gettype
  871.         ld a,hx
  872.         call gettracktype
  873.         ld hl,prcharnote
  874.         cp _t;CHNTYPE_NOTES
  875.         jr z,$+5
  876.          ld hl,prchardig
  877.         ld (prtrack_prproc),hl
  878.         ret
  879.  
  880. prtrack_Nchars
  881. ;(after prtrack_gettype)
  882. ;de=scr
  883. ;hx=track
  884. ;c=0x0f/0xf0
  885. ;b=SCRTRACKWID
  886. ;hl=time
  887. prtrack0
  888.         push hl
  889.         push de
  890.         ld a,hx ;track
  891.         call tracktime_totrackpartindex ;out: a=track, hl=index, ly=part
  892.         call peektrackpartindex
  893.         pop de
  894. prtrack_prproc=$+1
  895.         call prcharnote
  896.         pop hl
  897.          inc hl
  898.         djnz prtrack0
  899.         ret
  900.  
  901. prtrack
  902. ;de=scr
  903. ;hx=track
  904. ;c=0x0f/0xf0
  905. ;b=SCRTRACKWID
  906.         push de
  907.         ld a,hx
  908.         call amulchnsstep_tohl
  909.         ld de,chns-2;tracks
  910.         add hl,de
  911.         pop de
  912.         ld a,(hl)
  913.         or a
  914.         ret p ;трек не обновился
  915.          res 7,(hl)
  916.         call prtrack_gettype
  917.  
  918.         ld hl,(curlefttime)
  919.         push de
  920.         call prtrack_Nchars
  921.         pop de
  922.        
  923.         call setscrpg
  924.  
  925.         ld hl,(curlefttime)
  926.         ld c,0x01
  927.         dec e
  928.         push hl
  929.         ld a,l
  930.         sub 8
  931.         ld l,a
  932.         and 7
  933.         push de
  934.         call prbar_or_nobar
  935.         pop de
  936.         pop hl
  937.         inc e
  938.         ld a,l
  939.         cpl
  940.         and 7 ;если l&7=0, то прибавляем 3... если 7, то прибавляем 0
  941.         rra
  942.         add a,e
  943.         ld e,a
  944.         bit 0,l
  945.         jr z,$+4
  946.          ld c,0x10        
  947.         ld b,SCRTRACKWID/8
  948. prtrack_bars0
  949.         push de
  950.         call prbar
  951.         pop de
  952.         ld a,e
  953.         add a,4
  954.         ld e,a
  955.         djnz prtrack_bars0
  956.  
  957.         call setpgroots
  958.         ret
  959.  
  960.         macro BARPIXEL
  961.         ld a,(de)
  962.         or c
  963.         ld (de),a
  964.         endm
  965.        
  966.         macro NOBARPIXEL
  967.         ld a,(de)
  968.         cpl
  969.         or c
  970.         cpl
  971.         ld (de),a
  972.         endm
  973.        
  974. nobar
  975. ;c=0x10/0x01
  976.         dup 7
  977.         NOBARPIXEL
  978.         inc d
  979.         edup
  980.         NOBARPIXEL
  981.         ret
  982.  
  983. prbar_or_nobar
  984.         jr nz,nobar
  985. prbar
  986. ;l=lefttime
  987.         ld a,l
  988.         add a,8
  989.         ld l,a
  990.         and 3*8
  991.         jr z,prbar_lined
  992. prbar_dotted
  993. ;c=0x10/0x01
  994.         BARPIXEL
  995.         inc d
  996.         NOBARPIXEL
  997.         inc d
  998.         BARPIXEL
  999.         inc d
  1000.         NOBARPIXEL
  1001.         inc d
  1002.         BARPIXEL
  1003.         inc d
  1004.         NOBARPIXEL
  1005.         inc d
  1006.         BARPIXEL
  1007.         inc d
  1008.         NOBARPIXEL
  1009.         ret
  1010.  
  1011. prbar_lined
  1012.         ld a,l
  1013.         and 3*16
  1014.         jr z,prbar_solid
  1015. ;c=0x10/0x01
  1016.         BARPIXEL
  1017.         inc d
  1018.         BARPIXEL
  1019.         inc d
  1020.         BARPIXEL
  1021.         inc d
  1022.         NOBARPIXEL
  1023.         inc d
  1024.         BARPIXEL
  1025.         inc d
  1026.         BARPIXEL
  1027.         inc d
  1028.         BARPIXEL
  1029.         inc d
  1030.         NOBARPIXEL
  1031.         ret
  1032.  
  1033. prbar_solid
  1034. ;c=0x10/0x01
  1035.         dup 7
  1036.         BARPIXEL
  1037.         inc d
  1038.         edup
  1039.         BARPIXEL
  1040.         ret
  1041.  
  1042. ;========================== init =====================
  1043. gennotefont
  1044.         ld hl,notefont
  1045.         ld de,notefont+1
  1046.         ld bc,2*2048-1 ;digfont тоже
  1047.         ld (hl),l;0
  1048.         ldir
  1049.        
  1050.         ld hx,font/256
  1051.         ld de,digfont+1
  1052.         ld hl,tdigfont
  1053.         ld bc,62*256+8
  1054.         call gennotefont120
  1055.        
  1056.         ld hl,tpausefont
  1057.         ld de,notefont+(NOTE_GLISS&0xff)
  1058.         ld bc,2*256+8
  1059.         ld hx,font/256
  1060.         call gennotefont120
  1061.  
  1062.         ld e,NOTE_LOWEST
  1063.         ld c,7
  1064.         ld hx,0 ;ld hx,font/256
  1065.         ld d,notefont/256+1
  1066.         call gennotefont12768 ;ноты сдвинуты вниз
  1067.         ld c,8
  1068.         ld hx,0 ;ld hx,font/256
  1069.         ld d,notefont/256
  1070.         call gennotefont12768
  1071.         ld c,7
  1072.         ld hx,1 ;ld hx,font/256+1
  1073.         ld d,notefont/256
  1074.         ;call gennotefont12 ;ноты сдвинуты вверх
  1075.         ;ret
  1076.  
  1077. gennotefont12768
  1078. ;c=nlines
  1079. ;hx=font/256+
  1080. ;d=notefont/256+
  1081.         ld hl,tnotefont
  1082.         ld b,12
  1083. gennotefont127680
  1084.         push bc
  1085.         push hl
  1086.         ;ld l,(hl)
  1087.         ;ld a,hx
  1088.         ;ld h,a;font/256
  1089.         ;jr $
  1090.         ld l,(hl)
  1091.         ld h,0
  1092.         add hl,hl
  1093.         add hl,hl
  1094.         add hl,hl
  1095.         ld a,h
  1096.         add a,fnotes/256-1
  1097.         ld h,a
  1098.         ld a,l
  1099.         add a,hx
  1100.         ld l,a
  1101.          dec hl
  1102.         push de
  1103.         ld b,c
  1104. gennotefont127681
  1105.         ld a,(hl)
  1106.         inc hl
  1107.         ld (de),a
  1108.         inc d
  1109.         djnz gennotefont127681
  1110.         pop de
  1111.         pop hl
  1112.         pop bc
  1113.         inc hl
  1114.         inc e ;next symbol in notefont
  1115.         djnz gennotefont127680
  1116.         ret
  1117.  
  1118. gennotefont12
  1119. ;c=nlines
  1120. ;hx=font/256+
  1121. ;d=notefont/256+
  1122.         ld hl,tnotefont
  1123.         ld b,12
  1124. gennotefont120
  1125.         push bc
  1126.         push hl
  1127.         ld l,(hl)
  1128.         ld a,hx
  1129.         ld h,a;font/256
  1130.         push de
  1131.         ld b,c
  1132. gennotefont121
  1133.         ld a,(hl)
  1134.         inc h
  1135.         ld (de),a
  1136.         inc d
  1137.         djnz gennotefont121
  1138.         pop de
  1139.         pop hl
  1140.         pop bc
  1141.         inc hl
  1142.         inc e ;next symbol in notefont
  1143.         djnz gennotefont120
  1144.         ret
  1145.  
  1146. tpausefont
  1147.         db "-|"
  1148. tnotefont
  1149. ;в шрифте начиная с кода 1
  1150.         db "CcDdEFfGgAaB"
  1151. tdigfont
  1152. ;в шрифте начиная с кода 1
  1153.         db "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  1154.