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

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