blob: 2949e53e80b0e964aa0d5483983a1a91348089e4 (
plain) (
tree)
|
|
/*************************************************************************
Exidy Vertigo hardware
*************************************************************************/
/*************************************
*
* Typedefs
*
*************************************/
#define MC_LENGTH 512
typedef struct _am2901
{
UINT32 ram[16]; /* internal ram */
UINT32 d; /* direct data D input */
UINT32 q; /* Q register */
UINT32 f; /* F ALU result */
UINT32 y; /* Y output */
} am2901;
class vector_generator
{
public:
running_machine &machine() const { assert(m_machine != NULL); return *m_machine; }
void set_machine(running_machine &machine) { m_machine = &machine; }
UINT32 sreg; /* shift register */
UINT32 l1; /* latch 1 adder operand only */
UINT32 l2; /* latch 2 adder operand only */
UINT32 c_v; /* vertical position counter */
UINT32 c_h; /* horizontal position counter */
UINT32 c_l; /* length counter */
UINT32 adder_s; /* slope generator result and B input */
UINT32 adder_a; /* slope generator A input */
UINT32 color; /* color */
UINT32 intensity; /* intensity */
UINT32 brez; /* h/v-counters enable */
UINT32 vfin; /* drawing yes/no */
UINT32 hud1; /* h-counter up or down (stored in L1) */
UINT32 hud2; /* h-counter up or down (stored in L2) */
UINT32 vud1; /* v-counter up or down (stored in L1) */
UINT32 vud2; /* v-counter up or down (stored in L2) */
UINT32 hc1; /* use h- or v-counter in L1 mode */
UINT32 ven; /* vector intensity enable */
private:
running_machine *m_machine;
};
typedef struct _microcode
{
UINT32 x;
UINT32 a;
UINT32 b;
UINT32 inst;
UINT32 dest;
UINT32 cn;
UINT32 mreq;
UINT32 rsel;
UINT32 rwrite;
UINT32 of;
UINT32 iif;
UINT32 oa;
UINT32 jpos;
UINT32 jmp;
UINT32 jcon;
UINT32 ma;
} microcode;
typedef struct _vproc
{
UINT16 sram[64]; /* external sram */
UINT16 ramlatch; /* latch between 2901 and sram */
UINT16 rom_adr; /* vector ROM/RAM address latch */
UINT32 pc; /* program counter */
UINT32 ret; /* return address */
} vproc;
class vertigo_state : public driver_device
{
public:
vertigo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
UINT16 *m_vectorram;
device_t *m_ttl74148;
device_t *m_custom;
attotime m_irq4_time;
UINT8 m_irq_state;
UINT8 m_adc_result;
vproc m_vs;
am2901 m_bsp;
vector_generator m_vgen;
UINT16 *m_vectorrom;
microcode m_mc[MC_LENGTH];
};
/*----------- defined in machine/vertigo.c -----------*/
void vertigo_update_irq(device_t *device);
extern const struct pit8253_config vertigo_pit8254_config;
READ16_HANDLER( vertigo_io_convert );
READ16_HANDLER( vertigo_io_adc );
READ16_HANDLER( vertigo_coin_r );
READ16_HANDLER( vertigo_sio_r );
WRITE16_HANDLER( vertigo_audio_w );
WRITE16_HANDLER( vertigo_motor_w );
WRITE16_HANDLER( vertigo_wsot_w );
INTERRUPT_GEN( vertigo_interrupt );
MACHINE_START( vertigo );
MACHINE_RESET( vertigo );
/*----------- defined in video/vertigo.c -----------*/
void vertigo_vproc_init(running_machine &machine);
void vertigo_vproc_reset(running_machine &machine);
void vertigo_vproc(running_machine &machine, int cycles, int irq4);
|