data/claims/sml.yamlSuper Mario Land (kaspermeerts' disassembly, measured in Mesen)
Game: Super Mario Land.
A jump starts on the frame A goes down while Mario's jump status ($C207) is 0 and his on-ground flag ($C20A) is set. Unless Mario is running, the jump also sets the jump index $C208 to 2. sml/jump-start
About: Super Mario Land Jump
CodeSuper Mario Land disassembly (kaspermeerts/supermarioland) ·bank3.asm#L398-L430.jmp_49BF
ld a, [de]
and a
jr nz, .jmp_49B5
ld hl, $C20A ; 1 if on ground
ld a, [hl]
and a
jr z, .jmp_49B5
bit 0, b ; A button
jr z, .jmp_49B5
…
ld a, [$C20E] ; walking running
…Super Mario Land disassembly (kaspermeerts/supermarioland) · bank3.asm#L370-L373ld de, $C207 ; jump status
ldh a, [hJoyPressed]
ld b, a
ldh a, [hJoyHeld]Checked by claude, 2026-10-21 — read the input routine from .jmp_498B; b holds the new presses, de points at the jump status, and $C20E is 4 only while runningMeasured in the game, a standing jump with A held moves Mario up nothing on the press frame, then 3, 3, and 2 px a frame to 24 px, then 1 px or 0 a frame to an apex of 33 px on frame 23. The fall retraces the rise in reverse, and he lands on frame 49. sml/jump-arc
About: Super Mario Land Jump
Value
{
"apex": 33,
"apexAt": 23,
"airtime": 49,
"rise": [
0,
3,
3,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
0,
1,
0,
1
]
}bank3.asm#L398-L430 — the jump start; it sets the jump index $C208 to 2 unless Mario is runningld a, [$C20E]
cp a, $04
jr z, .jmp_49ED
ld a, $02
ld [$C20E], a
ld [$C208], a
…
ld a, $01
ld [de], aChecked by claude-agent, 2026-10-25 — Read the jump start (bank3.asm L398-430) at the pinned commit: it sets the jump status to 1 and, unless Mario is running ($C20E = 4, L417-421), the jump index $C208 to 2, and nothing there sets a vertical speed; the per-frame steps, the apex, and the mirrored fall are the probe's measurement in the game.Probe: probes/jump-physics/super-mario-land.mjsThe probe walks right 12 frames before jumping: at the very start of World 1-1 something overhead stops a held jump at 20 px. The disassembly doesn't yet cover the routine that moves Mario through the table, so the table itself is read from the measurement. The mirrored steps fit a walk through a table rather than a speed under gravity; that is the atlas's reading, not code we have read.
Cited by: Super Mario Land
Letting go of A while Mario rises moves the jump index to $0F, near where the table's 1 px steps begin, unless the index is already at $0F or past it. Measured, a 1-frame tap reaches 10 px, 5 frames 19 px, 10 frames 29 px, and 15 frames or more the full 33. sml/release
About: Super Mario Land Variable jump height
Value
{
"1": 10,
"5": 19,
"10": 29,
"15": 33
}bank3.asm#L384-L389.jmp_49AC
bit 0, a ; A button
jr nz, .jmp_49BF
ld a, [de]
cp a, $01
jr z, Jmp_4966Super Mario Land disassembly (kaspermeerts/supermarioland) · bank3.asm#L338-L348Jmp_4966:: ; 4966
inc e
ld a, [de]
cp a, $0F
jr nc, .jmp_49B5
inc e
dec a
ld [de], a
dec e
ld a, $0F
ld [de], aChecked by claude, 2026-10-21 — read the release branch (a is hJoyHeld there; status 1 is rising); ran the probe: a tap rises 3 px and then 1 px steps, and the held rise of 3, 3, 2 … switches to 1 px steps on the frame after the releaseProbe: probes/jump-physics/super-mario-land.mjsCited by: Super Mario Land
Measured, a running jump with A held rises 4, 4, 3, 3, then 2 px a frame and peaks at 41 px on frame 25, higher than the standing jump's 33. sml/run-jump
About: Super Mario Land Jump
Value
{
"apex": 41,
"apexAt": 25
}bank3.asm#L417-L422ld a, [$C20E] ; walking running
cp a, $04
jr z, .jmp_49ED
ld a, $02
ld [$C20E], a
ld [$C208], aChecked by claude, 2026-10-21 — ran the probe: 40 frames of Right and B, then a jump with A held 40; the first two steps (4, 4) are ones the standing jump skips, which fits a running jump starting the table at index 0 rather than 2Probe: probes/jump-physics/super-mario-land.mjsThe run continues into the first Goomba after the apex, so only the rise and apex are used.
Cited by: Super Mario Land