Claim set · data/claims/super-mario-code-lineage.yaml

Super Mario code lineage

The Lost Levels' boot, NMI and pause code (Start through MoveAllSpritesOffscreen) is Super Mario Bros.'s with these changes: Start sets mirroring through the disk drive's control register, keeps WorldNumber across the reset and sets the BIOS's IRQ flag; the NMI arms the drive's timer IRQ to split the status bar from the level, where Super Mario Bros. waits for the sprite 0 hit, and its VRAM address table is one table of 31 words where Super Mario Bros. has low and high byte tables of 19; PauseRoutine allows a pause in game-mode task 4 instead of 3, the game mode's task list having gained a disk task at its head. SpriteShuffler and MoveAllSpritesOffscreen are byte for byte the same, and the operating-mode dispatch differs only in its addresses. super-mario-code-lineage/smb1-smb2j-boot

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/start",
 "fromThrough": "super-mario-bros/move-all-sprites-offscreen",
 "to": "super-mario-bros-the-lost-levels/start",
 "toThrough": "super-mario-bros-the-lost-levels/move-all-sprites-offscreen",
 "bytes": 664
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L801-L801lda Mirror_FDS_CTRL_REGSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L822-L822sta WorldNumberSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L834-L834sta FDSBIOS_IRQFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L868-L873sta FDS_IRQTIMER_LOWsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L160-L164AND #%01000000smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L54-L69.db <VRAM_Buffer1, <WaterPaletteData, <GroundPaletteDataSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L846-L853.word VRAM_Buffer1, WaterPaletteData, GroundPaletteData, UndergroundPaletteDatasmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L206-L206CMP #$03SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1033-L1033cmp #$04SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4235-L4235.word GameModeDiskRoutinessmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5-L312VBlank1:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L801-L1129WBootCheck: lda TopScoreDisplay,xSuper Mario Bros. (World) · 0x10-0x240 — $8000-$8230Super Mario Bros. 2 (Japan) (En) · 0x219e-0x2435 — SM2MAIN $6000-$6297Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; the two vector-free stretches SpriteShuffler and MoveAllSpritesOffscreen have equal bytes; every other matched line differs only in an address operand

The castle victory sequence (VictoryMode through PrintVictoryMessages) is Super Mario Bros.'s with these changes: on world 8, which world D also uses, VictoryMode runs a second task list that loads the ending from disk; SetupVictoryMode also sets the world's bit in CompletedWorlds and queues the castle-clear music; PrintVictoryMessages loses Super Mario Bros.'s world 8 branch and its victory music, and gains EndCastleAward, which counts the remaining time into points. DrawTitleScreen, which sits in the middle, shrinks to a few instructions that queue a layout held in the program, where Super Mario Bros. copies it out of CHR ROM. PlayerVictoryWalk keeps every instruction; only its addresses and one branch's distance differ. super-mario-code-lineage/smb1-smb2j-victory

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/victory-mode",
 "fromThrough": "super-mario-bros/print-victory-messages",
 "to": "super-mario-bros-the-lost-levels/victory-mode",
 "toThrough": "super-mario-bros-the-lost-levels/print-victory-messages",
 "bytes": 357
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1152-L1152cmp #World8SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1173-L1173.word VictoryModeDiskRoutinesSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1194-L1194ora CompletedWorldsSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1203-L1203W1Thru8: lda #EndOfCastleMusicsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L564-L566LDY WorldNumbersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L594-L594LDA #VictoryMusicSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1287-L1287jsr AwardTimerCastlesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1007-L1007LDA #>TitleScreenDataOffsetsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L490-L617AutoPlayer:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1134-L1318NotW8: ldx #$00Super Mario Bros. (World) · 0x39b-0x470 — $838B-$8460Super Mario Bros. 2 (Japan) (En) · 0x2436-0x259a — SM2MAIN $6298-$63FCChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; PlayerVictoryWalk's lines all match, with one branch reaching a label that moved

The score numbers, the screen setup tasks, the status bar and the game's text (FloateyNumbersRoutine through ResetScreenTimer) are Super Mario Bros.'s with these changes: GetPlayerColors no longer picks a palette row by CurrentPlayer (Super Mario Bros.'s table has a row for Luigi); WriteBottomStatusLine goes through a new GetWorldNumForDisplay, which shows worlds A to D as letters; DisplayIntermediate blanks the screen after the world and lives screen in world 9, and DisplayTimeUp writes its text and resets the screen timer itself where Super Mario Bros. jumps into DisplayIntermediate; ClearBuffersDrawIcon's title-screen part moves to the title code; the screen task list gains DemoReset; GameText drops the two-player and Luigi texts and adds CONTINUE and RETRY to the game-over screen. InitScreen, SetupIntermediate, GetAreaPalette, GetAlternatePalette1, WriteTopStatusLine, AreaParserTaskControl and ResetScreenTimer keep every instruction, with only addresses changed. super-mario-code-lineage/smb1-smb2j-screens

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/floatey-numbers-routine",
 "fromThrough": "super-mario-bros/reset-screen-timer",
 "to": "super-mario-bros-the-lost-levels/floatey-numbers-routine",
 "toThrough": "super-mario-bros-the-lost-levels/reset-screen-timer",
 "bytes": 910
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L848-L850LDA CurrentPlayerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1502-L1505ldy #$04SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1556-L1556jsr GetWorldNumForDisplaySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1574-L1580adc #$09SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1620-L1620cmp #World9smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L944-L944JMP OutputIntersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1042-L1042JSR DrawMushroomIconSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1434-L1434.word DemoResetsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1102-L1102.db $15, $1e, $12, $10, $12SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1674-L1674.byte $21, $eb, $08, $0c, $18, $17, $1d, $12, $17, $1e, $0esmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L656-L1220ScoreUpdateData:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1325-L1758ScoreUpdateData:Super Mario Bros. (World) · 0x4af-0x8bd — $849F-$88ADSuper Mario Bros. 2 (Japan) (En) · 0x259b-0x2928 — SM2MAIN $63FD-$678AChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; FloateyNumbersRoutine's lines all match, one branch reaching a different RTS

The background renderer, the metatile tables and the area palettes (RenderAreaGraphics through the palette data) are Super Mario Bros.'s with the metatiles renumbered: The Lost Levels inserts new metatiles, so ReplaceBlockMetatile compares against shifted numbers ($56, $4F, $5C and $50 for Super Mario Bros.'s $58, $51, $5D and $52), and MetatileGraphics_Low moves some entries and adds others. The palette data region also holds two new messages. RenderAttributeTables is byte for byte the same, and RenderAreaGraphics and ColorRotatePalette differ only in their addresses. super-mario-code-lineage/smb1-smb2j-metatiles

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/render-area-graphics",
 "fromThrough": "super-mario-bros/water-palette-data",
 "to": "super-mario-bros-the-lost-levels/render-area-graphics",
 "toThrough": "super-mario-bros-the-lost-levels/water-palette-data",
 "bytes": 1266
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1486-L1486CMP #$58SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2006-L2006cmp #$56smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1601-L1601.db $6b, $70, $2c, $2dSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2190-L2190.byte $6b, $70, $2c, $2dSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2153-L2153.byte $45, $47, $45, $47SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2274-L2287.byte $1d, $11, $0a, $17, $14, $24, $22, $18smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1233-L1753DrawMTLoop:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L1771-L2287DrawMTLoop: stx $01Super Mario Bros. (World) · 0x8be-0xd63 — $88AE-$8D53Super Mario Bros. 2 (Japan) (En) · 0x2929-0x2e1a — SM2MAIN $678B-$6C7CChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; RenderAttributeTables has equal bytes; ReplaceBlockMetatile's lines differ only in four immediates; the metatile table's added and moved rows were read

