This commit is contained in:
Antoine Vignau 2024-02-20 21:37:01 +01:00
parent 3edc17e527
commit 9170c2cbdd
16 changed files with 65553 additions and 217 deletions

Binary file not shown.

View File

@ -0,0 +1,16 @@
*
* Lode Runner
* (c) 1983, Broderbund Software
* (s) 2014, Brutal Deluxe Software
*
*-----------------------------------
*
*-----------------------------------
ptrUNPACK ent
ds 32768
ptrBACKGND ent
ds 32768

View File

@ -0,0 +1,16 @@
*
* Lode Runner
* (c) 1983, Broderbund Software
* (s) 2014, Brutal Deluxe Software
*
*-----------------------------------
*
*-----------------------------------
ptrIMAGE ent
ds 32768
ptrTITLE ent
ds 32768

View File

@ -0,0 +1,12 @@
*
* Lode Runner
* (c) 1983, Broderbund Software
* (s) 2014, Brutal Deluxe Software
*
*-----------------------------------
*
*-----------------------------------
ptrLEVELS ent
ds 65536

View File

@ -400,36 +400,59 @@ L62F7 INC fgODDEVEN
* LOAD/SAVE LEVEL FROM/TO DISK * LOAD/SAVE LEVEL FROM/TO DISK
*----------------------------------- *-----------------------------------
diskLEVEL STA LB7F4 diskLEVEL tax
LDA fgDEMO ; are we in demo mode? LDA fgDEMO ; are we in demo mode?
LSR LSR
BEQ diskDEMO ; yes BEQ diskDEMO ; yes
LDA intLEVEL ; no, use internal level cpx #1
LSR beq dlLOAD
LSR cpx #2
LSR bne dlERR
LSR
CLC
ADC #$03
STA LB7EC ; track
LDA intLEVEL
AND #$0F
STA LB7ED ; sector
LDA #<levelDISK ; buffer jmp saveLEVELS ; save all levels
STA LB7F0
LDA #>levelDISK
STA LB7F0+1
LDA #$00
STA LB7EB
diskRWTS LDY #<LB7E8 dlLOAD rep #$30 ; load a level
LDA #>LB7E8 pea ^ptrLEVELS
jsr callRWTS ; LoGo - JSR $0023 - Souvenir from protection lda intLEVEL
BCC L6344 and #$ff
JMP showTITLEPAGE xba
L6344 RTS pha
PushLong #levelDISK
PushLong #256
_BlockMove
sep #$30
rts
dlERR jmp showTITLEPAGE
* STA LB7F4
* LDA intLEVEL ; no, use internal level
* LSR
* LSR
* LSR
* LSR
* CLC
* ADC #$03
* STA LB7EC ; track
* LDA intLEVEL
* AND #$0F
* STA LB7ED ; sector
*
* LDA #<levelDISK ; buffer
* STA LB7F0
* LDA #>levelDISK
* STA LB7F0+1
* LDA #$00
* STA LB7EB
*
*diskRWTS LDY #<LB7E8
* LDA #>LB7E8
* jsr callRWTS ; LoGo - JSR $0023 - Souvenir from protection
* BCC L6344
* JMP showTITLEPAGE
*L6344 RTS
diskDEMO LDA theLEVEL ; demo mode uses levels in RAM diskDEMO LDA theLEVEL ; demo mode uses levels in RAM
CLC CLC
@ -444,33 +467,38 @@ L6350 LDA (ptrHGR1),Y
RTS RTS
*------------------------------- *-------------------------------
* CALL RWTS * READ/WRITE SCORE FILE
*------------------------------- *-------------------------------
readSCORE STA LB7F4 ; command readSCORE cmp #1 ; load scores file from disk
LDA #$0C beq rsLOAD
STA LB7EC ; track cmp #2 ; save scores file to disk
LDA #$0F bne rsERR
STA LB7ED ; sector
ldx #0 ; **logo**
]lp lda scoreREF,x
sta scorebuf,x
inx
bne ]lp
beq L6381
LDA #<scorebuf ; where to load jsr saveSCORES
STA LB7F0 bra L6381
LDA #>scorebuf
STA LB7F0+1 rsLOAD jsr loadSCORES
LDA #$00 bra L6381
STA LB7EB
LDY #<LB7E8 ; IOB table * STA LB7F4 ; command
LDA #>LB7E8 * LDA #$0C
JSR callRWTS * STA LB7EC ; track
BCC L6381 * LDA #$0F
JMP showTITLEPAGE * STA LB7ED ; sector
*
* LDA #<scorebuf ; where to load
* STA LB7F0
* LDA #>scorebuf
* STA LB7F0+1
* LDA #$00
* STA LB7EB
* LDY #<LB7E8 ; IOB table
* LDA #>LB7E8
* JSR callRWTS
* BCC L6381
rsERR JMP showTITLEPAGE
*--- Check disk (not a LR disk, data disk, master disk) *--- Check disk (not a LR disk, data disk, master disk)
@ -485,18 +513,20 @@ L6387 LDA scorebuf+$F4,Y ; magic key
BPL L6387 BPL L6387
LDA theMASK1 LDA theMASK1
BEQ L639B BEQ L639B
LDA #$00 ; 0 means not a LR disk LDA #$00 ; 00 means not a LR disk
RTS RTS
L639B LDA #$01 ; master disk L639B LDA #$01 ; 01 master disk
LDX scorebuf+$FF LDX scorebuf+$FF
BNE L63A4 BNE L63A4
LDA #$FF ; FF means master disk LDA #$FF ; FF means data disk
L63A4 RTS L63A4 RTS
callRWTS clc *-----------------------------------
rts
JMP $bd00 ; LoGo - ($0036) to be replaced with JMP $BD00 *callRWTS JMP $bd00 ; LoGo - ($0036) to be replaced with JMP $BD00
LB7F4 ds 1 ; The RWTS command
L63A8 ASC "LODE RUNNER" L63A8 ASC "LODE RUNNER"
@ -3990,9 +4020,7 @@ L7CD5 JMP editNEXT
* M - MOVE LEVEL * M - MOVE LEVEL
*------------------------------- *-------------------------------
editMOVE jmp editLOOP ; **logo** editMOVE JSR printSTRING
JSR printSTRING
ASC 8D ASC 8D
ASC ">>MOVE LEVEL"00 ASC ">>MOVE LEVEL"00
JSR inputLEVEL JSR inputLEVEL
@ -4003,108 +4031,137 @@ editMOVE jmp editLOOP ; **logo**
JSR inputLEVEL JSR inputLEVEL
BCS L7D5A BCS L7D5A
STY L8250 STY L8250
JSR printSTRING
ASC 8D * JSR printSTRING
ASC " SOURCE DISKETTE"00 * ASC 8D
JSR editWAITKEY * ASC " SOURCE DISKETTE"00
JSR checkDISK * JSR editWAITKEY
LDA L824F * JSR checkDISK
STA intLEVEL * LDA L824F
LDA #$01 ; read * STA intLEVEL
JSR diskLEVEL * LDA #$01 ; read
JSR printSTRING * JSR diskLEVEL
ASC 8D * JSR printSTRING
ASC " DESTINATION DISKETTE"00 * ASC 8D
JSR editWAITKEY * ASC " DESTINATION DISKETTE"00
JSR checkDISK * JSR editWAITKEY
LDA L8250 * JSR checkDISK
STA intLEVEL * LDA L8250
LDA #$02 ; write * STA intLEVEL
JSR diskLEVEL * LDA #$02 ; write
* JSR diskLEVEL
jsr iigsMOVELEVEL
JMP editLOOP JMP editLOOP
L7D5A JMP editNEXT L7D5A JMP editNEXT
*------------------------------- *-------------------------------
* I - INITIALIZE DISKETTE
mx %00
iigsMOVELEVEL
rep #$30
pea ^ptrLEVELS ; set source level
lda L824F
and #$ff
xba
pha
pea ^ptrLEVELS ; set destination level
lda L8250
and #$ff
xba
pha
PushLong #256 ; set length
_BlockMove
jmp saveLEVELS ; save levels and return 8-bit
mx %11
*-------------------------------
* I - INITIALIZE DISKETTE => CLEAR LEVELS
*------------------------------- *-------------------------------
editINIT jmp editLOOP ; **logo** editINIT jmp editLOOP
* JSR printSTRING
JSR printSTRING * ASC 8D
ASC 8D * ASC ">>INITIALIZE"8D
ASC ">>INITIALIZE"8D * ASC " THIS FORMATS THE DISKETTE"8D
ASC " THIS FORMATS THE DISKETTE"8D * ASC " FOR USER CREATED LEVELS."8D
ASC " FOR USER CREATED LEVELS."8D * ASC " (CAUTION. IT ERASES THE"8D
ASC " (CAUTION. IT ERASES THE"8D * ASC " ENTIRE DISKETTE FIRST)"8D8D
ASC " ENTIRE DISKETTE FIRST)"8D8D * ASC " ARE YOU SURE (Y/N) "00
ASC " ARE YOU SURE (Y/N) "00 * JSR editWAITKEY
JSR editWAITKEY * CMP #chrY
CMP #chrY * BNE L7E72
BNE L7E72 * NOP ; NOP
NOP ; NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * NOP
NOP * LDA intLEVEL
LDA intLEVEL * PHA
PHA * LDA #$04 ; Init command
LDA #$04 ; Init command * JSR diskLEVEL
JSR diskLEVEL *
* LDA #<boot ; Save T0/S0
LDA #<boot ; Save T0/S0 * STA LB7F0
STA LB7F0 * LDA #>boot
LDA #>boot * STA LB7F0+1
STA LB7F0+1 * LDA #$00
LDA #$00 * STA LB7ED
STA LB7ED * STA LB7EC
STA LB7EC * LDA #$02
LDA #$02 * STA LB7F4
STA LB7F4 * JSR diskRWTS
JSR diskRWTS * LDA #$E0
LDA #$E0 * STA intLEVEL
STA intLEVEL * LDA #$01
LDA #$01 * JSR diskLEVEL
JSR diskLEVEL * LDY #$37
LDY #$37 *L7E33 LDA L8251,Y
L7E33 LDA L8251,Y * STA levelDISK,Y
STA levelDISK,Y * DEY
DEY * BPL L7E33
BPL L7E33 * LDA #$02
LDA #$02 * JSR diskLEVEL
JSR diskLEVEL * LDA #$EF
LDA #$EF * STA intLEVEL
STA intLEVEL * LDA #$01
LDA #$01 * JSR diskLEVEL
JSR diskLEVEL * LDY #$20
LDY #$20 *L7E4C LDA L8289,Y
L7E4C LDA L8289,Y * STA levelDISK+$B,Y
STA levelDISK+$B,Y * DEY
DEY * BPL L7E4C
BPL L7E4C * LDA #$02
LDA #$02 * JSR diskLEVEL
JSR diskLEVEL * LDA #$01
LDA #$01 * JSR readSCORE
JSR readSCORE * LDY #$0A
LDY #$0A *L7E61 LDA L63A8,Y
L7E61 LDA L63A8,Y * STA scorebuf+$F4,Y
STA scorebuf+$F4,Y * DEY
DEY * BPL L7E61
BPL L7E61 * LDA #$02
LDA #$02 * JSR readSCORE
JSR readSCORE * PLA
PLA * STA intLEVEL
STA intLEVEL *L7E72 JMP editLOOP
L7E72 JMP editLOOP
*------------------------------- *-------------------------------
* C - CLEAR SCORE FILE * C - CLEAR SCORE FILE
@ -4551,8 +4608,8 @@ L824C RTS
L824D RTS L824D RTS
L824E DB $85 L824E DB $85
L824F DB $0F L824F DB $0F ; level from
L8250 DB $60 L8250 DB $60 ; level to
L8251 HEX 02110F040000FE000000000000000000 L8251 HEX 02110F040000FE000000000000000000
HEX 00000000000000000000000000000000 HEX 00000000000000000000000000000000
@ -5438,16 +5495,16 @@ getXY LDA ytable,Y ; in: board X/Y
TAY TAY
RTS RTS
getBYBI LDA bytable,X getBYBI LDA bytable,X ; in: board X
PHA PHA ; out: A: HGR column (0..39)
LDA bitable,X LDA bitable,X ; X: sprite table (0..6)
TAX TAX
PLA PLA
RTS RTS
getXBYBI LDA xbytable,X getXBYBI LDA xbytable,X ; in: X: HGR x-coord
PHA PHA ; out: A: HGR column (0..39)
LDA xbitable,X LDA xbitable,X ; X: sprite table (0..6)
TAX TAX
PLA PLA
RTS RTS

