Pointer-ified the konami CPU core. Changed setlines callback to

pass a device. Updated and de-deprecat-ed the drivers that used
it. Fixed interrupt handling to follow more recent behavior
expectations (no PULSE_LINE on non-NMI lines).
This commit is contained in:
Aaron Giles 2008-12-06 21:24:38 +00:00
parent c023001a86
commit 63f26b610b
16 changed files with 1666 additions and 1704 deletions

View File

@ -42,7 +42,8 @@
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
/* Konami Registers */
typedef struct
typedef struct _konami_state konami_state;
struct _konami_state
{
PAIR pc; /* Program counter */
PAIR ppc; /* Previous program counter */
@ -50,17 +51,19 @@ typedef struct
PAIR dp; /* Direct Page register (page in MSB) */
PAIR u, s; /* Stack pointers */
PAIR x, y; /* Index registers */
PAIR ea;
UINT8 cc;
UINT8 ireg; /* first opcode */
UINT8 ireg;
UINT8 irq_state[2];
int extra_cycles; /* cycles used up by interrupts */
cpu_irq_callback irq_callback;
const device_config *device;
const address_space *program;
UINT8 int_state; /* SYNC and CWAI flags */
UINT8 nmi_state;
void (*setlines_callback)( int lines ); /* callback called when A16-A23 are set */
} konami_Regs;
UINT8 nmi_pending;
int icount;
const device_config *device;
const address_space *program;
konami_set_lines_func setlines_callback;
};
/* flag bits in the cc register */
#define CC_C 0x01 /* Carry */
@ -73,119 +76,60 @@ typedef struct
#define CC_E 0x80 /* entire state pushed */
/* Konami registers */
static konami_Regs konami;
#define pPPC cpustate->ppc
#define pPC cpustate->pc
#define pU cpustate->u
#define pS cpustate->s
#define pX cpustate->x
#define pY cpustate->y
#define pD cpustate->d
#define pPPC konami.ppc
#define pPC konami.pc
#define pU konami.u
#define pS konami.s
#define pX konami.x
#define pY konami.y
#define pD konami.d
#define PPC cpustate->ppc.w.l
#define PC cpustate->pc.w.l
#define PCD cpustate->pc.d
#define U cpustate->u.w.l
#define UD cpustate->u.d
#define S cpustate->s.w.l
#define SD cpustate->s.d
#define X cpustate->x.w.l
#define XD cpustate->x.d
#define Y cpustate->y.w.l
#define YD cpustate->y.d
#define D cpustate->d.w.l
#define A cpustate->d.b.h
#define B cpustate->d.b.l
#define DP cpustate->dp.b.h
#define DPD cpustate->dp.d
#define CC cpustate->cc
#define PPC konami.ppc.w.l
#define PC konami.pc.w.l
#define PCD konami.pc.d
#define U konami.u.w.l
#define UD konami.u.d
#define S konami.s.w.l
#define SD konami.s.d
#define X konami.x.w.l
#define XD konami.x.d
#define Y konami.y.w.l
#define YD konami.y.d
#define D konami.d.w.l
#define A konami.d.b.h
#define B konami.d.b.l
#define DP konami.dp.b.h
#define DPD konami.dp.d
#define CC konami.cc
static PAIR ea; /* effective address */
#define EA ea.w.l
#define EAD ea.d
#define EAB cpustate->ea.b.l
#define EA cpustate->ea.w.l
#define EAD cpustate->ea.d
#define KONAMI_CWAI 8 /* set when CWAI is waiting for an interrupt */
#define KONAMI_SYNC 16 /* set when SYNC is waiting for an interrupt */
#define KONAMI_LDS 32 /* set when LDS occured at least once */
#define CHECK_IRQ_LINES \
if( konami.irq_state[KONAMI_IRQ_LINE] != CLEAR_LINE || \
konami.irq_state[KONAMI_FIRQ_LINE] != CLEAR_LINE ) \
konami.int_state &= ~KONAMI_SYNC; /* clear SYNC flag */ \
if( konami.irq_state[KONAMI_FIRQ_LINE]!=CLEAR_LINE && !(CC & CC_IF) ) \
{ \
/* fast IRQ */ \
/* state already saved by CWAI? */ \
if( konami.int_state & KONAMI_CWAI ) \
{ \
konami.int_state &= ~KONAMI_CWAI; /* clear CWAI */ \
konami.extra_cycles += 7; /* subtract +7 cycles */ \
} \
else \
{ \
CC &= ~CC_E; /* save 'short' state */ \
PUSHWORD(pPC); \
PUSHBYTE(CC); \
konami.extra_cycles += 10; /* subtract +10 cycles */ \
} \
CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */ \
PCD = RM16(0xfff6); \
(void)(*konami.irq_callback)(konami.device, KONAMI_FIRQ_LINE); \
} \
else \
if( konami.irq_state[KONAMI_IRQ_LINE]!=CLEAR_LINE && !(CC & CC_II) )\
{ \
/* standard IRQ */ \
/* state already saved by CWAI? */ \
if( konami.int_state & KONAMI_CWAI ) \
{ \
konami.int_state &= ~KONAMI_CWAI; /* clear CWAI flag */ \
konami.extra_cycles += 7; /* subtract +7 cycles */ \
} \
else \
{ \
CC |= CC_E; /* save entire state */ \
PUSHWORD(pPC); \
PUSHWORD(pU); \
PUSHWORD(pY); \
PUSHWORD(pX); \
PUSHBYTE(DP); \
PUSHBYTE(B); \
PUSHBYTE(A); \
PUSHBYTE(CC); \
konami.extra_cycles += 19; /* subtract +19 cycles */ \
} \
CC |= CC_II; /* inhibit IRQ */ \
PCD = RM16(0xfff8); \
(void)(*konami.irq_callback)(konami.device, KONAMI_IRQ_LINE); \
}
/* public globals */
static int konami_ICount;
//int konami_Flags; /* flags for speed optimization (obsolete!!) */
/* these are re-defined in konami.h TO RAM, ROM or functions in memory.c */
#define RM(Addr) KONAMI_RDMEM(Addr)
#define WM(Addr,Value) KONAMI_WRMEM(Addr,Value)
#define ROP(Addr) KONAMI_RDOP(Addr)
#define ROP_ARG(Addr) KONAMI_RDOP_ARG(Addr)
#define RM(cs,Addr) memory_read_byte_8be((cs)->program, Addr)
#define WM(cs,Addr,Value) memory_write_byte_8be((cs)->program, Addr,Value)
#define ROP(cs,Addr) memory_decrypted_read_byte((cs)->program, Addr)
#define ROP_ARG(cs,Addr) memory_raw_read_byte((cs)->program, Addr)
#define SIGNED(a) (UINT16)(INT16)(INT8)(a)
/* macros to access memory */
#define IMMBYTE(b) { b = ROP_ARG(PCD); PC++; }
#define IMMWORD(w) { w.d = (ROP_ARG(PCD)<<8) | ROP_ARG(PCD+1); PC += 2; }
#define IMMBYTE(cs,b) { b = ROP_ARG(cs,PCD); PC++; }
#define IMMWORD(cs,w) { w.d = (ROP_ARG(cs,PCD)<<8) | ROP_ARG(cs,PCD+1); PC += 2; }
#define PUSHBYTE(b) --S; WM(SD,b)
#define PUSHWORD(w) --S; WM(SD,w.b.l); --S; WM(SD,w.b.h)
#define PULLBYTE(b) b=KONAMI_RDMEM(SD); S++
#define PULLWORD(w) w=KONAMI_RDMEM(SD)<<8; S++; w|=KONAMI_RDMEM(SD); S++
#define PUSHBYTE(cs,b) --S; WM(cs,SD,b)
#define PUSHWORD(cs,w) --S; WM(cs,SD,w.b.l); --S; WM(cs,SD,w.b.h)
#define PULLBYTE(cs,b) b=RM(cs,SD); S++
#define PULLWORD(cs,w) w=RM(cs,SD)<<8; S++; w|=RM(cs,SD); S++
#define PSHUBYTE(b) --U; WM(UD,b);
#define PSHUWORD(w) --U; WM(UD,w.b.l); --U; WM(UD,w.b.h)
#define PULUBYTE(b) b=KONAMI_RDMEM(UD); U++
#define PULUWORD(w) w=KONAMI_RDMEM(UD)<<8; U++; w|=KONAMI_RDMEM(UD); U++
#define PSHUBYTE(cs,b) --U; WM(cs,UD,b);
#define PSHUWORD(cs,w) --U; WM(cs,UD,w.b.l); --U; WM(cs,UD,w.b.h)
#define PULUBYTE(cs,b) b=RM(cs,UD); U++
#define PULUWORD(cs,w) w=RM(cs,UD)<<8; U++; w|=RM(cs,UD); U++
#define CLR_HNZVC CC&=~(CC_H|CC_N|CC_Z|CC_V|CC_C)
#define CLR_NZV CC&=~(CC_N|CC_Z|CC_V)
@ -256,10 +200,10 @@ CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N
#define SET_FLAGS16(a,b,r) {SET_N16(r);SET_Z16(r);SET_V16(a,b,r);SET_C16(r);}
/* macros for addressing modes (postbytes have their own code) */
#define DIRECT EAD = DPD; IMMBYTE(ea.b.l)
#define IMM8 EAD = PCD; PC++
#define IMM16 EAD = PCD; PC+=2
#define EXTENDED IMMWORD(ea)
#define DIRECT(cs) EAD = DPD; IMMBYTE(cs,EAB)
#define IMM8(cs) EAD = PCD; PC++
#define IMM16(cs) EAD = PCD; PC+=2
#define EXTENDED(cs) IMMWORD(cs,(cs)->ea)
/* macros to set status flags */
#if defined(SEC)
@ -277,27 +221,27 @@ CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N,CC_N
#define CLH CC&=~CC_H
/* macros for convenience */
#define DIRBYTE(b) DIRECT; b=RM(EAD)
#define DIRWORD(w) DIRECT; w.d=RM16(EAD)
#define EXTBYTE(b) EXTENDED; b=RM(EAD)
#define EXTWORD(w) EXTENDED; w.d=RM16(EAD)
#define DIRBYTE(cs,b) DIRECT(cs); b=RM(cs,EAD)
#define DIRWORD(cs,w) DIRECT(cs); w.d=RM16(cs,EAD)
#define EXTBYTE(cs,b) EXTENDED(cs); b=RM(cs,EAD)
#define EXTWORD(cs,w) EXTENDED(cs); w.d=RM16(cs,EAD)
/* macros for branch instructions */
#define BRANCH(f) { \
#define BRANCH(cs,f) { \
UINT8 t; \
IMMBYTE(t); \
IMMBYTE(cs,t); \
if( f ) \
{ \
PC += SIGNED(t); \
} \
}
#define LBRANCH(f) { \
#define LBRANCH(cs,f) { \
PAIR t; \
IMMWORD(t); \
IMMWORD(cs,t); \
if( f ) \
{ \
konami_ICount -= 1; \
cpustate->icount -= 1; \
PC += t.w.l; \
} \
}
@ -349,46 +293,119 @@ static const UINT8 cycles1[] =
/*F*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
INLINE UINT32 RM16( UINT32 Addr )
INLINE UINT32 RM16( konami_state *cpustate, UINT32 Addr )
{
UINT32 result = RM(Addr) << 8;
return result | RM((Addr+1)&0xffff);
UINT32 result = RM(cpustate, Addr) << 8;
return result | RM(cpustate, (Addr+1)&0xffff);
}
INLINE void WM16( UINT32 Addr, PAIR *p )
INLINE void WM16( konami_state *cpustate, UINT32 Addr, PAIR *p )
{
WM( Addr, p->b.h );
WM( (Addr+1)&0xffff, p->b.l );
WM(cpustate, Addr, p->b.h );
WM(cpustate, (Addr+1)&0xffff, p->b.l );
}
static void check_irq_lines(konami_state *cpustate)
{
if (cpustate->nmi_pending && (cpustate->int_state & KONAMI_LDS))
{
cpustate->nmi_pending = FALSE;
/* state already saved by CWAI? */
if (cpustate->int_state & KONAMI_CWAI)
{
cpustate->int_state &= ~KONAMI_CWAI;
cpustate->icount -= 7;
}
else
{
CC |= CC_E; /* save entire state */
PUSHWORD(cpustate, pPC);
PUSHWORD(cpustate, pU);
PUSHWORD(cpustate, pY);
PUSHWORD(cpustate, pX);
PUSHBYTE(cpustate, DP);
PUSHBYTE(cpustate, B);
PUSHBYTE(cpustate, A);
PUSHBYTE(cpustate, CC);
cpustate->icount -= 19;
}
CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */
PCD = RM16(cpustate, 0xfffc);
(void)(*cpustate->irq_callback)(cpustate->device, INPUT_LINE_NMI);
}
else if (cpustate->irq_state[KONAMI_FIRQ_LINE] !=CLEAR_LINE && !(CC & CC_IF))
{
/* fast IRQ */
/* state already saved by CWAI? */
if (cpustate->int_state & KONAMI_CWAI)
{
cpustate->int_state &= ~KONAMI_CWAI; /* clear CWAI */
cpustate->icount -= 7;
}
else
{
CC &= ~CC_E; /* save 'short' state */
PUSHWORD(cpustate, pPC);
PUSHBYTE(cpustate, CC);
cpustate->icount -= 10;
}
CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */
PCD = RM16(cpustate, 0xfff6);
(void)(*cpustate->irq_callback)(cpustate->device, KONAMI_FIRQ_LINE);
}
else if (cpustate->irq_state[KONAMI_IRQ_LINE] != CLEAR_LINE && !(CC & CC_II))
{
/* standard IRQ */
/* state already saved by CWAI? */
if (cpustate->int_state & KONAMI_CWAI)
{
cpustate->int_state &= ~KONAMI_CWAI; /* clear CWAI flag */
cpustate->icount -= 7;
}
else
{
CC |= CC_E; /* save entire state */
PUSHWORD(cpustate, pPC);
PUSHWORD(cpustate, pU);
PUSHWORD(cpustate, pY);
PUSHWORD(cpustate, pX);
PUSHBYTE(cpustate, DP);
PUSHBYTE(cpustate, B);
PUSHBYTE(cpustate, A);
PUSHBYTE(cpustate, CC);
cpustate->icount -= 19;
}
CC |= CC_II; /* inhibit IRQ */
PCD = RM16(cpustate, 0xfff8);
(void)(*cpustate->irq_callback)(cpustate->device, KONAMI_IRQ_LINE);
}
}
/****************************************************************************
* Get all registers in given buffer
****************************************************************************/
static CPU_GET_CONTEXT( konami )
{
if( dst )
*(konami_Regs*)dst = konami;
}
static CPU_GET_CONTEXT( konami ) { }
/****************************************************************************
* Set all registers to given values
****************************************************************************/
static CPU_SET_CONTEXT( konami )
{
if( src )
konami = *(konami_Regs*)src;
CHECK_IRQ_LINES;
}
static CPU_SET_CONTEXT( konami ) { }
/****************************************************************************/
/* Reset registers to their initial values */
/****************************************************************************/
static CPU_INIT( konami )
{
konami.irq_callback = irqcallback;
konami.device = device;
konami.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
konami_state *cpustate = device->token;
cpustate->irq_callback = irqcallback;
cpustate->device = device;
cpustate->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
state_save_register_device_item(device, 0, PC);
state_save_register_device_item(device, 0, U);
@ -398,25 +415,29 @@ static CPU_INIT( konami )
state_save_register_device_item(device, 0, D);
state_save_register_device_item(device, 0, DP);
state_save_register_device_item(device, 0, CC);
state_save_register_device_item(device, 0, konami.int_state);
state_save_register_device_item(device, 0, konami.nmi_state);
state_save_register_device_item(device, 0, konami.irq_state[0]);
state_save_register_device_item(device, 0, konami.irq_state[1]);
state_save_register_device_item(device, 0, cpustate->int_state);
state_save_register_device_item(device, 0, cpustate->nmi_state);
state_save_register_device_item(device, 0, cpustate->nmi_pending);
state_save_register_device_item(device, 0, cpustate->irq_state[0]);
state_save_register_device_item(device, 0, cpustate->irq_state[1]);
}
static CPU_RESET( konami )
{
konami.int_state = 0;
konami.nmi_state = CLEAR_LINE;
konami.irq_state[0] = CLEAR_LINE;
konami.irq_state[0] = CLEAR_LINE;
konami_state *cpustate = device->token;
cpustate->int_state = 0;
cpustate->nmi_state = CLEAR_LINE;
cpustate->nmi_pending = FALSE;
cpustate->irq_state[0] = CLEAR_LINE;
cpustate->irq_state[1] = CLEAR_LINE;
DPD = 0; /* Reset direct page register */
CC |= CC_II; /* IRQ disabled */
CC |= CC_IF; /* FIRQ disabled */
PCD = RM16(0xfffe);
PCD = RM16(cpustate, 0xfffe);
}
static CPU_EXIT( konami )
@ -427,48 +448,19 @@ static CPU_EXIT( konami )
/****************************************************************************
* Set IRQ line state
****************************************************************************/
static void set_irq_line(int irqline, int state)
static void set_irq_line(konami_state *cpustate, int irqline, int state)
{
if (state != CLEAR_LINE)
cpustate->int_state &= ~KONAMI_SYNC;
if (irqline == INPUT_LINE_NMI)
{
if (konami.nmi_state == state) return;
konami.nmi_state = state;
LOG(("KONAMI '%s' set_nmi_line %d\n", konami.device->tag, state));
if( state == CLEAR_LINE ) return;
/* if the stack was not yet initialized */
if( !(konami.int_state & KONAMI_LDS) ) return;
konami.int_state &= ~KONAMI_SYNC;
/* state already saved by CWAI? */
if( konami.int_state & KONAMI_CWAI )
{
konami.int_state &= ~KONAMI_CWAI;
konami.extra_cycles += 7; /* subtract +7 cycles next time */
}
else
{
CC |= CC_E; /* save entire state */
PUSHWORD(pPC);
PUSHWORD(pU);
PUSHWORD(pY);
PUSHWORD(pX);
PUSHBYTE(DP);
PUSHBYTE(B);
PUSHBYTE(A);
PUSHBYTE(CC);
konami.extra_cycles += 19; /* subtract +19 cycles next time */
}
CC |= CC_IF | CC_II; /* inhibit FIRQ and IRQ */
PCD = RM16(0xfffc);
}
else if (irqline < 2)
{
LOG(("KONAMI '%s' set_irq_line %d, %d\n", konami.device->tag, irqline, state));
konami.irq_state[irqline] = state;
if (state == CLEAR_LINE) return;
CHECK_IRQ_LINES;
if (cpustate->nmi_state == CLEAR_LINE && state != CLEAR_LINE)
cpustate->nmi_pending = TRUE;
cpustate->nmi_state = state;
}
else if (irqline < ARRAY_LENGTH(cpustate->irq_state))
cpustate->irq_state[irqline] = state;
}
/* includes the static function prototypes and the master opcode table */
@ -480,35 +472,36 @@ static void set_irq_line(int irqline, int state)
/* execute instructions on this CPU until icount expires */
static CPU_EXECUTE( konami )
{
konami_ICount = cycles - konami.extra_cycles;
konami.extra_cycles = 0;
konami_state *cpustate = device->token;
if( konami.int_state & (KONAMI_CWAI | KONAMI_SYNC) )
cpustate->icount = cycles;
check_irq_lines(cpustate);
if( cpustate->int_state & (KONAMI_CWAI | KONAMI_SYNC) )
{
konami_ICount = 0;
cpustate->icount = 0;
}
else
{
do
{
UINT8 ireg;
pPPC = pPC;
debugger_instruction_hook(device, PCD);
konami.ireg = ROP(PCD);
cpustate->ireg = ireg = ROP(cpustate, PCD);
PC++;
(*konami_main[konami.ireg])();
(*konami_main[ireg])(cpustate);
konami_ICount -= cycles1[konami.ireg];
cpustate->icount -= cycles1[ireg];
} while( konami_ICount > 0 );
konami_ICount -= konami.extra_cycles;
konami.extra_cycles = 0;
} while( cpustate->icount > 0 );
}
return cycles - konami_ICount;
return cycles - cpustate->icount;
}
@ -518,18 +511,19 @@ static CPU_EXECUTE( konami )
static CPU_SET_INFO( konami )
{
konami_state *cpustate = device->token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
case CPUINFO_INT_INPUT_STATE + KONAMI_IRQ_LINE: set_irq_line(KONAMI_IRQ_LINE, info->i); break;
case CPUINFO_INT_INPUT_STATE + KONAMI_FIRQ_LINE:set_irq_line(KONAMI_FIRQ_LINE, info->i); break;
case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(INPUT_LINE_NMI, info->i); break;
case CPUINFO_INT_INPUT_STATE + KONAMI_IRQ_LINE: set_irq_line(cpustate, KONAMI_IRQ_LINE, info->i); break;
case CPUINFO_INT_INPUT_STATE + KONAMI_FIRQ_LINE:set_irq_line(cpustate, KONAMI_FIRQ_LINE, info->i); break;
case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: set_irq_line(cpustate, INPUT_LINE_NMI, info->i); break;
case CPUINFO_INT_PC:
case CPUINFO_INT_REGISTER + KONAMI_PC: PC = info->i; break;
case CPUINFO_INT_SP:
case CPUINFO_INT_REGISTER + KONAMI_S: S = info->i; break;
case CPUINFO_INT_REGISTER + KONAMI_CC: CC = info->i; CHECK_IRQ_LINES; break;
case CPUINFO_INT_REGISTER + KONAMI_CC: CC = info->i; break;
case CPUINFO_INT_REGISTER + KONAMI_U: U = info->i; break;
case CPUINFO_INT_REGISTER + KONAMI_A: A = info->i; break;
case CPUINFO_INT_REGISTER + KONAMI_B: B = info->i; break;
@ -538,7 +532,7 @@ static CPU_SET_INFO( konami )
case CPUINFO_INT_REGISTER + KONAMI_DP: DP = info->i; break;
/* --- the following bits of info are set as pointers to data or functions --- */
case CPUINFO_PTR_KONAMI_SETLINES_CALLBACK: konami.setlines_callback = (void (*)(int))info->f; break;
case CPUINFO_PTR_KONAMI_SETLINES_CALLBACK: cpustate->setlines_callback = (konami_set_lines_func)info->f; break;
}
}
@ -550,13 +544,14 @@ static CPU_SET_INFO( konami )
CPU_GET_INFO( konami )
{
konami_state *cpustate = (device != NULL) ? device->token : NULL;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(konami); break;
case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(konami_state); break;
case CPUINFO_INT_INPUT_LINES: info->i = 2; break;
case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break;
case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_BIG; break;
case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_BIG; break;
case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break;
case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break;
case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 1; break;
@ -574,9 +569,9 @@ CPU_GET_INFO( konami )
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
case CPUINFO_INT_INPUT_STATE + KONAMI_IRQ_LINE: info->i = konami.irq_state[KONAMI_IRQ_LINE]; break;
case CPUINFO_INT_INPUT_STATE + KONAMI_FIRQ_LINE:info->i = konami.irq_state[KONAMI_FIRQ_LINE]; break;
case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = konami.nmi_state; break;
case CPUINFO_INT_INPUT_STATE + KONAMI_IRQ_LINE: info->i = cpustate->irq_state[KONAMI_IRQ_LINE]; break;
case CPUINFO_INT_INPUT_STATE + KONAMI_FIRQ_LINE:info->i = cpustate->irq_state[KONAMI_FIRQ_LINE]; break;
case CPUINFO_INT_INPUT_STATE + INPUT_LINE_NMI: info->i = cpustate->nmi_state; break;
case CPUINFO_INT_PREVIOUSPC: info->i = PPC; break;
@ -594,16 +589,16 @@ CPU_GET_INFO( konami )
/* --- the following bits of info are returned as pointers to data or functions --- */
case CPUINFO_PTR_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(konami); break;
case CPUINFO_PTR_GET_CONTEXT: info->getcontext = CPU_GET_CONTEXT_NAME(konami); break;
case CPUINFO_PTR_SET_CONTEXT: info->setcontext = CPU_SET_CONTEXT_NAME(konami); break;
case CPUINFO_PTR_GET_CONTEXT: info->getcontext = CPU_GET_CONTEXT_NAME(konami);break;
case CPUINFO_PTR_SET_CONTEXT: info->setcontext = CPU_SET_CONTEXT_NAME(konami);break;
case CPUINFO_PTR_INIT: info->init = CPU_INIT_NAME(konami); break;
case CPUINFO_PTR_RESET: info->reset = CPU_RESET_NAME(konami); break;
case CPUINFO_PTR_RESET: info->reset = CPU_RESET_NAME(konami); break;
case CPUINFO_PTR_EXIT: info->exit = CPU_EXIT_NAME(konami); break;
case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(konami); break;
case CPUINFO_PTR_BURN: info->burn = NULL; break;
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(konami); break;
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &konami_ICount; break;
case CPUINFO_PTR_KONAMI_SETLINES_CALLBACK: info->f = (genf *)konami.setlines_callback; break;
case CPUINFO_PTR_EXECUTE: info->execute = CPU_EXECUTE_NAME(konami); break;
case CPUINFO_PTR_BURN: info->burn = NULL; break;
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(konami);break;
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cpustate->icount; break;
case CPUINFO_PTR_KONAMI_SETLINES_CALLBACK: info->f = (genf *)cpustate->setlines_callback; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
case CPUINFO_STR_NAME: strcpy(info->s, "KONAMI"); break;
@ -614,24 +609,24 @@ CPU_GET_INFO( konami )
case CPUINFO_STR_FLAGS:
sprintf(info->s, "%c%c%c%c%c%c%c%c",
konami.cc & 0x80 ? 'E':'.',
konami.cc & 0x40 ? 'F':'.',
konami.cc & 0x20 ? 'H':'.',
konami.cc & 0x10 ? 'I':'.',
konami.cc & 0x08 ? 'N':'.',
konami.cc & 0x04 ? 'Z':'.',
konami.cc & 0x02 ? 'V':'.',
konami.cc & 0x01 ? 'C':'.');
cpustate->cc & 0x80 ? 'E':'.',
cpustate->cc & 0x40 ? 'F':'.',
cpustate->cc & 0x20 ? 'H':'.',
cpustate->cc & 0x10 ? 'I':'.',
cpustate->cc & 0x08 ? 'N':'.',
cpustate->cc & 0x04 ? 'Z':'.',
cpustate->cc & 0x02 ? 'V':'.',
cpustate->cc & 0x01 ? 'C':'.');
break;
case CPUINFO_STR_REGISTER + KONAMI_PC: sprintf(info->s, "PC:%04X", konami.pc.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_S: sprintf(info->s, "S:%04X", konami.s.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_CC: sprintf(info->s, "CC:%02X", konami.cc); break;
case CPUINFO_STR_REGISTER + KONAMI_U: sprintf(info->s, "U:%04X", konami.u.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_A: sprintf(info->s, "A:%02X", konami.d.b.h); break;
case CPUINFO_STR_REGISTER + KONAMI_B: sprintf(info->s, "B:%02X", konami.d.b.l); break;
case CPUINFO_STR_REGISTER + KONAMI_X: sprintf(info->s, "X:%04X", konami.x.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_Y: sprintf(info->s, "Y:%04X", konami.y.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_DP: sprintf(info->s, "DP:%02X", konami.dp.b.h); break;
case CPUINFO_STR_REGISTER + KONAMI_PC: sprintf(info->s, "PC:%04X", cpustate->pc.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_S: sprintf(info->s, "S:%04X", cpustate->s.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_CC: sprintf(info->s, "CC:%02X", cpustate->cc); break;
case CPUINFO_STR_REGISTER + KONAMI_U: sprintf(info->s, "U:%04X", cpustate->u.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_A: sprintf(info->s, "A:%02X", cpustate->d.b.h); break;
case CPUINFO_STR_REGISTER + KONAMI_B: sprintf(info->s, "B:%02X", cpustate->d.b.l); break;
case CPUINFO_STR_REGISTER + KONAMI_X: sprintf(info->s, "X:%04X", cpustate->x.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_Y: sprintf(info->s, "Y:%04X", cpustate->y.w.l); break;
case CPUINFO_STR_REGISTER + KONAMI_DP: sprintf(info->s, "DP:%02X", cpustate->dp.b.h); break;
}
}

View File

@ -7,6 +7,8 @@
#include "cpuintrf.h"
typedef void (*konami_set_lines_func)(const device_config *device, int lines);
enum
{
KONAMI_PC=1, KONAMI_S, KONAMI_CC ,KONAMI_A, KONAMI_B, KONAMI_U, KONAMI_X, KONAMI_Y,
@ -24,37 +26,12 @@ enum
/* PUBLIC FUNCTIONS */
CPU_GET_INFO( konami );
/****************************************************************************/
/* Read a byte from given memory location */
/****************************************************************************/
#define KONAMI_RDMEM(Addr) ((unsigned)memory_read_byte_8be(konami.program, Addr))
/****************************************************************************/
/* Write a byte to given memory location */
/****************************************************************************/
#define KONAMI_WRMEM(Addr,Value) (memory_write_byte_8be(konami.program, Addr,Value))
/****************************************************************************/
/* Z80_RDOP() is identical to Z80_RDMEM() except it is used for reading */
/* opcodes. In case of system with memory mapped I/O, this function can be */
/* used to greatly speed up emulation */
/****************************************************************************/
#define KONAMI_RDOP(Addr) ((unsigned)memory_decrypted_read_byte(konami.program, Addr))
/****************************************************************************/
/* Z80_RDOP_ARG() is identical to Z80_RDOP() except it is used for reading */
/* opcode arguments. This difference can be used to support systems that */
/* use different encoding mechanisms for opcodes and opcode arguments */
/****************************************************************************/
#define KONAMI_RDOP_ARG(Addr) ((unsigned)memory_raw_read_byte(konami.program, Addr))
#ifndef FALSE
# define FALSE 0
#endif
#ifndef TRUE
# define TRUE (!FALSE)
#endif
CPU_DISASSEMBLE( konami );
INLINE void konami_configure_set_lines(const device_config *device, konami_set_lines_func func)
{
cpu_set_info_fct(device, CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)func);
}
#endif /* __KONAMI_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -1,356 +1,356 @@
INLINE void abx(void);
INLINE void adca_di(void);
INLINE void adca_ex(void);
INLINE void adca_im(void);
INLINE void adca_ix(void);
INLINE void adcb_di(void);
INLINE void adcb_ex(void);
INLINE void adcb_im(void);
INLINE void adcb_ix(void);
INLINE void adda_di(void);
INLINE void adda_ex(void);
INLINE void adda_im(void);
INLINE void adda_ix(void);
INLINE void addb_di(void);
INLINE void addb_ex(void);
INLINE void addb_im(void);
INLINE void addb_ix(void);
INLINE void addd_di(void);
INLINE void addd_ex(void);
INLINE void addd_im(void);
INLINE void addd_ix(void);
INLINE void anda_di(void);
INLINE void anda_ex(void);
INLINE void anda_im(void);
INLINE void anda_ix(void);
INLINE void andb_di(void);
INLINE void andb_ex(void);
INLINE void andb_im(void);
INLINE void andb_ix(void);
INLINE void andcc(void);
INLINE void asl_di(void);
INLINE void asl_ex(void);
INLINE void asl_ix(void);
INLINE void asla(void);
INLINE void aslb(void);
INLINE void asr_di(void);
INLINE void asr_ex(void);
INLINE void asr_ix(void);
INLINE void asra(void);
INLINE void asrb(void);
INLINE void bcc(void);
INLINE void bcs(void);
INLINE void beq(void);
INLINE void bge(void);
INLINE void bgt(void);
INLINE void bhi(void);
INLINE void bita_di(void);
INLINE void bita_ex(void);
INLINE void bita_im(void);
INLINE void bita_ix(void);
INLINE void bitb_di(void);
INLINE void bitb_ex(void);
INLINE void bitb_im(void);
INLINE void bitb_ix(void);
INLINE void ble(void);
INLINE void bls(void);
INLINE void blt(void);
INLINE void bmi(void);
INLINE void bne(void);
INLINE void bpl(void);
INLINE void bra(void);
INLINE void brn(void);
INLINE void bsr(void);
INLINE void bvc(void);
INLINE void bvs(void);
INLINE void clr_di(void);
INLINE void clr_ex(void);
INLINE void clr_ix(void);
INLINE void clra(void);
INLINE void clrb(void);
INLINE void cmpa_di(void);
INLINE void cmpa_ex(void);
INLINE void cmpa_im(void);
INLINE void cmpa_ix(void);
INLINE void cmpb_di(void);
INLINE void cmpb_ex(void);
INLINE void cmpb_im(void);
INLINE void cmpb_ix(void);
INLINE void cmpd_di(void);
INLINE void cmpd_ex(void);
INLINE void cmpd_im(void);
INLINE void cmpd_ix(void);
INLINE void cmps_di(void);
INLINE void cmps_ex(void);
INLINE void cmps_im(void);
INLINE void cmps_ix(void);
INLINE void cmpu_di(void);
INLINE void cmpu_ex(void);
INLINE void cmpu_im(void);
INLINE void cmpu_ix(void);
INLINE void cmpx_di(void);
INLINE void cmpx_ex(void);
INLINE void cmpx_im(void);
INLINE void cmpx_ix(void);
INLINE void cmpy_di(void);
INLINE void cmpy_ex(void);
INLINE void cmpy_im(void);
INLINE void cmpy_ix(void);
INLINE void com_di(void);
INLINE void com_ex(void);
INLINE void com_ix(void);
INLINE void coma(void);
INLINE void comb(void);
INLINE void cwai(void);
INLINE void daa(void);
INLINE void dec_di(void);
INLINE void dec_ex(void);
INLINE void dec_ix(void);
INLINE void deca(void);
INLINE void decb(void);
INLINE void eora_di(void);
INLINE void eora_ex(void);
INLINE void eora_im(void);
INLINE void eora_ix(void);
INLINE void eorb_di(void);
INLINE void eorb_ex(void);
INLINE void eorb_im(void);
INLINE void eorb_ix(void);
INLINE void exg(void);
INLINE void illegal(void);
INLINE void inc_di(void);
INLINE void inc_ex(void);
INLINE void inc_ix(void);
INLINE void inca(void);
INLINE void incb(void);
INLINE void jmp_di(void);
INLINE void jmp_ex(void);
INLINE void jmp_ix(void);
INLINE void jsr_di(void);
INLINE void jsr_ex(void);
INLINE void jsr_ix(void);
INLINE void lbcc(void);
INLINE void lbcs(void);
INLINE void lbeq(void);
INLINE void lbge(void);
INLINE void lbgt(void);
INLINE void lbhi(void);
INLINE void lble(void);
INLINE void lbls(void);
INLINE void lblt(void);
INLINE void lbmi(void);
INLINE void lbne(void);
INLINE void lbpl(void);
INLINE void lbra(void);
INLINE void lbrn(void);
INLINE void lbsr(void);
INLINE void lbvc(void);
INLINE void lbvs(void);
INLINE void lda_di(void);
INLINE void lda_ex(void);
INLINE void lda_im(void);
INLINE void lda_ix(void);
INLINE void ldb_di(void);
INLINE void ldb_ex(void);
INLINE void ldb_im(void);
INLINE void ldb_ix(void);
INLINE void ldd_di(void);
INLINE void ldd_ex(void);
INLINE void ldd_im(void);
INLINE void ldd_ix(void);
INLINE void lds_di(void);
INLINE void lds_ex(void);
INLINE void lds_im(void);
INLINE void lds_ix(void);
INLINE void ldu_di(void);
INLINE void ldu_ex(void);
INLINE void ldu_im(void);
INLINE void ldu_ix(void);
INLINE void ldx_di(void);
INLINE void ldx_ex(void);
INLINE void ldx_im(void);
INLINE void ldx_ix(void);
INLINE void ldy_di(void);
INLINE void ldy_ex(void);
INLINE void ldy_im(void);
INLINE void ldy_ix(void);
INLINE void leas(void);
INLINE void leau(void);
INLINE void leax(void);
INLINE void leay(void);
INLINE void lsr_di(void);
INLINE void lsr_ex(void);
INLINE void lsr_ix(void);
INLINE void lsra(void);
INLINE void lsrb(void);
INLINE void mul(void);
INLINE void neg_di(void);
INLINE void neg_ex(void);
INLINE void neg_ix(void);
INLINE void nega(void);
INLINE void negb(void);
INLINE void nop(void);
INLINE void ora_di(void);
INLINE void ora_ex(void);
INLINE void ora_im(void);
INLINE void ora_ix(void);
INLINE void orb_di(void);
INLINE void orb_ex(void);
INLINE void orb_im(void);
INLINE void orb_ix(void);
INLINE void orcc(void);
INLINE void pshs(void);
INLINE void pshu(void);
INLINE void puls(void);
INLINE void pulu(void);
INLINE void rol_di(void);
INLINE void rol_ex(void);
INLINE void rol_ix(void);
INLINE void rola(void);
INLINE void rolb(void);
INLINE void ror_di(void);
INLINE void ror_ex(void);
INLINE void ror_ix(void);
INLINE void rora(void);
INLINE void rorb(void);
INLINE void rti(void);
INLINE void rts(void);
INLINE void sbca_di(void);
INLINE void sbca_ex(void);
INLINE void sbca_im(void);
INLINE void sbca_ix(void);
INLINE void sbcb_di(void);
INLINE void sbcb_ex(void);
INLINE void sbcb_im(void);
INLINE void sbcb_ix(void);
INLINE void sex(void);
INLINE void sta_di(void);
INLINE void sta_ex(void);
INLINE void sta_im(void);
INLINE void sta_ix(void);
INLINE void stb_di(void);
INLINE void stb_ex(void);
INLINE void stb_im(void);
INLINE void stb_ix(void);
INLINE void std_di(void);
INLINE void std_ex(void);
INLINE void std_im(void);
INLINE void std_ix(void);
INLINE void sts_di(void);
INLINE void sts_ex(void);
INLINE void sts_im(void);
INLINE void sts_ix(void);
INLINE void stu_di(void);
INLINE void stu_ex(void);
INLINE void stu_im(void);
INLINE void stu_ix(void);
INLINE void stx_di(void);
INLINE void stx_ex(void);
INLINE void stx_im(void);
INLINE void stx_ix(void);
INLINE void sty_di(void);
INLINE void sty_ex(void);
INLINE void sty_im(void);
INLINE void sty_ix(void);
INLINE void suba_di(void);
INLINE void suba_ex(void);
INLINE void suba_im(void);
INLINE void suba_ix(void);
INLINE void subb_di(void);
INLINE void subb_ex(void);
INLINE void subb_im(void);
INLINE void subb_ix(void);
INLINE void subd_di(void);
INLINE void subd_ex(void);
INLINE void subd_im(void);
INLINE void subd_ix(void);
INLINE void swi(void);
INLINE void swi2(void);
INLINE void swi3(void);
INLINE void sync(void);
INLINE void tfr(void);
INLINE void tst_di(void);
INLINE void tst_ex(void);
INLINE void tst_ix(void);
INLINE void tsta(void);
INLINE void tstb(void);
INLINE void abx(konami_state *cpustate);
INLINE void adca_di(konami_state *cpustate);
INLINE void adca_ex(konami_state *cpustate);
INLINE void adca_im(konami_state *cpustate);
INLINE void adca_ix(konami_state *cpustate);
INLINE void adcb_di(konami_state *cpustate);
INLINE void adcb_ex(konami_state *cpustate);
INLINE void adcb_im(konami_state *cpustate);
INLINE void adcb_ix(konami_state *cpustate);
INLINE void adda_di(konami_state *cpustate);
INLINE void adda_ex(konami_state *cpustate);
INLINE void adda_im(konami_state *cpustate);
INLINE void adda_ix(konami_state *cpustate);
INLINE void addb_di(konami_state *cpustate);
INLINE void addb_ex(konami_state *cpustate);
INLINE void addb_im(konami_state *cpustate);
INLINE void addb_ix(konami_state *cpustate);
INLINE void addd_di(konami_state *cpustate);
INLINE void addd_ex(konami_state *cpustate);
INLINE void addd_im(konami_state *cpustate);
INLINE void addd_ix(konami_state *cpustate);
INLINE void anda_di(konami_state *cpustate);
INLINE void anda_ex(konami_state *cpustate);
INLINE void anda_im(konami_state *cpustate);
INLINE void anda_ix(konami_state *cpustate);
INLINE void andb_di(konami_state *cpustate);
INLINE void andb_ex(konami_state *cpustate);
INLINE void andb_im(konami_state *cpustate);
INLINE void andb_ix(konami_state *cpustate);
INLINE void andcc(konami_state *cpustate);
INLINE void asl_di(konami_state *cpustate);
INLINE void asl_ex(konami_state *cpustate);
INLINE void asl_ix(konami_state *cpustate);
INLINE void asla(konami_state *cpustate);
INLINE void aslb(konami_state *cpustate);
INLINE void asr_di(konami_state *cpustate);
INLINE void asr_ex(konami_state *cpustate);
INLINE void asr_ix(konami_state *cpustate);
INLINE void asra(konami_state *cpustate);
INLINE void asrb(konami_state *cpustate);
INLINE void bcc(konami_state *cpustate);
INLINE void bcs(konami_state *cpustate);
INLINE void beq(konami_state *cpustate);
INLINE void bge(konami_state *cpustate);
INLINE void bgt(konami_state *cpustate);
INLINE void bhi(konami_state *cpustate);
INLINE void bita_di(konami_state *cpustate);
INLINE void bita_ex(konami_state *cpustate);
INLINE void bita_im(konami_state *cpustate);
INLINE void bita_ix(konami_state *cpustate);
INLINE void bitb_di(konami_state *cpustate);
INLINE void bitb_ex(konami_state *cpustate);
INLINE void bitb_im(konami_state *cpustate);
INLINE void bitb_ix(konami_state *cpustate);
INLINE void ble(konami_state *cpustate);
INLINE void bls(konami_state *cpustate);
INLINE void blt(konami_state *cpustate);
INLINE void bmi(konami_state *cpustate);
INLINE void bne(konami_state *cpustate);
INLINE void bpl(konami_state *cpustate);
INLINE void bra(konami_state *cpustate);
INLINE void brn(konami_state *cpustate);
INLINE void bsr(konami_state *cpustate);
INLINE void bvc(konami_state *cpustate);
INLINE void bvs(konami_state *cpustate);
INLINE void clr_di(konami_state *cpustate);
INLINE void clr_ex(konami_state *cpustate);
INLINE void clr_ix(konami_state *cpustate);
INLINE void clra(konami_state *cpustate);
INLINE void clrb(konami_state *cpustate);
INLINE void cmpa_di(konami_state *cpustate);
INLINE void cmpa_ex(konami_state *cpustate);
INLINE void cmpa_im(konami_state *cpustate);
INLINE void cmpa_ix(konami_state *cpustate);
INLINE void cmpb_di(konami_state *cpustate);
INLINE void cmpb_ex(konami_state *cpustate);
INLINE void cmpb_im(konami_state *cpustate);
INLINE void cmpb_ix(konami_state *cpustate);
INLINE void cmpd_di(konami_state *cpustate);
INLINE void cmpd_ex(konami_state *cpustate);
INLINE void cmpd_im(konami_state *cpustate);
INLINE void cmpd_ix(konami_state *cpustate);
INLINE void cmps_di(konami_state *cpustate);
INLINE void cmps_ex(konami_state *cpustate);
INLINE void cmps_im(konami_state *cpustate);
INLINE void cmps_ix(konami_state *cpustate);
INLINE void cmpu_di(konami_state *cpustate);
INLINE void cmpu_ex(konami_state *cpustate);
INLINE void cmpu_im(konami_state *cpustate);
INLINE void cmpu_ix(konami_state *cpustate);
INLINE void cmpx_di(konami_state *cpustate);
INLINE void cmpx_ex(konami_state *cpustate);
INLINE void cmpx_im(konami_state *cpustate);
INLINE void cmpx_ix(konami_state *cpustate);
INLINE void cmpy_di(konami_state *cpustate);
INLINE void cmpy_ex(konami_state *cpustate);
INLINE void cmpy_im(konami_state *cpustate);
INLINE void cmpy_ix(konami_state *cpustate);
INLINE void com_di(konami_state *cpustate);
INLINE void com_ex(konami_state *cpustate);
INLINE void com_ix(konami_state *cpustate);
INLINE void coma(konami_state *cpustate);
INLINE void comb(konami_state *cpustate);
INLINE void cwai(konami_state *cpustate);
INLINE void daa(konami_state *cpustate);
INLINE void dec_di(konami_state *cpustate);
INLINE void dec_ex(konami_state *cpustate);
INLINE void dec_ix(konami_state *cpustate);
INLINE void deca(konami_state *cpustate);
INLINE void decb(konami_state *cpustate);
INLINE void eora_di(konami_state *cpustate);
INLINE void eora_ex(konami_state *cpustate);
INLINE void eora_im(konami_state *cpustate);
INLINE void eora_ix(konami_state *cpustate);
INLINE void eorb_di(konami_state *cpustate);
INLINE void eorb_ex(konami_state *cpustate);
INLINE void eorb_im(konami_state *cpustate);
INLINE void eorb_ix(konami_state *cpustate);
INLINE void exg(konami_state *cpustate);
INLINE void illegal(konami_state *cpustate);
INLINE void inc_di(konami_state *cpustate);
INLINE void inc_ex(konami_state *cpustate);
INLINE void inc_ix(konami_state *cpustate);
INLINE void inca(konami_state *cpustate);
INLINE void incb(konami_state *cpustate);
INLINE void jmp_di(konami_state *cpustate);
INLINE void jmp_ex(konami_state *cpustate);
INLINE void jmp_ix(konami_state *cpustate);
INLINE void jsr_di(konami_state *cpustate);
INLINE void jsr_ex(konami_state *cpustate);
INLINE void jsr_ix(konami_state *cpustate);
INLINE void lbcc(konami_state *cpustate);
INLINE void lbcs(konami_state *cpustate);
INLINE void lbeq(konami_state *cpustate);
INLINE void lbge(konami_state *cpustate);
INLINE void lbgt(konami_state *cpustate);
INLINE void lbhi(konami_state *cpustate);
INLINE void lble(konami_state *cpustate);
INLINE void lbls(konami_state *cpustate);
INLINE void lblt(konami_state *cpustate);
INLINE void lbmi(konami_state *cpustate);
INLINE void lbne(konami_state *cpustate);
INLINE void lbpl(konami_state *cpustate);
INLINE void lbra(konami_state *cpustate);
INLINE void lbrn(konami_state *cpustate);
INLINE void lbsr(konami_state *cpustate);
INLINE void lbvc(konami_state *cpustate);
INLINE void lbvs(konami_state *cpustate);
INLINE void lda_di(konami_state *cpustate);
INLINE void lda_ex(konami_state *cpustate);
INLINE void lda_im(konami_state *cpustate);
INLINE void lda_ix(konami_state *cpustate);
INLINE void ldb_di(konami_state *cpustate);
INLINE void ldb_ex(konami_state *cpustate);
INLINE void ldb_im(konami_state *cpustate);
INLINE void ldb_ix(konami_state *cpustate);
INLINE void ldd_di(konami_state *cpustate);
INLINE void ldd_ex(konami_state *cpustate);
INLINE void ldd_im(konami_state *cpustate);
INLINE void ldd_ix(konami_state *cpustate);
INLINE void lds_di(konami_state *cpustate);
INLINE void lds_ex(konami_state *cpustate);
INLINE void lds_im(konami_state *cpustate);
INLINE void lds_ix(konami_state *cpustate);
INLINE void ldu_di(konami_state *cpustate);
INLINE void ldu_ex(konami_state *cpustate);
INLINE void ldu_im(konami_state *cpustate);
INLINE void ldu_ix(konami_state *cpustate);
INLINE void ldx_di(konami_state *cpustate);
INLINE void ldx_ex(konami_state *cpustate);
INLINE void ldx_im(konami_state *cpustate);
INLINE void ldx_ix(konami_state *cpustate);
INLINE void ldy_di(konami_state *cpustate);
INLINE void ldy_ex(konami_state *cpustate);
INLINE void ldy_im(konami_state *cpustate);
INLINE void ldy_ix(konami_state *cpustate);
INLINE void leas(konami_state *cpustate);
INLINE void leau(konami_state *cpustate);
INLINE void leax(konami_state *cpustate);
INLINE void leay(konami_state *cpustate);
INLINE void lsr_di(konami_state *cpustate);
INLINE void lsr_ex(konami_state *cpustate);
INLINE void lsr_ix(konami_state *cpustate);
INLINE void lsra(konami_state *cpustate);
INLINE void lsrb(konami_state *cpustate);
INLINE void mul(konami_state *cpustate);
INLINE void neg_di(konami_state *cpustate);
INLINE void neg_ex(konami_state *cpustate);
INLINE void neg_ix(konami_state *cpustate);
INLINE void nega(konami_state *cpustate);
INLINE void negb(konami_state *cpustate);
INLINE void nop(konami_state *cpustate);
INLINE void ora_di(konami_state *cpustate);
INLINE void ora_ex(konami_state *cpustate);
INLINE void ora_im(konami_state *cpustate);
INLINE void ora_ix(konami_state *cpustate);
INLINE void orb_di(konami_state *cpustate);
INLINE void orb_ex(konami_state *cpustate);
INLINE void orb_im(konami_state *cpustate);
INLINE void orb_ix(konami_state *cpustate);
INLINE void orcc(konami_state *cpustate);
INLINE void pshs(konami_state *cpustate);
INLINE void pshu(konami_state *cpustate);
INLINE void puls(konami_state *cpustate);
INLINE void pulu(konami_state *cpustate);
INLINE void rol_di(konami_state *cpustate);
INLINE void rol_ex(konami_state *cpustate);
INLINE void rol_ix(konami_state *cpustate);
INLINE void rola(konami_state *cpustate);
INLINE void rolb(konami_state *cpustate);
INLINE void ror_di(konami_state *cpustate);
INLINE void ror_ex(konami_state *cpustate);
INLINE void ror_ix(konami_state *cpustate);
INLINE void rora(konami_state *cpustate);
INLINE void rorb(konami_state *cpustate);
INLINE void rti(konami_state *cpustate);
INLINE void rts(konami_state *cpustate);
INLINE void sbca_di(konami_state *cpustate);
INLINE void sbca_ex(konami_state *cpustate);
INLINE void sbca_im(konami_state *cpustate);
INLINE void sbca_ix(konami_state *cpustate);
INLINE void sbcb_di(konami_state *cpustate);
INLINE void sbcb_ex(konami_state *cpustate);
INLINE void sbcb_im(konami_state *cpustate);
INLINE void sbcb_ix(konami_state *cpustate);
INLINE void sex(konami_state *cpustate);
INLINE void sta_di(konami_state *cpustate);
INLINE void sta_ex(konami_state *cpustate);
INLINE void sta_im(konami_state *cpustate);
INLINE void sta_ix(konami_state *cpustate);
INLINE void stb_di(konami_state *cpustate);
INLINE void stb_ex(konami_state *cpustate);
INLINE void stb_im(konami_state *cpustate);
INLINE void stb_ix(konami_state *cpustate);
INLINE void std_di(konami_state *cpustate);
INLINE void std_ex(konami_state *cpustate);
INLINE void std_im(konami_state *cpustate);
INLINE void std_ix(konami_state *cpustate);
INLINE void sts_di(konami_state *cpustate);
INLINE void sts_ex(konami_state *cpustate);
INLINE void sts_im(konami_state *cpustate);
INLINE void sts_ix(konami_state *cpustate);
INLINE void stu_di(konami_state *cpustate);
INLINE void stu_ex(konami_state *cpustate);
INLINE void stu_im(konami_state *cpustate);
INLINE void stu_ix(konami_state *cpustate);
INLINE void stx_di(konami_state *cpustate);
INLINE void stx_ex(konami_state *cpustate);
INLINE void stx_im(konami_state *cpustate);
INLINE void stx_ix(konami_state *cpustate);
INLINE void sty_di(konami_state *cpustate);
INLINE void sty_ex(konami_state *cpustate);
INLINE void sty_im(konami_state *cpustate);
INLINE void sty_ix(konami_state *cpustate);
INLINE void suba_di(konami_state *cpustate);
INLINE void suba_ex(konami_state *cpustate);
INLINE void suba_im(konami_state *cpustate);
INLINE void suba_ix(konami_state *cpustate);
INLINE void subb_di(konami_state *cpustate);
INLINE void subb_ex(konami_state *cpustate);
INLINE void subb_im(konami_state *cpustate);
INLINE void subb_ix(konami_state *cpustate);
INLINE void subd_di(konami_state *cpustate);
INLINE void subd_ex(konami_state *cpustate);
INLINE void subd_im(konami_state *cpustate);
INLINE void subd_ix(konami_state *cpustate);
INLINE void swi(konami_state *cpustate);
INLINE void swi2(konami_state *cpustate);
INLINE void swi3(konami_state *cpustate);
INLINE void sync(konami_state *cpustate);
INLINE void tfr(konami_state *cpustate);
INLINE void tst_di(konami_state *cpustate);
INLINE void tst_ex(konami_state *cpustate);
INLINE void tst_ix(konami_state *cpustate);
INLINE void tsta(konami_state *cpustate);
INLINE void tstb(konami_state *cpustate);
INLINE void clrd(void); /* 6309 */
INLINE void clrw_ix(void); /* 6309 ? */
INLINE void clrw_di(void); /* 6309 ? */
INLINE void clrw_ex(void); /* 6309 ? */
INLINE void negd(void);
INLINE void negw_ix(void); /* 6309 ? */
INLINE void negw_di(void); /* 6309 ? */
INLINE void negw_ex(void); /* 6309 ? */
INLINE void lsrd( void ); /* 6309 */
INLINE void lsrd_di( void ); /* 6309 */
INLINE void lsrd_ix( void ); /* 6309 */
INLINE void lsrd_ex( void ); /* 6309 */
INLINE void rord( void ); /* 6309 ? */
INLINE void rord_di( void ); /* 6309 */
INLINE void rord_ix( void ); /* 6309 */
INLINE void rord_ex( void ); /* 6309 */
INLINE void asrd( void ); /* 6309 ? */
INLINE void asrd_di( void ); /* 6309 */
INLINE void asrd_ix( void ); /* 6309 */
INLINE void asrd_ex( void ); /* 6309 */
INLINE void asld( void ); /* 6309 */
INLINE void asld_di( void ); /* 6309 */
INLINE void asld_ix( void ); /* 6309 */
INLINE void asld_ex( void ); /* 6309 */
INLINE void rold( void ); /* 6309 ? */
INLINE void rold_di( void ); /* 6309 */
INLINE void rold_ix( void ); /* 6309 */
INLINE void rold_ex( void ); /* 6309 */
INLINE void tstd(void);
INLINE void tstw_di( void );
INLINE void tstw_ix( void );
INLINE void tstw_ex( void );
INLINE void clrd(konami_state *cpustate); /* 6309 */
INLINE void clrw_ix(konami_state *cpustate); /* 6309 ? */
INLINE void clrw_di(konami_state *cpustate); /* 6309 ? */
INLINE void clrw_ex(konami_state *cpustate); /* 6309 ? */
INLINE void negd(konami_state *cpustate);
INLINE void negw_ix(konami_state *cpustate); /* 6309 ? */
INLINE void negw_di(konami_state *cpustate); /* 6309 ? */
INLINE void negw_ex(konami_state *cpustate); /* 6309 ? */
INLINE void lsrd(konami_state *cpustate); /* 6309 */
INLINE void lsrd_di(konami_state *cpustate); /* 6309 */
INLINE void lsrd_ix(konami_state *cpustate); /* 6309 */
INLINE void lsrd_ex(konami_state *cpustate); /* 6309 */
INLINE void rord(konami_state *cpustate); /* 6309 ? */
INLINE void rord_di(konami_state *cpustate); /* 6309 */
INLINE void rord_ix(konami_state *cpustate); /* 6309 */
INLINE void rord_ex(konami_state *cpustate); /* 6309 */
INLINE void asrd(konami_state *cpustate); /* 6309 ? */
INLINE void asrd_di(konami_state *cpustate); /* 6309 */
INLINE void asrd_ix(konami_state *cpustate); /* 6309 */
INLINE void asrd_ex(konami_state *cpustate); /* 6309 */
INLINE void asld(konami_state *cpustate); /* 6309 */
INLINE void asld_di(konami_state *cpustate); /* 6309 */
INLINE void asld_ix(konami_state *cpustate); /* 6309 */
INLINE void asld_ex(konami_state *cpustate); /* 6309 */
INLINE void rold(konami_state *cpustate); /* 6309 ? */
INLINE void rold_di(konami_state *cpustate); /* 6309 */
INLINE void rold_ix(konami_state *cpustate); /* 6309 */
INLINE void rold_ex(konami_state *cpustate); /* 6309 */
INLINE void tstd(konami_state *cpustate);
INLINE void tstw_di(konami_state *cpustate);
INLINE void tstw_ix(konami_state *cpustate);
INLINE void tstw_ex(konami_state *cpustate);
/* Custom opcodes */
INLINE void setline_im( void );
INLINE void setline_ix( void );
INLINE void setline_di( void );
INLINE void setline_ex( void );
INLINE void bmove( void );
INLINE void move( void );
INLINE void decbjnz( void );
INLINE void decxjnz( void );
INLINE void bset( void );
INLINE void bset2( void );
INLINE void lmul(void);
INLINE void divx( void );
INLINE void incd( void );
INLINE void incw_di( void );
INLINE void incw_ix( void );
INLINE void incw_ex( void );
INLINE void decd( void );
INLINE void decw_di( void );
INLINE void decw_ix( void );
INLINE void decw_ex( void );
INLINE void lsrw_di( void );
INLINE void lsrw_ix( void );
INLINE void lsrw_ex( void );
INLINE void rorw_di( void );
INLINE void rorw_ix( void );
INLINE void rorw_ex( void );
INLINE void asrw_di( void );
INLINE void asrw_ix( void );
INLINE void asrw_ex( void );
INLINE void aslw_di( void );
INLINE void aslw_ix( void );
INLINE void aslw_ex( void );
INLINE void rolw_di( void );
INLINE void rolw_ix( void );
INLINE void rolw_ex( void );
INLINE void absa( void );
INLINE void absb( void );
INLINE void absd( void );
INLINE void setline_im(konami_state *cpustate);
INLINE void setline_ix(konami_state *cpustate);
INLINE void setline_di(konami_state *cpustate);
INLINE void setline_ex(konami_state *cpustate);
INLINE void bmove(konami_state *cpustate);
INLINE void move(konami_state *cpustate);
INLINE void decbjnz(konami_state *cpustate);
INLINE void decxjnz(konami_state *cpustate);
INLINE void bset(konami_state *cpustate);
INLINE void bset2(konami_state *cpustate);
INLINE void lmul(konami_state *cpustate);
INLINE void divx(konami_state *cpustate);
INLINE void incd(konami_state *cpustate);
INLINE void incw_di(konami_state *cpustate);
INLINE void incw_ix(konami_state *cpustate);
INLINE void incw_ex(konami_state *cpustate);
INLINE void decd(konami_state *cpustate);
INLINE void decw_di(konami_state *cpustate);
INLINE void decw_ix(konami_state *cpustate);
INLINE void decw_ex(konami_state *cpustate);
INLINE void lsrw_di(konami_state *cpustate);
INLINE void lsrw_ix(konami_state *cpustate);
INLINE void lsrw_ex(konami_state *cpustate);
INLINE void rorw_di(konami_state *cpustate);
INLINE void rorw_ix(konami_state *cpustate);
INLINE void rorw_ex(konami_state *cpustate);
INLINE void asrw_di(konami_state *cpustate);
INLINE void asrw_ix(konami_state *cpustate);
INLINE void asrw_ex(konami_state *cpustate);
INLINE void aslw_di(konami_state *cpustate);
INLINE void aslw_ix(konami_state *cpustate);
INLINE void aslw_ex(konami_state *cpustate);
INLINE void rolw_di(konami_state *cpustate);
INLINE void rolw_ix(konami_state *cpustate);
INLINE void rolw_ex(konami_state *cpustate);
INLINE void absa(konami_state *cpustate);
INLINE void absb(konami_state *cpustate);
INLINE void absd(konami_state *cpustate);
INLINE void opcode2( void );
INLINE void opcode2(konami_state *cpustate);
static void (*const konami_main[0x100])(void) = {
static void (*const konami_main[0x100])(konami_state *cpustate) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal, /* 00 */
opcode2,opcode2,opcode2,opcode2,pshs ,pshu ,puls ,pulu ,
lda_im ,ldb_im ,opcode2,opcode2,adda_im,addb_im,opcode2,opcode2, /* 10 */
@ -385,7 +385,7 @@ static void (*const konami_main[0x100])(void) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal
};
static void (*const konami_indexed[0x100])(void) = {
static void (*const konami_indexed[0x100])(konami_state *cpustate) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal, /* 00 */
leax ,leay ,leau ,leas ,illegal,illegal,illegal,illegal,
illegal,illegal,lda_ix ,ldb_ix ,illegal,illegal,adda_ix,addb_ix, /* 10 */
@ -420,7 +420,7 @@ static void (*const konami_indexed[0x100])(void) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal
};
static void (*const konami_direct[0x100])(void) = {
static void (*const konami_direct[0x100])(konami_state *cpustate) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal, /* 00 */
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal,
illegal,illegal,lda_di ,ldb_di ,illegal,illegal,adda_di,addb_di, /* 10 */
@ -455,7 +455,7 @@ static void (*const konami_direct[0x100])(void) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal
};
static void (*const konami_extended[0x100])(void) = {
static void (*const konami_extended[0x100])(konami_state *cpustate) = {
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal, /* 00 */
illegal,illegal,illegal,illegal,illegal,illegal,illegal,illegal,
illegal,illegal,lda_ex ,ldb_ex ,illegal,illegal,adda_ex,addb_ex, /* 10 */

View File

@ -925,6 +925,7 @@ void cpu_set_input_line_and_vector(const device_config *device, int line, int st
{
switch (classdata->header.cputype)
{
case CPU_KONAMI:
case CPU_Z80:
case CPU_Z180:
case CPU_M68000:

View File

@ -5,7 +5,6 @@
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h"
#include "cpu/z80/z80.h"
#include "video/konamiic.h"
@ -14,7 +13,7 @@
static MACHINE_RESET( 88games );
static void k88games_banking( int lines );
static void k88games_banking( const device_config *device, int lines );
static UINT8 *ram;
static UINT8 *banked_rom;
@ -469,12 +468,12 @@ ROM_END
static void k88games_banking( int lines )
static void k88games_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs;
logerror("%04x: bank select %02x\n",cpu_get_pc(Machine->activecpu),lines);
logerror("%04x: bank select %02x\n",cpu_get_pc(device),lines);
/* bits 0-2 select ROM bank for 0000-1fff */
/* bit 3: when 1, palette RAM at 1000-1fff */
@ -511,7 +510,7 @@ logerror("%04x: bank select %02x\n",cpu_get_pc(Machine->activecpu),lines);
static MACHINE_RESET( 88games )
{
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)k88games_banking);
konami_configure_set_lines(machine->cpu[0], k88games_banking);
paletteram = &memory_region(machine, "main")[0x20000];
}

View File

@ -8,7 +8,6 @@ Preliminary driver by:
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/k007232.h"
@ -16,7 +15,7 @@ Preliminary driver by:
/* prototypes */
static MACHINE_RESET( aliens );
static void aliens_banking( int lines );
static void aliens_banking( const device_config *device, int lines );
VIDEO_START( aliens );
@ -481,23 +480,23 @@ ROM_END
***************************************************************************/
static void aliens_banking( int lines )
static void aliens_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0x18000;
if (lines & 0x10) offs -= 0x8000;
offs += (lines & 0x0f)*0x2000;
memory_set_bankptr(Machine, 1, &RAM[offs] );
memory_set_bankptr(device->machine, 1, &RAM[offs] );
}
static MACHINE_RESET( aliens )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)aliens_banking);
konami_configure_set_lines(machine->cpu[0], aliens_banking);
/* init the default bank */
memory_set_bankptr(machine, 1, &RAM[0x10000] );

View File

@ -20,14 +20,13 @@ found it.
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
/* prototypes */
static MACHINE_RESET( blockhl );
static void blockhl_banking( int lines );
static void blockhl_banking( const device_config *device, int lines );
VIDEO_START( blockhl );
@ -289,15 +288,15 @@ ROM_END
***************************************************************************/
static void blockhl_banking( int lines )
static void blockhl_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs;
/* bits 0-1 = ROM bank */
rombank = lines & 0x03;
offs = 0x10000 + (lines & 0x03) * 0x2000;
memory_set_bankptr(Machine, 1,&RAM[offs]);
memory_set_bankptr(device->machine, 1,&RAM[offs]);
/* bits 3/4 = coin counters */
coin_counter_w(0,lines & 0x08);
@ -313,14 +312,14 @@ static void blockhl_banking( int lines )
/* other bits unknown */
if ((lines & 0x84) != 0x80) logerror("%04x: setlines %02x\n",cpu_get_pc(Machine->activecpu),lines);
if ((lines & 0x84) != 0x80) logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines);
}
static MACHINE_RESET( blockhl )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)blockhl_banking);
konami_configure_set_lines(machine->cpu[0], blockhl_banking);
paletteram = &RAM[0x18000];
}

View File

@ -12,7 +12,6 @@ Dip locations verified with manual (US)
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
@ -21,7 +20,7 @@ Dip locations verified with manual (US)
/* prototypes */
static MACHINE_RESET( crimfght );
static void crimfght_banking( int lines );
static void crimfght_banking( const device_config *device, int lines );
VIDEO_START( crimfght );
VIDEO_UPDATE( crimfght );
@ -415,32 +414,32 @@ ROM_END
***************************************************************************/
static void crimfght_banking( int lines )
static void crimfght_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0;
/* bit 5 = select work RAM or palette */
if (lines & 0x20)
{
memory_install_readwrite8_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x0000, 0x03ff, 0, 0, SMH_BANK3, paletteram_xBBBBBGGGGGRRRRR_be_w);
memory_set_bankptr(Machine, 3, paletteram);
memory_install_readwrite8_handler(cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM), 0x0000, 0x03ff, 0, 0, SMH_BANK3, paletteram_xBBBBBGGGGGRRRRR_be_w);
memory_set_bankptr(device->machine, 3, paletteram);
}
else
memory_install_readwrite8_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x0000, 0x03ff, 0, 0, SMH_BANK1, SMH_BANK1); /* RAM */
memory_install_readwrite8_handler(cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM), 0x0000, 0x03ff, 0, 0, SMH_BANK1, SMH_BANK1); /* RAM */
/* bit 6 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
offs = 0x10000 + ((lines & 0x0f) * 0x2000);
memory_set_bankptr(Machine, 2, &RAM[offs]);
memory_set_bankptr(device->machine, 2, &RAM[offs]);
}
static MACHINE_RESET( crimfght )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)crimfght_banking);
konami_configure_set_lines(machine->cpu[0], crimfght_banking);
/* init the default bank */
memory_set_bankptr(machine, 2, &RAM[0x10000] );

