144 lines
6.3 KiB
C
144 lines
6.3 KiB
C
/*******************************************************************************
|
||
* This file contains the header defs for the ECB download program
|
||
*
|
||
* File name: ecb_load.h
|
||
*
|
||
* Author: P.S. May 2004
|
||
*
|
||
*******************************************************************************/
|
||
/*******************************************************************************
|
||
/*******************************************************************************
|
||
*& 'ecbdriv.h' modifications:
|
||
*&
|
||
*&
|
||
*******************************************************************************/
|
||
/****************************************************************************************
|
||
* Declaration of data types.
|
||
****************************************************************************************/
|
||
typedef int Long; /* 32 bits integer */
|
||
|
||
/* GPIB interface */
|
||
/****************************************************************************************
|
||
* Constants.
|
||
****************************************************************************************/
|
||
#define TC_FAR
|
||
#define F_BUFSIZ 256 /* 256 characters per line */
|
||
#define NUL ('\0') /* Binary null character */
|
||
#define ACKN ('\6') /* Acknowledge character */
|
||
#define FOUND 1 /* Symbol found in Put/Get_variable */
|
||
#define NOT_FOUND 0 /* Symbol not found Put/Get_variable */
|
||
#define GLOBAL 2 /* Sym. used in more Put/Get_variable */
|
||
|
||
#ifndef TRUE
|
||
#define TRUE 1 /* Logical true */
|
||
#endif
|
||
#ifndef FALSE
|
||
#define FALSE 0 /* Logical false */
|
||
#endif
|
||
|
||
/*******************************************************************************
|
||
* ECB type definitions.
|
||
*******************************************************************************/
|
||
|
||
typedef struct /* Z80 registers transferred in function calls */
|
||
{
|
||
unsigned char d; /* D register in Z80 */
|
||
unsigned char e; /* E register in Z80 */
|
||
unsigned char b; /* B register in Z80 */
|
||
unsigned char c; /* C register in Z80 */
|
||
} Z80_reg;
|
||
|
||
typedef union /* Used to swap bytes in 'address' and 'byte_count' */
|
||
{
|
||
unsigned short word;
|
||
struct
|
||
{
|
||
unsigned char msb; /* Most significant byte */
|
||
unsigned char lsb; /* Least significant byte */
|
||
}b;
|
||
}Swap;
|
||
|
||
typedef union /* Used to read DMA data from the P2701a CPU module */
|
||
{
|
||
unsigned char *byte; /* Four 8 bit bytes per 32 bit integer word */
|
||
Long *word;
|
||
}Ecb_data;
|
||
|
||
|
||
/*******************************************************************************
|
||
* ECB basic functions.
|
||
*******************************************************************************/
|
||
#define READ_N_BYTES 3 /* ECB function to read n bytes */
|
||
#define WRITE_N_BYTES 4 /* ECB function to write n bytes */
|
||
#define DMA_READ 5 /* ECB function to DMA read n bytes */
|
||
|
||
#define ECB_DOWN_LOAD 178 /* ECB function to download the ECB program */
|
||
#define LOAD_NEXT 1 /* Return code from download function */
|
||
#define ECB_TYPE 157 /* Returns ECB ROM or RAM and version */
|
||
|
||
#define TYPE_OUT 2 /* Returns type from function 157 */
|
||
#define VERS_OUT 3 /* Returns version from function 157 */
|
||
|
||
|
||
/*******************************************************************************
|
||
* GPIB and ECB implementation environment.
|
||
*******************************************************************************/
|
||
#define GPIB_H "/usr/local/include/ugpib.h"
|
||
#define GPIB0 "gpib0" /* Name of adater board No. 0 */
|
||
#define ECB1 "dev5" /* Name of ECB system #1 */
|
||
#define ECBTEXT "ECB SYSTEM"
|
||
#define ECB2 "dev4" /* Name of ECB system #2 */
|
||
#define DEFAULT_TIMO T3s /* Default timeout 3 sec. */
|
||
#define ECB_BYTES 65536L /* Max No. of bytes to transfer in each call */
|
||
|
||
/*******************************************************************************
|
||
* Error codes
|
||
*******************************************************************************/
|
||
#define TAS_ERROR 100 /* General error */
|
||
#define OPEN_FILE 600 /* Could not open file */
|
||
#define FILE_READ 601 /* Could not read file */
|
||
#define WRITE_FILE 602 /* Could not write to file */
|
||
#define GPIB_WRITE_ERROR 700
|
||
#define GPIB_READ_ERROR 701
|
||
#define GPIB_FIND_ERROR 702 /* Could not 'open' device */
|
||
#define GPIB_NO_LISNER_ERROR 703
|
||
#define ECB_ILLEGAL_FUNC 750 /* No such ECB function */
|
||
#define ECB_OVERFLOW 751 /* Byte count exceeds array size */
|
||
|
||
/*******************************************************************************
|
||
* Globals
|
||
*******************************************************************************/
|
||
extern int x_tas_error; /* Global error type */
|
||
extern char *x_error_text; /* Error text line*/
|
||
extern int x_error_int; /* Global error parameter */
|
||
extern int x_gpib0; /* Unit descriptor for board (adaptor) 0 */
|
||
extern int x_ecb1; /* Unit descriptor of ECB system #1 */
|
||
extern Z80_reg x_inreg; /* Z80 registers b,c,d and e before call */
|
||
extern Z80_reg x_outreg; /* Z80 registers b,c,d and e after call */
|
||
extern unsigned char x_ecb_data[]; /* Array to hold data blocks for ECB */
|
||
extern int x_ecb_error_count; /* Counter for ECB call errors */
|
||
extern Ecb_data x_ecba; /* DMA data from P2701a ECB-CPU */
|
||
extern int x_cpu_typ; /* =0: WP-CPU, =1: P2701 */
|
||
|
||
|
||
/*******************************************************************************
|
||
* Functions
|
||
*******************************************************************************/
|
||
extern void Gpib_init (void);
|
||
extern int Gpib_error(void);
|
||
|
||
extern int Ecb_func (int , unsigned char); /* Call ECB function */
|
||
extern void Ecb_read (int, unsigned short, unsigned short); /* Read n bytes */
|
||
extern void Ecb_write (int, unsigned short, unsigned short); /* Write n bytes */
|
||
extern int Ecb_dma_read (int, unsigned short, unsigned short); /* DMA data */
|
||
extern void Ecb_memory_allocate (int size);
|
||
extern int Ecb_type (int);
|
||
|
||
extern void Ecb_init(void);
|
||
extern int Ecb_error(void);
|
||
|
||
extern void Ecb_load_error(void); /* Print error messages */
|
||
extern void Error_exit(void);
|
||
extern int Base_error(void);
|
||
|