mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-08-02 15:29:00 +00:00
Cleanup.
This commit is contained in:
parent
a8a4fdefed
commit
d2e1c28575
@ -375,13 +375,21 @@ fatalError: !zone
|
|||||||
dey
|
dey
|
||||||
bne .dash
|
bne .dash
|
||||||
+prStr : !text "FATAL ERROR: ",0
|
+prStr : !text "FATAL ERROR: ",0
|
||||||
.msg2 lda (pTmp),y
|
|
||||||
beq .msg3
|
ldx #$FF ; for asm str, max length
|
||||||
|
lda (pTmp),y ; first byte
|
||||||
|
bmi .msg ; if hi bit, it's a zero-terminated asm string
|
||||||
|
tax ; else it's the length byte of a PLASMA string
|
||||||
|
iny ; advance to first char
|
||||||
|
.msg lda (pTmp),y
|
||||||
|
beq .done
|
||||||
|
ora #$80 ; set hi bit of PLASMA strings for cout
|
||||||
jsr cout
|
jsr cout
|
||||||
iny
|
iny
|
||||||
bne .msg2
|
dex
|
||||||
.msg3: jsr bell ; beep
|
bne .msg
|
||||||
.inf: jmp .inf ; and loop forever
|
.done: jsr bell
|
||||||
|
.hang: jmp .hang ; loop forever
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; Normal entry point for ProDOS MLI calls. This patches the code at $BFBB.
|
; Normal entry point for ProDOS MLI calls. This patches the code at $BFBB.
|
||||||
@ -739,6 +747,8 @@ heapAlloc: !zone
|
|||||||
bcs .needgc
|
bcs .needgc
|
||||||
+ sta heapTop
|
+ sta heapTop
|
||||||
sty heapTop+1
|
sty heapTop+1
|
||||||
|
ldx pTmp ; return ptr in X=lo/Y=hi
|
||||||
|
ldy pTmp+1
|
||||||
rts
|
rts
|
||||||
.needgc jsr inlineFatal : !text "NeedCollect",0
|
.needgc jsr inlineFatal : !text "NeedCollect",0
|
||||||
|
|
||||||
@ -797,7 +807,7 @@ memCheck: !zone
|
|||||||
.done rts
|
.done rts
|
||||||
|
|
||||||
; Verify the integrity of the heap
|
; Verify the integrity of the heap
|
||||||
heapCheck:
|
heapCheck: !zone
|
||||||
lda #0
|
lda #0
|
||||||
sta pTmp ; we'll use pTmp for scanning
|
sta pTmp ; we'll use pTmp for scanning
|
||||||
lda heapStartPg
|
lda heapStartPg
|
||||||
@ -991,14 +1001,22 @@ gc2_sweep: !zone
|
|||||||
bcc .outer ; if not, loop again
|
bcc .outer ; if not, loop again
|
||||||
rts
|
rts
|
||||||
|
|
||||||
doGC: !zone
|
heapCollect: !zone
|
||||||
lda nHeapBlks
|
lda nHeapBlks
|
||||||
bne + ; edge case: if nothing on heap, skip collection
|
bne + ; edge case: if nothing on heap, skip collection
|
||||||
rts
|
rts
|
||||||
+ jsr gc1_mark ; mark reachable blocks
|
+ jsr gc1_mark ; mark reachable blocks
|
||||||
jsr gc2_sweep ; sweep them into one place
|
jsr gc2_sweep ; sweep them into one place
|
||||||
jsr gc3_fix ; adjust all pointers
|
jsr gc3_fix ; adjust all pointers
|
||||||
jmp heapClr ; and clear newly freed space
|
jsr heapClr ; and clear newly freed space
|
||||||
|
lda #0 ; heap end lo always 0
|
||||||
|
sec
|
||||||
|
sbc heapTop ; calculate new free space
|
||||||
|
tax
|
||||||
|
lda heapEndPg ; hi byte too
|
||||||
|
sbc heapTop+1
|
||||||
|
tay ; free space to X=lo/Y=hi
|
||||||
|
rts
|
||||||
|
|
||||||
} ; end of !pseodupc $800
|
} ; end of !pseodupc $800
|
||||||
loMemEnd = *
|
loMemEnd = *
|
||||||
|
@ -243,7 +243,7 @@ DEBUG_MEM = $1A
|
|||||||
; Print out the currently allocated memory blocks and their states.
|
; Print out the currently allocated memory blocks and their states.
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
CHECK_MEM = $1E
|
CHECK_MEM = $1B
|
||||||
; Input: None
|
; Input: None
|
||||||
;
|
;
|
||||||
; Output: None
|
; Output: None
|
||||||
@ -251,15 +251,32 @@ CHECK_MEM = $1E
|
|||||||
; Check that memory manager structures (and heap structures, if a heap
|
; Check that memory manager structures (and heap structures, if a heap
|
||||||
; has been set) are all intact.
|
; has been set) are all intact.
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
CHAIN_LOADER = $1E
|
||||||
|
; Input: X-reg / Y-reg - pointer to loader (X=lo, Y=hi) to add to chain
|
||||||
|
;
|
||||||
|
; Output: None
|
||||||
|
;
|
||||||
|
; Add a loader to the chain just after this loader. The current next
|
||||||
|
; loader (if there is one) will be passed to the new loader with another
|
||||||
|
; CHAIN_LOADER command.
|
||||||
|
;
|
||||||
|
; The purpose of a loader chain is to insert faster devices between the
|
||||||
|
; main/aux loader (fastest) and the disk loader (slowest). Note that the
|
||||||
|
; main mem and aux mem loaders are conceptually one; a chained loader will
|
||||||
|
; always be inserted after them, not between them.
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
FATAL_ERROR = $1F
|
FATAL_ERROR = $1F
|
||||||
; Input: X-reg(lo) / Y-reg(hi): message pointer
|
; Input: X-reg(lo) / Y-reg(hi): message pointer. Message can be:
|
||||||
|
; (1) a zero-terminated, hi-bit ASCII string, (assembly style), or
|
||||||
|
; (2) a length-prefixed, lo-bit ASCII string (PLASMA / ProDOS style)
|
||||||
;
|
;
|
||||||
; Output: Never returns
|
; Output: Never returns
|
||||||
;
|
;
|
||||||
; Switches to text mode, prints out the zero-terminated ASCII error message
|
; Switches to text mode, prints out the error message pointed to by the
|
||||||
; pointed to by the parameters, plus the call stack, and then halts the
|
; parameters, plus the call stack, and then halts the system (i.e. it waits
|
||||||
; system (i.e. it waits forever, user has to press Reset).
|
; forever, user has to press Reset).
|
||||||
;
|
;
|
||||||
; This command halts and thus never returns.
|
; This command halts and thus never returns.
|
||||||
|
|
||||||
@ -336,21 +353,6 @@ HEAP_COLLECT = $23
|
|||||||
; process. Therefore, HEAP_COLLECT should not be run during a
|
; process. Therefore, HEAP_COLLECT should not be run during a
|
||||||
; START_LOAD..FINISH_LOAD sequence, nor when hi-res page 2 is being shown.
|
; START_LOAD..FINISH_LOAD sequence, nor when hi-res page 2 is being shown.
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
|
||||||
CHAIN_LOADER = $30
|
|
||||||
; Input: X-reg / Y-reg - pointer to loader (X=lo, Y=hi) to add to chain
|
|
||||||
;
|
|
||||||
; Output: None
|
|
||||||
;
|
|
||||||
; Add a loader to the chain just after this loader. The current next
|
|
||||||
; loader (if there is one) will be passed to the new loader with another
|
|
||||||
; CHAIN_LOADER command.
|
|
||||||
;
|
|
||||||
; The purpose of a loader chain is to insert faster devices between the
|
|
||||||
; main/aux loader (fastest) and the disk loader (slowest). Note that the
|
|
||||||
; main mem and aux mem loaders are conceptually one; a chained loader will
|
|
||||||
; always be inserted after them, not between them.
|
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; Convenience for writing assembly routines in PLASMA source
|
; Convenience for writing assembly routines in PLASMA source
|
||||||
; Macro param: number of parameters passed from PLASMA to the asm routine
|
; Macro param: number of parameters passed from PLASMA to the asm routine
|
||||||
|
@ -50,8 +50,13 @@ const FINISH_LOAD = $17
|
|||||||
const FREE_MEMORY = $18
|
const FREE_MEMORY = $18
|
||||||
const CALC_FREE = $19
|
const CALC_FREE = $19
|
||||||
const DEBUG_MEM = $1A
|
const DEBUG_MEM = $1A
|
||||||
|
const CHECK_MEM = $1B
|
||||||
const CHAIN_LOADER = $1E
|
const CHAIN_LOADER = $1E
|
||||||
const FATAL_ERROR = $1F
|
const FATAL_ERROR = $1F
|
||||||
|
const HEAP_SET = $20
|
||||||
|
const HEAP_ADD_TYPE = $21
|
||||||
|
const HEAP_ALLOC = $22
|
||||||
|
const HEAP_COLLECT = $23
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Other constants
|
// Other constants
|
||||||
@ -72,29 +77,29 @@ predef setWindow2, initCmds
|
|||||||
// Global variables
|
// Global variables
|
||||||
byte mapNum
|
byte mapNum
|
||||||
byte mapIs3D
|
byte mapIs3D
|
||||||
|
word mapNameHash = 0
|
||||||
word totalMapWidth
|
word totalMapWidth
|
||||||
word totalMapHeight
|
word totalMapHeight
|
||||||
word pFont
|
|
||||||
word pMap
|
|
||||||
word cmdTbl[64]
|
|
||||||
word triggerOriginX, triggerOriginY
|
|
||||||
word triggerTbl
|
|
||||||
byte redraw
|
|
||||||
byte frameLoaded = 0
|
|
||||||
byte textDrawn = FALSE
|
|
||||||
byte needRender = FALSE
|
|
||||||
|
|
||||||
word skyNum = 9
|
word skyNum = 9
|
||||||
word groundNum = 10
|
word groundNum = 10
|
||||||
byte portraitNum = 1
|
byte portraitNum = 1
|
||||||
|
|
||||||
|
word triggerOriginX, triggerOriginY
|
||||||
|
word triggerTbl
|
||||||
|
|
||||||
|
word cmdTbl[64]
|
||||||
|
byte frameLoaded = 0
|
||||||
|
byte textDrawn = FALSE
|
||||||
|
byte needRender = FALSE
|
||||||
|
|
||||||
// Queue setMap / teleport, since otherwise script might be replaced while executing
|
// Queue setMap / teleport, since otherwise script might be replaced while executing
|
||||||
byte q_mapIs3D
|
byte q_mapIs3D
|
||||||
byte q_mapNum = 0
|
byte q_mapNum = 0
|
||||||
word q_x
|
word q_x
|
||||||
word q_y
|
word q_y
|
||||||
byte q_dir
|
byte q_dir
|
||||||
word mapNameHash = 0
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Definitions used by assembly code
|
// Definitions used by assembly code
|
||||||
@ -601,38 +606,12 @@ asm rawDisplayStr
|
|||||||
bne -
|
bne -
|
||||||
end
|
end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Convert a PLASMA string (starts with length, lo-bit ascii) to an assembly string
|
|
||||||
// (zero-terminated, hi-bit ascii).
|
|
||||||
asm toAsmStr
|
|
||||||
lda evalStkL,x
|
|
||||||
sta pTmp
|
|
||||||
lda evalStkH,x
|
|
||||||
sta pTmp+1
|
|
||||||
ldy #0
|
|
||||||
lda (pTmp),y
|
|
||||||
beq +
|
|
||||||
sta tmp
|
|
||||||
- iny
|
|
||||||
lda (pTmp),y
|
|
||||||
ora #$80
|
|
||||||
dey
|
|
||||||
sta (pTmp),y
|
|
||||||
iny
|
|
||||||
dec tmp
|
|
||||||
bne -
|
|
||||||
lda #0
|
|
||||||
sta (pTmp),y
|
|
||||||
+ rts
|
|
||||||
end
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// General methods
|
// General methods
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Fatal error: print message and stop the system.
|
// Fatal error: print message and stop the system.
|
||||||
def fatal(msg)
|
def fatal(msg)
|
||||||
toAsmStr(msg)
|
|
||||||
mmgr(FATAL_ERROR, msg)
|
mmgr(FATAL_ERROR, msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -829,6 +808,9 @@ end
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Load code and data, set up everything to display a 3D map
|
// Load code and data, set up everything to display a 3D map
|
||||||
def initMap(x, y, dir)
|
def initMap(x, y, dir)
|
||||||
|
word pFont
|
||||||
|
word pMap
|
||||||
|
|
||||||
// Set up the command table
|
// Set up the command table
|
||||||
initCmds()
|
initCmds()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user