mem: moved tiles to a dedicated ram bank.
authorLukas Krickl <lukas@krickl.dev>
Sun, 11 Jan 2026 07:27:54 +0000 (08:27 +0100)
committerLukas Krickl <lukas@krickl.dev>
Sun, 11 Jan 2026 07:27:54 +0000 (08:27 +0100)
Added tile canary

assets
maps/l1.inc
src/config.s
src/defs.s
src/mem.s
src/wram.s

diff --git a/assets b/assets
index 7d9051571e7aa6295d9c02bfb59e4769d233ff37..efe93c14d63cb5adabf47a848b19a25090584d1c 160000 (submodule)
--- a/assets
+++ b/assets
@@ -1 +1 @@
-Subproject commit 7d9051571e7aa6295d9c02bfb59e4769d233ff37
+Subproject commit efe93c14d63cb5adabf47a848b19a25090584d1c
index d1d94f3b76b679d745de84dffcd3de1788ea728b..56e9459915229df11684355df141741c1b3019a9 100644 (file)
@@ -1,17 +1,28 @@
 ; this map was generated by tmx2map.py
 
 .db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
-.db 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1
+.db 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0
+.db 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1
+.db 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0
 .db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0
-.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, 0x1
+.db 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
 .db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+.db 0x0, 0x0, 0x0, 0x0
 
index 0ec3b14b25ae5e0009e413f277c571a0ca16b4f8..e4bfd3e902e3b9afe02d8d617274152cbbda6b0e 100644 (file)
@@ -1,3 +1,6 @@
 #define DEBUG_UI
 
+; enables debug canary values in wram
+#define DEBUG_CANARY
+
 
index 91c5aa14c5200147bed80db23c946e81929493e5..775c954825e1a4b7249cdc3c800c9bbfd332b186 100644 (file)
@@ -7,6 +7,7 @@
 
 .def int OAMDMAFN = 0xFF80 
 #define WRAM 0xC000
+#define WRAM1 0xD000
 #define WRAMLEN 0xFFF
 
 #define ACT_MAX 32
@@ -27,8 +28,8 @@
 #define UI_TILE_HEIGHT 4
        
        ; player position offset to get center of tile
-#define MAP_W 20
-#define MAP_H 14
+#define MAP_W 22
+#define MAP_H 22
 #define MAP_TILES (MAP_W * MAP_H)
 
 #define RENDER_BUF_W 20
index 26ff252f00460fffe64dc359f29a75a3489aa2cc..c0b898bd0f8517fb6fae3d42ddf6cd902d252c90 100644 (file)
--- a/src/mem.s
+++ b/src/mem.s
@@ -1,8 +1,15 @@
 mem_init:
    ; clear wram
-  ld a, 0
+  ld d, 0
   ld hl, WRAM
   ld bc, WRAMLEN
+  call memset
+
+  ld d, 0
+  ld hl, WRAM1
+       ; only clear half of the ram here
+       ; because the stack is using this bank too
+  ld bc, WRAMLEN/2
   call memset
 
        call map_globals_init
@@ -30,15 +37,22 @@ mem_init:
        ; set initial game state ptr
        ld hl, new_game 
        call game_set_state
-
+       
+#ifdef DEBUG_CANARY
+       ; canary values for large buffers
        ld a, 0xde
+       ld [tiles_canary], a
        ld [render_canary], a
        ld a, 0xad
+       ld [tiles_canary+1], a
        ld [render_canary+1], a
        ld a, 0xbe
+       ld [tiles_canary+2], a
        ld [render_canary+2], a
        ld a, 0xef
+       ld [tiles_canary+3], a
        ld [render_canary+3], a
+#endif
 
   ret
 
@@ -64,28 +78,6 @@ memcpy:
 
   ret
 
-  ; same as memcpy
-  ; but only performs a write
-  ; if the value is currently 0
-memcpyz:
-@loop:
-  ; skip check
-  ld a, [hl]
-  cp a, 0
-  jr nz, @skip REL
-
-  ld a, [de]
-  ld [hl], a
-@skip:
-  inc hl
-  inc de
-  dec bc
-  ld a, b
-  or a, c
-  jp nz, @loop
-
-  ret
-
   ; sets a memory location to a specific value 
   ; inputs:
   ;   hl: destination
index 717fdad5e9811eabb69635eb83b74ae4e3ff34f1..110f82208796aa8518d38428c833ec5a43da3895 100644 (file)
@@ -87,9 +87,6 @@ tmp_x: .adv 1
        ; current map ptr
 map: .adv 2
        
-       ; ptr to current tile to be updated
-tiles: .adv t_size * MAP_TILES
-tiles_end: .adv 0
        
        ; collision related data
        ; y/x positions
@@ -111,4 +108,18 @@ minimap_buffer: .adv 9
 combat: .adv combat_size
 
 render_buffer: .adv RENDER_BUF_TILES
+
+#ifdef DEBUG_CANARY
 render_canary: .adv 4
+#endif
+
+; tile memory
+.org 0xC800
+
+       ; ptr to current tile to be updated
+tiles: .adv t_size * MAP_TILES
+tiles_end: .adv 0
+
+#ifdef DEBUG_CANARY
+tiles_canary: .adv 4
+#endif