View File

@ -8,7 +8,6 @@ Preliminary driver by:
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
@ -16,7 +15,7 @@ Preliminary driver by:
/* prototypes */
static MACHINE_RESET( gbusters );
static void gbusters_banking( int lines );
static void gbusters_banking( const device_config *device, int lines );
extern int gbusters_priority;
@ -414,17 +413,17 @@ ROM_START( crazycop )
ROM_END
static void gbusters_banking( int lines )
static void gbusters_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0x10000;
/* bits 0-3 ROM bank */
offs += (lines & 0x0f)*0x2000;
memory_set_bankptr(Machine, 1, &RAM[offs] );
memory_set_bankptr(device->machine, 1, &RAM[offs] );
if (lines & 0xf0){
//logerror("%04x: (lines) write %02x\n",cpu_get_pc(machine->activecpu), lines);
//logerror("%04x: (lines) write %02x\n",cpu_get_pc(device), lines);
//popmessage("lines = %02x", lines);
}
@ -435,7 +434,7 @@ static MACHINE_RESET( gbusters )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)gbusters_banking);
konami_configure_set_lines(machine->cpu[0], gbusters_banking);
/* mirror address for banked ROM */
memcpy(&RAM[0x18000], &RAM[0x10000], 0x08000 );

View File

@ -7,7 +7,6 @@ driver by Nicola Salmoria
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
@ -15,7 +14,7 @@ driver by Nicola Salmoria
/* prototypes */
static MACHINE_RESET( parodius );
static void parodius_banking( int lines );
static void parodius_banking( const device_config *device, int lines );
VIDEO_START( parodius );
VIDEO_UPDATE( parodius );
@ -381,23 +380,23 @@ ROM_END
***************************************************************************/
static void parodius_banking(int lines)
static void parodius_banking(const device_config *device, int lines)
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0;
if (lines & 0xf0) logerror("%04x: setlines %02x\n",cpu_get_pc(Machine->activecpu),lines);
if (lines & 0xf0) logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines);
offs = 0x10000 + (((lines & 0x0f)^0x0f) * 0x4000);
if (offs >= 0x48000) offs -= 0x40000;
memory_set_bankptr(Machine, 1, &RAM[offs] );
memory_set_bankptr(device->machine, 1, &RAM[offs] );
}
static MACHINE_RESET( parodius )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)parodius_banking);
konami_configure_set_lines(machine->cpu[0], parodius_banking);
paletteram = &memory_region(machine, "main")[0x48000];

