Hello, with some more dumb questions. I don't know how to make this work properly; in each emu i tested it in (FCEU, Nintendulator, JNes, and no$nes) yielded diffent views of sprites 0 & 1. I guess this is some quirk of $2003 and $2004 that the more mature emus are emulating.
Some of the lack of efficiency was intended, I planned to extend the code.
Code:
MainLoop:
lda #1
sta $4016
lda #0
sta $4016
lda $4016
lda $4016
lda $4016
lda $4016
lda $4016 ; Up
and #$01
beq UpReleased
lda Player0Stat
ora #%00001000
and #%11111011
sta Player0Stat
UpReleased:
lda $4016 ; Down
and #$01
beq DownReleased
lda Player0Stat
ora #%00000100
and #%11110111
sta Player0Stat
DownReleased:
lda $4016 ; Left
and #$01
beq LeftReleased
lda Player0Stat
ora #%00000010
and #%11111110
sta Player0Stat
LeftReleased:
lda $4016 ; Right
and #$01
beq RightReleased
lda Player0Stat
ora #%00000001
and #%11111101
sta Player0Stat
RightReleased:
VBl2: lda $2002
bpl VBl2
; Rendering code
lda Player0Stat
and #%1000
bne DrawNoUp
lda #0
sta $2003
inc $2004
lda #4
sta $2003
inc $2004
DrawNoUp:
lda Player0Stat
and #%0100
bne DrawNoDown
lda #0
sta $2003
dec $2004
lda #4
sta $2003
dec $2004
DrawNoDown:
lda Player0Stat
and #%0010
bne DrawNoLeft
lda #3
sta $2003
inc $2004
lda #7
sta $2003
inc $2004
DrawNoLeft:
lda Player0Stat
and #%0001
bne DrawNoRight
lda #3
sta $2003
dec $2004
lda #7
sta $2003
dec $2004
DrawNoRight:
jmp MainLoop
lda #1
sta $4016
lda #0
sta $4016
lda $4016
lda $4016
lda $4016
lda $4016
lda $4016 ; Up
and #$01
beq UpReleased
lda Player0Stat
ora #%00001000
and #%11111011
sta Player0Stat
UpReleased:
lda $4016 ; Down
and #$01
beq DownReleased
lda Player0Stat
ora #%00000100
and #%11110111
sta Player0Stat
DownReleased:
lda $4016 ; Left
and #$01
beq LeftReleased
lda Player0Stat
ora #%00000010
and #%11111110
sta Player0Stat
LeftReleased:
lda $4016 ; Right
and #$01
beq RightReleased
lda Player0Stat
ora #%00000001
and #%11111101
sta Player0Stat
RightReleased:
VBl2: lda $2002
bpl VBl2
; Rendering code
lda Player0Stat
and #%1000
bne DrawNoUp
lda #0
sta $2003
inc $2004
lda #4
sta $2003
inc $2004
DrawNoUp:
lda Player0Stat
and #%0100
bne DrawNoDown
lda #0
sta $2003
dec $2004
lda #4
sta $2003
dec $2004
DrawNoDown:
lda Player0Stat
and #%0010
bne DrawNoLeft
lda #3
sta $2003
inc $2004
lda #7
sta $2003
inc $2004
DrawNoLeft:
lda Player0Stat
and #%0001
bne DrawNoRight
lda #3
sta $2003
dec $2004
lda #7
sta $2003
dec $2004
DrawNoRight:
jmp MainLoop
Some of the lack of efficiency was intended, I planned to extend the code.