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

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