IDE interface for Altair 8800c

Discuss construction, troubleshooting, and operation of the Altair 8800c computer

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 23rd, 2023, 2:46 pm

I spent a little more time yesterday evening, and solved the problem that caused the error that reported, "CP/M Error On @: Read/Only Disk."

To make a long story short, it was trying to initialize the hard disk and I hadn't linked in the IDE module, so no function existed. I should have modified the drive tables to remove the IDE drives if I was going to remove the IDE module. I did that to eliminate a complexity, but now I know you can't remove the device implementation if it exists in the table.

So I went ahead and linked in the IDE3 module and will troubleshoot with that. I linked and ran GENCPM, so I have a new CPM3.SYS file to analyze with SID. As a quick "smoke-test," I tried to boot from diskette and it gave the login message without error. It didn't fully load CP/M - stayed stuck with the A: diskette selected and running - so that's where I'll start debugging.

Here is the debugger output and notes:
Code: Select all
SID CPMLDR.COM
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#L8E00
  8E00  JMP  A888   (boot)
  8E03  JMP  8E6C       (wboot)
  8E06  JMP  8F72       (const)
  8E09  JMP  8F8D       (conin)
  8E0C  JMP  8ED5       (conout)
  8E0F  JMP  8EE1       (list)
  8E12  JMP  8EDB       (auxout)
  8E15  JMP  8F93       (auxin)
  8E18  JMP  A8F6       (home)
  8E1B  JMP  A8C7       (seldsk)
  8E1E  JMP  A8F9       (settrk)
  8E21  JMP  A8FF       (setsec)
  8E24  JMP  A905       (setdma)
  8E27  JMP  A91C       (read)
  8E2A  JMP  A932       (write)
  8E2D  JMP  8F0D       (listst)
  8E30  JMP  A911       (sectrn)
  8E33  JMP  8F01       (conost)
  8E36  JMP  8F78       (auxist)
  8E39  JMP  8F07       (auxost)
  8E3C  JMP  8ECD       (devtbl)
  8E3F  JMP  9104       (devini)
  8E42  JMP  8ED1       (drvtbl)
  8E45  JMP  A953       (multio)
  8E48  JMP  A957       (flush)
  8E4B  JMP  9276       (move)
  8E4E  JMP  9094       (time)
  8E51  JMP  9020       (selmem)
  8E54  JMP  A90D       (setbnk)
  8E57  JMP  9275       (xmove)
  8E5A  JMP  0000       (userf)
  8E5D  JMP  0000       (reserv1)
  8E60  JMP  0000       (reserv2)

#PA8C7                  (seldsk)
#PA8F9                  (settrk)
#PA8FF                  (setsec)
#PA905                  (setdma)
#PA91C                  (read)
#G8E00



CP/M Plus v3.0hd


CP/M Error On @: Read/Only Disk
01 PASS A8C7
 -Z-E- A=00 B=0000 D=0000 H=0000 S=6FDE P=A8C7 MOV  A,C
*A8C8

...so we get this error without ever running any of the functions seldsk, settrk, setsec, setdma or read.


SID CPMLDR.COM
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#P9037             <== init
#G8E00

01 PASS 9037
 --ME- A=00 B=00FF D=9109 H=91D1 S=8ECB P=9037 LXI  H,8000   (dev 0)
*903A
#TW#10
 --ME- A=00 B=00FF D=9109 H=8000 S=8ECB P=903A SHLD 8DBE     (@civec)
 --ME- A=00 B=00FF D=9109 H=8000 S=8ECB P=903D SHLD 8DC0     (@covec)
 --ME- A=00 B=00FF D=9109 H=8000 S=8ECB P=9040 LXI  H,4000   (dev 1)
 --ME- A=00 B=00FF D=9109 H=4000 S=8ECB P=9043 SHLD 8DC6     (@lovec)
 --ME- A=00 B=00FF D=9109 H=4000 S=8ECB P=9046 LXI  H,2000   (dev 2)
 --ME- A=00 B=00FF D=9109 H=2000 S=8ECB P=9049 SHLD 8DC2     (@aivec)
 --ME- A=00 B=00FF D=9109 H=2000 S=8ECB P=904C SHLD 8DC4     (@aovec)
 --ME- A=00 B=00FF D=9109 H=2000 S=8ECB P=904F LXI  H,90ED   (sign-on message)
 --ME- A=00 B=00FF D=9109 H=90ED S=8ECB P=9052 JMP  8FB2     (?pmsg)
 --ME- A=00 B=00FF D=9109 H=90ED S=8ECB P=8FB2 PUSH B
*8FB3
#TW#....
 --ME- A=00 B=00FF D=9109 H=90ED S=8EC9 P=8FB3 PUSH D
 --ME- A=00 B=00FF D=9109 H=90ED S=8EC7 P=8FB4 MOV  A,M
 --ME- A=0D B=00FF D=9109 H=90ED S=8EC7 P=8FB5 ORA  A
 ----- A=0D B=00FF D=9109 H=90ED S=8EC7 P=8FB6 JZ   8FC3     (pmsg$exit)
 ----- A=0D B=00FF D=9109 H=90ED S=8EC7 P=8FB9 MOV  C,A
 ----- A=0D B=000D D=9109 H=90ED S=8EC7 P=8FBA PUSH H
 ----- A=0D B=000D D=9109 H=90ED S=8EC5 P=8FBB CALL 8E0C     (call ?conout)
 -Z-E- A=00 B=010D D=915C H=0000 S=8EC5 P=8FBE POP  H
 -Z-E- A=00 B=010D D=915C H=90ED S=8EC7 P=8FBF INX  H
 -Z-E- A=00 B=010D D=915C H=90EE S=8EC7 P=8FC0 JMP  8FB4

... (print all of the sign-on message)

#TW#10
 -Z-E- A=00 B=010A D=915C H=9103 S=8EC7 P=8FB5 ORA  A
 -Z-E- A=00 B=010A D=915C H=9103 S=8EC7 P=8FB6 JZ   8FC3
 -Z-E- A=00 B=010A D=915C H=9103 S=8EC7 P=8FC3 POP  D
 -Z-E- A=00 B=010A D=9109 H=9103 S=8EC9 P=8FC4 POP  B
 -Z-E- A=00 B=00FF D=9109 H=9103 S=8ECB P=8FC5 RET             <== Done with init
 -Z-E- A=00 B=00FF D=9109 H=9103 S=8ECD P=A899 LXI  B,1000
 -Z-E- A=00 B=1000 D=9109 H=9103 S=8ECD P=A89C LXI  H,927C     (lxi h, @dtbl)
 -Z-E- A=00 B=1000 D=9109 H=927C S=8ECD P=A89F PUSH B          (d$init$loop)
 -Z-E- A=00 B=1000 D=9109 H=927C S=8ECB P=A8A0 MOV  E,M
 -Z-E- A=00 B=1000 D=91A6 H=927C S=8ECB P=A8A1 INX  H
*A8A2
#TW#10
 -Z-E- A=00 B=1000 D=91A6 H=927D S=8ECB P=A8A2 MOV  D,M
 -Z-E- A=00 B=1000 D=92A6 H=927D S=8ECB P=A8A3 INX  H
 -Z-E- A=00 B=1000 D=92A6 H=927E S=8ECB P=A8A4 MOV  A,E
 -Z-E- A=A6 B=1000 D=92A6 H=927E S=8ECB P=A8A5 ORA  D
 --M-- A=B6 B=1000 D=92A6 H=927E S=8ECB P=A8A6 JZ   A8BE       (d$init$next)
 --M-- A=B6 B=1000 D=92A6 H=927E S=8ECB P=A8A9 PUSH H
 --M-- A=B6 B=1000 D=92A6 H=927E S=8EC9 P=A8AA XCHG            (dph addess in HL)
 --M-- A=B6 B=1000 D=927E H=92A6 S=8EC9 P=A8AB DCX  H
 --M-- A=B6 B=1000 D=927E H=92A5 S=8EC9 P=A8AC DCX  H
 --M-- A=B6 B=1000 D=927E H=92A4 S=8EC9 P=A8AD MOV  A,M
*A8AE
#TW#10
 --M-- A=00 B=1000 D=927E H=92A4 S=8EC9 P=A8AE STA  A976        (@RDRV)
 --M-- A=00 B=1000 D=927E H=92A4 S=8EC9 P=A8B1 MOV  A,C
 --M-- A=00 B=1000 D=927E H=92A4 S=8EC9 P=A8B2 STA  A975        (@ADRV)
 --M-- A=00 B=1000 D=927E H=92A4 S=8EC9 P=A8B5 DCX  H
 --M-- A=00 B=1000 D=927E H=92A3 S=8EC9 P=A8B6 MOV  D,M
 --M-- A=00 B=1000 D=937E H=92A3 S=8EC9 P=A8B7 DCX  H
 --M-- A=00 B=1000 D=937E H=92A2 S=8EC9 P=A8B8 MOV  E,M       
 --M-- A=00 B=1000 D=9323 H=92A2 S=8EC9 P=A8B9 XCHG             (drive 0 init pointer)
 --M-- A=00 B=1000 D=92A2 H=9323 S=8EC9 P=A8BA CALL 8FB1        (ipchl - call drive init 0)
 --M-- A=00 B=1000 D=92A2 H=9323 S=8EC9 P=A8BD POP  H
*A8BE
#TW#10
 --M-- A=00 B=1000 D=92A2 H=927E S=8ECB P=A8BE POP  B           (d$init$next)
 --M-- A=00 B=1000 D=92A2 H=927E S=8ECD P=A8BF INR  C
 ----- A=00 B=1001 D=92A2 H=927E S=8ECD P=A8C0 DCR  B
 ---E- A=00 B=0F01 D=92A2 H=927E S=8ECD P=A8C1 JNZ  A89F        (d$init$loop)
 ---E- A=00 B=0F01 D=92A2 H=927E S=8ECD P=A89F PUSH B
 ---E- A=00 B=0F01 D=92A2 H=927E S=8ECB P=A8A0 MOV  E,M
 ---E- A=00 B=0F01 D=92C9 H=927E S=8ECB P=A8A1 INX  H
 ---E- A=00 B=0F01 D=92C9 H=927F S=8ECB P=A8A2 MOV  D,M
 ---E- A=00 B=0F01 D=92C9 H=927F S=8ECB P=A8A3 INX  H
 ---E- A=00 B=0F01 D=92C9 H=9280 S=8ECB P=A8A4 MOV  A,E
*A8A5
#TW#10
 ---E- A=C9 B=0F01 D=92C9 H=9280 S=8ECB P=A8A5 ORA  D
 --ME- A=DB B=0F01 D=92C9 H=9280 S=8ECB P=A8A6 JZ   A8BE
 --ME- A=DB B=0F01 D=92C9 H=9280 S=8ECB P=A8A9 PUSH H
 --ME- A=DB B=0F01 D=92C9 H=9280 S=8EC9 P=A8AA XCHG
 --ME- A=DB B=0F01 D=9280 H=92C9 S=8EC9 P=A8AB DCX  H
 --ME- A=DB B=0F01 D=9280 H=92C8 S=8EC9 P=A8AC DCX  H
 --ME- A=DB B=0F01 D=9280 H=92C7 S=8EC9 P=A8AD MOV  A,M
 --ME- A=01 B=0F01 D=9280 H=92C7 S=8EC9 P=A8AE STA  A976
 --ME- A=01 B=0F01 D=9280 H=92C7 S=8EC9 P=A8B1 MOV  A,C
 --ME- A=01 B=0F01 D=9280 H=92C7 S=8EC9 P=A8B2 STA  A975
*A8B5
#TW#10
 --ME- A=01 B=0F01 D=9280 H=92C7 S=8EC9 P=A8B5 DCX  H
 --ME- A=01 B=0F01 D=9280 H=92C6 S=8EC9 P=A8B6 MOV  D,M
 --ME- A=01 B=0F01 D=9380 H=92C6 S=8EC9 P=A8B7 DCX  H
 --ME- A=01 B=0F01 D=9380 H=92C5 S=8EC9 P=A8B8 MOV  E,M
 --ME- A=01 B=0F01 D=9323 H=92C5 S=8EC9 P=A8B9 XCHG
 --ME- A=01 B=0F01 D=92C5 H=9323 S=8EC9 P=A8BA CALL 8FB1        (ipchl - 1)
 --ME- A=01 B=0F01 D=92C5 H=9323 S=8EC9 P=A8BD POP  H
 --ME- A=01 B=0F01 D=92C5 H=9280 S=8ECB P=A8BE POP  B
 --ME- A=01 B=0F01 D=92C5 H=9280 S=8ECD P=A8BF INR  C
 ----- A=01 B=0F02 D=92C5 H=9280 S=8ECD P=A8C0 DCR  B
*A8C1
#TW#10
 ----I A=01 B=0E02 D=92C5 H=9280 S=8ECD P=A8C1 JNZ  A89F
 ----I A=01 B=0E02 D=92C5 H=9280 S=8ECD P=A89F PUSH B
 ----I A=01 B=0E02 D=92C5 H=9280 S=8ECB P=A8A0 MOV  E,M
 ----I A=01 B=0E02 D=9200 H=9280 S=8ECB P=A8A1 INX  H
 ----I A=01 B=0E02 D=9200 H=9281 S=8ECB P=A8A2 MOV  D,M
 ----I A=01 B=0E02 D=8E00 H=9281 S=8ECB P=A8A3 INX  H
 ----I A=01 B=0E02 D=8E00 H=9282 S=8ECB P=A8A4 MOV  A,E
 ----I A=00 B=0E02 D=8E00 H=9282 S=8ECB P=A8A5 ORA  D
 --ME- A=8E B=0E02 D=8E00 H=9282 S=8ECB P=A8A6 JZ   A8BE
 --ME- A=8E B=0E02 D=8E00 H=9282 S=8ECB P=A8A9 PUSH H
*A8AA
#TW#10
 --ME- A=8E B=0E02 D=8E00 H=9282 S=8EC9 P=A8AA XCHG
 --ME- A=8E B=0E02 D=9282 H=8E00 S=8EC9 P=A8AB DCX  H
 --ME- A=8E B=0E02 D=9282 H=8DFF S=8EC9 P=A8AC DCX  H
 --ME- A=8E B=0E02 D=9282 H=8DFE S=8EC9 P=A8AD MOV  A,M
 --ME- A=06 B=0E02 D=9282 H=8DFE S=8EC9 P=A8AE STA  A976
 --ME- A=06 B=0E02 D=9282 H=8DFE S=8EC9 P=A8B1 MOV  A,C
 --ME- A=02 B=0E02 D=9282 H=8DFE S=8EC9 P=A8B2 STA  A975
 --ME- A=02 B=0E02 D=9282 H=8DFE S=8EC9 P=A8B5 DCX  H
 --ME- A=02 B=0E02 D=9282 H=8DFD S=8EC9 P=A8B6 MOV  D,M
 --ME- A=02B=0E02 D=6F82 H=8DFD S=8EC9 P=A8B7 DCX  H
*A8B8
#TW#10
 --ME- A=02 B=0E02 D=6F82 H=8DFC S=8EC9 P=A8B8 MOV  E,M
 --ME- A=02 B=0E02 D=6F7B H=8DFC S=8EC9 P=A8B9 XCHG
 --ME- A=02 B=0E02 D=8DFC H=6F7B S=8EC9 P=A8BA CALL 8FB1        (ipchl - 2)
CP/M Error On @: Read/Only Disk

...looks like it is hanging here, perhaps because the IDE module isn't loaded.  See the accumulator - Drive 2 is selected - and that's when we get the error.
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 24th, 2023, 11:09 am

After linking IDE3 with the rest of the modules, the dev$dispatch error was gone. I no longer saw the message, "CP/M Error On @: Read/Only Disk."

Next thing I encountered was a hang in ldccp. When I dove deeper into it, what I learned was I had created an endless loop in the disk init function. I had misunderstood what was required of the "init" and "login" functions, and had put a call to select the drive within the login function. But the select function contained in bioskrn3 calls login. So login shouldn't call select.

