blob: 56ccee5b59d8817e4cadcd11385c12c53a459f24 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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"
|