>ScrSave/s  Screen saver : (OSBYTE=&FFF4:OSARGS=&FFDA 2OSFIND=&FFCE:OSFILE=&FFDD <OSBPUT=&FFD4:OSWORD=&FFF1 F addr=&AA Pmcode%=&FFFF08C0 Z: d P=0 1 n P%=mcode% x [OPT P*3 .palette .error 1BRK:EQUB 220:EQUS "Syntax: ScrSave ":BRK .start% LDA #1:LDY #0:LDX #&A8 JSR OSARGS !LDA (&A8),Y:CMP #13:BEQ error %LDA &A8:STA blk:LDA &A9:STA blk+1 LDA #0:LDX #255:JSR OSBYTE !CPX #2:BEQ notShad:BCS Master LDA #34:LDX #128:JSR OSBYTE LDA #111:LDX #128:JSR OSBYTE LDA #1:BNE notShad  .Master LDA &D0: #16:BEQ notShad LDA #108:LDX #1:JSR OSBYTE " LDA #2 , .notShad 6STA ScrFlag @%\LDA #135:\JSR OSBYTE:\\STY blk+6 J LDY &355 T&LDA himems,Y:STA blk+11:STA addr+1 ^TYA:LDX #6:LDY #3:JSR pall1 hLDA &360:CMP #4:BCC less4 r"LDA #3:LDX #2:LDY #7:JSR pall1 |LDA #0:STA addr:JSR pall2  .less4  LDA #0:JSR try_to_save_block LDA new_end+1:BPL shorter -LDA #&80:STA new_end+1:LDA #0:STA new_end !JSR CallOsfile:JMP SaveFinish  .shorter LDA blk+11:PHA LDA #0:STA blk+8:STA blk+9  JSR CallOsfile:\ Create file PLA:STA blk+11 LDX blk:LDY blk+1 !LDA #&80:JSR OSFIND:\ Openout JSR try_to_save_block JSR CloseFile \ Rewrite addresses LDX #3:.push_lp &#LDA blk+6,X:PHA:DEX:BPL push_lp 0LDA #2:JSR CallOsfile :LDX #&FC:.pull_lp D'PLA:STA blk+6-&FC,X:INX:BNE pull_lp NLDA #3:JSR CallOsfile X.SaveFinish bLDA ScrFlag:BEQ EndAll lCMP #2:BEQ EndMaster v LDA #111:LDX #192:JSR OSBYTE LDA #34:LDX #192:JMP OSBYTE .EndAll:RTS .EndMaster LDA #108:LDX #0:JMP OSBYTE : .CloseFile LDA #0:JMP OSFIND : .CallOsfile !LDX #blk 255:LDY #blk 256 JMP OSFILE \ #\ Find length and create a file .try_to_save_block  PHA:\ Save handle LDA blk+11:STA addr+1  STA new_end+1 *LDA #0:STA new_end:STA addr 4.save_loop >LDY #0:LDX #0:LDA (addr),Y H .save4 RINC addr:BNE save5 \INC addr+1:BMI save_end f .save5 pINX:BEQ save7 zCMP (addr),Y:BEQ save4  .save7 !STA A_temp:PLA:TAY:LDA A_temp JSR save_do_output:TYA:PHA JMP save_loop  .save_end !STA A_temp:PLA:TAY:LDA A_temp INX:JSR save_do_output RTS .save_do_output CPY #0:BEQ save_do_out2 JSR OSBPUT:TXA:JSR OSBPUT .save_do_out2 LDA new_end:CLC:ADC #2 STA new_end:LDA new_end+1 ADC #0:STA new_end+1:RTS : $ .osword11 .)LDX #palette 255:LDY #palette 256 8LDA #11:JSR OSWORD BLDA palette+1:RTS L .pall1 V STA blk,X ` .pall1a jASL blk,X:ROL blk+1,X tASL blk,X:ROL blk+1,X ~ASL blk,X:ROL blk+1,X TXA:PHA:STY palette JSR osword11:PLA:TAX LDA palette+1: #7 A blk,X:STA blk,X LDY palette:DEY:TYA  #3:CMP #3:BNE pall1a:RTS :  .pall2 LDA #8:STA palette:.pall2lp $JSR osword11:LDY #0:STA (addr),Y INC palette:JSR osword11 "ASL A:ASL A:ASL A:ASL A:LDY #0 A (addr),Y:STA (addr),Y  INC palette:INC addr #LDA palette:CMP #16:BNE pall2lp RTS (\ 2 .newbrk <JSR swapbrk:JSR SaveFinish FJMP (&202) P: Z .swapbrk d+LDA &202:LDX oldbrk:STX &202:STA oldbrk n/LDA &203:LDX oldbrk+1:STX &203:STA oldbrk+1 xRTS : .blk  EQUW 0 !EQUD &FFFF3000:EQUD &FFFF0000 EQUD &FFFF3000  .new_end EQUD &FFFF8000  .himems EQUB &30:EQUB &30:EQUB &30 EQUB &40:EQUB &58:EQUB &58 EQUB &60:EQUB &7C .ScrFlag:EQUB 0 .A_temp:EQUB 0  .oldbrk EQUW newbrk EQUS "v1.06":BRK "] ,;"*SAVE ScrSave ";~mcode%;" ";~P%;" ";~start%&FFFF0000