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