-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhellomario.s
144 lines (123 loc) · 2.73 KB
/
hellomario.s
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
136
137
138
139
140
141
142
143
144
.segment "HEADER"
.byte "NES"
.byte $1a
.byte $02 ; 2 * 16KB PRG ROM
.byte $01 ; 1 * 8KB CHR ROM
.byte %00000001 ; mapper and mirroring
.byte $00
.byte $00
.byte $00
.byte $00
.byte $00, $00, $00, $00, $00 ; filler bytes
.segment "ZEROPAGE" ; LSB 0 - FF
.segment "STARTUP"
Reset:
SEI ; Disables all interrupts
CLD ; disable decimal mode
; Disable sound IRQ
LDX #$40
STX $4017
; Initialize the stack register
LDX #$FF
TXS
INX ; #$FF + 1 => #$00
; Zero out the PPU registers
STX $2000
STX $2001
STX $4010
:
BIT $2002
BPL :-
TXA
CLEARMEM:
STA $0000, X ; $0000 => $00FF
STA $0100, X ; $0100 => $01FF
STA $0300, X
STA $0400, X
STA $0500, X
STA $0600, X
STA $0700, X
LDA #$FF
STA $0200, X ; $0200 => $02FF
LDA #$00
INX
BNE CLEARMEM
; wait for vblank
:
BIT $2002
BPL :-
LDA #$02
STA $4014
NOP
; $3F00
LDA #$3F
STA $2006
LDA #$00
STA $2006
LDX #$00
LoadPalettes:
LDA PaletteData, X
STA $2007 ; $3F00, $3F01, $3F02 => $3F1F
INX
CPX #$20
BNE LoadPalettes
LDX #$00
LoadSprites:
LDA SpriteData, X
STA $0200, X
INX
CPX #$20
BNE LoadSprites
; Clear the nametables- this isn't necessary in most emulators unless
; you turn on random memory power-on mode, but on real hardware
; not doing this means that the background / nametable will have
; random garbage on screen. This clears out nametables starting at
; $2000 and continuing on to $2400 (which is fine because we have
; vertical mirroring on. If we used horizontal, we'd have to do
; this for $2000 and $2800)
LDX #$00
LDY #$00
LDA $2002
LDA #$20
STA $2006
LDA #$00
STA $2006
ClearNametable:
STA $2007
INX
BNE ClearNametable
INY
CPY #$08
BNE ClearNametable
; Enable interrupts
CLI
LDA #%10010000 ; enable NMI change background to use second chr set of tiles ($1000)
STA $2000
; Enabling sprites and background for left-most 8 pixels
; Enable sprites and background
LDA #%00011110
STA $2001
Loop:
JMP Loop
NMI:
LDA #$02 ; copy sprite data from $0200 => PPU memory for display
STA $4014
RTI
PaletteData:
.byte $22,$29,$1A,$0F,$22,$36,$17,$0f,$22,$30,$21,$0f,$22,$27,$17,$0F ;background palette data
.byte $22,$16,$27,$18,$22,$1A,$30,$27,$22,$16,$30,$27,$22,$0F,$36,$17 ;sprite palette data
SpriteData:
.byte $08, $00, $00, $08
.byte $08, $01, $00, $10
.byte $10, $02, $00, $08
.byte $10, $03, $00, $10
.byte $18, $04, $00, $08
.byte $18, $05, $00, $10
.byte $20, $06, $00, $08
.byte $20, $07, $00, $10
.segment "VECTORS"
.word NMI
.word Reset
;
.segment "CHARS"
.incbin "mario.chr"