REM >A.SLOADAS
REM Source code for SLOAD
REM 2byte screen decompactor
REM by Greg Cook 20/Jun/1999
IFPAGE<&1A00THENSTOP
code=&1900
osArgs=&FFDA
osBget=&FFD7
osByte=&FFF4
osFind=&FFCE
argBlock=&82
screenPtr=&80
blockCount=&82
fillByte=&84
FOR pass=0TO3STEP3
P%=code
[OPT pass
LDA #132
JSR osByte
STX screenPtr
STY screenPtr+1
LDY #0
LDA #1
LDX #argBlock
JSR osArgs
LDX argBlock
LDY argBlock+1
LDA #64
JSR osFind
TAX
.startBlock
JSR getByte
STA blockCount
JSR getByte
PHA
AND #&7F
STA blockCount+1
PLA
BMI fillBlock
.copyBlock
JSR getByte
JSR writeByteAndIncrement
BNE copyBlock
.testLoop
LDA screenPtr+1
BPL startBlock
TXA
TAY
LDA#0
JMP osFind
 
.fillBlock
JSR getByte
STA fillByte
.fillLoop
LDA fillByte
JSR writeByteAndIncrement
BNE fillLoop
BEQ testLoop
 
.getByte
TXA
TAY
JSR osBget
.badBlock
LDY #0
RTS
 
.writeByteAndIncrement
STA (screenPtr),Y
INC screenPtr
BNE noCarry
INC screenPtr+1
BMI badBlock
.noCarry
LDA blockCount
SEC
SBC #1
STA blockCount
BCS noBorrow
DEC blockCount+1
.noBorrow
ORA blockCount+1
RTS
]
NEXT
OSCLI "SAVE SLOAD "+STR$~(code)+" "+STR$~(P%)
