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

  1. ; BANK ST MUSIC WRITER CONVERSION
  2. ;
  3. ; ZERO PAGE
  4. STSPTR   EQU       $06       ; POINTS TO STATUS BYTE
  5. DTAPTR   EQU       $08       ; POINTS TO DATA BYTE
  6. STS      EQU       $19       ; CURRENT STATUS BYTE.  FORMAT:
  7. ;                            ; (TRIPLET)(TIED)(DOTTED)(NOTE/REST)(STEM)(3:DUR)
  8. DTA      EQU       $1A       ; CURRENT DATA BYTE.  FORMAT:
  9. ;                            ; (OCT-UP),(2:-Nb#),(5:STAFF-LINE)
  10. INBUFFER EQU       $2000     ;INPUT BUFFER
  11. ;
  12.          ORG       $6000
  13.          JMP       BEGIN
  14. ;
  15. XSAVE    DFB       $00
  16. DUR      DFB       $00
  17. BARCTR   DFB       $00       ; COUNTS # VOICES AT BAR
  18. STAFFCTR DFB       $00       ; COUNTS # VOICES AT END OF STAFF
  19. ;
  20. LONGVOIC DFB       $00       ; VOICE OF LONGEST PART
  21. LONGEST  DFB       $00       ; FOR CALCULATING LONGEST PART
  22. ;
  23. VOICCTR  DFB       $00,00,00,00,00,00 ; COUNTS DURATIONS FOR EACH VOICE
  24. POSPTR   DFB       $00,00,00,00,00,00 ; POSITION IN BUFFER FOR EACH VOICE
  25. ;
  26. ; INITIALIZATION
  27. BEGIN    CLD
  28.          LDA       #<INBUFFER
  29.          STA       STSPTR+1
  30.          STA       DTAPTR+1
  31.          LDA       #>INBUFFER
  32.          STA       STSPTR
  33.          LDA       #>INBUFFER+19
  34.          STA       DTAPTR
  35.          LDA       #$00
  36.          LDX       #$0B
  37. ZEROLOOP STA       VOICCTR,X
  38.          DEX
  39.          BPL       ZEROLOOP
  40.          LDA       #$05
  41.          STA       BARCTR
  42. ;
  43.          LDX       #$06      ;START X 1 HIGHER.  DEX AT BEGIN OF LOOP
  44.          STX       XSAVE
  45. READLOOP LDX       XSAVE
  46.          DEX
  47.          BPL       SAVEX
  48.          LDX       #$05
  49. SAVEX    STX       XSAVE
  50.          LDA       DTAOFF,X
  51.          STA       DTAPTR
  52.          LDA       STSOFF,X
  53.          STA       STSPTR
  54.          LDY       POSPTR,X
  55.          LDA       (DTAPTR),Y          ;GET STS BYTE
  56.          SEC
  57.          SBC       #$A0      ;IS IT A KEY CHANGE?
  58.          BEQ       CHGKEY
  59.          LDY       POSPTR,X
  60.          LDA       (STSPTR),Y
  61.          TAY
  62.          LDA       DURATION,Y
  63.          STA       DUR
  64.          CLC
  65.          ADC       VOICCTR,X
  66. CHGKEY   STA       VOICCTR,X
  67.          CMP       LONGEST
  68.          BCC       TOOSHORT
  69.          BEQ       TOOSHORT
  70.          STA       LONGEST
  71.          STX       LONGVOIC
  72. TOOSHORT LDY       POSPTR,X
  73.          LDA       (STSPTR),Y
  74.          STA       STS
  75.          LDY       POSPTR,X
  76.          LDA       (DTAPTR),Y
  77.          STA       DTA       
  78.          CMP       #$A0
  79.          BEQ       SPECIAL
  80.          LDA       STS
  81.          CMP       #$00
  82.          BEQ       SPECIAL
  83.          JMP       PRCSNOTE
  84. ;
  85. SPECIAL  LDA       STS
  86.          BNE       NOT00
  87.          LDA       DTA
  88.          BNE       NOT00
  89. GOBACK   INC       POSPTR,X  ; HANDLE 00
  90.          LDA       POSPTR,X
  91.          CMP       #$12
  92.          BCS       ENDSTAFF
  93.          JMP       READLOOP
  94. ;
  95. NOT00    DEC       BARCTR
  96.          BMI       ALLATBAR
  97.          JMP       GOBACK
  98. ;
  99. ALLATBAR LDA       #$05
  100.          STA       BARCTR
  101.          LDA       DTA
  102.          CMP       #$A0
  103.          BNE       BARONLY
  104.          JSR       KEYCHG
  105. BARONLY  JSR       BARLINE
  106.          JMP       GOBACK
  107. ;
  108. ENDSTAFF DEC       STAFFCTR
  109.          BMI       ALLDONE
  110.          JMP       GOBACK
  111. ;         
  112. ALLDONE  LDA       #$05
  113.          STA       STAFFCTR
  114.          RTS
  115. ;
  116. ; KEYCHANGE SUBROUTINE
  117. ;=================================================
  118. KEYCHG   LDX       #$1F      ;COPY CMAJOR TO KEY
  119. KEYCHG0  LDA       CMAJOR,X
  120.          STA       KEYSIG,X
  121.          DEX
  122.          BNE       KEYCHG0
  123.          LDA       STS
  124.          AND       #$07      ;RETURN IF C MAJOR
  125.          BNE       KEYCHG1
  126.          RTS
  127. KEYCHG1  LDA       STS
  128.          AND       #$08
  129.          BNE       KEYFLAT   ;CHECK # OR b
  130. ;
  131.          LDA       STS
  132.          AND       #$07      ;GET # OF SHARPS
  133.          TAY
  134. SHARPEN  LDX       SHARPS,Y  ;GET OFFSET INTO KEYSIG TABLE
  135.          INC       KEYSIG,X  ;SHARPEN IT
  136.          INC       KEYSIG+7,X          ;SHARPEN 2ND OCTAVE
  137.          INC       KEYSIG+14,X         ;3RD
  138.          INC       KEYSIG+21,X         ;4TH
  139.          DEY
  140.          BNE       SHARPEN   ;GET NEXT NOTE TO BE SHARPENED
  141.          CMP       #$02      ;WHEN DONE, THERE IS ONE LAST C TO SHARPEN
  142.          BCC       SHRPRTS   ;BUT ONLY IF KEYSIG HAS >= 2 SHARPS (D MAJOR-->)
  143.          INC       KEYSIG+29
  144. SHRPRTS  RTS
  145. ;
  146. KEYFLAT  LDA       STS
  147.          AND       #$07      ;GET # OF FLATS
  148.          TAY
  149. FLATTEN  LDX       FLATS,Y
  150.          DEC       KEYSIG,X
  151.          DEC       KEYSIG+7,X
  152.          DEC       KEYSIG+14,X
  153.          DEC       KEYSIG+21,X
  154.          DEY
  155.          BNE       FLATTEN
  156.          CMP       #$06
  157.          BCC       FLATRTS   ;FLATTEN LAST C IF KEYSIG >= 6 FLATS (Gb,Cb)
  158.          DEC       KEYSIG+29
  159. FLATRTS  RTS
  160. ;
  161. ;ACTIVITIES PERFORMED AT BARLINE
  162. ;=================================================
  163. BARLINE  LDX       #$06      ;MOVE ALL VOICES TO NEXT POSITION
  164.          STX       XSAVE
  165. NEXTPOS0 INC       POSPTR,X
  166.          DEX
  167.          BPL       NEXTPOS0
  168. ZEROCTRS LDA       #$00      ;ZERO ALL VOICE COUNTERS
  169.          LDX       #$05
  170. ZEROCTR0 STA       VOICCTR,X
  171.          DEX
  172.          BPL       ZEROCTR0
  173. CLEARACC LDX       #$1F      ;CLEAR ACCIDENTALS BY MOVING KEYSIG TO ACCID.
  174. CLEARAC0 LDA       KEYSIG,X
  175.          STA       ACCID,X
  176.          DEX
  177.          BPL       CLEARAC0
  178.          RTS
  179. ;
  180. ;TABLES:
  181. ;MAP STAFF LINES TO MIDI NOTE #S.
  182. ;
  183. ;ORIGINAL NOTES (C MAJOR)
  184. CMAJOR   DFB       $00,$54,$53,$51,$4F,$4D,$4C,$4A
  185.          DFB       $48,$47,$45,$43,$41,$40,$3E,$3C
  186.          DFB       $3B,$39,$37,$35,$34,$32,$30,$2F
  187.          DFB       $2D,$2B,$29,$28,$26,$24,$00,$00
  188. ;
  189. ;CURRENT KEY SIGNATURE
  190. KEYSIG   DFB       $00,$54,$53,$51,$4F,$4D,$4C,$4A
  191.          DFB       $48,$47,$45,$43,$41,$40,$3E,$3C
  192.          DFB       $3B,$39,$37,$35,$34,$32,$30,$2F
  193.          DFB       $2D,$2B,$29,$28,$26,$24,$00,$00
  194. ;
  195. ;CURRENT KEY SIG WITH CURRENT ACCIDENTALS
  196. ACCID    DFB       $00,$54,$53,$51,$4F,$4D,$4C,$4A
  197.          DFB       $48,$47,$45,$43,$41,$40,$3E,$3C
  198.          DFB       $3B,$39,$37,$35,$34,$32,$30,$2F
  199.          DFB       $2D,$2B,$29,$28,$26,$24,$00,$00
  200. ;
  201. ;SHARP FLAT OFFSET TABLE (EX: 1 SHARP --> LINE 5)
  202. SHARPS   DFB       $00,$05,$01,$04,$07,$03,$06,$02
  203. FLATS    DFB       $00,$02,$06,$03,$07,$04,$01,$05
  204. ;
  205. ;VOICE OFFSET TABLE: (EX: VOICE 1 STATUS BYTE AT +$26, DATA BYTE AT +$39)
  206. STSOFF   DFB       $00,$26,$4C,$72,$98,$BE,$E4,$00
  207. DTAOFF   DFB       $13,$39,$5F,$85,$AB,$D1,$E4,$00
  208. ;
  209.          CHN       BSMW.SC1
  210.