DataMuseum.dk

Presents historical artifacts from the history of:

Regnecentalen RC-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Regnecentalen RC-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦5988ad769⟧ TextFile

    Length: 7931 (0x1efb)
    Types: TextFile
    Notes: Uncompressed file

Derivation

└─⟦ce621b962⟧ Bits:30004623 Controller Environment R. 1.2 (5.25 inch)
└─⟦ce621b962⟧ UNIX Filesystem
    └─⟦8fe8649f9⟧ »CTENV.ISC/new/etc/drivers/card/Space.c.Z« 
    └─⟦8fe8649f9⟧ »CTENV.SCO/new/etc/drivers/card/Space.c.Z« 
└─⟦e03896eec⟧ Bits:30004624 Controller Environment R. 1.2 (3.5 inch)
└─⟦e03896eec⟧ UNIX Filesystem
    └─⟦8fe8649f9⟧ »CTENV.ISC/new/etc/drivers/card/Space.c.Z« 
    └─⟦8fe8649f9⟧ »CTENV.SCO/new/etc/drivers/card/Space.c.Z« 
        └─⟦this⟧ 

TextFile


#ident	"@(#)Space.c	1.2 - 92/05/13"

/* card/space.c */

#include "sys/types.h"
#include "sys/buf.h"
#include "sys/chain.h"
#include "sys/csem.h"
#include "sys/msl.h"
#include "sys/card.h"

#include "config.h"

#if 0
char nopetex[] = " adapter SETUP, but not operational\n\n";

ushort loadunit = 0;
#endif

ushort cardmask = 0;
int carddelayinterrupt = 0;

char * cardbootloadpgm = "/etc/rci.d/card.load";
char * carddebugpgm = "/etc/rci.d/card.deb";

int cardselftesttime = 30;
/* This is usesd to program dma1 and dma2 to rotating priority
   bit:value
     0:0	memory to memory disable
     0:1	memory to memory enable
     1:0	channel 0 address hold disable
     1:1	channel 0 address hold enable
     1:x	if bit 0 = 0
     2:0	controller enable
     2:1	controller disable
     3:0	Normal timing
     3:1	Compressed timing
     3:x	if bit 0 = 1
     4:0	Fixed priority
     4:1	Rotating priority
     5:0	Late write selection
     5:1	Extended write selection
     5:x	if bit 3 = 1
     6:0	DREQ sense active high
     6:1	DREQ sense active low
     7:0	DACK sense active low
     7:1	DACK sense active high

    see also the data sheet for the 8237A
*/

int card_prgm_dma1 = CARD_ROTATE_DMAPRI ? 1 : 0;
int card_prgm_dma1_val = 0 | ((CARD_ROTATE_DMAPRI) ? 0x10 : 0);
int card_prgm_dma2 = CARD_ROTATE_DMAPRI ? 1 : 0;
int card_prgm_dma2_val = 0 | ((CARD_ROTATE_DMAPRI) ? 0x10 : 0);

unchar cardclijmpfar[] = {
	/* cli */	0xfa,
#if 0
	/* mov al, 0xa4 */	0xb0, 0xa4,
	/* out 0x9c, al */	0xe6, 0x9c,
#endif
	/* jmpf 0xf000:0x0800 */	0xea, 0x00, 0x08, 0x00, 0xf0
};
int cardcjfsize = sizeof(cardclijmpfar);

unchar cardmovff[] = { 
	/* cs: */ 0x2e,
	/* mov [0x000f], 0xff */	0xc6, 0x06, 0x0f, 0x00, 0xff,
	/* hlt */ 0xf4
};
int cardmovffsize = sizeof(cardmovff);

unchar cardclihltjmp[] = { 
	/* cli */	0xfa,
	/* hlt */	0xf4,
	/* jmps -3 (to hlt)  */ 0xeb, 0xfd
};
int cardchjsize = sizeof(cardclihltjmp);

ushort cpmask = 1; /* mask of initialized boards, initially we are alone */
struct chain_sem ex_sem;
struct chain exfree;

struct gate_tab cardgateintr[NGATE];
struct gate_tab carddroptab[NGATE];
int v_cardgate = NGATE;

struct unit unit_tab[NUNIT];
struct unit * ve_unit = &unit_tab[NUNIT];
int v_unit = NUNIT;

struct exwait exwait[NEXWAIT];
struct exwait * ve_exwait = &exwait[NEXWAIT];
int v_exwait = NEXWAIT;

/* declarations for imc: */