JumpEngine, InitializeNameTables, ReadJoypads and UpdateScreen are Super Mario Bros.'s, instruction for instruction: JumpEngine is byte for byte the same, and the other three differ only in the addresses of their calls, jumps and tables. super-mario-code-lineage/smb1-smb2j-ppu-input

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "relocated",
 "from": "super-mario-bros/jump-engine",
 "fromThrough": "super-mario-bros/update-screen",
 "to": "super-mario-bros-the-lost-levels/jump-engine",
 "toThrough": "super-mario-bros-the-lost-levels/update-screen",
 "bytes": 240
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1820-L1973InitializeNameTables:The atlas reads this differently: The branch is taken unless Select or Start is down both now and in JoypadBitMask, the last state saved whole, so a held Select or Start reaches SavedJoypadBits on its first frame only.SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2292-L2429InitializeNameTables:Super Mario Bros. (World) · 0xe14-0xf03 — $8E04-$8EF3Super Mario Bros. 2 (Japan) (En) · 0x2e1b-0x2f0a — SM2MAIN $6C7D-$6D6CChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; no line differs; JumpEngine's bytes are equal and every other differing byte is an absolute address operand

The status bar numbers, game setup, lives and game over (PrintStatusBarNumbers through RunGameOver) are Super Mario Bros.'s with a new GameOverSubs dispatch among them and these changes: the status bar's digit tables lose the second player's entries; UpdateTopScore checks one score where Super Mario Bros. checks two; DigitsMathRoutine drops a compare with zero before its BEQ; DefaultSprOffsets loses the sprite 0 data; InitializeArea loads the player's physics (LoadPhysicsData) and sets the secondary hard mode flag from 4-4 on and in all of worlds A to D (HardWorldFlag), where Super Mario Bros. sets it from 5-3 on or once the primary hard mode flag is set; SecondaryGameSetup sets the name table and switches on the status bar's IRQ split, where Super Mario Bros. sets the second player's lives and switches on the sprite 0 check; InitializeMemory also spares $0100-$0108; PlayerLoseLife reads its own halfway pages and no longer swaps players; RunGameOver opens the continue-or-retry menu (or, in world 9, ends the game) where Super Mario Bros. ends the game on Start or when the screen timer runs out and then hands over to the other player if they have lives left. GetAreaMusic and Entrance_GameTimerSetup keep every instruction, though the level timer's digits moved from $07F8 to $07EC. super-mario-code-lineage/smb1-smb2j-game-setup

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/print-status-bar-numbers",
 "fromThrough": "super-mario-bros/run-game-over",
 "to": "super-mario-bros-the-lost-levels/print-status-bar-numbers",
 "toThrough": "super-mario-bros-the-lost-levels/run-game-over",
 "bytes": 846
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1990-L1990.db $06, $0c, $12, $18, $1e, $24smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2087-L2087JSR TopScoreChecksmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2050-L2050CMP #TitleScreenModeValuesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2119-L2119.db $18, $ff, $23, $58SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2444-L2444.byte $06, $0c, $12, $18SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2591-L2598lda HardWorldFlagsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2172-L2179CMP #Level3SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2609-L2609jsr LoadPhysicsDataSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2631-L2631sta NameTableSelectsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2245-L2245INC Sprite0HitDetectFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2645-L2645inc IRQUpdateFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2660-L2661cpy #$09smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2441-L2441JSR TransposePlayerssmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2472-L2473AND #Start_ButtonSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2854-L2856jmp GameOverMenuSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2751-L2751sta GameTimerDisplaysmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L1982-L2534StatusBarOffset:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2438-L2881StatusBarOffset:Super Mario Bros. (World) · 0xf04-0x12bf — $8EF4-$92AFSuper Mario Bros. 2 (Japan) (En) · 0x2f0b-0x3258 — SM2MAIN $6D6D-$70BAChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; Entrance_GameTimerSetup's lines all match; its only RAM operands that differ are GameTimerDisplay's three bytes

Cited by: Super Mario Bros.: The Lost Levels

