hcj@lzaz.ATT.COM (HC Johnson) (01/04/89)
This is a 4 part posting of the files and changes to add rs232 and midi drivers to minix-st. The component parts are: rs232.shar, the all new rs232 files rs232diff.shar, cdif of files changed to support rs232 and midi midi.shar, the all new midi files cu.shar. a user terminal emulator like that on unix. This may be only a binary depending on other factors. midi need not be installed to use rs232. the major minor for rs232 is determined by your fs/table.c on my system its major 8 minor 0. (always minor 0, or you'll panic). the rs232 inode must be named tty1. rs232 will support login. -- change /etc/ttys to add the line , 101. You will find out how SLOW minix can be when you start interacting with rs232. Howard Johnson ATT-BL lzaz!hcj This is rs232diff.shar, the rs232 cdif files for adding rs232 and midi to minix-st. ============================================================== echo extracting 'rs232.cdif' sed -e 's/^X//' >rs232.cdif <<'SHAR_EOF' X*** /az1/hcj/minix.src/src/kernel/Makefile Sat Oct 29 11:50:08 1988 X--- kernel/Makefile Sat Dec 24 06:48:04 1988 X*************** X*** 7,19 **** X X OBJ = stmpx.o stmain.o proc.o system.o stshadow.o \ X tty.o clock.o memory.o stdma.o stfloppy.o stwini.o \ X stcon.o stkbd.o stvdu.o stfnt.o stprint.o \ X table.o stdmp.o X HDR = ../h/callnr.h ../h/com.h ../h/const.h ../h/error.h \ X ../h/sgtty.h ../h/signal.h ../h/type.h \ X const.h glo.h proc.h tty.h type.h \ X stacia.h staddr.h stdma.h stfdc.h sthdc.h stmfp.h \ X! stram.h stsound.h stvideo.h X ALL = kernel.mix X X all: $(ALL) X--- 7,21 ---- X X OBJ = stmpx.o stmain.o proc.o system.o stshadow.o \ X tty.o clock.o memory.o stdma.o stfloppy.o stwini.o \ X+ rstty.o miditty.o \ X+ bmsclock.o midis.o midi.o rs232.o rs232s.o \ X stcon.o stkbd.o stvdu.o stfnt.o stprint.o \ X table.o stdmp.o X HDR = ../h/callnr.h ../h/com.h ../h/const.h ../h/error.h \ X ../h/sgtty.h ../h/signal.h ../h/type.h \ X const.h glo.h proc.h tty.h type.h \ X stacia.h staddr.h stdma.h stfdc.h sthdc.h stmfp.h \ X! stram.h stsound.h stvideo.h ring.h X ALL = kernel.mix X X all: $(ALL) X*************** X*** 32,36 **** X--- 34,44 ---- X X stmpx.o: stmpx.s X $(CC) -c $(CFLAGS) stmpx.s X+ X+ midis.o: midis.s X+ $(CC) -c $(CFLAGS) midis.s X+ X+ rs232s.o: rs232s.s X+ $(CC) -c $(CFLAGS) rs232s.s X X $(OBJ): $(HDR) X*** /az1/hcj/minix.src/src/kernel/stacia.h Sat Oct 29 11:49:41 1988 X--- kernel/stacia.h Wed Nov 23 17:40:22 1988 X*************** X*** 47,50 **** X X /* values for the ST: */ X #define KBD_INIT (A_81N|A_Q64) X! #define MDI_INIT (A_81N|A_Q16) X--- 47,50 ---- X X /* values for the ST: */ X #define KBD_INIT (A_81N|A_Q64) X! #define MDI_INIT (A_RXINT|A_TXPOL|A_81N|A_Q16) X*** /az1/hcj/minix.src/src/kernel/stcon.c Sat Oct 29 11:49:42 1988 X--- kernel/stcon.c Wed Dec 28 16:34:34 1988 X*************** X*** 4,9 **** X--- 4,10 ---- X */ X #define DEBDMP /* dump system tables */ X #define DEBOUT /* debugging on console and/or printer */ X+ #define DBG_RS232 X X #include "../h/const.h" X #include "../h/type.h" X*************** X*** 57,62 **** X--- 58,77 ---- X case 5: /* PF5: ON/OFF printer debugging */ X STusePrt ^= 1; return; X #endif X+ #ifdef DBG_RS232 X+ case 7: X+ rstty_dmp(); X+ rs232_dmp(); return; X+ #ifdef NONO X+ case 8: /* PF8: special */ X+ tty_dmp(); return; X+ #endif X+ X+ case 9: /* PF9: special */ X+ miditty_dmp(); X+ midi_dmp(); return; X+ #endif X+ X case 10: /* PF10: issue SIGKILL */ X sigchar(&tty_struct[CONSOLE], SIGKILL); return; X } X*** /az1/hcj/minix.src/src/kernel/stdmp.c Sat Oct 29 11:49:44 1988 X--- kernel/stdmp.c Wed Dec 28 07:17:57 1988 X*************** X*** 30,39 **** X vir_clicks base, limit, first, last; X phys_bytes ltmp, dst; X int index; X extern phys_bytes umap(); X X printf( X! "\nproc pid pc sp splow flag user sys base limit recv command\n"); X X dst = umap(proc_addr(SYSTASK), D, (vir_bytes)nbuff, (vir_bytes)NSIZE); X X--- 30,41 ---- X vir_clicks base, limit, first, last; X phys_bytes ltmp, dst; X int index; X+ int i; X+ char *cp; X extern phys_bytes umap(); X X printf( X! "\r\nproc pid pc sp splow flag user sys base limit recv command\n"); X X dst = umap(proc_addr(SYSTASK), D, (vir_bytes)nbuff, (vir_bytes)NSIZE); X X*************** X*** 45,50 **** X--- 47,53 ---- X base = (vir_clicks) (ltmp/1024L); X ltmp = (((long) last << CLICK_SHIFT) + 512L); X limit = (vir_clicks) (ltmp/1024L); X+ printf("\r"); X prname((int)(rp - proc)); X printf(" %4d %6X %6X %6X %4x %5D %6D %3dK %3dK ", X rp->p_pid, (long)rp->p_pcpsw.pc, X*************** X*** 64,72 **** X for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++) X if (*np <= ' ' || *np >= 0177) *np = 0; X if (index == LOW_USER + 1) X! printf("/bin/sh"); X else X! printf("%s", nbuff); X } X printf("\n"); X } X--- 67,81 ---- X for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++) X if (*np <= ' ' || *np >= 0177) *np = 0; X if (index == LOW_USER + 1) X! cp = "/bin/sh"; X else X! cp = nbuff; X! for(i=0;i<100;i++) X! if(cp[i] == '\0') X! break; X! if(i > 8) X! printf("\n\r\t"); X! printf("%s", cp); X } X printf("\n"); X } X*************** X*** 121,127 **** X } X X X! char *nayme[]= {"PRINTR", "TTY ", "WINCHE", "FLOPPY", "RAMDSK", "CLOCK ", X "SYS ", "HARDWR", "MM ", "FS ", "INIT "}; X prname(i) X int i; X--- 130,140 ---- X } X X X! char *nayme[]= { X! "MIDI ", X! "RS232 ", X! "BMSCLK", X! "PRINTR", "TTY ", "WINCHE", "FLOPPY", "RAMDSK", "CLOCK ", X "SYS ", "HARDWR", "MM ", "FS ", "INIT "}; X prname(i) X int i; X*** /az1/hcj/minix.src/src/kernel/stmain.c Sat Oct 29 11:49:50 1988 X--- kernel/stmain.c Tue Nov 29 18:03:21 1988 X*************** X*** 1,3 **** X--- 1,4 ---- X+ X #ifdef ATARI_ST X /* This file contains the main program of MINIX for the Atari ST. X * The routine main() initializes the system and starts the ball X*************** X*** 249,266 **** X *===========================================================================*/ X PUBLIC aciaint() X { X if (KBD->ac_cs & A_IRQ) X kbdint(); X if (MDI->ac_cs & A_IRQ) X mdiint(); X } X X /*===========================================================================* X * temporary stuff * X *===========================================================================*/ X timint(t) {fake_int("timint", t);} X! siaint(t) {fake_int("siaint", t);} X! mdiint(t) {fake_int("mdiint", t);} X iob(t) {fake_int("iob", t);} X X fake_int(s, t) char *s; { X--- 250,270 ---- X *===========================================================================*/ X PUBLIC aciaint() X { X+ MFP->mf_ierb &= ~IB_AINT; X+ do { X if (KBD->ac_cs & A_IRQ) X kbdint(); X if (MDI->ac_cs & A_IRQ) X mdiint(); X+ } while ((MFP->mf_gpip & IO_AINT)==0); X+ MFP->mf_ierb |= IB_AINT; X } X X /*===========================================================================* X * temporary stuff * X *===========================================================================*/ X timint(t) {fake_int("timint", t);} X! xmdiint(t) {fake_int("mdiint", MDI->ac_da);} X iob(t) {fake_int("iob", t);} X X fake_int(s, t) char *s; { X*** /az1/hcj/minix.src/src/kernel/stvdu.c Sat Oct 29 11:49:57 1988 X--- kernel/stvdu.c Tue Dec 6 14:11:21 1988 X*************** X*** 720,725 **** X--- 720,728 ---- X } X } X X+ PRIVATE noop() X+ {} X+ X /*===========================================================================* X * vduinit * X *===========================================================================*/ X*************** X*** 728,733 **** X--- 731,739 ---- X register struct vduinfo *v = &vduinfo; X X tty_struct[CONSOLE].tty_start = start; X+ tty_struct[CONSOLE].tty_open = noop; X+ tty_struct[CONSOLE].tty_close = noop; X+ tty_struct[CONSOLE].tty_ioctl = noop; X tty_struct[CONSOLE].tty_echo = echo; X if (VIDEO->vd_res & RES_HIGH) { X v->mono = 1; X*** /az1/hcj/minix.src/src/kernel/table.c Sat Oct 29 11:50:03 1988 X--- kernel/table.c Wed Dec 28 04:24:58 1988 X*************** X*** 33,45 **** X #include "proc.h" X X extern int sys_task(), clock_task(), mem_task(), floppy_task(), X! winchester_task(), tty_task(), printer_task(); X X /* The startup routine of each task is given below, from -NR_TASKS upwards. X * The order of the names here MUST agree with the numerical values assigned to X * the tasks in ../h/com.h. X */ X int (*task[NR_TASKS+INIT_PROC_NR+1])() = { X printer_task, tty_task, winchester_task, floppy_task, mem_task, X clock_task, sys_task, 0, 0, 0, 0 X }; X--- 33,49 ---- X #include "proc.h" X X extern int sys_task(), clock_task(), mem_task(), floppy_task(), X! winchester_task(), tty_task(), printer_task(), X! midi_task(), rs232_task(), bmsclock_task(); X X /* The startup routine of each task is given below, from -NR_TASKS upwards. X * The order of the names here MUST agree with the numerical values assigned to X * the tasks in ../h/com.h. X */ X int (*task[NR_TASKS+INIT_PROC_NR+1])() = { X+ midi_task, X+ rs232_task, X+ bmsclock_task, X printer_task, tty_task, winchester_task, floppy_task, mem_task, X clock_task, sys_task, 0, 0, 0, 0 X }; X*** /az1/hcj/minix.src/src/kernel/tty.h Sat Oct 29 11:50:06 1988 X--- kernel/tty.h Sat Dec 24 15:53:04 1988 X*************** X*** 1,10 **** X #define NR_TTYS 1 /* how many terminals can system handle */ X #define CONSOLE 0 /* line number for console */ X #define OPERATOR (-1) /* handle CTRL-ALT-PFX sequences */ X X! #define TTY_IN_BYTES 200 /* input queue size */ X #define TAB_SIZE 8 /* distance between tabs */ X #define TAB_MASK 07 /* mask for tty_column when tabbing */ X #define MAX_OVERRUN 16 /* size of overrun input buffer */ X X #define ERASE_CHAR '\b' /* default erase character */ X--- 1,16 ---- X #define NR_TTYS 1 /* how many terminals can system handle */ X+ #define NR_RS232 1 /* how many rs232 ports can system handle */ X+ #define NR_MIDI 1 /* how many midi ports can system handle */ X #define CONSOLE 0 /* line number for console */ X+ #define COM0 0 /* line number for rs232 */ X+ #define MIDI0 0 /* line number for midi */ X+ X #define OPERATOR (-1) /* handle CTRL-ALT-PFX sequences */ X X! #define TTY_IN_BYTES 200 /* 200 input queue size */ X #define TAB_SIZE 8 /* distance between tabs */ X #define TAB_MASK 07 /* mask for tty_column when tabbing */ X+ X #define MAX_OVERRUN 16 /* size of overrun input buffer */ X X #define ERASE_CHAR '\b' /* default erase character */ X*************** X*** 28,33 **** X--- 34,44 ---- X int (*tty_start)(); /* routine to start device output */ X int (*tty_echo)(); /* echo character and flush output */ X X+ /* Open/Close section. */ X+ int (*tty_open)(); /* device specific open */ X+ int (*tty_close)(); /* device specific close */ X+ int (*tty_ioctl)(); /* device specific ioctl */ X+ X /* Terminal parameters and status. */ X int tty_mode; /* terminal mode set by IOCTL */ X char tty_escaped; /* 1 when '\' just seen, else 0 */ X*************** X*** 55,60 **** X--- 66,72 ---- X int tty_outleft; /* # chars yet to be copied to tty_outqueue */ X int tty_cum; /* # chars copied to tty_outqueue so far */ X int tty_pgrp; /* Slot number of controlling process */ X+ char tty_baud; /* index of baud (rs232) */ X }; X X /* Values for the fields. */ X*** /az1/hcj/minix.src/src/fs/table.c Sat Oct 29 11:47:02 1988 X--- fs/table.c Wed Dec 28 04:26:03 1988 X*************** X*** 124,130 **** X no_call, rw_dev, no_call, WINCHESTER, /* 3 = /dev/hd0 */ X tty_open, rw_dev, no_call, TTY, /* 4 = /dev/tty0 */ X no_call, rw_dev2, no_call, TTY, /* 5 = /dev/tty */ X! no_call, rw_dev, no_call, PRINTER /* 6 = /dev/lp */ X }; X X int max_major = sizeof(dmap)/sizeof(struct dmap); X--- 124,133 ---- X no_call, rw_dev, no_call, WINCHESTER, /* 3 = /dev/hd0 */ X tty_open, rw_dev, no_call, TTY, /* 4 = /dev/tty0 */ X no_call, rw_dev2, no_call, TTY, /* 5 = /dev/tty */ X! no_call, rw_dev, no_call, PRINTER, /* 6 = /dev/lp */ X! no_call, rw_dev, no_call, BMSCLOCK, /* 7 = /dev/bms */ X! tty_open, rw_dev, no_call, RS232, /* 8 = /dev/com0 */ X! no_call, rw_dev, no_call, MIDI, /* 9 = /dev/midi */ X }; X X int max_major = sizeof(dmap)/sizeof(struct dmap); X*** /az1/hcj/minix.src/src/h/com.h Sat Oct 29 11:49:02 1988 X--- h/com.h Thu Dec 29 04:00:07 1988 X*************** X*** 21,26 **** X--- 21,27 ---- X # define SYS_FRESH 10 /* fcn code for sys_fresh() */ X #endif X # define SYS_KILL 11 /* fcn code for sys_kill(proc, sig) */ X+ # define SYS_TRACE 12 /* fcn code for sys_trace(req,pid,addr,data) */ X X #define CLOCK -3 /* clock class */ X # define SET_ALARM 1 /* fcn code to CLOCK, set up alarm */ X*************** X*** 50,57 **** X--- 51,84 ---- X # define TTY_WRITE 4 /* fcn code for writing to tty */ X # define TTY_IOCTL 5 /* fcn code for ioctl */ X # define TTY_SETPGRP 6 /* fcn code for setpgrp */ X+ # define TTY_OPEN 7 /* fcn code for open */ X+ # define TTY_CLOSE 8 /* fcn code for close */ X # define SUSPEND -998 /* used in interrupts when tty has no data */ X X+ #define BMSCLOCK -9 /* clock on BMS 100 */ X+ # define BMS_READ 3 X+ # define BMS_WRITE 4 X+ X+ #define RS232 -10 /* serial port */ X+ # define RS232_CHAR_INT 1 /* fcn code for tty input interrupt */ X+ # define RS232_O_DONE 2 /* fcn code for tty output done */ X+ # define RS232_READ 3 /* fcn code for reading from tty */ X+ # define RS232_WRITE 4 /* fcn code for writing to tty */ X+ # define RS232_IOCTL 5 /* fcn code for ioctl */ X+ # define RS232_SETPGRP 6 /* fcn code for setpgrp */ X+ # define RS232_OPEN 7 /* fcn code for open */ X+ # define RS232_CLOSE 8 /* fcn code for close */ X+ X+ #define MIDI -11 /* midi port */ X+ # define MIDI_CHAR_INT 1 /* fcn code for tty input interrupt */ X+ # define MIDI_O_DONE 2 /* fcn code for tty output done */ X+ # define MIDI_READ 3 /* fcn code for reading from tty */ X+ # define MIDI_WRITE 4 /* fcn code for writing to tty */ X+ # define MIDI_IOCTL 5 /* fcn code for ioctl */ X+ # define MIDI_SETPGRP 6 /* fcn code for setpgrp */ X+ # define MIDI_OPEN 7 /* fcn code for open */ X+ # define MIDI_CLOSE 8 /* fcn code for close */ X+ X /* Names of message fields for messages to CLOCK task. */ X #define DELTA_TICKS m6_l1 /* alarm interval in clock ticks */ X #define FUNC_TO_CALL m6_f1 /* pointer to function to call */ X*************** X*** 102,104 **** X--- 129,142 ---- X #define MEM_PTR m1_p1 /* tells where memory map is for sys_newmap */ X #define CANCEL 0 /* general request to force a task to cancel */ X #define SIG_MAP m1_i2 /* used by kernel for passing signal bit map */ X+ X+ /* do_ioctl in fs/device.c needs to know who to do ioctl for X+ * this is an unfortunate hack. HCJ X+ * These numbers are the major numbers in fs/table.c X+ */ X+ X+ #define DEV_WINI 3 X+ #define DEV_TTY 4 X+ #define DEV_TTY0 5 X+ #define DEV_RS232 8 X+ #define DEV_MIDI 9 X*** /az1/hcj/minix.src/src/h/const.h Sat Oct 29 11:49:03 1988 X--- h/const.h Fri Dec 16 15:48:03 1988 X*************** X*** 22,29 **** X #define MAJOR 8 /* major device = (dev>>MAJOR) & 0377 */ X #define MINOR 0 /* minor device = (dev>>MINOR) & 0377 */ X X! #define NR_TASKS 8 /* number of tasks in the transfer vector */ X! #define NR_PROCS 16 /* number of slots in proc table */ X #define NR_SEGS 3 /* # segments per process */ X #define T 0 /* proc[i].mem_map[T] is for text */ X #define D 1 /* proc[i].mem_map[D] is for data */ X--- 22,29 ---- X #define MAJOR 8 /* major device = (dev>>MAJOR) & 0377 */ X #define MINOR 0 /* minor device = (dev>>MINOR) & 0377 */ X X! #define NR_TASKS 11 /* number of tasks in the transfer vector */ X! #define NR_PROCS 17 /* number of slots in proc table */ X #define NR_SEGS 3 /* # segments per process */ X #define T 0 /* proc[i].mem_map[T] is for text */ X #define D 1 /* proc[i].mem_map[D] is for data */ X*************** X*** 64,70 **** X #define NO_NUM 0x8000 /* used as numerical argument to panic() */ X #define MAX_PATH 128 /* max length of path names */ X #define SIG_PUSH_BYTES 8 /* how many bytes pushed by signal */ X! #define MAX_ISTACK_BYTES 1024 /* maximum initial stack size for EXEC */ X X /* Device numbers of root (RAM) and boot (fd0) devices. */ X #define ROOT_DEV (dev_nr) 256 /* major-minor device number of root dev */ X--- 64,70 ---- X #define NO_NUM 0x8000 /* used as numerical argument to panic() */ X #define MAX_PATH 128 /* max length of path names */ X #define SIG_PUSH_BYTES 8 /* how many bytes pushed by signal */ X! #define MAX_ISTACK_BYTES 2048 /* maximum initial stack size for EXEC */ X X /* Device numbers of root (RAM) and boot (fd0) devices. */ X #define ROOT_DEV (dev_nr) 256 /* major-minor device number of root dev */ X*** /az1/hcj/minix.src/src/h/sgtty.h Sat Oct 29 11:49:04 1988 X--- h/sgtty.h Wed Dec 28 05:06:36 1988 X*************** X*** 18,31 **** X }; X X /* Field names */ X! #define XTABS 0006000 /* do tab expansion */ X #define RAW 0000040 /* enable raw mode */ X #define CRMOD 0000020 /* map lf to cr + lf */ X #define ECHO 0000010 /* echo input */ X #define CBREAK 0000002 /* enable cbreak mode */ X #define COOKED 0000000 /* neither CBREAK nor RAW */ X X #define TIOCGETP (('t'<<8) | 8) X #define TIOCSETP (('t'<<8) | 9) X #define TIOCGETC (('t'<<8) | 18) X #define TIOCSETC (('t'<<8) | 17) X--- 18,77 ---- X }; X X /* Field names */ X! /* every one thinks XTABS is 06000 but only 1 bit is needed: X! */ X! #define XTABS 0004000 /* do tab expansion */ X #define RAW 0000040 /* enable raw mode */ X+ #define IN_CANON 0001000 /* when off, no special processing on input */ X+ /* the VEOF is how many inchars to wakeup on*/ X #define CRMOD 0000020 /* map lf to cr + lf */ X+ /* the following is a magic cookie, the same name and value with termio.h */ X #define ECHO 0000010 /* echo input */ X #define CBREAK 0000002 /* enable cbreak mode */ X #define COOKED 0000000 /* neither CBREAK nor RAW */ X+ /* when IN_CANON is OFF, then we will interpret additional bits for special X+ * processing X+ */ X+ #define SPECIAL_0 0000040 X+ #define SPECIAL_1 0000100 X X #define TIOCGETP (('t'<<8) | 8) X #define TIOCSETP (('t'<<8) | 9) X #define TIOCGETC (('t'<<8) | 18) X #define TIOCSETC (('t'<<8) | 17) X+ #define TIOCSTART (('t'<<8) | 1) X+ #define TIOCSTOP (('t'<<8) | 2) X+ X+ /* Baud rates for rs232 */ X+ #define B19200 0 X+ #define B9600 1 X+ #define B4800 2 X+ #define B3600 3 X+ #define B2400 4 X+ #define B2000 5 X+ #define B1800 6 X+ #define B1200 7 X+ #define B600 8 X+ #define B300 9 X+ #define B200 10 X+ #define B150 11 X+ #define B134 12 X+ #define B110 13 X+ #define B75 14 X+ #define B50 15 X+ X+ X+ /* these ioctls for rs232 taken from termio.h */ X+ #ifndef TCGETA X+ X+ #define TC_RS232 ('T'<<8) X+ #define TCGETA (TC_RS232|1) X+ #define TCSETA (TC_RS232|2) X+ #define TCSETAW (TC_RS232|3) X+ #define TCSETAF (TC_RS232|4) X+ #define TCSBRK (TC_RS232|5) X+ #define TCXONC (TC_RS232|6) X+ #define TCFLSH (TC_RS232|7) X+ #define TCDSET (TC_RS232|32) X+ #endif X+ SHAR_EOF