mirror of
https://github.com/open-goal/jak-project
synced 2026-09-07 11:36:26 -04:00
jak3: hack level heap sizes (#3487)
This commit is contained in:
@@ -1870,7 +1870,6 @@ into 7 sections, which might explain the weird sizes in the center.
|
||||
)
|
||||
(gp-1 (-> this heap))
|
||||
)
|
||||
(start-debug "about to allocate level heap with size #x~X (~f MB)~%" s5-1 (/ (the float s5-1) 1024.))
|
||||
(set! (-> gp-1 base) (kmalloc global s5-1 (kmalloc-flags) "heap"))
|
||||
(set! (-> gp-1 current) (-> gp-1 base))
|
||||
(set! (-> gp-1 top-base) (&+ (-> gp-1 base) s5-1))
|
||||
|
||||
+176
-134
@@ -9,6 +9,22 @@
|
||||
(define-extern *level-type-list* type)
|
||||
(define-extern city-sound-expand-want-list (function none))
|
||||
|
||||
(defglobalconstant NUM_LEVEL_PAGES 146)
|
||||
(defglobalconstant LEVEL_PAGE_SIZE_KB 126) ;; original value
|
||||
(defglobalconstant LEVEL_PAGE_SIZE (* LEVEL_PAGE_SIZE_KB 1024)) ;; original value
|
||||
|
||||
(defglobalconstant LEVEL_HEAP_SIZE (* NUM_LEVEL_PAGES LEVEL_PAGE_SIZE))
|
||||
;(defglobalconstant DEBUG_LEVEL_HEAP_MULT 1.5) ;; level heap in debug mode is 1.5x larger
|
||||
(defglobalconstant DEBUG_LEVEL_HEAP_MULT 1.1) ;; we're gonna use debug mode-style heaps but we don't actually need them at 1.5x size right now
|
||||
(defglobalconstant DEBUG_LEVEL_PAGE_SIZE (* 1024 (* DEBUG_LEVEL_HEAP_MULT LEVEL_PAGE_SIZE_KB)))
|
||||
(defglobalconstant DEBUG_LEVEL_HEAP_SIZE (* NUM_LEVEL_PAGES DEBUG_LEVEL_PAGE_SIZE))
|
||||
|
||||
;; multiplier for borrow heap size. It is a bit of a hack required to load the slightly larger PC port levels.
|
||||
;; in the original game, borrow levels never got extra room, even with big level heaps
|
||||
;; Setting this means that borrow won't work with normal-size level heaps, but this is probably okay
|
||||
;; because normal-size level heaps don't work at all.
|
||||
(defglobalconstant BORROW_MULT DEBUG_LEVEL_HEAP_MULT)
|
||||
|
||||
(defmacro start-debug (str &rest args)
|
||||
`(format 0 ,(string-append "[START] " str) ,@args)
|
||||
)
|
||||
@@ -695,10 +711,10 @@
|
||||
"Resize and relocate the DGO load buffers, making sure there is enough room to both load objects and heap alloc in the linker."
|
||||
(case (-> arg0 load-buffer-mode)
|
||||
(((level-memory-mode tiny))
|
||||
(set! (-> arg0 load-buffer-size) (the-as uint (min #x113000 (the-as int (-> arg0 load-buffer-size)))))
|
||||
(set! (-> arg0 load-buffer-size) (the-as uint (min (* 1100 1024) (the-as int (-> arg0 load-buffer-size)))))
|
||||
)
|
||||
(((level-memory-mode tiny-edge))
|
||||
(set! (-> arg0 load-buffer-size) (+ (-> arg1 length) 2048))
|
||||
(set! (-> arg0 load-buffer-size) (+ (-> arg1 length) (* 2 1024)))
|
||||
)
|
||||
)
|
||||
(let ((v1-4 (logand -64 (+ (-> arg0 load-buffer-size) 63))))
|
||||
@@ -980,10 +996,10 @@
|
||||
(local-vars
|
||||
(sv-16 level)
|
||||
(memory-unused? (function level-group int symbol))
|
||||
(sv-24 int)
|
||||
(mask int)
|
||||
(sv-40 int)
|
||||
(sv-48 int)
|
||||
(level-page-offset int)
|
||||
(micro-mask int)
|
||||
(tiny-mask int)
|
||||
(heap-size int)
|
||||
(sv-56 int)
|
||||
)
|
||||
(dotimes (v1-0 5)
|
||||
@@ -1031,9 +1047,9 @@
|
||||
#t
|
||||
)
|
||||
)
|
||||
(set! sv-24 0)
|
||||
(set! mask 0)
|
||||
(set! sv-40 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! micro-mask 0)
|
||||
(set! tiny-mask 0)
|
||||
(dotimes (v1-15 10)
|
||||
(let ((lev (-> *level* level v1-15)))
|
||||
(when (and (or (= (-> lev status) 'active) (= (-> lev status) 'loaded))
|
||||
@@ -1043,13 +1059,13 @@
|
||||
)
|
||||
(case (-> lev info memory-mode)
|
||||
(((level-memory-mode city-tiny-edge))
|
||||
(set! mask (if (or (= (-> lev memory-mask) 60) (= (-> lev memory-mask) #x3c000))
|
||||
(set! micro-mask (if (or (= (-> lev memory-mask) 60) (= (-> lev memory-mask) #x3c000))
|
||||
3
|
||||
#x30000
|
||||
)
|
||||
)
|
||||
(if (zero? sv-40)
|
||||
(set! sv-40 (if (or (= (-> lev memory-mask) 15) (= (-> lev memory-mask) #x3c000))
|
||||
(if (zero? tiny-mask)
|
||||
(set! tiny-mask (if (or (= (-> lev memory-mask) 15) (= (-> lev memory-mask) #x3c000))
|
||||
#x3c000
|
||||
60
|
||||
)
|
||||
@@ -1057,60 +1073,73 @@
|
||||
)
|
||||
)
|
||||
(((level-memory-mode micro))
|
||||
(set! mask (the-as int (-> lev memory-mask)))
|
||||
(set! micro-mask (the-as int (-> lev memory-mask)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-18 mem-mode))
|
||||
(set! sv-48 (cond
|
||||
((= v1-18 (level-memory-mode large))
|
||||
#xbd0000
|
||||
)
|
||||
((= v1-18 (level-memory-mode medium))
|
||||
#x8fb800
|
||||
)
|
||||
((or (= v1-18 (level-memory-mode small-center)) (= v1-18 (level-memory-mode city-center)))
|
||||
#x627000
|
||||
)
|
||||
((or (= v1-18 (level-memory-mode city-tiny-edge))
|
||||
(= v1-18 (level-memory-mode tiny-center))
|
||||
(= v1-18 (level-memory-mode tiny-edge))
|
||||
(= v1-18 (level-memory-mode tiny))
|
||||
)
|
||||
#x3f0000
|
||||
)
|
||||
((= v1-18 (level-memory-mode micro))
|
||||
#x1f8000
|
||||
)
|
||||
((= v1-18 (level-memory-mode tiny-center-micro))
|
||||
#x2f4000
|
||||
)
|
||||
((= v1-18 (level-memory-mode tiny-center-small))
|
||||
#x4ec000
|
||||
)
|
||||
(else
|
||||
#x5e8000
|
||||
)
|
||||
)
|
||||
(set! heap-size (cond
|
||||
((= v1-18 (level-memory-mode large))
|
||||
;; 96 pages. this uses up 12 of the 18 chunks, meaning you can only have a small level alongside a large level.
|
||||
;; because two of the chunks are gonna be in the middle, there is actually space for 98 pages.
|
||||
;; but it seems ndi did not notice that when writing this code.
|
||||
(* LEVEL_PAGE_SIZE 96)
|
||||
)
|
||||
((= v1-18 (level-memory-mode medium))
|
||||
;; 73 pages. this uses up 9 of the 18 chunks, one of them being a middle chunk
|
||||
;; which is 1 page larger than non-middle sections. 8 * 8 + 9 * 1 = 73.
|
||||
;; this means you can either have a medium or small level alongside this.
|
||||
(* LEVEL_PAGE_SIZE 73)
|
||||
)
|
||||
((or (= v1-18 (level-memory-mode small-center)) (= v1-18 (level-memory-mode city-center)))
|
||||
;; 50 pages. this uses up the two middle chunks. 9 * 2 + 8 * 4 = 50.
|
||||
(* LEVEL_PAGE_SIZE 50)
|
||||
)
|
||||
((or (= v1-18 (level-memory-mode city-tiny-edge))
|
||||
(= v1-18 (level-memory-mode tiny-center))
|
||||
(= v1-18 (level-memory-mode tiny-edge))
|
||||
(= v1-18 (level-memory-mode tiny))
|
||||
)
|
||||
;; 32 pages. city-tiny-edge can coexist with micro.
|
||||
(* LEVEL_PAGE_SIZE 32)
|
||||
)
|
||||
((= v1-18 (level-memory-mode micro))
|
||||
;; 16 pages. this is the smallest memory mode, and is placed
|
||||
;; either at the very top of the level heap or the very bottom.
|
||||
(* LEVEL_PAGE_SIZE 16)
|
||||
)
|
||||
((= v1-18 (level-memory-mode tiny-center-micro))
|
||||
;; 24 pages. this is the second smallest memory mode. can coexist with city-tiny-edge.
|
||||
(* LEVEL_PAGE_SIZE 24)
|
||||
)
|
||||
((= v1-18 (level-memory-mode tiny-center-small))
|
||||
;; 40 pages. strange name, as it is larger than all other tiny modes.
|
||||
(* LEVEL_PAGE_SIZE 40)
|
||||
)
|
||||
(else
|
||||
;; 48 pages. this uses 6 chunks, and does NOT use any of the middle chunks. 8 * 6 = 48.
|
||||
(* LEVEL_PAGE_SIZE 48)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! sv-56 0)
|
||||
(case mem-mode
|
||||
(((level-memory-mode large))
|
||||
(case mask
|
||||
(case micro-mask
|
||||
((3)
|
||||
(let ((s4-0 #x3ffc0))
|
||||
(when (memory-unused? *level* s4-0)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-0)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-1 #x3ffc))
|
||||
(when (memory-unused? *level* s4-1)
|
||||
(set! sv-24 16)
|
||||
(set! level-page-offset 16)
|
||||
(set! sv-56 s4-1)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1119,14 +1148,14 @@
|
||||
((#x30000)
|
||||
(let ((s4-2 4095))
|
||||
(when (memory-unused? *level* s4-2)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-2)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-3 #xfff0))
|
||||
(when (memory-unused? *level* s4-3)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-3)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1135,14 +1164,14 @@
|
||||
(else
|
||||
(let ((s4-4 4095))
|
||||
(when (memory-unused? *level* s4-4)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-4)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-5 #x3ffc0))
|
||||
(when (memory-unused? *level* s4-5)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-5)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1153,27 +1182,27 @@
|
||||
(((level-memory-mode medium))
|
||||
(let ((s4-6 511))
|
||||
(when (memory-unused? *level* s4-6)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-6)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-7 #x3fe00))
|
||||
(when (memory-unused? *level* s4-7)
|
||||
(set! sv-24 73)
|
||||
(set! level-page-offset 73)
|
||||
(set! sv-56 s4-7)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
)
|
||||
(((level-memory-mode small-center))
|
||||
(case mask
|
||||
(case micro-mask
|
||||
((3)
|
||||
(case sv-40
|
||||
(case tiny-mask
|
||||
((#x3c000)
|
||||
(let ((s4-8 #x3f00))
|
||||
(when (memory-unused? *level* s4-8)
|
||||
(set! sv-24 64)
|
||||
(set! level-page-offset 64)
|
||||
(set! sv-56 s4-8)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1182,7 +1211,7 @@
|
||||
(else
|
||||
(let ((s4-9 4032))
|
||||
(when (memory-unused? *level* s4-9)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-9)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1191,11 +1220,11 @@
|
||||
)
|
||||
)
|
||||
((#x30000)
|
||||
(case sv-40
|
||||
(case tiny-mask
|
||||
((#x3c000)
|
||||
(let ((s4-10 1008))
|
||||
(when (memory-unused? *level* s4-10)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-10)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1204,7 +1233,7 @@
|
||||
(else
|
||||
(let ((s4-11 4032))
|
||||
(when (memory-unused? *level* s4-11)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-11)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1215,7 +1244,7 @@
|
||||
(else
|
||||
(let ((s4-12 4032))
|
||||
(when (memory-unused? *level* s4-12)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-12)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1226,27 +1255,27 @@
|
||||
(((level-memory-mode city-center))
|
||||
(let ((s4-13 4032))
|
||||
(when (memory-unused? *level* s4-13)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-13)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
)
|
||||
(((level-memory-mode small-edge))
|
||||
(case mask
|
||||
(case micro-mask
|
||||
((3)
|
||||
(case sv-40
|
||||
(case tiny-mask
|
||||
((#x3c000)
|
||||
(let ((s4-14 252))
|
||||
(when (memory-unused? *level* s4-14)
|
||||
(set! sv-24 16)
|
||||
(set! level-page-offset 16)
|
||||
(set! sv-56 s4-14)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-15 #x3f00))
|
||||
(when (memory-unused? *level* s4-15)
|
||||
(set! sv-24 64)
|
||||
(set! level-page-offset 64)
|
||||
(set! sv-56 s4-15)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1255,14 +1284,14 @@
|
||||
(else
|
||||
(let ((s4-16 #x3f000))
|
||||
(when (memory-unused? *level* s4-16)
|
||||
(set! sv-24 98)
|
||||
(set! level-page-offset 98)
|
||||
(set! sv-56 s4-16)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-17 4032))
|
||||
(when (memory-unused? *level* s4-17)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-17)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1271,18 +1300,18 @@
|
||||
)
|
||||
)
|
||||
((#x30000)
|
||||
(case sv-40
|
||||
(case tiny-mask
|
||||
((#x3c000)
|
||||
(let ((s4-18 #xfc00))
|
||||
(when (memory-unused? *level* s4-18)
|
||||
(set! sv-24 82)
|
||||
(set! level-page-offset 82)
|
||||
(set! sv-56 s4-18)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-19 1008))
|
||||
(when (memory-unused? *level* s4-19)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-19)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1291,14 +1320,14 @@
|
||||
(else
|
||||
(let ((s4-20 63))
|
||||
(when (memory-unused? *level* s4-20)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-20)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-21 4032))
|
||||
(when (memory-unused? *level* s4-21)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-21)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1309,14 +1338,14 @@
|
||||
(else
|
||||
(let ((s4-22 63))
|
||||
(when (memory-unused? *level* s4-22)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-22)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-23 #x3f000))
|
||||
(when (memory-unused? *level* s4-23)
|
||||
(set! sv-24 98)
|
||||
(set! level-page-offset 98)
|
||||
(set! sv-56 s4-23)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1327,33 +1356,33 @@
|
||||
(((level-memory-mode micro))
|
||||
(let ((s4-24 3))
|
||||
(when (memory-unused? *level* s4-24)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-24)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-25 #x30000))
|
||||
(when (memory-unused? *level* s4-25)
|
||||
(set! sv-24 130)
|
||||
(set! level-page-offset 130)
|
||||
(set! sv-56 s4-25)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
)
|
||||
(((level-memory-mode tiny-edge) (level-memory-mode city-tiny-edge))
|
||||
(let ((v1-126 mask))
|
||||
(let ((v1-126 micro-mask))
|
||||
(cond
|
||||
((or (zero? v1-126) (= v1-126 3))
|
||||
(let ((s4-26 60))
|
||||
(when (memory-unused? *level* s4-26)
|
||||
(set! sv-24 16)
|
||||
(set! level-page-offset 16)
|
||||
(set! sv-56 s4-26)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-27 #x3c000))
|
||||
(when (memory-unused? *level* s4-27)
|
||||
(set! sv-24 114)
|
||||
(set! level-page-offset 114)
|
||||
(set! sv-56 s4-27)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1362,14 +1391,14 @@
|
||||
((= v1-126 #x30000)
|
||||
(let ((s4-28 #xf000))
|
||||
(when (memory-unused? *level* s4-28)
|
||||
(set! sv-24 98)
|
||||
(set! level-page-offset 98)
|
||||
(set! sv-56 s4-28)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-29 15))
|
||||
(when (memory-unused? *level* s4-29)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-29)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1379,33 +1408,33 @@
|
||||
)
|
||||
)
|
||||
(((level-memory-mode tiny))
|
||||
(let ((v1-143 mask))
|
||||
(let ((v1-143 micro-mask))
|
||||
(cond
|
||||
((or (zero? v1-143) (= v1-143 3))
|
||||
(let ((s4-30 60))
|
||||
(when (memory-unused? *level* s4-30)
|
||||
(set! sv-24 16)
|
||||
(set! level-page-offset 16)
|
||||
(set! sv-56 s4-30)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-31 #x3c000))
|
||||
(when (memory-unused? *level* s4-31)
|
||||
(set! sv-24 114)
|
||||
(set! level-page-offset 114)
|
||||
(set! sv-56 s4-31)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-32 #x3c00))
|
||||
(when (memory-unused? *level* s4-32)
|
||||
(set! sv-24 82)
|
||||
(set! level-page-offset 82)
|
||||
(set! sv-56 s4-32)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-33 960))
|
||||
(when (memory-unused? *level* s4-33)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-33)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1414,28 +1443,28 @@
|
||||
((= v1-143 #x30000)
|
||||
(let ((s4-34 #xf000))
|
||||
(when (memory-unused? *level* s4-34)
|
||||
(set! sv-24 98)
|
||||
(set! level-page-offset 98)
|
||||
(set! sv-56 s4-34)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-35 15))
|
||||
(when (memory-unused? *level* s4-35)
|
||||
(set! sv-24 0)
|
||||
(set! level-page-offset 0)
|
||||
(set! sv-56 s4-35)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-36 240))
|
||||
(when (memory-unused? *level* s4-36)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-36)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-37 3840))
|
||||
(when (memory-unused? *level* s4-37)
|
||||
(set! sv-24 64)
|
||||
(set! level-page-offset 64)
|
||||
(set! sv-56 s4-37)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1445,19 +1474,19 @@
|
||||
)
|
||||
)
|
||||
(((level-memory-mode tiny-center))
|
||||
(let ((v1-176 mask))
|
||||
(let ((v1-176 micro-mask))
|
||||
(cond
|
||||
((or (zero? v1-176) (= v1-176 3))
|
||||
(let ((s4-38 #x3c00))
|
||||
(when (memory-unused? *level* s4-38)
|
||||
(set! sv-24 82)
|
||||
(set! level-page-offset 82)
|
||||
(set! sv-56 s4-38)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-39 960))
|
||||
(when (memory-unused? *level* s4-39)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-39)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1466,14 +1495,14 @@
|
||||
((= v1-176 #x30000)
|
||||
(let ((s4-40 240))
|
||||
(when (memory-unused? *level* s4-40)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-40)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-41 3840))
|
||||
(when (memory-unused? *level* s4-41)
|
||||
(set! sv-24 64)
|
||||
(set! level-page-offset 64)
|
||||
(set! sv-56 s4-41)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1483,19 +1512,19 @@
|
||||
)
|
||||
)
|
||||
(((level-memory-mode tiny-center-small))
|
||||
(let ((v1-194 mask))
|
||||
(let ((v1-194 micro-mask))
|
||||
(cond
|
||||
((or (zero? v1-194) (= v1-194 3))
|
||||
(let ((s4-42 #x3e00))
|
||||
(when (memory-unused? *level* s4-42)
|
||||
(set! sv-24 72)
|
||||
(set! level-page-offset 72)
|
||||
(set! sv-56 s4-42)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-43 1984))
|
||||
(when (memory-unused? *level* s4-43)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-43)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1504,14 +1533,14 @@
|
||||
((= v1-194 #x30000)
|
||||
(let ((s4-44 496))
|
||||
(when (memory-unused? *level* s4-44)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-44)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-45 3968))
|
||||
(when (memory-unused? *level* s4-45)
|
||||
(set! sv-24 56)
|
||||
(set! level-page-offset 56)
|
||||
(set! sv-56 s4-45)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1521,19 +1550,19 @@
|
||||
)
|
||||
)
|
||||
(((level-memory-mode tiny-center-micro))
|
||||
(let ((v1-213 mask))
|
||||
(let ((v1-213 micro-mask))
|
||||
(cond
|
||||
((or (zero? v1-213) (= v1-213 3))
|
||||
(let ((s4-46 448))
|
||||
(when (memory-unused? *level* s4-46)
|
||||
(set! sv-24 48)
|
||||
(set! level-page-offset 48)
|
||||
(set! sv-56 s4-46)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-47 #x3800))
|
||||
(when (memory-unused? *level* s4-47)
|
||||
(set! sv-24 90)
|
||||
(set! level-page-offset 90)
|
||||
(set! sv-56 s4-47)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1542,14 +1571,14 @@
|
||||
((= v1-213 #x30000)
|
||||
(let ((s4-48 3584))
|
||||
(when (memory-unused? *level* s4-48)
|
||||
(set! sv-24 72)
|
||||
(set! level-page-offset 72)
|
||||
(set! sv-56 s4-48)
|
||||
(goto cfg-322)
|
||||
)
|
||||
)
|
||||
(let ((s4-49 112))
|
||||
(when (memory-unused? *level* s4-49)
|
||||
(set! sv-24 32)
|
||||
(set! level-page-offset 32)
|
||||
(set! sv-56 s4-49)
|
||||
(goto cfg-322)
|
||||
)
|
||||
@@ -1567,8 +1596,8 @@
|
||||
"ERROR: level ~A could not find free ~S bank in the level-group heap (micro ~X tiny ~X)~%"
|
||||
(-> this name)
|
||||
(level-memory-mode->string mem-mode)
|
||||
mask
|
||||
sv-40
|
||||
micro-mask
|
||||
tiny-mask
|
||||
)
|
||||
(dotimes (s5-1 11)
|
||||
(let ((s4-51 (-> *level* level s5-1)))
|
||||
@@ -1591,25 +1620,31 @@
|
||||
)
|
||||
(else
|
||||
(set! (-> this memory-mask) (the-as uint sv-56))
|
||||
(format 0 "lev ~A ~X micro ~X tiny ~X~%" (-> this name) (-> this memory-mask) mask sv-40)
|
||||
(cond
|
||||
((= (&- (-> *level* heap top) (the-as uint (-> *level* heap base))) #x1af2800)
|
||||
(let ((v1-245 (-> this heap)))
|
||||
(set! (-> v1-245 base) (&+ (-> *level* heap base) (* #x2f400 sv-24)))
|
||||
(set! (-> v1-245 current) (-> v1-245 base))
|
||||
(set! (-> v1-245 top-base) (&+ (-> v1-245 base) (+ sv-48 (/ sv-48 2))))
|
||||
(set! (-> v1-245 top) (-> v1-245 top-base))
|
||||
(format 0 "lev ~A ~X micro ~X tiny ~X~%" (-> this name) (-> this memory-mask) micro-mask tiny-mask)
|
||||
(cond
|
||||
;; are we using debug sized large level?
|
||||
((= (&- (-> *level* heap top) (the-as uint (-> *level* heap base))) DEBUG_LEVEL_HEAP_SIZE)
|
||||
;; if so, everything is bigger!
|
||||
(let ((v1-245 (-> this heap)))
|
||||
(set! (-> v1-245 base) (&+ (-> *level* heap base) (* DEBUG_LEVEL_PAGE_SIZE level-page-offset)))
|
||||
(set! (-> v1-245 current) (-> v1-245 base))
|
||||
;(set! (-> v1-245 top-base) (&+ (-> v1-245 base) (+ heap-size (/ heap-size 2))))
|
||||
;; og:preserve-this modified the math here so we can just use a float to change the size
|
||||
(set! (-> v1-245 top-base) (&+ (-> v1-245 base) (* DEBUG_LEVEL_PAGE_SIZE (/ heap-size LEVEL_PAGE_SIZE))))
|
||||
(set! (-> v1-245 top) (-> v1-245 top-base))
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let ((v1-246 (-> this heap)))
|
||||
(set! (-> v1-246 base) (&+ (-> *level* heap base) (* #x1f800 sv-24)))
|
||||
(set! (-> v1-246 current) (-> v1-246 base))
|
||||
(set! (-> v1-246 top-base) (&+ (-> v1-246 base) sv-48))
|
||||
(set! (-> v1-246 top) (-> v1-246 top-base))
|
||||
(else
|
||||
(let ((v1-246 (-> this heap)))
|
||||
;; no debug size heaps. set up our heap.
|
||||
;; level-page-offset is in 146ths (1 level heap page) of the total size.
|
||||
(set! (-> v1-246 base) (&+ (-> *level* heap base) (* LEVEL_PAGE_SIZE level-page-offset)))
|
||||
(set! (-> v1-246 current) (-> v1-246 base))
|
||||
(set! (-> v1-246 top-base) (&+ (-> v1-246 base) heap-size))
|
||||
(set! (-> v1-246 top) (-> v1-246 top-base))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -2037,13 +2072,15 @@
|
||||
(when (-> arg0 info borrow)
|
||||
(dotimes (v1-229 5)
|
||||
(set! (-> arg0 heap top-base)
|
||||
(the pointer (&- (-> arg0 heap top-base) (the-as uint (shl (-> arg0 info borrow borrow-size v1-229) 10))))
|
||||
;; og:preserve-this
|
||||
(the pointer (&- (-> arg0 heap top-base) (the uint (shl (the int (* BORROW_MULT (-> arg0 info borrow borrow-size v1-229))) 10))))
|
||||
)
|
||||
(set! (-> arg0 heap top) (-> arg0 heap top-base))
|
||||
(let ((a0-121 (-> arg0 borrow-heap v1-229)))
|
||||
(set! (-> a0-121 base) (-> arg0 heap top))
|
||||
(set! (-> a0-121 current) (-> a0-121 base))
|
||||
(set! (-> a0-121 top-base) (&+ (-> a0-121 base) (shl (-> arg0 info borrow borrow-size v1-229) 10)))
|
||||
;; MODIFIED
|
||||
(set! (-> a0-121 top-base) (&+ (-> a0-121 base) (the int (shl (the int (* BORROW_MULT (-> arg0 info borrow borrow-size v1-229))) 10))))
|
||||
(set! (-> a0-121 top) (-> a0-121 top-base))
|
||||
)
|
||||
)
|
||||
@@ -2504,8 +2541,8 @@
|
||||
(load-package "common" global)
|
||||
)
|
||||
(let ((s5-1 (if (and arg0 (not *debug-segment*))
|
||||
#x11f7000
|
||||
#x1af2800
|
||||
(#if PC_PORT DEBUG_LEVEL_HEAP_SIZE LEVEL_HEAP_SIZE)
|
||||
DEBUG_LEVEL_HEAP_SIZE
|
||||
)
|
||||
)
|
||||
(gp-1 (-> this heap))
|
||||
@@ -2515,10 +2552,6 @@
|
||||
(set! (-> gp-1 top-base) (&+ (-> gp-1 base) s5-1))
|
||||
(set! (-> gp-1 top) (-> gp-1 top-base))
|
||||
)
|
||||
(start-debug "GLOBAL~%")
|
||||
(inspect global)
|
||||
(start-debug "LEVEL~%")
|
||||
(inspect (-> this heap))
|
||||
(kmemclose)
|
||||
)
|
||||
0
|
||||
@@ -3305,10 +3338,19 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
;; og:preserve-this
|
||||
;; did we find one to unload?
|
||||
;; PC NOTE : added an extra check for DGO time and name. If you start a load and discard it on the next frame,
|
||||
;; you may attempt to start a new load right away before the ISO thread can properly stop the previous load
|
||||
;; which will just crash the game. Sadly this means loads may sometimes be delayed by one frame. The horror.
|
||||
(when (>= a0-3 0)
|
||||
(let ((s3-0 (-> *level* level a0-3)))
|
||||
(format 0 "Discarding level ~A~%" (-> s3-0 name))
|
||||
(level-status-update! s3-0 'inactive)
|
||||
(format 0 " level loading : want to unload ~A. load-level is ~A~%" (-> *level* level a0-3 load-name) (-> *level* load-level))
|
||||
(when (or (!= (-> *level* level a0-3 load-name) (-> *level* load-level))
|
||||
(< 1 (- (-> *display* real-clock integral-frame-counter) *dgo-time*)))
|
||||
(let ((lev-to-unload (-> *level* level a0-3)))
|
||||
(format 0 "Discarding level ~A~%" (-> lev-to-unload name))
|
||||
(level-status-update! lev-to-unload 'inactive) ;; kill it.
|
||||
)
|
||||
)
|
||||
(set! v1-3 #t)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user