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

  1. ; *****************************
  2. ; * SOURCE CODE FOR MULTI.OBJ *
  3. ; * (C) 1992, ERIC RANGELL    *
  4. ; *****************************
  5. ;
  6. ;
  7. ; CONSTANTS
  8. ;
  9. MAXTRACK EQU $07   ;MAXIMUM TRACK NUMBER
  10. ;
  11. ; ZERO PAGE STUFF
  12. ;
  13. USRVECT  EQU $0A   ;USED IF INTERRUPT ROUTINE IS INSTALLED
  14. BASL     EQU $0B
  15. BASH     EQU $0C
  16. ;
  17. DATAPTR  EQU $19
  18. ENDPTR   EQU $1B
  19. BACKPTR  EQU $1D
  20. METAFLAG EQU $CE
  21. SPEED    EQU $CF
  22. ;
  23. ;
  24. ;ADDRESS OF CONTROL PANEL PROGRAM
  25. CNTLPANL EQU $6C00
  26. KRETCODE EQU $6C08
  27. ;
  28. ; APPLE ADDRESSES
  29. WAIT     EQU $FCA8
  30. MLI      EQU $BF00
  31. ;
  32.          ORG $6000
  33. ;
  34. START    JMP MAINLINE
  35. ;
  36. FUNCTION DFB $81   ;FUNCTION CODE: 
  37. ;                  ;  00 = APPLE DELAY & MIDI WITHOUT DISPLAY ROUTINE(DEFAULT)
  38. ;                  ;  01 = APPLE DELAY & MIDI WITH DISPLAY ROUTINE (VIA SUB15)
  39. ;                  ;  02 = STORE DELAY AND MIDI ON QUEUE
  40. ;                  ;  HI BIT (80,81,82 = PROCESS USER'S KEYSTROKES-CNTLPANL)
  41. ;
  42. ; PROGRAM DATA ADDRESSES
  43. ;
  44. CURRSTS  DFB $00  ;CURRENT STATUS BYTE
  45. CURRDB   DFB $00  ;# OF DATA BYTES IN CURR STATUS
  46. EOFFLAG  DFB $00  ;SIGNAL WHEN DONE WITH ALL PARTS
  47. CURRTRK  DFB $00  ;CURRENT TRACK BEING PROCESSED (0-7)
  48. ;
  49. ACTIVE   DFB $00,$00,$00,$00,$00,$00,$00,$00
  50. CURADRL  DFB $00,$00,$00,$00,$00,$00,$00,$00
  51. CURADRH  DFB $00,$00,$00,$00,$00,$00,$00,$00
  52. UPLIML   DFB $00,$00,$00,$00,$00,$00,$00,$00
  53. UPLIMH   DFB $28,$30,$38,$40,$48,$50,$58,$60
  54. DELAYH   DFB $00,$00,$00,$00,$00,$00,$00,$00
  55. DELAYMH  DFB $00,$00,$00,$00,$00,$00,$00,$00
  56. DELAYML  DFB $00,$00,$00,$00,$00,$00,$00,$00
  57. DELAYL   DFB $00,$00,$00,$00,$00,$00,$00,$00
  58. ;
  59. SMALLEST DFB $00,$00,$00,$00
  60. ALU      DFB $00,$00,$00,$00
  61. CONVOUT  DFB $00,$00,$00,$00
  62. CONVIN   DFB $00,$00,$00,$00
  63. BUFRADRL DFB $00,$00,$00,$00,$00,$00,$00,$00
  64. BUFRADRH DFB $00,$00,$00,$00,$00,$00,$00,$00
  65. LASTSTAT DFB $00,$00,$00,$00,$00,$00,$00,$00
  66. DBYTES   DFB $00,$00,$00,$00,$00,$00,$00,$00
  67. ;
  68. DBTABLE  DFB $02,$02,$02,$02,$02,$02,$02,$02
  69.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  70.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  71.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  72.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  73.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  74.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  75.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  76.          DFB $01,$01,$01,$01,$01,$01,$01,$01
  77.          DFB $01,$01,$01,$01,$01,$01,$01,$01
  78.          DFB $01,$01,$01,$01,$01,$01,$01,$01
  79.          DFB $01,$01,$01,$01,$01,$01,$01,$01
  80.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  81.          DFB $02,$02,$02,$02,$02,$02,$02,$02
  82.          DFB $F0,$00,$02,$01,$00,$00,$00,$F7
  83.          DFB $00,$00,$00,$00,$00,$00,$00,$FF
  84. ;
  85. POSPTRL  DFB $00,$00,$00,$00,$00,$00,$00,$00
  86. POSPTRM  DFB $00,$00,$00,$00,$00,$00,$00,$00
  87. POSPTRH  DFB $00,$00,$00,$00,$00,$00,$00,$00
  88. BUFRLENL DFB $00,$00,$00,$00,$00,$00,$00,$00
  89. BUFRLENH DFB $00,$00,$00,$00,$00,$00,$00,$00
  90. ;
  91. DOPAGE   JSR   GETSMALL ;GET SMALLEST DURATION AND ITS TRACK #
  92.          JSR   SUBSMALL ;SUBTRACT SMALLEST FROM EACH TRACK DRTN
  93.          JSR   ENBLXMIT ;ZERO THE META EVENT FLAG
  94.          JSR   CHKEND   ;CHECK IF END OF PART REACHED
  95.          BCS   NEEDNEW  ;  EXIT IF NEW PART NEEDS TO BE LOADED
  96.          JSR   PRCSDLY  ;PROCESS THE DELAY
  97.          JSR   PRCSMIDI ;PROCESS THE MIDI INSTRUCTION
  98.          LDA   FUNCTION      ;IF FUNCTION CODE >=128 THEN PROCESS KEYSTROKES
  99.          BPL   DOPAGE
  100. ;;;         JSR   CNTLPANL ;(CALLED IN PRCSDLY ROUTINE)
  101.          LDA   KRETCODE
  102.          BEQ   DOPAGE        ;IF GOOD RETURN CODE (0) CONTINUE WORKING
  103.          LDA   #$FF
  104.          STA   EOFFLAG       ;ELSE STOP THE SONG
  105. NEEDNEW  RTS
  106. ;
  107. ; CONVERT DELTA TIME FROM VARIABLE LENGTH QTY (VLQ) TO 4 BYTE INTEGER
  108. ;
  109. DELTA    LDY   #$00
  110.          STY   CONVOUT
  111.          STY   CONVOUT+1
  112.          STY   CONVOUT+2
  113.          STY   CONVOUT+3
  114.          LDA   (DATAPTR),Y    ;READ CURRENT BYTE OF TRACK
  115.          STA   CONVIN,Y
  116.          BPL   MASK1          ;IF END OF VLQ - USE MASK1 ROUTINE
  117.          INY
  118.          LDA   (DATAPTR),Y
  119.          STA   CONVIN,Y
  120.          BPL   MASK2
  121.          INY
  122.          LDA   (DATAPTR),Y
  123.          STA   CONVIN,Y
  124.          BPL   MASK3
  125.          INY
  126.          LDA   (DATAPTR),Y
  127.          STA   CONVIN,Y
  128.          BPL   MASK4
  129.          BRK                      ;ABEND IF MORE THAN 4 BYTE VLQ
  130. MASK4    LDA   CONVOUT+1,Y
  131.          AND   #$07
  132.          CLC
  133.          ROR A
  134.          ROR A
  135.          ROR A
  136.          ROR A
  137.          STA   CONVOUT+1
  138.          LDA   CONVOUT+1,Y
  139.          AND   #$7F
  140.          LSR A
  141.          LSR A
  142.          LSR A
  143.          ORA   CONVOUT
  144.          STA   CONVOUT
  145. MASK3    LDA   CONVOUT+2,Y
  146.          AND   #$03
  147.          CLC
  148.          ROR A
  149.          ROR A
  150.          ROR A
  151.          STA   CONVOUT+2
  152.          LDA   CONVOUT+2,Y
  153.          AND   #$7F
  154.          LSR A
  155.          LSR A
  156.          ORA   CONVOUT+1
  157.          STA   CONVOUT+1
  158. MASK2    LDA   CONVOUT+3,Y
  159.          AND   #$01
  160.          CLC
  161.          ROR A
  162.          ROR A
  163.          STA   CONVOUT+3
  164.          LDA   CONVOUT+3,Y
  165.          AND   #$7F
  166.          LSR A
  167.          ORA   CONVOUT+2
  168.          STA   CONVOUT+2
  169. MASK1    LDA   CONVIN,Y
  170.          AND   #$7F
  171.          ORA   CONVOUT+3
  172.          STA   CONVOUT+3
  173.          RTS
  174. ;
  175. ; COMPARE TO SMALLEST - IF SMALLER, MAKE THIS ONE THE SMALLEST.
  176. ;
  177. CMPSMALL LDA   ALU
  178.          CMP   SMALLEST
  179.          BCC   SMALLER
  180.          BNE   NOPE
  181.          LDA   ALU+1
  182.          CMP   SMALLEST+1
  183.          BCC   SMALLER
  184.          BNE   NOPE
  185.          LDA   ALU+2
  186.          CMP   SMALLEST+2
  187.          BCC   SMALLER
  188.          BNE   NOPE
  189.          LDA   ALU+3
  190.          CMP   SMALLEST+3
  191.          BCC   SMALLER
  192.          BNE   NOPE
  193.          BCS   NOPE
  194. SMALLER  LDA   ALU
  195.          STA   SMALLEST
  196.          LDA   ALU+1
  197.          STA   SMALLEST+1
  198.          LDA   ALU+2
  199.          STA   SMALLEST+2
  200.          LDA   ALU+3
  201.          STA   SMALLEST+3
  202.          SEC
  203.          RTS
  204. NOPE     CLC
  205.          RTS
  206. ;
  207. ;
  208. SUBSM    SEC
  209.          LDA   ALU+3
  210.          SBC   SMALLEST+3
  211.          STA   ALU+3
  212.          LDA   ALU+2
  213.          SBC   SMALLEST+2
  214.          STA   ALU+2
  215.          LDA   ALU+1
  216.          SBC   SMALLEST+1
  217.          STA   ALU+1
  218.          LDA   ALU
  219.          SBC   SMALLEST
  220.          STA   ALU
  221.          RTS
  222. ;
  223. ; LOOP TO FIND TRACK WITH SMALLEST DURATION
  224. ;
  225. GETSMALL LDA   #$FF
  226.          STA   SMALLEST
  227.          STA   SMALLEST+1
  228.          STA   SMALLEST+2
  229.          STA   SMALLEST+3
  230.          LDX   #$00
  231. CHKLOOP  LDA   ACTIVE,X
  232.          BEQ   NEXTX
  233.          LDA   DELAYH,X
  234.          STA   ALU
  235.          LDA   DELAYMH,X
  236.          STA   ALU+1
  237.          LDA   DELAYML,X
  238.          STA   ALU+2
  239.          LDA   DELAYL,X
  240.          STA   ALU+3
  241.          JSR   CMPSMALL
  242.          BCC   NEXTX
  243.          STX   CURRTRK
  244. NEXTX    INX
  245.          CPX   #$08
  246.          BNE   CHKLOOP
  247.          RTS
  248. ;
  249. ; SUBSMALL - SUBTRACT SMALLEST DUR FROM EACH TRK
  250. ;
  251. SUBSMALL LDX   #$00
  252. SUBLOOP  LDA   ACTIVE,X
  253.          BEQ   NEXTTRK
  254.          LDA   DELAYH,X
  255.          STA   ALU
  256.          LDA   DELAYMH,X
  257.          STA   ALU+1
  258.          LDA   DELAYML,X
  259.          STA   ALU+2
  260.          LDA   DELAYL,X
  261.          STA   ALU+3
  262.          JSR   SUBSM
  263.          LDA   ALU
  264.          STA   DELAYH,X
  265.          LDA   ALU+1
  266.          STA   DELAYMH,X
  267.          LDA   ALU+2
  268.          STA   DELAYML,X
  269.          LDA   ALU+3
  270.          STA   DELAYL,X
  271. NEXTTRK  INX
  272.          CPX   #$08
  273.          BNE   SUBLOOP
  274.          RTS
  275. ;
  276. ;
  277.          CHN   MULTI.SC1
  278.