This is clmdsp.h in view mode; [Download] [Up]
/* clmdsp.h: struct defs for various 56000 host interface memory maps */
#include <stdio.h>
typedef volatile struct _DSPRegs {
unsigned char icr;
unsigned char cvr;
unsigned char isr;
unsigned char ivr;
union {
/* unsigned int receive; */
/* unsigned int transmit; */
/* this worked on system 1.0 and system 2.0 with the 68030 but can't be used with the 68040 */
struct {
unsigned char pad;
unsigned char h;
unsigned char m;
unsigned char l;
} rx;
struct {
unsigned char pad;
unsigned char h;
unsigned char m;
unsigned char l;
} tx;
} data;
} DSPRegs;
/* QP DSP host-interface registers, as accessed in memory-mapped mode */
/* for the QP board, dsp regs are in byte 3 of each word -- this struct can't be used with the NeXT's DSP! */
typedef volatile struct _QPRegs {
unsigned char icr_pad[3];
unsigned char icr;
unsigned char cvr_pad[3];
unsigned char cvr;
unsigned char isr_pad[3];
unsigned char isr;
unsigned char ivr_pad[3];
unsigned char ivr;
union {
unsigned int receive;
unsigned int transmit;
} data;
} QPRegs;
/* in system 1.0, the structs were the same, so we needed only one set of access macros */
/* Some of these are called trillions of times, so we don't want to waste time deciding */
/* (at this level) which host interface type we are accessing (i.e. higher levels will */
/* have to keep track of this). */
DSPRegs *cpu_HI;
QPRegs *qp_HI;
#ifdef ARIEL_PC_56D
#define CPU_ICR dsp_getICR(current_active_dsp)
#define CPU_CVR dsp_getCVR(current_active_dsp)
#define CPU_ISR dsp_getISR(current_active_dsp)
#define put_cpu_icr(x) dsp_putICR(current_active_dsp,x)
#define put_cpu_cvr(x) dsp_putCVR(current_active_dsp,x)
#else
#define CPU_ICR cpu_HI->icr
#define CPU_CVR cpu_HI->cvr
#define CPU_ISR cpu_HI->isr
#define put_cpu_icr(x) CPU_ICR = x
#define put_cpu_cvr(x) CPU_CVR = x
#endif
/* #define put_cpu_tx(x) CPU_TX = x */
/* made a procedure and moved to next56.c (to avoid collision with qp.c) */
#define get_cpu_icr(x) *(x) = CPU_ICR
#define get_cpu_cvr(x) *(x) = CPU_CVR
#define get_cpu_isr(x) *(x) = CPU_ISR
/* #define get_cpu_rx(x) *(x) = CPU_RX */
#define QP_ICR qp_HI->icr
#define QP_CVR qp_HI->cvr
#define QP_ISR qp_HI->isr
#define QP_TX qp_HI->data.transmit
#define QP_RX qp_HI->data.receive
#define put_qp_icr(x) QP_ICR = x
#define put_qp_cvr(x) QP_CVR = x
#define put_qp_tx(x) QP_TX = x
#define get_qp_icr(x) *(x) = QP_ICR
#define get_qp_cvr(x) *(x) = QP_CVR
#define get_qp_isr(x) *(x) = QP_ISR
#define get_qp_rx(x) *(x) = QP_RX
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.