100 lines
3.0 KiB
C
100 lines
3.0 KiB
C
|
/*****************************************************************************
|
||
|
*
|
||
|
* 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
|
||
|
|
||
|
//#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);
|
||
|
};*/
|
||
|
|
||
|
|
||
|
void pokey_update(void *chip, stream_sample_t **outputs, int samples);
|
||
|
int device_start_pokey(void **chip, int clock);
|
||
|
void device_stop_pokey(void *chip);
|
||
|
void device_reset_pokey(void *chip);
|
||
|
|
||
|
//READ8_DEVICE_HANDLER( pokey_r );
|
||
|
//WRITE8_DEVICE_HANDLER( pokey_w );
|
||
|
UINT8 pokey_r(void *chip, offs_t offset);
|
||
|
void pokey_w(void *chip, offs_t offset, UINT8 data);
|
||
|
|
||
|
/* 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);*/
|
||
|
|
||
|
void pokey_set_mute_mask(void *chip, UINT32 MuteMask);
|
||
|
|
||
|
//DECLARE_LEGACY_SOUND_DEVICE(POKEY, pokey);
|