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

  1. ; TEMPOCHG.SRC
  2. ;
  3. ; THIS SUBROUTINE IS USED TO CALCULATE THE SPEED VALUE TO BE USED WHEN
  4. ; A TEMPO CHANGE META EVENT IS FOUND.
  5. ; INPUT:
  6. ;        RESOLUTION (2 BYTES) = LAST 2 BYTES OF MIDI FILE HEADER
  7. ;        NEWTEMPO   (3 BYTES) = VALUES FROM THE FF 51 03 META EVENT
  8. ; OUTPUT:
  9. ;        NEWSPEED   (1 BYTE)  = NEW SPEED VALUE.  YOUR PROGRAM MAY WANT TO
  10. ;                               ADJUST THIS BASED ON USER'S PREFERENCES.
  11. ;
  12. TEMPOCHG JSR TMPOSTRT
  13. ;;;         JMP LOOKUP
  14.          LDA QUOTIENT+2
  15.          STA $9216
  16.          STA NEWSPEED
  17.          LDA QUOTIENT+3
  18.          STA $9217
  19.          RTS
  20. ;
  21. DIVISION JMP DIVIDE
  22. ;
  23. ; PUBLIC VARIABLES
  24. RESHI    DFB $00
  25. RESLO    DFB $00
  26. TMPOHI   DFB $00
  27. TMPOMED  DFB $00
  28. TMPOLO   DFB $00
  29. NEWSPEED DFB $00
  30. ;
  31. ; PRIVATE VARIABLES
  32. DIVIDEND DFB $00,$00,$00,$00
  33. DIVISOR  DFB $00,$00
  34. QUOTIENT DFB $00,$00,$00,$00
  35. REMAINDR DFB $00,$00
  36. TEMPDIV  DFB $00,$00,$00
  37. TEMPDSR  DFB $00,$00
  38. ;
  39. TMPOSTRT LDA #$00
  40.          STA DIVIDEND
  41.          LDA TMPOHI
  42.          STA DIVIDEND+1
  43.          LDA TMPOMED
  44.          STA DIVIDEND+2
  45.          LDA TMPOLO
  46.          STA DIVIDEND+3
  47.          LDA RESHI
  48.          STA DIVISOR
  49.          LDA RESLO
  50.          STA DIVISOR+1
  51. ;
  52. DIVIDE   CLD
  53.          LDA #$00
  54.          STA QUOTIENT
  55.          STA QUOTIENT+1
  56.          STA QUOTIENT+2
  57.          STA QUOTIENT+3
  58.          STA REMAINDR
  59.          STA REMAINDR+1
  60.          STA TEMPDIV
  61.          STA TEMPDIV+1
  62.          STA TEMPDIV+2
  63.          LDA DIVISOR
  64.          STA TEMPDSR
  65.          LDA DIVISOR+1
  66.          STA TEMPDSR+1
  67.          LDA TEMPDSR
  68.          BNE NODIV0
  69.          LDA TEMPDSR+1
  70.          BNE NODIV0
  71.          BRK
  72. ;
  73. NODIV0   LDY #32             ;DIVIDEND WILL BE SHIFTED 32 TIMES
  74. DIVLOOP  ASL DIVIDEND+3
  75.          ROL DIVIDEND+2
  76.          ROL DIVIDEND+1
  77.          ROL DIVIDEND        ;MOVE 1 BIT TO TEMPORARY DIVIDEND
  78.          ROL TEMPDIV+2
  79.          ROL TEMPDIV+1
  80.          ROL TEMPDIV         ;NOW CHECK IF TEMPDSR < TEMPDIV
  81.          LDA TEMPDIV
  82.          BNE NOTLESS
  83.          LDA TEMPDIV+1
  84.          CMP TEMPDSR
  85.          BCC LESS
  86.          BNE NOTLESS
  87.          LDA TEMPDIV+2
  88.          CMP TEMPDSR+1
  89.          BCS NOTLESS
  90. LESS     CLC                 ;STORE A 0 IN THE QUOTIENT
  91.          ROL QUOTIENT+3
  92.          ROL QUOTIENT+2
  93.          ROL QUOTIENT+1
  94.          ROL QUOTIENT
  95.          CLV
  96.          BVC NEXTBIT
  97. NOTLESS  SEC                 ;SUBTRACT TEMPDSR FROM TEMPDIV
  98.          LDA TEMPDIV+2
  99.          SBC TEMPDSR+1
  100.          STA TEMPDIV+2
  101.          LDA TEMPDIV+1
  102.          SBC TEMPDSR
  103.          STA TEMPDIV+1
  104.          LDA TEMPDIV
  105.          SBC #$00
  106.          STA TEMPDIV
  107.          SEC                 ;AND STORE A 1 IN THE QUOTIENT
  108.          ROL QUOTIENT+3
  109.          ROL QUOTIENT+2
  110.          ROL QUOTIENT+1
  111.          ROL QUOTIENT
  112. NEXTBIT  DEY
  113.          BNE DIVLOOP         ;WHEN DONE, QUOTIENT HAS RESULT, TDIV HAS RMDR
  114.          LDA TEMPDIV+1
  115.          STA REMAINDR
  116.          LDA TEMPDIV+2
  117.          STA REMAINDR+1
  118.          RTS
  119. ;
  120. LOOKUP   LDY #2            ;LOOKUP QUOTIENT IN TEMPO TABLE-STARTING WITH 2
  121. ;                          ;BECAUSE IF LESS THAN VALUE OF 2 SHOULD USE 1
  122.          LDA QUOTIENT
  123.          BEQ Q3BYT
  124. QBIG     LDY #127
  125.          CLV
  126.          BVC STORSPED
  127. Q3BYT    LDA QUOTIENT+1
  128.          BNE QBIG
  129. ;                            ;WE HAVE A 2 BYTE QUOTIENT TO LOOK UP
  130. Q2LOOP   LDA QUOTIENT+2
  131.          CMP TEMPOHI,Y
  132.          BCC FOUNDSP
  133.          BNE NEXTSPED
  134.          LDA QUOTIENT+3
  135.          CMP TEMPOLO,Y
  136.          BCC FOUNDSP
  137. NEXTSPED INY
  138.          CPY #128
  139.          BCC Q2LOOP
  140. FOUNDSP  DEY
  141. STORSPED STY NEWSPEED
  142.          RTS
  143. ;
  144. ; THE FOLLOWING DATA WAS CREATED BY BASIC PROGRAM "TEMPOCALC"
  145. ; IT REPRESENTS THE EVALUATION OF FUNCTION .4889*(26+27*A+5*A*A) FROM 0-127
  146. ;
  147. TEMPOHI  DFB 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2
  148.          DFB 3,3,4,4,4,5,5,6,6,7,7,8,8,9,10,10
  149.          DFB 11,12,12,13,14,15,15,16,17,18,19,19,20,21,22,23
  150.          DFB 24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,41
  151.          DFB 42,43,45,46,47,49,50,51,53,54,56,57,59,60,62,63
  152.          DFB 65,66,68,70,71,73,75,76,78,80,82,83,85,87,89,91
  153.          DFB 93,94,96,98,100,102,104,106,108,110,112,114,116,119,121,123
  154.          DFB 125,127,130,132,134,136,139,141,143,146,148,150,153,155,158,160
  155. TEMPOLO  DFB 12,28,48,74,104,139,179,224,18,73,133,197,11,85,164,248
  156.          DFB 81,175,18,121,230,87,206,73,201,78,216,103,250,147,48,211
  157.          DFB 122,38,215,141,71,7,204,149,99,55,15,236,206,180,160,145
  158.          DFB 134,128,127,132,141,154,173,197,225,3,41,84,132,185,243,50
  159.          DFB 118,190,12,94,181,17,114,216,67,179,39,161,31,162,42,183
  160.          DFB 73,224,123,28,193,108,27,207,136,70,9,208,157,110,69,32
  161.          DFB 0,229,207,190,177,170,167,170,177,189,206,228,254,30,67,108
  162.          DFB 154,206,6,67,133,203,23,104,189,23,119,219,68,178,36,156
  163. ;
  164.          CHN INT0DRVR.SC6
  165.