Hallo allemaal,
Some extra info on the problem:
I ran the code without an HD attached. The code I used doesn't test the HD
so, with or without the HD, the same code is run every time. W/O the HD the
C64 behaves normal, I tried it over 10 times. But the first time you attach
a HD, bingo :(
Here is the part in question:
;** CIA1 - 6526 **
.eq C1DRA = $DC00 ; data register port A
.eq C1DRB = $DC01 ; data register port B
.eq C1DDRA = $DC02 ; data direction register port A
.eq C1DDRB = $DC03 ; data direction register port B
;** CIA2 - 6526 **
.eq C2DRA = $DD00 ; data register port A
.eq C2DRB = $DD01 ; data register port B
.eq C2DDRA = $DD02 ; data direction register port A
.eq C2DDRB = $DD03 ; data direction register port B
; Port B pinout:
; 0 = A0
; 1 = A1
; 2 = A2
; 3 = future
; 4 = CS0
; 5 = CS1
; 6 = IOWR
; 7 = IORD
; A0..3
; 0 dataregister
; 1 errorregister / write precompensation
; 2 sector count
; 3 sector number
; 4 track LB
; 5 track HB
; 6 0..3 head
; 4 drive select
; 5..7 101
; 7 commandregister
; statusregister
; 0 previous command ended in error
; 1 index set to 1 each disk revolution
; 2 disk data read succesfully correctd
; 3 sector buffer requires servicing
; 4 seek complete
; 5 write fault
; 6 drive is ready
; 7 controller is executing command
.ba $8000
TestArea nop
jsr ShowCIAs
sei
jsr SaveKBset
jsr InitUserPort
jsr DataOut
lda #$E0
sta C1DRA ; Command to port A
lda #$EF ; address 7, CS0 (L)
sta C2DRB
and #$7F ; IOWR (L)
sta C2DRB
ora #$80 ; IOWR (H)
sta C2DRB
lda #$FF ; all (H)
sta C2DRB
;** Read status
jsr DataIn
lda #7
pha
lda #$FF
sta C2DDRB
sta C2DRB
pla
ora #$F8 ; only last 3 bits may be reset
sta C2DRB
and #$EF ; CSO (L)
sta C2DRB
and #$BF ; IORD (L)
sta C2DRB
lda C1DRA
pha
lda C2DRB
ora #$40 ; IORD (H)
sta C2DRB
lda #$FF ; all (H)
sta C2DRB
pla
sta 1064
cli
jsr RestKBset
cli
nop
rts
;---------------------------------------------------------------------------
-
ShowCIAs ldx #15
ldy #61
Lsc001 lda C1DRA,X
stx $FF
jsr Hex2Ascii
sta 1064,y
dey
txa
sta 1064,y
dey
dey
dey
ldx $FF
dex
bpl Lsc001
ldx #15
ldy #61
Lsc002 lda C2DRA,X
stx $FF
jsr Hex2Ascii
sta 1144,y
dey
txa
sta 1144,y
dey
dey
dey
ldx $FF
dex
bpl Lsc002
rts
ShowCIAs2 ldx #15
ldy #61
Lsc003 lda C1DRA,X
stx $FF
jsr Hex2Ascii
sta 1264,y
dey
txa
sta 1264,y
dey
dey
dey
ldx $FF
dex
bpl Lsc003
ldx #15
ldy #61
Lsc004 lda C2DRA,X
stx $FF
jsr Hex2Ascii
sta 1344,y
dey
txa
sta 1344,y
dey
dey
dey
ldx $FF
dex
bpl Lsc004
rts
;---------------------------------------------------------------------------
-
;** Set dataports to input
DataIn jsr SaveKBset
pha ; save A
lda #$00
sta C1DDRA ; port A to input
sta C1DDRB ; port B to input
pla ; restore A
rts
;** Set dataports to output
DataOut jsr SaveKBset
pha ; save A
lda #$FF
sta C1DDRA ; port A to output
sta C1DDRB ; port B to output
pla ; restore A
rts
;** Convert HEX into ASCII
;- in: A hex byte
;- out: A low nibble
; X high nibble
Hex2Ascii pha
lsr
lsr
lsr
lsr
jsr Lha000
tax
pla
and #$0F
jsr Lha000
rts
Lha000 cmp #10
bcc Lha001
sbc #9
rts
Lha001 adc #48
rts
;** Init IDE-port
InitIDE pha
lda #$FF
sta KBparams ; keyboard settings not saved
pla
jsr InitUserPort
jsr Recalibrate
rts
;** Init IDE-port
InitUserPort sei
pha
lda #$FF
sta C2DRB ; all outputs userport (H)
sta C2DDRB ; all pins userport output
pla
rts
;** Restore keyboard settings
RestKBset pha
lda KBparams ; settings already restored?
;#### bne Lre0010 ; yes, ->
lda #$FF
sta KBparams
lda KBparams+1
sta C1DRA
lda KBparams+2
sta C1DDRA
lda KBparams+3
sta C1DRB
lda KBparams+4
sta C1DDRB
;####
lda #$FF
sta C1DDRA
lda #$00
sta C1DDRB
Lre0010 pla
rts
;** Save keyboard settings
SaveKBset jsr InitUserPort
pha
lda KBparams ; settings already saved?
beq Lre0010 ; yes, ->
lda #0
sta KBparams
lda C1DRA
sta KBparams+1
lda C1DDRA
sta KBparams+2
lda C1DRB
sta KBparams+3
lda C1DDRB
sta KBparams+4
Lsa0010 pla
rts
;===========================================================================
=
;** Storage
DataL .by 0
DataH .by 0
KBparams .by 0, 0, 0, 0, 0
.en
___
/ __|__
/ / |_/ Groetjes, Ruud
\ \__|_\
\___| http://Ruud.C64.org
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail 2.1.1.