emu_main: vrend410 map -- the production firmware (game BT/RP VREND.MNG)

Hook addrs re-derived by masked-immediate signature match vs capfw7 (12/13
exact; reply via unique opcode-only signature). vrend410.mng = the shipped
385KB build with its 7-word Division header rewritten to the loader's 3-word
form. Result: the production build boots and dispatches init + create from
the live netdeath battle wire -- where capfw7 died instantly on the newer
action 0x2d. Stalls at cmd 2 in a bla+fst.d memclear (~1.1M iters / ~9MB)
that pure Python can't chew but the C core (emu860c, 90M steps/s) will --
next: live_server on the C core with fw=vrend410.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-19 15:42:49 -05:00
co-authored by Claude Opus 4.8
parent 28785d9486
commit 99f46bea78
+21
View File
@@ -65,6 +65,27 @@ MAPS = {
(0x1000, 0), # _processorId
],
),
# The PRODUCTION build shipped in the game files -- ALPHA_1/REL410/{BT,RP}/
# VREND.MNG (identical). Speaks the newer protocol (action 0x2d etc.) the
# battle captures use. Hook addrs re-derived 2026-07-19 by masked-immediate
# signature match vs capfw7 (12/13) + opcode-only for reply (unique). Build
# via: strip the 7-word Division header -> 3-word loader header (the
# vrend410.mng converter in this dir's history / scratch).
'vrend410': dict(
fw=os.path.join(_HERE, 'vrend410.mng'),
main=0xf0403f00, bla=0xf04293a0,
mynode=0xf0402560, nodes=0xf0402600, receive=0xf0402440,
vinit=0xf040ee80, doinit=0xf040bb60,
reply=0xf040ba40, sendprim=None, putchar=None,
alloc=0xf0435e68, v2p=0xf0435b40,
lockacq=0xf042cba0, lockrel=0xf042cbf8,
chain=None, chain_tbl=None, chain_tail=None,
intdiv=None,
igcwait=0xf042a070,
seeds=[
(0x1000, 0), # _processorId
],
),
}
ANAME = {int(a): a.name for a in A}