subroutines in the past and I have the feeling that I shouldn't be having so much trouble with such a simple thing.
My first suspect was that my 1024*4-bit SRAM chips are faulty. I tried writing $FF and $00 to $0100 and $0101 (where the stack pointer should be after reset?) And then
reading those bytes back and outputting them onto port B of my PIA. I got no bits set/not set when they shouldn't have been.
I know that the MC6845's registers get set properly. With the following program:
Code: Select all
PIA_PORT_A = $b000
PIA_CONTR_REG_A = $b001
PIA_PORT_B = $b002
PIA_CONTR_REG_B = $b003
CRTC_ADDR_REG = $a000
CRTC_DATA_REG = $a001
reset:
lda #$00 ;
sta PIA_CONTR_REG_A ; Select data direction of port A
sta PIA_CONTR_REG_B ; and of port B
lda #$ff ;
sta PIA_PORT_A ; Set data direction to all outputs
sta PIA_PORT_B ;
lda #$04 ;
sta PIA_CONTR_REG_A ; Select I/O register of port A
lda #$24 ;
sta PIA_CONTR_REG_B ; and of port B???
lda #$55
sta $0300
lda $0300
sta PIA_PORT_B
lda #0
sta CRTC_ADDR_REG
lda #63
sta CRTC_DATA_REG
lda #1
sta CRTC_ADDR_REG
lda #40
sta CRTC_DATA_REG
lda #2
sta CRTC_ADDR_REG
lda #50
sta CRTC_DATA_REG
lda #3
sta CRTC_ADDR_REG
lda #8
sta CRTC_DATA_REG
lda #4
sta CRTC_ADDR_REG
lda #32
sta CRTC_DATA_REG
lda #5
sta CRTC_ADDR_REG
lda #16
sta CRTC_DATA_REG
lda #6
sta CRTC_ADDR_REG
lda #25
sta CRTC_DATA_REG
lda #7
sta CRTC_ADDR_REG
lda #29
sta CRTC_DATA_REG
lda #9
sta CRTC_ADDR_REG
lda #8
sta CRTC_DATA_REG
correctly or let the rest of the program run:
Code: Select all
reset:
jsr init_crtc
lda #$00 ;
sta PIA_CONTR_REG_A ; Select data direction of port A
sta PIA_CONTR_REG_B ; and of port B
lda #$ff ;
sta PIA_PORT_A ; Set data direction to all outputs
sta PIA_PORT_B ;
lda #$04 ;
sta PIA_CONTR_REG_A ; Select I/O register of port A
lda #$24 ;
sta PIA_CONTR_REG_B ; and of port B???
lda #$55
sta $0300
lda $0300
sta PIA_PORT_B
loop:
jmp loop
init_crtc:
lda #0
sta CRTC_ADDR_REG
lda #63
sta CRTC_DATA_REG
lda #1
sta CRTC_ADDR_REG
lda #40
sta CRTC_DATA_REG
lda #2
sta CRTC_ADDR_REG
lda #50
sta CRTC_DATA_REG
lda #3
sta CRTC_ADDR_REG
lda #8
sta CRTC_DATA_REG
lda #4
sta CRTC_ADDR_REG
lda #32
sta CRTC_DATA_REG
lda #5
sta CRTC_ADDR_REG
lda #16
sta CRTC_DATA_REG
lda #6
sta CRTC_ADDR_REG
lda #25
sta CRTC_DATA_REG
lda #7
sta CRTC_ADDR_REG
lda #29
sta CRTC_DATA_REG
lda #9
sta CRTC_ADDR_REG
lda #8
sta CRTC_DATA_REG
rts
I'm stumped.