?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.         module pt3player
  2. ;TODO begin&end Єюы№ъю т юфэюь ърэрых
  3.  
  4. statuschip0=%11111000
  5. statuschip1=%11111001
  6.  
  7.         MACRO WaitStatus
  8.        ;OUT (C),D ;statuschip0/1
  9.         IN F,(C)
  10.         JP M,$-2
  11.         ENDM
  12.  
  13. ;tfmplayer
  14. ;        LD HL,MDLADDR
  15. ;        JR tfmini
  16. ;        JP tfm
  17. INIT
  18. tfmini
  19.         EXD
  20.         LD HL,9
  21.         ADD HL,DE
  22.         LD A,(HL)
  23.         INC HL
  24.         CP 50
  25.         LD A,201
  26.         JR Z,$+4
  27.         LD A,62
  28.         LD (tfm60hz),A
  29.         EXX
  30.         LD HL,tfminitab
  31.         LD BC,#06FD
  32. tfmini0
  33.         LD DE,tfminiHL
  34.         LDI
  35.         LDI
  36.         EXX
  37.         LD A,(HL)
  38.         INC HL
  39.         PUSH HL
  40.         LD H,(HL)
  41.         LD L,A
  42.         ADD HL,DE
  43. tfminiHL=$+1
  44.         LD (0),HL
  45.         POP HL
  46.         INC HL
  47.         EXX
  48.         DJNZ tfmini0
  49.         XOR A
  50.         LD (blkcntA),A
  51.         LD (blkcntB),A
  52.         LD (blkcntC),A
  53.         LD (blkcntD),A
  54.         LD (blkcntE),A
  55.         LD (blkcntF),A
  56.         DEC A
  57.         LD (skipA),A
  58.         LD (skipB),A
  59.         LD (skipC),A
  60.         LD (skipD),A
  61.         LD (skipE),A
  62.         LD (skipF),A
  63. MUTE
  64. tfmshut
  65.         LD DE,#FFBF
  66.         LD C,#FD
  67.         CALL selChip0
  68.         CALL tfminiPP
  69.         CALL selChip1
  70. tfminiPP
  71.         XOR A
  72.         EXA
  73.         LD A,#0D ;SSG
  74. regClrS CALL WRITEREG
  75.         DEC A
  76.         JP P,regClrS
  77.         LD A,#B3
  78. regClrZ CP #4F
  79.         JR NZ,$+4
  80.         LD A,#3F ;skip TL, ўЄюс√ эх с√ыю ∙хыўър
  81.         CALL WRITEREG
  82.         DEC A
  83.         CP #30
  84.         JR NC,regClrZ
  85.        LD A,#F8 ;ўшёЄ√щ Єюэ
  86.        EXA
  87.        LD A,#07 ;SSG MASK
  88.        CALL WRITEREG
  89.         LD A,#0F ;max speed
  90.         EXA
  91.         LD A,#8F ;RR
  92. regClrR CALL WRITEREG
  93.         DEC A
  94.         JP M,regClrR
  95.       ; LD A,#F0
  96.       ; EXA
  97.       ; LD A,#28 ;key
  98.       ; CALL WRITEREG ;key on A
  99.       ; EXA
  100.       ; INC A ;#F1
  101.       ; EXA
  102.       ; CALL WRITEREG ;key on B
  103.       ; EXA
  104.       ; INC A ;#F2
  105.       ; EXA
  106.       ; CALL WRITEREG ;key on C
  107.         XOR A
  108.         EXA
  109.         LD A,#28 ;key
  110.         CALL WRITEREG ;key off A
  111.         EXA
  112.         INC A ;#01
  113.         EXA
  114.         CALL WRITEREG ;key off B
  115.         EXA
  116.         INC A ;#02
  117.         EXA
  118.         CALL WRITEREG ;key off C
  119.         DEC A ;#27 ;channel 3 mode
  120.         CALL WRITEREG ;normal mode
  121.  
  122.         LD A,#7F ;Єш°шэр
  123.         EXA
  124.         LD A,#4F ;TL
  125. regClrT CALL WRITEREG
  126.         DEC A
  127.         CP #40
  128.         JR NC,regClrT
  129.        ;LD A,#2F      ;ы■сюх
  130.        ;EXA
  131.         LD A,#2F
  132.         CALL WRITEREG ;схч ¤Єюую ўрёЄюЄр ыхтр 
  133.        ;LD A,#2D      ;ы■сюх
  134.        ;EXA
  135.         LD A,#2D
  136.        ;схч ¤Єюую ўрёЄюЄр ыхтр 
  137. WRITEREG
  138. ;A=REG
  139. ;A'=VALUE
  140.         LD B,D
  141.         WaitStatus
  142.         OUT (C),A ;reg
  143.         EXA
  144.         WaitStatus
  145.         LD B,E
  146.         OUT (C),A ;value
  147.         EXA
  148.         RET
  149. tfminitab
  150.         DW addrA
  151.         DW addrB
  152.         DW addrC
  153.         DW addrD
  154.         DW addrE
  155.         DW addrF
  156. selChip0
  157.         LD A,statuschip0
  158.         LD B,D
  159.         OUT (C),A
  160.         RET
  161.  
  162. selChip1
  163.         LD A,statuschip1
  164.         LD B,D
  165.         OUT (C),A
  166.         RET
  167.  
  168. PLAY
  169. tfm
  170.         LD DE,#FFBF
  171.         LD C,#FD
  172.         LD B,D
  173.         LD A,statuschip0
  174.         OUT (C),A
  175.         CALL tfmA
  176.         CALL tfmB
  177.         CALL tfmC
  178.         LD B,D
  179.         LD A,statuschip1
  180.         OUT (C),A
  181.         CALL tfmD
  182.         CALL tfmE
  183.         CALL tfmF
  184. tfm60hz
  185. cnt60=$+1
  186.         LD A,6
  187.         DEC A
  188.         JR NZ,$+4
  189.         LD A,6
  190.         LD (cnt60),A
  191.         JR Z,tfm
  192.         RET
  193.  
  194.         MACRO TestKeyOff chnnum
  195.         JP P,.noffX
  196.         EXA
  197.         LD B,D ;%11111xxx
  198.         LD A,#28
  199.         WaitStatus
  200.         OUT (C),A
  201.        IF chnnum==0
  202.         XOR A
  203.        ELSE
  204.         LD A,chnnum
  205.        ENDIF
  206.         WaitStatus
  207.         LD B,E ;#BF
  208.         OUT (C),A
  209.         EXA
  210. .noffX
  211.         ENDM
  212.  
  213.         MACRO TestFreq chnnum,chnhigh,chnlow
  214.         RRA
  215.         JR NC,.nofrqX
  216.         EXA
  217.         LD B,D ;%11111xxx
  218.         LD A,#A4+chnnum
  219.         WaitStatus
  220.         OUT (C),A
  221.        LD A,(HL)
  222.        INC HL
  223.        LD (chnhigh),A
  224.         WaitStatus
  225.         LD B,E ;#BF
  226.        OUT (C),A
  227.         LD B,D ;%11111xxx
  228.         LD A,#A0+chnnum
  229.         WaitStatus
  230.         OUT (C),A
  231.        LD A,(HL)
  232.        INC HL
  233.        LD (chnlow),A
  234.         WaitStatus
  235.         LD B,E ;#BF
  236.        OUT (C),A
  237.         EXA
  238. .nofrqX
  239.         ENDM
  240.  
  241.         MACRO TestOutRegs
  242.         AND #1F
  243.         CALL NZ,regsX
  244.         ENDM
  245.  
  246.         MACRO KeyOn chnnum
  247.         LD B,D ;%11111xxx
  248.         LD A,#28
  249.         WaitStatus
  250.         OUT (C),A
  251.         LD A,#F0+chnnum
  252.         WaitStatus
  253.         LD B,E ;#BF
  254.         OUT (C),A
  255.         ENDM
  256.  
  257. ;%11111111,-disp8 = фрээ√х ърфЁр ыхцрЄ яю ёьх∙хэш■ -disp8
  258. ;%111ttttt = skip 32..2 frames
  259. ;%110ddddd = slide d-16
  260. ;%11010000,frames,-disp16 = repeat block (skips = 1 frame)
  261. ;%10111111,-disp16 = фрээ√х ърфЁр ыхцрЄ яю ёьх∙хэш■ -disp16
  262. ;%10NNNNNf = keyoff,[freq,]0..30 regs, keyon
  263. ;%01111111 = end
  264. ;%01111110 = begin
  265. ;%01NNNNNf = keyoff,[freq,]0..31 regs
  266. ;%00NNNNNf =        [freq,]0..30 regs
  267. bb=%01111110
  268. be=%01111111
  269.  
  270. ////////////////////////////           
  271. blockA
  272.         LD A,(HL) ;N frames
  273.                   ;1 now, N-1 later
  274.                   ;skip command is used as 1 frame
  275.         INC HL
  276.         LD (blkcntA),A
  277.         LD B,(HL)
  278.         INC HL
  279.         LD C,(HL) ;disp
  280.         INC HL
  281.         LD (blkretaddrA),HL
  282.         ADD HL,BC
  283.         LD C,#FD
  284.         JP tfmframeA
  285. OLDfarA
  286.         LD B,(HL)
  287.         INC HL
  288. OLDnearA
  289.         LD C,(HL)
  290.         INC HL
  291.         PUSH HL
  292.         ADD HL,BC
  293.         LD C,#FD
  294.         CALL tfmframeA
  295.         POP HL
  296.         LD (addrA),HL
  297.         RET  
  298. HLskiperA
  299.         JR Z,OLDfarA
  300.         CP %11100000
  301.         JR C,slideA
  302.         LD B,A
  303.         CP #FF
  304.         JR Z,OLDnearA
  305.         LD (addrA),HL
  306. skiperA LD (skipA),A
  307.         RET  
  308. slideA
  309.        ;A=-64..-33
  310.         ADD A,48
  311.        ;A=-16..15
  312.         JR Z,blockA
  313. tfmlowA=$+1
  314.         ADD A,0
  315.         LD (tfmlowA),A
  316.         LD (addrA),HL
  317.         LD B,D ;%11111xxx
  318. tfmhighA=$+2
  319.         LD HL,#A4+0
  320.         WaitStatus
  321.         OUT (C),L
  322.         WaitStatus
  323.         LD B,E ;#BF
  324.        OUT (C),H
  325.         LD B,D ;%11111xxx
  326.         LD L,#A0+0
  327.         WaitStatus
  328.         OUT (C),L
  329.         WaitStatus
  330.         LD B,E ;#BF
  331.        OUT (C),A
  332.         RET  
  333.  
  334. beginA
  335.         LD (loopaddrA),HL
  336.         JP tfmframeA
  337. endA
  338. loopaddrA=$+1
  339.         LD HL,0
  340.         JP tfmframeA
  341. tfmA
  342. skipA=$+1
  343.         LD A,-1
  344.         INC A
  345.         JR NZ,skiperA
  346. addrA=$+1
  347.         LD HL,0
  348. blkcntA=$+1
  349.         OR 0
  350.         JR Z,tfmframeA
  351.         DEC A
  352.         LD (blkcntA),A
  353.         JR NZ,tfmframeA
  354. blkretaddrA=$+1
  355.         LD HL,0
  356. tfmframeA
  357.         LD A,(HL)
  358.         INC HL
  359.         CP bb
  360.         JR Z,beginA
  361.         CP be
  362.         JR Z,endA
  363.         CP E ;#BF
  364.         JR NC,HLskiperA
  365.         TestKeyOff 0
  366.         OR A
  367.         PUSH AF
  368.         TestFreq 0,tfmhighA,tfmlowA
  369.         TestOutRegs
  370.         LD (addrA),HL
  371.         POP AF
  372.         RET P
  373.         KeyOn 0
  374.         RET  
  375.  
  376. ////////////////////////////           
  377. blockB
  378.         LD A,(HL) ;N frames
  379.                   ;1 now, N-1 later
  380.                   ;skip command is used as 1 frame
  381.         INC HL
  382.         LD (blkcntB),A
  383.         LD B,(HL)
  384.         INC HL
  385.         LD C,(HL) ;disp
  386.         INC HL
  387.         LD (blkretaddrB),HL
  388.         ADD HL,BC
  389.         LD C,#FD
  390.         JP tfmframeB
  391. OLDfarB
  392.         LD B,(HL)
  393.         INC HL
  394. OLDnearB
  395.         LD C,(HL)
  396.         INC HL
  397.         PUSH HL
  398.         ADD HL,BC
  399.         LD C,#FD
  400.         CALL tfmframeB
  401.         POP HL
  402.         LD (addrB),HL
  403.         RET  
  404. HLskiperB
  405.         JR Z,OLDfarB
  406.         CP %11100000
  407.         JR C,slideB
  408.         LD B,A
  409.         CP #FF
  410.         JR Z,OLDnearB
  411.         LD (addrB),HL
  412. skiperB LD (skipB),A
  413.         RET  
  414. slideB
  415.        ;A=-64..-33
  416.         ADD A,48
  417.        ;A=-16..15
  418.         JR Z,blockB
  419. tfmlowB=$+1
  420.         ADD A,0
  421.         LD (tfmlowB),A
  422.         LD (addrB),HL
  423.         LD B,D ;%11111xxx
  424. tfmhighB=$+2
  425.         LD HL,#A4+1
  426.         WaitStatus
  427.         OUT (C),L
  428.         WaitStatus
  429.         LD B,E ;#BF
  430.        OUT (C),H
  431.         LD B,D ;%11111xxx
  432.         LD L,#A0+1
  433.         WaitStatus
  434.         OUT (C),L
  435.         WaitStatus
  436.         LD B,E ;#BF
  437.        OUT (C),A
  438.         RET  
  439.  
  440. beginB
  441.         LD (loopaddrB),HL
  442.         JP tfmframeB
  443. endB
  444. loopaddrB=$+1
  445.         LD HL,0
  446.         JP tfmframeB
  447. tfmB
  448. skipB=$+1
  449.         LD A,-1
  450.         INC A
  451.         JR NZ,skiperB
  452. addrB=$+1
  453.         LD HL,0
  454. blkcntB=$+1
  455.         OR 0
  456.         JR Z,tfmframeB
  457.         DEC A
  458.         LD (blkcntB),A
  459.         JR NZ,tfmframeB
  460. blkretaddrB=$+1
  461.         LD HL,0
  462. tfmframeB
  463.         LD A,(HL)
  464.         INC HL
  465.         CP bb
  466.         JR Z,beginB
  467.         CP be
  468.         JR Z,endB
  469.         CP E ;#BF
  470.         JR NC,HLskiperB
  471.         TestKeyOff 1
  472.         OR A
  473.         PUSH AF
  474.         TestFreq 1,tfmhighB,tfmlowB
  475.         TestOutRegs
  476.         LD (addrB),HL
  477.         POP AF
  478.         RET P
  479.         KeyOn 1
  480.         RET  
  481.  
  482. ////////////////////////////           
  483. blockC
  484.         LD A,(HL) ;N frames
  485.                   ;1 now, N-1 later
  486.                   ;skip command is used as 1 frame
  487.         INC HL
  488.         LD (blkcntC),A
  489.         LD B,(HL)
  490.         INC HL
  491.         LD C,(HL) ;disp
  492.         INC HL
  493.         LD (blkretaddrC),HL
  494.         ADD HL,BC
  495.         LD C,#FD
  496.         JP tfmframeC
  497. OLDfarC
  498.         LD B,(HL)
  499.         INC HL
  500. OLDnearC
  501.         LD C,(HL)
  502.         INC HL
  503.         PUSH HL
  504.         ADD HL,BC
  505.         LD C,#FD
  506.         CALL tfmframeC
  507.         POP HL
  508.         LD (addrC),HL
  509.         RET  
  510. HLskiperC
  511.         JR Z,OLDfarC
  512.         CP %11100000
  513.         JR C,slideC
  514.         LD B,A
  515.         CP #FF
  516.         JR Z,OLDnearC
  517.         LD (addrC),HL
  518. skiperC LD (skipC),A
  519.         RET  
  520. slideC
  521.        ;A=-64..-33
  522.         ADD A,48
  523.        ;A=-16..15
  524.         JR Z,blockC
  525. tfmlowC=$+1
  526.         ADD A,0
  527.         LD (tfmlowC),A
  528.         LD (addrC),HL
  529.         LD B,D ;%11111xxx
  530. tfmhighC=$+2
  531.         LD HL,#A4+2
  532.         WaitStatus
  533.         OUT (C),L
  534.         WaitStatus
  535.         LD B,E ;#BF
  536.        OUT (C),H
  537.         LD B,D ;%11111xxx
  538.         LD L,#A0+2
  539.         WaitStatus
  540.         OUT (C),L
  541.         WaitStatus
  542.         LD B,E ;#BF
  543.        OUT (C),A
  544.         RET  
  545.  
  546. beginC
  547.         LD (loopaddrC),HL
  548.         JP tfmframeC
  549. endC
  550. loopaddrC=$+1
  551.         LD HL,0
  552.         JP tfmframeC
  553. tfmC
  554. skipC=$+1
  555.         LD A,-1
  556.         INC A
  557.         JR NZ,skiperC
  558. addrC=$+1
  559.         LD HL,0
  560. blkcntC=$+1
  561.         OR 0
  562.         JR Z,tfmframeC
  563.         DEC A
  564.         LD (blkcntC),A
  565.         JR NZ,tfmframeC
  566. blkretaddrC=$+1
  567.         LD HL,0
  568. tfmframeC
  569.         LD A,(HL)
  570.         INC HL
  571.         CP bb
  572.         JR Z,beginC
  573.         CP be
  574.         JR Z,endC
  575.         CP E ;#BF
  576.         JR NC,HLskiperC
  577.         TestKeyOff 2
  578.         OR A
  579.         PUSH AF
  580.         TestFreq 2,tfmhighC,tfmlowC
  581.         TestOutRegs
  582.         LD (addrC),HL
  583.         POP AF
  584.         RET P
  585.         KeyOn 2
  586.         RET  
  587.  
  588. ////////////////////////////           
  589. blockD
  590.         LD A,(HL) ;N frames
  591.                   ;1 now, N-1 later
  592.                   ;skip command is used as 1 frame
  593.         INC HL
  594.         LD (blkcntD),A
  595.         LD B,(HL)
  596.         INC HL
  597.         LD C,(HL) ;disp
  598.         INC HL
  599.         LD (blkretaddrD),HL
  600.         ADD HL,BC
  601.         LD C,#FD
  602.         JP tfmframeD
  603. OLDfarD
  604.         LD B,(HL)
  605.         INC HL
  606. OLDnearD
  607.         LD C,(HL)
  608.         INC HL
  609.         PUSH HL
  610.         ADD HL,BC
  611.         LD C,#FD
  612.         CALL tfmframeD
  613.         POP HL
  614.         LD (addrD),HL
  615.         RET  
  616. HLskiperD
  617.         JR Z,OLDfarD
  618.         CP %11100000
  619.         JR C,slideD
  620.         LD B,A
  621.         CP #FF
  622.         JR Z,OLDnearD
  623.         LD (addrD),HL
  624. skiperD LD (skipD),A
  625.         RET  
  626. slideD
  627.        ;A=-64..-33
  628.         ADD A,48
  629.        ;A=-16..15
  630.         JR Z,blockD
  631. tfmlowD=$+1
  632.         ADD A,0
  633.         LD (tfmlowD),A
  634.         LD (addrD),HL
  635.         LD B,D ;%11111xxx
  636. tfmhighD=$+2
  637.         LD HL,#A4+0
  638.         WaitStatus
  639.         OUT (C),L
  640.         WaitStatus
  641.         LD B,E ;#BF
  642.        OUT (C),H
  643.         LD B,D ;%11111xxx
  644.         LD L,#A0+0
  645.         WaitStatus
  646.         OUT (C),L
  647.         WaitStatus
  648.         LD B,E ;#BF
  649.        OUT (C),A
  650.         RET  
  651.  
  652. beginD
  653.         LD (loopaddrD),HL
  654.         JP tfmframeD
  655. endD
  656. loopaddrD=$+1
  657.         LD HL,0
  658.         JP tfmframeD
  659. tfmD
  660. skipD=$+1
  661.         LD A,-1
  662.         INC A
  663.         JR NZ,skiperD
  664. addrD=$+1
  665.         LD HL,0
  666. blkcntD=$+1
  667.         OR 0
  668.         JR Z,tfmframeD
  669.         DEC A
  670.         LD (blkcntD),A
  671.         JR NZ,tfmframeD
  672. blkretaddrD=$+1
  673.         LD HL,0
  674. tfmframeD
  675.         LD A,(HL)
  676.         INC HL
  677.         CP bb
  678.         JR Z,beginD
  679.         CP be
  680.         JR Z,endD
  681.         CP E ;#BF
  682.         JR NC,HLskiperD
  683.         TestKeyOff 0
  684.         OR A
  685.         PUSH AF
  686.         TestFreq 0,tfmhighD,tfmlowD
  687.         TestOutRegs
  688.         LD (addrD),HL
  689.         POP AF
  690.         RET P
  691.         KeyOn 0
  692.         RET  
  693.  
  694. ////////////////////////////           
  695. blockE
  696.         LD A,(HL) ;N frames
  697.                   ;1 now, N-1 later
  698.                   ;skip command is used as 1 frame
  699.         INC HL
  700.         LD (blkcntE),A
  701.         LD B,(HL)
  702.         INC HL
  703.         LD C,(HL) ;disp
  704.         INC HL
  705.         LD (blkretaddrE),HL
  706.         ADD HL,BC
  707.         LD C,#FD
  708.         JP tfmframeE
  709. OLDfarE
  710.         LD B,(HL)
  711.         INC HL
  712. OLDnearE
  713.         LD C,(HL)
  714.         INC HL
  715.         PUSH HL
  716.         ADD HL,BC
  717.         LD C,#FD
  718.         CALL tfmframeE
  719.         POP HL
  720.         LD (addrE),HL
  721.         RET  
  722. HLskiperE
  723.         JR Z,OLDfarE
  724.         CP %11100000
  725.         JR C,slideE
  726.         LD B,A
  727.         CP #FF
  728.         JR Z,OLDnearE
  729.         LD (addrE),HL
  730. skiperE LD (skipE),A
  731.         RET  
  732. slideE
  733.        ;A=-64..-33
  734.         ADD A,48
  735.        ;A=-16..15
  736.         JR Z,blockE
  737. tfmlowE=$+1
  738.         ADD A,0
  739.         LD (tfmlowE),A
  740.         LD (addrE),HL
  741.         LD B,D ;%11111xxx
  742. tfmhighE=$+2
  743.         LD HL,#A4+1
  744.         WaitStatus
  745.         OUT (C),L
  746.         WaitStatus
  747.         LD B,E ;#BF
  748.        OUT (C),H
  749.         LD B,D ;%11111xxx
  750.         LD L,#A0+1
  751.         WaitStatus
  752.         OUT (C),L
  753.         WaitStatus
  754.         LD B,E ;#BF
  755.        OUT (C),A
  756.         RET  
  757.  
  758. beginE
  759.         LD (loopaddrE),HL
  760.         JP tfmframeE
  761. endE
  762. loopaddrE=$+1
  763.         LD HL,0
  764.         JP tfmframeE
  765. tfmE
  766. skipE=$+1
  767.         LD A,-1
  768.         INC A
  769.         JR NZ,skiperE
  770. addrE=$+1
  771.         LD HL,0
  772. blkcntE=$+1
  773.         OR 0
  774.         JR Z,tfmframeE
  775.         DEC A
  776.         LD (blkcntE),A
  777.         JR NZ,tfmframeE
  778. blkretaddrE=$+1
  779.         LD HL,0
  780. tfmframeE
  781.         LD A,(HL)
  782.         INC HL
  783.         CP bb
  784.         JR Z,beginE
  785.         CP be
  786.         JR Z,endE
  787.         CP E ;#BF
  788.         JR NC,HLskiperE
  789.         TestKeyOff 1
  790.         OR A
  791.         PUSH AF
  792.         TestFreq 1,tfmhighE,tfmlowE
  793.         TestOutRegs
  794.         LD (addrE),HL
  795.         POP AF
  796.         RET P
  797.         KeyOn 1
  798.         RET  
  799.  
  800. ////////////////////////////           
  801. blockF
  802.         LD A,(HL) ;N frames
  803.                   ;1 now, N-1 later
  804.                   ;skip command is used as 1 frame
  805.         INC HL
  806.         LD (blkcntF),A
  807.         LD B,(HL)
  808.         INC HL
  809.         LD C,(HL) ;disp
  810.         INC HL
  811.         LD (blkretaddrF),HL
  812.         ADD HL,BC
  813.         LD C,#FD
  814.         JP tfmframeF
  815. OLDfarF
  816.         LD B,(HL)
  817.         INC HL
  818. OLDnearF
  819.         LD C,(HL)
  820.         INC HL
  821.         PUSH HL
  822.         ADD HL,BC
  823.         LD C,#FD
  824.         CALL tfmframeF
  825.         POP HL
  826.         LD (addrF),HL
  827.         RET  
  828. HLskiperF
  829.         JR Z,OLDfarF
  830.         CP %11100000
  831.         JR C,slideF
  832.         LD B,A
  833.         CP #FF
  834.         JR Z,OLDnearF
  835.         LD (addrF),HL
  836. skiperF LD (skipF),A
  837.         RET  
  838. slideF
  839.        ;A=-64..-33
  840.         ADD A,48
  841.        ;A=-16..15
  842.         JR Z,blockF
  843. tfmlowF=$+1
  844.         ADD A,0
  845.         LD (tfmlowF),A
  846.         LD (addrF),HL
  847.         LD B,D ;%11111xxx
  848. tfmhighF=$+2
  849.         LD HL,#A4+2
  850.         WaitStatus
  851.         OUT (C),L
  852.         WaitStatus
  853.         LD B,E ;#BF
  854.        OUT (C),H
  855.         LD B,D ;%11111xxx
  856.         LD L,#A0+2
  857.         WaitStatus
  858.         OUT (C),L
  859.         WaitStatus
  860.         LD B,E ;#BF
  861.        OUT (C),A
  862.         RET  
  863.  
  864. beginF
  865.         LD (loopaddrF),HL
  866.         JP tfmframeF
  867. endF
  868. loopaddrF=$+1
  869.         LD HL,0
  870.         JP tfmframeF
  871. tfmF
  872. skipF=$+1
  873.         LD A,-1
  874.         INC A
  875.         JR NZ,skiperF
  876. addrF=$+1
  877.         LD HL,0
  878. blkcntF=$+1
  879.         OR 0
  880.         JR Z,tfmframeF
  881.         DEC A
  882.         LD (blkcntF),A
  883.         JR NZ,tfmframeF
  884. blkretaddrF=$+1
  885.         LD HL,0
  886. tfmframeF
  887.         LD A,(HL)
  888.         INC HL
  889.         CP bb
  890.         JR Z,beginF
  891.         CP be
  892.         JR Z,endF
  893.         CP E ;#BF
  894.         JR NC,HLskiperF
  895.         TestKeyOff 2
  896.         OR A
  897.         PUSH AF
  898.         TestFreq 2,tfmhighF,tfmlowF
  899.         TestOutRegs
  900.         LD (addrF),HL
  901.         POP AF
  902.         RET P
  903.         KeyOn 2
  904.         RET  
  905.  
  906.  
  907.  
  908.  
  909. regsX
  910.         LD B,D ;%11111xxx
  911.         WaitStatus
  912.         OUTI   ;reg
  913.         WaitStatus
  914.         LD B,E ;#BF
  915.         OUTI   ;value
  916.         DEC A
  917.         JR NZ,regsX ;т turbo JR=JP
  918.         RET
  919.  
  920. MDLADDR EQU $
  921.         endmodule
  922.