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

  1. ; *****************************
  2. ; * MULTI.SC1                 *
  3. ; * (C) 1992, ERIC RANGELL    *
  4. ; *****************************
  5. ;
  6. ;
  7. ; CHKEND - CHECK FOR END OF PART
  8. ;
  9. CHKEND   LDX   CURRTRK       ;MOVE TO 1ST DATA BYTE
  10.          LDA   CURADRL,X
  11.          STA   DATAPTR
  12.          LDA   CURADRH,X
  13.          STA   DATAPTR+1
  14.          LDY   #$00
  15. FINDPOS  LDA   (DATAPTR),Y   ;SKIP OVER THE DELAY
  16.          BPL   POSBYTE
  17.          JSR   INCDATAP
  18.          CLV
  19.          BVC   FINDPOS
  20. POSBYTE  JSR   INCDATAP
  21.          LDA   DATAPTR       ;NOW POINTING TO MIDI INSTRUCTION
  22.          STA   CURADRL,X
  23.          LDA   DATAPTR+1
  24.          STA   CURADRH,X
  25.          LDA   #$00          ;ASSUME NOT EOF
  26.          STA   EOFFLAG
  27. ;        LDX   CURRTRK       ;(REDUNDANT CODE)
  28. ;        LDA   CURADRL,X
  29. ;        STA   DATAPTR
  30. ;        LDA   CURADRH,X
  31. ;        STA   DATAPTR+1
  32.          LDY   #$00
  33.          LDA   (DATAPTR),Y  ; GET MIDI BYTE
  34.          BPL   RUNNING      ;   IF POSITIVE -> RUNNING STATUS
  35.          STA   CURRSTS      ; ELSE WE GOT A STATUS BYTE
  36.          AND   #$7F         ;
  37.          TAX                ;   MASK HI BIT  AND TRANSFER TO X
  38.          LDA   DBTABLE,X    ;   LOOK UP # DATA BYTES
  39.          BMI   SPECIAL      ;     IF SPECIAL CASE PROCESS F0 OR FF
  40.          STA   CURRDB       ;   STORE # DATABYTES
  41.          LDX   CURRTRK
  42.          STA   DBYTES,X
  43.          LDA   CURRSTS      ;   AND STATUS
  44.          STA   LASTSTAT,X
  45. RUNNING  LDA   DBYTES,X     ; ADD NUMBER OF DATABYTES...
  46.          STA   CONVOUT+3
  47.          LDA   #$00
  48.          STA   CONVOUT+2
  49.          STA   CONVOUT+1
  50.          STA   CONVOUT
  51.          CLC
  52. ADDIT    LDA   DATAPTR      ; TO CURRENT DATA POINTER
  53.          ADC   CONVOUT+3
  54.          STA   ENDPTR
  55.          LDA   DATAPTR+1
  56.          ADC   CONVOUT+2
  57.          STA   ENDPTR+1
  58.          LDA   ENDPTR+1     ; COMPARE NEW ADRS TO UPPER LIMIT
  59.          LDX   CURRTRK
  60.          CMP   UPLIMH,X
  61.          BNE   ALLOK
  62.          LDA   ENDPTR
  63.          CMP   UPLIML,X
  64.          BCC   ALLOK
  65.          SEC                ;SIGNAL THAT NEED MORE DATA
  66.          RTS                ; OR
  67. ALLOK    CLC                ;EVERYTHINGS FINE
  68.          RTS
  69. ;
  70. ; SPECIAL LOGIC HANDLES META EVENTS AND SYSEX EVENTS
  71. ; (CURRENTLY IGNORES ALL SYSEX AND META, EXCEPT END OF TRACK EVENT)
  72. ;
  73.          CLC
  74. SPECIAL  CMP   #$FF             ; IS IT A META EVENT?
  75.          BNE   SYSEX
  76.          INY                    ; YES- GET NEXT BYTE (TYPE OF EVENT)
  77.          LDA   (DATAPTR),Y
  78.          CMP   #$2F             ; IS IT END OF TRACK?
  79.          BNE   IGNORE           ;   NO - IGNORE THE EVENT
  80.          LDA   #$01             ;   YES - SIGNAL EOF
  81.          STA   EOFFLAG
  82.          SEC
  83.          RTS
  84. IGNORE   JSR   INCDATAP         ; SKIP OVER THE FF
  85. SYSEX    JSR   INCDATAP         ; SKIP OVER THE F0 OR META EVENT TYPE
  86.          JSR   DELTA            ; CONVERT THE VLQ FOR THE LENGTH
  87.          LDA   #$01
  88.          STA   METAFLAG         ; SIGNAL PROCESSES NOT TO XMIT
  89.          SEC
  90.          BCS   ADDIT            ; RESUME PROCESSING ABOVE
  91. ;                               ; ADDS LENGTH TO CURRENT ADRS
  92. ;>>>> WE MAY HAVE PROBLEMS WITH SYSEX/META BOUNDARY TESTING AT END OF PAGE
  93. ;
  94. ;
  95. ; INCDATAP - ADD 1 TO DATA POINTER
  96. ;
  97. INCDATAP INC   DATAPTR
  98.          BNE   INCDEXIT
  99.          INC   DATAPTR+1
  100. INCDEXIT RTS
  101. ;
  102. ; ENABLE ANY TRANSMISSIONS DISABLED BY METAFLAG
  103. ;
  104. ENBLXMIT LDA   #$00
  105.          STA   METAFLAG
  106.          RTS
  107. ;
  108. ; TIMER DELAY ROUTINE - SET UP DURATION
  109. ;    AND CALL CNTLPANL REPEATEDLY UNTIL DURATION FINISHED
  110. ;
  111. DURHI    DFB $00
  112. DURLO    DFB $00
  113. READBYTE DFB $00
  114. ;
  115. TIMERDLY LDA SMALLEST+2
  116.          STA DURHI
  117.          LDA SMALLEST+3
  118.          STA DURLO
  119. ;
  120.          LDA DURHI
  121.          BNE DOIT
  122.          LDA DURLO
  123.          BNE DOIT
  124.          RTS
  125. DOIT     LDX DURHI
  126.          LDY DURLO
  127.          LDA #'D'
  128.          JSR TIMER
  129. ;
  130. DURLOOP  JSR CNTLPANL
  131. ;
  132.          LDA #'R'
  133.          JSR TIMER
  134.          STA READBYTE
  135. ;
  136.          LDA KRETCODE        ;GET OUT IF USER PRESSED SPACE
  137.          BNE DUROUT
  138.          LDA READBYTE
  139.          BEQ DURLOOP
  140. DUROUT   RTS
  141. ;
  142. ;=========
  143. ; APPLE DELAY ROUTINE
  144. ;
  145. APPLEDLY LDY   SMALLEST+2
  146.          LDX   SMALLEST+3
  147. DONEYET  CPY   #$00
  148.          BNE   APPLED1
  149.          CPX   #$00
  150.          BNE   APPLED1
  151.          RTS
  152. ;
  153. APPLED1  LDA   SPEED
  154.          JSR   WAIT
  155.          DEX
  156.          CPX   #$FF
  157.          BNE   DONEYET
  158.          DEY
  159.          CLV
  160.          BVC   DONEYET
  161. ;
  162. ;
  163. APPLSEND STA   $C0A9
  164. WAITXMIT LDA   $C0A8
  165.          AND   #$02
  166.          BEQ   WAITXMIT
  167.          RTS
  168. ;
  169. ASAVE    DFB   $00
  170. XSAVE    DFB   $00
  171. YSAVE    DFB   $00
  172. PREVSTAT DFB   $00
  173. ;
  174. ; QUEUEIT - IF ONE BYTE DELAY USE $FD XX, IF TWO USE $FF HI LO
  175. ;
  176. QUEUEIT  STA   ASAVE
  177.          STX   XSAVE
  178.          STY   YSAVE
  179.          LDA   SMALLEST+2
  180.          BNE   TWODUR
  181.          LDA   SMALLEST+3
  182.          BNE   ONEDUR
  183.          RTS                 ;DON'T WRITE ZERO DURS
  184. ;
  185. TWODUR   LDA   #$FF
  186.          JSR   WRITEQ
  187.          LDA   SMALLEST+2
  188.          JSR   WRITEQ
  189. LODUR    LDA   SMALLEST+3
  190.          JSR   WRITEQ
  191.          LDA   ASAVE
  192.          LDX   XSAVE
  193.          LDY   YSAVE
  194.          RTS
  195. ONEDUR   LDA   #$FD
  196.          JSR   WRITEQ
  197.          CLV
  198.          BVC   LODUR
  199. ;
  200. WRITEQ   STA QBYTE
  201.          LDA #AUXQUEUE
  202.          STA RECEIVER
  203.          LDA #>QMSG
  204.          STA MSG
  205.          LDA #<QMSG
  206.          STA MSG+1
  207.          JSR USRVECT
  208.          RTS
  209. ;
  210. ;
  211. PRCSDLY  LDA   FUNCTION
  212.          AND   #$7F          ;STRIP OFF HI BIT
  213.          CMP   #$02
  214.          BNE   NOQUEUE
  215.          JSR   QUEUEIT
  216.          RTS
  217. NOQUEUE  JSR   TIMERDLY
  218. ;;;;;;;; JSR   APPLEDLY      ;(OLD ROUTINE USED APPLE FCA8)
  219.          RTS
  220. ;
  221. QMSG     ASC  'E'
  222. QBYTE    DFB  $00 
  223. XMSG     ASC  'X'
  224. XBYTE    DFB  $00
  225.          DFB  $FF
  226. ;
  227. SENDIT   STA   ASAVE
  228.          STX   XSAVE
  229.          STY   YSAVE
  230.          LDA   FUNCTION
  231.          AND   #$7F
  232.          CMP   #$01          ;FUNCTION 1
  233.          BNE   FUNC02
  234. ;
  235. AUXQUEUE EQU 8
  236. MIDIFILT EQU 15   
  237. RECEIVER EQU $FA
  238. MSG      EQU $FB
  239. ;                                  
  240.          LDA ASAVE 
  241.          STA XBYTE
  242. ;
  243.          LDA #MIDIFILT
  244.          STA RECEIVER
  245.          LDA #>XMSG
  246.          STA MSG
  247.          LDA #<XMSG
  248.          STA MSG+1
  249.          JSR USRVECT
  250. ;
  251.          LDA   ASAVE
  252.          LDX   XSAVE
  253.          LDY   YSAVE
  254.          RTS
  255. ;
  256. FUNC02   CMP   #$02          ;WHEN INSERTING INTO Q, CHECK FOR RUNNING STS
  257.          BNE   FUNC0
  258.          LDA   ASAVE
  259.          BPL   OUTQ
  260.          CMP   PREVSTAT
  261.          BEQ   RESTORE
  262.          STA   PREVSTAT
  263. ;
  264. OUTQ     JSR   WRITEQ
  265. ;
  266. RESTORE  LDA   ASAVE
  267.          LDX   XSAVE
  268.          LDY   YSAVE
  269.          RTS
  270. ;
  271. FUNC0    LDA   ASAVE
  272.          JSR   APPLSEND
  273.          LDA   ASAVE
  274.          LDX   XSAVE
  275.          LDY   YSAVE
  276.          RTS
  277. ;
  278. PRCSMIDI LDA   METAFLAG
  279.          CMP   #$01
  280.          BNE   NOTMETA
  281.          JMP   METAHNDL
  282. NOTMETA  LDY   #$00
  283.          LDA   (DATAPTR),Y
  284.          BPL   RUNNSTAT
  285.          JSR   INCDATAP      ;SKIP STATUS BYTE
  286. RUNNSTAT LDX   CURRTRK
  287.          LDA   LASTSTAT,X
  288.          JSR   SENDIT
  289.          LDA   DBYTES,X      ;GET # DATABYTES IN X
  290.          TAX
  291. SLOOP    LDY   #$00
  292.          LDA   (DATAPTR),Y
  293.          JSR   SENDIT        ;SEND EACH DATA BYTE
  294.          JSR   INCDATAP
  295.          DEX
  296.          BNE   SLOOP
  297. ;
  298.          CHN   MULTI.SC2
  299.