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

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

/*
 * serial.h - Serial device implementation.
 *
 * Written by
 *  Teemu Rantanen  (tvr@cs.hut.fi)
 *  André Fachat    (a.fachat@physik.tu-chemnitz.de)
 *
 * 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 _SERIAL_H
#define _SERIAL_H

#include "types.h"
#include "traps.h"

#define MAXDEVICES		16

/* Serial Error Codes. */

#define SERIAL_OK		0
#define SERIAL_WRITE_TIMEOUT	1
#define SERIAL_READ_TIMEOUT	2
#define SERIAL_FILE_NOT_FOUND	64
#define SERIAL_NO_DEVICE	128

#define SERIAL_ERROR		(2)
#define SERIAL_EOF		(64)


/* Device types. */

#define DT_FS			0x0100	/* Filesystem Drive */
#define DT_DISK			0x0200
#define DT_PRINTER		0x0400

#define DT_TAPE			0x0800

#define DT_MASK			0xFF


/* Disk Drives. */

#define DT_1540			 0
#define DT_1541			 1	/* Default */
#define DT_1542			 2
#define DT_1551			 3

#define DT_1570			 4
#define DT_1571			 5
#define DT_1572			 6

#define DT_1581			 8

#define DT_2031			16
#define DT_2040			17
#define DT_2041			18
#define DT_3040			17	/* Same as 2040 */
#define DT_4031			16	/* Same as 2031 */

/* #define DT_2081			*/

#define DT_4040			24

#define DT_8050			32
#define DT_8060			33
#define DT_8061			34

#define DT_SFD1001		48
#define DT_8250			49
#define DT_8280			50


/* Printers. */

#define DT_ASCII		0	/* No printer commands nor graphics */
#define DT_MPS803		1
#define DT_STAR10CCL		2


typedef struct serial_s
{
    int inuse;
    int isopen[16];				/* isopen flag for each secondary address */
    char *info;					/* pointer to run-time data */
    char *name;					/* name of the device */
    int (*getf)(void *, BYTE *, int);		/* serial read function */
    int (*putf)(void *, BYTE, int);		/* serial write function */
    int (*openf)(void *, char *, int, int);	/* serial open function */
    int (*closef)(void *, int);			/* serial close function */
    void (*flushf)(void *, int);		/* tell device that write completed */
    BYTE nextbyte[16];				/* next byte to send to emulator, per sec. addr. */
    char nextok[16];				/* flag if nextbyte is valid */

    int nextst[16];

    /* The PET hardware emulation can be interrupted while
       transferring a byte. Thus we also have to save the byte
       and status last sent, to be able to send it again. */
    BYTE lastbyte[16];
    char lastok[16];
    int lastst[16];
} serial_t;

extern int serial_init(const trap_t *trap_list);
extern int serial_install_traps(void);
extern int serial_remove_traps(void);
extern int serial_attach_device(int device, char *var, char *name,
				int (*getf)(void *, BYTE *, int),
				int (*putf)(void *, BYTE, int),
				int (*openf)(void *, char *, int, int),
				int (*closef)(void *, int),
				void (*flushf)(void *, int));
extern int serial_select_file(int type, int number, const char *file);
extern int serial_remove(int number);
extern char *serial_get_file_name(int number);
extern serial_t *serial_get_device(int number);
extern void serial_reset(void);

extern int parallelattention(int b);
extern int parallelsendbyte(int data);
extern int parallelreceivebyte(BYTE *data, int fake);
extern void serialattention(void);
extern void serialsendbyte(void);
extern void serialreceivebyte(void);
extern void trap_serial_ready(void);

extern void serial_set_eof_callback(void (*func)(void));
extern void serial_set_attention_callback(void (*func)(void));

#endif  /* _SERIAL_H */

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