summaryrefslogtreecommitdiffstats
path: root/static/blog/input.s
diff options
context:
space:
mode:
Diffstat (limited to 'static/blog/input.s')
-rw-r--r--static/blog/input.s135
1 files changed, 135 insertions, 0 deletions
diff --git a/static/blog/input.s b/static/blog/input.s
new file mode 100644
index 0000000..56ccee5
--- /dev/null
+++ b/static/blog/input.s
@@ -0,0 +1,135 @@
+.ROMBANKMAP
+BANKSTOTAL 2
+BANKSIZE $4000
+BANKS 1
+BANKSIZE $2000
+BANKS 1
+.ENDRO
+
+.MEMORYMAP
+DEFAULTSLOT 0
+SLOTSIZE $4000
+SLOT 0 $C000
+SLOTSIZE $2000
+SLOT 1 $0000
+.ENDME
+
+.ENUM $00
+sleeping DB
+color DB
+frame_count DB
+.ENDE
+
+ .bank 0 slot 0
+ .org $0000
+RESET:
+ SEI
+ CLD
+ LDX #$FF
+ TXS
+ INX
+ STX $2000.w
+ STX $2001.w
+ STX $4010.w
+ LDX #$40
+ STX $4017.w
+
+vblankwait1:
+ BIT $2002
+ BPL vblankwait1
+
+clrmem:
+ LDA #$00
+ STA $0000, x
+ STA $0100, x
+ STA $0300, x
+ STA $0400, x
+ STA $0500, x
+ STA $0600, x
+ STA $0700, x
+ LDA #$FE
+ STA $0200, x
+ INX
+ BNE clrmem
+
+ LDA #%10000001
+ STA color
+
+vblankwait2:
+ BIT $2002
+ BPL vblankwait2
+
+ LDA #%10000000
+ STA $2000
+
+loop:
+ INC sleeping
+wait_for_vblank_end:
+ LDA sleeping
+ BNE wait_for_vblank_end
+
+ ; controller 1 latch
+ LDA #$01
+ STA $4016
+ LDA #$00
+ STA $4016
+
+ ; controller 1 clock, reading the state of the A button
+ LDA $4016
+ AND #%00000001
+ BNE change_color
+ JMP loop_end
+ ; reading the rest of the buttons is unnecessary, so we don't do it
+
+change_color:
+ LDA #$00
+ STA frame_count
+ LDX color
+ CPX #%10000001
+ BEQ turn_green
+ CPX #%01000001
+ BEQ turn_red
+
+turn_blue:
+ LDA #%10000001
+ STA color
+ JMP loop_end
+turn_green:
+ LDA #%01000001
+ STA color
+ JMP loop_end
+turn_red:
+ LDA #%00100001
+ STA color
+
+loop_end:
+ JMP loop
+
+NMI:
+ PHA
+ TXA
+ PHA
+ TYA
+ PHA
+
+ LDA color
+ STA $2001
+
+ LDA #$00
+ STA sleeping
+ PLA
+ TAY
+ PLA
+ TAX
+ PLA
+
+ RTI
+
+ .orga $FFFA
+ .dw NMI
+ .dw RESET
+ .dw 0
+
+ .bank 1 slot 1
+ .org $0000
+ .incbin "sprites.chr"