View File

@ -729,23 +729,24 @@ xbitable DB $00 ; 0..4: sprite is 2-col wide
DB $05 DB $05
*--- Boot 1 of data disks (T0/S0) *--- Boot 1 of data disks (T0/S0)
*
*boot HEX 012058FC2093FE2089FEA000B93408F0
* HEX 0E20F0FDC98DD004A9098524C8D0EDA6
* HEX 2B9D88C08A4A4A4A4A09C08D3308200C
* HEX FD4C00C68D8D8D8D8D8D8DCCCFC4C5A0
* HEX D2D5CECEC5D2A0C4C1D4C1A0C4C9D3CB
* HEX BA8DADADADADADADADADADADADADADAD
* HEX ADADADADADADADAD8D8DC4C9D3CBC5D4
* HEX D4C5A0D7C9CCCCA0CECFD4A0C2CFCFD4
* HEX 8D8DA0C9CED3C5D2D4A0CEC5D7A0C4C9
* HEX D3CBA0C1CEC48DA0C8C9D4A0C1A0CBC5
* HEX D9A0D4CFA0D2C5C2CFCFD48D8DA0A0A0
* HEX A0A0A0A0A0A0A0000000000000000000
* HEX 00000000000000000000000000000000
* HEX 00000000000000000000000000000000
* HEX 00000000000000000000000000000000
* HEX 00000000000000000000000000000000
boot HEX 012058FC2093FE2089FEA000B93408F0
HEX 0E20F0FDC98DD004A9098524C8D0EDA6
HEX 2B9D88C08A4A4A4A4A09C08D3308200C
HEX FD4C00C68D8D8D8D8D8D8DCCCFC4C5A0
HEX D2D5CECEC5D2A0C4C1D4C1A0C4C9D3CB
HEX BA8DADADADADADADADADADADADADADAD
HEX ADADADADADADADAD8D8DC4C9D3CBC5D4
HEX D4C5A0D7C9CCCCA0CECFD4A0C2CFCFD4
HEX 8D8DA0C9CED3C5D2D4A0CEC5D7A0C4C9
HEX D3CBA0C1CEC48DA0C8C9D4A0C1A0CBC5
HEX D9A0D4CFA0D2C5C2CFCFD48D8DA0A0A0
HEX A0A0A0A0A0A0A0000000000000000000
HEX 00000000000000000000000000000000
HEX 00000000000000000000000000000000
HEX 00000000000000000000000000000000
HEX 00000000000000000000000000000000
ds \ ds \
*--- $1F00 - Score buffer *--- $1F00 - Score buffer
@ -785,4 +786,37 @@ scoreREF hex CED5C71C00173125
hex 0000000000000000 hex 0000000000000000
hex 0000000000000000 hex 0000000000000000
hex 00000000CCCFC4C5A0D2D5CECEC5D2 hex 00000000CCCFC4C5A0D2D5CECEC5D2
hex FF ; <= the tag hex 00 ; <= data disk
scoreEMPTY hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 0000000000000000
hex 00000000CCCFC4C5A0D2D5CECEC5D2
hex 00 ; <= data disk

