mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-07-04 09:29:28 +00:00
Added routines to calculate the amount of free memory.
This commit is contained in:
parent
99827b9785
commit
389b67cffa
@ -195,8 +195,11 @@ main_dispatch: !zone
|
|||||||
bne +
|
bne +
|
||||||
jmp main_unlock
|
jmp main_unlock
|
||||||
+ cmp #FREE_MEMORY
|
+ cmp #FREE_MEMORY
|
||||||
bne shared_dispatch
|
bne +
|
||||||
jmp main_free
|
jmp main_free
|
||||||
|
+ cmp #CALC_FREE
|
||||||
|
bne shared_dispatch
|
||||||
|
jmp main_calcFree
|
||||||
shared_dispatch:
|
shared_dispatch:
|
||||||
cmp #RESET_MEMORY
|
cmp #RESET_MEMORY
|
||||||
bne +
|
bne +
|
||||||
@ -228,6 +231,9 @@ aux_dispatch: !zone
|
|||||||
+ cmp #FREE_MEMORY
|
+ cmp #FREE_MEMORY
|
||||||
bne +
|
bne +
|
||||||
jmp aux_free
|
jmp aux_free
|
||||||
|
+ cmp #CALC_FREE
|
||||||
|
bne +
|
||||||
|
jmp aux_calcFree
|
||||||
+ jmp shared_dispatch
|
+ jmp shared_dispatch
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
@ -709,6 +715,43 @@ shared_free:
|
|||||||
sta tSegType,x ; store flags back
|
sta tSegType,x ; store flags back
|
||||||
rts ; all done
|
rts ; all done
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
main_calcFree: !zone
|
||||||
|
; Input: pTmp - address to scan for
|
||||||
|
; Output: X-reg - segment found (zero if not found), N and Z set for X-reg
|
||||||
|
; carry clear if addr == seg start, set if addr != seg start
|
||||||
|
ldx #0
|
||||||
|
beq shared_calcFree
|
||||||
|
aux_calcFree:
|
||||||
|
ldx #1
|
||||||
|
shared_calcFree:
|
||||||
|
lda #0 ; clear out free space counter
|
||||||
|
sta reqLen
|
||||||
|
sta reqLen+1
|
||||||
|
.loop: ldy tSegLink,x ; grab link to next segment
|
||||||
|
lda tSegType,x ; get type with flags
|
||||||
|
bmi .next ; if active, skip to next
|
||||||
|
lda tSegAdrLo,y ; found free space: calculate its length
|
||||||
|
sec
|
||||||
|
sbc tSegAdrLo,x
|
||||||
|
sta tmp
|
||||||
|
lda tSegAdrHi,y
|
||||||
|
sbc tSegAdrHi,x
|
||||||
|
sta tmp+1
|
||||||
|
lda tmp ; then add that length to the total so far
|
||||||
|
clc
|
||||||
|
adc reqLen
|
||||||
|
sta reqLen
|
||||||
|
lda tmp+1
|
||||||
|
adc reqLen+1
|
||||||
|
sta reqLen+1
|
||||||
|
.next: tya ; next in chain
|
||||||
|
tax ; to X reg index
|
||||||
|
bne .loop ; non-zero = not end of chain - loop again
|
||||||
|
ldx reqLen ; get calculated total into X
|
||||||
|
ldy reqLen+1 ; and Y
|
||||||
|
rts ; all done
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
main_queueLoad: !zone
|
main_queueLoad: !zone
|
||||||
lda #0 ; flag for main mem
|
lda #0 ; flag for main mem
|
||||||
|
@ -223,6 +223,15 @@ FREE_MEMORY = $18
|
|||||||
; Mark a segment of memory as free, or rather inactive, so that it can be
|
; Mark a segment of memory as free, or rather inactive, so that it can be
|
||||||
; reused. This also clears the lock bit!
|
; reused. This also clears the lock bit!
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
CALC_FREE = $19
|
||||||
|
; Input: None
|
||||||
|
;
|
||||||
|
; Output: X-reg(lo) / Y-reg(hi) - bytes of memory currently free
|
||||||
|
;
|
||||||
|
; Calculate how much memory this loader has free. Call on main mem
|
||||||
|
; loader for main mem free, or aux mem loader for aux mem free.
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
CHAIN_LOADER = $1E
|
CHAIN_LOADER = $1E
|
||||||
; Input: X-reg / Y-reg - pointer to loader (X=lo, Y=hi) to add to chain
|
; Input: X-reg / Y-reg - pointer to loader (X=lo, Y=hi) to add to chain
|
||||||
|
Loading…
Reference in New Issue
Block a user