Modernized akiko device. (nw)

This commit is contained in:
Ivan Vangelista 2013-09-09 18:58:06 +00:00
parent 5a2bf6f08d
commit 07812b3bf6
3 changed files with 362 additions and 360 deletions

View File

@ -126,7 +126,7 @@ static ADDRESS_MAP_START( cd32_map, AS_PROGRAM, 32, cd32_state )
AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram")
AM_RANGE(0x800000, 0x800003) AM_READ_PORT("DIPSW1")
AM_RANGE(0x800010, 0x800013) AM_READ_PORT("DIPSW2")
AM_RANGE(0xb80000, 0xb8003f) AM_DEVREADWRITE_LEGACY("akiko", amiga_akiko32_r, amiga_akiko32_w)
AM_RANGE(0xb80000, 0xb8003f) AM_DEVREADWRITE("akiko", akiko_device, read, write)
AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff)
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs")

View File

@ -53,26 +53,82 @@ public:
/*----------- defined in machine/cd32.c -----------*/
DECLARE_READ32_DEVICE_HANDLER( amiga_akiko32_r );
DECLARE_WRITE32_DEVICE_HANDLER( amiga_akiko32_w );
class akiko_device : public device_t
{
public:
akiko_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~akiko_device() { global_free(m_token); }
~akiko_device() {}
// access to legacy token
void *token() const { assert(m_token != NULL); return m_token; }
DECLARE_READ32_MEMBER( read );
DECLARE_WRITE32_MEMBER( write );
protected:
// device-level overrides
virtual void device_config_complete();
virtual void device_start();
virtual void device_stop();
virtual void device_reset();
private:
// internal state
void *m_token;
address_space *m_space;
/* chunky to planar converter */
UINT32 m_c2p_input_buffer[8];
UINT32 m_c2p_output_buffer[8];
UINT32 m_c2p_input_index;
UINT32 m_c2p_output_index;
/* i2c bus */
int m_i2c_scl_out;
int m_i2c_scl_dir;
int m_i2c_sda_out;
int m_i2c_sda_dir;
/* cdrom */
UINT32 m_cdrom_status[2];
UINT32 m_cdrom_address[2];
UINT32 m_cdrom_track_index;
UINT32 m_cdrom_lba_start;
UINT32 m_cdrom_lba_end;
UINT32 m_cdrom_lba_cur;
UINT16 m_cdrom_readmask;
UINT16 m_cdrom_readreqmask;
UINT32 m_cdrom_dmacontrol;
UINT32 m_cdrom_numtracks;
UINT8 m_cdrom_speed;
UINT8 m_cdrom_cmd_start;
UINT8 m_cdrom_cmd_end;
UINT8 m_cdrom_cmd_resp;
cdda_device *m_cdda;
cdrom_file *m_cdrom;
UINT8 * m_cdrom_toc;
emu_timer *m_dma_timer;
emu_timer *m_frame_timer;
device_t *m_i2cmem;
int m_cdrom_is_device;
void nvram_write(UINT32 data);
UINT32 nvram_read();
void c2p_write(UINT32 data);
UINT32 c2p_read();
void cdda_stop();
void cdda_play(UINT32 lba, UINT32 num_blocks);
void cdda_pause(int pause);
UINT8 cdda_getstatus(UINT32 *lba);
void set_cd_status(UINT32 status);
TIMER_CALLBACK_MEMBER(frame_proc);
TIMER_CALLBACK_MEMBER(dma_proc);
void start_dma();
void setup_response( int len, UINT8 *r1 );
TIMER_CALLBACK_MEMBER( cd_delayed_cmd );
void update_cdrom();
};
extern const device_type AKIKO;

File diff suppressed because it is too large Load Diff