View File

@ -149,6 +149,9 @@ fgKEYBTN0 = $ac ; 1: no key/btn0 pressed, 0: key/btn0 pressed
fgCHANGE = $ad ; 1: no change, 0: change fgCHANGE = $ad ; 1: no change, 0: change
sprDATA = $df ; $df..$ff sprDATA = $df ; $df..$ff
Debut = $e0 ; the good old DP variables
Arrivee = Debut+4
chrLA = $88 chrLA = $88
chrRET = $8d chrRET = $8d
chrRA = $95 chrRA = $95

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1 @@
LR.CODE=Type(00),AuxType(0000),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)
LodeRunner=Type(B3),AuxType(DB00),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000) LodeRunner=Type(B3),AuxType(DB00),VersionCreate(70),MinVersion(BE),Access(E3),FolderInfo1(000000000000000000000000000000000000),FolderInfo2(000000000000000000000000000000000000)

View File

@ -1,8 +1,7 @@
* *
* La Belle Zohra * Lode Runner
* * (c) 1983, Broderbund Software
* (c) 1992, François Coulon * (s) 2014, Brutal Deluxe Software
* (c) 2023, Antoine Vignau & Olivier Zardini
* *
mx %00 mx %00
@ -35,8 +34,15 @@
*----------------------------------- Constantes *----------------------------------- Constantes
ext ptrUNPACK
ext ptrBACKGND
ext ptrIMAGE
ext ptrTITLE
ext ptrLEVELS
*-------------- Softswitches *-------------- Softswitches
RDVBLBAR = $e0c019
GSOS = $e100a8 GSOS = $e100a8
*-------------- GUI *-------------- GUI
@ -49,13 +55,15 @@ refIsPointer = 0
refIsHandle = 1 refIsHandle = 1
refIsResource = 2 refIsResource = 2
appleKey = $0100 ptr012000 = $012000
mouseDownEvt = $0001 ptrE12000 = $e12000
mouseUpEvt = $0002
keyDownEvt = $0003
ptrSCREENE1 = $e02000 ptrSCREENE1 = $e02000
*---
TRUE = 255
FALSE = 0
*----------------------------------- Entry point *----------------------------------- Entry point
phk phk
@ -76,6 +84,95 @@ ptrSCREENE1 = $e02000
tdc tdc
sta myDP sta myDP
*--- Version du systeme
jsl GSOS
dw $202a
adrl proVERS
lda proVERS+2
and #%01111111_11111111
cmp #$0402
bcs okVERS
pha
PushLong #verSTR1
PushLong #verSTR2
PushLong #errSTR1
PushLong #errSTR2
_TLTextMountVolume
pla
brl meQUIT1
*--- Compacte la mémoire
okVERS PushLong #0
PushLong #$8fffff
PushWord myID
PushWord #%11000000_00000000
PushLong #0
_NewHandle
_DisposeHandle
_CompactMem
*--- Chargement des outils
pha
pha
PushWord mainID
PushWord #refIsResource
PushLong #1
_StartUpTools
PullLong SStopREC
bcc okTOOL
pha
PushLong #tolSTR1
PushLong #errSTR2
PushLong #errSTR1
PushLong #errSTR2
_TLTextMountVolume
pla
brl meQUIT1
*--- Test default shadowing...
okTOOL PushWord #0
_GetMasterSCB
pla
bmi okSHADOW ; shadowing is on if bit 15 is set
lda #^ptrE12000 ; shadowing is off, use slow RAM
sta ptrSCREEN+2
*--- Et la musique...
okSHADOW pha
_SoundToolStatus
pla
bne noSOUND
lda #1
sta fgSND
noSOUND _HideMenuBar
_InitCursor
_HideCursor
PushWord #0
PushWord #%11111111_11111111
PushWord #0
_FlushEvents
pla
PushLong #0
PushWord #5 ; SetDeskPat
PushWord #$4000
PushWord #$0000
_Desktop
pla
pla
*----------------------------------- Exit point *----------------------------------- Exit point
lda #theGAME lda #theGAME
@ -83,20 +180,247 @@ ptrSCREENE1 = $e02000
lda #^theGAME lda #^theGAME
stal $302 stal $302
sep #$30 ldx #256-2 ; efface la page directe
]lp stz $00,x
dex
dex
bpl ]lp
lda #^ptrSCREENE1 sep #$30 ; MAJ le banc des pages
lda ptrSCREEN+2
sta ptrDATA+2 sta ptrDATA+2
sta ptrHGR1+2 sta ptrHGR1+2
sta ptrHGR2+2 sta ptrHGR2+2
brl theGAME brl theGAME
*----------------------------------- Exit point *-----------------------------------
* AUTRES ROUTINES
*-----------------------------------
rep #$30 *----------------------------------- Open LEVELS
doLOAD jsr saveBACK
PushWord #30
PushWord #43
PushLong #strLOADFILE
PushLong #0
PushLong #typeLIST
PushLong #replyPTR
_SFGetFile
jsr loadBACK
PushWord myID lda replyPTR
bne doLOAD1
rts
doLOAD1 jsr copyPATH
jsr loadLEVELS
jmp loadSCORES
*----------------------------------- Save
doSAVE jsr saveBACK
PushWord #25
PushWord #36
PushLong #strSAVEFILE
PushLong #namePATH
PushWord #15
PushLong #replyPTR
_SFPutFile
jsr loadBACK
lda replyPTR
bne doSAVE1
rts
doSAVE1 jsr copyPATH
jsr saveLEVELS
jmp saveSCORES
*--- Recopie le filename du fichier de sauvegarde
copyPATH sep #$20
ldx #16-1
]lp lda namePATH1,x
sta pLEVELS+4,x
sta pSCORES+4,x
dex
bpl ]lp
lda namePATH
inc ; add 2 chars
inc ; for '1/'
sta pLEVELS
rep #$20
rts
*----------------------------------- Load/Save LEVELS/SCORES
mx %00
*---------------------- Load LEVELS
loadLEVELS rep #$30
jsl GSOS
dw $2010
adrl proOPEN
bcs loadLEVELS9
lda proOPEN+2
sta proREAD+2
sta proCLOSE+2
jsl GSOS
dw $2012
adrl proREAD
php
jsl GSOS
dw $2014
adrl proCLOSE
plp
bcs loadLEVELS9
sep #$30
rts
mx %00
loadLEVELS9 ldx #0 ; clear all levels
txa
]lp stal ptrLEVELS,x
inx
inx
cpx #38400
bcc ]lp
sep #$30
rts
mx %00
*---------------------- Save LEVELS
saveLEVELS rep #$30
jsl GSOS
dw $2002
adrl proDESTROY
jsl GSOS
dw $2001
adrl proCREATE
bcs saveLEVELS9
jsl GSOS
dw $2010
adrl proOPEN
bcs saveLEVELS9
lda proOPEN+2
sta proWRITE+2
sta proCLOSE+2
jsl GSOS
dw $2013
adrl proWRITE
jsl GSOS
dw $2014
adrl proCLOSE
saveLEVELS9 sep #$30
rts
mx %00
*---------------------- Load SCORES
loadSCORES rep #$30
jsl GSOS
dw $2010
adrl proOPENSCORES
bcs loadSCORES9
lda proOPENSCORES+2
sta proREADSCORES+2
sta proCLOSE+2
jsl GSOS
dw $2012
adrl proREADSCORES
php
jsl GSOS
dw $2014
adrl proCLOSE
plp
bcs loadSCORES9
sep #$30
rts
mx %00
loadSCORES9 ldx #256-2
]lp lda scoreEMPTY,x
sta scorebuf,x
dex
dex
bpl ]lp
sep #$30
rts
mx %00
*---------------------- Save SCORES
saveSCORES rep #$30
jsl GSOS
dw $2002
adrl proDESTROYSCORES
jsl GSOS
dw $2001
adrl proCREATESCORES
bcs saveSCORES9
jsl GSOS
dw $2010
adrl proOPENSCORES
bcs saveSCORES9
lda proOPENSCORES+2
sta proWRITESCORES+2
sta proCLOSE+2
jsl GSOS
dw $2013
adrl proWRITESCORES
jsl GSOS
dw $2014
adrl proCLOSE
saveSCORES9 sep #$30
rts
mx %00
*----------------------------------- Quit
meQUIT PushWord #refIsHandle
PushLong SStopREC
_ShutDownTools
meQUIT1 PushWord myID
_DisposeAll _DisposeAll
PushWord mainID PushWord mainID
@ -111,43 +435,265 @@ ptrSCREENE1 = $e02000
dw $2029 dw $2029
adrl proQUIT adrl proQUIT
brk $bd
*---------------------------------------- *----------------------------------------
* MEMOIRE * GFX
*---------------------------------------- *----------------------------------------
make64KB pha *----------------------------
pha * unpackLZ4
PushLong #$010000 * Unpacks a LZ4 file
PushWord myID * Uses the two pointers:
PushWord #%11000000_00011100 * - ptrUNPACK: packed img (MUST BE AT $0000)
PushLong #0 * - ptrIMAGE: temp unpack zone
_NewHandle *
phd * Entry:
tsc * A: packed data size
tcd *
lda [3] * Exit:
tax ; low in X * lenDATA: unpacked data size
ldy #2 *
lda [3],y *----------------------------
txy ; low in Y
tax ; high in X mx %00
pld
pla ; we do not keep track of the handle unpackLZ4 sta LZ4_Limit+1
pla sep #$20
lda ptrUNPACK+2 ; Source
sta LZ4_Literal_3+2
sta LZ4_ReadToken+3
sta LZ4_Match_1+3
sta LZ4_GetLength_1+3
lda ptrIMAGE+2 ; Destination
sta LZ4_Literal_3+1
sta LZ4_Match_5+1
sta LZ4_Match_5+2
rep #$20
*--
ldy #0 ; Init Target unpacked Data offset
ldx #16 ; Offset after header
LZ4_ReadToken
LDAL $AA0000,X ; Read Token Byte
INX
STA LZ4_Match_2+1
*----------------
LZ4_Literal
AND #$00F0 ; >>> Process Literal Bytes <<<
BEQ LZ4_Limit ; No Literal
CMP #$00F0
BNE LZ4_Literal_1
JSR LZ4_GetLengthLit ; Compute Literal Length with next bytes
BRA LZ4_Literal_2
LZ4_Literal_1
LSR ; Literal Length use the 4 bit
LSR
LSR
LSR
LZ4_Literal_2
DEC ; Copy A+1 Bytes
LZ4_Literal_3
MVN $AA,$BB ; Copy Literal Bytes from packed data buffer
PHK ; X and Y are auto incremented
PLB
*----------------
LZ4_Limit CPX #$AAAA ; End Of Packed Data buffer ?
BEQ LZ4_End
*----------------
LZ4_Match TYA ; >>> Process Match Bytes <<<
SEC
LZ4_Match_1 SBCL $AA0000,X ; Match Offset
INX
INX
STA LZ4_Match_4+1
LZ4_Match_2 LDA #$0000 ; Current Token Value
AND #$000F
CMP #$000F
BNE LZ4_Match_3
JSR LZ4_GetLengthMat ; Compute Match Length with next bytes
LZ4_Match_3 CLC
ADC #$0003 ; Minimum Match Length is 4 (-1 for the MVN)
PHX
LZ4_Match_4 LDX #$AAAA ; Match Byte Offset
LZ4_Match_5 MVN $BB,$BB ; Copy Match Bytes from unpacked data buffer
PHK ; X and Y are auto incremented
PLB
PLX
BRA LZ4_ReadToken
*----------------
LZ4_GetLengthLit
LDA #$000F ; Compute Variable Length (Literal or Match)
LZ4_GetLengthMat
STA LZ4_GetLength_2+1
LZ4_GetLength_1
LDAL $AA0000,X ; Read Length Byte
INX
AND #$00FF
CMP #$00FF
BNE LZ4_GetLength_3
CLC
LZ4_GetLength_2
ADC #$000F
STA LZ4_GetLength_2+1
BRA LZ4_GetLength_1
LZ4_GetLength_3
ADC LZ4_GetLength_2+1
RTS
*----------------
LZ4_End sty lenDATA ; Y = length of unpacked data
rts
*---
lenDATA ds 4
*-----------------------------------
* SAVE THE SHR SCREEN
*-----------------------------------
saveBACK _HideCursor
PushLong ptrSCREEN
PushLong #ptrBACKGND
PushLong #32768
_BlockMove
exitBACK _ShowCursor
rts
*-----------------------------------
* RESTORE THE SHR SCREEN
*-----------------------------------
loadBACK _HideCursor
PushLong #ptrBACKGND
PushLong ptrSCREEN
PushLong #32768
_BlockMove
_ShowCursor
rts rts
*---------------------------------------- *----------------------------------------
* DATA * DATA
*---------------------------------------- *----------------------------------------
fgSND ds 2
*----------------------- Tool locator
verSTR1 str 'System 6.0.1 Required!'
verSTR2 str 'Press a key to quit'
tolSTR1 str 'Error while loading tools'
memSTR1 str 'Cannot allocate memory'
filSTR1 str 'Cannot load file'
errSTR1 str 'Quit'
errSTR2 str ''
errSTR3 str 'Continue'
*----------------------- Memory manager *----------------------- Memory manager
mainID ds 2 ; app ID mainID ds 2 ; app ID
myID ds 2 ; user ID myID ds 2 ; user ID
myDP ds 2 myDP ds 2
SStopREC ds 4
ptrSCREEN adrl ptr012000
*----------------------- GS/OS *----------------------- GS/OS
*--- LEVELS
proCREATE dw 7 ; pcount
adrl pLEVELS ; pathname
dw $c3 ; access_code
dw $5d ; file_type
adrl $8022 ; aux_type
ds 2 ; storage_type
adrl 38400 ; eof
ds 4 ; resource_eof
proDESTROY dw 1 ; pcount
adrl pLEVELS ; pathname
proOPEN dw 2
ds 2
adrl pLEVELS
proREAD dw 4 ; 0 - nb parms
ds 2 ; 2 - file id
adrl ptrLEVELS ; 4 - pointer
adrl 38400 ; 8 - length
ds 4 ; C - length read
proWRITE dw 5 ; 0 - pcount
ds 2 ; 2 - ref_num
adrl ptrLEVELS ; 4 - data_buffer
adrl 38400 ; 8 - request_count
ds 4 ; C - transfer_count
dw 1 ; cache_priority
*--- SCORES
proCREATESCORES
dw 7 ; pcount
adrl pSCORES ; pathname
dw $c3 ; access_code
dw $5d ; file_type
adrl $8023 ; aux_type
ds 2 ; storage_type
adrl 256 ; eof
ds 4 ; resource_eof
proDESTROYSCORES
dw 1 ; pcount
adrl pLEVELS ; pathname
proOPENSCORES
dw 2
ds 2
adrl pSCORES
proREADSCORES
dw 4 ; 0 - nb parms
ds 2 ; 2 - file id
adrl scorebuf ; 4 - pointer
adrl 256 ; 8 - length
ds 4 ; C - length read
proWRITESCORES
dw 5 ; 0 - pcount
ds 2 ; 2 - ref_num
adrl scorebuf ; 4 - data_buffer
adrl 256 ; 8 - request_count
ds 4 ; C - transfer_count
dw 1 ; cache_priority
*--- Global
proCLOSE dw 1
ds 2
proQUIT dw 2 ; pcount proQUIT dw 2 ; pcount
ds 4 ; pathname ds 4 ; pathname
ds 2 ; flags ds 2 ; flags
@ -155,14 +701,37 @@ proQUIT dw 2 ; pcount
proVERS dw 1 ; pcount proVERS dw 1 ; pcount
ds 2 ; version ds 2 ; version
*---------- Files
pLEVELS strl '1/levels/loderunner'
pSCORES strl '1/levels/loderunner.sc'
*----------------------- Standard File Toolset
strLOADFILE str 'Load which file?'
strSAVEFILE str 'Save as...'
typeLIST hex 01
hex 5d ; Game/Edu files
replyPTR ds 2 ; 0 good
ds 2 ; 2 fileType
ds 2 ; 4 auxFileType
namePATH
hex 06 ; 6 fileName
namePATH1
asc 'Levels' ; 7 fileName (16 normally)
ds 9
loadPATH
ds 1 ; 22 fullPathname (string length)
loadPATH1
ds 129 ; 23 fullPathname (128 normally)
*---------------------------------------- *----------------------------------------
* LES AUTRES FICHIERS * LES AUTRES FICHIERS
*---------------------------------------- *----------------------------------------
ds \
put LR.Code.s put LR.Code.s
put LR.RWTS.s * put LR.RWTS.s
put LR.Data.s put LR.Data.s
put LR.Tables.s put LR.Tables.s
put LR.Sprites.s put LR.Sprites.s
@ -177,7 +746,7 @@ proVERS dw 1 ; pcount
asc " Antoine Vignau "0d asc " Antoine Vignau "0d
asc "Olivier Zardini"0d asc "Olivier Zardini"0d
asc " "0d asc " "0d
asc " Noel 2023 "0d asc " Paques 2024 "0d
asc " "0d asc " "0d
asc "----------------"0d asc "----------------"0d

View File

@ -11,4 +11,16 @@
KND $0000 KND $0000
SNA DougESmith SNA DougESmith
ASM LR.BANK1.S
KND $0000
SNA Brutal
ASM LR.BANK2.S
KND $0000
SNA Deluxe
ASM LR.BANK3.S
KND $0000
SNA Software
* END * END