From 68e9da7e315951a113a4405c3f0880776adc5017 Mon Sep 17 00:00:00 2001 From: Zorchenhimer Date: Fri, 7 Nov 2025 20:33:20 -0500 Subject: [PATCH] updates from last weekend --- labels.mlb | 187 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 135 insertions(+), 52 deletions(-) diff --git a/labels.mlb b/labels.mlb index 5dd1351..d3ca355 100644 --- a/labels.mlb +++ b/labels.mlb @@ -277,15 +277,15 @@ NesPrgRom:1802::\nDest PPU Addr += 16 bytes NesPrgRom:1813: NesPrgRom:181B::\ntile ID rolled over.\nReset the PPU address to tile ID 4\nwith the current Base Addr.\n(Wrap to the top of the current tile\nbank, skipping the first four tiles) NesPrgRom:183D:L183D -NesPrgRom:184E:LD84E_DrawScreen:\nSeen drawing a full nametable using\ndata from ROM, not the tape. +NesPrgRom:184E:LD84E_DrawScreen:\nSeen drawing a full nametable using\ndata from ROM and tape. NesPrgRom:1851:LD851 NesPrgRom:1868:LD868 NesPrgRom:1872:LD872 NesPrgRom:187C:LD87C -NesPrgRom:188C:LD88C_VarShuffle:\nMoves some vars around:\n\nWord_96 -> Pointer_83 (from metadata earlier on)\nPointer_83 += 1\n$697E.W -> $85.W (data metadata pointed to)\n$6AFE.W -> $87.W +NesPrgRom:188C:LD88C_VarShuffle:\nMoves some vars around:\n\nWord_96 -> Pointer_83 (from metadata earlier on)\nPointer_83 += 1\n$697E.W -> $85.W tile data\n$6AFE.W -> $87.W attribute data NesPrgRom:1894: -NesPrgRom:18A1: -NesPrgRom:18AB: +NesPrgRom:18A1::\ntile data +NesPrgRom:18AB::\nAttribute data NesPrgRom:18E0:LD8E0_SetNT_00 NesPrgRom:18EB:LD8EB_SetNT_01 NesPrgRom:18F6:LD8F6_SetNT_02 @@ -299,8 +299,13 @@ NesPrgRom:1959:LD959_Pointer83_HeaderCopy:\nReads data via Pointer_83,\nwrites t NesPrgRom:195B:L195B_loop NesPrgRom:196C:LD96C_Pointer83_PixelToTile:\nTakes pixel coords an converts to\ntile coords?\n\nData at (Pointer_83) is the header\nfor nametable data in RAM. NesPrgRom:196E:L196E_loop +NesPrgRom:1978::\nByte_6A /= 8 +NesPrgRom:197F::\nByte_6B /= 8 NesPrgRom:1987:LD987_ArgSwap:\nSwap ArgA+1 with Byte_6A\nSwap ArgB+1 with Byte_6B -NesPrgRom:199A:LD99A_CopySomethingTo0777 +NesPrgRom:199A:LD99A_BufferTo0777:\nCopies PPU data to a buffer. +NesPrgRom:199C::\nload the pixel coords and divide\nby 8 to get tile coords (again). +NesPrgRom:19AD: +NesPrgRom:19B6::\nload width from header data NesPrgRom:19BD::\nWord_81 = Byte_06CC * Word_06CA.Low NesPrgRom:19D6::\nWord_81 += (Byte_6A - Word_06CA.High) NesPrgRom:19E7::\nWord_81 += Array_85 @@ -309,6 +314,7 @@ NesPrgRom:19FF::ensure data ends with a null NesPrgRom:1A03:LDA03_loop NesPrgRom:1A0C:LDA0C NesPrgRom:1A31:LDA31 +NesPrgRom:1A3B: NesPrgRom:1A41::\nWord_81 = Word_06CA.High * 8 NesPrgRom:1A59::\nWord_81 += Word_87 NesPrgRom:1A66: @@ -321,7 +327,7 @@ NesPrgRom:1AE4:LDAE4 NesPrgRom:1AF7:L1AF7 NesPrgRom:1B12:L1B12_loop NesPrgRom:1B1C:L1B1C -NesPrgRom:1B34:LDB34_BufferSomePPUStuff:\nBuffers some PPU data and\nwaits for NMI to draw it. +NesPrgRom:1B34:LDB34_BufferAndWrite_PPU:\nBuffers some PPU data and\nwaits for NMI to draw it. NesPrgRom:1B3A::\nvertical PPU increment NesPrgRom:1B4D:L1B4D:\nhorizontal PPU increment NesPrgRom:1B5D:LDB5D @@ -333,28 +339,38 @@ NesPrgRom:1BB1:LDBB1 NesPrgRom:1BB3:LDBB3 NesPrgRom:1BB8:L1BB8 NesPrgRom:1BC3::\nSet NMI action to write PPU\ndata, then wait for it to\nexecute. -NesPrgRom:1BD4:LDBD4 +NesPrgRom:1BD4:LDBD4_UpdateAttrData:\nSomething with updating attribute\ndata with data from the tape's\nimage. +NesPrgRom:1BDE: +NesPrgRom:1BE4: +NesPrgRom:1BFC: +NesPrgRom:1C09: +NesPrgRom:1C11: +NesPrgRom:1C1B: +NesPrgRom:1C1F: +NesPrgRom:1C25: +NesPrgRom:1C2B: NesPrgRom:1C33:L1C33 NesPrgRom:1C39:L1C39 NesPrgRom:1C3E:L1C3E_loop NesPrgRom:1C50:L1C50 NesPrgRom:1C57:L1C57 -NesPrgRom:1C94:LDC94 -NesPrgRom:1CB0:L1CB0 +NesPrgRom:1C94:L1C94_OR_AttrtData:\nOR's tiles atttribute data onto\nthe existing attribute table? +NesPrgRom:1CAD: +NesPrgRom:1CB0:L1CB0_loop NesPrgRom:1CC2:L1CC2 NesPrgRom:1CD4:LDCD4_BufferPPUData:Buffers some PPU data using\ntables in the HW stack.\n\nAlways Attribute data? NesPrgRom:1CD6::horizontal drawing NesPrgRom:1CF0:L1CF0 NesPrgRom:1D11:L1D11 -NesPrgRom:1D2B:LDD2B +NesPrgRom:1D2B:LDD2B_LoadSpritePaletteData NesPrgRom:1D2D:L1D2D NesPrgRom:1D35:L1D35 -NesPrgRom:1D44:LDD44_CopyPaletteToBuffer:\nCopies palette data from the tape\ndata buffer (Pointer_9A) to a\npalette buffer at $0610 +NesPrgRom:1D44:LDD44_CopyPaletteToBuffer:\nCopies palette data from the tape\ndata buffer (Pointer_9A) to a\npalette buffer at $0610.\n\nReplaces #$3D with #$0F in the data. NesPrgRom:1D46:L1D46 NesPrgRom:1D4E:L1D4E -NesPrgRom:1D5A:LDD5A_PaletteBgCopy:\nCopies the background colors \nfrom one palette to the other +NesPrgRom:1D5A:LDD5A_PaletteBgCopy:\nCopies the background colors from\nthe background palettes to the\nsprite palettes. NesPrgRom:1D5C:L1D5C -NesPrgRom:1D6B:L1D6D_WritePalData:\nBuffers and writes palette data to\n$3F00. Data is sourced from $0610. +NesPrgRom:1D6B:L1D6D_BufferAndWritePalData:\nBuffers and writes palette data to\n$3F00. Data is sourced from $0610. NesPrgRom:1D7F:L1D7F NesPrgRom:1D90:L1D90_WriteFourTiles:\nBuffers and draws four tiles. Tiles\nare loaded in pairs. Because reasons.\n\nWord_0745 is the initial destination address. NesPrgRom:1DA2:L1DA2_loop @@ -414,7 +430,7 @@ NesPrgRom:2718:L2718 NesPrgRom:271B:L271B_FrameWait_JMP:\nJMP's to L2BFC.\nWhy not just JSR to that address directly? NesPrgRom:2721:L2721_TurnOnNMI_LongJump NesPrgRom:2724:L2724_TurnOffNMI_LongJump -NesPrgRom:2727:L2727 +NesPrgRom:2727:L2727_ShuffleRngMaybe_LongJump NesPrgRom:272D:L272D NesPrgRom:2733:L2733_WriteScroll_LongJmp NesPrgRom:2739:L2739:\nJust JMP's to L3513.\nAgain, why not just JSR to the label directly? @@ -616,7 +632,8 @@ NesPrgRom:31F6:LF1F6 NesPrgRom:3209:L3209 NesPrgRom:3214:L3214 NesPrgRom:321A:L321A -NesPrgRom:325E:L325E +NesPrgRom:325E:L325E:\nOpcode 0xDF is waiting for thes to\nbecome zero. +NesPrgRom:326C::\nOpcode $9D is waiting on this to\nbecome zero again. NesPrgRom:3280:L3280 NesPrgRom:3285:L3285 NesPrgRom:3297:L3297 @@ -646,7 +663,7 @@ NesPrgRom:342B::\nIncrement pointer to next PPU row? NesPrgRom:343C::\nInsert NULL terminator NesPrgRom:3442:L3442_Idk:\nCMP's X+1 to data at $0300.\nIf less than, RTS.\nOtherwise store $00 at $0302+X, where\nX = data at $301. Then discard the top\ntwo values on the stack. NesPrgRom:3455:L3455_RTS -NesPrgRom:3456:L3456:\nhuh? +NesPrgRom:3456:L3456_ShuffleRngMaybe:\nhuh? NesPrgRom:3466:L3466_loop NesPrgRom:346D:L346D_WriteSprites NesPrgRom:3490:Read_Controllers @@ -1100,17 +1117,38 @@ NesPrgRom:4D9D:L8D9D_middle_loop NesPrgRom:4DBD:L8DBD_loop NesPrgRom:4DDF:L8DDF NesPrgRom:4E1F:L8E1F -NesPrgRom:4E2A:L8E2A_PointerShenanigans:\nAdd a pointer to the data it points\nto, store result in Pointer_9A.\nWord_96 is another pointer output.\n\nDepending on if ZERO is set, source\npointer is either $5000 (Z unset) or\n$5400 (Z set). +NesPrgRom:4E2A:L8E2A_PointerShenanigans:\nAdd a pointer to the data it points\nto, store result in Pointer_9A.\nWord_96 is another pointer output.\n\nDepending on if ZERO is set, source\npointer is either $5000 (Z unset) or\n$5400 (Z set).\n\nSets Pointer_9A to some palette data. NesPrgRom:4E2E::always branch NesPrgRom:4E30:L8E30 NesPrgRom:4E32:L8E32 -NesPrgRom:4E63:L8E63 -NesPrgRom:4E87:L4E87 -NesPrgRom:4E99:L4E99 -NesPrgRom:4F17:L4F17 +NesPrgRom:4E42::\nOffset to palette data? +NesPrgRom:4E4D::\nWord_52 += Word_56 +NesPrgRom:4E5A::\npointer to palette data? +NesPrgRom:4E62: +NesPrgRom:4E63:L8E63_GetDataPointers:\nInput is Word_96 - points to data header\n\nPointers to the tile data for\neach image are written to a table\nat $6800.\n\nPointers to the attribute data for\neach image are written to a table\nat $6890. +NesPrgRom:4E68::image count +NesPrgRom:4E6A::\nWord_61 = Word_96 +NesPrgRom:4E72::\nWord_61 += 1 +NesPrgRom:4E7F::\nPointer_63 = Word_61 +NesPrgRom:4E87:L4E87_loop:\nAdvance Word_61 to the start of the\ndata after the header. +NesPrgRom:4E97: +NesPrgRom:4E99:L4E99_ReadLoop +NesPrgRom:4EA6::\n??????? +NesPrgRom:4EAA::\nread dimensions from header +NesPrgRom:4EB5::\nWord_67 = data W*H +NesPrgRom:4ECC::\nWord_61 += Word_67 +NesPrgRom:4ED9: +NesPrgRom:4EE9: +NesPrgRom:4EF4::\nWord_61 += Word_67 +NesPrgRom:4F01::\nPointer_63 += 6 +NesPrgRom:4F0E: +NesPrgRom:4F17:L4F17_rts NesPrgRom:4F18:L8F18_rts -NesPrgRom:4F19:L8F19 +NesPrgRom:4F19:L8F19_LoadHeaderData:\nLoads header information from tape\ndata loaded into $5000 or $5400.\n\nPointer_63 is the data start\n\n$697E address for tile data\n$6AFE address for attribute data NesPrgRom:4F1B::load loop counter for later +NesPrgRom:4F20: +NesPrgRom:4F28: +NesPrgRom:4F35: NesPrgRom:4F3D:L8F3D_loop NesPrgRom:4F4F:L8F4F_loop NesPrgRom:4F53::$697E @@ -1118,6 +1156,10 @@ NesPrgRom:4F59::$697F NesPrgRom:4F6B::A NesPrgRom:4F70::B NesPrgRom:4F75::Word_06CE = A * B +NesPrgRom:4F82::\nadd result to Word_61 +NesPrgRom:4F8F::Word_61 is now data length\n +NesPrgRom:4FAC: +NesPrgRom:4FB9: NesPrgRom:4FCF:L8FCF_rts NesPrgRom:4FD0:Handler_DC:something to do with the\nlower 3 bits in the arguments\nand words 34 and 36 NesPrgRom:4FE5:L8FE5_gt @@ -1155,26 +1197,54 @@ NesPrgRom:5115:L9115_TurnOnBG NesPrgRom:511F:L911F_WaitLoop:\nWord_6D - Word_B1, looped\nwhile positive result in\nlow byte.\nResult isn't saved. NesPrgRom:512B:Handler_9D_SomethingTape NesPrgRom:5133:L9133 -NesPrgRom:514A:L914A -NesPrgRom:5155:L9155 +NesPrgRom:514A:L914A:\nArgB != 0 +NesPrgRom:5155:L9155:\nWait for data to finish being read\nfrom the tape.\n\nSet $44F8, ArgA to 1 and wait for\nthe IRQ to set this back to 0. NesPrgRom:5161:L9161_WaitLoop +NesPrgRom:5177::\nJump into the code for Opcode $9D\nafter all the opcode specific stuff\nand draw a screen. NesPrgRom:517A:Handler_9E_DrawAndShowScreen:\nDraw and show a full screen from\ntape data. This includes sprites. NesPrgRom:519D:L919D NesPrgRom:51AF:L91AF +NesPrgRom:51BE::array index and bank info? NesPrgRom:51F0:L91F0 NesPrgRom:5231:L9231 NesPrgRom:523F:L923F -NesPrgRom:52D1:Handler_DF:\nDoes something with strings?\nPossibly drawing them? +NesPrgRom:52B5:L52B5 +NesPrgRom:52D1:Handler_DF_DrawImage:\nDraws an image from RAM on top of\nthe current nametable. Seen using\ndata from the tape.\n\nArgB: X Coord (in tiles)\nArgC: Y Coord (in tiles) NesPrgRom:52E1:Handler_8B:\nDoes something with strings?\nPossibly drawing them? NesPrgRom:52EC:L92EC NesPrgRom:52F4:L92F4 NesPrgRom:52FF:L92FF -NesPrgRom:5312:L9312_WaitLoop +NesPrgRom:5312:L9312_WaitLoop:\nthis is reset in IRQ +NesPrgRom:5317: +NesPrgRom:5327: +NesPrgRom:532D: +NesPrgRom:5345::\nWord_06BC = Word_459E +NesPrgRom:5351::\nWord_06BC -= #$5000 +NesPrgRom:535A::\nWord_06BC /= 16 NesPrgRom:535C:L935C_loop -NesPrgRom:53CC:L96CC:\nTile vs Pixel coords? +NesPrgRom:5365: +NesPrgRom:53A2::\nArgA = ArgB\nArgB = ArgC +NesPrgRom:53B5:L53B5 +NesPrgRom:53CC:L56CC_CoordTranslate:\nTile vs Pixel coords?\n\nScript coords are in tiles, tape\ncoords are in pixels. +NesPrgRom:53D5: NesPrgRom:53DC: -NesPrgRom:53EC:L93EC_PointerShenanigans -NesPrgRom:5416:L5416 +NesPrgRom:53E4: +NesPrgRom:53EC:L93EC_PointerShenanigans_Array85Load:\nLoads the first set of pointers to\ndata and attributes into Array_85 +NesPrgRom:53F4::\nPointer_83 += 1 +NesPrgRom:5401: +NesPrgRom:540B: +NesPrgRom:5416:L5416_TranslateTileIds:\nOffset tile ID from tape to real\nID. There may have been other tile\ndata already loaded, but the tape\ndata assumes this tile data is the\nonly thing loaded. +NesPrgRom:541C:L541C_ImageLoop +NesPrgRom:5420::\nget pointer to start of data +NesPrgRom:542A::\nget data dimensions +NesPrgRom:5435: +NesPrgRom:544D: +NesPrgRom:544F:L544F_loop +NesPrgRom:5453::\ndon't update tiles whose ID < 4.\nthese are static uniform tiles +NesPrgRom:5461:L5461 +NesPrgRom:546F::tile count +NesPrgRom:5477: +NesPrgRom:5491:L5491_Done NesPrgRom:5495:L5495_GotoNextNametable NesPrgRom:549A:L549A NesPrgRom:54AF:L54AF @@ -1182,7 +1252,7 @@ NesPrgRom:54BF:L54BF NesPrgRom:54C8:L54C8 NesPrgRom:54D8:L54D8 NesPrgRom:5512:L5512 -NesPrgRom:5521:L9521_WeirdInc_Word4E +NesPrgRom:5521:L9521_WeirdInc_Word4E:\nLooks like bank stuff? NesPrgRom:552C:L552C NesPrgRom:5530:L9530_ClearTables:Uses Pointer_50 and fills a\npage with #$FF. Then fill\na bunch of seemingly random\npages in ram with #$00. Some\nfull pages, others half or\nquarter pages.\n\nSeen filling at $6000. NesPrgRom:553C:L553C_loop @@ -1268,19 +1338,35 @@ NesPrgRom:5872::set to 1 if not already 1 NesPrgRom:5880:L9880 NesPrgRom:5889:L9889_WritePPUData:\nBuffer then write PPU data NesPrgRom:5892:L5892 -NesPrgRom:58BD:L98BD_loop +NesPrgRom:58BD:L98BD_loop:\nWord_06BC /= 4 +NesPrgRom:58C6: +NesPrgRom:58E1::\nWord_06BE /= 4 NesPrgRom:58E3:L98E3_loop -NesPrgRom:58FF:L58FF -NesPrgRom:590C:L590C +NesPrgRom:58EC::\nWord_06BE += Word_074D +NesPrgRom:58FF:L58FF_WriteLoop +NesPrgRom:590C:L590C_bufferLoop NesPrgRom:590F::addr high NesPrgRom:5916::addr low NesPrgRom:591C::length -NesPrgRom:592C:L592C -NesPrgRom:594C:L594C +NesPrgRom:592C:L592C_copyLoop +NesPrgRom:5937::\nnumber of tiles written +NesPrgRom:5941::\nwrap back around to the start\non overflow +NesPrgRom:594C:L594C:tiles left to copy +NesPrgRom:5954::\nWord_06BC += 16 +NesPrgRom:5965::\nWord_06BE += 16 +NesPrgRom:5976: NesPrgRom:5984::wait for write to PPU? -NesPrgRom:598A:L598A -NesPrgRom:5995:L9995 -NesPrgRom:59BC:L59BC +NesPrgRom:598A:L598A_done +NesPrgRom:5995:L9995_CountDataLen:\nGets the lengths of data for all\nthe images in the data and saves\nthe start offset to each in\nTable_4E01\n\nInput is Word_96, used as a pointer +NesPrgRom:599D::\nWord_96 = Word_50 +NesPrgRom:59A5: +NesPrgRom:59A7::number of images/sprites +NesPrgRom:59AF::\nWord_50 += 1 +NesPrgRom:59BC:L59BC_loop +NesPrgRom:59C9::\nWord_61 += (Word_50), Y +NesPrgRom:59D6: +NesPrgRom:59DB: +NesPrgRom:59E8: NesPrgRom:5A01:Handler_88_PlaySound:\nSeems to play a short SFX NesPrgRom:5A2E::\nenabling different channels? NesPrgRom:5A39: @@ -1678,7 +1764,6 @@ NesPrgRom:EC88:Data_EC88:Attribute Data. First half. NesPrgRom:ECA8:Data_ECA8:Attribute data. Second half. NesPrgRom:ECC8:Data_ECC8:Tile Data in rows NesPrgRom:10000:D10000:Title sprite CHR data -NesInternalRam:0000-0001:Word_00 NesInternalRam:0002-0003:Pointer_02 NesInternalRam:0004-0005:Word_04:Either a pointer or a counter, depending on context. NesInternalRam:0008-0009:Pointer_08 @@ -1713,12 +1798,12 @@ NesInternalRam:0054-0055:Pointer_54 NesInternalRam:0056-0057:Word_56 NesInternalRam:0058-0059:Word_58 NesInternalRam:005A-005B:Pointer_5A -NesInternalRam:0060-0061:Pointer_60 -NesInternalRam:0062:Byte_62 +NesInternalRam:0060:Byte_60 +NesInternalRam:0061-0062:Word_61 NesInternalRam:0063-0064:Pointer_63 NesInternalRam:0065:Byte_65 -NesInternalRam:0066-0067:Word_66 -NesInternalRam:0068-0069:Word_68 +NesInternalRam:0066:Byte_66 +NesInternalRam:0067-0068:Word_67 NesInternalRam:006A:Byte_6A NesInternalRam:006B-006C:Word_6B NesInternalRam:006D-006E:Word_6D @@ -1740,7 +1825,7 @@ NesInternalRam:00B4:Flag_BtnLeft NesInternalRam:00B5:Flag_BtnRight NesInternalRam:00B6:Flag_BtnA NesInternalRam:00B7:Flag_BtnB -NesInternalRam:00B8-00B9:Word_B8 +NesInternalRam:00B8-00BF:Array_RngMaybe NesInternalRam:00C0:Frame_Sleeping NesInternalRam:00C4:Byte_C4 NesInternalRam:00C5:Flag_BtnStart @@ -1781,10 +1866,7 @@ NesInternalRam:0300:TapeCtrl_Cache_0300 NesInternalRam:0301:Byte_0301 NesInternalRam:0302-0303:PpuBuffer_Address:Destination address for the buffer's contents NesInternalRam:0304:PpuBuffer_Length:Length of data in the buffer -NesInternalRam:0305-0324:PpuBufferData_0305 -NesInternalRam:0325:Byte_0325 -NesInternalRam:0326-0327:Word_0326 -NesInternalRam:0328-0347:Table_0328 +NesInternalRam:0305-034D:PpuBufferData_0305 NesInternalRam:0420-0440:AudioString_0420 NesInternalRam:0441-0461:AudioString_0441 NesInternalRam:0462-0482:AudioString_0462 @@ -1825,14 +1907,14 @@ NesInternalRam:06BC-06BD:Word_06BC NesInternalRam:06BE-06BF:Word_06BE NesInternalRam:06C0:Byte_06C0 NesInternalRam:06C3-06C4:Word_06C3 -NesInternalRam:06C8:Byte_06C8 -NesInternalRam:06C9:Byte_06C9 +NesInternalRam:06C8:Byte_06C8_Input +NesInternalRam:06C9:Byte_06C9_Input NesInternalRam:06CA-06CB:Word_06CA NesInternalRam:06CC:Byte_06CC NesInternalRam:06CD:Byte_06CD NesInternalRam:06CE-06CF:Word_06CE_Result:Multiply result\n(also div result??) NesInternalRam:06D0:Byte_06D0 -NesInternalRam:06D1-06D6:Table_06D1 +NesInternalRam:06D1-06D6:ScreenDraw_Header NesInternalRam:0700-071F:String_0700 NesInternalRam:0720-073F:String_0720 NesInternalRam:0740:Byte_0740_TapeNMISetup:set to 0 if tape NMI is setup\nset to 1 if not\n?? maybe @@ -1840,7 +1922,7 @@ NesInternalRam:0741-0742:Word_0742 NesInternalRam:0745-0746:Word_0745 NesInternalRam:0747-0748:Word_0747_NT NesInternalRam:0749-074A:Word_0749_Attr -NesInternalRam:074B:Byte_074B +NesInternalRam:074B:Byte_074B_TileIdOffset NesInternalRam:074D-074E:Word_074D NesInternalRam:0750:Byte_0750 NesInternalRam:0753:BgFlag_0753 @@ -1874,6 +1956,7 @@ NesWorkRam:0700-07FF:Page_6700 NesWorkRam:0800-080F:Table_6800 NesWorkRam:0880-097F:Table_WR_880:Something with sprites. NesWorkRam:0980-098F:Table_6980 +NesWorkRam:0A00:Stack_6A00 NesWorkRam:0AFE-0AFF:Word_6AFE NesWorkRam:0C01:Table_6C01 NesWorkRam:0C41-0C42:Table_6C41