For now - my first fix for that - was to make null functions for both init and login. Those functions now immediately return. I'll study a little more to learn what needs to happen in those functions and add code to do it in a day or three.

So boot now responds with this:

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

46K TPA

CP/M Plus v3.0hd

BIOS ERR ON A: NO CCP.COM FILE

Once I put something meaningful in the login function, I think it'll finally boot.

Debugging output and troubleshooting notes:
Code: Select all
New build with IDE3 linked in, GENned for topmem=A9:

A>pip a:=b:cpm3.sys

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8600  1E00
 BDOS3    SPR  6700  1F00

 25K TPA

*01A9
#L8600
  8600  JMP  A27D   (boot)
  8603  JMP  866C       (wboot)
  8606  JMP  8772       (const)
  8609  JMP  878D       (conin)
  860C  JMP  86D5       (conout)
  860F  JMP  86E1       (list)
  8612  JMP  86DB       (auxout)
  8615  JMP  8793       (auxin)
  8618  JMP  A2EB       (home)
  861B  JMP  A2BC       (seldsk)
  861E  JMP  A2EE       (settrk)
  8621  JMP  A2F4       (setsec)
  8624  JMP  A2FA       (setdma)
  8627  JMP  A311       (read)
  862A  JMP  A327       (write)
  862D  JMP  870D       (listst)
  8630  JMP  A306       (sectrn)
  8633  JMP  8701       (conost)
  8636  JMP  8778       (auxist)
  8639  JMP  8707       (auxost)
  863C  JMP  86CD       (devtbl)
  863F  JMP  8904       (devini)
  8642  JMP  86D1       (drvtbl)
  8645  JMP  A348       (multio)
  8648  JMP  A34C       (flush)
  864B  JMP  8A76       (move)
  864E  JMP  8894       (time)
  8651  JMP  8820       (selmem)
  8654  JMP  A302       (setbnk)
  8657  JMP  8A75       (xmove)
  865A  JMP  0000       (userf)
  865D  JMP  0000       (reserv1)
  8660  JMP  0000       (reserv2)

#P8663
#G8600


CP/M Plus v3.0hd


01 PASS 8663
 -Z-EI A=00 B=0010 D=0000 H=8A9C S=86CD P=8663 CALL 8678
*8678
#TW#10
 -Z-EI A=00 B=0010 D=0000 H=8A9C S=86CB P=8678 MVI  A,C3
 -Z-EI A=C3 B=0010 D=0000 H=8A9C S=86CB P=867A STA  0000
 -Z-EI A=C3 B=0010 D=0000 H=8A9C S=86CB P=867D STA  0005
 -Z-EI A=C3 B=0010 D=0000 H=8A9C S=86CB P=8680 LXI  H,8603
 -Z-EI A=C3 B=0010 D=0000 H=8603 S=86CB P=8683 SHLD 0001
 -Z-EI A=C3 B=0010 D=0000 H=8603 S=86CB P=8686 LHLD 85FE
 -Z-EI A=C3 B=0010 D=0000 H=6706 S=86CB P=8689 SHLD 0006
 -Z-EI A=C3 B=0010 D=0000 H=6706 S=86CB P=868C RET
 -Z-EI A=C3 B=0010 D=0000 H=6706 S=86CD P=8666 CALL 8860     (?ldccp)

Hang


A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8600  1E00
 BDOS3    SPR  6700  1F00

 25K TPA

*01A9

#P8860                (?ldccp)
#G8600


CP/M Plus v3.0hd


01 PASS 8860
 -Z-EI A=C3 B=0010 D=0000 H=6706 S=86CB P=8860 XRA  A        (?ldccp)
*8861
#TW#10
 -Z-E- A=00 B=0010 D=0000 H=6706 S=86CB P=8861 STA  88D9     (CCP$FCB+15)
 -Z-E- A=00 B=0010 D=0000 H=6706 S=86CB P=8864 LXI  H,0000
 -Z-E- A=00 B=0010 D=0000 H=0000 S=86CB P=8867 SHLD 88EA     (FCB$NR)
 -Z-E- A=00 B=0010 D=0000 H=0000 S=86CB P=886A LXI  D,88CA   (CCP$FCB)
 -Z-E- A=00 B=0010 D=88CA H=0000 S=86CB P=886D CALL 8895     (OPEN)

Hang


A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8600  1E00
 BDOS3    SPR  6700  1F00

 25K TPA

*01A9
#P8895
#G8600


CP/M Plus v3.0hd


01 PASS 8895
 -Z-E- A=00 B=0010 D=88CA H=0000 S=86C9 P=8895 MVI  C,0F     (OPEN)
*8897
#TW#100
 -Z-E- A=00 B=000F D=88CA H=0000 S=86C9 P=8897 JMP  0005     (BDOS)
 -Z-E- A=00 B=000F D=88CA H=0000 S=86C9 P=0005 JMP  6706
 -Z-E- A=00 B=000F D=88CA H=0000 S=86C9 P=6706 XCHG
 -Z-E- A=00 B=000F D=0000 H=88CA S=86C9 P=6707 SHLD 85DB
 -Z-E- A=00 B=000F D=0000 H=88CA S=86C9 P=670A XCHG
 -Z-E- A=00 B=000F D=88CA H=0000 S=86C9 P=670B MOV  A,C
 -Z-E- A=0F B=000F D=88CA H=0000 S=86C9 P=670C STA  85DF
 -Z-E- A=0F B=000F D=88CA H=0000 S=86C9 P=670F CPI  0E
 ----I A=0F B=000F D=88CA H=0000 S=86C9 P=6711 JC   6737
 ----I A=0F B=000F D=88CA H=0000 S=86C9 P=6714 LXI  H,0000
 ----I A=0F B=000F D=88CA H=0000 S=86C9 P=6717 SHLD 83BD
 ----I A=0F B=000F D=88CA H=0000 S=86C9 P=671A LDA  85DA
 ----I A=00 B=000F D=88CA H=0000 S=86C9 P=671D STA  83C6
 ----I A=00 B=000F D=88CA H=0000 S=86C9 P=6720 LDA  85E6
 ----I A=01 B=000F D=88CA H=0000 S=86C9 P=6723 DCR  A
 -Z-EI A=00 B=000F D=88CA H=0000 S=86C9 P=6724 JZ   6737
 -Z-EI A=00 B=000F D=88CA H=0000 S=86C9 P=6737 MOV  A,E
 -Z-EI A=CA B=000F D=88CA H=0000 S=86C9 P=6738 STA  83C3
 -Z-EI A=CA B=000F D=88CA H=0000 S=86C9 P=673B LXI  H,0000
 -Z-EI A=CA B=000F D=88CA H=0000 S=86C9 P=673E SHLD 6E7A
 -Z-EI A=CA B=000F D=88CA H=0000 S=86C9 P=6741 SHLD 85DD
 -Z-EI A=CA B=000F D=88CA H=0000 S=86C9 P=6744 DAD  SP
 -Z-EI A=CA B=000F D=88CA H=86C9 S=86C9 P=6745 SHLD 69CB
 -Z-EI A=CA B=000F D=88CA H=86C9 S=86C9 P=6748 LXI  SP,67EC
 -Z-EI A=CA B=000F D=88CA H=86C9 S=67EC P=674B LXI  H,8364
 -Z-EI A=CA B=000F D=88CA H=8364 S=67EC P=674E PUSH H
 -Z-EI A=CA B=000F D=88CA H=8364 S=67EA P=674F MOV  A,C
 -Z-EI A=0F B=000F D=88CA H=8364 S=67EA P=6750 CPI  33
 C-M-I A=0F B=000F D=88CA H=8364 S=67EA P=6752 JNC  675C
 C-M-I A=0F B=000F D=88CA H=8364 S=67EA P=6755 MOV  C,E
 C-M-I A=0F B=00CA D=88CA H=8364 S=67EA P=6756 LXI  H,67EC
 C-M-I A=0F B=00CA D=88CA H=67EC S=67EA P=6759 JMP  676E
 C-M-I A=0F B=00CA D=88CA H=67EC S=67EA P=676E MOV  E,A
 C-M-I A=0F B=00CA D=880F H=67EC S=67EA P=676F MVI  D,00
 C-M-I A=0F B=00CA D=000F H=67EC S=67EA P=6771 DAD  D
 --M-I A=0F B=00CA D=000F H=67FB S=67EA P=6772 DAD  D
 --M-I A=0F B=00CA D=000F H=680A S=67EA P=6773 MOV  E,M
 --M-I A=0F B=00CA D=0035 H=680A S=67EA P=6774 INX  H
 --M-I A=0F B=00CA D=0035 H=680B S=67EA P=6775 MOV  D,M
 --M-I A=0F B=00CA D=7F35 H=680B S=67EA P=6776 LHLD 85DB
 --M-I A=0F B=00CA D=7F35 H=88CA S=67EA P=6779 XCHG
 --M-I A=0F B=00CA D=88CA H=7F35 S=67EA P=677A PCHL
 --M-I A=0F B=00CA D=88CA H=7F35 S=67EA P=7F35 CALL 7212
 --M-I A=00 B=00CA D=000E H=88D8 S=67EA P=7F38 CALL 7DA5

... we eventually get here and loop forever:

 CZ-E- A=24 B=8A00 D=8AA6 H=8B24 S=67B2 P=8B26 JMP  861B     (jmp ?slDsk)
 CZ-E- A=24 B=8A00 D=8AA6 H=8B24 S=67B2 P=861B JMP  A2BC     (jmp seldsk)
 CZ-E- A=24 B=8A00 D=8AA6 H=8B24 S=67B2 P=A2BC MOV  A,C      (seldsk)
 CZ-E- A=00 B=8A00 D=8AA6 H=8B24 S=67B2 P=A2BD STA  A36A     (@ADRV)
 CZ-E- A=00 B=8A00 D=8AA6 H=8B24 S=67B2 P=A2C0 MOV  L,C
 CZ-E- A=00 B=8A00 D=8AA6 H=8B00 S=67B2 P=A2C1 MVI  H,00
 CZ-E- A=00 B=8A00 D=8AA6 H=0000 S=67B2 P=A2C3 DAD  H
 -Z-E- A=00 B=8A00 D=8AA6 H=0000 S=67B2 P=A2C4 LXI  B,8A7C   (@dtbl)
 -Z-E- A=00 B=8A7C D=8AA6 H=0000 S=67B2 P=A2C7 DAD  B
 -Z-E- A=00 B=8A7C D=8AA6 H=8A7C S=67B2 P=A2C8 MOV  A,M
 -Z-E- A=A6 B=8A7C D=8AA6 H=8A7C S=67B2 P=A2C9 INX  H
 -Z-E- A=A6 B=8A7C D=8AA6 H=8A7D S=67B2 P=A2CA MOV  H,M
 -Z-E- A=A6 B=8A7C D=8AA6 H=8A7D S=67B2 P=A2CB MOV  L,A
 -Z-E- A=A6 B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2CC ORA  H
 --M-- A=AE B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2CD RZ
 --M-- A=AE B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2CE MOV  A,E
 --M-- A=A6 B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2CF ANI  01
 -Z-E- A=00 B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2D1 JNZ  A2EA     (not$first$select)
 -Z-E- A=00 B=8A7C D=8AA6 H=8AA6 S=67B2 P=A2D4 PUSH H
 -Z-E- A=00 B=8A7C D=8AA6 H=8AA6 S=67B0 P=A2D5 XCHG
 -Z-E- A=00 B=8A7C D=8AA6 H=8AA6 S=67B0 P=A2D6 LXI  H,FFFE
 -Z-E- A=00 B=8A7C D=8AA6 H=FFFE S=67B0 P=A2D9 DAD  D
 CZ-E- A=00 B=8A7C D=8AA6 H=8AA4 S=67B0 P=A2DA MOV  A,M
 CZ-E- A=00 B=8A7C D=8AA6 H=8AA4 S=67B0 P=A2DB STA  A36B     (@RDRV)
 CZ-E- A=00 B=8A7C D=8AA6 H=8AA4 S=67B0 P=A2DE LXI  H,FFFA
 CZ-E- A=00 B=8A7C D=8AA6 H=FFFA S=67B0 P=A2E1 DAD  D
 CZ-E- A=00 B=8A7C D=8AA6 H=8AA0 S=67B0 P=A2E2 MOV  A,M
 CZ-E- A=24 B=8A7C D=8AA6 H=8AA0 S=67B0 P=A2E3 INX  H
 CZ-E- A=24 B=8A7C D=8AA6 H=8AA1 S=67B0 P=A2E4 MOV  H,M
 CZ-E- A=24 B=8A7C D=8AA6 H=8BA1 S=67B0 P=A2E5 MOV  L,A     (HL=login)
 CZ-E- A=24 B=8A7C D=8AA6 H=8B24 S=67B0 P=A2E6 CALL 87B1    (ipchl)
 CZ-E- A=24 B=8A7C D=8AA6 H=8B24 S=67AE P=87B1 PCHL         (login=>8B24)
 CZ-E- A=24 B=8A7C D=8AA6 H=8B24 S=67AE P=8B24 MVI  C,00

...

 CZ-E- A=24 B=8A00 D=8AA6 H=8B24 S=67AE P=8B26 JMP  861B
 CZ-E- A=24 B=8A00 D=8AA6 H=8B24 S=67AE P=861B JMP  A2BC
...

The login function should not call seldsk.  'Cause the seldsk
flow in bioskrn3 calls login near the end of the function.

So if login calls seldsk, it creates an endless loop.

Removed the selDsk call in the login function and just made login
immediately return.  Getting closer.  This is what I now get:

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8600  1E00
 BDOS3    SPR  6700  1F00

 25K TPA


CP/M Plus v3.0hd


BIOS ERR ON A: NO CCP.COM FILE

Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 29th, 2023, 11:14 am

Yesterday, I made some progress on the CP/M BIOS to report.

I didn't add any code in the init or login functions, but rather traced the code execution to see what was happening. I removed the IDE3 module and the corresponding entries in the drive table just to make sure the IDE code had no effect. Probably didn't need to do that, but I did, just in case.

What I learned is the drive tables and drive initialization works. Actually, there's no drive initialization happening - at least, nothing in the hardware-specific FDC3 module - but it does successfully iterate through the entries in the drive table. And when BIOS wants to do a drive select, a home or a read, it properly gets through the drive table vectoring into the right hardware-specific functions in FDC3.

But once into the FDC3 "read" function, the code moves the head around trying to get where it needs to be and I don't think we ever get to a place where we transefer a sector. That's where I am now and will be trying to learn what is going wrong within the read function and its subroutines. I must have broken a logical link there somewhere when splitting out the BIOS into separate modules.

SID debugging session and notes:
Code: Select all

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#L8E00
  8E00  JMP  A88B   (boot)
  8E03  JMP  8E6C   (wboot)
  8E06  JMP  8F72   (const)
  8E09  JMP  8F8D   (conin)
  8E0C  JMP  8ED5   (conout)
  8E0F  JMP  8EE1   (list)
  8E12  JMP  8EDB   (auxout)
  8E15  JMP  8F93   (auxin)
  8E18  JMP  A8F9   (home)
  8E1B  JMP  A8CA   (seldsk)
  8E1E  JMP  A8FC   (settrk)
  8E21  JMP  A902   (setsec)
  8E24  JMP  A908   (setdma)
  8E27  JMP  A91F   (read)
  8E2A  JMP  A935   (write)
  8E2D  JMP  8F0D   (listst)
  8E30  JMP  A914   (sectrn)
  8E33  JMP  8F01   (conost)
  8E36  JMP  8F78   (auxist)
  8E39  JMP  8F07   (auxost)
  8E3C  JMP  8ECD   (devtbl)
  8E3F  JMP  9104   (devini)
  8E42  JMP  8ED1   (drvtbl)
  8E45  JMP  A956   (multio)
  8E48  JMP  A95A   (flush)
  8E4B  JMP  9282   (move)
  8E4E  JMP  9094   (time)
  8E51  JMP  9020   (selmem)
  8E54  JMP  A910   (setbnk)
  8E57  JMP  9281   (xmove)
  8E5A  JMP  0000   (userf)
  8E5D  JMP  0000   (reserv1)
  8E60  JMP  0000   (reserv2)
#PA88B
#G8E00

...

 --ME- A=11 B=00FF D=9109 H=91D1 S=8ECD P=A899 CALL 9037

CP/M Plus v3.0hd
                                                             (ret from init)
 -Z-E- A=00 B=00FF D=9109 H=9103 S=8ECD P=A89C LXI  B,1000
 -Z-E- A=00 B=1000 D=9109 H=9103 S=8ECD P=A89F LXI  H,9288   (lxi h, @dtbl)
 -Z-E- A=00 B=1000 D=9109 H=9288 S=8ECD P=A8A2 PUSH B
 -Z-E- A=00 B=1000 D=9109 H=9288 S=8ECB P=A8A3 MOV  E,M
 -Z-E- A=00 B=1000 D=91B2 H=9288 S=8ECB P=A8A4 INX  H
 -Z-E- A=00 B=1000 D=91B2 H=9289 S=8ECB P=A8A5 MOV  D,M
 -Z-E- A=00 B=1000 D=92B2 H=9289 S=8ECB P=A8A6 INX  H
 -Z-E- A=00 B=1000 D=92B2 H=928A S=8ECB P=A8A7 MOV  A,E      (d0->928A)
 -Z-E- A=B2 B=1000 D=92B2 H=928A S=8ECB P=A8A8 ORA  D
 --ME- A=B2 B=1000 D=92B2 H=928A S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 --ME- A=B2 B=1000 D=92B2 H=928A S=8ECB P=A8AC PUSH H
 --ME- A=B2 B=1000 D=92B2 H=928A S=8EC9 P=A8AD XCHG
 --ME- A=B2 B=1000 D=928A H=92B2 S=8EC9 P=A8AE DCX  H
 --ME- A=B2 B=1000 D=928A H=92B1 S=8EC9 P=A8AF DCX  H
 --ME- A=B2 B=1000 D=928A H=92B0 S=8EC9 P=A8B0 MOV  A,M
 --ME- A=00 B=1000 D=928A H=92B0 S=8EC9 P=A8B1 STA  A979     (@RDRV)
 --ME- A=00 B=1000 D=928A H=92B0 S=8EC9 P=A8B4 MOV  A,C
 --ME- A=00 B=1000 D=928A H=92B0 S=8EC9 P=A8B5 STA  A978     (@ADRV)
 --ME- A=00 B=1000 D=928A H=92B0 S=8EC9 P=A8B8 DCX  H
 --ME- A=00 B=1000 D=928A H=92AF S=8EC9 P=A8B9 MOV  D,M
 --ME- A=00 B=1000 D=938A H=92AF S=8EC9 P=A8BA DCX  H
 --ME- A=00 B=1000 D=938A H=92AE S=8EC9 P=A8BB MOV  E,M
 --ME- A=00 B=1000 D=932F H=92AE S=8EC9 P=A8BC XCHG
 --ME- A=00 B=1000 D=92AE H=932F S=8EC9 P=A8BD CALL 8FB1     (ipchl)
 --ME- A=00 B=1000 D=92AE H=932F S=8EC7 P=8FB1 PCHL          (call drive 0 init)
 --ME- A=00 B=1000 D=92AE H=932F S=8EC7 P=932F RET           (...which is a null function)
 --ME- A=00 B=1000 D=92AE H=932F S=8EC9 P=A8C0 POP  H        (get d0->928A in HL)
 --ME- A=00 B=1000 D=92AE H=928A S=8ECB P=A8C1 POP  B        (recover drive# as counter)
 --ME- A=00 B=1000 D=92AE H=928A S=8ECD P=A8C2 INR  C
 ----- A=00 B=1001 D=92AE H=928A S=8ECD P=A8C3 DCR  B
 ---E- A=00 B=0F01 D=92AE H=928A S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---E- A=00 B=0F01 D=92AE H=928A S=8ECD P=A8A2 PUSH B
 ---E- A=00 B=0F01 D=92AE H=928A S=8ECB P=A8A3 MOV  E,M
 ---E- A=00 B=0F01 D=92D5 H=928A S=8ECB P=A8A4 INX  H
 ---E- A=00 B=0F01 D=92D5 H=928B S=8ECB P=A8A5 MOV  D,M
 ---E- A=00 B=0F01 D=92D5 H=928B S=8ECB P=A8A6 INX  H
 ---E- A=00 B=0F01 D=92D5 H=928C S=8ECB P=A8A7 MOV  A,E
 ---E- A=D5 B=0F01 D=92D5 H=928C S=8ECB P=A8A8 ORA  D
 --ME- A=D7 B=0F01 D=92D5 H=928C S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 --ME- A=D7 B=0F01 D=92D5 H=928C S=8ECB P=A8AC PUSH H
 --ME- A=D7 B=0F01 D=92D5 H=928C S=8EC9 P=A8AD XCHG
 --ME- A=D7 B=0F01 D=928C H=92D5 S=8EC9 P=A8AE DCX  H
 --ME- A=D7 B=0F01 D=928C H=92D4 S=8EC9 P=A8AF DCX  H
 --ME- A=D7 B=0F01 D=928C H=92D3 S=8EC9 P=A8B0 MOV  A,M
 --ME- A=01 B=0F01 D=928C H=92D3 S=8EC9 P=A8B1 STA  A979     (@RDRV)
 --ME- A=01 B=0F01 D=928C H=92D3 S=8EC9 P=A8B4 MOV  A,C
 --ME- A=01 B=0F01 D=928C H=92D3 S=8EC9 P=A8B5 STA  A978     (@ADRV)
 --ME- A=01 B=0F01 D=928C H=92D3 S=8EC9 P=A8B8 DCX  H
 --ME- A=01 B=0F01 D=928C H=92D2 S=8EC9 P=A8B9 MOV  D,M
 --ME- A=01 B=0F01 D=938C H=92D2 S=8EC9 P=A8BA DCX  H
 --ME- A=01 B=0F01 D=938C H=92D1 S=8EC9 P=A8BB MOV  E,M
 --ME- A=01 B=0F01 D=932F H=92D1 S=8EC9 P=A8BC XCHG
 --ME- A=01 B=0F01 D=92D1 H=932F S=8EC9 P=A8BD CALL 8FB1     (ipchl)
 --ME- A=01 B=0F01 D=92D1 H=932F S=8EC7 P=8FB1 PCHL          (call drive 1 init)
 --ME- A=01 B=0F01 D=92D1 H=932F S=8EC7 P=932F RET           (...which is a null function)
 --ME- A=01 B=0F01 D=92D1 H=932F S=8EC9 P=A8C0 POP  H        (get d0->928C in HL)
 --ME- A=01 B=0F01 D=92D1 H=928C S=8ECB P=A8C1 POP  B        (recover drive# as counter)
 --ME- A=01 B=0F01 D=92D1 H=928C S=8ECD P=A8C2 INR  C
 ----- A=01 B=0F02 D=92D1 H=928C S=8ECD P=A8C3 DCR  B
 ----I A=01 B=0E02 D=92D1 H=928C S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=01 B=0E02 D=92D1 H=928C S=8ECD P=A8A2 PUSH B
 ----I A=01 B=0E02 D=92D1 H=928C S=8ECB P=A8A3 MOV  E,M
 ----I A=01 B=0E02 D=9200 H=928C S=8ECB P=A8A4 INX  H
 ----I A=01 B=0E02 D=9200 H=928D S=8ECB P=A8A5 MOV  D,M
 ----I A=01 B=0E02 D=0000 H=928D S=8ECB P=A8A6 INX  H
 ----I A=01 B=0E02 D=0000 H=928E S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=0E02 D=0000 H=928E S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0E02 D=0000 H=928E S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0E02 D=0000 H=928E S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0E02 D=0000 H=928E S=8ECD P=A8C2 INR  C
 ---E- A=00 B=0E03 D=0000 H=928E S=8ECD P=A8C3 DCR  B
 ----I A=00 B=0D03 D=0000 H=928E S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=0D03 D=0000 H=928E S=8ECD P=A8A2 PUSH B
 ----I A=00 B=0D03 D=0000 H=928E S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=0D03 D=0000 H=928E S=8ECB P=A8A4 INX  H
 ----I A=00 B=0D03 D=0000 H=928F S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=0D03 D=0000 H=928F S=8ECB P=A8A6 INX  H
 ----I A=00 B=0D03 D=0000 H=9290 S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=0D03 D=0000 H=9290 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0D03 D=0000 H=9290 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0D03 D=0000 H=9290 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0D03 D=0000 H=9290 S=8ECD P=A8C2 INR  C
 ----- A=00 B=0D04 D=0000 H=9290 S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=0C04 D=0000 H=9290 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=0C04 D=0000 H=9290 S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=0C04 D=0000 H=9290 S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=0C04 D=0000 H=9290 S=8ECB P=A8A4 INX  H
 ---EI A=00 B=0C04 D=0000 H=9291 S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=0C04 D=0000 H=9291 S=8ECB P=A8A6 INX  H
 ---EI A=00 B=0C04 D=0000 H=9292 S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=0C04 D=0000 H=9292 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0C04 D=0000 H=9292 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0C04 D=0000 H=9292 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0C04 D=0000 H=9292 S=8ECD P=A8C2 INR  C
 ---E- A=00 B=0C05 D=0000 H=9292 S=8ECD P=A8C3 DCR  B
 ----I A=00 B=0B05 D=0000 H=9292 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=0B05 D=0000 H=9292 S=8ECD P=A8A2 PUSH B
 ----I A=00 B=0B05 D=0000 H=9292 S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=0B05 D=0000 H=9292 S=8ECB P=A8A4 INX  H
 ----I A=00 B=0B05 D=0000 H=9293 S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=0B05 D=0000 H=9293 S=8ECB P=A8A6 INX  H
 ----I A=00 B=0B05 D=0000 H=9294 S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=0B05 D=0000 H=9294 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0B05 D=0000 H=9294 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0B05 D=0000 H=9294 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0B05 D=0000 H=9294 S=8ECD P=A8C2 INR  C
 ---E- A=00 B=0B06 D=0000 H=9294 S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=0A06 D=0000 H=9294 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=0A06 D=0000 H=9294 S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=0A06 D=0000 H=9294 S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=0A06 D=0000 H=9294 S=8ECB P=A8A4 INX  H
 ---EI A=00 B=0A06 D=0000 H=9295 S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=0A06 D=0000 H=9295 S=8ECB P=A8A6 INX  H
 ---EI A=00 B=0A06 D=0000 H=9296 S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=0A06 D=0000 H=9296 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0A06 D=0000 H=9296 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0A06 D=0000 H=9296 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0A06 D=0000 H=9296 S=8ECD P=A8C2 INR  C
 ----- A=00 B=0A07 D=0000 H=9296 S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=0907 D=0000 H=9296 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=0907 D=0000 H=9296 S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=0907 D=0000 H=9296 S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=0907 D=0000 H=9296 S=8ECB P=A8A4 INX  H
 ---EI A=00 B=0907 D=0000 H=9297 S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=0907 D=0000 H=9297 S=8ECB P=A8A6 INX  H
 ---EI A=00 B=0907 D=0000 H=9298 S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=0907 D=0000 H=9298 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0907 D=0000 H=9298 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0907 D=0000 H=9298 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0907 D=0000 H=9298 S=8ECD P=A8C2 INR  C
 ----- A=00 B=0908 D=0000 H=9298 S=8ECD P=A8C3 DCR  B
 ----I A=00 B=0808 D=0000 H=9298 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=0808 D=0000 H=9298 S=8ECD P=A8A2 PUSH B
 ----I A=00 B=0808 D=0000 H=9298 S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=0808 D=0000 H=9298 S=8ECB P=A8A4 INX  H
 ----I A=00 B=0808 D=0000 H=9299 S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=0808 D=0000 H=9299 S=8ECB P=A8A6 INX  H
 ----I A=00 B=0808 D=0000 H=929A S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=0808 D=0000 H=929A S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0808 D=0000 H=929A S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0808 D=0000 H=929A S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0808 D=0000 H=929A S=8ECD P=A8C2 INR  C
 ---E- A=00 B=0809 D=0000 H=929A S=8ECD P=A8C3 DCR  B
 ----I A=00 B=0709 D=0000 H=929A S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=0709 D=0000 H=929A S=8ECD P=A8A2 PUSH B
 ----I A=00 B=0709 D=0000 H=929A S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=0709 D=0000 H=929A S=8ECB P=A8A4 INX  H
 ----I A=00 B=0709 D=0000 H=929B S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=0709 D=0000 H=929B S=8ECB P=A8A6 INX  H
 ----I A=00 B=0709 D=0000 H=929C S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=0709 D=0000 H=929C S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=0709 D=0000 H=929C S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=0709 D=0000 H=929C S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=0709 D=0000 H=929C S=8ECD P=A8C2 INR  C
 ---E- A=00 B=070A D=0000 H=929C S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=060A D=0000 H=929C S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=060A D=0000 H=929C S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=060A D=0000 H=929C S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=060A D=0000 H=929C S=8ECB P=A8A4 INX  H
 ---EI A=00 B=060A D=0000 H=929D S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=060A D=0000 H=929D S=8ECB P=A8A6 INX  H
 ---EI A=00 B=060A D=0000 H=929E S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=060A D=0000 H=929E S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=060A D=0000 H=929E S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=060A D=0000 H=929E S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=060A D=0000 H=929E S=8ECD P=A8C2 INR  C
 ----- A=00 B=060B D=0000 H=929E S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=050B D=0000 H=929E S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=050B D=0000 H=929E S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=050B D=0000 H=929E S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=050B D=0000 H=929E S=8ECB P=A8A4 INX  H
 ---EI A=00 B=050B D=0000 H=929F S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=050B D=0000 H=929F S=8ECB P=A8A6 INX  H
 ---EI A=00 B=050B D=0000 H=92A0 S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=050B D=0000 H=92A0 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=050B D=0000 H=92A0 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=050B D=0000 H=92A0 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=050B D=0000 H=92A0 S=8ECD P=A8C2 INR  C
 ---E- A=00 B=050C D=0000 H=92A0 S=8ECD P=A8C3 DCR  B
 ----I A=00 B=040C D=0000 H=92A0 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=040C D=0000 H=92A0 S=8ECD P=A8A2 PUSH B
 ----I A=00 B=040C D=0000 H=92A0 S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=040C D=0000 H=92A0 S=8ECB P=A8A4 INX  H
 ----I A=00 B=040C D=0000 H=92A1 S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=040C D=0000 H=92A1 S=8ECB P=A8A6 INX  H
 ----I A=00 B=040C D=0000 H=92A2 S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=040C D=0000 H=92A2 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=040C D=0000 H=92A2 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=040C D=0000 H=92A2 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=040C D=0000 H=92A2 S=8ECD P=A8C2 INR  C
 ----- A=00 B=040D D=0000 H=92A2 S=8ECD P=A8C3 DCR  B
 ---EI A=00 B=030D D=0000 H=92A2 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ---EI A=00 B=030D D=0000 H=92A2 S=8ECD P=A8A2 PUSH B
 ---EI A=00 B=030D D=0000 H=92A2 S=8ECB P=A8A3 MOV  E,M
 ---EI A=00 B=030D D=0000 H=92A2 S=8ECB P=A8A4 INX  H
 ---EI A=00 B=030D D=0000 H=92A3 S=8ECB P=A8A5 MOV  D,M
 ---EI A=00 B=030D D=0000 H=92A3 S=8ECB P=A8A6 INX  H
 ---EI A=00 B=030D D=0000 H=92A4 S=8ECB P=A8A7 MOV  A,E
 ---EI A=00 B=030D D=0000 H=92A4 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=030D D=0000 H=92A4 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=030D D=0000 H=92A4 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=030D D=0000 H=92A4 S=8ECD P=A8C2 INR  C
 ----- A=00 B=030E D=0000 H=92A4 S=8ECD P=A8C3 DCR  B
 ----I A=00 B=020E D=0000 H=92A4 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=020E D=0000 H=92A4 S=8ECD P=A8A2 PUSH B
 ----I A=00 B=020E D=0000 H=92A4 S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=020E D=0000 H=92A4 S=8ECB P=A8A4 INX  H
 ----I A=00 B=020E D=0000 H=92A5 S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=020E D=0000 H=92A5 S=8ECB P=A8A6 INX  H
 ----I A=00 B=020E D=0000 H=92A6 S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=020E D=0000 H=92A6 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=020E D=0000 H=92A6 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=020E D=0000 H=92A6 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=020E D=0000 H=92A6 S=8ECD P=A8C2 INR  C
 ---E- A=00 B=020F D=0000 H=92A6 S=8ECD P=A8C3 DCR  B
 ----I A=00 B=010F D=0000 H=92A6 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 ----I A=00 B=010F D=0000 H=92A6 S=8ECD P=A8A2 PUSH B
 ----I A=00 B=010F D=0000 H=92A6 S=8ECB P=A8A3 MOV  E,M
 ----I A=00 B=010F D=0000 H=92A6 S=8ECB P=A8A4 INX  H
 ----I A=00 B=010F D=0000 H=92A7 S=8ECB P=A8A5 MOV  D,M
 ----I A=00 B=010F D=0000 H=92A7 S=8ECB P=A8A6 INX  H
 ----I A=00 B=010F D=0000 H=92A8 S=8ECB P=A8A7 MOV  A,E
 ----I A=00 B=010F D=0000 H=92A8 S=8ECB P=A8A8 ORA  D
 -Z-E- A=00 B=010F D=0000 H=92A8 S=8ECB P=A8A9 JZ   A8C1     (d$init$next)
 -Z-E- A=00 B=010F D=0000 H=92A8 S=8ECB P=A8C1 POP  B
 -Z-E- A=00 B=010F D=0000 H=92A8 S=8ECD P=A8C2 INR  C
 ----I A=00 B=0110 D=0000 H=92A8 S=8ECD P=A8C3 DCR  B
 -Z-EI A=00 B=0010 D=0000 H=92A8 S=8ECD P=A8C4 JNZ  A8A2     (d$init$loop)
 -Z-EI A=00 B=0010 D=0000 H=92A8 S=8ECD P=A8C7 JMP  8E63     (jmp boot$1)
 -Z-EI A=00 B=0010 D=0000 H=92A8 S=8ECD P=8E63 CALL 8E78     (call set$jumps)
 -Z-EI A=00 B=0010 D=0000 H=92A8 S=8ECB P=8E78 MVI  A,C3     (jmp instruction = C3)
 -Z-EI A=C3 B=0010 D=0000 H=92A8 S=8ECB P=8E7A STA  0000     (store jmp in 0000)
 -Z-EI A=C3 B=0010 D=0000 H=92A8 S=8ECB P=8E7D STA  0005     (...and in 0005 for BDOS)
 -Z-EI A=C3 B=0010 D=0000 H=92A8 S=8ECB P=8E80 LXI  H,8E03   (?wboot)
 -Z-EI A=C3 B=0010 D=0000 H=8E03 S=8ECB P=8E83 SHLD 0001
 -Z-EI A=C3 B=0010 D=0000 H=8E03 S=8ECB P=8E86 LHLD 8DFE     (@MXTPA)
 -Z-EI A=C3 B=0010 D=0000 H=6F06 S=8ECB P=8E89 SHLD 0006     (put @MXTPA after the BDOS jump instruction)
 -Z-EI A=C3 B=0010 D=0000 H=6F06 S=8ECB P=8E8C RET           (ret from set$jumps)
 -Z-EI A=C3 B=0010 D=0000 H=6F06 S=8ECD P=8E66 CALL 9060     (call ?ldccp)
 -Z-EI A=C3 B=0010 D=0000 H=6F06 S=8ECB P=9060 XRA  A        (zero accumulator)
 -Z-E- A=00 B=0010 D=0000 H=6F06 S=8ECB P=9061 STA  90D9     (store in CCP$FCB+15  90D9)
 -Z-E- A=00 B=0010 D=0000 H=6F06 S=8ECB P=9064 LXI  H,0000   (zero HL)
 -Z-E- A=00 B=0010 D=0000 H=0000 S=8ECB P=9067 SHLD 90EA     (store in FCB$NR      90EA)
 -Z-E- A=00 B=0010 D=0000 H=0000 S=8ECB P=906A LXI  D,90CA   (put CCP$FCB in DE    90CA)
 -Z-E- A=00 B=0010 D=90CA H=0000 S=8ECB P=906D CALL 9095     (open)

...

(just before calling read function in FDC3)

 ----I A=01 B=9601 D=0000 H=96A5 S=6FD4 P=7764 CALL 8E27
 ----I A=01 B=9601 D=0000 H=96A5 S=6FD2 P=8E27 JMP  A91F

...

Note these addresses from the jump table:

seldsk A8CA
home   A8F9
read   A91F

Could put passpoints on each one.  Here is a partial run with passpoint at read:

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#PA91F
#G8E00


CP/M Plus v3.0hd


01 PASS A91F
 ----I A=01 B=9601 D=0000 H=96A5 S=6FD2 P=A91F LHLD A978     (@ADRV)
 ----I A=01 B=9601 D=0000 H=0000 S=6FD2 P=A922 MVI  H,00
 ----I A=01 B=9601 D=0000 H=0000 S=6FD2 P=A924 DAD  H
 ----I A=01 B=9601 D=0000 H=0000 S=6FD2 P=A925 LXI  D,9288   (@DTBL)
 ----I A=01 B=9601 D=9288 H=0000 S=6FD2 P=A928 DAD  D
 ----I A=01 B=9601 D=9288 H=9288 S=6FD2 P=A929 MOV  A,M
 ----I A=B2 B=9601 D=9288 H=9288 S=6FD2 P=A92A INX  H
 ----I A=B2 B=9601 D=9288 H=9289 S=6FD2 P=A92B MOV  H,M
 ----I A=B2 B=9601 D=9288 H=9289 S=6FD2 P=A92C MOV  L,A
 ----I A=B2 B=9601 D=9288 H=92B2 S=6FD2 P=A92D PUSH H
 ----I A=B2 B=9601 D=9288 H=92B2 S=6FD0 P=A92E LXI  D,FFF8
 ----I A=B2 B=9601 D=FFF8 H=92B2 S=6FD0 P=A931 DAD  D
 C---I A=B2 B=9601 D=FFF8 H=92AA S=6FD0 P=A932 JMP  A948     (rw$common)
 C---I A=B2 B=9601 D=FFF8 H=92AA S=6FD0 P=A948 MOV  A,M
 C---I A=31 B=9601 D=FFF8 H=92AA S=6FD0 P=A949 INX  H
 C---I A=31 B=9601 D=FFF8 H=92AB S=6FD0 P=A94A MOV  H,M
 C---I A=31 B=9601 D=FFF8 H=93AB S=6FD0 P=A94B MOV  L,A
 C---I A=31 B=9601 D=FFF8 H=9331 S=6FD0 P=A94C POP  D        (HL<=address of read driver code 9331)
 C---I A=31 B=9601 D=92B2 H=9331 S=6FD2 P=A94D DCX  D
 C---I A=31 B=9601 D=92B1 H=9331 S=6FD2 P=A94E DCX  D
 C---I A=31 B=9601 D=92B0 H=9331 S=6FD2 P=A94F LDAX D
 C---I A=00 B=9601 D=92B0 H=9331 S=6FD2 P=A950 STA  A979
 C---I A=00 B=9601 D=92B0 H=9331 S=6FD2 P=A953 INX  D
 C---I A=00 B=9601 D=92B1 H=9331 S=6FD2 P=A954 INX  D
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=A955 PCHL          (jump to fdRead within FDC3)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446     (call ckFlush)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD0 P=9446 LDA  969F     (bfDirty)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD0 P=9449 ORA  A
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD0 P=944A RZ            (done with ckFlush)
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9334 EI
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9335 CALL 93DF     (readTrk) 
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD0 P=93DF LHLD 96A0     (bfDrive)
 -Z-E- A=00 B=9601 D=92B2 H=FFFF S=6FD0 P=93E2 LDA  A979     (@RDRV)
 -Z-E- A=00 B=9601 D=92B2 H=FFFF S=6FD0 P=93E5 CMP  L
 C---- A=00 B=9601 D=92B2 H=FFFF S=6FD0 P=93E6 JNZ  93EE     (rtNew)
 C---- A=00 B=9601 D=92B2 H=FFFF S=6FD0 P=93EE MVI  A,FF
 C---- A=FF B=9601 D=92B2 H=FFFF S=6FD0 P=93F0 STA  96A0     (bfDrive)
 C---- A=FF B=9601 D=92B2 H=FFFF S=6FD0 P=93F3 CALL 94D0     (dSelDrv)
 C---- A=FF B=9601 D=92B2 H=FFFF S=6FCE P=94D0 LXI  H,9699   (curDrv)
 C---- A=FF B=9601 D=92B2 H=9699 S=6FCE P=94D3 MOV  E,M
 C---- A=FF B=9601 D=9200 H=9699 S=6FCE P=94D4 LDA  A979     (@RDRV)
 C---- A=00 B=9601 D=9200 H=9699 S=6FCE P=94D7 MOV  C,A
 C---- A=00 B=9600 D=9200 H=9699 S=6FCE P=94D8 CMP  E
 -Z-EI A=00 B=9600 D=9200 H=9699 S=6FCE P=94D9 JNZ  94E6     (newDrv)
 -Z-EI A=00 B=9600 D=9200 H=9699 S=6FCE P=94DC IN   08       (in DRVSTAT)
 -Z-EI A=C5 B=9600 D=9200 H=9699 S=6FCE P=94DE ANI  08
 -Z-EI A=00 B=9600 D=9200 H=9699 S=6FCE P=94E0 JZ   951B     (dSelExt - selected drive == current drive)
 -Z-EI A=00 B=9600 D=9200 H=9699 S=6FCE P=951B MVI  A,04     (load head)
 -Z-EI A=04 B=9600 D=9200 H=9699 S=6FCE P=951D OUT  09       (out DRVCMD)
 -Z-EI A=04 B=9600 D=9200 H=9699 S=6FCE P=951F RET           (from dSelDrv, back to rtNew)
 -Z-EI A=04 B=9600 D=9200 H=9699 S=6FD0 P=93F6 RNZ
 -Z-EI A=04 B=9600 D=9200 H=9699 S=6FD0 P=93F7 MVI  A,02     (init restore/seek attempt counter)
 -Z-EI A=02 B=9600 D=9200 H=9699 S=6FD0 P=93F9 STA  96A4     (skRetry)
 -Z-EI A=02 B=9600 D=9200 H=9699 S=6FD0 P=93FC CALL 9520     (dSeek)
 -Z-EI A=02 B=9600 D=9200 H=9699 S=6FCE P=9520 DI
 -Z-EI A=02 B=9600 D=9200 H=9699 S=6FCE P=9521 LDA  969A     (curTrk)
 -Z-EI A=FF B=9600 D=9200 H=9699 S=6FCE P=9524 CPI  FF       (UNDEF)
 -Z-EI A=FF B=9600 D=9200 H=9699 S=6FCE P=9526 JNZ  952D     (dTrkVld - not valid 'cause 1st access)
 -Z-EI A=FF B=9600 D=9200 H=9699 S=6FCE P=9529 CALL 9545     (dRestor)
 -Z-EI A=FF B=9600 D=9200 H=9699 S=6FCC P=9545 XRA  A        (set A=0)
 -Z-E- A=00 B=9600 D=9200 H=9699 S=6FCC P=9546 STA  969A     (store in curTrk)
 -Z-E- A=00 B=9600 D=9200 H=9699 S=6FCC P=9549 IN   08       (in DRVSTAT)
 -Z-E- A=C5 B=9600 D=9200 H=9699 S=6FCC P=954B ANI  40       (ani sTRACK0)
 ----- A=40 B=9600 D=9200 H=9699 S=6FCC P=954D RZ            (if head at track 0, return)
 ----- A=40 B=9600 D=9200 H=9699 S=6FCC P=954E MVI  C,03     (step in 3 tracks)
 ----- A=40 B=9603 D=9200 H=9699 S=6FCC P=9550 MVI  B,01     (mvi b,cSTEPI)
 ----- A=40 B=0103 D=9200 H=9699 S=6FCC P=9552 CALL 9570     (call dStep to move 3 steps in)
 ----- A=40 B=0103 D=9200 H=9699 S=6FCA P=9570 IN   08       (in DRVSTAT)
 ----- A=C5 B=0103 D=9200 H=9699 S=6FCA P=9572 ANI  02       (ani sMOVEOK)
 -Z-E- A=00 B=0103 D=9200 H=9699 S=6FCA P=9574 JNZ  9570     (jnz dStep - wait 'til sMOVEOK)
 -Z-E- A=00 B=0103 D=9200 H=9699 S=6FCA P=9577 IN   08       (no wait needed, so IN DRVSTAT)
 -Z-E- A=C5 B=0103 D=9200 H=9699 S=6FCA P=9579 ANI  40       (ani sTRACK0)
 ----- A=40 B=0103 D=9200 H=9699 S=6FCA P=957B JNZ  9584     (jnz dStep1)
 ----- A=40 B=0103 D=9200 H=9699 S=6FCA P=9584 MOV  A,B      (dStep1, so step in)
 ----- A=01 B=0103 D=9200 H=9699 S=6FCA P=9585 OUT  09       (out DRVCMD)
 ----- A=01 B=0103 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ----I A=01 B=0102 D=9200 H=9699 S=6FCA P=9588 JNZ  9570     (jnz dStep)
 ----I A=01 B=0102 D=9200 H=9699 S=6FCA P=9570 IN   08       (in DRVSTAT)
 ----I A=C5 B=0102 D=9200 H=9699 S=6FCA P=9572 ANI  02       (ani sMOVEOK)
 -Z-E- A=00 B=0102 D=9200 H=9699 S=6FCA P=9574 JNZ  9570     (jnz dStep - wait 'til sMOVEOK)
 -Z-E- A=00 B=0102 D=9200 H=9699 S=6FCA P=9577 IN   08       (no wait needed, so IN DRVSTAT)
 -Z-E- A=C5 B=0102 D=9200 H=9699 S=6FCA P=9579 ANI  40       (ani sTRACK0)
 ----- A=40 B=0102 D=9200 H=9699 S=6FCA P=957B JNZ  9584     (jnz dStep1)
 ----- A=40 B=0102 D=9200 H=9699 S=6FCA P=9584 MOV  A,B      (dStep1, so step in)
 ----- A=01 B=0102 D=9200 H=9699 S=6FCA P=9585 OUT  09       (out DRVCMD)
 ----- A=01 B=0102 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ----I A=01 B=0101 D=9200 H=9699 S=6FCA P=9588 JNZ  9570     (jnz dStep)
 ----I A=01 B=0101 D=9200 H=9699 S=6FCA P=9570 IN   08       (in DRVSTAT)
 ----I A=C5 B=0101 D=9200 H=9699 S=6FCA P=9572 ANI  02       (ani sMOVEOK)
 -Z-E- A=00 B=0101 D=9200 H=9699 S=6FCA P=9574 JNZ  9570     (jnz dStep - wait 'til sMOVEOK)
 -Z-E- A=00 B=0101 D=9200 H=9699 S=6FCA P=9577 IN   08       (no wait needed, so IN DRVSTAT)
 -Z-E- A=C5 B=0101 D=9200 H=9699 S=6FCA P=9579 ANI  40       (ani sTRACK0)
 ----- A=40 B=0101 D=9200 H=9699 S=6FCA P=957B JNZ  9584     (jnz dStep1)
 ----- A=40 B=0101 D=9200 H=9699 S=6FCA P=9584 MOV  A,B      (dStep1, so step in)
 ----- A=01 B=0101 D=9200 H=9699 S=6FCA P=9585 OUT  09       (out DRVCMD)
 ----- A=01 B=0101 D=9200 H=9699 S=6FCA P=9587 DCR  C
 -Z-EI A=01 B=0100 D=9200 H=9699 S=6FCA P=9588 JNZ  9570     (jnz dStep)
 -Z-EI A=01 B=0100 D=9200 H=9699 S=6FCA P=958B INR  C        (make C non-zero)
 ----- A=01 B=0101 D=9200 H=9699 S=6FCA P=958C RET           (...and RET to dRestor)
 ----- A=01 B=0101 D=9200 H=9699 S=6FCC P=9555 MVI  A,14     (a=20 decimal, for 20ms delay)     
 ----- A=14 B=0101 D=9200 H=9699 S=6FCC P=9557 CALL 95A6     (call delayMs)
 ----- A=14 B=0101 D=9200 H=9699 S=6FCA P=95A6 MVI  B,69     (105 iterations)
 ----- A=14 B=6901 D=9200 H=9699 S=6FCA P=95A8 NOP           (takes 4 cycles)
 ----- A=14 B=6901 D=9200 H=9699 S=6FCA P=95A9 DCR  B        (takes 5 cycles)
 ----I A=14 B=6801 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8     (takes 10 cycles, back around 'til B=0)
 ----I A=14 B=6801 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=14 B=6801 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ----I A=14 B=6701 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
...
 ----I A=14 B=0201 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 ----I A=14 B=0201 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=14 B=0201 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ----I A=14 B=0101 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 ----I A=14 B=0101 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=14 B=0101 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 -Z-EI A=14 B=0001 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 -Z-EI A=14 B=0001 D=9200 H=9699 S=6FCA P=95AD DCR  A        (decrement the millisecond counter A)
 ----I A=13 B=0001 D=9200 H=9699 S=6FCA P=95AE JNZ  95A6     (...and keep it up)
 ----I A=13 B=0001 D=9200 H=9699 S=6FCA P=95A6 MVI  B,69
 ----I A=13 B=6901 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=13 B=6901 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ----I A=13 B=6801 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 ----I A=13 B=6801 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=13 B=6801 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ----I A=13 B=6701 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
...
 ----I A=01 B=0201 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=01 B=0201 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ----I A=01 B=0101 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 ----I A=01 B=0101 D=9200 H=9699 S=6FCA P=95A8 NOP
 ----I A=01 B=0101 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 -Z-EI A=01 B=0001 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
 -Z-EI A=01 B=0001 D=9200 H=9699 S=6FCA P=95AD DCR  A
 -Z-EI A=00 B=0001 D=9200 H=9699 S=6FCA P=95AE JNZ  95A6
 -Z-EI A=00 B=0001 D=9200 H=9699 S=6FCA P=95B1 RET

The instruction after the RET is at 955A.  So put a passpoint there.

63K CP/M
Version 2.2mits (07/28/80)
Copyright 1980 by Burcon Inc.

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#P955A
#G8E00


CP/M Plus v3.0hd


01 PASS 955A
 -Z-EI A=00 B=0001 D=9200 H=9699 S=6FCC P=955A MVI  C,57     (NUMTRK+10)
 -Z-EI A=00 B=0057 D=9200 H=9699 S=6FCC P=955C MVI  B,02     (STEPO)
 -Z-EI A=00 B=0257 D=9200 H=9699 S=6FCC P=955E CALL 9570     (dStep)
 -Z-EI A=00 B=0257 D=9200 H=9699 S=6FCA P=9570 IN   08
 -Z-EI A=C5 B=0257 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0257 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0257 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0257 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0257 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0257 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0257 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0257 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ---EI A=02 B=0256 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ---EI A=02 B=0256 D=9200 H=9699 S=6FCA P=9570 IN   08
 ---EI A=C5 B=0256 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0256 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0256 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0256 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0256 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0256 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0256 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0256 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ---EI A=02 B=0255 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ---EI A=02 B=0255 D=9200 H=9699 S=6FCA P=9570 IN   08
 ---EI A=C5 B=0255 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0255 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0255 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0255 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0255 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0255 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0255 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0255 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ----I A=02 B=0254 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ----I A=02 B=0254 D=9200 H=9699 S=6FCA P=9570 IN   08
 ----I A=C5 B=0254 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0254 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0254 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0254 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0254 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0254 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0254 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0254 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ---EI A=02 B=0253 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ---EI A=02 B=0253 D=9200 H=9699 S=6FCA P=9570 IN   08
 ---EI A=C5 B=0253 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0253 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0253 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0253 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0253 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0253 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0253 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0253 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ----I A=02 B=0252 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ----I A=02 B=0252 D=9200 H=9699 S=6FCA P=9570 IN   08
 ----I A=C5 B=0252 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0252 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0252 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0252 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0252 D=9200 H=9699 S=6FCA P=957B JNZ  9584
 ----- A=40 B=0252 D=9200 H=9699 S=6FCA P=9584 MOV  A,B
 ----- A=02 B=0252 D=9200 H=9699 S=6FCA P=9585 OUT  09
 ----- A=02 B=0252 D=9200 H=9699 S=6FCA P=9587 DCR  C
 ----I A=02 B=0251 D=9200 H=9699 S=6FCA P=9588 JNZ  9570
 ----I A=02 B=0251 D=9200 H=9699 S=6FCA P=9570 IN   08
 ----I A=C5 B=0251 D=9200 H=9699 S=6FCA P=9572 ANI  02
 -Z-E- A=00 B=0251 D=9200 H=9699 S=6FCA P=9574 JNZ  9570
 -Z-E- A=00 B=0251 D=9200 H=9699 S=6FCA P=9577 IN   08
 -Z-E- A=C5 B=0251 D=9200 H=9699 S=6FCA P=9579 ANI  40
 ----- A=40 B=0251 D=9200 H=9699 S=6FCA P=957B JNZ  9584
...
 ---EI A=08 B=1222 D=9200 H=9699 S=6FCA P=95A8 NOP
 ---EI A=08 B=1222 D=9200 H=9699 S=6FCA P=95A9 DCR  B
 ---EI A=08 B=1122 D=9200 H=9699 S=6FCA P=95AA JNZ  95A8
...from B=69 hex down to 0

...

 -Z-EI A=00 B=0022 D=9200 H=9699 S=6FCA P=95B1 RET
 -Z-EI A=00 B=0022 D=9200 H=9699 S=6FCC P=9569 RET
 -Z-EI A=00 B=0022 D=9200 H=9699 S=6FCE P=952C RNZ
 -Z-EI A=00 B=0022 D=9200 H=9699 S=6FCE P=952D LXI  H,A97A   (@TRK)  <==dTrkVld:
 -Z-EI A=00 B=0022 D=9200 H=A97A S=6FCE P=9530 SUB  M=02
 C-M-- A=FE B=0022 D=9200 H=A97A S=6FCE P=9531 RZ
 C-M-- A=FE B=0022 D=9200 H=A97A S=6FCE P=9532 MVI  B,02     (mvi b,cSTEPO)
 C-M-- A=FE B=0222 D=9200 H=A97A S=6FCE P=9534 JNC  953B     (dDoSeek if NOT carry)
 C-M-- A=FE B=0222 D=9200 H=A97A S=6FCE P=9537 MVI  B,01     (cSTEPI)
 C-M-- A=FE B=0122 D=9200 H=A97A S=6FCE P=9539 CMA
 C-M-- A=01 B=0122 D=9200 H=A97A S=6FCE P=953A INR  A
 C---- A=02 B=0122 D=9200 H=A97A S=6FCE P=953B MOV  C,A
 C---- A=02 B=0102 D=9200 H=A97A S=6FCE P=953C MOV  A,M
 C---- A=02 B=0102 D=9200 H=A97A S=6FCE P=953D STA  969A
 C---- A=02 B=0102 D=9200 H=A97A S=6FCE P=9540 CALL 9570
 C---- A=02 B=0102 D=9200 H=A97A S=6FCC P=9570 IN   08
 C---- A=85 B=0102 D=9200 H=A97A S=6FCC P=9572 ANI  02
 -Z-E- A=00 B=0102 D=9200 H=A97A S=6FCC P=9574 JNZ  9570  <== dStep, back here
 -Z-E- A=00 B=0102 D=9200 H=A97A S=6FCC P=9577 IN   08

...

At any point in the "read" function or its subroutines,
we can break out by pressing ctrl-C.  But if we do, then
we get the message, "BIOS ERR ON A: NO CCP.COM FILE."
Then we're hung and done.

======================================================================

Drive Table:  9288

9288: B2 92 D5 92 00 00 00 00 00 00 00 00 00 00 00 00 ................
9298: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
92A8: 44 93 31 93 30 93 2F 93 00 00 0F 93 00 00 00 00 D.1.0./.........
92B8: 00 00 00 00 00 00 EE 92 38 97 25 97 FF 92 FF FF ........8.%.....
92C8: FF FF 00 44 93 31 93 30 93 2F 93 01 00 0F 93 00 ...D.1.0./......
92D8: 00 00 00 00 00 00 00 00 00 EE 92 5B 97 48 97 FF ...........[.H..
92E8: 92 FF FF FF FF 00 20 00 04 0F 00 95 00 3F 00 C0 ...... ......?..
92F8: 00 10 00 02 00 00 00 FF 00 00 00 00 00 00 00 00 ................
9308: 00 A5 96 00 00 00 00 01 09 11 19 03 0B 13 1B 05 ................
9318: 0D 15 1D 07 0F 17 1F 02 0A 12 1A 04 0C 14 1C 06 ................
9328: 0E 16 1E 08 10 18 20 C9 C9 CD 46 94 FB CD DF 93 ...... ...F.....
9338: FB C2 3F 93 CD 52 93 3E 00 C8 3C C9 CD 46 94 FB ..?..R.>..<..F..

CCP$FCB:      90CA

90CA: 01 43 43 50 20 20 20 20 20 43 4F 4D 00 00 00 00 .CCP     COM....
90DA: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 29th, 2023, 1:45 pm

Getting closer.

I have traced into the FDC read function enough to see it is reading the disk and putting its contents into memory. It wasn't that it was stuck "moving the head around trying to get where it needs to be" and it wasn't having any problem transferring a sector. I just didn't let it get that far.

But the sector it is reading has all E5 characters. It's like it's reading a newly-formatted blank disk.

At first I thought maybe it was reading the IDE drive. But it can't be. The IDE module is not even linked in.

The diskette in the drive is a CPM 2.2 diskette that boots. It includes CPM3.SYS - the one I'm debugging - and CCP.COM and CPMLDR.COM. So SID can execute these files and talk to the disk. But what it reads is all E5 characters.

I had to stop at that point, but I'm anxious to get back at it. I'm wondering if it will read more sectors, and possibly find some directory entries. Or maybe it's reading the wrong area for some reason. Those are the things I'll watch for next.

SID trace and @DMA memory contents after read:
Code: Select all
fdRead  (9331)
readTrk (93DF)

Breakpoint at fdRead:

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#G8E00,9331


CP/M Plus v3.0hd


*9331
#TW
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446     (ckFlush)
*9334
#T
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9334 EI
*9335
#TW
 -Z-E- A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9335 CALL 93DF     (readTrk)
*9338
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=9338 EI
*9339
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=9339 JNZ  933F     (exitDio)
*933C
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=933C CALL 9352     (movRead)
*9352
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD0 P=9352 CALL 93CF     (altSkew)
*93CF
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FCE P=93CF LDA  A97A     (@TRK)
*93D2
#T
 -Z-EI A=02 B=0082 D=A100 H=0200 S=6FCE P=93D2 CPI  06       (06=DATATRK)
*93D4
#T
 C-ME- A=02 B=0082 D=A100 H=0200 S=6FCE P=93D4 LDA  A97C     (@SECT)
*93D7
#T
 C-ME- A=01 B=0082 D=A100 H=0200 S=6FCE P=93D7 RC            (correct sector, return to movRead)
*9355
#T
 C-ME- A=01 B=0082 D=A100 H=0200 S=6FD0 P=9355 CALL 9599     (dSecAdr)
*9599
#T
#T
 C-ME- A=01 B=0082 D=A100 H=0200 S=6FCE P=9599 LXI  H,9657   (secAddr)
*959C
#T
 C-ME- A=01 B=0082 D=A100 H=9657 S=6FCE P=959C MVI  B,00
*959E
#T
 C-ME- A=01 B=0082 D=A100 H=9657 S=6FCE P=959E RLC
*959F
#T
 --ME- A=02 B=0082 D=A100 H=9657 S=6FCE P=959F MOV  C,A
*95A0
#T
 --ME- A=02 B=0002 D=A100 H=9657 S=6FCE P=95A0 DAD  B
*95A1
#T
 --ME- A=02 B=0002 D=A100 H=9659 S=6FCE P=95A1 MOV  A,M
*95A2
#T
 --ME- A=F4 B=0002 D=A100 H=9659 S=6FCE P=95A2 INX  H
*95A3
#T
 --ME- A=F4 B=0002 D=A100 H=965A S=6FCE P=95A3 MOV  H,M
*95A4
#T
 --ME- A=F4 B=0002 D=A100 H=975A S=6FCE P=95A4 MOV  L,A
*95A5
#T
 --ME- A=F4 B=0002 D=A100 H=97F4 S=6FCE P=95A5 RET           (ret to movRead with HL=sectorBuffer 97F4)
*9358
#T
 --ME- A=F4 B=0002 D=A100 H=97F4 S=6FD0 P=9358 MOV  A,M      (A=sector valid flag)
*9359
#T
 --ME- A=00 B=0002 D=A100 H=97F4 S=6FD0 P=9359 ORA  A        (check for flag)
*935A
#T
 -Z-E- A=00 B=0002 D=A100 H=97F4 S=6FD0 P=935A RNZ           (good sector, so do not return)
*935B
#T
 -Z-E- A=00 B=0002 D=A100 H=97F4 S=6FD0 P=935B LXI  D,0008   (8=DATDATA+1, DE=offset to data portion of sector)
*935E
#T
 -Z-E- A=00 B=0002 D=0008 H=97F4 S=6FD0 P=935E LDA  A97A     (lda @TRK)
*9361
#T
 -Z-E- A=02 B=0002 D=0008 H=97F4 S=6FD0 P=9361 CPI  06       (cpi DATATRK)
*9363
#T
 C-ME- A=02 B=0002 D=0008 H=97F4 S=6FD0 P=9363 JNC  9369     (jnc mrMove - if data track already correct)
*9366
#T
 C-ME- A=02 B=0002 D=0008 H=97F4 S=6FD0 P=9366 LXI  D,0004   (4=SYSDATA+1, DE=offset to data portion of sector)
*9369
#T
 C-ME- A=02 B=0002 D=0004 H=97F4 S=6FD0 P=9369 DAD  D
*936A
#T
 --ME- A=02 B=0002 D=0004 H=97F8 S=6FD0 P=936A XCHG
*936B
#T
 --ME- A=02 B=0002 D=97F8 H=0004 S=6FD0 P=936B LHLD A97E     (@DMA = 96A5)
*936E
#T
 --ME- A=02 B=0002 D=97F8 H=96A5 S=6FD0 P=936E MVI  B,80     (CSECLEN - 128 - number of bytes to move)
*9370
#T#6
 --ME- A=02 B=8002 D=97F8 H=96A5 S=6FD0 P=9370 LDAX D
 --ME- A=E5 B=8002 D=97F8 H=96A5 S=6FD0 P=9371 MOV  M,A
 --ME- A=E5 B=8002 D=97F8 H=96A5 S=6FD0 P=9372 INX  H
 --ME- A=E5 B=8002 D=97F8 H=96A6 S=6FD0 P=9373 INX  D
 --ME- A=E5 B=8002 D=97F9 H=96A6 S=6FD0 P=9374 DCR  B
 ----- A=E5 B=7F02 D=97F9 H=96A6 S=6FD0 P=9375 JNZ  9370
*9370
#T#6
 ----- A=E5 B=7F02 D=97F9 H=96A6 S=6FD0 P=9370 LDAX D
 ----- A=E5 B=7F02 D=97F9 H=96A6 S=6FD0 P=9371 MOV  M,A
 ----- A=E5 B=7F02 D=97F9 H=96A6 S=6FD0 P=9372 INX  H
 ----- A=E5 B=7F02 D=97F9 H=96A7 S=6FD0 P=9373 INX  D
 ----- A=E5 B=7F02 D=97FA H=96A7 S=6FD0 P=9374 DCR  B
 ---EI A=E5 B=7E02 D=97FA H=96A7 S=6FD0 P=9375 JNZ  9370
*9370
#T#6
 ---EI A=E5 B=7E02 D=97FA H=96A7 S=6FD0 P=9370 LDAX D
 ---EI A=E5 B=7E02 D=97FA H=96A7 S=6FD0 P=9371 MOV  M,A
 ---EI A=E5 B=7E02 D=97FA H=96A7 S=6FD0 P=9372 INX  H
 ---EI A=E5 B=7E02 D=97FA H=96A8 S=6FD0 P=9373 INX  D
 ---EI A=E5 B=7E02 D=97FB H=96A8 S=6FD0 P=9374 DCR  B
 ---EI A=E5 B=7D02 D=97FB H=96A8 S=6FD0 P=9375 JNZ  9370
*9370
...
#T#6
 ---EI A=E5 B=0302 D=9875 H=9722 S=6FD0 P=9370 LDAX D
 ---EI A=E5 B=0302 D=9875 H=9722 S=6FD0 P=9371 MOV  M,A
 ---EI A=E5 B=0302 D=9875 H=9722 S=6FD0 P=9372 INX  H
 ---EI A=E5 B=0302 D=9875 H=9723 S=6FD0 P=9373 INX  D
 ---EI A=E5 B=0302 D=9876 H=9723 S=6FD0 P=9374 DCR  B
 ----I A=E5 B=0202 D=9876 H=9723 S=6FD0 P=9375 JNZ  9370
*9370
#T#6
 ----I A=E5 B=0202 D=9876 H=9723 S=6FD0 P=9370 LDAX D
 ----I A=E5 B=0202 D=9876 H=9723 S=6FD0 P=9371 MOV  M,A
 ----I A=E5 B=0202 D=9876 H=9723 S=6FD0 P=9372 INX  H
 ----I A=E5 B=0202 D=9876 H=9724 S=6FD0 P=9373 INX  D
 ----I A=E5 B=0202 D=9877 H=9724 S=6FD0 P=9374 DCR  B
 ----I A=E5 B=0102 D=9877 H=9724 S=6FD0 P=9375 JNZ  9370
*9370
#TW6
 ----I A=E5 B=0102 D=9877 H=9724 S=6FD0 P=9370 LDAX D
 ----I A=E5 B=0102 D=9877 H=9724 S=6FD0 P=9371 MOV  M,A
 ----I A=E5 B=0102 D=9877 H=9724 S=6FD0 P=9372 INX  H
 ----I A=E5 B=0102 D=9877 H=9725 S=6FD0 P=9373 INX  D
 ----I A=E5 B=0102 D=9878 H=9725 S=6FD0 P=9374 DCR  B
 -Z-EI A=E5 B=0002 D=9878 H=9725 S=6FD0 P=9375 JNZ  9370
*9378
#T
 -Z-EI A=E5 B=0002 D=9878 H=9725 S=6FD0 P=9378 RET
*933F
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#

Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 30th, 2023, 3:59 pm

Earlier, I saw the code read one sector on track 2 and return all E5 characters. But I wasn't sure if the code would read more sectors and maybe find some directory entries or if it was reading the wrong area.

I'm still not sure if it's reading the right area or not but I am sure the code continued to read more sectors. It read 18 sectors on track 2 and got E5 characters in every location.

So now I need to try to figure out why.

It read these sectors in the following order:
01,09,11,19,03,0B,13,1B,05,0D,15,1D,07,0F,17,1F,01,09

Notice it did sixteen and then repeated the first two.

In decimal, the order of sectors is as follows:
01,09,17,25,03,11,19,27,05,13,21,29,07,15,23,31

Below is the SID output from the last program run. I had set passpoints at the beginning of fdRead and at the beginning of movRead. The first one is where the disk is actually read, and the second is where the track buffer is transferred to the memory block where CP/M BDOS expects to see data.

After each breakpoint pair, I examined memory to see the track number, sector number and sector data. You can see that below.

SID debugging output:
Code: Select all
A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#G8E00,933F


CP/M Plus v3.0hd


*933F
#DA97A,A97C
A97A: 02 00 01                                               (lookin' at track 2, sector 1)
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#T
 -Z-EI A=E5 B=0002 D=9878 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#T
 -Z-EI A=00 B=0002 D=9878 H=9725 S=6FD2 P=9341 RZ
*7767
#P9331
#G                                                           (let's see if we fdRead again)

01 PASS 9331                                                 (yes, looks like we do)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#P933F                                                       (let's do the read and see what we get)
01 PASS 933F
 -Z-EI A=E5 B=0012 D=9CC0 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 09                                               (lookin' at track 2, sector 9)
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331                                                 (another fdRead)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F                                                 (another movRead)
 -Z-EI A=E5 B=0032 D=A550 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 11                                               (track 2, sector 11)
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331                                                 (read again)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F                                                 (memcpy again)
 -Z-EI A=E5 B=0032 D=A550 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 19                                               (track 2, sector 19)
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0006 D=998A H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 03                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0016 D=9DD2 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 0B                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0026 D=A21A H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 13                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0036 D=A662 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 1B                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=000A D=9A9C H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 05                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=001A D=9EE4 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 0D                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=002A D=A32C H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 15                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=003A D=A774 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 1D                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=000E D=9BAE H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 07                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=001E D=9FF6 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 0F                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=002E D=A43E H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 17                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=003E D=A886 H=9725 S=6FD2 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 1F                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD4 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0002 D=9878 H=9725 S=6FD4 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 01                                        ...
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9331
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD4 P=9331 CALL 9446
*9446
#G

01 PASS 933F
 -Z-EI A=E5 B=0012 D=9CC0 H=9725 S=6FD4 P=933F MVI  A,00
*9341
#DA97A,A97C
A97A: 02 00 09
#D96A5
96A5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96B5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96C5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96D5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96E5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
96F5: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9705: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9715: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

BIOS ERR ON A: NO CCP.COM FILE
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 31st, 2023, 10:56 am

Last night, as a sanity check, I created a CPM3.SYS file from the Douglas CP/M 3.0 BIOS.

I built a copy with topmem=A7. That makes a version with the jump table in the same place as the modular version I'm working on, 8E00, which leaves enough room for SID.

Starting off with a breakpoint at the beginning of the read function - which is the same in the single-file BIOS as it is in the modular BIOS - I traced through it enough to identify important addresses like @TRK, @SECT and @DMA.

When it got to the mrMove function, I ran 6 instructions at a time to rapidly get through the buffer-to-DMA copy. Then, when I found the end of that block of code, the RET from mrMove, I placed a passpoint there so I could rapidly watch the disk transfers, stopping only after each was completed and examining the track and sector number, and the data transferred.

So far, I have learned a couple of things from that. First, the sequence of sectors is different. And second, the memory transfer from buffer to DMA only occurred when reading the directory. I'm sure it happens at other times too, but when reading the contents of the CCP.COM file, it doesn't transfer to DMA. I'm guessing it transfers to TPA at memory location 100, but I don't know that yet.

Next time I look at this, I'll try to understand why the sector sequence is different. I also want to know why everything is E5 when the modular code is run. Even if the sectors are read in a different sequence, I would expect that a read of track 2, sector 0 would return the same results from either block of code. The fact that it isn't is an obvious problem.

SID debugging output from the Douglas BIOS run:
Code: Select all
A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1A00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#L8E00
  8E00  JMP  8E61   (boot)
  8E03  JMP  8EB9   (wboot)
  8E06  JMP  8FA3       (const)
  8E09  JMP  8F8A       (conin)
  8E0C  JMP  8F9D       (conout)
  8E0F  JMP  8FC7       (list)
  8E12  JMP  8FB5       (auxout)
  8E15  JMP  8FAF       (auxin)
  8E18  JMP  90D5       (home)
  8E1B  JMP  90C2       (seldsk)
  8E1E  JMP  90DA       (settrk)
  8E21  JMP  90DF       (setsec)
  8E24  JMP  90E5       (setdma)
  8E27  JMP  90F2       (read)
  8E2A  JMP  9105       (write)
  8E2D  JMP  8FCD       (listst)
  8E30  JMP  90EB       (sectrn)
  8E33  JMP  8FA9       (conost)
  8E36  JMP  8FBB       (auxist)
  8E39  JMP  8FC1       (auxost)
  8E3C  JMP  8F74       (devtbl)
  8E3F  JMP  8F89       (devini)
  8E42  JMP  8F78       (drvtbl)
  8E45  JMP  8F89       (multio)
  8E48  JMP  8F87       (flush)
  8E4B  JMP  8F7C       (move)
  8E4E  JMP  8F89       (time)
  8E51  JMP  8F89       (selmem)
  8E54  JMP  8F89       (setbnk)
  8E57  JMP  8F89       (xmove)
  8E5A  JMP  8EB9       (userf)
  8E5D  JMP  8EB9       (reserv1)
  8E60  RLC             (reserv2)

#G8E00,90F2                                                  (read breakpoint)

CP/M 3 BIOS v1.0 for Altair 8" Floppy

*90F2
#T#5
 ----I A=01 B=9501 D=0000 H=9561 S=6FD2 P=90F2 CALL 9207     (call ckFlush)
 ----I A=01 B=9501 D=0000 H=9561 S=6FD0 P=9207 LDA  9556     (bfDirty)
 ----I A=00 B=9501 D=0000 H=9561 S=6FD0 P=920A ORA  A
 -Z-E- A=00 B=9501 D=0000 H=9561 S=6FD0 P=920B RZ
 -Z-E- A=00 B=9501 D=0000 H=9561 S=6FD2 P=90F5 EI            (done with ckFlush)
*90F6
#TW
 -Z-E- A=00 B=9501 D=0000 H=9561 S=6FD2 P=90F6 CALL 91A0     (readTrk)
*90F9
#T
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=90F9 EI
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=90FA JNZ  9100     (exitDio)
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD2 P=90FD CALL 9113     (movRead)
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FD0 P=9113 CALL 9190     (altSkew)
 -Z-EI A=00 B=0082 D=A100 H=0200 S=6FCE P=9190 LDA  955A     (@TRK)
 -Z-EI A=02 B=0082 D=A100 H=0200 S=6FCE P=9193 CPI  06       (06=DATATRK)
 C-ME- A=02 B=0082 D=A100 H=0200 S=6FCE P=9195 LDA  955B     (@SECT)
 C-ME- A=00 B=0082 D=A100 H=0200 S=6FCE P=9198 RC
 C-ME- A=00 B=0082 D=A100 H=0200 S=6FD0 P=9116 CALL 936B     (dSecAdr)
 C-ME- A=00 B=0082 D=A100 H=0200 S=6FCE P=936B LXI  H,9429   (secAddr)
 C-ME- A=00 B=0082 D=A100 H=9429 S=6FCE P=936E MVI  B,00
 C-ME- A=00 B=0082 D=A100 H=9429 S=6FCE P=9370 RLC
 --ME- A=00 B=0082 D=A100 H=9429 S=6FCE P=9371 MOV  C,A
 --ME- A=00 B=0000 D=A100 H=9429 S=6FCE P=9372 DAD  B
 --ME- A=00 B=0000 D=A100 H=9429 S=6FCE P=9373 MOV  A,M
 --ME- A=6D B=0000 D=A100 H=9429 S=6FCE P=9374 INX  H
 --ME- A=6D B=0000 D=A100 H=942A S=6FCE P=9375 MOV  H,M
 --ME- A=6D B=0000 D=A100 H=962A S=6FCE P=9376 MOV  L,A
 --ME- A=6D B=0000 D=A100 H=966D S=6FCE P=9377 RET           (ret to movRead with HL=sectorBuffer 966D)
 --ME- A=6D B=0000 D=A100 H=966D S=6FD0 P=9119 MOV  A,M      (A=valid sector flag)
 --ME- A=00 B=0000 D=A100 H=966D S=6FD0 P=911A ORA  A        (check for flag)
 -Z-E- A=00 B=0000 D=A100 H=966D S=6FD0 P=911B RNZ           (good sector, so do not return)
 -Z-E- A=00 B=0000 D=A100 H=966D S=6FD0 P=911C LXI  D,0008   (8=DATDATA+1, DE=offset to data portion of sector)
 -Z-E- A=00 B=0000 D=0008 H=966D S=6FD0 P=911F LDA  955A     (lda @TRK)
 -Z-E- A=02 B=0000 D=0008 H=966D S=6FD0 P=9122 CPI  06       (cpi DATATRK)
 C-ME- A=02 B=0000 D=0008 H=966D S=6FD0 P=9124 JNC  912A     (jnc mrMove - if data track already correct)
 C-ME- A=02 B=0000 D=0008 H=966D S=6FD0 P=9127 LXI  D,0004   (4=SYSDATA+1, DE=offset to data portion of sector)
 C-ME- A=02 B=0000 D=0004 H=966D S=6FD0 P=912A DAD  D
 --ME- A=02 B=0000 D=0004 H=9671 S=6FD0 P=912B XCHG
 --ME- A=02 B=0000 D=9671 H=0004 S=6FD0 P=912C LHLD 955C     (@DMA = 9561)
 --ME- A=02 B=0000 D=9671 H=9561 S=6FD0 P=912F MVI  B,80     (CSECLEN - 128 - number of bytes to move)
*9131
#T#6
 --ME- A=02 B=8000 D=9671 H=9561 S=6FD0 P=9131 LDAX D
 --ME- A=00 B=8000 D=9671 H=9561 S=6FD0 P=9132 MOV  M,A
 --ME- A=00 B=8000 D=9671 H=9561 S=6FD0 P=9133 INX  H
 --ME- A=00 B=8000 D=9671 H=9562 S=6FD0 P=9134 INX  D
 --ME- A=00 B=8000 D=9672 H=9562 S=6FD0 P=9135 DCR  B
 ----- A=00 B=7F00 D=9672 H=9562 S=6FD0 P=9136 JNZ  9131
*9131

...

#T#6
 ----I A=00 B=0100 D=96F0 H=95E0 S=6FD0 P=9131 LDAX D
 ----I A=00 B=0100 D=96F0 H=95E0 S=6FD0 P=9132 MOV  M,A
 ----I A=00 B=0100 D=96F0 H=95E0 S=6FD0 P=9133 INX  H
 ----I A=00 B=0100 D=96F0 H=95E1 S=6FD0 P=9134 INX  D
 ----I A=00 B=0100 D=96F1 H=95E1 S=6FD0 P=9135 DCR  B
 -Z-EI A=00 B=0000 D=96F1 H=95E1 S=6FD0 P=9136 JNZ  9131
*9139
#T
 -Z-EI A=00 B=0000 D=96F1 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 00                                           ..
#D9561
9561: 00 4C 38 30 20 20 20 20 20 43 4F 4D 00 00 00 54 .L80     COM...T
9571: 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 50 43 32 46 4C 4F 50 20 43 4F 4D 00 00 00 11 .PC2FLOP COM....
9591: 08 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 46 4C 4F 50 32 50 43 20 43 4F 4D 00 00 00 13 .FLOP2PC COM....
95B1: 0A 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 41 53 4D 20 20 20 20 20 43 4F 4D 00 00 00 40 .ASM     COM...@
95D1: 0C 0D 0E 0F 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95F1: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#P9139
#G

01 PASS 9139
 -Z-EI A=00 B=0020 D=9F81 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 10                                           ..
#D9561
9561: 00 53 55 42 4D 49 54 20 20 43 4F 4D 00 00 00 11 .SUBMIT  COM....
9571: 15 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 4C 4F 41 44 20 20 20 20 43 4F 4D 00 00 00 10 .LOAD    COM....
9591: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 53 55 52 56 45 59 20 20 43 4F 4D 00 00 00 09 .SURVEY  COM....
95B1: 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 56 49 45 57 20 20 20 20 43 4F 4D 00 00 00 03 .VIEW    COM....
95D1: 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF F8 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95F1: 00 00 00 7E 65 00 00 00 00 00 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0030 D=A3C9 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 18                                           ..
#D9561
9561: 00 4D 38 30 20 20 20 20 20 43 4F 4D 00 00 00 80 .M80     COM....
9571: 1A 1B 1C 1D 1E 1F 20 21 00 00 00 00 00 00 00 00 ...... !........
9581: 00 4D 38 30 20 20 20 20 20 43 4F 4D 01 00 00 1D .M80     COM....
9591: 22 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "#..............
95A1: 00 4D 41 43 20 20 20 20 20 43 4F 4D 00 00 00 5C .MAC     COM...\
95B1: 24 25 26 27 28 29 00 00 00 00 00 00 00 00 00 00 $%&'()..........
95C1: 00 4D 42 41 53 49 43 20 20 43 4F 4D 00 00 00 80 .MBASIC  COM....
95D1: 2A 2B 2C 2D 2E 2F 30 31 00 00 00 00 00 00 00 00 *+,-./01........
95E1: FF FF FF C0 00 00 00 00 00 00 00 00 00 00 00 00 ................
95F1: 00 00 00 7E 65 11 00 00 00 00 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0004 D=9803 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 02                                           ..
#D9561
9561: 00 4D 42 41 53 49 43 20 20 43 4F 4D 01 00 00 3E .MBASIC  COM...>
9571: 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 2345............
9581: 00 50 49 50 20 20 20 20 20 43 4F 4D 00 00 00 3A .PIP     COM...:
9591: 36 37 38 39 00 00 00 00 00 00 00 00 00 00 00 00 6789............
95A1: 00 53 54 41 54 20 20 20 20 43 4F 4D 00 00 00 2A .STAT    COM...*
95B1: 3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 :;<.............
95C1: 00 44 44 54 20 20 20 20 20 43 4F 4D 00 00 00 26 .DDT     COM...&
95D1: 3D 3E 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 =>?.............
95E1: FF FF FF FF FF FF C0 00 00 00 00 00 00 00 00 00 ................
95F1: 00 00 00 7E 65 11 1E 00 00 00 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0014 D=9C4B H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 0A                                           ..
#D9561
9561: 00 50 43 50 55 54 20 20 20 43 4F 4D 00 00 00 08 .PCPUT   COM....
9571: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @...............
9581: 00 4E 53 57 50 20 20 20 20 43 4F 4D 00 00 00 58 .NSWP    COM...X
9591: 41 42 43 44 45 46 00 00 00 00 00 00 00 00 00 00 ABCDEF..........
95A1: 00 53 59 53 47 45 4E 20 20 43 4F 4D 00 00 00 09 .SYSGEN  COM....
95B1: 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 G...............
95C1: 00 50 43 47 45 54 20 20 20 43 4F 4D 00 00 00 07 .PCGET   COM....
95D1: 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 H...............
95E1: FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 ................
95F1: 00 00 00 7E 65 11 1E 16 00 00 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0024 D=A093 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 12                                           ..
#D9561
9561: 00 43 52 43 20 20 20 20 20 43 4F 4D 00 00 00 11 .CRC     COM....
9571: 49 4A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 IJ..............
9581: 00 4D 4F 56 43 50 4D 20 20 43 4F 4D 00 00 00 53 .MOVCPM  COM...S
9591: 4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 00 00 00 KLMNOP..........
95A1: 00 53 49 44 20 20 20 20 20 43 4F 4D 00 00 00 3E .SID     COM...>
95B1: 51 52 53 54 00 00 00 00 00 00 00 00 00 00 00 00 QRST............
95C1: 00 43 50 4D 4C 44 52 20 20 43 4F 4D 00 00 00 48 .CPMLDR  COM...H
95D1: 55 56 57 58 59 00 00 00 00 00 00 00 00 00 00 00 UVWXY...........
95E1: FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00 ................
95F1: 00 00 00 7E 65 11 1E 16 CE 00 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0034 D=A4DB H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 1A                                           ..
#D9561
9561: E5 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 78 .CPM3    SYS...x
9571: 5A 5B 5C 5D 5E 5F 60 61 00 00 00 00 00 00 00 00 Z[\]^_`a........
9581: 00 43 43 50 20 20 20 20 20 43 4F 4D 00 00 00 19 .CCP     COM....
9591: 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc..............
95A1: 00 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 74 .CPM3    SYS...t
95B1: 64 65 66 67 68 69 6A 6B 00 00 00 00 00 00 00 00 defghijk........
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 00 00 00 00 ................
95F1: 00 00 00 7E 65 11 1E 16 CE D5 00 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0008 D=9915 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 04                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0018 D=9D5D H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 0C                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0028 D=A1A5 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 14                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0038 D=A5ED H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 1C                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=000C D=9A27 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 06                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=001C D=9E6F H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 0E                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=002C D=A2B7 H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 16                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=003C D=A6FF H=95E1 S=6FD0 P=9139 RET
*9100
#D955A,955B
955A: 02 1E                                           ..
#D9561
9561: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9571: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9581: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
9591: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95A1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95B1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0000 D=96F1 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 00                                           ..
#D9561
9561: 00 4C 38 30 20 20 20 20 20 43 4F 4D 00 00 00 54 .L80     COM...T
9571: 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 50 43 32 46 4C 4F 50 20 43 4F 4D 00 00 00 11 .PC2FLOP COM....
9591: 08 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 46 4C 4F 50 32 50 43 20 43 4F 4D 00 00 00 13 .FLOP2PC COM....
95B1: 0A 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 41 53 4D 20 20 20 20 20 43 4F 4D 00 00 00 40 .ASM     COM...@
95D1: 0C 0D 0E 0F 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0010 D=9B39 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 08                                           ..
#D9561
9561: 00 44 55 4D 50 20 20 20 20 43 4F 4D 00 00 00 03 .DUMP    COM....
9571: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 58 53 55 42 20 20 20 20 43 4F 4D 00 00 00 06 .XSUB    COM....
9591: 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 46 4F 52 4D 41 54 20 20 43 4F 4D 00 00 00 0E .FORMAT  COM....
95B1: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 4C 53 20 20 20 20 20 20 43 4F 4D 00 00 00 18 .LS      COM....
95D1: 13 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0020 D=9F81 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 10                                           ..
#D9561
9561: 00 53 55 42 4D 49 54 20 20 43 4F 4D 00 00 00 11 .SUBMIT  COM....
9571: 15 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 4C 4F 41 44 20 20 20 20 43 4F 4D 00 00 00 10 .LOAD    COM....
9591: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 53 55 52 56 45 59 20 20 43 4F 4D 00 00 00 09 .SURVEY  COM....
95B1: 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 56 49 45 57 20 20 20 20 43 4F 4D 00 00 00 03 .VIEW    COM....
95D1: 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0030 D=A3C9 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 18                                           ..
#D9561
9561: 00 4D 38 30 20 20 20 20 20 43 4F 4D 00 00 00 80 .M80     COM....
9571: 1A 1B 1C 1D 1E 1F 20 21 00 00 00 00 00 00 00 00 ...... !........
9581: 00 4D 38 30 20 20 20 20 20 43 4F 4D 01 00 00 1D .M80     COM....
9591: 22 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "#..............
95A1: 00 4D 41 43 20 20 20 20 20 43 4F 4D 00 00 00 5C .MAC     COM...\
95B1: 24 25 26 27 28 29 00 00 00 00 00 00 00 00 00 00 $%&'()..........
95C1: 00 4D 42 41 53 49 43 20 20 43 4F 4D 00 00 00 80 .MBASIC  COM....
95D1: 2A 2B 2C 2D 2E 2F 30 31 00 00 00 00 00 00 00 00 *+,-./01........
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G


01 PASS 9100
 -Z-EI A=00 B=0030 D=A3C9 H=95E1 S=6FD4 P=9100 MVI  A,00
*9102
#G

01 PASS 9139
 -Z-EI A=00 B=0004 D=9803 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 02                                           ..
#D9561
9561: 00 4D 42 41 53 49 43 20 20 43 4F 4D 01 00 00 3E .MBASIC  COM...>
9571: 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 2345............
9581: 00 50 49 50 20 20 20 20 20 43 4F 4D 00 00 00 3A .PIP     COM...:
9591: 36 37 38 39 00 00 00 00 00 00 00 00 00 00 00 00 6789............
95A1: 00 53 54 41 54 20 20 20 20 43 4F 4D 00 00 00 2A .STAT    COM...*
95B1: 3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 :;<.............
95C1: 00 44 44 54 20 20 20 20 20 43 4F 4D 00 00 00 26 .DDT     COM...&
95D1: 3D 3E 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 =>?.............
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9100
 -Z-EI A=00 B=0004 D=9803 H=95E1 S=6FD4 P=9100 MVI  A,00
*9102
#G

01 PASS 9139
 -Z-EI A=00 B=0014 D=9C4B H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 0A                                           ..
#D9561
9561: 00 50 43 50 55 54 20 20 20 43 4F 4D 00 00 00 08 .PCPUT   COM....
9571: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @...............
9581: 00 4E 53 57 50 20 20 20 20 43 4F 4D 00 00 00 58 .NSWP    COM...X
9591: 41 42 43 44 45 46 00 00 00 00 00 00 00 00 00 00 ABCDEF..........
95A1: 00 53 59 53 47 45 4E 20 20 43 4F 4D 00 00 00 09 .SYSGEN  COM....
95B1: 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 G...............
95C1: 00 50 43 47 45 54 20 20 20 43 4F 4D 00 00 00 07 .PCGET   COM....
95D1: 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 H...............
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9100
 -Z-EI A=00 B=0014 D=9C4B H=95E1 S=6FD4 P=9100 MVI  A,00
*9102
#G

01 PASS 9139
 -Z-EI A=00 B=0024 D=A093 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 12                                           ..
#D9561
9561: 00 43 52 43 20 20 20 20 20 43 4F 4D 00 00 00 11 .CRC     COM....
9571: 49 4A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 IJ..............
9581: 00 4D 4F 56 43 50 4D 20 20 43 4F 4D 00 00 00 53 .MOVCPM  COM...S
9591: 4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 00 00 00 KLMNOP..........
95A1: 00 53 49 44 20 20 20 20 20 43 4F 4D 00 00 00 3E .SID     COM...>
95B1: 51 52 53 54 00 00 00 00 00 00 00 00 00 00 00 00 QRST............
95C1: 00 43 50 4D 4C 44 52 20 20 43 4F 4D 00 00 00 48 .CPMLDR  COM...H
95D1: 55 56 57 58 59 00 00 00 00 00 00 00 00 00 00 00 UVWXY...........
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9100
 -Z-EI A=00 B=0024 D=A093 H=95E1 S=6FD4 P=9100 MVI  A,00
*9102
#G

01 PASS 9139
 -Z-EI A=E5 B=0034 D=A4DB H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 1A                                           ..
#D9561
9561: E5 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 78 .CPM3    SYS...x
9571: 5A 5B 5C 5D 5E 5F 60 61 00 00 00 00 00 00 00 00 Z[\]^_`a........
9581: 00 43 43 50 20 20 20 20 20 43 4F 4D 00 00 00 19 .CCP     COM....
9591: 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc..............
95A1: 00 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 74 .CPM3    SYS...t
95B1: 64 65 66 67 68 69 6A 6B 00 00 00 00 00 00 00 00 defghijk........
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9100
 -Z-EI A=E5 B=0034 D=A4DB H=95E1 S=6FD4 P=9100 MVI  A,00
*9102
#G

01 PASS 9139
 -Z-EI A=C3 B=0000 D=96F5 H=0180 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 00                                           3.
#D9561
9561: E5 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 78 .CPM3    SYS...x
9571: 5A 5B 5C 5D 5E 5F 60 61 00 00 00 00 00 00 00 00 Z[\]^_`a........
9581: 00 43 43 50 20 20 20 20 20 43 4F 4D 00 00 00 19 .CCP     COM....
9591: 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc..............
95A1: 00 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 74 .CPM3    SYS...t
95B1: 64 65 66 67 68 69 6A 6B 00 00 00 00 00 00 00 00 defghijk........
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

Notice that the disk location jumped to 33,0.  Once the code flow reaches this point, the contents of memory at location DMA no longer change.  I assume it is loading the executable binary from CCP.COM  and placing it in memory at the beginning of TPA, starting at location 100.  But I don't know that because I didn't watch the flow during memory transfers this time.  Might set a passpoint there later.

In the meantime, I won't bother showing the DMA block after the next few sector transfers because it doesn't change.  I'll just show the track and sector.

01 PASS 9139
 -Z-EI A=C3 B=0000 D=96F5 H=0180 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 00                                           3.
#G

01 PASS 9139
 -Z-EI A=00 B=0010 D=9B3D H=0200 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 08                                           3.
#G

01 PASS 9139
 -Z-EI A=03 B=0020 D=9F85 H=0280 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 10                                           3.
#G

01 PASS 9139
 -Z-EI A=00 B=0030 D=A3CD H=0300 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 18                                           3.
#G

01 PASS 9139
 -Z-EI A=00 B=0004 D=9807 H=0380 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 02                                           3.
#G

01 PASS 9139
 -Z-EI A=1A B=0014 D=9C4F H=0400 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 0A                                           3.
#G

01 PASS 9139
 -Z-EI A=36 B=0024 D=A097 H=0480 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 12                                           3.
#G

01 PASS 9139
 -Z-EI A=46 B=0034 D=A4DF H=0500 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 1A                                           3.
#G

01 PASS 9139
 -Z-EI A=F1 B=0008 D=9919 H=0580 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 04                                           3.
#G

01 PASS 9139
 -Z-EI A=07 B=0018 D=9D61 H=0600 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 0C                                           3.
#G

01 PASS 9139
 -Z-EI A=11 B=0028 D=A1A9 H=0680 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 14                                           3.
#G

01 PASS 9139
 -Z-EI A=0D B=0038 D=A5F1 H=0700 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 1C                                           3.
#G

01 PASS 9139
 -Z-EI A=07 B=000C D=9A2B H=0780 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 06                                           3.
#G

01 PASS 9139
 -Z-EI A=04 B=001C D=9E73 H=0800 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 0E                                           3.
#G

01 PASS 9139
 -Z-EI A=B0 B=002C D=A2BB H=0880 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 16                                           3.
#G

01 PASS 9139
 -Z-EI A=77 B=003C D=A703 H=0900 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 1E                                           3.
#G

01 PASS 9139
 -Z-EI A=00 B=0022 D=A00E H=0980 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 01                                           3.
#G

01 PASS 9139
 -Z-EI A=F6 B=0032 D=A456 H=0A00 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 09                                           3.
#G

01 PASS 9139
 -Z-EI A=72 B=0002 D=977E H=0A80 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 11                                           3.
#G

01 PASS 9139
 -Z-EI A=B5 B=0012 D=9BC6 H=0B00 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 19                                           3.
#G

01 PASS 9139
 -Z-EI A=78 B=0026 D=A120 H=0B80 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 03                                           3.
#G

01 PASS 9139
 -Z-EI A=2A B=0036 D=A568 H=0C00 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 0B                                           3.
#G

01 PASS 9139
 -Z-EI A=87 B=0006 D=9890 H=0C80 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 13                                           3.
#G

01 PASS 9139
 -Z-EI A=3A B=0016 D=9CD8 H=0D00 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 1B                                           3.
#G

01 PASS 9139
 -Z-EI A=00 B=002A D=A232 H=0D80 S=6FE4 P=9139 RET
*9100
#D955A,955B
955A: 33 05                                           3.
#G

Notice we now go back to track 2 and load the directory.  At this point, the contents of the DMA memory block start getting updated again.

01 PASS 9139
 -Z-EI A=00 B=0000 D=96F1 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 00                                           ..
#D9561
9561: 00 4C 38 30 20 20 20 20 20 43 4F 4D 00 00 00 54 .L80     COM...T
9571: 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 50 43 32 46 4C 4F 50 20 43 4F 4D 00 00 00 11 .PC2FLOP COM....
9591: 08 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 46 4C 4F 50 32 50 43 20 43 4F 4D 00 00 00 13 .FLOP2PC COM....
95B1: 0A 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 41 53 4D 20 20 20 20 20 43 4F 4D 00 00 00 40 .ASM     COM...@
95D1: 0C 0D 0E 0F 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0010 D=9B39 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 08                                           ..
#D9561
9561: 00 44 55 4D 50 20 20 20 20 43 4F 4D 00 00 00 03 .DUMP    COM....
9571: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 58 53 55 42 20 20 20 20 43 4F 4D 00 00 00 06 .XSUB    COM....
9591: 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 46 4F 52 4D 41 54 20 20 43 4F 4D 00 00 00 0E .FORMAT  COM....
95B1: 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 4C 53 20 20 20 20 20 20 43 4F 4D 00 00 00 18 .LS      COM....
95D1: 13 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0020 D=9F81 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 10                                           ..
#D9561
9561: 00 53 55 42 4D 49 54 20 20 43 4F 4D 00 00 00 11 .SUBMIT  COM....
9571: 15 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9581: 00 4C 4F 41 44 20 20 20 20 43 4F 4D 00 00 00 10 .LOAD    COM....
9591: 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95A1: 00 53 55 52 56 45 59 20 20 43 4F 4D 00 00 00 09 .SURVEY  COM....
95B1: 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95C1: 00 56 49 45 57 20 20 20 20 43 4F 4D 00 00 00 03 .VIEW    COM....
95D1: 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0030 D=A3C9 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 18                                           ..
#D9561
9561: 00 4D 38 30 20 20 20 20 20 43 4F 4D 00 00 00 80 .M80     COM....
9571: 1A 1B 1C 1D 1E 1F 20 21 00 00 00 00 00 00 00 00 ...... !........
9581: 00 4D 38 30 20 20 20 20 20 43 4F 4D 01 00 00 1D .M80     COM....
9591: 22 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "#..............
95A1: 00 4D 41 43 20 20 20 20 20 43 4F 4D 00 00 00 5C .MAC     COM...\
95B1: 24 25 26 27 28 29 00 00 00 00 00 00 00 00 00 00 $%&'()..........
95C1: 00 4D 42 41 53 49 43 20 20 43 4F 4D 00 00 00 80 .MBASIC  COM....
95D1: 2A 2B 2C 2D 2E 2F 30 31 00 00 00 00 00 00 00 00 *+,-./01........
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0004 D=9803 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 02                                           ..
#D9561
9561: 00 4D 42 41 53 49 43 20 20 43 4F 4D 01 00 00 3E .MBASIC  COM...>
9571: 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 2345............
9581: 00 50 49 50 20 20 20 20 20 43 4F 4D 00 00 00 3A .PIP     COM...:
9591: 36 37 38 39 00 00 00 00 00 00 00 00 00 00 00 00 6789............
95A1: 00 53 54 41 54 20 20 20 20 43 4F 4D 00 00 00 2A .STAT    COM...*
95B1: 3A 3B 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 :;<.............
95C1: 00 44 44 54 20 20 20 20 20 43 4F 4D 00 00 00 26 .DDT     COM...&
95D1: 3D 3E 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 =>?.............
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0014 D=9C4B H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 0A                                           ..
#D9561
9561: 00 50 43 50 55 54 20 20 20 43 4F 4D 00 00 00 08 .PCPUT   COM....
9571: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @...............
9581: 00 4E 53 57 50 20 20 20 20 43 4F 4D 00 00 00 58 .NSWP    COM...X
9591: 41 42 43 44 45 46 00 00 00 00 00 00 00 00 00 00 ABCDEF..........
95A1: 00 53 59 53 47 45 4E 20 20 43 4F 4D 00 00 00 09 .SYSGEN  COM....
95B1: 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 G...............
95C1: 00 50 43 47 45 54 20 20 20 43 4F 4D 00 00 00 07 .PCGET   COM....
95D1: 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 H...............
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=00 B=0024 D=A093 H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 12                                           ..
#D9561
9561: 00 43 52 43 20 20 20 20 20 43 4F 4D 00 00 00 11 .CRC     COM....
9571: 49 4A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 IJ..............
9581: 00 4D 4F 56 43 50 4D 20 20 43 4F 4D 00 00 00 53 .MOVCPM  COM...S
9591: 4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 00 00 00 KLMNOP..........
95A1: 00 53 49 44 20 20 20 20 20 43 4F 4D 00 00 00 3E .SID     COM...>
95B1: 51 52 53 54 00 00 00 00 00 00 00 00 00 00 00 00 QRST............
95C1: 00 43 50 4D 4C 44 52 20 20 43 4F 4D 00 00 00 48 .CPMLDR  COM...H
95D1: 55 56 57 58 59 00 00 00 00 00 00 00 00 00 00 00 UVWXY...........
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

01 PASS 9139
 -Z-EI A=E5 B=0034 D=A4DB H=95E1 S=6FD2 P=9139 RET
*9100
#D955A,955B
955A: 02 1A                                           ..
#D9561
9561: E5 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 78 .CPM3    SYS...x
9571: 5A 5B 5C 5D 5E 5F 60 61 00 00 00 00 00 00 00 00 Z[\]^_`a........
9581: 00 43 43 50 20 20 20 20 20 43 4F 4D 00 00 00 19 .CCP     COM....
9591: 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc..............
95A1: 00 43 50 4D 33 20 20 20 20 53 59 53 00 00 00 74 .CPM3    SYS...t
95B1: 64 65 66 67 68 69 6A 6B 00 00 00 00 00 00 00 00 defghijk........
95C1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95D1: E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ................
95E1: FF FF FF FF FF FF FF FF FF FF FF C0 3F F0 00 00 ............?...
95F1: 00 00 00 7E 65 11 1E 16 CE D5 0A 00 00 00 00 00 ...~e...........
9601: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9611: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#G

A>

CP/M loaded, as evidenced by the "A>" prompt.
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » January 31st, 2023, 7:54 pm

Quick note:

As I suspected, the value of @DMA is set to 0100h when loading CCP.COM.

I added a couple passpoints and started watching the code, but then glanced at the source in BOOT3.ASM to see where I might want to add some more.

This is what the code does, after it finds CCP.COM in the directory:
Code: Select all
   ; FILE WAS OPENED OK -- READ IT IN:
CCP$FOUND:
   LXI   D,0100H      ;LOAD AT BOTTOM OF TPA
   CALL   SETDMA      ;BY SETTING THE NEXT DMA ADDRESS
   LXI   D,128      ;SET MULTI SECTOR I/O COUNT
   CALL   SETMULTI   ; TO ALLOW UP TO 16K BYTES IN ONE OPERATION
   LXI   D,CCP$FCB   ;POINT TO THE FCB
   CALL   READ      ;AND READ THE CCP IN

So that confirms my suspicion that the binary is loaded into 0100h. It never goes into the memory block that is used when reading the directory. Makes sense.

Now I'll move onto trying to learn why the directory reads of the modular version of the code aren't working properly.
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby AltairClone » January 31st, 2023, 8:07 pm

It will certainly feel rewarding when you have this all working :)
AltairClone
Site Admin
 
Posts: 584
Joined: April 5th, 2013, 10:55 am

Re: IDE interface for Altair 8800c

Postby Wayne Parham » February 1st, 2023, 8:16 pm

That's for sure!

What's so sad is all I'm doing at this point is taking your code and moving it into a modular form. I initially thought that might make it easier to merge with the IDE functions, since they are in a separate module. In hindsight, it might have been easier to just add some code that checked @ADRV for drives 2 or 3, and where that's the case, run the IDE read/write functions instead of your FDC read/write functions. But splitting it out to the modular form might eventually be worthwhile, once I start troubleshooting the IDE code. I dunno - We'll see - I'll burn that bridge when I get there.

This all kind of reminds me of my "port" of Monahan's myide program into what I'm now calling IDEutil. It's the subject of the first few pages of this thread. At first, I thought it was Z80 code that just didn't work on the Altair, with its 8080 processor. Then I realized it was really just written to be built with a macro assembler. So funny!

But I gained a few benefits by slogging through that. One was just learning the Digital Research tools. That, all by itself, has proven very interesting and worthwhile. Another is the IDEutil program can now be built with ASM. I guess that's not really a benefit but it is a difference. However, the thing I like best about IDEutil is it has some new features that I really like, such as the ability to copy from any "partition" to any other.

I used a pseudo-partition concept of breaking a 2Gb drive into 256 "partitions" of 8Mb each. Of course, CP/M can only see the first 8Mb partition but all the others can be used for backups and archives. And I suppose it wouldn't be out of the question to create a command that updated the wrlba function in the IDE BIOS so that the partition could be changed while running CP/M. That would be really cool.

Anyway, back to the task at hand. I learned something new just now.

I reloaded the modular BIOS and set breakpoints just before the read function and just after the memcpy from track buffer to @DMA. The modular BIOS code starts out by reading track 2, sector 1 but that's not where it is supposed to be looking. In a working version of BIOS, I've seen that it is supposed to start on track 2 sector 0.

With the code sitting at the fdRead function entry breakpoint, I manually changed the memory to set it to read sector 0 instead of sector 1. Resuming execution - running through the read and memcopy - and then stopping at the breakpoint afterwards, I examined @DMA memory and found the first 128 bytes of directory entries.

So that's suggestive of the problem here. Whatever is providing the sector sequence is wrong. Could be the skew entries are botched somehow. Not sure - I thought I copied 'em over straight away - but obviously I boogered something up.

The sector sequence should be:

00,10,18,02,0A,12,1A,04,0C,14,1C,06,0E,16,1E (in hex)
-or-
00,16,24,02,10,18,26,04,12,20,28,06,14,22,30 (in decimal)

The sequence it tries to do right now is shown a few posts above.

That's what I'll investigate next.

SID debugging output from this latest run:
Code: Select all
A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE  PC  END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

 BIOS3    SPR  8E00  1C00
 BDOS3    SPR  6F00  1F00

 27K TPA

*01A9
#P9331    (passpoint at beginning of fdRead)
#P933F    (passpoint at end of mrMove)
#G8E00


CP/M Plus v3.0hd


01 PASS 9331           (execution stopped at the passpoint at the beginning of fdRead)
 C---I A=00 B=9601 D=92B2 H=9331 S=6FD2 P=9331 CALL 9446
*9446
#DA97A,A97C            (A97A is @TRK and A97C is @SECT)
A97A: 02 00 01         (so it wants to read track 2, sector 1)
#SA97C                 (command to set memory at location A97C, which is @SECT)
A97C 01 00             (change 01 to 00)
A97D 00 .              (. command to end data entry)
#DA97A,A97C            (examine memory to confirm)
A97A: 02 00 00         (now it wants to read track 2, sector 0 - just like Douglas's BIOS)
#G                     (go)

01 PASS 933F           (execution stopped at the passpoint at the end of mrMove)
 -Z-EI A=00 B=0000 D=97EF H=9725 S=6FD2 P=933F MVI  A,00
*9341         
#DA97A,A97C            (look again at @TRK and @SECT, just as a sanity check)
A97A: 02 00 00         (still track 2, sector 0)
#D96A5                 (examine @DMA block)
96A5: 00 4C 38 30 20 20 20 20 20 43 4F 4D 00 00 00 54 .L80     COM...T
96B5: 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 ................
96C5: 00 50 43 32 46 4C 4F 50 20 43 4F 4D 00 00 00 11 .PC2FLOP COM....
96D5: 08 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
96E5: 00 46 4C 4F 50 32 50 43 20 43 4F 4D 00 00 00 13 .FLOP2PC COM....
96F5: 0A 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9705: 00 41 53 4D 20 20 20 20 20 43 4F 4D 00 00 00 40 .ASM     COM...@
9715: 0C 0D 0E 0F 00 00 00 00 00 00 00 00 00 00 00 00 ................
9725: C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9735: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9745: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
9755: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
#

OK, there we go.  I see now the read works just fine.  What doesn't work
is whatever is setting the sequence of sectors for the directory read.
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

Re: IDE interface for Altair 8800c

Postby Wayne Parham » February 3rd, 2023, 6:09 pm

Last night, I decided to look at the sector sequence as it is initially set by CP/M BDOS, before any BIOS translation takes place. My thought is the problem must be in the translation somewhere. Either my version of the code is missing a translation stage or applying it twice or some other such thing.

So I set a breakpoint at setsec, to see the sectors requested by BDOS.

First, from modular cpm3.sys:

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE PC END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

BIOS3 SPR 8E00 1C00
BDOS3 SPR 6F00 1F00

27K TPA

*01A9
#PA902 (setsec)
#G8E00


CP/M Plus v3.0hd


01 PASS A902
--ME- A=9F B=0001 D=0000 H=0001 S=6FD0 P=A902 MOV L,C
*A903

BC is requested sector number, so we can see it is set to 1.

Now using the Douglas BIOS:

A>sid cpmldr.com
CP/M 3 SID - Version 3.0
NEXT MSZE PC END
2500 2500 0100 CBFF
#I$B
#G

CP/M V3.0 Loader
Copyright (C) 1982, Digital Research

BIOS3 SPR 8E00 1A00
BDOS3 SPR 6F00 1F00

27K TPA

*01A9
#P90DF (setsec)
#G8E00

CP/M 3 BIOS v1.0 for Altair 8" Floppy

01 PASS 90DF
-Z-EI A=00 B=0001 D=0000 H=0001 S=6FD0 P=90DF MOV A,C
*90E0

Again, BC is requested sector number, so it is set to 1 in the Douglas BIOS too.

By the way, don't be fooled by the fact that the initial instruction is different. Mike's setSec function is a little different than the DRI setsec, which is what's in the modular version of the code. But both do the same thing.

Running the Douglas BIOS several times to observe the setsec sequence:
01,09,11,19,03,0B,13,1B,05,0D,15,1D,07,0F,17,1F

Now the modular BIOS:
01,09,11,19,03,0B,13,1B,05,0D,15,1D,07,0F,17,1F

As you can see, it's the same sequence issued by BDOS. We have agreement in the sequence at this point, so the mis-translation happens later.

Even though the sequences shown above are the same - and are correct from a BDOS perspective - they aren't the right sequence for the hardware layer. Translation of the sector sequence is required. When reading the directory on track 2, this is what we need to see:
00,10,18,02,0A,12,1A,04,0C,14,1C,06,0E,16,1E

There are two sector modifiers - one (sectran) that is called by BDOS and another (altSkew) that is called within the low-level read and write functions. That second one looks at the track and checks to see if it's a system track or not, which the directory is a part of. What the altSkew function considers a "system track" are those less than 6. So it should not be modifying the sector number when reading directory tracks. But maybe it is. Something sure is.

That's my focus now. Honing in...
Wayne Parham
 
Posts: 188
Joined: March 18th, 2022, 3:01 pm

PreviousNext

Return to Altair 8800c

Who is online

Users browsing this forum: No registered users and 2 guests

cron