A number of websites have archived CP/M distributions with the single density Tarbell controller custom BIOS (CBIOS.ASM) and boot (CBOOT.ASM) files. These required minor changes initially and provided a reasonable base for generating subsequent CP/M disks. I started by editing the system tracks of the disk images, then writing the images to physical media using my disk imaging workstation. The BIOS assumed a console output using the MITS 88-2SIO at ports 10h/11h. I needed to change the ports and RDA/TBE values to correspond to my hardware. I also discovered that my drive controller was set up a bit differently than the default Tarbell settings. The controller uses six I/O ports starting (normally) at F8, but my controller wouldn't respond. The controller has a small 82S123 PROM for an initial bootstrap loader that starts at $0000 on a machine reset. Basically, the bootstrap is executed from the PROM and is supposed to load the first sector of the disk.  Hand dump of PROM on Tarbell using the front panel showed that mine was set up to use ports starting at E8, a configuration that was available from Tarbell for the Processor Tech Sol 20, which had an I/O conflict at F8—I think for the video controller. Here's a dump of the ROM: 0000: DB EC AF 6F 67 3C D3 EA 0008: 3E 8C D3 E8 DB EC B7 F2 0010: 19 00 DB EB 77 23 C3 0C 0018: 00 DB E8 B7 CA 7D 00 76  0000 IN  EC ; wait for intrq or drq  0002 XRA A ; sets A to 0  0003 MOV L,A ; set HL=0000  0004 MOV H,A  0005 INR A ; set sector to 1  0006 OUT EA ;  0008 MVI A,8C ; read sector command  000A OUT E8 ; issue command to 1771  000C IN  EC ; wait for intrq or drq  000E ORA A ; set flags  000F JP  0019 ; done if intrq  0012 IN  EB ; read byte from controller  0014 MOV M,A ; store at HL  0015 INX H ; advance one byte  0016 JMP 000C ; read next byte  0019 IN  E8 ; read disk status  001B ORA A ; set flags?  001C JZ  007D ; go to sboot if zero  001F HLT        ; error - halt I could change the controller to use ports starting at F8, but then my boot ROM wouldn't work. The boot ROM has an interesting feature: It asserts itself at address $0000, and so a reset-run will run the code there. Then it reads the cold start loader from the disk into memory at the same address, $0000, in RAM and switches over control. So it's executing the code out of ROM but writing to RAM in the same page. You can disable the boot ROM by examining address $0020 from the front panel. I opted to change the boot disk to use the E8 base I/O ports. I edited the "Tarbell CPM14 Master.dsk" image archived on DeRamp.com. On this image, CP/M is sized for 24K of RAM and assumes an 88-SIO port at 0/1 for console I/O (not 2SIO). I had to search for disk access commands in the boot tracks of the image D3 F8 OUT DCOM ; send command D3 FA OUT SECT ; load sector register D3 FB OUT DDATA ; write a byte DB F8 IN STAT       ; read status byte DB FB IN DDATA ; read byte DB FC IN WAIT       ; Wait for home and replace these with the correct I/O ports. I also had to search for the serial I/O commands to patch them for my Processor Tech serial card. The original image uses port 0 as the status port and port 1 for data. The port numbers are ok, but the input status ready should be 0x40 for my setup. Also, status is ready when high, not low, so I needed to change the conditional jumps and returns in the BIOS to match. Looking for DB 00 commands, I needed to change ANI 01 (E6 01) to ANI 40 (E6 40) for correct status bit and to change from low to high (jnz to jz?) From the disassembled tracks: 5AF0  DB 00   in    $00 5AF2  E6 01   ani   $01 change to E6 40 5AF4  3E 00   mvi   a,$00 5AF6  C0     rnz change to C8 rz and 5AF9  DB 00   in    $00 5AFB  E6 01   ani   $01 change to E6 40 5AFD  C2 F9 5A  jnz   $5AF9 change to CA jz and 5B2A  DB 00   in    $00 5B2C  E6 80   ani   $80 5B2E  C2 2A 5B  jnz   $5B2A change to CA jz I saved this image and using DOSBox and bin2imd, I made an ImageDisk file for writing: bin2imd CPM14.DSK CPM14.IMD N=77 SS=128 DM=0 SM=1-26 I wrote the image successfully to disk using the imaging workstation. Next, I set up the IMSAI and tried to boot the disk. The head loaded and unloaded, but nothing came up on the screen. I reset and tried again, twice, but still nothing. Then I noticed that the monitor was off. When I turned it on, I saw the login messages. Holy cow, it worked! I had booted CP/M 1.4 on the IMSAI 8080. VICTORY! This was about the half-way point until I had all of the glitches out of my CP/M 1.4. Along the way, I had to get drive B up and running and work through a number of other problems. Here's a run-down:
Page listing - "Subpage Listing" |
IMSAI 8080‎ > ‎