struct chain_sem imcbufsem[NUNIT];
struct chain_sem imcsem[NUNIT];
int imcbufsize[NUNIT];

/*	The following space points to areas for communication with
**	intelligent at boards
*/

ushort v_window = NWINDOW;
unsigned char window_user[NWINDOW];

caddr_t window_addr;
int window_click;

/* Internal semaphores */

struct chain csfree;

/* pr process variables */

struct chain chain[NPROC];
ushort csem_waitsem[NPROC];

/*	Card 1 or 2 defined from dma 0 cards */

#if defined(CRD0_0)
#	if !(CRD0_0 & CARD_2ND)
#		define	_C1      CRD0_0
#		define	_C1_CHAN 0
#		define	_C1_VECT CRD0_0_VECT
#		define	_C1_SIOA CRD0_0_SIOA
#	else
#		define	_C2      (CRD0_0 & ~CARD_2ND)
#		define	_C2_CHAN 0
#		define	_C2_VECT CRD0_0_VECT
#		define	_C2_SIOA CRD0_0_SIOA
#	endif
#endif

#if defined(CRD0_1)
#	if !(CRD0_1 & CARD_2ND)
#		define	_C1      CRD0_1
#		define	_C1_CHAN 0
#		define	_C1_VECT CRD0_1_VECT
#		define	_C1_SIOA CRD0_1_SIOA
#	else
#		define	_C2      (CRD0_1 & ~CARD_2ND)
#		define	_C2_CHAN 0
#		define	_C2_VECT CRD0_1_VECT
#		define	_C2_SIOA CRD0_1_SIOA
#	endif
#endif

/*	Card 3 or 4 defined from dma 3 cards */

#if defined(CRD3_0)
#	if !(CRD3_0 & CARD_2ND)
#		define	_C3      CRD3_0
#		define	_C3_CHAN CRD3_CHAN
#		define	_C3_VECT CRD3_0_VECT
#		define	_C3_SIOA CRD3_0_SIOA
#	else
#		define	_C4      (CRD3_0 & ~CARD_2ND)
#		define	_C4_CHAN CRD3_CHAN
#		define	_C4_VECT CRD3_0_VECT
#		define	_C4_SIOA CRD3_0_SIOA
#	endif
#endif

#if defined(CRD3_1)
#	if !(CRD3_1 & CARD_2ND)
#		define	_C3      CRD3_1
#		define	_C3_CHAN CRD3_CHAN
#		define	_C3_VECT CRD3_1_VECT
#		define	_C3_SIOA CRD3_1_SIOA
#	else
#		define	_C4      (CRD3_1 & ~CARD_2ND)
#		define	_C4_CHAN CRD3_CHAN
#		define	_C4_VECT CRD3_1_VECT
#		define	_C4_SIOA CRD3_1_SIOA
#	endif
#endif

/*	Card 5 or 6 defined from dma 5 or dma 7 cards */

#if defined(CRD5_0)
#	if !(CRD5_0 & CARD_2ND)
#		define	_C5      CRD5_0
#		define	_C5_CHAN CRD5_CHAN
#		define	_C5_VECT CRD5_0_VECT
#		define	_C5_SIOA CRD5_0_SIOA
#		define	_C5_INIT crd5_init
#	else
#		define	_C6      (CRD5_0 & ~CARD_2ND)
#		define	_C6_CHAN CRD5_CHAN
#		define	_C6_VECT CRD5_0_VECT
#		define	_C6_SIOA CRD5_0_SIOA
#		define	_C6_INIT crd5_init
#	endif
#endif

#if defined(CRD5_1)
#	if !(CRD5_1 & CARD_2ND)
#		define	_C5      CRD5_1
#		define	_C5_CHAN CRD5_CHAN
#		define	_C5_VECT CRD5_1_VECT
#		define	_C5_SIOA CRD5_1_SIOA
#		define	_C5_INIT crd5_init
#	else
#		define	_C6      (CRD5_1 & ~CARD_2ND)
#		define	_C6_CHAN CRD5_CHAN
#		define	_C6_VECT CRD5_1_VECT
#		define	_C6_SIOA CRD5_1_SIOA
#		define	_C6_INIT crd5_init
#	endif
#endif

#if defined(CRD7_0)
#	if !(CRD7_0 & CARD_2ND)
#		define	_C5      CRD7_0
#		define	_C5_CHAN CRD7_CHAN
#		define	_C5_VECT CRD7_0_VECT
#		define	_C5_SIOA CRD7_0_SIOA
#		define	_C5_INIT crd7_init
#	else
#		define	_C6      (CRD7_0 & ~CARD_2ND)
#		define	_C6_CHAN CRD7_CHAN
#		define	_C6_VECT CRD7_0_VECT
#		define	_C6_SIOA CRD7_0_SIOA
#		define	_C6_INIT crd7_init
#	endif
#endif

