|
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 - download
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 */ };