./mame64 apple2e -sl4 arcbd -flop1 Amparcade_1983_Third_Millenium_Engineering_Corporation.do -debug
It was spinning in a loop around 088e and proceeding no further.
I set a break point at 088e with "bpset 088e" and after it hit the breakpoint, did a "history".
It was obviously writing data to $c0c1 and $c0c0.
I also did a disassembly from 800 to 1800 with "dasm mldemo.asm,800,1000" to take a look at.
less mldemo.asm | grep '$c0c1'
08E4: AD C1 C0 lda $c0c1
0990: 8D C1 C0 sta $c0c1
0993: 8E C1 C0 stx $c0c1
0A80: 8D C1 C0 sta $c0c1
0A83: 8C C1 C0 sty $c0c1
less mldemo.asm | grep '$c0c0'
0859: 8D C0 C0 sta $c0c0
09B3: 8D C0 C0 sta $c0c0
09DE: 8D C0 C0 sta $c0c0
0A09: 8D C0 C0 sta $c0c0
0A3B: 8D C0 C0 sta $c0c0
0A68: 8D C0 C0 sta $c0c0
The arcade board is supposed to be in slot#4 which maps to the $c0cx memory space, and the code in a2arcade.cpp looks like this:
======================================================
/*
C0nx map:
0 - TMS read vram
1 - TMS read status
2 - TMS write vram
3 - TMS write register
5 - AY register select
6 - AY data
*/
void a2bus_arcboard_device::write_c0nx(address_space &space, uint8_t offset, uint8_t data)
{
switch (offset)
{
case 2:
m_tms->vram_write(space, 0, data);
break;
case 3:
m_tms->register_write(space, 0, data);
break;
case 5:
m_ay->address_w(space, 0, data);
break;
case 6:
m_ay->data_w(space, 0, data);
break;
}
}
So if it's writing c0c0 and c0c1, nothing is happening since we've got no cases for that.
So let's add case 0 and case 1: (assuming they're just like case 2 and 3)
=================================
void a2bus_arcboard_device::write_c0nx(address_space &space, uint8_t offset, uint8_t data)
{
switch (offset)
{
case 0:
m_tms->vram_write(space, 0, data);
break;
case 1:
m_tms->register_write(space, 0, data);
break;
case 2:
m_tms->vram_write(space, 0, data);
break;
case 3:
m_tms->register_write(space, 0, data);
break;
case 5:
m_ay->address_w(space, 0, data);
break;
case 6:
m_ay->data_w(space, 0, data);
break;
}
}
And things start working!
Happy guy from the MLDEMO hotel scene: