Network 4 Transporter ROM Explained
Page Index
This is a disassembly of Network 4 Transporter ROM Explained
Interview with Tony Peppin - January 31, 2025. Provided by vtgearhead.
It all starts with Michael Freeman.
I first met Michael at a local Radio Shack store. I was acquainted with the store manager. I don't know if you remember it, but I had a KIM 1, computer on a board. It had a four character display and a hex keypad built on the board with several ports on the side, including an RS-232 port and a teletype milliamp loop port. From a salvage yard, I bought a Navy surplus Friden Flexowriter, with a built in paper tape reader/punch. I was attempting to build an interface between my KIM 1 and this teletype want-to-be. (The Flexowriter was 90 volt DC parallel and I was trying to talk to it through a 5 volt parallel port in the KIM. I actually succeeded, sort of. I would output the first character to type, the Flexowriter would type it, the Flexowriter would pull so much power out of the household current that it would reset the KIM.) While I was getting the parts I needed, the store manager spotted Michael and called him over. Michael was trying to learn about computers and the manager figured that I could help him. He was right. Michael and I hit it off really well.
Shortly after that, Radio Shack introduced their TRS-80 model I. Both Michael and I put in orders for one. There was a demo model of the unit that was making its way up and down the Pacific coast. It was going to be at the Tacoma Mall for two days before heading south to Portland. The manager arranged for Michael and I to play with it. And play with it, we did. The Mall Radio Shack manager let us stay in the store long after the Mall closed. (It was at that time that I created a five line program that would shift the display mode from 64x16 to 32x16 creating double sized letters, display the word "DAMN!" on each line, and then freeze the computer so that it had to be powered cycled to recover. Ah, good times...)
When the TRS-80 model I expansion interface went on the market, I received serial number 78. Michael discovered the joy of having a pink pearl eraser when you had an expansion interface. (The connector would corrode if exposed to higher humidity. A pink pearl would clean off the corrosion and allow the expansion interface to actually work again.) Eventually, floppy disks became available for the TRS-80 model I. We of course got some. I had one, and Michael got two. He could easily copy diskettes, I had to flip back and forth between diskettes. Eventually, the TRS-80 model III came out, and of course, we acquired some of those too.
It begins.....
Michael worked for his father in the family owned business. He was a gofer/troubleshooter/jack of all trades. In his spare time, he consulted small businesses about computer issues and needs, pushing of course TRS-80s. As a troubleshooter, he traveled far and near. Somehow he was contacted, or he contacted someone at Corvus. They had built their Corvus drives for Apple and were wanting to expand their market to TRS-80s. They had come up with an interface for a TRS-80, but they were having problems with software. They were not TRSDOS people and did not really have an understanding of how it worked. And let's face it, TRSDOS, with all its overlays and secret handshakes, was really an operating system for a minicomputer, not a microcomputer. Michael told them that he could not really help them, but his friend could do it easily. (Did I ever mention that Michael could lie with a straight face?) Corvus "loaned" Michael two 20 meg hard drives and gave him the instructions needed to access the drive through the interface. It wasn't easy, but I was able to cram the disk I/O routines into available memory space and patch the object code. Imagine the difference between a 55K floppy and a 20 megabyte hard drive. A floppy drive was still needed to bootstrap the hard drive since we could not change the TRS-80 boot ROM. Corvus ended up with the software to interface to a TRS-80 for the simple cost of two hard drives.
It grows.....
Corvus had this big idea: Let us share a single hard drive with multiple computers! We will simply expand the number of stations on this flat cable! It worked with the software. They started marketing the idea. The FCC then told Corvus, uh-uhh. You may not sell that big antenna that interferes with radios, even if it does allow a bunch of computers to talk to each other. That's when Corvus came up with Omninet. A networking idea based upon RS-422. It wasn't long until Corvus came a knocking at Michael's door asking for a little favor. The actual coding necessary for using Omninet was very similar to direct accessing the hard drive, so it was just the work of a couple of hours to modify my changes to work with the networking hardware. Michael began to expand his consulting work to include the sharing of a hard drive with several different computers.
As I mentioned before, Michael traveled far and near as a trouble shooter for his family's company. On some of these trips he would mix in a consulting gig as well as trouble shooting the family's business' products. In one case, (I think it was in California) working with a local Radio Shack Store, he demonstrated to a school district a ten computer and one Corvus drive Omninet setup. Tandy's Education Division was also demonstrating to that school district an example of Network 3. I don't know if you have ever seen a Network 4 network up and running, but from what you said in your last email, you have seen how "speedy" a Network 3 network is. The RS-422 runs at 4 meg, so it is slightly slower than half a standard ethernet. Network 3 runs at 9600 bps. Michael's demo of 10 computers was up and running before Network 3 finished booting the first workstation. The actual accessing of data from the Corvus drive was comparable to the speed of accessing the data from an attached floppy disk.
Two weeks later, Tandy's Education Division contacted Michael to ask if he could help them develop what became Network 4. Michael and I became partners in a business he called FPS, Freeman Pepin Services. Tandy gave us a printout of the source code of TRSDOS and supplied us with some hardware. When they found out that we had plans to burn EPROMs that would allow direct booting off of the Corvus, they were shocked and became very accommodating. Are you familiar with TRS-80 Model IV? It looks almost identical to the TRS-80 Model III. However, the newer versions have a slightly different ROM from the older models. If the Model IV has the Omninet module installed, if you power up or reset the computer while holding down the '4' key on the attached 10-key pad, the Model IV will attempt to use the server (which can be either a Corvus drive or a TRS-80 with an attached hard drive running my custom server code) to boot. The software will allow 64 stations (including the server) to co-exist on a single network. The server is address zero. During the final debugging session in Fort Worth before Tandy started selling Network 4, we actually had 64 computers running in this large room. It took less than 5 minutes to boot all of them, and a lot of that time was us running around resetting the computers.
Network 4 was only marketed by the Education Division and not the rest of Tandy. It never got the traction it deserved. Tandy moved away from the TRS-80 design and migrated to the IBM PC types such as the Tandy 1000 or the Tandy 3000. What no one seemed to notice is that the Tandy 1000 also had an Omninet module available and had drivers to access (or to be) the server. If Corvus had only gone to ethernet instead of RS-422 ... *sigh*
I remember having a long discussion with one of the Education Division engineers, educating him on what a server-based network could do. We talked about a modem server as well as many other server oriented modules. Alas, while he got excited by the possibilities, he was never able to get any of his management to understand.
Equates
Network 4 (Omninet) Ports
| OMSB | EQU 0D3H | ; MSB of Omninet Address Pointer |
| OLSB | EQU 0D1H | ; LSB of Omninet Adddress Pointer |
| OSTROB | EQU 0D2H | ; Omninet Strobe Port |
| OMOUT | EQU 0D0H | ; Output with Auto Increment |
| OMIN | EQU 0D2H | ; Input without Auto Increment |
| OMINPL | EQU 0D0H | ; Input With Auto Increment |
| OMSTAT | EQU 0D3H | ; Transporter Status |
Equates for Hard Disk Ports
| HSTAT | EQU 0CFH | ; Status Register |
| HCOMND | EQU 0CFH | ; Command Register |
| HDRIVE | EQU 0CEH | ; Size/Drive/Head Register |
| HCYLHI | EQU 0CDH | ; Cylinder High Byte |
| HCYLLO | EQU 0CCH | ; Cylinder Low Byte |
| HSECT | EQU 0CBH | ; Sector Number |
| HDATA | EQU 0C8H | ; Data Register |
| HCNTL | EQU 0C1H | ; Control Register |
Equates for Misc Other Items
| DISPIT | EQU 021BH | ; ROM Display line routine |
| OMBUFF | EQU 7A00H | ; Read Buffer |
| BUFMSB | EQU 7AH | ; MSB of the OMBUFF Address |
Disassembly
If we are here, then the station address is not 63 and this is not the server. With this, we must read (across the network) the bootstrap pointer sector (sector 0 of drive 1 at the server) to get the boot code volume for THIS station, then get the location of the boot volume from the volume table, and then load the object code found at that location and jump to it. So let's start ...
Now have Volume Number of our Boot Code. Next we must get the Volume Entry for Start Address ...
"GETV2" - At this point H = the Sector Offset and L = Buffer offset.
"BOOT0" - We know where the Boot Code is so BOOT!
Load file format error!
GETBYT" - Returns the next byte from the disk drive reading the buffer when necessary
"OREAD" - Omninet Read Routine: BC = Buffer Address; DE = Record Number Wanted.
Transporter is now formatted the way we want it, so issue the read. Remember that A is still zero.
Now retrieve the read record.
Let's just stick a random variable right in the middle of the code for some reason.
Reset the transporter socket
Transporter now reset, but before continuing, Let's wait for a random amount of time.
"STROBE" - Issue an omninet command in zero page with Register A containing the address within the page.
"OMWAIT" - Look at an address in zero page (specified in "A") and waits for it to become something other than 255.
"WAITR" - This routine delays APX 4 seconds to protect against rapid resets. This routine counts from 1 to 65536 32 times.
"SERVR" - This is the Hard Drive Server Boot Routine, to run on systems which ARE the server.
The ROM author comments the new 6 instructions as "Now do some nice self-modifying code".
"HDREAD" - Now let's read drive 0, head 0, of the hard drive. BC is the BUFFER and DE is the Logical Sector
This code divides HL by 32 which will then be the cylinder
Now that HL has the cylinder, we need the track.
Logical seek now done! Do the read.