home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / eric.hdv / ANNMIDI / MFF0PLAY.SRC.txt < prev    next >
Text File  |  2020-08-13  |  7KB  |  326 lines

  1. ; MFF0 PLAYER - ALSO DISPLAYS MIDI KARAOKE LYRICS
  2. ;
  3. ; T0 CONTAINS THE MIDI FILE DATA STRIPPED OF HEADER
  4. ;--------------
  5. ; MEMORY USAGE
  6. ;--------------
  7. AUXMOVE  EQU $C311
  8. A1L      EQU $3C   ;AUXMOVE SOURCE START
  9. A1H      EQU $3D
  10. A2L      EQU $3E   ;AUXMOVE SOURCE END
  11. A2H      EQU $3F
  12. A4L      EQU $42   ;AUXMOVE DESTINATION
  13. A4H      EQU $43
  14. ;
  15. MAINBUFR EQU $2000 ; MAIN BUFFER
  16. MAINEND  EQU $757F
  17. MAINLEN  EQU $5580
  18. AUX1BUFR EQU $1500 ; AUX1 BUFFER
  19. AUX1END  EQU $6A7F
  20. AUX1LEN  EQU $5580
  21. AUX2BUFR EQU $6A80 ; AUX2 BUFFER
  22. AUX2END  EQU $BFFF
  23. AUX2LEN  EQU $5580
  24. MTHDLEN  EQU $0016 ; MFF0 HEADER LENGTH (22 BYTES)
  25. ;--------
  26. ; LINKAGE AREA TO MFF0DRVR.OBJ
  27. ;--------
  28. DRVRSTRT EQU $80F
  29. DRVREND  EQU $811
  30. DRVREOT  EQU $814
  31. DRVRINIT EQU $800
  32. DRVRMAIN EQU $803
  33. DRVRAUX  EQU $806
  34. ;--------
  35.          ORG $75FD           ; MLI BUFFER
  36.          JMP MAINLINE        ; PROGRAM
  37. FILEBUFR DS  $400            ;MLI FILE BUFFER FOR OPEN FILE
  38. EOFFLAG  DFB $00             ;LOADMAIN WILL SET THIS TO 1 WHEN EOF REACHED
  39. USERSTOP DFB $00             ;DETECTS IF STOPPED BEFORE END OF SEQUENCE
  40. DEBUG    DFB $00             ;DEBUG MODE - PRINTS LOAD & PLAY RESULTS
  41. PATHNAME DFB 62              ;USER POKES LENGTH IN HERE ($7903)
  42.          ASC '/         '    ;USER POKES PATHNAME IN HERE, ENDING IN $00
  43.          ASC '          '
  44.          ASC '          '
  45.          ASC '          '
  46.          ASC '          '
  47.          ASC '          '
  48.          ASC '  '
  49.          DFB $00
  50. ;
  51. ;
  52. ;ALGORITHM:
  53. ;==========
  54. ;WHILE NOT EOF
  55. ;   LOAD MAIN, 
  56. ;   IF EOF
  57. ;      MODE=PLAYMAIN
  58. ;   ELSE 
  59. ;       TRANSFER MAIN TO AUX1
  60. ;       LOAD MAIN,
  61. ;       IF EOF
  62. ;           MODE=AUX1MAIN
  63. ;       ELSE 
  64. ;           TRANSFER MAIN TO AUX2
  65. ;           LOAD MAIN
  66. ;           MODE=AUX1AUX2MAIN
  67. ;
  68. ;MODE PLAYMAIN
  69. ;    PLAY MAIN
  70. ;
  71. ;MODE AUX1MAIN
  72. ;    PLAY AUX1
  73. ;    PLAY MAIN
  74. ;
  75. ;MODE AUX1AUX2MAIN
  76. ;    PLAY AUX1
  77. ;    PLAY AUX2
  78. ;    PLAY MAIN
  79. ;
  80. ;========
  81. ;MAINLINE
  82. ;========
  83. MAINLINE JSR MIDIINIT
  84.          JSR DRVRINIT
  85.          JSR OPENFILE
  86.          JSR READHEAD
  87. PLAYLOOP JSR LOADMAIN
  88.          LDA EOFFLAG
  89.          BNE MAINONLY
  90. ;
  91.          JSR XFERAUX1
  92.          JSR LOADMAIN
  93.          LDA EOFFLAG
  94.          BNE AUX1MAIN
  95. ;
  96.          JSR XFERAUX2
  97.          JSR LOADMAIN
  98.          JSR A1A2MAIN
  99.          LDA EOFFLAG
  100.          BEQ PLAYLOOP
  101.          JMP EXITPGM
  102. ;=======
  103. MIDIINIT BIT $C059           ;AN0ON
  104.          LDA #$00
  105.          STA USERSTOP
  106.          STA $C001 ; 80STOREON
  107.          STA $C056 ; HIRES OFF 
  108.          STA $C054 ; TEXT PAGE IN MAIN RAM
  109.          RTS
  110. ;-------
  111. MAINONLY JSR PLAYMAIN
  112.          JMP EXITPGM
  113. ;-------
  114. AUX1MAIN JSR PLAYAUX1
  115.          JSR PLAYMAIN
  116.          JMP EXITPGM
  117. ;-------
  118. A1A2MAIN JSR PLAYAUX1
  119.          JSR PLAYAUX2
  120.          JSR PLAYMAIN
  121.          RTS
  122. ;-------
  123. EXITPGM  JSR CLOSEFIL
  124.          RTS
  125. ;-------------------
  126. ;==END OF MAINLINE==
  127. ;-------------------
  128. ;--------
  129. ;OPENFILE
  130. ;--------
  131. MLI      EQU $BF00
  132. OPENCMD  EQU $C8
  133. READCMD  EQU $CA
  134. CLOSECMD EQU $CC
  135. PRINTERR EQU $FDDA
  136. ;
  137. OPENPARM DFB $03
  138.          DW  PATHNAME
  139.          DW  FILEBUFR
  140. OPENREF  DFB $00
  141. ;
  142. RHEADPRM DFB $04
  143. RHEADREF DFB $00
  144. HDATADRS DW  MAINBUFR
  145. HREQLEN  DW  MTHDLEN
  146. HACTLEN  DW  $0000
  147. ;
  148. READPARM DFB $04
  149. READREF  DFB $00
  150. DATAADRS DW  MAINBUFR
  151. REQLEN   DW  MAINLEN
  152. ACTLEN   DW  $0000
  153. ;
  154. CLOSEPRM DFB $01
  155. CLOSEREF DFB $00
  156. ;
  157. OPENFILE JSR MLI
  158.          DFB OPENCMD
  159.          DW  OPENPARM
  160.          BCS MLIERROR
  161.          LDA OPENREF
  162.          STA READREF
  163.          STA RHEADREF
  164.          STA CLOSEREF
  165.          RTS
  166. ;
  167. MLIERROR JSR PRINTERR
  168.          BRK
  169. ;--------
  170. CLOSEFIL JSR MLI
  171.          DFB CLOSECMD
  172.          DW  CLOSEPRM
  173.          BCS MLIERROR
  174.          RTS
  175. ;--------
  176. LOADMAIN LDA USERSTOP
  177.          BEQ LOADMAI1
  178.          RTS
  179. LOADMAI1 JSR MLI
  180.          DFB READCMD
  181.          DW  READPARM
  182.          BCC GOODREAD        ;NO MLI ERROR
  183.          CMP #$4C  ; DID WE READ PAST EOF?
  184.          BEQ MARKEOF
  185.          BNE MLIERROR
  186. GOODREAD LDA DEBUG
  187.          BEQ SKIP1
  188.          LDA #'R'
  189.          JSR $FDF0
  190.          LDA ACTLEN+1
  191.          JSR $FDDA
  192.          LDA ACTLEN
  193.          JSR $FDDA
  194. SKIP1    LDA REQLEN          ;COMPARE ACTUAL LEN TO REQUESTED LEN
  195.          CMP ACTLEN          ;TO CHECK FOR EOF CONDITION
  196.          BNE MARKEOF
  197.          LDA REQLEN+1
  198.          CMP ACTLEN+1
  199.          BNE MARKEOF
  200.          RTS
  201. MARKEOF  LDA #$1
  202.          STA EOFFLAG
  203.          RTS
  204. ;--------
  205. READHEAD JSR MLI
  206.          DFB READCMD
  207.          DW  RHEADPRM
  208.          BCC GOODHEAD        ;NO MLI ERROR
  209.          CMP #$4C  ; DID WE READ PAST EOF?
  210.          BEQ MARKEOF
  211.          BNE MLIERROR
  212. GOODHEAD RTS
  213. ;--------
  214. XFERAUX1 LDA #>MAINBUFR
  215.          STA A1L 
  216.          LDA #<MAINBUFR
  217.          STA A1H
  218.          LDA #>MAINEND
  219.          STA A2L
  220.          LDA #<MAINEND
  221.          STA A2H
  222.          LDA #>AUX1BUFR
  223.          STA A4L
  224.          LDA #<AUX1BUFR
  225.          STA A4H
  226.          SEC       ;MAIN TO AUX
  227.          JSR AUXMOVE
  228.          RTS
  229. ;--------
  230. XFERAUX2 LDA #>MAINBUFR
  231.          STA A1L 
  232.          LDA #<MAINBUFR
  233.          STA A1H
  234.          LDA #>MAINEND
  235.          STA A2L
  236.          LDA #<MAINEND
  237.          STA A2H
  238.          LDA #>AUX2BUFR
  239.          STA A4L
  240.          LDA #<AUX2BUFR
  241.          STA A4H
  242.          SEC       ;MAIN TO AUX
  243.          JSR AUXMOVE
  244.          RTS
  245. ;--------
  246. PLAYAUX1 LDA DEBUG
  247.          BEQ SKIP2
  248.          LDA #'1'
  249.          JSR $FDF0
  250. ;
  251. SKIP2    LDA USERSTOP
  252.          BEQ AUX1OK
  253.          RTS
  254. AUX1OK   LDA #>AUX1BUFR
  255.          STA DRVRSTRT
  256.          LDA #<AUX1BUFR
  257.          STA DRVRSTRT+1
  258.          LDA #>AUX1END
  259.          CLC
  260.          ADC #$01
  261.          STA DRVREND
  262.          LDA #<AUX1END
  263.          ADC #$00
  264.          STA DRVREND+1
  265.          JSR DRVRAUX
  266.          LDA DRVREOT
  267.          BEQ AUX1DONE
  268.          LDA #$01
  269.          STA EOFFLAG
  270.          STA USERSTOP
  271. AUX1DONE RTS
  272. ;--------
  273. PLAYAUX2 LDA DEBUG
  274.          BEQ SKIP3
  275.          LDA #'2'
  276.          JSR $FDF0
  277. ;
  278. SKIP3    LDA USERSTOP
  279.          BEQ AUX2OK
  280.          RTS
  281. AUX2OK   LDA #>AUX2BUFR
  282.          STA DRVRSTRT
  283.          LDA #<AUX2BUFR
  284.          STA DRVRSTRT+1
  285.          LDA #>AUX2END
  286.          CLC
  287.          ADC #$01
  288.          STA DRVREND
  289.          LDA #<AUX2END
  290.          ADC #$00
  291.          STA DRVREND+1
  292.          JSR DRVRAUX
  293.          LDA DRVREOT
  294.          BEQ AUX2DONE
  295.          LDA #$01
  296.          STA EOFFLAG
  297.          STA USERSTOP
  298. AUX2DONE RTS
  299. ;--------
  300. PLAYMAIN LDA DEBUG
  301.          BEQ SKIP4
  302.          LDA #'M'
  303.          JSR $FDF0
  304. ;
  305. SKIP4    LDA USERSTOP
  306.          BEQ MAINOK
  307.          RTS
  308. MAINOK   LDA #>MAINBUFR
  309.          STA DRVRSTRT
  310.          LDA #<MAINBUFR
  311.          STA DRVRSTRT+1
  312.          LDA #>MAINEND
  313.          CLC
  314.          ADC #$01
  315.          STA DRVREND
  316.          LDA #<MAINEND
  317.          ADC #$00
  318.          STA DRVREND+1
  319.          JSR DRVRMAIN
  320.          LDA DRVREOT
  321.          BEQ MAINDONE
  322.          LDA #$01
  323.          STA EOFFLAG
  324.          STA USERSTOP
  325. MAINDONE RTS
  326.