?login_element?

Subversion Repositories NedoOS

Rev

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

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