View File

@ -7,7 +7,6 @@ driver by Nicola Salmoria
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "video/konamiic.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "machine/eeprom.h"
@ -16,7 +15,7 @@ driver by Nicola Salmoria
/* prototypes */
static MACHINE_RESET( rollerg );
static void rollerg_banking( int lines );
static void rollerg_banking( const device_config *device, int lines );
VIDEO_START( rollerg );
VIDEO_UPDATE( rollerg );
@ -330,20 +329,20 @@ ROM_END
***************************************************************************/
static void rollerg_banking( int lines )
static void rollerg_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0;
offs = 0x10000 + ((lines & 0x07) * 0x4000);
if (offs >= 0x28000) offs -= 0x20000;
memory_set_bankptr(Machine, 1,&RAM[offs]);
memory_set_bankptr(device->machine, 1,&RAM[offs]);
}
static MACHINE_RESET( rollerg )
{
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)rollerg_banking);
konami_configure_set_lines(machine->cpu[0], rollerg_banking);
readzoomroms = 0;
}

View File

@ -9,14 +9,13 @@ driver by Nicola Salmoria
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
/* prototypes */
static MACHINE_RESET( surpratk );
static void surpratk_banking( int lines );
static void surpratk_banking( const device_config *device, int lines );
VIDEO_START( surpratk );
VIDEO_UPDATE( surpratk );
@ -325,21 +324,21 @@ ROM_END
***************************************************************************/
static void surpratk_banking(int lines)
static void surpratk_banking(const device_config *device, int lines)
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs = 0;
logerror("%04x: setlines %02x\n",cpu_get_pc(Machine->activecpu),lines);
logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines);
offs = 0x10000 + ((lines & 0x1f) * 0x2000);
if (offs >= 0x48000) offs -= 0x40000;
memory_set_bankptr(Machine, 1,&RAM[offs]);
memory_set_bankptr(device->machine, 1,&RAM[offs]);
}
static MACHINE_RESET( surpratk )
{
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)surpratk_banking);
konami_configure_set_lines(machine->cpu[0], surpratk_banking);
paletteram = &memory_region(machine, "main")[0x48000];
}

