?login_element?

Subversion Repositories NedoOS

Rev

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