The area parser and its object builders (AreaParserTaskHandler through GetBlockBufferAddr) are Super Mario Bros.'s, with most changes in the metatile numbers they write, which shift with the renumbered metatiles (bridges, flagpole, coins, bricks, cannons, stairs, blocks, water pipe). Beyond those: the object jump table gains entries, the wind on and off commands among them, so three offsets into it change; ScrollLockObject_Warp picks the warp zone's destination by world, level and area; the third ledge style uses metatiles $8A-$8C and draws no stem, where Super Mario Bros.'s mushroom ledge uses $19-$1B with a stem (and RenderUnderPart drops its stem checks); the vertical pipes place a piranha plant through a shared SetupPiranhaPlant, with no exception for world 1-1; Jumpspring places nothing when no enemy slot is free. IncrementColumnPos, AlterAreaAttributes, KillEnemies and the object position helpers are byte for byte the same. super-mario-code-lineage/smb1-smb2j-level-builder

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/area-parser-task-handler",
 "fromThrough": "super-mario-bros/get-block-buffer-addr",
 "to": "super-mario-bros-the-lost-levels/area-parser-task-handler",
 "toThrough": "super-mario-bros-the-lost-levels/get-block-buffer-addr",
 "bytes": 2422
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2925-L2925LDA #$2eSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3246-L3246lda #$36SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3385-L3386.word WindOnSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3429-L3429lda WorldNumbersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3215-L3215LDA #$19smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3229-L3229LDA #$4fSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3550-L3550lda #$8aSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3560-L3560rtssmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3852-L3855CPY #$54SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4145-L4145cpy #$8bsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3428-L3430LDA AreaNumberSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L3772-L3773SetupPiranhaPlant:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4040-L4040bcs NoJssmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L2539-L3938DoAPTasks:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L2893-L4227DoAPTasks: deySuper Mario Bros. (World) · 0x12c0-0x1c05 — $92B0-$9BF5Super Mario Bros. 2 (Japan) (En) · 0x325f-0x3bd4 — SM2MAIN $70C1-$7A36Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; the builders' changed lines are immediates or table bytes except those named, each read in both

Cited by: Super Mario Bros.: The Lost Levels

GameCoreRoutine and ScrollHandler are Super Mario Bros.'s with three changes: the game mode's task list gains GameModeDiskRoutines at its head and the core no longer reads the current player's saved joypad bits; each frame of play calls SimulateWind once a disk file beyond worlds 1 to 4 is loaded; ScrollHandler waits for the status bar's timer IRQ before it scrolls and keeps the name table in NameTableSelect, where Super Mario Bros. sets it in its PPU control mirror. GetScreenPosition is byte for byte the same. super-mario-code-lineage/smb1-smb2j-game-core

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/game-core-routine",
 "fromThrough": "super-mario-bros/get-screen-position",
 "to": "super-mario-bros-the-lost-levels/game-core-routine",
 "toThrough": "super-mario-bros-the-lost-levels/get-screen-position",
 "bytes": 363
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4081-L4083LDA SavedJoypadBits,xSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4235-L4235.word GameModeDiskRoutinesSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4275-L4275jsr SimulateWindSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4341-L4341lda IRQAckFlagsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4206-L4209LDA Mirror_PPU_CTRL_REG1SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4357-L4357sta NameTableSelectsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4081-L4262GameEngine:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4232-L4406GameCoreRoutine:Super Mario Bros. (World) · 0x2efa-0x3059 — $AEEA-$B049Super Mario Bros. 2 (Japan) (En) · 0x3bd5-0x3d3f — SM2MAIN $7A37-$7BA1Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; GetScreenPosition has equal bytes

Cited by: Super Mario Bros.: The Lost Levels

The player's control and movement code (GameRoutines through ImposeFriction) is Super Mario Bros.'s, instruction for instruction in 14 of its 19 regions, with these changes: OnGroundStateSub and the jump and swim code move the player through a new JmpMove, which lets the wind push them (BlowPlayerAround) once a disk file beyond worlds 1 to 4 is loaded; PlayerPhysicsSub's friction table moves up to follow the fall forces, inside the 17 bytes that LoadPhysicsData overwrites with Mario's or Luigi's set; PlayerEndLevel queues the level-end music once, guarded by a new FlagpoleMusicFlag, where Super Mario Bros. queues it whenever ScrollLock is set, and sets the hidden 1-up's flag on 10 coins in any world, where Super Mario Bros. reads a per-world table, and starts world 9 over after 9-4; PlayerDeath shares one RTS. The entrances, pipes, size change, injury blink, flagpole slide, falling, climbing, animation speed and ImposeFriction differ only in their addresses. super-mario-code-lineage/smb1-smb2j-player-control

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/game-routines",
 "fromThrough": "super-mario-bros/impose-friction",
 "to": "super-mario-bros-the-lost-levels/game-routines",
 "toThrough": "super-mario-bros-the-lost-levels/impose-friction",
 "bytes": 1518
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4848-L4852jsr BlowPlayerAroundsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4788-L4789JSR MovePlayerHorizontallySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4892-L4892JSMove: jsr JmpMovesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4878-L4878.db $e4, $98, $d0SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4962-L4962.byte $e4, $98, $d0smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4686-L4686CMP Hidden1UpCoinAmts,ySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4768-L4772inc FlagpoleMusicFlagsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4660-L4663LDA ScrollLockSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4790-L4790cmp #$0aSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4794-L4802cmp #$08SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14490-L14504sta JumpMForceData,xsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L4267-L5135PlayerEntrance:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L4411-L5207PlayerEntrance:Super Mario Bros. (World) · 0x305a-0x3633 — $B04A-$B623Super Mario Bros. 2 (Japan) (En) · 0x3d40-0x432d — SM2MAIN $7BA2-$818FChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; 14 regions have no differing line and only address operands differ; the others were read line by line

Cited by: Super Mario Bros.: The Lost Levels

