I disassembled the loader track for the C4P version of DOS/65. It would fit in a 2K monitor ROM in a C1P (it's only 3 pages long)
So it's likely your modified C1P with the DOS/65 boot menu item has the DOS/65 loader in ROM since it's a menu item, and you are trying to boot a DOS/65 OS disk which starts with a $43, $57, $00 track 0 header. ( Sending the contents of your monitor ROM would confirm this. )
An unmodified OSI trying to boot a DOS/65 OS disk would try to read 256 pages of disk data to location $4357+
It would try to read 64K of data from track 0 to consecutive addresses, eventually writing over the disk controller ports @ $C000 and disk ACIA, most likely hanging at that time waiting on ACIA data that never arrives due to controller settings corruption.
So since HEXDOS and OS65D work correctly, your memory expansion is likely operating correctly!
If you are able to send the contents of the DOS/65 Disk you are using with
OSI Dump, and/or the contents of the monitor ROM, we could create a bootable DOS/65 loader disk for your new system. Otherwise you'll need to clone your boot ROM for your new system.
Below is the DOS/65 C4P loader partial disassembly, which could be assembled to create a monitor loadable file for C4P, or relocated and stuck in ROM somewhere.
-Mark
Code: Select all
*=$2200
;DOS/65 loader for C2/C4/C8 disk systems & OSI540 video
;looks like $00-$7F read from 1st sector of disk track1
;rest of data loads at $2506+
.EXE * ;emit a65 loader address
L2200 LDA #$20
STA $8A
LDA #$40
STA $89
LDX #$FF
TXS
CLD
SEI
JMP L2217
.BYTE $02,$20,$00,$01,$88,$00,$10
L2217 LDA #<MSGBOOT ;#$E4
LDY #>MSGBOOT ;#$22
L221B JSR PRINTMSG
L221E JSR $FD00 ;get key from polled keyboard
CMP #$0D
BNE L221E ;loop until <CR>
JSR OUTSCRN
LDA #$0A
JSR OUTSCRN
LDA #$40
LDY #$00
LDX #$04
STY $C001 ;initialize disk PIA
STA $C000
STX $C001
STA $C000
STY $C003
DEY
STY $C002
STX $C003
STY $C002
LDA $C000 ;bit 0 = drive 1 ready
LSR A
BCC L2260
LDA #<MSGNOTRDY ;#$2B
LDY #>MSGNOTRDY ;#$23
JSR PRINTMSG
LDA #<MSGINSERT ;#$F3
LDY #>MSGINSERT ;#$22
JMP L221B
L2260 JSR S23E8
JSR RDHEADR
BNE L227D
L2268 JSR INDISK
CMP #$76 ;sector marker
BNE L2268
JSR INDISK
CMP #$01 ;sector#
BNE L227D
JSR INDISK
CMP #$08 ;sector size
BEQ L228A
L227D LDA #<MSGHEADER ;#$3D
LDY #>MSGHEADER; #$23
L2281 JSR PRINTMSG
JSR S244D
JMP L2217
L228A LDX #$00 ;read track data
L228C LDA #$01
L228E BIT $C010 ;wait for char, & check parity
BEQ L228E
LDA $C011
BVS L229F ;Parity error?
STA $00,X ;store data from track, @lower zero page
INX
BPL L228C ;for 128 bytes
BMI L22A6
L229F LDA #<MSGPARITY ;#$57
LDY #>MSGPARITY ;#$23
JMP L2281
L22A6 JSR S24B8
BCC L22B3
LDA $88
AND #$01
BNE L227D
BEQ L229F
L22B3 JSR S249B
LDY #$00
L22B8 LDA ($82),Y
STA ($00),Y
INY
BPL L22B8
CLC
TYA
ADC $00
STA $00
BCC L22C9
INC $01
L22C9 DEC $04
BEQ L22E1
INC $06
LDA $06
CMP $05
BEQ L22B3
BCC L22B3
LDA #$01
STA $06
JSR S2407
JMP L22A6
L22E1 JMP ($0002)
MSGBOOT
.BYTE $0D,$0A,'DOS/65 LOADER'
MSGINSERT
.BYTE $0D,$0A,'INSERT DOS/65 DISK IN DRIVE A'
.BYTE $0D,$0A,'TYPE RETURN WHEN READY',0
MSGNOTRDY
.BYTE $0D,$0A,'DRIVE NOT READY',0
MSGHEADER
.BYTE $0D,$0A,'BAD HEADER - RESTARTING',0
MSGPARITY
.BYTE $0D,$0A,'PARITY ERROR - RESTARTING',0
PRINTMSG ;$2373
STA $80 ;message printer
STY $81
LDY #$00
STY $84
L237B LDY $84
INC $84
LDA ($80),Y
BNE L2384
RTS
L2384 JSR OUTSCRN
JMP L237B
OUTSCRN
PHA ;Write character in A to screen
PHA
LDX $89 ;get current cursor pos
LDA $8A ;get character under cursor
STA $D700,X ;restore character
PLA
CMP #$0D ;<CR>?
BEQ L23B0
CMP #$0A ;<LF>?
BEQ L23B8
STA $D700,X ;write new character to screen
INX ;move cursor+1
BMI L23B4 ;when X=$80 (D080) perform <LF>
L23A2 LDA $D700,X ;get character at cursor position
STA $8A ;store character
LDA #$5F
STA $D700,X ;write underscore cursor to screen
STX $89 ;save current line position
PLA
RTS
L23B0 LDX #$40 ;do <CR>
BNE L23A2
L23B4 LDX #$40 ;restore X to start of line
STX $89
L23B8 LDA #$C0 ;do <LF>
LDY #$D0
STA $8D ;$D0C0
STY $8E
LDA #$80
LDY #$D0
STA $8B
STY $8C ;$D080
LDX #$07 ;#pages to copy
LDY #$00
L23CC LDA ($8D),Y ;copy screen lines up
STA ($8B),Y
INY
BNE L23CC
INC $8E
INC $8C
DEX
BNE L23CC ;loop until all pages copied
LDA #$20
L23DC STA $D740,X ;erase bottom line $d740+
INX
CPX #$40
BNE L23DC
LDX $89
BNE L23A2
S23E8 JSR S2407
JSR S2435
L23EE LDA #$02
BIT $C000 ;test @ trk 0? (0=trk0)
BNE L23FA
LDA #$00
STA $87 ;store current trk# (?)
RTS
L23FA JSR S2400
JMP L23EE
S2400 LDA $C002 ;set step direction down to 0
ORA #$04
BNE L240E
S2407 INC $87 ;increment current trk#
LDA $C002 ;set step direction up to 39
AND #$FB
L240E STA $C002
JSR S2430 ;(short delay)
AND #$F7
STA $C002 ;step on 1->0 transition
JSR S2431 ;(longer delay)
ORA #$08
STA $C002 ;un step
LDX #$08
JMP L2437 ;long delay *8
S2426 JSR S242E
DEY
BNE S2426
NOP
RTS
S242E BNE S2430
S2430 RTS
S2431 JSR S2430
RTS
S2435 LDX #$0C ;long delay *c
L2437 LDY #$FF
JSR S2426
DEX
BNE L2437
RTS
S2440 LDA #$7F ;load head
AND $C002
STA $C002
LDX #$28
JMP L2437 ;(long delay *$28)
S244D LDA #$80 ;unload head
ORA $C002
STA $C002
RTS
RDHEADR ;$2456
JSR S2440 ;load head
SEI
L245A LDA $C000 ;wait for index start
BMI L245A
L245F LDA $C000 ;wait for index end
BPL L245F
LDA #$03
STA $C010 ;reset disk ACIA
LDA #$58
STA $C010 ;8E1 /1 NO RTS NO txIRQ NO rxIRQ
L246E LDA $C000
BPL L248E ;drive 1 ready?
JSR INDISK ;read disk
L2476 CMP #$43
BNE L246E
JSR INDISK
CMP #$57 ;look for $43,$57,trk#
BNE L2476
JSR INDISK
CMP $87 ;target track# match?
BNE L248D
JSR INDISK
CMP #$58
L248D RTS
L248E LDA #$01
RTS
INDISK ;$2491
LDA $C010 ;read value from disk
LSR A
BCC INDISK
LDA $C011
RTS
S249B LDA $06
SEC
SBC #$01
LDY #$00
STY $83
LDY #$07
L24A6 ASL A
ROL $83
DEY
BNE L24A6
CLC
ADC #$06
STA $82
LDA $83
ADC #$25
STA $83
RTS
S24B8 LDA #$06 ;read data from disk
LDY #$25 ;to $2506+
STA $85
STY $86
LDA #$00
STA $88
JSR RDHEADR
BNE L24FA
L24C9 JSR INDISK
CMP #$76 ;sector marker
BNE L24C9
JSR INDISK
CMP #$01 ;sector #
BNE L24FA
JSR INDISK
CMP #$08 ;sector size
BNE L24FA
TAX ;# pages to read in X
LDY #$00
L24E1 LDA #$01
L24E3 BIT $C010 ;wait for ACIA ready & check PE
BEQ L24E3
LDA $C011 ;reading ACIA clears PE
BVS L24FE
STA ($85),Y
INY
BNE L24E1
INC $86
DEX
BNE L24E1 ;loop till all sector read
CLC
BCC L2503
L24FA LDA #$01 ;entry for seek trk 1 ?
BNE L2500
L24FE LDA #$02 ;entry for seek trk 2 ?
L2500 STA $88 ;$88 = target track
SEC ;flag not done yet
L2503 JMP S244D ;done, unload head & return