diff options
Diffstat (limited to 'trunk/src/emu/sound/pokey.h')
-rw-r--r-- | trunk/src/emu/sound/pokey.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/trunk/src/emu/sound/pokey.h b/trunk/src/emu/sound/pokey.h new file mode 100644 index 00000000000..39ac7f4bcb6 --- /dev/null +++ b/trunk/src/emu/sound/pokey.h @@ -0,0 +1,95 @@ +/***************************************************************************** + * + * POKEY chip emulator 4.3 + * Copyright Nicola Salmoria and the MAME Team + * + * Based on original info found in Ron Fries' Pokey emulator, + * with additions by Brad Oliver, Eric Smith and Juergen Buchmueller. + * paddle (a/d conversion) details from the Atari 400/800 Hardware Manual. + * Polynome algorithms according to info supplied by Perry McFarlane. + * + * This code is subject to the MAME license, which besides other + * things means it is distributed as is, no warranties whatsoever. + * For more details read mame.txt that comes with MAME. + * + *****************************************************************************/ + +#pragma once + +#ifndef __POKEY_H__ +#define __POKEY_H__ + +#include "devlegcy.h" + +/* CONSTANT DEFINITIONS */ + +/* POKEY WRITE LOGICALS */ +#define AUDF1_C 0x00 +#define AUDC1_C 0x01 +#define AUDF2_C 0x02 +#define AUDC2_C 0x03 +#define AUDF3_C 0x04 +#define AUDC3_C 0x05 +#define AUDF4_C 0x06 +#define AUDC4_C 0x07 +#define AUDCTL_C 0x08 +#define STIMER_C 0x09 +#define SKREST_C 0x0A +#define POTGO_C 0x0B +#define SEROUT_C 0x0D +#define IRQEN_C 0x0E +#define SKCTL_C 0x0F + +/* POKEY READ LOGICALS */ +#define POT0_C 0x00 +#define POT1_C 0x01 +#define POT2_C 0x02 +#define POT3_C 0x03 +#define POT4_C 0x04 +#define POT5_C 0x05 +#define POT6_C 0x06 +#define POT7_C 0x07 +#define ALLPOT_C 0x08 +#define KBCODE_C 0x09 +#define RANDOM_C 0x0A +#define SERIN_C 0x0D +#define IRQST_C 0x0E +#define SKSTAT_C 0x0F + +/* exact 1.79 MHz clock freq (of the Atari 800 that is) */ +#define FREQ_17_EXACT 1789790 + + +/***************************************************************************** + * pot0_r to pot7_r: + * Handlers for reading the pot values. Some Atari games use + * ALLPOT to return dipswitch settings and other things. + * serin_r, serout_w, interrupt_cb: + * New function pointers for serial input/output and a interrupt callback. + *****************************************************************************/ + +typedef struct _pokey_interface pokey_interface; +struct _pokey_interface +{ + devcb_read8 pot_r[8]; + devcb_read8 allpot_r; + devcb_read8 serin_r; + devcb_write8 serout_w; + void (*interrupt_cb)(device_t *device, int mask); +}; + + +READ8_DEVICE_HANDLER( pokey_r ); +WRITE8_DEVICE_HANDLER( pokey_w ); + +/* fix me: eventually this should be a single device with pokey subdevices */ +READ8_HANDLER( quad_pokey_r ); +WRITE8_HANDLER( quad_pokey_w ); + +void pokey_serin_ready (device_t *device, int after); +void pokey_break_w (device_t *device, int shift); +void pokey_kbcode_w (device_t *device, int kbcode, int make); + +DECLARE_LEGACY_SOUND_DEVICE(POKEY, pokey); + +#endif /* __POKEY_H__ */ |