ftp.nice.ch/pub/next/tools/emulators/vice.0.15.0.NeXT.sd.tgz#/vice-0.15.0/src/sound.h

This is sound.h in view mode; [Download] [Up]

/*
 * sound.h - General code for the sound interface
 *
 * Written by
 *  Teemu Rantanen (tvr@cs.hut.fi)
 *
 * This file is part of VICE, the Versatile Commodore Emulator.
 * See README for copyright notice.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 *  02111-1307  USA.
 *
 */

#ifndef _SOUND_H
#define _SOUND_H

#include "types.h"
#include "warn.h"

/* device structure */
typedef struct
{
    /* name of the device */
    char			 *name;
    /* init -routine to be called at device initialization. Should use
       suggested values if possible or return new values if they cannot be
       used */
    int				(*init)(warn_t *w, char *device, int *speed,
					int *fragsize, int *fragnr,
					double bufsize);
    /* send number of bytes to the soundcard. it is assumed to block if kernel
       buffer is full */
    int				(*write)(warn_t *w, SWORD *pbuf, int nr);
    /* dump-routine to be called for every write to SID */
    int				(*dump)(warn_t *w, ADDRESS addr, BYTE byte,
					CLOCK clks);
    /* flush-routine to be called every frame */
    int				(*flush)(warn_t *s, char *state);
    /* return number of samples unplayed in the kernel buffer at the moment */
    int				(*bufferstatus)(warn_t *s, int first);
    /* close and cleanup device */
    void			(*close)(warn_t *w);
    /* suspend device */
    int				(*suspend)(warn_t *s);
    /* resume device */
    int				(*resume)(warn_t *s);
} sound_device_t;

/* Sound adjustment types.  */
#define SOUND_ADJUST_FLEXIBLE   0
#define SOUND_ADJUST_ADJUSTING  1
#define SOUND_ADJUST_EXACT      2

/* external functions for vice */
extern void sound_init(unsigned int clock_rate, unsigned int ticks_per_frame);
extern int  sound_flush(int relative_speed);
extern void sound_suspend(void);
extern void sound_resume(void);
extern void sound_close(void);
extern void sound_set_warp_mode(int value);

extern int  sound_init_resources(void);
extern int  sound_init_cmdline_options(void);

extern void sound_prevent_clk_overflow(CLOCK sub);


/* device initialization prototypes */
extern int  sound_init_aix_device(void);
extern int  sound_init_allegro_device(void);
extern int  sound_init_sb_device(void);
extern int  sound_init_dummy_device(void);
extern int  sound_init_dump_device(void);
extern int  sound_init_fs_device(void);
extern int  sound_init_hpux_device(void);
extern int  sound_init_midas_device(void);
extern int  sound_init_sdl_device(void);
extern int  sound_init_sgi_device(void);
extern int  sound_init_speed_device(void);
extern int  sound_init_sun_device(void);
extern int  sound_init_test_device(void);	/* XXX: missing */
extern int  sound_init_uss_device(void);


/* internal function for sound device registration */
extern int  sound_register_device(sound_device_t *pdevice);

/* other internal functions used around sound -code */
extern int  sound_read(ADDRESS addr);
extern void sound_store(ADDRESS addr, BYTE val);
extern double sound_sample_position(void);

/* functions and structs implemented by each machine */
extern void sound_machine_init(void);
typedef struct sound_s sound_t;
extern sound_t *sound_machine_open(int speed, int cycles_per_sec);
extern void sound_machine_close(sound_t *psid);
extern int sound_machine_calculate_samples(sound_t *psid, SWORD *pbuf, int nr);
extern void sound_machine_store(sound_t *psid, ADDRESS addr, BYTE val);
extern BYTE sound_machine_read(sound_t *psid, ADDRESS addr);
extern char *sound_machine_dump_state(sound_t *psid);
extern void sound_machine_prevent_clk_overflow(sound_t *psid, CLOCK sub);

#endif /* !defined (_SOUND_H) */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.