mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
trkfldch / my1stddr - don't just blow up at least (nw) (#5102)
* trkfldch / my1stddr - don't just blow up at least (nw) * unimportant rubbish (nw) * nonsense (nw) * basically nothing (nw) * possible irq reg (nw) * outside irq (nw) * looking at register use (nw)
This commit is contained in:
parent
7da9eaffd0
commit
7ddee052fa
@ -15,21 +15,10 @@ TV0002 R1.0 Track & Field
|
||||
|
||||
DDR & TF PCBs look identical, all the parts are in the same place, the traces are the same, and the silkscreened part # for resistors and caps are the same.
|
||||
|
||||
currently dies after call at
|
||||
Some of m_unkregs must retain value (or return certain things) or RAM containing vectors gets blanked and game crashes.
|
||||
The G65816 code on these is VERY ugly and difficult to follow, many redundant statements, excessive mode switching, accessing things via pointers to pointers etc.
|
||||
|
||||
00:AE85: LDA $0b
|
||||
00:AE87: TAX
|
||||
00:AE88: LDA $0d
|
||||
00:AE8A: JSL $00a044
|
||||
|
||||
00:A044: SEP #$20
|
||||
00:A046: PHA
|
||||
00:A047: REP #$20
|
||||
00:A049: DEX
|
||||
00:A04A: PHX
|
||||
00:A04B: RTL
|
||||
|
||||
which pushes some values onto the stack, then RTLs to them (but the values at $0b and $0d at both 00, so it jumps to 0 and dies)
|
||||
One of the vectors points to 0x6000, there is nothing mapped there, could it be a small internal ROM or some debug trap for development?
|
||||
|
||||
*/
|
||||
|
||||
@ -40,6 +29,8 @@ which pushes some values onto the stack, then RTLs to them (but the values at $0
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "machine/timer.h"
|
||||
|
||||
|
||||
class trkfldch_state : public driver_device
|
||||
{
|
||||
@ -52,6 +43,7 @@ public:
|
||||
{ }
|
||||
|
||||
void trkfldch(machine_config &config);
|
||||
void vectors_map(address_map &map);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -67,8 +59,17 @@ private:
|
||||
uint32_t screen_update_trkfldch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void trkfldch_map(address_map &map);
|
||||
|
||||
DECLARE_READ8_MEMBER(unk_7804_read);
|
||||
DECLARE_READ8_MEMBER(unk_7805_read);
|
||||
DECLARE_READ8_MEMBER(read_vector);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
|
||||
|
||||
uint8_t m_which_vector;
|
||||
|
||||
DECLARE_READ8_MEMBER(unkregs_r);
|
||||
DECLARE_WRITE8_MEMBER(unkregs_w);
|
||||
|
||||
uint8_t m_unkregs[0x100];
|
||||
|
||||
};
|
||||
|
||||
void trkfldch_state::video_start()
|
||||
@ -81,15 +82,7 @@ uint32_t trkfldch_state::screen_update_trkfldch(screen_device &screen, bitmap_in
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(trkfldch_state::unk_7804_read)
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(trkfldch_state::unk_7805_read)
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void trkfldch_state::trkfldch_map(address_map &map)
|
||||
{
|
||||
@ -100,12 +93,84 @@ void trkfldch_state::trkfldch_map(address_map &map)
|
||||
map(0x007000, 0x0072ff).ram();
|
||||
|
||||
// 7800 - 78xx look like registers?
|
||||
map(0x007804, 0x007804).r(FUNC(trkfldch_state::unk_7804_read));
|
||||
map(0x007805, 0x007805).r(FUNC(trkfldch_state::unk_7805_read));
|
||||
map(0x007800, 0x0078ff).rw(FUNC(trkfldch_state::unkregs_r), FUNC(trkfldch_state::unkregs_w));
|
||||
|
||||
map(0x008000, 0x3fffff).rom().region("maincpu", 0x000000); // good for code mapped at 008000 and 050000 at least
|
||||
}
|
||||
|
||||
void trkfldch_state::vectors_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x1f).r(FUNC(trkfldch_state::read_vector));
|
||||
}
|
||||
|
||||
READ8_MEMBER(trkfldch_state::read_vector)
|
||||
{
|
||||
uint8_t *rom = memregion("maincpu")->base();
|
||||
|
||||
/* what appears to be a table of vectors apepars at the START of ROM, maybe this gets copied to RAM, maybe used directly?
|
||||
00 : (invalid)
|
||||
02 : (invalid)
|
||||
04 : 0xA2C6 (dummy)
|
||||
06 : 0xA334 (real function - vbl?)
|
||||
08 : 0xA300 (dummy)
|
||||
0a : 0xA2E0 (dummy)
|
||||
0c : 0xA2B9 (dummy)
|
||||
0e : 0xA2ED (dummy)
|
||||
10 : 0xA2D3 (dummy)
|
||||
12 : 0xA327 (dummy)
|
||||
14 : 0xA30D (real function)
|
||||
16 : 0x6000 (points at ram? or some internal ROM? we have nothing mapped here, not cleared as RAM either)
|
||||
18 : 0xA31A (dummy)
|
||||
1a : 0xA2AC (dummy)
|
||||
1c : 0xA341 (boot vector)
|
||||
1e : (invalid)
|
||||
*/
|
||||
|
||||
logerror("reading vector offset %02x\n", offset);
|
||||
|
||||
if (offset == 0x0b)
|
||||
{ // NMI
|
||||
return rom[m_which_vector+1];
|
||||
}
|
||||
else if (offset == 0x0a)
|
||||
{ // NMI
|
||||
return rom[m_which_vector];
|
||||
}
|
||||
|
||||
// boot vector
|
||||
return rom[offset];
|
||||
}
|
||||
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(trkfldch_state::scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
if (scanline == 200)
|
||||
{
|
||||
m_which_vector = 0x06;
|
||||
m_maincpu->set_input_line(G65816_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
else if (scanline == 201)
|
||||
{
|
||||
m_which_vector = 0x06;
|
||||
m_maincpu->set_input_line(G65816_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
if (scanline == 20)
|
||||
{
|
||||
m_which_vector = 0x14;
|
||||
m_maincpu->set_input_line(G65816_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
else if (scanline == 21)
|
||||
{
|
||||
m_which_vector = 0x14;
|
||||
m_maincpu->set_input_line(G65816_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( trkfldch )
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -125,46 +190,425 @@ static GFXDECODE_START( gfx_trkfldch )
|
||||
GFXDECODE_ENTRY( "maincpu", 0, tiles8x8_layout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
/*
|
||||
|
||||
7800 / 7801 seem to be IRQ related
|
||||
|
||||
7800 : 0001 - ? (there is no irq 0x00)
|
||||
0002 - ? (there is no irq 0x02)
|
||||
0004 used in irq 0x04
|
||||
0008 used in irq 0x06
|
||||
0010 used in irq 0x08
|
||||
0020 used in irq 0x0a
|
||||
0x40 used in irq 0x0c
|
||||
0x80 used in irq 0x0e (and by code accessing other ports in the main execution?!)
|
||||
|
||||
7801 : 0001 used in irq 0x10
|
||||
: 0002 used in irq 0x12
|
||||
: 0004 used in irq 0x14
|
||||
: 0008 - ? (there is no irq 0x016, it points to unknown area? and we have no code touching this bit)
|
||||
: 0010 used in irq 0x18
|
||||
: 0020 used in irq 0x1a and 0x06?! (used with OR instead of EOR in 0x06, force IRQ?)
|
||||
: 0x40 - ? (there is no irq 0x1c - it's the boot vector)
|
||||
: 0x80 - ? (there is no irq 0x1e)
|
||||
|
||||
*/
|
||||
|
||||
READ8_MEMBER(trkfldch_state::unkregs_r)
|
||||
{
|
||||
uint8_t ret = m_unkregs[offset];
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: // IRQ status?, see above
|
||||
ret = machine().rand();
|
||||
//logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
|
||||
case 0x01: // IRQ status?, see above
|
||||
ret = machine().rand();
|
||||
//logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
ret = 0xff;
|
||||
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
|
||||
case 0x05: // only read as a side effect of reading port 0x4 in 16-bit mode?
|
||||
ret = 0xff;
|
||||
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
|
||||
case 0x70: // read in irq (inputs?)
|
||||
ret = machine().rand();
|
||||
//logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(trkfldch_state::unkregs_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: // IRQ ack/force?, see above
|
||||
// logerror("%s: unkregs_w (IRQ ack/force?) %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x01: // IRQ maybe status, see above
|
||||
// logerror("%s: unkregs_w (IRQ ack/force?) %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x02: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x03: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x04: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x05: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
// is it significant that 0x10 goes up to 0x1a, 0x20 to 0x2b, 0x30 to 0x3b could be 3 sets of similar things?
|
||||
|
||||
case 0x10:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x11:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x12: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x13:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x14: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x15:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x16:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x17:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x18:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x19:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x1a:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case 0x20: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x21: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x22: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x23: // after a long time
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x24: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x25: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x26:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x27:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x28:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x29:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x2a:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x2b:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case 0x30:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x31:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x32: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x33: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x34: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x36: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x37: // rarely
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x3a:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x3b:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case 0x42:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x43:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case 0x54: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x55: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x56: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case 0x60:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x61:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x62:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x63:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x64:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x65:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x66:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x67: // after a long time
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x68: // rarely (my1stddr)
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x69: // after a long time
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x6b: // after a long time
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x6c: // rarely (my1stddr)
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x6d: // after a long time
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
// 7x = I/O area?
|
||||
|
||||
|
||||
case 0x71: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x72: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x73: // some kind of serial device?
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x74: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x75: // some kind of serial device? (used with 73?)
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x76: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x77: // every second or so
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x78: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x79: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x7a: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x7f: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
case 0x81: // startup (my1stddr)
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x82: // startup (my1stddr)
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x83:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0x84:
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
case 0xb5: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
case 0xb6: // significant data transfer shortly after boot
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case 0xca: // startup
|
||||
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
//printf("%s: unkregs_w %04x %02x\n", machine().describe_context().c_str(), offset, data);
|
||||
break;
|
||||
}
|
||||
|
||||
m_unkregs[offset] = data;
|
||||
}
|
||||
|
||||
void trkfldch_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void trkfldch_state::machine_reset()
|
||||
{
|
||||
uint8_t *rom = memregion("maincpu")->base();
|
||||
m_which_vector = 0x06;
|
||||
|
||||
int vector = 0xe;
|
||||
|
||||
/* what appears to be a table of vectors apepars at the START of ROM, maybe this gets copied to RAM, maybe used directly?
|
||||
0: (invalid)
|
||||
1: (invalid)
|
||||
2: 0xA2C6
|
||||
3: 0xA334
|
||||
4: 0xA300
|
||||
5: 0xA2E0
|
||||
6: 0xA2B9
|
||||
7: 0xA2ED // possible irq vector pointer, THIS IS NOT THE BOOT CODE!
|
||||
8: 0xA2D3
|
||||
9: 0xA327
|
||||
a: 0xA30D
|
||||
b: 0x6000
|
||||
c: 0xA31A
|
||||
d: 0xA2AC
|
||||
e: 0xA341
|
||||
f: (invalid)
|
||||
*/
|
||||
|
||||
uint16_t addr = (rom[vector * 2 + 1] << 8) | (rom[vector * 2]);
|
||||
|
||||
m_maincpu->set_state_int(1, addr);
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
m_unkregs[i] = 0x00;
|
||||
}
|
||||
|
||||
void trkfldch_state::trkfldch(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
G65816(config, m_maincpu, 20000000);
|
||||
//m_maincpu->set_addrmap(AS_DATA, &tv965_state::mem_map);
|
||||
//m_maincpu->set_addrmap(AS_DATA, &trkfldch_state::mem_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &trkfldch_state::trkfldch_map);
|
||||
m_maincpu->set_addrmap(g65816_device::AS_VECTORS, &trkfldch_state::vectors_map);
|
||||
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(trkfldch_state::scanline), "screen", 0, 1);
|
||||
|
||||
/* video hardware */
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
|
Loading…
Reference in New Issue
Block a user