Fireballs, the level timer and the stage objects (ProcFireballs through VineObjectHandler) are Super Mario Bros.'s with these changes: RunGameTimer tests the player's height with BPL instead of BCS and points at the timer digits' new place; WarpZoneObject no longer counts up WarpZoneControl; FlagpoleRoutine gives a life for the new sixth flagpole score; JumpspringHandler launches with the green springs' force on world numbers 2, 3 and 7; VineObjectHandler erases the vine and its metatiles once it goes off the left of the screen. ProcFireballs and ProcessWhirlpools differ only in their addresses, and SetupVine is byte for byte the same. super-mario-code-lineage/smb1-smb2j-stage-objects

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/proc-fireballs",
 "fromThrough": "super-mario-bros/vine-object-handler",
 "to": "super-mario-bros-the-lost-levels/proc-fireballs",
 "toThrough": "super-mario-bros-the-lost-levels/vine-object-handler",
 "bytes": 1013
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5324-L5324BCS ExGTimerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5387-L5387bpl ExGTimersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5342-L5342LDY #$23SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5404-L5404ldy #$17smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5364-L5364INC WarpZoneControlSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5552-L5557inc NumberofLivesSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5604-L5611cpy #World7SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5714-L5724ChkVOffscr: lda Enemy_X_Position+5smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5143-L5658ProcFireballs:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5215-L5749ProcFireballs:Super Mario Bros. (World) · 0x3634-0x39c9 — $B624-$B9B9Super Mario Bros. 2 (Japan) (En) · 0x432e-0x4722 — SM2MAIN $8190-$8584Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; SetupVine has equal bytes; ProcFireballs and ProcessWhirlpools have no differing line

Cited by: Super Mario Bros.: The Lost Levels

Cannons, hammers, coins, power-ups and blocks (ProcessCannons through BlockObjMT_Updater) are Super Mario Bros.'s with the poison mushroom added and one player: BumpBlock's contents table gains poison mushroom blocks and MushFlowerBlock gains PoisonMushBlock, which sets power-up type 4; PowerUpObjHandler walks types 4 and 5 like a mushroom; BlockBumpedChk checks 19 block metatiles where Super Mario Bros. checks 14; GiveOneCoin and AddToScore use fixed offsets where Super Mario Bros. indexes by CurrentPlayer; the head-collision and coin checks use the renumbered metatiles. SetupPowerUp is byte for byte Super Mario Bros.'s, though the poison mushroom now passes through it, and so are InitBlock_XY_Pos and SpawnBrickChunks; the cannons, hammers, jumping coins, brick shatter and bouncing blocks differ only in their addresses. super-mario-code-lineage/smb1-smb2j-items

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/process-cannons",
 "fromThrough": "super-mario-bros/block-obj-mt-updater",
 "to": "super-mario-bros-the-lost-levels/process-cannons",
 "toThrough": "super-mario-bros-the-lost-levels/block-obj-mt-updater",
 "bytes": 1358
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6305-L6305cmp #$0dSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6319-L6322.word VineBlockSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6333-L6333lda #$04SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6152-L6155cmp #$04smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6312-L6312LDY #$0dSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6358-L6358ldy #$12smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6011-L6012LDX CurrentPlayerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6071-L6071ldy #$11SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6227-L6227lda #$c5smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L5663-L6474ProcessCannons:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L5754-L6512ProcessCannons:Super Mario Bros. (World) · 0x39ca-0x3f11 — $B9BA-$BF01Super Mario Bros. 2 (Japan) (En) · 0x4723-0x4c70 — SM2MAIN $8585-$8AD2Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; SetupPowerUp, InitBlock_XY_Pos and SpawnBrickChunks have equal bytes; 10 regions have no differing line

Cited by: Super Mario Bros.: The Lost Levels

The movement and gravity routines (MoveObjectHorizontally through ImposeGravity) are Super Mario Bros.'s, instruction for instruction: ImposeGravity and MoveDropPlatform are byte for byte the same, and the other seven differ only in the addresses of their calls and jumps. super-mario-code-lineage/smb1-smb2j-motion

About: Super Mario Bros.: The Lost Levels Gravity