View File

@ -9,7 +9,6 @@ K052591 emulation by Eddie Edwards
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "video/konamiic.h"
#include "sound/2151intf.h"
@ -17,7 +16,7 @@ K052591 emulation by Eddie Edwards
static MACHINE_RESET( scontra );
static MACHINE_RESET( thunderx );
static void thunderx_banking(int lines);
static void thunderx_banking(const device_config *device, int lines);
extern int scontra_priority;
VIDEO_START( scontra );
@ -1020,16 +1019,16 @@ ROM_END
/***************************************************************************/
static void thunderx_banking( int lines )
static void thunderx_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
int offs;
// logerror("thunderx %04x: bank select %02x\n", cpu_get_pc(machine->activecpu), lines );
offs = 0x10000 + (((lines & 0x0f) ^ 0x08) * 0x2000);
if (offs >= 0x28000) offs -= 0x20000;
memory_set_bankptr(Machine, 1, &RAM[offs] );
memory_set_bankptr(device->machine, 1, &RAM[offs] );
}
static MACHINE_RESET( scontra )
@ -1043,7 +1042,7 @@ static MACHINE_RESET( thunderx )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)thunderx_banking);
konami_configure_set_lines(machine->cpu[0], thunderx_banking);
memory_set_bankptr(machine, 1, &RAM[0x10000] ); /* init the default bank */
paletteram = &RAM[0x28000];

