mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-02-24 00:29:12 +00:00
Moved disk activity marker display logic to memory manager, so that it very accurately reflects real disk activity.
This commit is contained in:
parent
cfadecc9f6
commit
9b6c00bebb
@ -1145,6 +1145,7 @@ nSegsQueued: !byte 0
|
|||||||
fixupHint: !word 0
|
fixupHint: !word 0
|
||||||
bufferDigest: !fill 4
|
bufferDigest: !fill 4
|
||||||
multiDiskMode: !byte 0 ; hardcoded to YES for now
|
multiDiskMode: !byte 0 ; hardcoded to YES for now
|
||||||
|
diskActState: !byte 0
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; Heap management variables
|
; Heap management variables
|
||||||
@ -2133,6 +2134,8 @@ startHeaderScan: !zone
|
|||||||
disk_queueLoad: !zone
|
disk_queueLoad: !zone
|
||||||
stx resType ; save resource type
|
stx resType ; save resource type
|
||||||
sty resNum ; and resource num
|
sty resNum ; and resource num
|
||||||
|
lda #$FF
|
||||||
|
jsr showDiskActivity ; graphical marker that disk activity happening
|
||||||
inc nSegsQueued ; record the fact that we're queuing a seg
|
inc nSegsQueued ; record the fact that we're queuing a seg
|
||||||
lda partFileRef ; check if we've opened the file yet
|
lda partFileRef ; check if we've opened the file yet
|
||||||
bne + ; yes, don't re-open
|
bne + ; yes, don't re-open
|
||||||
@ -2171,7 +2174,13 @@ disk_queueLoad: !zone
|
|||||||
sta reqLen+1 ; both bytes
|
sta reqLen+1 ; both bytes
|
||||||
!if DEBUG { +prStr : !text "uclen=",0 : +prWord reqLen : +crout }
|
!if DEBUG { +prStr : !text "uclen=",0 : +prWord reqLen : +crout }
|
||||||
jsr shared_alloc ; reserve memory for this resource (main or aux as appropriate)
|
jsr shared_alloc ; reserve memory for this resource (main or aux as appropriate)
|
||||||
stx tmp ; save lo part of addr temporarily
|
tya ; check for
|
||||||
|
ora isAuxCmd ; main memory
|
||||||
|
cmp #$20 ; hi-res page 1
|
||||||
|
bne +
|
||||||
|
lda #0 ; when loading hi-res page 1, reset the visible marker
|
||||||
|
sta diskActState
|
||||||
|
+ stx tmp ; save lo part of addr temporarily
|
||||||
ldx segNum ; get the segment number back
|
ldx segNum ; get the segment number back
|
||||||
lda resType ; put resource type in segment descriptor
|
lda resType ; put resource type in segment descriptor
|
||||||
ora #$80 ; add 'active' flag
|
ora #$80 ; add 'active' flag
|
||||||
@ -2220,7 +2229,7 @@ disk_finishLoad: !zone
|
|||||||
jsr doAllFixups ; found fixups - execute and free them
|
jsr doAllFixups ; found fixups - execute and free them
|
||||||
.done lda #0
|
.done lda #0
|
||||||
sta nSegsQueued ; we loaded everything, so record that fact
|
sta nSegsQueued ; we loaded everything, so record that fact
|
||||||
rts
|
jmp showDiskActivity ; finally turn off disk activity marker (A is already zero)
|
||||||
.notdone:
|
.notdone:
|
||||||
bmi .load ; hi bit set -> queued for load
|
bmi .load ; hi bit set -> queued for load
|
||||||
iny ; not set, not queued, so skip over it
|
iny ; not set, not queued, so skip over it
|
||||||
@ -2974,6 +2983,37 @@ heapIntern: !zone
|
|||||||
bne .cplup
|
bne .cplup
|
||||||
beq .found ; always taken
|
beq .found ; always taken
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; Show or hide the disk activity icon (at the top of hi-res page 1). The icon consists of a 4x4
|
||||||
|
; block of blue pixels surrounded by a black border.
|
||||||
|
; Params: show/hide ($FF, or 0)
|
||||||
|
showDiskActivity: !zone
|
||||||
|
cmp diskActState
|
||||||
|
beq .done
|
||||||
|
sta diskActState
|
||||||
|
ldx #0
|
||||||
|
stx pTmp
|
||||||
|
ldy #$F8 ; offset of screen holes
|
||||||
|
lda #$20 ; first line of screen is $2000
|
||||||
|
- sta pTmp+1
|
||||||
|
cmp #$30 ; pre-check for last line
|
||||||
|
bit diskActState ; check mode
|
||||||
|
beq +
|
||||||
|
lda (pTmp,x) ; show mode
|
||||||
|
sta (pTmp),y
|
||||||
|
lda #$85
|
||||||
|
bcc ++ ; first 4 lines
|
||||||
|
lda #0 ; last line
|
||||||
|
beq ++ ; always taken
|
||||||
|
+ lda (pTmp),y ; hide mode
|
||||||
|
++ sta (pTmp,x)
|
||||||
|
lda pTmp+1
|
||||||
|
clc
|
||||||
|
adc #4
|
||||||
|
cmp #$34 ; Do 5 lines: $2000, $2400, $2800, $2C00, $3000; Stop before $3400.
|
||||||
|
bne -
|
||||||
|
.done rts
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; Segment tables
|
; Segment tables
|
||||||
|
|
||||||
|
@ -179,7 +179,6 @@ def _saveGame()
|
|||||||
|
|
||||||
// Copy data to main memory
|
// Copy data to main memory
|
||||||
showMapName("Saving game...")
|
showMapName("Saving game...")
|
||||||
diskActivity($FF)
|
|
||||||
copyHeap(0) // LC to low mem
|
copyHeap(0) // LC to low mem
|
||||||
|
|
||||||
// Open the file if it already exists...
|
// Open the file if it already exists...
|
||||||
@ -206,7 +205,6 @@ def _saveGame()
|
|||||||
// All done.
|
// All done.
|
||||||
close_fileref = open_fileref
|
close_fileref = open_fileref
|
||||||
guaranteeMLI(MLI_CLOSE, @close_params)
|
guaranteeMLI(MLI_CLOSE, @close_params)
|
||||||
diskActivity(0)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def loadInternal()
|
def loadInternal()
|
||||||
@ -242,17 +240,13 @@ end
|
|||||||
def _loadGame()
|
def _loadGame()
|
||||||
setMapWindow()
|
setMapWindow()
|
||||||
clearWindow()
|
clearWindow()
|
||||||
diskActivity($FF)
|
|
||||||
showMapName("Loading game...")
|
showMapName("Loading game...")
|
||||||
|
|
||||||
// Open the file
|
// Open the file
|
||||||
^$4000 = 0 // so 3D engine knows we overwrite HGR page 2, even if we fail
|
^$4000 = 0 // so 3D engine knows we overwrite HGR page 2, even if we fail
|
||||||
if !loadInternal()
|
if !loadInternal()
|
||||||
diskActivity(0)
|
|
||||||
showMapName("Not found.")
|
showMapName("Not found.")
|
||||||
getUpperKey()
|
getUpperKey()
|
||||||
else
|
|
||||||
diskActivity(0)
|
|
||||||
fin
|
fin
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ import gamelib
|
|||||||
predef streqi, strncpy, fatal, pause, tossStrings, charToUpper
|
predef streqi, strncpy, fatal, pause, tossStrings, charToUpper
|
||||||
predef addEncounterZone, clearEncounterZones, showMapName, setMapWindow, getMapWindow
|
predef addEncounterZone, clearEncounterZones, showMapName, setMapWindow, getMapWindow
|
||||||
predef addGold, countGold, payGold
|
predef addGold, countGold, payGold
|
||||||
predef calcPlayerArmor, diskActivity, rdkey, initHeap, scriptCombat, makeModifier
|
predef calcPlayerArmor, rdkey, initHeap, scriptCombat, makeModifier
|
||||||
predef giveItemToPlayer, takeItemFromPlayer, playerHasItem, getStat, setStat
|
predef giveItemToPlayer, takeItemFromPlayer, playerHasItem, getStat, setStat
|
||||||
predef setGameFlag, getGameFlag, scriptSetAvatar
|
predef setGameFlag, getGameFlag, scriptSetAvatar
|
||||||
predef addPlayerToParty, removePlayerFromParty, partyHasPlayer
|
predef addPlayerToParty, removePlayerFromParty, partyHasPlayer
|
||||||
|
@ -641,38 +641,6 @@ asm auxMmgr
|
|||||||
rts
|
rts
|
||||||
end
|
end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Show or hide the disk activity icon (at the top of hi-res page 1). The icon consists of a 4x4
|
|
||||||
// block of blue pixels surrounded by a black border.
|
|
||||||
// Params: show/hide ($FF, or 0)
|
|
||||||
export asm diskActivity
|
|
||||||
+asmPlasm 1
|
|
||||||
sta tmp ; save show(FF) / hide(0) flag
|
|
||||||
ldx #0
|
|
||||||
stx pTmp
|
|
||||||
ldy #$F8 ; offset of screen holes
|
|
||||||
lda #$20 ; first line of screen is $2000
|
|
||||||
- sta pTmp+1
|
|
||||||
cmp #$30 ; pre-check for last line
|
|
||||||
bit tmp ; check mode
|
|
||||||
beq +
|
|
||||||
lda (pTmp,x) ; show mode
|
|
||||||
sta (pTmp),y
|
|
||||||
lda #$85
|
|
||||||
bcc ++ ; first 4 lines
|
|
||||||
lda #0 ; last line
|
|
||||||
beq ++ ; always taken
|
|
||||||
+ lda (pTmp),y ; hide mode
|
|
||||||
++
|
|
||||||
sta (pTmp,x)
|
|
||||||
lda pTmp+1
|
|
||||||
clc
|
|
||||||
adc #4
|
|
||||||
cmp #$34 ; Do 5 lines: $2000, $2400, $2800, $2C00, $3000; Stop before $3400.
|
|
||||||
bne -
|
|
||||||
rts
|
|
||||||
end
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Jump straight to the system monitor
|
// Jump straight to the system monitor
|
||||||
// Params: None
|
// Params: None
|
||||||
@ -1298,9 +1266,6 @@ def initMap(x, y, dir)
|
|||||||
// Reset memory (our module will stay since memory manager locked it upon load)
|
// Reset memory (our module will stay since memory manager locked it upon load)
|
||||||
mmgr(RESET_MEMORY, 0)
|
mmgr(RESET_MEMORY, 0)
|
||||||
|
|
||||||
// Show disk activity icon while we load
|
|
||||||
diskActivity($FF)
|
|
||||||
|
|
||||||
// Load the raycaster or tile engine, and then the frame image.
|
// Load the raycaster or tile engine, and then the frame image.
|
||||||
mmgr(START_LOAD, 1) // partition 1 is where code lives
|
mmgr(START_LOAD, 1) // partition 1 is where code lives
|
||||||
mmgr(SET_MEM_TARGET, displayEngine)
|
mmgr(SET_MEM_TARGET, displayEngine)
|
||||||
@ -1313,11 +1278,9 @@ def initMap(x, y, dir)
|
|||||||
fin
|
fin
|
||||||
mmgr(FINISH_LOAD, 0)
|
mmgr(FINISH_LOAD, 0)
|
||||||
renderLoaded = TRUE
|
renderLoaded = TRUE
|
||||||
diskActivity(0)
|
|
||||||
loadFrameImg(mapIs3D+2)
|
loadFrameImg(mapIs3D+2)
|
||||||
|
|
||||||
// Load the map
|
// Load the map
|
||||||
diskActivity($FF)
|
|
||||||
mmgr(START_LOAD, 2) // partition 2 is where maps live
|
mmgr(START_LOAD, 2) // partition 2 is where maps live
|
||||||
if mapIs3D
|
if mapIs3D
|
||||||
pMap = mmgr(QUEUE_LOAD, mapNum<<8 | RES_TYPE_3D_MAP)
|
pMap = mmgr(QUEUE_LOAD, mapNum<<8 | RES_TYPE_3D_MAP)
|
||||||
@ -1325,7 +1288,6 @@ def initMap(x, y, dir)
|
|||||||
pMap = mmgr(QUEUE_LOAD, mapNum<<8 | RES_TYPE_2D_MAP)
|
pMap = mmgr(QUEUE_LOAD, mapNum<<8 | RES_TYPE_2D_MAP)
|
||||||
fin
|
fin
|
||||||
mmgr(FINISH_LOAD, 0)
|
mmgr(FINISH_LOAD, 0)
|
||||||
diskActivity(0)
|
|
||||||
|
|
||||||
// Clear all the windows to the background color (hi-bit set)
|
// Clear all the windows to the background color (hi-bit set)
|
||||||
setWindow1()
|
setWindow1()
|
||||||
@ -1393,9 +1355,7 @@ def doRender()
|
|||||||
if !texturesLoaded
|
if !texturesLoaded
|
||||||
if mapIs3D
|
if mapIs3D
|
||||||
flipToPage1()
|
flipToPage1()
|
||||||
diskActivity($FF)
|
|
||||||
texControl(1)
|
texControl(1)
|
||||||
diskActivity(0)
|
|
||||||
fin
|
fin
|
||||||
texturesLoaded = TRUE
|
texturesLoaded = TRUE
|
||||||
fin
|
fin
|
||||||
@ -1793,11 +1753,9 @@ export def setPortrait(portraitNum)
|
|||||||
restoreCursor()
|
restoreCursor()
|
||||||
|
|
||||||
// Load the portrait image and display it
|
// Load the portrait image and display it
|
||||||
diskActivity($FF)
|
|
||||||
mmgr(START_LOAD, 2) // portraits are in partition 2
|
mmgr(START_LOAD, 2) // portraits are in partition 2
|
||||||
curPortrait = auxMmgr(QUEUE_LOAD, portraitNum<<8 | RES_TYPE_PORTRAIT)
|
curPortrait = auxMmgr(QUEUE_LOAD, portraitNum<<8 | RES_TYPE_PORTRAIT)
|
||||||
mmgr(FINISH_LOAD, 0)
|
mmgr(FINISH_LOAD, 0)
|
||||||
diskActivity(0)
|
|
||||||
animFrame = 0
|
animFrame = 0
|
||||||
animFlags = readAuxByte(curPortrait)
|
animFlags = readAuxByte(curPortrait)
|
||||||
animNumFrames = animFlags & $F
|
animNumFrames = animFlags & $F
|
||||||
@ -1903,12 +1861,10 @@ def loadEngine(moduleNum)
|
|||||||
if curEngine; fatal("dblEng"); fin
|
if curEngine; fatal("dblEng"); fin
|
||||||
clearPortrait()
|
clearPortrait()
|
||||||
flipToPage1()
|
flipToPage1()
|
||||||
diskActivity($FF)
|
|
||||||
if renderLoaded; texControl(0); fin
|
if renderLoaded; texControl(0); fin
|
||||||
mmgr(START_LOAD, 1) // code is in partition 1
|
mmgr(START_LOAD, 1) // code is in partition 1
|
||||||
curEngine = mmgr(QUEUE_LOAD, moduleNum<<8 | RES_TYPE_MODULE)
|
curEngine = mmgr(QUEUE_LOAD, moduleNum<<8 | RES_TYPE_MODULE)
|
||||||
mmgr(FINISH_LOAD, 0)
|
mmgr(FINISH_LOAD, 0)
|
||||||
diskActivity(0)
|
|
||||||
return curEngine() // return function table
|
return curEngine() // return function table
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2389,11 +2345,9 @@ export def createAndAddUnique(moduleID, creationFuncNum, pList)
|
|||||||
unloadTextures()
|
unloadTextures()
|
||||||
|
|
||||||
// Load the module that is capable of creating the thing
|
// Load the module that is capable of creating the thing
|
||||||
diskActivity($FF)
|
|
||||||
mmgr(START_LOAD, 1) // code is in partition 1
|
mmgr(START_LOAD, 1) // code is in partition 1
|
||||||
p_module = mmgr(QUEUE_LOAD, moduleID<<8 | RES_TYPE_MODULE)
|
p_module = mmgr(QUEUE_LOAD, moduleID<<8 | RES_TYPE_MODULE)
|
||||||
mmgr(FINISH_LOAD, 0)
|
mmgr(FINISH_LOAD, 0)
|
||||||
diskActivity(0)
|
|
||||||
|
|
||||||
// Figure out which creation function to call there, and create the thing
|
// Figure out which creation function to call there, and create the thing
|
||||||
funcTbl = p_module()
|
funcTbl = p_module()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user