Value
{
 "lineage": "relocated",
 "from": "super-mario-bros/move-object-horizontally",
 "fromThrough": "super-mario-bros/impose-gravity",
 "to": "super-mario-bros-the-lost-levels/move-object-horizontally",
 "toThrough": "super-mario-bros-the-lost-levels/impose-gravity",
 "bytes": 325
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6482-L6722MovePlayerHorizontally:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6520-L6748MovePlayerHorizontally:Super Mario Bros. (World) · 0x3f12-0x4056 — $BF02-$C046Super Mario Bros. 2 (Japan) (En) · 0x4c71-0x4db5 — SM2MAIN $8AD3-$8C17Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; no line differs; ImposeGravity and MoveDropPlatform have equal bytes and every other differing byte is an absolute address operand

Cited by: Super Mario Bros.: The Lost Levels

Enemy spawning and set-up (EnemiesAndLoopsCore through InitJumpGPTroopa) are Super Mario Bros.'s with these changes: ProcLoopCommand reads 12 loop entries where Super Mario Bros. reads 11, and takes each loop's number of checks from a new MultiLoopCount table where Super Mario Bros. special-cases world 7; ProcessEnemyData skips a check in world 9 and gives one enemy code a piranha plant set-up; InitHammerBro checks the world; LakituAndSpinyHandler brings Lakitu back once LakituReappearTimer reaches 3, where Super Mario Bros. waits until it reaches 7, and brings him back lower on the screen in worlds 7 to 9 and A to D; InitBowser first erases any other Bowser; InitPiranhaPlant patches the plant's palette and pipe distance, green in worlds 1 to 3 and red from world 4 and in A to D; InitJumpGPTroopa starts the jumping paratroopa at x speed $F4 where Super Mario Bros. uses $F8. Of its 27 regions, 15 differ only in their addresses and 5 are byte for byte the same. super-mario-code-lineage/smb1-smb2j-enemy-spawning

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/enemies-and-loops-core",
 "fromThrough": "super-mario-bros/init-jump-gp-troopa",
 "to": "super-mario-bros-the-lost-levels/enemies-and-loops-core",
 "toThrough": "super-mario-bros-the-lost-levels/init-jump-gp-troopa",
 "bytes": 2033
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6797-L6797LDY #$0bSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6832-L6832ldy #$0csmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6813-L6815CMP #World7SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6850-L6850cmp MultiLoopCount,ySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7018-L7020cmp #World9SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7173-L7175cmp #World7smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L7275-L7276CMP #$07SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7265-L7266cmp #$03SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7280-L7285ldy HardWorldFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7483-L7493KKCheck: cpy ObjectOffsetSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7810-L7821sta EnemyAttributeData+PiranhaPlantsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L7895-L7895LDA #$f8SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7874-L7874lda #$f4smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L6727-L7901ChkAreaTsk:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L6758-L7878ChkAreaTsk: lda AreaParserTaskNumSuper Mario Bros. (World) · 0x4057-0x47ee — $C047-$C7DESuper Mario Bros. 2 (Japan) (En) · 0x4dc1-0x55b1 — SM2MAIN $8C23-$9413Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; InitJumpGPTroopa's lines match except one immediate; the other changed regions were read line by line

Cited by: Super Mario Bros.: The Lost Levels

The platforms' set-up, the enemy object loop, the enemies' movers, Bowser and the fireworks (InitBalPlatform through RunFireworks, 32 regions) are Super Mario Bros.'s instruction for instruction, with two changes: the enemy movers' jump table (EnemyMovementSubs) sends enemy 4, the upside-down piranha plant, to the new MoveUpsideDownPiranhaP, where Super Mario Bros. has MoveNormalEnemy; MoveSwimmingCheepCheep adds $40 to a swimming Cheep Cheep's vertical fraction each frame where Super Mario Bros. adds $20. Three of the regions are byte for byte the same, and the rest differ only in the addresses of their calls, jumps and tables. super-mario-code-lineage/smb1-smb2j-enemy-movers

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/init-bal-platform",
 "fromThrough": "super-mario-bros/run-fireworks",
 "to": "super-mario-bros-the-lost-levels/init-bal-platform",
 "toThrough": "super-mario-bros-the-lost-levels/run-fireworks",
 "bytes": 2798
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L8124-L8124MoveNormalEnemySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L8093-L8093MoveUpsideDownPiranhaPsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L8682-L8683LDA #$20SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L8621-L8622lda #$40smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L8689-L8691ADC $02smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L7906-L9574AlignP:The atlas reads this differently: BNE branches when the flag is set. Outside secondary hard mode the platform first moves 8 px left (PlatPosData entry 2), and the 8 px right at the end cancels it; in secondary hard mode it skips that move and ends 8 px right of where it started.SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L7883-L9443AlignP: ldy #$ffSuper Mario Bros. (World) · 0x47ef-0x52dc — $C7DF-$D2CCSuper Mario Bros. 2 (Japan) (En) · 0x55b2-0x609f — SM2MAIN $9414-$9F01Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; no line differs but MoveSwimmingCheepCheep's LDA #$40, an immediate, and EnemyMovementSubs' fifth entry, which names another routine; every other differing byte is an absolute address operand of the same symbol

Cited by: Super Mario Bros.: The Lost Levels

RunStarFlagObj through OffscreenBoundsCheck are Super Mario Bros.'s with these changes: RunStarFlagObj sets off fireworks when the timer's last digit matches the coin tally's, where Super Mario Bros. matches the timer's last digit against 1, 3 and 6, and adds its points to the one player's score; MovePiranhaPlant moves red piranha plants (the patched palette) every frame; BalancePlatform leaves a platform alone when its partner is no balance platform; OffscreenBoundsCheck treats upside-down piranha plants like upright ones. FirebarSpin is byte for byte the same, and the moving platforms differ only in their addresses. super-mario-code-lineage/smb1-smb2j-piranha-platforms

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/run-star-flag-obj",
 "fromThrough": "super-mario-bros/offscreen-bounds-check",
 "to": "super-mario-bros-the-lost-levels/run-star-flag-obj",
 "toThrough": "super-mario-bros-the-lost-levels/offscreen-bounds-check",
 "bytes": 1047
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L9602-L9611CMP #$06SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L9472-L9472cmp CoinDisplay+1smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L9643-L9643LDA CurrentPlayerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L9615-L9615cmp #$22SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L9682-L9684cmp #$24SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10023-L10023cpy #PiranhaPlantsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L9579-L10216StarFlagXPosAdder:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L9448-L10064StarFlagXPosAdder:Super Mario Bros. (World) · 0x52dd-0x56e5 — $D2CD-$D6D5Super Mario Bros. 2 (Japan) (En) · 0x60a0-0x64b6 — SM2MAIN $9F02-$A318Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; FirebarSpin has equal bytes; the five moving-platform regions have no differing line

Cited by: Super Mario Bros.: The Lost Levels

The collision code (FireballEnemyCollision through BlockBufferCollision) is Super Mario Bros.'s with the upside-down piranha plant, the poison mushroom and the renumbered metatiles added: the fireball, enemy, background and stomp checks treat the upside-down plant like a piranha plant; HandlePowerUpCollision injures the player on power-up type 4; InjurePlayer also does nothing while the star's StarInvincibleTimer runs; HandlePECollisions checks for the cannon's Bullet Bill before the piranha plants and Podoboo, where Super Mario Bros. checks it after them; PlayerEnemyCollision decides a stomp with LDY, DEY, BPL on the vertical speed where Super Mario Bros. uses BMI and BNE (the two disagree only at speed $80); every stomp bounces the player through a new SetBounce, at vertical speed $FA, or $F8 off red paratroopas and flying green paratroopas, where Super Mario Bros. sets $FD after a stomp that defeats an enemy and $FC after one that demotes a paratroopa or knocks an enemy into its shell; HandleClimbing gives a life for grabbing the flagpole when the coin tally's digits and the timer's last digit match; HandlePipeEntry sends the player to the warp zone's one destination whichever pipe they take, where Super Mario Bros. picks by the pipe's x position; HandleCoinMetatile's axe restores Mario's physics; ChkForLandJumpSpring sets VerticalForceDown to $70 as well as VerticalForce; PlayerHammerCollision also skips while the player is off screen; HandleEToBGCollision bounces a power-up on a bumped block without stunning it and never demotes a piranha plant; CheckPlayerVertical drops its test of how far down the screen the player is; one bounding box grows from $14 to $16. The platform collisions, LandEnemyProperly, the side checks and BlockBufferCollision differ only in their addresses, and three regions, PlayerCollisionCore among them, are byte for byte the same. super-mario-code-lineage/smb1-smb2j-collisions

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/fireball-enemy-collision",
 "fromThrough": "super-mario-bros/block-buffer-collision",
 "to": "super-mario-bros-the-lost-levels/fireball-enemy-collision",
 "toThrough": "super-mario-bros-the-lost-levels/block-buffer-collision",
 "bytes": 3511
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10190-L10190cpy #UpsideDownPiranhaPSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10255-L10258jmp InjurePlayerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10424-L10425ora StarInvincibleTimerSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10356-L10361cpy #BulletBill_CannonVarsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L10515-L10520CPY #PodobooSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11294-L11296sta VerticalForceDownsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L10556-L10558LDA Player_Y_SpeedSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10399-L10401ldy Player_Y_Speedsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L10661-L10662LDA #$fdsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L10695-L10697LDA #$fcSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10533-L10541cmp #RedParatroopaSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11225-L11231sta FlagpoleScoresmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L11521-L11529LDA Player_X_PositionSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11334-L11336lda WarpZoneNumbers,xSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11163-L11163jsr LoadMarioPhysicsSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10224-L10224ora Misc_OffscreenBitsSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11501-L11515NoDemote: cmp #PowerUpObjectsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L11066-L11072LDY Player_Y_HighPossmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L12036-L12036.db $03, $0e, $0d, $14SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L11827-L11827.byte $03, $0e, $0d, $16smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L10227-L12360FireballEnemyCDLoop:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L10070-L12141FireballEnemyCDLoop:Super Mario Bros. (World) · 0x56e9-0x6441 — $D6D9-$E431Super Mario Bros. 2 (Japan) (En) · 0x64b7-0x726d — SM2MAIN $A319-$B0CFChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; PlayerCollisionCore, GetEnemyBoundBoxOfs and PlayerEnemyDiff have equal bytes; each changed region was read line by line

Cited by: Super Mario Bros.: The Lost Levels

The sprite drawing code (DrawVine through DrawSpriteObject) is Super Mario Bros.'s with these changes: DrawPowerUp draws every mushroom from tiles $D8, $DA, $DB and $FF where Super Mario Bros. uses $76-$79, and gives the poison mushroom, a fifth row, palette 3; EnemyGfxHandler's tile table takes up $76-$79, and the handler also flips the upside-down piranha plants and colors the jumpsprings green on world numbers 2, 3 and 7; RenderPlayerSub plays the skid sound; FlagpoleGfxHandler's score table gains the 1-up; GetYOffscreenBits has two of its tables' halves swapped, its instructions unchanged; DrawBlock uses a renumbered metatile. 12 regions, PlayerGfxHandler among them, differ only in their addresses, and five, DrawSpriteObject among them, are byte for byte the same. super-mario-code-lineage/smb1-smb2j-sprite-drawing

About: Super Mario Bros.: The Lost Levels Metasprites

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/draw-vine",
 "fromThrough": "super-mario-bros/draw-sprite-object",
 "to": "super-mario-bros-the-lost-levels/draw-vine",
 "toThrough": "super-mario-bros-the-lost-levels/draw-sprite-object",
 "bytes": 3800
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L12764-L12764.db $76, $77, $78, $79SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12528-L12528.byte $d8, $da, $db, $ffSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12532-L12532.byte $d8, $da, $db, $ffSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12535-L12535.byte $02, $01, $02, $01, $03SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12635-L12635.byte $76, $79, $77, $77, $78, $78SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12672-L12683sta EnemyAttributeData+$18SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L13691-L13695sta NoiseSoundQueueSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12309-L12309.byte $fd, $fesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L14282-L14290.db $00, $08, $0c, $0eSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14020-L14028.byte $0f, $07, $03, $01smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L12372-L14386DrawVine:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L12153-L14117DrawVine:Super Mario Bros. (World) · 0x6443-0x72d9 — $E433-$F2C9Super Mario Bros. 2 (Japan) (En) · 0x7275-0x814c — SM2MAIN $B0D7-$BFAEChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; 5 regions have equal bytes; GetYOffscreenBits's instructions match and two tables differ in order

GameMenuRoutine and DemoEngine are Super Mario Bros.'s menu and demo, rewritten in part: the menu drops the one- or two-player choice and the world select, and starts the game at world 1, or at world A when A is held and the game has been beaten 8 times; Select switches between Mario and Luigi; the demo plays new button presses and durations through the same code. super-mario-code-lineage/smb1-smb2j-title-menu

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/game-menu-routine",
 "to": "super-mario-bros-the-lost-levels/game-menu-routine",
 "toThrough": "super-mario-bros-the-lost-levels/demo-engine",
 "bytes": 261
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L336-L337CMP #A_Button+Start_Buttonsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L350-L350LDX WorldSelectEnableFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14699-L14705inc HardWorldFlagSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14727-L14729sta SelectedPlayersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L460-L460.db $01, $80, $02, $81, $41, $80, $01SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14783-L14783.byte $01, $81, $01, $81, $01, $81, $02, $01smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L328-L485GameMenuRoutine:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14692-L14806StG: jmp StartGameSuper Mario Bros. (World) · 0x24f-0x32c — $823F-$831CSuper Mario Bros. (World) · 0x350-0x39a — $8340-$838ASuper Mario Bros. 2 (Japan) (En) · 0x860c-0x8710 — SM2MAIN $C46E-$C572Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; DemoEngine's code lines match and its two tables differ; GameMenuRoutine's differing lines were read

Cited by: Super Mario Bros.: The Lost Levels

LoadAreaPointer, FindAreaPointer and GetAreaDataAddrs are Super Mario Bros.'s, with the area data address tables made tables of words (indexed with an ASL) where Super Mario Bros. keeps separate low and high byte tables; the tables themselves hold The Lost Levels' worlds, and AreaDataOfsLoopback its 12 loop points. Of the level data, only the 9-byte pipe intro area (L_GroundArea10) is byte for byte Super Mario Bros.'s. super-mario-code-lineage/smb1-smb2j-area-pointers

About: Super Mario Bros.: The Lost Levels Level loading

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/load-area-pointer",
 "fromThrough": "super-mario-bros/world-addr-offsets",
 "to": "super-mario-bros-the-lost-levels/load-area-pointer",
 "toThrough": "super-mario-bros-the-lost-levels/area-data-addrs",
 "bytes": 456
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14565-L14565aslSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14567-L14567lda EnemyDataAddrs+1,ysmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3948-L3948.db $12, $36, $0e, $0e, $0e, $32, $32, $32, $0a, $26, $40SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14526-L14526L_GroundArea10:smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/levels/objects.asm#L247-L247L_GroundArea10:smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/prg.asm#L3948-L4054LoadAreaPointer:smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/levels/levels.asm#L4-L71AreaAddrOffsets:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L14536-L14686GetAreaType: and #%01100000Super Mario Bros. (World) · 0x1c08-0x1d7f — $9BF8-$9D6FSuper Mario Bros. 2 (Japan) (En) · 0x8442-0x8609 — SM2MAIN $C2A4-$C46BChecked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; the routines' lines match but the two ASLs and the word loads; every area and enemy data block of both games was compared by bytes

Cited by: Super Mario Bros.: The Lost Levels

The sound engine (SoundEngine through MusicHandler) is Super Mario Bros.'s with two new sounds in the noise handler: the skid, played on the triangle channel from SkidSfxFreqData, and the wind, played from WindFreqEnvData; both tables sit after the square 2 handler. SoundEngine, Dump_Squ1_Regs, Square1SfxHandler and MusicHandler differ only in their addresses. super-mario-code-lineage/smb1-smb2j-sound-engine

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/sound-engine",
 "fromThrough": "super-mario-bros/music-handler",
 "to": "super-mario-bros-the-lost-levels/sound-engine",
 "toThrough": "super-mario-bros-the-lost-levels/music-handler",
 "bytes": 1705
}
CodeSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L15793-L15805sta SND_TRIANGLE_REG+2SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L15857-L15857bcs PlayWindSfxSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L15784-L15784WindFreqEnvData:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L15886-L15890lda WindFreqEnvData,ysmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-engine.asm#L2-L969SndOn:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L15286-L16251SndOn: lda #$ffSuper Mario Bros. (World) · 0x72e0-0x791c — $F2D0-$F90CSuper Mario Bros. 2 (Japan) (En) · 0x943e-0x9ae6 — SM2MAIN $D2A0-$D948Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; SoundEngine, Dump_Squ1_Regs, Square1SfxHandler and MusicHandler have no differing line and only address operands differ; NoiseSfxHandler reads WindFreqEnvData for the wind