View File

@ -87,7 +87,6 @@ Notes:
***************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "video/konamiic.h"
#include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
#include "machine/eeprom.h"
@ -96,7 +95,7 @@ Notes:
/* prototypes */
static MACHINE_RESET( vendetta );
static void vendetta_banking( int lines );
static void vendetta_banking( const device_config *device, int lines );
static void vendetta_video_banking( running_machine *machine, int select );
VIDEO_START( vendetta );
@ -775,21 +774,21 @@ ROM_END
***************************************************************************/
static void vendetta_banking( int lines )
static void vendetta_banking( const device_config *device, int lines )
{
UINT8 *RAM = memory_region(Machine, "main");
UINT8 *RAM = memory_region(device->machine, "main");
if ( lines >= 0x1c )
{
logerror("PC = %04x : Unknown bank selected %02x\n", cpu_get_pc(Machine->activecpu), lines );
logerror("PC = %04x : Unknown bank selected %02x\n", cpu_get_pc(device), lines );
}
else
memory_set_bankptr(Machine, 1, &RAM[ 0x10000 + ( lines * 0x2000 ) ] );
memory_set_bankptr(device->machine, 1, &RAM[ 0x10000 + ( lines * 0x2000 ) ] );
}
static MACHINE_RESET( vendetta )
{
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)vendetta_banking);
konami_configure_set_lines(machine->cpu[0], vendetta_banking);
paletteram = &memory_region(machine, "main")[0x48000];
irq_enabled = 0;

View File

@ -4,7 +4,6 @@
#include "machine/eeprom.h"
#include "sound/k053260.h"
#include "includes/simpsons.h"
#include "deprecat.h"
int simpsons_firq_enabled;
@ -115,16 +114,16 @@ READ8_HANDLER( simpsons_sound_r )
***************************************************************************/
static void simpsons_banking( int lines )
static void simpsons_banking( const device_config *device, int lines )
{
memory_set_bank(Machine, 1, lines & 0x3f);
memory_set_bank(device->machine, 1, lines & 0x3f);
}
MACHINE_RESET( simpsons )
{
UINT8 *RAM = memory_region(machine, "main");
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_KONAMI_SETLINES_CALLBACK, (genf *)simpsons_banking);
konami_configure_set_lines(machine->cpu[0], simpsons_banking);
paletteram = &RAM[0x88000];
simpsons_xtraram = &RAM[0x89000];