Gleaned from various Ithaca documents and source code. Herb Johnson Feb 5 2013 General description of DPS starup the Ithaca intersystems boot process, starts with a 1K ROM at address zero. It reads in the first two tracks with this format for the first bytes of the first sector track zero: - word address to load to - word address to run - byte for start sector track 0 - byte for end sector track 0 - byte for start sector track 1 - byte for end sector track 1 A single density diskette has two boot tracks (zero and one), double density has only one boot track. It consists of a CP/M CCP, BDOS, and BIOS all ready to run from where it is loaded. On those boot tracks is what's called "the tiny BIOS" the "tiny BIOS" is sufficient to load in the file ISTARTUP.COM, which replaces the BIOS in upper memory. The ASM source for the tiny BIOS is PICO.SRC or TBIOS.SRC. I've also seen a listing called "BOOT.SRC". The ASM source for ISTARTUP.COM is SBIOS.SRC. A more advanced BIOS is XBIOS.SRC. Apparently a limited version of an assembler is provided "free", and it's known as IASM or ASMBIOS Apparently a general Z80 assembler was extra cost from Ithaca. Startup procedure: You need a diskette with the boot tracks and ISTARTUP.COM. "Press the RUN button" - that's a startup if you don't have a full front panel of switches and lights. On the terminal press "return" or "enter" several times. Eventually a CP/M 2.2 prompt will appear. Error messages from the tiny BIOS are two-characters. ISTARTUP BIOS provides more elaborate errors. On a running CP/M system, the program SET.COM will accept user inputs and change ISTARTUP.COM to change the operation of the system. IFORMAT in a running system will format or copy a diskette. It can copy only the boot tracks? Diskette I acquired from John King ---------------------------------- On the first sector, the first bytes I see are 9F2F DW 02F9FH ;load rest of tracks here C148 DW 048C1H ;run loaded code here 0023 DB 00H,023H ;read sectors 0-35D of track 0? 0104 DB 01H,04H ;read sectors 1-4 of track 1? (I think this is broken.) On a single-density disk there are 26 sectors of 128 bytes. So one track has 3328 bytes, two has 6656. Sure enough, on the two-track dump I created from a single-density boot disk, the code runs from 0 to 6655 decimal bytes. I see a BIOS jump table, looking backwards, at...5760. For the tracks I read, the jumps begin at F2CC, F2CC, F358, etc. etc. It's a very small BIOS. It probably starts at F200. Diskettes from my collection ---------------------------- I found I had two sets of SSSD diskettes, each a set of copies from what was likely an original Ithaca master disk. The boot tracks seem to contain the same CP/M (CCP and BDOS hex dumps match) and even the same "BIOS" (Tiny BIOS). I used a hex reader to visually compare, and later to do a binary compare. They seem to have different versions of the ISTARTUP and other BIOS's. Track 0 sector 1 on either looks like this: 80 DB 00 F2 01 1A 01 1A 00 00 00 00 ..... 00 So, load address = DB80H Start address = F200H read track 0 = sector 0 to 26 decimal sectors read track 1 = sectir 0 to 26 decimal sectors The code at sector 2, must be the BDOS. It appears to refer to jumps to DCXXH. So a load address at DB80H makes a lot of sense, that puts the BDOS at DC00H. A start address of F200H, would be a cold or warm start to the BIOS, near the top end of the boot tracks. The BIOS jump table is easy to find, a bunch of C3 XX XX jumps. C3 CC F2 C3 CC F2 C3 58 F3 C3 3C F3 C3 47 F3 ..and they are jumps to F2XX and F3XX addresses. So the start of the BIOS table must be at F200, and that "Start at" will be a cold-start. Presumably that executes the CP/M command line instruction at the start of CCP which is; 08 49 53 54 41 52 54 55 50 [08]ISTARTUP 8 bytes to call and run "ISTARTUP.COM", to load in the larger BIOS. Again, a visual comparison of both sets of boot tracks, and both BIOS areas, appear to match byte for byte. I started to do a disassembly of the BIOS code using a Zilog based Z80 disassembler Then I saw that the TBIOS.SRC file in the Ithaca disks had these instructions: mvi a,00100111B ; Enable STrans, reciv, normal op. out ASPort+3 in ASPort+3 ; check for 2651 existance cpi 00100111b jrnz usartx mvi a,01001110B ; 8 bits, no parity. out ASPort+2 Then I realized these are TDL type Z80 mnemonics! The Zilog equivalents would be LD A,'''' OUT (03H),A IN A,(03H) CP '''' JR NZ,0F317H LD A,'N' OUT (02H),A So I had to use another disassembler...!!