SM2MAIN's music data is Super Mario Bros.'s less the victory theme: the headers lose VictoryMusHdr and their offsets shift by its five bytes, the residual header bytes differ, and VictoryMusData is gone from between the castle-clear music and the frequency tables, with two of the three unused bytes after it (the ending's music lives in SM2DATA3). The notes of every other song and the frequency, note-length and envelope tables after them are byte for byte the same. super-mario-code-lineage/smb1-smb2j-music-data

About: Super Mario Bros.: The Lost Levels Music driver

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/music-header-data",
 "fromThrough": "super-mario-bros/star-cloud-m-data",
 "to": "super-mario-bros-the-lost-levels/music-header-data",
 "toThrough": "super-mario-bros-the-lost-levels/star-cloud-m-data",
 "bytes": 1713
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-data.asm#L55-L56VictoryMusHdr:smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-data.asm#L48-L48.db $20, $c4, $fc, $3f, $1dSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L16294-L16294ResidualHeaderData: .byte $20, $fb, $dc, $3f, $1dsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-data.asm#L349-L360VictoryMusData:smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-data.asm#L4-L406TimeRunningOutHdr:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L16254-L16623TimeRunningOutHdr: .byte $08, <TimeRunOutMusData, >TimeRunOutMusData, $27, $18Super Mario Bros. (World) · 0x791d-0x8009 — $F90D-$FFF9Super Mario Bros. 2 (Japan) (En) · 0x9ae7-0xa197 — SM2MAIN $D949-$DFF9Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; the headers' lines match but VictoryMusHdr and the residual bytes; the notes and tables match the byte compare's two runs of 1,299 and 251 bytes

1,299 bytes of The Lost Levels' music are Super Mario Bros.'s byte for byte: the last bytes of the music headers and the notes of every song SM2MAIN plays, from the star music (Star_CloudMData) through the ground music's parts, death, castle, game over, time running out, level end, underground, water and the castle-clear music (EndOfCastleMusData). super-mario-code-lineage/smb1-smb2j-song-notes

About: Super Mario Bros.: The Lost Levels Music driver

Value
{
 "lineage": "identical",
 "from": "super-mario-bros/star-cloud-m-data",
 "to": "super-mario-bros-the-lost-levels/star-cloud-m-data",
 "bytes": 1299
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-data.asm#L114-L347GroundM_P1Data:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2main.asm#L16341-L16574GroundM_P1Data:Super Mario Bros. (World) · 0x79c5-0x7ed7 — $F9B5-$FEC7Super Mario Bros. 2 (Japan) (En) · 0x9b8a-0xa09c — SM2MAIN $D9EC-$DEFEChecked by claude, 2026-10-26 — compared the two ROM ranges (equal digests) and read the labels they span in both disassemblies at their pins

Cited by: Super Mario Bros.: The Lost Levels

AlternateSoundEngine, the ending's sound engine in SM2DATA3, is a rewrite of Super Mario Bros.'s MusicHandler that keeps its note and length code: it has no event or area music buffers and no time-running-out handling, steps through a list of patterns with PatternNumber, reading each pattern's header from MusicHeaderData, has its own pause and silence code, and plays the ending's music on the disk system's wavetable channel as well as the square, triangle and noise channels, with its own waveform, envelope and modulation tables. super-mario-code-lineage/smb1-smb2j-ending-sound

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "rewritten",
 "from": "super-mario-bros/music-handler",
 "to": "super-mario-bros-the-lost-levels/alt-sound-engine",
 "bytes": 856
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-engine.asm#L608-L609ORA AreaMusicBuffersmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-engine.asm#L625-L625CMP #TimeRunningOutMusicSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L771-L777lda GamePauseStatusSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L803-L807inc PatternNumberSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L815-L815lda MusicHeaderData-$b,ySMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L773-L774sta FDSSND_VOLUMECTRLSMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L818-L820sta MusicDataLowsmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · src/music-engine.asm#L601-L969MusicHandler:SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · sm2data3.asm#L771-L1186RunAltSoundRoutines:Super Mario Bros. (World) · 0x76a1-0x791c — $F691-$F90CSuper Mario Bros. 2 (Japan) (En) · 0xb67e-0xb9d5 — SM2DATA3 $CC5F-$CFB6Checked by claude, 2026-10-26 — diffed both disassemblies' cited lines at their pins (xkeeper-smb1 1cc3c92, doppelganger-smb2j 9c40114) by a normalized line diff with symbol names blanked, read every differing line, and compared each matched line's bytes in the two ROMs; read AlternateSoundEngine through ProcessLengthData against MusicHandler; the note and length handlers' lines recur in order, and the buffer, pattern, pause and wavetable code is new

The player's 80 sprite tiles, $00-$4F of the sprite pattern table, are Super Mario Bros.'s byte for byte. super-mario-code-lineage/smb1-smb2j-player-tiles

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "identical",
 "from": "super-mario-bros/chr-sprites-player",
 "to": "super-mario-bros-the-lost-levels/chr-sprites",
 "bytes": 1280
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · smb1.asm#L33-L33.incbin "smb1.chr"SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · fdswrap.asm#L61-L61.incbin "SM2CHAR1.CHR"Super Mario Bros. (World) · 0x8010-0x850f — CHR $0000-$04FFSuper Mario Bros. 2 (Japan) (En) · 0x13c-0x63b — SM2CHAR1 CHR $0000-$04FFChecked by claude, 2026-10-26 — compared the two ROM ranges (equal digests)

Cited by: Super Mario Bros.: The Lost Levels

Sprite tiles $50-$FF are Super Mario Bros.'s but for 15: $5B, $76-$7B, $85, $86, $D8, $DA, $DB and $FD-$FF differ, among them $76-$79, Super Mario Bros.'s mushroom, which The Lost Levels' enemy table now draws, and the mushrooms' new tiles. super-mario-code-lineage/smb1-smb2j-sprite-tiles

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/chr-sprites-objects",
 "to": "super-mario-bros-the-lost-levels/chr-sprites",
 "bytes": 2816
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · smb1.asm#L33-L33.incbin "smb1.chr"SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · fdswrap.asm#L61-L61.incbin "SM2CHAR1.CHR"Super Mario Bros. (World) · 0x8510-0x900f — CHR $0500-$0FFFSuper Mario Bros. 2 (Japan) (En) · 0x63c-0x113b — SM2CHAR1 CHR $0500-$0FFFChecked by claude, 2026-10-26 — compared the two pattern tables tile by tile (16 bytes each) at equal tile numbers

The font, background tiles $00-$23 (the digits and A to Z), keeps Super Mario Bros.'s layout, so GameText spells with the same numbers, but every one of its 36 tiles differs from Super Mario Bros.'s. super-mario-code-lineage/smb1-smb2j-font

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "rewritten",
 "from": "super-mario-bros/chr-font",
 "to": "super-mario-bros-the-lost-levels/chr-font",
 "bytes": 576
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · smb1.asm#L33-L33.incbin "smb1.chr"SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · fdswrap.asm#L61-L61.incbin "SM2CHAR1.CHR"Super Mario Bros. (World) · 0x9010-0x924f — CHR $1000-$123FSuper Mario Bros. 2 (Japan) (En) · 0x113c-0x137b — SM2CHAR1 CHR $1000-$123FChecked by claude, 2026-10-26 — compared the two pattern tables tile by tile (16 bytes each) at equal tile numbers

Background tiles $24-$EB are Super Mario Bros.'s but for 65 of their 200: $28, $29, $2B-$2D, $30-$3C, $45, $47, $4B, $4C, $4E-$52, $5D, $5E, $6B-$76, $80, $81, $9B-$9E, $A0, $A1, $A9, $AA, $AF, $B4-$BD, $C0, $C1 and $CF differ. super-mario-code-lineage/smb1-smb2j-background-tiles

About: Super Mario Bros.: The Lost Levels

Value
{
 "lineage": "changed",
 "from": "super-mario-bros/chr-background",
 "to": "super-mario-bros-the-lost-levels/chr-background",
 "bytes": 3200
}
Codesmb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1) · smb1.asm#L33-L33.incbin "smb1.chr"SMB2J disassembly for ca65 (threecreepio/smb2j-disassembly) · fdswrap.asm#L61-L61.incbin "SM2CHAR1.CHR"Super Mario Bros. (World) · 0x9250-0x9ecf — CHR $1240-$1EBFSuper Mario Bros. 2 (Japan) (En) · 0x137c-0x1ffb — SM2CHAR1 CHR $1240-$1EBFChecked by claude, 2026-10-26 — compared the two pattern tables tile by tile (16 bytes each) at equal tile numbers