/**********************************************************************
SP0256 Narrator Speech Processor emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************
_____ _____
Vss 1 |* \_/ | 28 OSC 2
_RESET 2 | | 27 OSC 1
ROM DISABLE 3 | | 26 ROM CLOCK
C1 4 | | 25 _SBY RESET
C2 5 | | 24 DIGITAL OUT
C3 6 | | 23 Vdi
Vdd 7 | SP0256 | 22 TEST
SBY 8 | | 21 SER IN
_LRQ 9 | | 20 _ALD
A8 10 | | 19 SE
A7 11 | | 18 A1
SER OUT 12 | | 17 A2
A6 13 | | 16 A3
A5 14 |_____________| 15 A4
**********************************************************************/
/*
GI SP0256 Narrator Speech Processor
By Joe Zbiciak. Ported to MESS by tim lindner.
Copyright Joseph Zbiciak, all rights reserved.
Copyright tim lindner, all rights reserved.
- This source code is released as freeware for non-commercial purposes.
- You are free to use and redistribute this code in modified or
unmodified form, provided you list us in the credits.
- If you modify this source code, you must add a notice to each
modified source file that it has been changed. If you're a nice
person, you will clearly mark each change too. :)
- If you wish to use this for commercial purposes, please contact us at
intvnut@gmail.com (Joe Zbiciak), tlindner@macmess.org (tim lindner)
- This entire notice must remain in the source code.
*/
#pragma once
#ifndef __SP0256_H__
#define __SP0256_H__
#include "devlegcy.h"
struct sp0256_interface
{
devcb_write_line lrq_callback;
devcb_write_line sby_callback;
};
void sp0256_bitrevbuff(UINT8 *buffer, unsigned int start, unsigned int length);
void sp0256_set_clock(device_t *device, int clock);
DECLARE_WRITE8_DEVICE_HANDLER( sp0256_ALD_w );
READ_LINE_DEVICE_HANDLER( sp0256_lrq_r );
READ_LINE_DEVICE_HANDLER( sp0256_sby_r );
DECLARE_READ16_DEVICE_HANDLER( spb640_r );
DECLARE_WRITE16_DEVICE_HANDLER( spb640_w );
class sp0256_device : public device_t,
public device_sound_interface
{
public:
sp0256_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~sp0256_device() { global_free(m_token); }
// access to legacy token
void *token() const { assert(m_token != NULL); return m_token; }
protected:
// device-level overrides
virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
private:
// internal state
void *m_token;
};
extern const device_type SP0256;
#endif /* __SP0256_H__ */