|
|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U
Length: 7931 (0x1efb)
Types: TextFile
Notes: Uncompressed file
└─⟦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⟧
#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 */
};