XBR4D75G%DDATHD21.BITNET@cunyvm.cuny.edu (10/11/88)
I have installed all 1.3c patches, I received on EARN/BITNET, and generated a running MINIX system, tested on an XT- and an AT-clone. I created the system by crosscompilation under MSDOS and under MINIX with the 1.1 C-compiler. The extension of buffers recommended by Charles Hedrick improved communication on the rs232-port considerablely. The simple terminal-emulator term.c runs on the XT-clone (8 MHz) with 2400 baud against a VAX 8350 without loosing any characters and the AT-clone (10 MHZ) with 9600 baud. Here are three chages (improvements ?) I would recommend for the official 1.3c: 1.) Depending on the BIOS you are using, it may be possible, that the UART is not completely reset after (warm)-booting. My serial line hang several times when I tried to login on /dev/tty1. The problem was eliminated by clearing the INTERRUPT_ID_REG and the RECEIVER_DATA_REG explicitly before enabling interrupts of the UART in init_rs232(). *** RS232.C Fri Sep 30 19:30:00 1988 --- a:RS232.C Tue Oct 04 16:12:16 1988 *************** *** 455,461 **** { register struct tty_struct *tp; register struct rs_struct *rs; ! int line; for (tp = &tty_struct[NR_CONS]; tp < &tty_struct[NR_CONS+NR_RS_LINES]; tp++) { tp->tty_inhead = tp->tty_inqueue; --- 455,461 ---- { register struct tty_struct *tp; register struct rs_struct *rs; ! int line, dummy; for (tp = &tty_struct[NR_CONS]; tp < &tty_struct[NR_CONS+NR_RS_LINES]; tp++) { tp->tty_inhead = tp->tty_inqueue; *************** *** 486,491 **** --- 486,493 ---- rs->rs_left = 0; rs->rs_busy = FALSE; config_rs232(line, DEF_BAUD, DEF_BAUD, NONE, 1, 8); /* set params */ + port_in(rs->rs_base + RS232_RECEIVER_DATA_REG, &dummy); + port_in(rs->rs_base + RS232_INTERRUPT_ID_REG, &dummy); port_out(rs->rs_base + RS232_MODEM_CONTROL, MODEM_CONTROLS); port_out(rs->rs_base + RS232_INTERRUPTS, RS232_INTERRUPT_CLASSES); } 2.) Using the LINEWRAP-option for console.c in the kernel requires, that in mined line-erasing is done by the escape-sequence insteed of "printing" 80 blanks. The screen scrolls up 2 lines when a status-line is created by the old mined. (I can not explain, why mined requires at least one blank in the clear-line-sequence.) *** a:MINED.H Mon Aug 15 00:02:44 1988 --- MINED.H Fri Oct 07 09:45:32 1988 *************** *** 151,157 **** extern int out_count; /* Index in output buffer */ extern char file_name[LINE_LEN]; /* Name of file in use */ extern char text_buffer[MAX_CHARS]; /* Buffer for modifying text */ ! extern char blank_line[LINE_LEN]; /* Line filled with spaces */ extern char yank_file[]; /* Temp file for buffer */ extern FLAG yank_status; /* Status of yank_file */ --- 151,157 ---- extern int out_count; /* Index in output buffer */ extern char file_name[LINE_LEN]; /* Name of file in use */ extern char text_buffer[MAX_CHARS]; /* Buffer for modifying text */ ! extern char *blank_line; /* String to clear rest of line */ extern char yank_file[]; /* Temp file for buffer */ extern FLAG yank_status; /* Status of yank_file */ *** a:MINED1.C Mon Aug 15 00:10:20 1988 --- MINED1.C Fri Oct 07 10:46:06 1988 *************** *** 1251,1262 **** int out_count; /* Index in output buffer */ char file_name[LINE_LEN]; /* Name of file in use */ char text_buffer[MAX_CHARS]; /* Buffer for modifying text */ - char blank_line[LINE_LEN]; /* Line filled with spaces */ /* Escape sequences. */ #ifdef UNIX char *CE, *VS, *SO, *SE, *CL, *AL, *CM; #else char *enter_string = "\033[H\033[J"; /* String printed on entering mi ned */ char *pos_string = "\033[%d;%dH"; /* Absolute cursor position */ char *rev_scroll = "\033M"; /* String for reverse scrolling */ --- 1251,1262 ---- int out_count; /* Index in output buffer */ char file_name[LINE_LEN]; /* Name of file in use */ char text_buffer[MAX_CHARS]; /* Buffer for modifying text */ /* Escape sequences. */ #ifdef UNIX char *CE, *VS, *SO, *SE, *CL, *AL, *CM; #else + char *blank_line = " \033[K"; /* String to clear rest of line */ char *enter_string = "\033[H\033[J"; /* String printed on entering mi ned */ char *pos_string = "\033[%d;%dH"; /* Absolute cursor position */ char *rev_scroll = "\033M"; /* String for reverse scrolling */ *************** *** 1453,1461 **** tputs(CL, 0, _putchar); #else string_print(enter_string); /* Hello world */ - for (index = 0; index < XMAX; index++) /* Fill blank_line with spaces*/ - blank_line[index] = ' '; - blank_line[XMAX] = '\0'; #endif UNIX if (!isatty(0)) { /* Reading from pipe */ --- 1453,1458 ---- 3.) The new program readclock.c tests, whether it is running on an AT or not. Instead of creating an error message on an XT I incorporated reading time and date from a Multi-I/O card. My base address of the clock-chip is 0x0240, which may by different for other Multi-I/O cards. *** READCLOC.c Fri Oct 07 12:30:00 1988 --- READCLOC.NEW Tue Oct 11 11:01:44 1988 *************** *** 42,47 **** --- 42,55 ---- #define SECOND 0 #define STATUS 0x0b + #define XCLOCK_PORT 0x240 + #define XSECOND 2 + #define XMINUTE 3 + #define XHOUR 4 + #define XDAY 6 + #define XMONTH 7 + #define XYEAR 9 + #define BCD_TO_DEC(x) ( (x>>4) * 10 + (x & 0x0f) ) *************** *** 63,71 **** int i; if ( peek( CPU_TYPE_SEGMENT, CPU_TYPE_OFFSET ) != PC_AT ) { ! printf( "-q\n" ); ! exit( 1 ); ! } for ( i=0; i<10; i++ ) { get_time( &time1 ); --- 71,88 ---- int i; if ( peek( CPU_TYPE_SEGMENT, CPU_TYPE_OFFSET ) != PC_AT ) { ! port_in(XCLOCK_PORT + XSECOND, &time1.second); ! port_in(XCLOCK_PORT + XMINUTE, &time1.minute); ! port_in(XCLOCK_PORT + XHOUR, &time1.hour); ! port_in(XCLOCK_PORT + XDAY, &time1.day); ! port_in(XCLOCK_PORT + XMONTH, &time1.month); ! port_in(XCLOCK_PORT + XYEAR, &time1.year); ! printf( "%02x%02x%02x%02x%02x%02x\n", ! time1.month, time1.day, time1.year, ! time1.hour, time1.minute, time1.second ); ! exit( 0 ); } ! else ! { for ( i=0; i<10; i++ ) { get_time( &time1 ); *************** *** 84,89 **** --- 101,107 ---- exit( 0 ); } } + } printf( "-q\n" ); exit( 1 ); Problems with missing or to many TABS and BLANKS have to be taken into account, because I had to edit many patches by hand. H.-J. Knobloch TH Darmstadt (West-Gemany)