#if defined(CRD7_1)
#	if !(CRD7_1 & CARD_2ND)
#		define	_C5      CRD7_1
#		define	_C5_CHAN CRD7_CHAN
#		define	_C5_VECT CRD7_1_VECT
#		define	_C5_SIOA CRD7_1_SIOA
#		define	_C5_INIT crd7_init
#	else
#		define	_C6      (CRD7_1 & ~CARD_2ND)
#		define	_C6_CHAN CRD7_CHAN
#		define	_C6_VECT CRD7_1_VECT
#		define	_C6_SIOA CRD7_1_SIOA
#		define	_C6_INIT crd7_init
#	endif
#endif

/*	Card 7 or 8 defined from dma 1 cards */

#if defined(CRD1_0)
#	if !(CRD1_0 & CARD_2ND)
#		define	_C7      CRD1_0
#		define	_C7_CHAN CRD1_CHAN
#		define	_C7_VECT CRD1_0_VECT
#		define	_C7_SIOA CRD1_0_SIOA
#	else
#		define	_C8      (CRD1_0 & ~CARD_2ND)
#		define	_C8_CHAN CRD1_CHAN
#		define	_C8_VECT CRD1_0_VECT
#		define	_C8_SIOA CRD1_0_SIOA
#	endif
#endif

#if defined(CRD1_1)
#	if !(CRD1_1 & CARD_2ND)
#		define	_C7      CRD1_1
#		define	_C7_CHAN CRD1_CHAN
#		define	_C7_VECT CRD1_1_VECT
#		define	_C7_SIOA CRD1_1_SIOA
#	else
#		define	_C8      (CRD1_1 & ~CARD_2ND)
#		define	_C8_CHAN CRD1_CHAN
#		define	_C8_VECT CRD1_1_VECT
#		define	_C8_SIOA CRD1_1_SIOA
#	endif
#endif

#ifdef CRD0_0
extern crd0_init();
#endif
#ifdef CRD3_0
extern crd3_init();
#endif
#ifdef CRD5_0
extern crd5_init();
#endif
#ifdef CRD7_0
extern crd7_init();
#endif
#ifdef CRD1_0
extern crd1_init();
#endif

#define	INIT_DESC(C_TYPE, C_VECT, C_SIOA, C_DMA, C_INIT) { \
	C_TYPE,		/* Card type */ \
	C_DMA,		/* Dma channel */ \
	C_VECT,		/* int number */ \
	C_SIOA+0,	/* start addr */ \
	C_SIOA+1,	/* reset addr */ \
	C_SIOA+2,	/* int ack addr */ \
	C_SIOA+3,	/* int addr */ \
	C_INIT,		/* init routine */ \
}

#define	INIT_NONE()	INIT_DESC(NONE_TYPE, 0, 0, -1, 0)

struct card_desc card_descs[NUNIT] = {
	INIT_NONE(), /* i386 */
#ifdef _C1
	INIT_DESC(_C1, _C1_VECT, _C1_SIOA, 0, crd0_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C1 */
#ifdef _C2
	INIT_DESC(_C2, _C2_VECT, _C2_SIOA, 0, crd0_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C2 */
#ifdef _C3
	INIT_DESC(_C3, _C3_VECT, _C3_SIOA, _C3_CHAN, crd3_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C3 */
#ifdef _C4
	INIT_DESC(_C4, _C4_VECT, _C4_SIOA, _C4_CHAN, crd3_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C4 */
#ifdef _C5
	INIT_DESC(_C5, _C5_VECT, _C5_SIOA, _C5_CHAN, _C5_INIT),
#else
	INIT_NONE(), /* not present */
#endif /* _C5 */
#ifdef _C6
	INIT_DESC(_C6, _C6_VECT, _C6_SIOA, _C6_CHAN, _C6_INIT),
#else
	INIT_NONE(), /* not present */
#endif /* _C6 */
#ifdef _C7
	INIT_DESC(_C7, _C7_VECT, _C7_SIOA, _C7_CHAN, crd1_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C7 */
#ifdef _C8
	INIT_DESC(_C8, _C8_VECT, _C8_SIOA, _C8_CHAN, crd1_init),
#else
	INIT_NONE(), /* not present */
#endif /* _C8 */
};