home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-25 | 6.1 KB | 210 lines | [04] ASCII Text (0x0000) |
- ; BANK ST MUSIC WRITER CONVERSION
- ;
- ; ZERO PAGE
- STSPTR EQU $06 ; POINTS TO STATUS BYTE
- DTAPTR EQU $08 ; POINTS TO DATA BYTE
- STS EQU $19 ; CURRENT STATUS BYTE. FORMAT:
- ; ; (TRIPLET)(TIED)(DOTTED)(NOTE/REST)(STEM)(3:DUR)
- DTA EQU $1A ; CURRENT DATA BYTE. FORMAT:
- ; ; (OCT-UP),(2:-Nb#),(5:STAFF-LINE)
- INBUFFER EQU $2000 ;INPUT BUFFER
- ;
- ORG $6000
- JMP BEGIN
- ;
- XSAVE DFB $00
- DUR DFB $00
- BARCTR DFB $00 ; COUNTS # VOICES AT BAR
- STAFFCTR DFB $00 ; COUNTS # VOICES AT END OF STAFF
- ;
- LONGVOIC DFB $00 ; VOICE OF LONGEST PART
- LONGEST DFB $00 ; FOR CALCULATING LONGEST PART
- ;
- VOICCTR DFB $00,00,00,00,00,00 ; COUNTS DURATIONS FOR EACH VOICE
- POSPTR DFB $00,00,00,00,00,00 ; POSITION IN BUFFER FOR EACH VOICE
- ;
- ; INITIALIZATION
- BEGIN CLD
- LDA #<INBUFFER
- STA STSPTR+1
- STA DTAPTR+1
- LDA #>INBUFFER
- STA STSPTR
- LDA #>INBUFFER+19
- STA DTAPTR
- LDA #$00
- LDX #$0B
- ZEROLOOP STA VOICCTR,X
- DEX
- BPL ZEROLOOP
- LDA #$05
- STA BARCTR
- ;
- LDX #$06 ;START X 1 HIGHER. DEX AT BEGIN OF LOOP
- STX XSAVE
- READLOOP LDX XSAVE
- DEX
- BPL SAVEX
- LDX #$05
- SAVEX STX XSAVE
- LDA DTAOFF,X
- STA DTAPTR
- LDA STSOFF,X
- STA STSPTR
- LDY POSPTR,X
- LDA (DTAPTR),Y ;GET STS BYTE
- SEC
- SBC #$A0 ;IS IT A KEY CHANGE?
- BEQ CHGKEY
- LDY POSPTR,X
- LDA (STSPTR),Y
- TAY
- LDA DURATION,Y
- STA DUR
- CLC
- ADC VOICCTR,X
- CHGKEY STA VOICCTR,X
- CMP LONGEST
- BCC TOOSHORT
- BEQ TOOSHORT
- STA LONGEST
- STX LONGVOIC
- TOOSHORT LDY POSPTR,X
- LDA (STSPTR),Y
- STA STS
- LDY POSPTR,X
- LDA (DTAPTR),Y
- STA DTA
- CMP #$A0
- BEQ SPECIAL
- LDA STS
- CMP #$00
- BEQ SPECIAL
- JMP PRCSNOTE
- ;
- SPECIAL LDA STS
- BNE NOT00
- LDA DTA
- BNE NOT00
- GOBACK INC POSPTR,X ; HANDLE 00
- LDA POSPTR,X
- CMP #$12
- BCS ENDSTAFF
- JMP READLOOP
- ;
- NOT00 DEC BARCTR
- BMI ALLATBAR
- JMP GOBACK
- ;
- ALLATBAR LDA #$05
- STA BARCTR
- LDA DTA
- CMP #$A0
- BNE BARONLY
- JSR KEYCHG
- BARONLY JSR BARLINE
- JMP GOBACK
- ;
- ENDSTAFF DEC STAFFCTR
- BMI ALLDONE
- JMP GOBACK
- ;
- ALLDONE LDA #$05
- STA STAFFCTR
- RTS
- ;
- ; KEYCHANGE SUBROUTINE
- ;=================================================
- KEYCHG LDX #$1F ;COPY CMAJOR TO KEY
- KEYCHG0 LDA CMAJOR,X
- STA KEYSIG,X
- DEX
- BNE KEYCHG0
- LDA STS
- AND #$07 ;RETURN IF C MAJOR
- BNE KEYCHG1
- RTS
- KEYCHG1 LDA STS
- AND #$08
- BNE KEYFLAT ;CHECK # OR b
- ;
- LDA STS
- AND #$07 ;GET # OF SHARPS
- TAY
- SHARPEN LDX SHARPS,Y ;GET OFFSET INTO KEYSIG TABLE
- INC KEYSIG,X ;SHARPEN IT
- INC KEYSIG+7,X ;SHARPEN 2ND OCTAVE
- INC KEYSIG+14,X ;3RD
- INC KEYSIG+21,X ;4TH
- DEY
- BNE SHARPEN ;GET NEXT NOTE TO BE SHARPENED
- CMP #$02 ;WHEN DONE, THERE IS ONE LAST C TO SHARPEN
- BCC SHRPRTS ;BUT ONLY IF KEYSIG HAS >= 2 SHARPS (D MAJOR-->)
- INC KEYSIG+29
- SHRPRTS RTS
- ;
- KEYFLAT LDA STS
- AND #$07 ;GET # OF FLATS
- TAY
- FLATTEN LDX FLATS,Y
- DEC KEYSIG,X
- DEC KEYSIG+7,X
- DEC KEYSIG+14,X
- DEC KEYSIG+21,X
- DEY
- BNE FLATTEN
- CMP #$06
- BCC FLATRTS ;FLATTEN LAST C IF KEYSIG >= 6 FLATS (Gb,Cb)
- DEC KEYSIG+29
- FLATRTS RTS
- ;
- ;ACTIVITIES PERFORMED AT BARLINE
- ;=================================================
- BARLINE LDX #$06 ;MOVE ALL VOICES TO NEXT POSITION
- STX XSAVE
- NEXTPOS0 INC POSPTR,X
- DEX
- BPL NEXTPOS0
- ZEROCTRS LDA #$00 ;ZERO ALL VOICE COUNTERS
- LDX #$05
- ZEROCTR0 STA VOICCTR,X
- DEX
- BPL ZEROCTR0
- CLEARACC LDX #$1F ;CLEAR ACCIDENTALS BY MOVING KEYSIG TO ACCID.
- CLEARAC0 LDA KEYSIG,X
- STA ACCID,X
- DEX
- BPL CLEARAC0
- RTS
- ;
- ;TABLES:
- ;MAP STAFF LINES TO MIDI NOTE #S.
- ;
- ;ORIGINAL NOTES (C MAJOR)
- CMAJOR DFB $00,$54,$53,$51,$4F,$4D,$4C,$4A
- DFB $48,$47,$45,$43,$41,$40,$3E,$3C
- DFB $3B,$39,$37,$35,$34,$32,$30,$2F
- DFB $2D,$2B,$29,$28,$26,$24,$00,$00
- ;
- ;CURRENT KEY SIGNATURE
- KEYSIG DFB $00,$54,$53,$51,$4F,$4D,$4C,$4A
- DFB $48,$47,$45,$43,$41,$40,$3E,$3C
- DFB $3B,$39,$37,$35,$34,$32,$30,$2F
- DFB $2D,$2B,$29,$28,$26,$24,$00,$00
- ;
- ;CURRENT KEY SIG WITH CURRENT ACCIDENTALS
- ACCID DFB $00,$54,$53,$51,$4F,$4D,$4C,$4A
- DFB $48,$47,$45,$43,$41,$40,$3E,$3C
- DFB $3B,$39,$37,$35,$34,$32,$30,$2F
- DFB $2D,$2B,$29,$28,$26,$24,$00,$00
- ;
- ;SHARP FLAT OFFSET TABLE (EX: 1 SHARP --> LINE 5)
- SHARPS DFB $00,$05,$01,$04,$07,$03,$06,$02
- FLATS DFB $00,$02,$06,$03,$07,$04,$01,$05
- ;
- ;VOICE OFFSET TABLE: (EX: VOICE 1 STATUS BYTE AT +$26, DATA BYTE AT +$39)
- STSOFF DFB $00,$26,$4C,$72,$98,$BE,$E4,$00
- DTAOFF DFB $13,$39,$5F,$85,$AB,$D1,$E4,$00
- ;
- CHN BSMW.SC1
-