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.