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