Well..... I'm still having trouble with CP/M calling my CBIOS HOME routine and getting it to work. So, I did this test, the last item in my CBIOS is to call BOOT. So I changed that to
LXIB 060 000 (OCTAL) 48 decimal
CALL SETTRK --- this is my CBIOS routine which sets TRACK to the number selected and then asks the FDC to SEEK (my CSEEK command in CBIOS) to that track.
CALL HOME --- this is my CBIOS routine which sets TRACK=0 and then asks the FDC to SEEK (my CSEEK command in CBIOS) to that track.
This works repeatedly, with no errors at all. Yet when CP/M calls HOME, the drive head will advance one track (at least it looks like it does) and everything stops after that.
Looking through the CP/M code, the BOOT will jump to the CCP, which first sets the user number. This works, the function call 32 does what it should and returns. Next there is a function call 13 which resets the disk system. This clears the write protect and login flags, selects A: as ACTIVE and sets the DMA Address to 000 100 (OCTAL). It next calls LOGINDRV, here a routine called SELECT runs, which call my CBIOS SELDSK routine, copies DPBase to BDOS storage, copies DPBlock to BDOS storage, then looks at the disk size in blocks to determine whether the disk is large or small, not sure about this, and returns. This works I have checked that the Parameter block data is transferred to the BDOS storage spots. Next there is a call on zero to a SLCTERR, this routine will print the message 'Bdos Err on Y: Select" error that I some times (not always) get. If the selected drive is not valid this error will occur. So, I figure at times the defined word ACTIVE maybe corrupted at this point. Next, if I get past the Select error, a SETBIT routine is called, which sets bit in BC depending on the slected drive number. This works. Next a routine called BITMAP is called. Here I think the directory is read and the bitmap is the location of the allocated blocks is made. In this routine, there is a call to HOMEDRV, which gets to my CBIOS Home routine. This has never worked. All I can think of is that either the DRIVE number or the TRACK number has been corrupted some how.
My Cold Start Loader uses a bunch of defined bytes and words, that at first I had stored in the WAITIO space of the CBIOS, but I moved them to another spot in memory so they would not or could not be overwritten. The only spots that my CSL uses now is TRACK (@4CE9H 114 351), SECTOR (@4CEBH 114 353), DMAAD (@4CEDH & 4CEDH 114 355 & 114 356), and DISKNO (@4CEFH 114 357). I do wonder what the CDISK at 0004H is for. The BOOT will write a zero here and then jump to GOCPM, but then doesn't update DISKNO. DISKNO will not change until CP/M calls my CBIOS SELDSK during the reset disk system function call. Sorry that I'm a little wordy here, but it's hard to explain otherwise. So far I'm stuck. Mike.