* write values into MEGA Audio config * then find the next .SYSTEM file and launch it ORG $2000 * relocate us to $1000 since we're going to * launch the next .SYSTEM file at $2000 LDY #02 LDX #00 RELO1 LDA RSTART+3,X RELO2 STA $1000,X INX BNE RELO1 DEY BEQ RSTART INC RELO1+2 INC RELO2+2 JMP RELO1 RSTART JMP $1000 * welcome to $1000 ORG $1000 STARTF LDA $CFFF LDA $C700 JSR WAKEUP ; wake up MEGA Audio JSR SAVE ; save parameters to card LDA #$2A STA $C0BA ; idk i think this unwakes it * now get ProDOS catalog block LDA $BF30 STA DEVID JSR $BF00 DB $80 DW GBPARMS * save volume name LDX #$04 LDA $1800,X AND #$0F STA OPATH LDA #$2F STA OPATH+1 LDY #00 SAVEVOL INY INX LDA $1800,X STA OPATH+1,Y CPY OPATH BNE SAVEVOL LDA #$2F INY STA OPATH+1,Y * start looking for .system files FIND LDA #$2B NEXT2 PHA TAX NX3 LDA $1800,X AND #$0F ; A=filename length CMP #7 ; don't bother if length < 7 BCS COMPARE ; (.SYSTEM) NEXT PLA CLC ADC #$27 BCC NEXT2 INC NX3+2 ; search all $200 of catalog LDA NX3+2 CMP #$1A BNE NEXT2 ; but just the one block LDA #$FF JSR $FDDA PLA ; get saved A off stack frame BRK ; couldn't find, die lol COMPARE STX OFFSET TAY COMPARE2 INX DEY BNE COMPARE2 ; x=offset of last character LDY #07 COMPARE3 LDA $1800,X CMP SYSTEM,Y BNE NEXT DEX DEY BEQ FOUND1 JMP COMPARE3 * found a .system file; compare against our full path * so we can find ourselves first FOUND1 LDY #07 FLOOP LDA $1800,X CMP OURNAME,Y BNE NEXT DEX DEY BNE FLOOP * found ourselves, so make next .system file be * the winner by jumping over this comparison LDA #$4C STA FOUND1 LDA #FOUND STA FOUND1+2 JMP NEXT * found the system file we want to launch FOUND PLA ; get old saved A off stack frame LDX #00 F3 LDA OPATH+1,X BEQ F2 INX JMP F3 F2 TXA ; x=offset to end of /volname/ CLC ADC FCOPY2+1 STA FCOPY2+1 ; save offset for appending path BCC F4 INC FCOPY2+2 ; inc if we crossed a page F4 LDA OFFSET STA FCOPY+1 ; save offset for reading filename TAX LDA $1800,X AND #$0F CLC ADC OPATH CLC ADC #02 ; add 2 chars for slashes STA OPATH ; save combined length byte TAY LDX #01 FCOPY LDA $1800,X FCOPY2 STA OPATH,X INX DEY BNE FCOPY JSR $BF00 DB $C8 DW OPARMS LDA OREF STA RREF STA CREF JSR $BF00 DB $CA DW RPARMS JSR $BF00 DB $CC DW CPARMS * launch the next program JMP $2000 OFFSET DB 00 OURNAME ASC 'AMEGASET' SYSTEM ASC 'A.SYSTEM' * parameters for ProDOS READ_BLOCK call GBPARMS DB 03 DEVID DB 05 DW $1800 DW $0002 * parameters for ProDOS OPEN call OPARMS DB 03 DW OPATH DW $1800 OREF DB 00 * parameters for ProDOS READ call RPARMS DB 04 RREF DB 00 DW $2000 DW $FFFF DW $0000 * parameters for ProDOS CLOSE call CPARMS DB 01 CREF DB 00 * storage for path to open OPATH DS 36 * MEGA Audio stuff here * from a disassembly I did of the * card ROM at $c800 SAVE LDX #00 SVLP STX $C0BE LDA CONFIG,X STA $C0BF INX CPX #$0A BNE SVLP WAKEUP LDA #$A2 STA $C0BA STA $C0BA STA $C0BA STA $C0BA STA $C0BA STA $C0BB RTS CONFIG * slot assignments 0-7 * $1 for Mockingboard * $2 for second Mockingboard * $3 for ALF * $4 for S.A.M. DB $00 DB $00 DB $00 DB $00 DB $00 DB $00 DB $01 * output: $FF for Mono, $00 for Stereo DB $00 * light: $FF for On, $00 for off DB $FF * volume: $00 (mute) - $0F (max) DB $04