home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / pdoseric.hdv / SOURCE / MULTIADJ.SC1.txt < prev    next >
Text File  |  2020-08-13  |  8KB  |  308 lines

  1. ; *****************************
  2. ; * MULTI.SRC1                *
  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. ;
  109. ; APPLE DELAY ROUTINE
  110. ;
  111. APPLEDLY LDY   SMALLEST+2
  112.          LDX   SMALLEST+3
  113. DONEYET  CPY   #$00
  114.          BNE   APPLED1
  115.          CPX   #$00
  116.          BNE   APPLED1
  117.          RTS
  118. ;
  119. APPLED1  LDA   SPEED
  120.          JSR   WAIT
  121.          DEX
  122.          CPX   #$FF
  123.          BNE   DONEYET
  124.          DEY
  125.          CLV
  126.          BVC   DONEYET
  127. ;
  128. ;
  129. APPLSEND STA   $C0A9
  130. WAITXMIT LDA   $C0A8
  131.          AND   #$02
  132.          BEQ   WAITXMIT
  133.          RTS
  134. ;
  135. ASAVE    DFB   $00
  136. XSAVE    DFB   $00
  137. YSAVE    DFB   $00
  138. PREVSTAT DFB   $00
  139. ;
  140. ; QUEUEIT - IF ONE BYTE DELAY USE $FD XX, IF TWO USE $FF HI LO
  141. ;
  142. QUEUEIT  STA   ASAVE
  143.          STX   XSAVE
  144.          STY   YSAVE
  145.          LDA   SMALLEST+2
  146.          BNE   TWODUR
  147.          LDA   SMALLEST+3
  148.          BNE   ONEDUR
  149.          RTS                 ;DON'T WRITE ZERO DURS
  150. ;
  151. TWODUR   LDA   #$FF
  152.          JSR   WRITEQ
  153.          LDA   SMALLEST+2
  154.          JSR   WRITEQ
  155. LODUR    LDA   SMALLEST+3
  156.          JSR   WRITEQ
  157.          LDA   ASAVE
  158.          LDX   XSAVE
  159.          LDY   YSAVE
  160.          RTS
  161. ONEDUR   LDA   #$FD
  162.          JSR   WRITEQ
  163.          CLV
  164.          BVC   LODUR
  165. ;
  166. WRITEQ   LDY   #QREG
  167.          STA   (BASL),Y
  168.          LDA   #QSUB
  169.          JSR   USRVECT
  170.          RTS
  171. ;
  172. ;
  173. PRCSDLY  JSR   ADJDRTN       ;ADJUST BY SMALL RANDOM AMOUNT
  174.          LDA   FUNCTION
  175.          AND   #$7F          ;STRIP OFF HI BIT
  176.          CMP   #$02
  177.          BNE   NOQUEUE
  178.          JSR   QUEUEIT
  179.          RTS
  180. NOQUEUE  JSR   APPLEDLY
  181.          RTS
  182. ;
  183. ;
  184. SENDIT   STA   ASAVE
  185.          STX   XSAVE
  186.          STY   YSAVE
  187.          JSR   ADJVOL        ;CHECK FOR VOL BYTE, IF YES, ADJ BY SMALL RND AMT
  188. ;WILL ADJUST ASAVE IF IT IS A VOL BYTE
  189. ;
  190.          LDA   FUNCTION
  191.          AND   #$7F
  192.          CMP   #$01          ;FUNCTION 1
  193.          BNE   FUNC02
  194.          LDY   #MSREG        ;GET BYTE INTO PSEUDO ZP REGISTER
  195.          LDA   ASAVE
  196.          STA   (BASL),Y      
  197.          LDA   #MSEND        ;CALL MIDI SEND SUBROUTINE
  198.          JSR   USRVECT
  199.          LDA   ASAVE
  200.          LDX   XSAVE
  201.          LDY   YSAVE
  202.          RTS
  203. ;
  204. FUNC02   CMP   #$02          ;WHEN INSERTING INTO Q, CHECK FOR RUNNING STS
  205.          BNE   FUNC0
  206.          LDA   ASAVE
  207.          BPL   OUTQ
  208.          CMP   PREVSTAT
  209.          BEQ   RESTORE
  210.          STA   PREVSTAT
  211. ;
  212. OUTQ     JSR   WRITEQ
  213. ;
  214. RESTORE  LDA   ASAVE
  215.          LDX   XSAVE
  216.          LDY   YSAVE
  217.          RTS
  218. ;
  219. FUNC0    LDA   ASAVE
  220.          JSR   APPLSEND
  221.          LDA   ASAVE
  222.          LDX   XSAVE
  223.          LDY   YSAVE
  224.          RTS
  225. ;
  226. PRCSMIDI LDA   METAFLAG
  227.          CMP   #$01
  228.          BNE   NOTMETA
  229.          JMP   METAHNDL
  230. NOTMETA  LDA   (DATAPTR),Y
  231.          BPL   RUNNSTAT
  232.          JSR   INCDATAP      ;SKIP STATUS BYTE
  233. RUNNSTAT LDX   CURRTRK
  234.          LDA   LASTSTAT,X
  235.          JSR   SENDIT
  236.          LDA   DBYTES,X      ;GET # DATABYTES IN X
  237.          TAX
  238. SLOOP    LDY   #$00
  239.          LDA   (DATAPTR),Y
  240.          JSR   SENDIT        ;SEND EACH DATA BYTE
  241.          JSR   INCDATAP
  242.          DEX
  243.          BNE   SLOOP
  244.          LDX   CURRTRK
  245.          LDA   DATAPTR
  246.          STA   CURADRL,X
  247.          LDA   DATAPTR+1
  248.          STA   CURADRH,X
  249.          JSR   DELTA         ;GET NEXT DELTA TIME
  250.          LDX   CURRTRK
  251.          LDA   CONVOUT
  252.          STA   DELAYH,X      ;INTO DELAY REGISTER
  253.          LDA   CONVOUT+1
  254.          STA   DELAYMH,X
  255.          LDA   CONVOUT+2
  256.          STA   DELAYML,X
  257.          LDA   CONVOUT+3
  258.          STA   DELAYL,X
  259.          RTS
  260. ;
  261. METAHNDL LDX   CURRTRK       ;PUT ENDPTR INTO DATAPTR & CURADRS
  262.          LDA   ENDPTR
  263.          STA   DATAPTR
  264.          STA   CURADRL,X
  265.          LDA   ENDPTR+1
  266.          STA   DATAPTR+1
  267.          STA   CURADRH,X
  268.          LDA   #$00
  269.          STA   METAFLAG
  270.          RTS
  271. ;
  272. ;
  273. ;
  274. MAINLINE JSR   DOPAGE        ;PROCESS UNTIL PAGE FAULT OR USER STOP REQUEST
  275.          LDA   EOFFLAG
  276.          CMP   #$FF
  277.          BNE   NOTSTOP        ;IF USER STOPPED IT, EXIT NOW
  278.          RTS
  279. NOTSTOP  CMP   #$01
  280.          BNE   PGFAULT     
  281.          LDX   CURRTRK       ;NOT A PAGE FAULT- IT WAS EOF MARKER ON A TRACK
  282.          LDA   #$00          ;DEACTIVATE TRACK
  283.          STA   ACTIVE,X
  284.          SEC                 ;CHECK IF ANY TRACKS STILL ACTIVE
  285.          LDX   #MAXTRACK
  286. CKTLOOP  LDA   ACTIVE,X
  287.          BEQ   NOTACTIV
  288.          CLC                 ;IF ACTIVE, CLEAR CARRY FLAG
  289. NOTACTIV DEX
  290.          BPL   CKTLOOP       ;LOOP INCLUDING TRK 0
  291.          BCC   MAINLINE      ;IF NOT EOF, REPEAT MAINLINE         
  292.          RTS
  293. ;
  294. ; *** END OF MAINLINE ***
  295. ;
  296. ;DECREMENT BACK POINTER
  297. ;
  298. DECRBACK SEC
  299.          LDA   BACKPTR
  300.          SBC   #$01
  301.          STA   BACKPTR
  302.          LDA   BACKPTR+1
  303.          SBC   #$00
  304.          STA   BACKPTR+1
  305.          RTS
  306. ;
  307.          CHN   MULTIADJ.SC2
  308.