Path: utzoo!attcan!uunet!mailrus!ncar!boulder!stan!dancer!imp From: imp@dancer.Solbourne.COM (Warner Losh) Newsgroups: comp.sys.dec.micro Subject: Re: Rainbow EchoMail Digest Message-ID: <1990Aug2.172219.20528@Solbourne.COM> Date: 2 Aug 90 17:22:19 GMT References: <9008021236.AA25983@remote.dccs.upenn.edu> Sender: news@Solbourne.COM Organization: Solbourne Computers Inc. Lines: 65 >Subject: "RABIT" >From: CHRIS RYAN > >What is "RABIT", who has it, where is it, what does it do, why use >it??? RABIT is a really small program (about 450 bytes last I looked) that is a TSR that lets you run Turbo products on the Rainbow. It plays some unholy games with the interrupts to get things to work right. A more detailed explaination is at the end of the article. >I seem to infer that it has a function similar to Code Blue. YES/NO? Yes and no. It does a very very small amount of work. Code Blue, on the other hand, does a great deal of work to make sure that the Rainbow is acting like a PC. >I guess some description of what it is & HOW to use it is what I am >really asking for. How to use it is simple, just run RABIT and it will start being smart about how INT 18 is handled. As you may know, INT 18 on the Rainbow is used to talk to the hardware. If you want a character from the keyboard, you issue an INT 18. If you want to write to the screen, same thing. Now then, INT 18 on a PC is used for ROM Basic, or at least was a long time ago. Now it is an unused interrupt. So, for some reason Boreland needed to establish an INT 18 handler for its compilers (Turbo C, Turbo C++). I have no clue what that interface looks like, all I know is that when they establish its INT 18 handler, the Rainbow freaks out. Interrupts OFF message. So, in the past George Theall has been providing patches to Turbo C that will allow it to run on the Rainbow. These patches worked great, but had the drawback of being very tied to a particular version of Turbo. When I got my Turbo C++, I started to do the patches, but I soon found that it would be a huge task. There didn't seem to be any calls to INT 18, but just patching the places where it set and reset the vectors didn't work. So, I came up with RABIT (aka RBINT18). RABIT is in late beta right now and will be released just as soon as all of the "known problems" are worked out somehow. What Rabit (Rainbow Address Based Interrupt Trapper) does is to trap all INT 18 calls. When it gets an INT 18 call, it checks the code segment that it was called from. If it was called from where RABIT was installed or lower in memory, then it calls the INT 18 routine that was there when RABIT started. If it was called from the ROM area, then it calls the INT 18 that was present on startup. Otherwise it calls the INT 18 that the program has established. Now there is one known problem with this scheme that I need to work out. If the program executing is running under Code Blue and the interrupt handler was installed before code blue was started, then if the program in questions messes around with INT 18, you will have a crash. Rabit gets confused in this case. To solve this, I was thinking about making it just a normal program that ran, established its interrupt traps and the forked its command line (or some well know command followed by its command line). Ideas, comments, suggestions are welcome. If you are willing to live with the "restrictions" in the program now, send me email, or give me a call at (303)678-4748 (w), and I'll see what I can do about getting you a copy. Expect a formal release soon. Warner imp@Solboune.COM -- Warner Losh imp@Solbourne.COM