?login_element?

Subversion Repositories NedoOS

Rev

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

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