1 > SoundTo/src v0.01 20-Jan-2019 J.G.Harston  Redirect SOUND to file : ( mcode% &200 2load%=&FFFF09D8 <OSWORD=&FFF1:OSARGS=&FFDA FOSFIND=&FFCE:OSGBPB=&FFD1 PwordV=&20C Z: d P=0 1 nP%=load%:O%=mcode% x[OPT P*3+4 .errCantOpen +BRK:EQUB 192:EQUS "Can't open file":BRK : .go% %LDA #1:LDX #&A8:LDY #0:JSR OSARGS #LDA (&A8),Y:CMP #13:BNE SoundOn ,\ Should check if SoundTo is actually on !LDA #0:LDY channel:JSR OSFIND LDA oldWordV+0:STA wordV+0 LDA oldWordV+1:STA wordV+1 RTS .SoundOn 'LDX &A8:LDY &A9:LDA #&80:JSR OSFIND #TAY:BEQ errCantOpen:STA channel  PHP:SEI LDA wordV+0:STA oldWordV+0 "LDA wordV+1:STA oldWordV+1 ,"LDA #newWord 255:STA wordV+0 6"LDA #newWord 256:STA wordV+1 @ PLP:RTS J: T .newWord ^CMP #7:BEQ SoundTo :\ SOUND h"CMP #8:BEQ SoundTo :\ ENVELOPE r .oldWord |JMP (oldWordV)  .SoundTo PHA:TYA:PHA:TXA:PHA LDA waiting:BNE running LDX #time0 255 LDY #time0 256 -LDA #1:JSR oldWord :\ Read start TIME -LDA #0:STA buffer+0 :\ Initial delta=0 STA buffer+1:BEQ started :  .running LDX #buffer 255 LDY #buffer 256 /LDA #1:JSR oldWord :\ Read current TIME LDX #0:SEC .timedelta )LDA buffer,X:SBC time0,X:STA buffer,X &INX:TXA: #2:BNE timedelta 0 .started :TSX DLDA &101,X:STA &F0 NLDA &102,X:STA &F1 X"LDA &103,X:CMP #8:BEQ envelope b: l'LDY #1:LDA (&F0),Y :\ %000h00ss v8CMP #&20:BCS exit :\ Not internal SOUND command 'ASL A:ASL A :\ %0h00ss00 &DEY:A (&F0),Y :\ %000f00cc &A #&80:STA bufferD+0 :\ %1h0fsscc 7LDX #bufferD-buffer :\ %1xxxxxxx indicates SOUND  .soundlp .INY:INY:LDA (&F0),Y :\ Copy vol,pit,dur INX:STA buffer,X CPY #8:BNE soundlp ,TXA:BNE output :\ Number to save :  .envelope  LDY #13 .envelopelp LDA (&F0),Y:STA bufferD,Y  3DEY:BPL envelopelp :\ %0000nnnn indicates ,LDA #16 :\ Number to save  : * .output 4,STA gbpb+5 :\ count >,LDA #buffer 255:STA gbpb+1 :\ address H.LDA channel:STA gbpb+0 :\ channel R#LDX #gbpb 255:LDY #gbpb 256 \!LDA #1:STA waiting:JSR OSGBPB f\ p .exit zPLA:TAX:PLA:TAY:PLA JMP oldWord :  .waiting  EQUB 0 :  .time0  EQUW 0 :  .buffer EQUW 0 :\ time delta  .bufferD "EQUD 0 :\ SOUND/ENVELOPE data EQUD 0 :\ ENVELOPE data EQUD 0 :\ ENVELOPE data EQUW 0 :\ ENVELOPE data : $ .gbpb .EQUB 0 :\ channel 8EQUW buffer :\ address BEQUW &FFFF :\ I/O address LEQUD 8 :\ count VEQUD 0 :\ offset `: j] tchannel=P% ~oldWordV=P%+1  )(P%&FFFF)+3>&B00:"Code over-run": E " *SAVE SoundTo ";~mcode%;" ";~O%;" ";~go%&FFFF0000;" ";~load%