Date: Thu, 7 Jan 93 04:30:15 PST From: Advanced Amateur Radio Networking Group <tcp-group@ucsd.edu> Errors-To: TCP-Group-Errors@UCSD.Edu Reply-To: TCP-Group@UCSD.Edu Precedence: Bulk Subject: TCP-Group Digest V93 #7 To: tcp-group-digest TCP-Group Digest Thu, 7 Jan 93 Volume 93 : Issue 7 Today's Topics: CPU ID test code (4 msgs) CPU ID test update DPMI mode Echo systems forwarding ax.25 bulletins via smtp Message CC's and SNR... (3 msgs) New version of NOS! XSPAWN.... Revisited and fixed Send Replies or notes for publication to: <TCP-Group@UCSD.Edu>. Subscription requests to <TCP-Group-REQUEST@UCSD.Edu>. Problems you can't solve otherwise to brian@ucsd.edu. Archives of past issues of the TCP-Group Digest are available (by FTP only) from UCSD.Edu in directory "mailarchives". We trust that readers are intelligent enough to realize that all text herein consists of personal comments and does not represent the official policies or positions of any party. Your mileage may vary. So there. ---------------------------------------------------------------------- Date: Wed, 6 Jan 93 16:19:29 PST From: "Jerzy Tarasiuk" <JT@zfja-gate.fuw.edu.pl> Subject: CPU ID test code To: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) > Date: Wed, 6 Jan 1993 5:07:20 -0500 (EST) > Message-Id: <930106050720.33ab@ids.net> > > I am trying to put something together that will allow identifying the > type of CPU on the fly. Below is a debug script to make a 161 byte > COM file that, when run, should tell you whether you have an 8088, a > 80286, or an 80386/80486. It isn't very sophisticated, but it should > serve the purposes of NOS. I would appreciate anyone who wants to try > it doing so and letting me know what happens; I am especially interested > to know what it thinks of NEC V20 CPUs and similarly oddball things. Hello, Mike I remember I had source (probably result of disassembly, with comments added by me) of program able to distinguish 8088/8086/V20/80188/80186/ 80286 (possibly also other Vx0; no ability to distinguish 80286 from 80386 and better CPU-s, it is quite old program wrote in 1987 or so), and I wrote own program to check bus size (to distinguish 80386SX from 80386; I remember no one of my colleages was able to understand what way the program works, but result was always correct...) and CPU. I will look at your, the disassembled and my code, compare methods used and send you some info about it. What CPU-s need distinguish, is bus size meaningful (8088 vs 8086, 80386 vs 80386 SX, etc.) ? 73's, JT ------------------------------ Date: Wed, 6 Jan 1993 14:04:15 -0500 (EST) From: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) Subject: CPU ID test code To: JT@zfja-gate.fuw.edu.pl, tcp-group@ucsd.edu Well, don't waste your time disassembling that thing. I will send you the source code if you like. The only reason it did not go out with source was that it would have been embarrassing if the program bombed. :-) If it goes into NOS, it will obviously have the source released. I can't see any reason to bother in NOS with distinguishing among the 8-bit processors (8088/8086/V20/V30/etc.). I know how to do that, but it doesn't seem worth it. I also can't see any benefit in NOS to distinguishing the 80386DX and 80386SX from each other, although I would be interested in your code to do that. The only way I ever found to tell them apart was by the different prefetch queue lengths, and that requires self-modifying code. The objectives I had were: -- Distinguish three classes of CPU: 8-bit (8088/8086/V20/V30/etc.), 16-bit (80286), and 32-bit (80386SX/80386DX/80486SX/80486DX). -- Make no use of undocumented features of the chips or operating system. (Distinguishing between the 8088/8086 and the V20/V30 depends on the REP MOVS bug being present in the 8088/8086.) -- Do nothing that could result in an exception or protected mode trap (such as attempting to execute an illegal opcode). -- Mike Bilow, <mikebw@ids.net> (Internet) P.S. I have the real source to that 1987 program you are looking at from disassembly. I'll mail it if I can find it. ------------------------------ Date: Wed, 06 Jan 93 23:06:53 MST From: rnielsen@tapr.ampr.org (Bob Nielsen) Subject: CPU ID test code To: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) Now if there was a way that I could use the ID to make NOS work with my old 8 bit Compaq, that would be something. I think it must be a bios-related thing, but it always hangs up as soon as it gets the net> prompt. I have received several suggestions, but none of them seem to work (NET, on the other hand, works like a champ.) Bob Bob Nielsen W6SWE ax.25: w6swe@wb7tpy.az.usa.na Internet: rnielsen@tapr.ampr.org amateur IP: 44.124.12.16 CIS: 71540,2364 ------------------------------ Date: Thu, 7 Jan 93 10:29:17 PST From: "Jerzy Tarasiuk" <JT@zfja-gate.fuw.edu.pl> Subject: CPU ID test code To: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) > Date: Wed, 6 Jan 1993 14:04:15 -0500 (EST) > From: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) > Message-Id: <930106140415.36e2@ids.net> > Subject: Re: CPU ID test code > > Well, don't waste your time disassembling that thing. I will send you The CPUID I disassembled 4 years ago. You program: disassembling took less time than making a .COM file: DEBUG doesn't like LF-s, especially it didn't recognize <LF> Q as Q and I needed press Alt-Ctrl-Del. > I can't see any reason to bother in NOS with distinguishing among the > 8-bit processors (8088/8086/V20/V30/etc.). I know how to do that, but > it doesn't seem worth it. I also can't see any benefit in NOS to > distinguishing the 80386DX and 80386SX from each other, although I > would be interested in your code to do that. The only way I ever found > to tell them apart was by the different prefetch queue lengths, and > that requires self-modifying code. I used almost same way: check prefetch, but not queue length (can be different for different CPU-s and not necessarily directly related to bus size) but amount of bytes read a time: 8-bit CPU read single bytes, 16-bit - words, and 32-bit - doublewords (if CPU needs to put address on address lines to read opcode, it utilizes full bus size). > -- Make no use of undocumented features of the chips or operating > system. (Distinguishing between the 8088/8086 and the V20/V30 > depends on the REP MOVS bug being present in the 8088/8086.) I suppose can distinguish 8088/6 from V20/30 and 80188/6 from V40/50 by instruction set - the NEC CPU-s have some extra opcodes. But for 80188/6 can get illegal instruction trap. For 80286 vs. V60 cannot use this way if program is executed in protected mode - cannot catch the trap. I don't remember what are the NEC-only opcode (instructions like LOOPC/LOOPNC, as I remember) and don't have NEC databook here now. > P.S. I have the real source to that 1987 program you are looking at > from disassembly. I'll mail it if I can find it. Fact, the source you sent seems to be the same program. > Date: Wed, 6 Jan 1993 22:17:03 -0500 (EST) > From: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) > Message-Id: <930106221703.3a86@ids.net> > Subject: CPU ID test update > > I have now received confirmation that my little CPU ID test program > correctly detects: 8088, 80286, and 80486DX. I would still like to > have someone confirm it on the 80386 (DX and SX), and the V20. Any > testing on really weird stuff, like the 8086 or 80186, would be nice, > if it's not too much trouble. I checked it on Intel 8088, 80286, 80386DX, 80486DX, NEC V20. And can ask one of my friends to check on 80386SX. I don't know if anyone here has 80486SX (is such an animal at all ?). > By the way, I received a couple of private mail suggestions that I > look at the code in some of the later versions of NOS that sets the > "isat" flag automatically, the am_i_an_AT() function in PC.C. First, > I wrote that routine. Second, all that routine does is look at the > machine ID byte in the system BIOS ROM. This works fine for what it > does in NOS, which is decide wether the high resolution timers are > available and whether high numbered IRQs are allowed, but cannot tell > the difference among non-XT machines (80286 vs. 80486DX, for example). Some care should be taken using the machine ID byte. Some old XT-s have random data there (and accidentally it can be same as AT ID). Other way AT can be distinguished: DMA channel 0 is used for memory refresh on XT and not on AT or better - read count or address register several times and check if it changes (note need disable interrupts and read twice 8 bits to get both low and high byte; on XT at least one of these bytes will change every 18us, on AT they are stable). High resolution timer: can reprogram 8259 channel 0 from mode 3 (Square Wawe Rate Generator) to mode 2 (Rate Generator), this works OK (at least worked OK on every computer I tried); no need to bother about distinguishing AT or reading 8254 status register. CPUID (you probably know it well, but idea of detecting CPU bugs may be interesting, note there is known bug in 80386 32-bit multiply): 80286/8 - first on which push SP pushes old SP 80186/8 - first on which SHL AL,CL with AL=0xFF,CL=0x21 doesn't set ZF V20/30 - REPZ SEGES LODSB (initial CX=0xFFFF) executed completely 8/16 bit recognized by prefetch queue length - >6 => 16-bit NDP check: FNINIT; JMP; FNSTCW cw; JMP; JMP; CMP Hi(cw),3; NZ => no NDP 8087/287: FDISI; FSTCW cw; TEST cw,1 SHL 7; Z => 80287, NZ => 8087 (distinguish by interrupt disable flag set by FDISI) Errors detected: INT 1 after POP SS possible - need replace CPU BIOS don't know about NDP - need flip SW1-2 My CKCPU (nothing interesting): I tried to use code PUSH CS; SIDT [BP-8] - the SIDT is decoded by 8088/188 as POP CS; ADD [BP-8],CX. From 80188 POP CS is illegal opcode, this allows to distinguish 8088, 80188, 80286 (or better). 80286/386 can be distinguished by LOCK RET - illegal on 80386. (but use of the illegal opcode trap isn't good method). Your program checks setting/clearing FLAGS bits (I know this method but didn't knew it 4 years ago when was writing my program). Probably it is enough to try set NT bit (1 SHL 14) and check value of bits 15 and 14: 11-8088/188, 00-80286, 01-80386/486. Don't forget to restore original NT on 80386 - or it can cause problems with multitasking. Example program may be: PUSH CX; PUSHF; POP AX; PUSH AX; AND AH,7Fh; PUSH AX; XOR AH,40h; PUSH AX; POPF; PUSHF; POP AX; POP CX; POPF; MOV CL,0Eh; SHR AX,CL; SHR CX,CL; XOR AL,CL; POP CX. Result: 2 for 8088 or V20, 0 for 80286, 1 for 80386 or 80486. (can SUB AL,2; SBB AL,0; INC AX; AND AL,3; to get 1/2/3) 73's, JT ------------------------------ Date: Wed, 6 Jan 1993 22:17:03 -0500 (EST) From: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) Subject: CPU ID test update To: tcp-group@ucsd.edu I have now received confirmation that my little CPU ID test program correctly detects: 8088, 80286, and 80486DX. I would still like to have someone confirm it on the 80386 (DX and SX), and the V20. Any testing on really weird stuff, like the 8086 or 80186, would be nice, if it's not too much trouble. By the way, I received a couple of private mail suggestions that I look at the code in some of the later versions of NOS that sets the "isat" flag automatically, the am_i_an_AT() function in PC.C. First, I wrote that routine. Second, all that routine does is look at the machine ID byte in the system BIOS ROM. This works fine for what it does in NOS, which is decide wether the high resolution timers are available and whether high numbered IRQs are allowed, but cannot tell the difference among non-XT machines (80286 vs. 80486DX, for example). The test program I sent out yesterday directly manipulates the CPU, and should be fairly reliable. -- Mike Bilow, <mikebw@ids.net> (Internet) ------------------------------ Date: Wed, 6 Jan 93 18:36:50 PST From: "Roy Engehausen (8-457-2712)" <enge@almaden.ibm.com> Subject: DPMI mode To: TCP-GROUP@UCSD.EDU I have started playing with Turbo Pascal's DPMI mode. This puts the computer into 286 mode and allows use of more than 640K. In addition, overlay management is all automatic. I converted 95% of my BBS program to it and it is real neat. Now the $64,000 question for the NOS people. Borland C++ 3.1 has DPMI support also. Anybody experimenting with it yet? This could solve the NOS constraints that everybody has been complaining about. Roy, AA4RE ------------------------------ Date: Wed, 6 Jan 93 16:15:35 MST From: Larsen Karl VAL-C 678-3145 <klarsen@wsmr-emh73.army.mil> Subject: Echo systems To: tcp-group@ucsd.edu I am a sysop of a Fido Net bbs and we have about 200 "echo" areas we can run. Internet is said to have no less than 10,000 echos and this is one of them. Over the past year I have asked several questions and received many direct repies with help. This is not in itself bad but it does defeat the main use of echos. As a teacher, when a student asks a question I drop everything and answer that question from as many ways as possible. This is because if a student asks a question, 99% of the class SHOULD have asked the same question. So when I ask if anyone has ever got nos working with a 3 com 505 card, I expect many answers. I also expect that others on this echo are looking for the same answers... 73, karl k5di@k5di.nm.usa.na ------------------------------ Date: Wed, 6 Jan 93 12:46:47 EST From: crompton@NADC.NAVY.MIL (D. Crompton) Subject: forwarding ax.25 bulletins via smtp To: nos-bbs@hydra.carleton.ca Jack, This gets right back to the 'smtp gateway yourself' argument! Here is how I do it (from memory) smtp gateway myself in rewrite --- *@wa3tsw* bbstsw in forward.bbs --- wa3tsw ax25 wa3tsw - or whatever wa3tsw bbstsw --------- This is obviously a very simplified picture of my files. WA3TSW is a full service BBS (not NOS) that I routinely send and receive messages from. Users on my system or connected to my system can send mail to a user on his system with the send line 'SP w3xxx@wa3tsw.bbs' the suffix .bbs can be anything - the complete '.epa.usa.na' or whatever. It does not matter since his system does not care and the rewrite with the trailing '*' will take anything. Another example of areas is: in rewrite ---- qst@arl* ARL_QST in alias ---- ARL_QST arl_qst !arl_qst An area call arl_qst is setup. An incoming bbs sends mail to match qst@arl. It is rewritten to ARL_QST. Alias then sends it to the arl_qst mailbox locally and to NNTP locally. I have MANY entries in my rewrite file to satisfy all of the possible combinations. The last entry being a catch all so that I can find things I missed! USERS that use ME as a server set there 'smtp gateway' to ME. Therefore if they enter mail to xxx@wa3tsw.bbs or anything else that is not locally resolved it comes to me and goes thru my rewrite/alias rules. I can act as both an SMTP and BBS mailserver in this way. BBS's send mail to my system which is then usually POP'ed via TCP or in the case of bulletin areas mostly NNTP'ed. The argument has been to either keep the servers job simple and let the user enter some complicated xxx%xxx@xxx.xxx.xxx or some simplified name that is resolved at a server. I opted for the later because if you make things to complicated for the users they won't use it. Not that they are dumb or incapable but more because of laziness! It's human nature. The other gotcha that you have to be careful of is sending large distributions via alias to BBS's. If your alias has.. ALL w3eee@w3eee.ampr.org w3rrr w3ttt@w3ttt etc. It will fail because BBS mail can only have one address and what will happen is that the 'to' address to w3rrr (a bbs) will be the w3eee@w3eee. ampr.org address (actually it will be the LAST address in the group it gets scanned backwards). The quick answer is to use the forward.bbs to forced the proper address. in forward.bbs ---- w3rrr ax25 w3rrr w3rrr w3rrr@w3rrr <<< change the 'to' address when sending ----------- So you would need a forward.bbs entry for EACH specific station in this case. Another BBS/SMTP compatability problem. Doug ------------------------------ Date: Wed, 6 Jan 93 8:01:34 CST From: andyw@aspen.cray.com (Andy Warner) Subject: Message CC's and SNR... To: tcp-group@ucsd.edu (TCP Group) Doug wrote:- > I just had a complaint about sending personal mail CC'ed to the > TCP-GROUP. It kinda hit a nerve because first of all many return > addresses appearing on this group are bogus. The only way in many > cases to return info is to send it to the group. > > Actually well before this I was thinking somewhat the opposite. > Many times I send a message that could have broad interest and > I get personal return mail which really would be of interest to > [...] > am sure it is with others. Free flow of information is what it is > all about. If we all had our own private dialogs there would be no > reason for a group to begin with. It was me that sent Doug that note. I have no problem with CC'ing stuff to the group, I only suggested he count to 10 before doing it.. The particular note that pushed me over the edge was :- > Dave, > > I checked UCSD and the last BM is dated July 1991 in the BM directory. > Is this the one you are talking about? > > Doug Which is (without any context) pretty meaningless. This was a bad example for me to pick, since the return address was bogus.. Since I know tcp-group gets a very wide distribution, over some very low-bandwith links, I just thought a little prudence would be a good idea. I know it takes 2 secs to read it & delete it, but it takes a lot longer to deliver it sometimes.. So, please, everyone, CC to the group where appropriate, but just ask yourself if it passes that test first. -- andyw. (N0REN/G1XRL) andyw@aspen.cray.com Andy Warner, Cray Research, Inc. (612) 683-5835 ------------------------------ Date: Wed, 6 Jan 93 10:58:15 EST From: Steve Urich <steve@zero.com> Subject: Message CC's and SNR... To: TCP-Group@UCSD.Edu Hello Doug you wrote: > I just had a complaint about sending personal mail CC'ed to the > TCP-GROUP. It kinda hit a nerve because first of all many return > addresses appearing on this group are bogus. The only way in many > cases to return info is to send it to the group. Lets give Doug a break, he's at a .mil site. Everyone thats in the know knows that .mil .gov sites do not handle uucpmaps therefore all those none domain addresses .uucp etc will bounce back. You generally have to have a domain name type address in order for these sites to return mail. If I'm wrong well, sorry no flames please :-) Steve -- |Stephen Urich| Internet:steve@zero.com | "Cattle mutilations | |NIC: SU2 | UUCP:uunet!beyonet!steve | are up!" --Sneakers | |ARS: WB3FTP | Packet:WB3FTP@WB3FTP.#EPA.PA.USA.NOAM | ax25<->PBBS<->IPGATE| |Bensalem, PA |Radio:wb3ftp@wb3ftp.ampr.org[44.80.8.44]| TCP/IP-FTP-SMTP-UNIX| ------------------------------ Date: Wed, 6 Jan 1993 22:00:00 -0500 (EST) From: MIKEBW@ids.net (Mike Bilow, <MIKEBW@ids.net>) Subject: Message CC's and SNR... To: steve@zero.com, tcp-group@ucsd.edu I don't think Brian much minds MIL sites or anyone else using UCSD.EDU as a remailer for TCP Group replies if necessary. I often reason that the original message found to UCSD, so there is a decent chance that UCSD knows how to get the mail back. For example, a site that could not resolve addresses in the UUCP domain might be able to send mail to the UUCP indirectly: steve%beyonet.UUCP@ucsd.edu. -- Mike Bilow, <mikebw@ids.net> (Internet) ------------------------------ Date: Wed, 6 Jan 93 16:46:38 PST From: "Jerzy Tarasiuk" <JT@zfja-gate.fuw.edu.pl> Subject: New version of NOS! To: Phil Karn <karn@unix.ka9q.ampr.org> > Date: Tue, 5 Jan 93 02:14:30 -0800 > From: Phil Karn <karn@unix.ka9q.ampr.org> > Message-Id: <9301051014.AA01805@unix.ka9q.ampr.org> > s930104.zip - ZIP archive of latest versions of sources extracted from RCS > for those without RCS (you'll probably have to hack the makefile > to remove references to the RCS files) For those without RCS: on zfja-gate (148.81.6.100) is RCS55.ZIP (both source and executable for DOS, 387k) in guest login directory - can get it by FTP (or try by mail to listserv@zfja-gate.fuw.edu.pl, but it'll produce over 0.5MB mail file - can it pass through network ?). > 2. I've found another good use for the MD-5 hash function. The FTP > server now supports the experimental XMD5 command. It takes a file > name as an argument and returns the 16-byte MD5 hash value for that > file in hex. The client uses XMD5 to support several nifty new > features: the "compare" and "mcompare" commands, and the "update" > flag. It would be good idea to compare length/date/time of files first, if remote file we want to retrieve is older than local and has same size it is surely same file... (assuming we are retrieving only the file, not putting it on remote server; date/time gives no information if we could both put file on remote server and get it from it in past). > Comments are invited on the behavior of the scrollback feature. For > example, when a screen clear sequence is sent, should the screen be > written into the scrollback file? I don't do this right now, although It can be quite useful when NOS is used for connection to VM host in fullscreen mode - the VM host displays full screen of data and requires user to press CLEAR key, then it sends clear-screen sequence and displays next data. However, I have a program usable in way like TSR which recognizes when VM host wants to send more data, saves screen to a file and sends the CLEAR key code... Was useful for plain text file transfer before our VM (PLEARN.BITNET=plearn.edu.pl) got TCP, FTP... > Well, have at it, and have fun. One question: how much of computer memory it needs now ? 73's, JT ------------------------------ Date: 07 Jan 1993 02:07:14 -0500 (EST) From: "Brian A. Lantz" <BRIANLANTZ@delphi.com> Subject: XSPAWN.... Revisited and fixed To: tcp-group@ucsd.edu Well, after following all of the XSPAWN thread, I figured that I should find out whether XSPAWN was fix-able and, if so, incorporate it into TNOS before the initial release. I pulled the JNOS107b sources off Wednesday afternoon and looked them over tonight. Well (sorry it took so long), here is the fix ;-) (Did that sound as obnoxious as I think it did?) The thread was correct in diagnosing the problem... it was the interrupt vectors blowing the system away. The fix at first seems difficult, but is very simple. NOS only replaces a limited number of regular interrupt vectors. And when any NEW device sets up an IRQ vector, it goes though the setirq() routine. So, only two files need to be modified. XSPAWN provides an addvect() function that does all the dirty work. These have been tested pretty heavily, but only over the course of a few hours. There STILL MIGHT be other problems, BUT, I have XSPAWNed off and started up WINDOWS, to come back and find that all is well! Same with a second incarnation of NOS, Norton Utilities, etc. Seems to work fine, now! Hope this takes care of it! Enjoy! ----------------------------------------------------------------- Modify main.c: Add the following to main() IMMEDIATELY after the local variable declarations so that they are set up FIRST #ifdef XSPAWN /* These vectors WILL be intercepted by NOS in COMMAND.ASM Go ahead and tell XSPAWN to save their current state, now. Vector 0x23 is also used by NOS, but is ALREADY being preserved by the XSPAWN routines */ addvect (8, CURRENT); addvect (0x10, CURRENT); addvect (0x13, CURRENT); addvect (0x1b, CURRENT); addvect (0x21, CURRENT); addvect (0x24, CURRENT); addvect (0x28, CURRENT); #endif ----------------------------------------------------------------- Modify pc.c: The setirq() function needs a few additions. It is included here complete. int setirq(irq,handler) unsigned irq; INTERRUPT (*handler)(); { /* Set interrupt vector */ if(irq < 8){ #ifdef XSPAWN addvect(8+irq, IRET); /* tell XSPAWN to ignore this vector */ #endif setvect(8+irq,handler); } else if(irq < 16){ Isat = 1; #ifdef XSPAWN addvect(0x70 + irq - 8, IRET); /* tell XSPAWN to this one */ #endif setvect(0x70 + irq - 8,handler); } else { return -1; } return 0; } ----------------------------------------------------------------- 73 from Brian A. Lantz KO4KS@KO4KS.#TPAFL.FL.USA.NA 3100813105 Internet: brianlantz@delphi.com Amprnet: ko4ks@ko4ks.ampr.org [44.98.0.167] ------------------------------ End of TCP-Group Digest V93 #7 ****************************** ******************************