Skip to content

Feat(): Arbalest and Metafox - #1445

Draft
asturur wants to merge 17 commits into
masterfrom
arbalest
Draft

Feat(): Arbalest and Metafox#1445
asturur wants to merge 17 commits into
masterfrom
arbalest

Conversation

@asturur

@asturur asturur commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Arbalest and metafox are 2 very similar games based on a different configuration of the seta hardware, the caliber 50 arcade board.

This core to work required some updates on shared modules that need to be tested once compiled, and the game themselves need to be checked for exact offsets.

I ll update the PR description and turn it non draft as soon as i also tested the affected games ( kiwi/cal50)

gameplay video from original pcb ( audio/video compare):

https://www.youtube.com/watch?v=CRsELrussJU from second 40

videos from the core

metafox_5000.mp4
arbalest_5000.mp4

( the videos ran slow because i encoded them wrongly )

close #1442

asturur and others added 3 commits June 28, 2026 08:53
New multi-game core for the metafox-class members of downtown.cpp:
metafox (game_id 0) and arbalester (game_id 1), selected by MRA header
byte 0. cfg/files.yaml imports the shared cal50/kiwi building blocks;
only the divergent glue is local (jtarbalest_{game,main,sub,sound}.v).

Topology vs calibr50: X1-010 on the main 68000 bus (0x100000); the 65C02
is an I/O / protection coprocessor with shared RAM (main 0xb00000 <-> sub
0x5000); inputs flow sub -> shared RAM -> main. metafox uses the X1-017
offset*0x1f protection (gated to game_id 0); arbalest uses the 0x80000
debug-read stub instead. The sub I/O space's 0x1004 status port reads 0.

Shared sprite-engine change (kiwi + cal50): parametrize jtkiwi_obj,
jtkiwi_gfx and jtcal50_video with OBJAW (12/13) + SETAC (0/1). The
metafox-class X1-001 needs a 16 KB sprite RAM with the setac bank
(2 buffers, bank = ((ctrl2^(~ctrl2<<1))&0x40) -> word 0x1000). The
defaults reproduce calibr50/kiwi behaviour exactly; cal50 + kiwi lint
unchanged.

Shared X1-010 PCM fix (modules/jtx1010): the end register is widened to
9 bits so end=0 maps to the full 0x100-page range (metafox/arbalest never
write end, relying on that hardware behaviour). For end!=0 the compare is
bit-identical to before, so calibr50 is unaffected.

State (sim): both sets boot and render their attract screens; the X1-012
tilemap and X1-001 sprites render; the 65C02 I/O sub runs its loop and
registers coins/inputs; X1-010 audio plays. See cores/arbalest/doc/STATUS.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@asturur
asturur marked this pull request as draft June 28, 2026 16:35
@asturur
asturur marked this pull request as ready for review July 7, 2026 08:03
@asturur

asturur commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator Author

I turned ON ready for review because i need to grab the compiled caliber50 and jtkiwi

@asturur asturur closed this Jul 7, 2026
@github-project-automation github-project-automation Bot moved this to To be released in JTCores Jul 7, 2026
@asturur asturur reopened this Jul 7, 2026
@github-project-automation github-project-automation Bot moved this from To be released to 🙋‍♂️ Backlog in JTCores Jul 7, 2026
@asturur

asturur commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator Author

i have been told the audio looping on music with samples seems off.

@asturur
asturur marked this pull request as draft August 4, 2026 13:15
@asturur

asturur commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator Author

@jotego your changes to cal50 and some let go on my side make this PR way thinner it was before. good news. I ll see what else i can do to avoid extra params.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: 🙋‍♂️ Backlog

Development

Successfully merging this pull request may close these issues.

feat(): Extend caliber 50 work to metafox and arbalester

1 participant