V10/630/src/pcbs.c
#define PCBSZ 20
#define STKSZ 100
#define MSTK 1024
#define ISTKSZ 64
#define RESETSZ 256
#define EXCEP_TAB_SIZE 32
#define EXCEP_PSW 0x281e100
extern int excep_norm(); /* exception handlers */
extern int excep_proc();
extern int excep_stack();
extern int excep_int();
extern int _start,key_int,host_int,out_int,msvid_int,pioh_int,piol_int;
int istack[ISTKSZ]; /* interrupt stack */
int ststk[RESETSZ]; /* reset exception stack */
int procstk[STKSZ]; /* process exception stack */
int stackstk[STKSZ]; /* stack exception stack */
int hoststk[STKSZ]; /* host input handler stack */
int outstk[STKSZ]; /* host output handler stack */
int piohstk[STKSZ]; /* pioh stack */
int keystk[STKSZ]; /* keyboard interrupt handler stack */
int msvidstk[STKSZ]; /* mouse-video interrupt stack */
int piolstk[STKSZ]; /* piol stack */
int strstk[STKSZ]; /* stray interrupt handler stack */
int mainstk[MSTK]; /* stack for user program */
/* 4K bytes is default. User .text, .data and */
/* .bss follow this, so if it is reduced, it */
/* will leave more room for user sections - */
/* just change definition of MSTK and rebuild */
/* jpcbs.c */
/* bss, gets loaded after the following .data stuff */
int proc_pcb[PCBSZ]={ /* process exceptions and interrupt exceptions */
0x281e180,
(int)excep_proc,
(int)procstk,
0x281e100,
(int)excep_proc,
(int)procstk,
(int)procstk,
(int)&procstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};
int stack_pcb[PCBSZ]={ /* stack exceptions */
0x281e180,
(int)excep_stack,
(int)stackstk,
0x281e100,
(int)excep_stack,
(int)stackstk,
(int)stackstk,
(int)&stackstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};
int host_pcb[PCBSZ]={ /* RS-232 input interrupts */
0x281e180,
(int)&host_int,
(int)hoststk,
0x281e100,
(int)&host_int,
(int)hoststk,
(int)hoststk,
(int)&hoststk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0, 0,
};
int out_pcb[PCBSZ]={ /* RS-232 output interrupts */
0x281e180,
(int)&out_int,
(int)outstk,
0x281e100,
(int)&out_int,
(int)outstk,
(int)outstk,
(int)&outstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0, 0,
};
int pioh_pcb[PCBSZ]={ /* parallel interface, high priority */
0x281e180,
(int)&pioh_int,
(int)piohstk,
0x281e100,
(int)&pioh_int,
(int)piohstk,
(int)piohstk,
(int)&piohstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};
int key_pcb[PCBSZ]={ /* keyboard interrupts */
0x281e180,
(int)&key_int,
(int)keystk,
0x281e100,
(int)&key_int,
(int)keystk,
(int)keystk,
(int)&keystk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0, 0,
};
int msvid_pcb[PCBSZ]={ /* mouse buttons and 60Hz vertical retrace */
0x281c180,
(int)&msvid_int,
(int)msvidstk,
0x281c100,
(int)&msvid_int,
(int)msvidstk,
(int)msvidstk,
(int)&msvidstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0, 0,
};
int piol_pcb[PCBSZ]={ /* parallel interface, low priority */
0x281e180,
(int)&piol_int,
(int)piolstk,
0x281e100,
(int)&piol_int,
(int)piolstk,
(int)piolstk,
(int)&piolstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};
int int_pcb[PCBSZ]={ /* stray interrupts */
0x281e180,
(int)excep_int,
(int)strstk,
0x281e100,
(int)excep_int,
(int)strstk,
(int)strstk,
(int)&strstk[STKSZ-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};
int excep_tab[EXCEP_TAB_SIZE] = { /* This could be done just as */
/* copies to save rom space exceptab[2] and mult */
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm,
EXCEP_PSW,(int)excep_norm, EXCEP_PSW, (int)excep_norm
};
int main_pcb[PCBSZ]={ /* muxterm itself (short-lived) */
0x281e180,
(int)&_start,
(int)mainstk,
0x281e100,
(int)&_start,
(int)mainstk,
(int)mainstk,
(int)&mainstk[MSTK-1],
0,0,0,0, 0,0,0,0, 0,0,0,0,
};