rubygb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +5 -0
- data/.travis.yml +20 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +23 -0
- data/MIT-LICENSE.txt +53 -0
- data/README.md +30 -0
- data/Rakefile +30 -0
- data/bin/rubygb +5 -0
- data/lib/galp/AND.GIF +0 -0
- data/lib/galp/ARROW.GIF +0 -0
- data/lib/galp/C.BAT +5 -0
- data/lib/galp/CHANGES.TXT +5 -0
- data/lib/galp/EXAMPLE.LNK +7 -0
- data/lib/galp/EXAMPLE1.TXT +266 -0
- data/lib/galp/GBHW.TXT +645 -0
- data/lib/galp/GBSPEC.TXT +1761 -0
- data/lib/galp/IBMPC1.TXT +2400 -0
- data/lib/galp/INDEX.HTM +23 -0
- data/lib/galp/INSTR.HTM +563 -0
- data/lib/galp/MEM1.HTM +199 -0
- data/lib/galp/MEMORY.TXT +160 -0
- data/lib/galp/OPCODES.HTM +351 -0
- data/lib/galp/OR.GIF +0 -0
- data/lib/galp/README.TXT +4 -0
- data/lib/galp/REGS.HTM +77 -0
- data/lib/galp/RL.GIF +0 -0
- data/lib/galp/RLC.GIF +0 -0
- data/lib/galp/RR.GIF +0 -0
- data/lib/galp/RRC.GIF +0 -0
- data/lib/galp/SETUP.BAT +7 -0
- data/lib/galp/SLA.GIF +0 -0
- data/lib/galp/SRA.GIF +0 -0
- data/lib/galp/SRL.GIF +0 -0
- data/lib/galp/START.HTM +24 -0
- data/lib/galp/SWAP.GIF +0 -0
- data/lib/galp/VID1.HTM +34 -0
- data/lib/galp/XOR.GIF +0 -0
- data/lib/rgbds/rgbasm +0 -0
- data/lib/rgbds/rgbfix +0 -0
- data/lib/rgbds/rgblink +0 -0
- data/lib/rubygb/cli.rb +11 -0
- data/lib/rubygb/rubygb.rb +15 -0
- data/lib/rubygb/version.rb +4 -0
- data/lib/rubygb.rb +7 -0
- data/rubygb.gemspec +23 -0
- data/scrap/basic.gb +0 -0
- data/scrap/basic.map +55 -0
- data/scrap/basic.obj +0 -0
- data/scrap/basic.s +176 -0
- data/scrap/basic.sym +8 -0
- data/spec/basic.s +176 -0
- data/spec/rubygb_spec.rb +19 -0
- metadata +129 -0
data/lib/galp/GBHW.TXT
ADDED
@@ -0,0 +1,645 @@
|
|
1
|
+
;*
|
2
|
+
;* GBHW.INC - Gameboy Hardware definitions for GALP
|
3
|
+
;*
|
4
|
+
;* by GABY. Inspired from work done by Carsten Sorensen & others.
|
5
|
+
;*
|
6
|
+
;* V1.0 - The original version
|
7
|
+
;*
|
8
|
+
|
9
|
+
; If all of these are already defined, don't do it again.
|
10
|
+
|
11
|
+
IF !DEF(HARDWARE_INC)
|
12
|
+
HARDWARE_INC SET 1
|
13
|
+
|
14
|
+
rev_Check_hardware_inc: MACRO
|
15
|
+
;NOTE: REVISION NUMBER CHANGES MUST BE ADDED
|
16
|
+
;TO SECOND PARAMETER IN FOLLOWING LINE.
|
17
|
+
IF \1 > 1.0 ;PUT REVISION NUMBER HERE
|
18
|
+
WARN "Version \1 or later of 'gbhw.inc' is required."
|
19
|
+
ENDC
|
20
|
+
ENDM
|
21
|
+
|
22
|
+
_HW EQU $FF00
|
23
|
+
|
24
|
+
_VRAM EQU $8000 ; $8000->$A000
|
25
|
+
_SCRN0 EQU $9800 ; $9800->$9BFF
|
26
|
+
_SCRN1 EQU $9C00 ; $9C00->$9FFF
|
27
|
+
_RAM EQU $C000 ; $C000->$E000
|
28
|
+
_HRAM EQU $F800 ; $F800->$FFFE
|
29
|
+
_OAMRAM EQU $FE00 ; $FE00->$FE9F
|
30
|
+
_AUD3WAVERAM EQU $FF30 ; $FF30->$FF3F
|
31
|
+
|
32
|
+
|
33
|
+
; --
|
34
|
+
; -- OAM flags
|
35
|
+
; --
|
36
|
+
|
37
|
+
OAMF_PRI EQU %10000000 ; Priority
|
38
|
+
OAMF_YFLIP EQU %01000000 ; Y flip
|
39
|
+
OAMF_XFLIP EQU %00100000 ; X flip
|
40
|
+
OAMF_PAL0 EQU %00000000 ; Palette number; 0,1
|
41
|
+
OAMF_PAL1 EQU %00010000 ; Palette number; 0,1
|
42
|
+
|
43
|
+
|
44
|
+
;***************************************************************************
|
45
|
+
;*
|
46
|
+
;* Custom registers
|
47
|
+
;*
|
48
|
+
;***************************************************************************
|
49
|
+
|
50
|
+
; --
|
51
|
+
; -- P1 ($FF00)
|
52
|
+
; -- Register for reading joy pad info. (R/W)
|
53
|
+
; --
|
54
|
+
rP1 EQU $FF00
|
55
|
+
|
56
|
+
P1F_5 EQU %00100000 ; P15 out port
|
57
|
+
P1F_4 EQU %00010000 ; P14 out port
|
58
|
+
P1F_3 EQU %00001000 ; P13 in port
|
59
|
+
P1F_2 EQU %00000100 ; P12 in port
|
60
|
+
P1F_1 EQU %00000010 ; P11 in port
|
61
|
+
P1F_0 EQU %00000001 ; P10 in port
|
62
|
+
|
63
|
+
|
64
|
+
; --
|
65
|
+
; -- LCDC ($FF40)
|
66
|
+
; -- LCD Control (R/W)
|
67
|
+
; --
|
68
|
+
rLCDC EQU $FF40
|
69
|
+
|
70
|
+
LCDCF_OFF EQU %00000000 ; LCD Control Operation
|
71
|
+
LCDCF_ON EQU %10000000 ; LCD Control Operation
|
72
|
+
LCDCF_WIN9800 EQU %00000000 ; Window Tile Map Display Select
|
73
|
+
LCDCF_WIN9C00 EQU %01000000 ; Window Tile Map Display Select
|
74
|
+
LCDCF_WINOFF EQU %00000000 ; Window Display
|
75
|
+
LCDCF_WINON EQU %00100000 ; Window Display
|
76
|
+
LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select
|
77
|
+
LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select
|
78
|
+
LCDCF_BG9800 EQU %00000000 ; BG Tile Map Display Select
|
79
|
+
LCDCF_BG9C00 EQU %00001000 ; BG Tile Map Display Select
|
80
|
+
LCDCF_OBJ8 EQU %00000000 ; OBJ Construction
|
81
|
+
LCDCF_OBJ16 EQU %00000100 ; OBJ Construction
|
82
|
+
LCDCF_OBJOFF EQU %00000000 ; OBJ Display
|
83
|
+
LCDCF_OBJON EQU %00000010 ; OBJ Display
|
84
|
+
LCDCF_BGOFF EQU %00000000 ; BG Display
|
85
|
+
LCDCF_BGON EQU %00000001 ; BG Display
|
86
|
+
; "Window Character Data Select" follows BG
|
87
|
+
|
88
|
+
|
89
|
+
; --
|
90
|
+
; -- STAT ($FF41)
|
91
|
+
; -- LCDC Status (R/W)
|
92
|
+
; --
|
93
|
+
rSTAT EQU $FF41
|
94
|
+
|
95
|
+
STATF_LYC EQU %01000000 ; LYCEQULY Coincidence (Selectable)
|
96
|
+
STATF_MODE10 EQU %00100000 ; Mode 10
|
97
|
+
STATF_MODE01 EQU %00010000 ; Mode 01 (V-Blank)
|
98
|
+
STATF_MODE00 EQU %00001000 ; Mode 00 (H-Blank)
|
99
|
+
STATF_LYCF EQU %00000100 ; Coincidence Flag
|
100
|
+
STATF_HB EQU %00000000 ; H-Blank
|
101
|
+
STATF_VB EQU %00000001 ; V-Blank
|
102
|
+
STATF_OAM EQU %00000010 ; OAM-RAM is used by system
|
103
|
+
STATF_LCD EQU %00000011 ; Both OAM and VRAM used by system
|
104
|
+
STATF_BUSY EQU %00000010 ; When set, VRAM access is unsafe
|
105
|
+
|
106
|
+
|
107
|
+
; --
|
108
|
+
; -- SCY ($FF42)
|
109
|
+
; -- Scroll Y (R/W)
|
110
|
+
; --
|
111
|
+
rSCY EQU $FF42
|
112
|
+
|
113
|
+
|
114
|
+
; --
|
115
|
+
; -- SCY ($FF43)
|
116
|
+
; -- Scroll X (R/W)
|
117
|
+
; --
|
118
|
+
rSCX EQU $FF43
|
119
|
+
|
120
|
+
|
121
|
+
; --
|
122
|
+
; -- LY ($FF44)
|
123
|
+
; -- LCDC Y-Coordinate (R)
|
124
|
+
; --
|
125
|
+
; -- Values range from 0->153. 144->153 is the VBlank period.
|
126
|
+
; --
|
127
|
+
rLY EQU $FF44
|
128
|
+
|
129
|
+
|
130
|
+
; --
|
131
|
+
; -- LYC ($FF45)
|
132
|
+
; -- LY Compare (R/W)
|
133
|
+
; --
|
134
|
+
; -- When LYEQUEQULYC, STATF_LYCF will be set in STAT
|
135
|
+
; --
|
136
|
+
rLYC EQU $FF45
|
137
|
+
|
138
|
+
|
139
|
+
; --
|
140
|
+
; -- DMA ($FF46)
|
141
|
+
; -- DMA Transfer and Start Address (W)
|
142
|
+
; --
|
143
|
+
rDMA EQU $FF46
|
144
|
+
|
145
|
+
|
146
|
+
; --
|
147
|
+
; -- BGP ($FF47)
|
148
|
+
; -- BG Palette Data (W)
|
149
|
+
; --
|
150
|
+
; -- Bit 7-6 - Intensity for %11
|
151
|
+
; -- Bit 5-4 - Intensity for %10
|
152
|
+
; -- Bit 3-2 - Intensity for %01
|
153
|
+
; -- Bit 1-0 - Intensity for %00
|
154
|
+
; --
|
155
|
+
rBGP EQU $FF47
|
156
|
+
|
157
|
+
|
158
|
+
; --
|
159
|
+
; -- OBP0 ($FF48)
|
160
|
+
; -- Object Palette 0 Data (W)
|
161
|
+
; --
|
162
|
+
; -- See BGP for info
|
163
|
+
; --
|
164
|
+
rOBP0 EQU $FF48
|
165
|
+
|
166
|
+
|
167
|
+
; --
|
168
|
+
; -- OBP1 ($FF49)
|
169
|
+
; -- Object Palette 1 Data (W)
|
170
|
+
; --
|
171
|
+
; -- See BGP for info
|
172
|
+
; --
|
173
|
+
rOBP1 EQU $FF49
|
174
|
+
|
175
|
+
|
176
|
+
; --
|
177
|
+
; -- SB ($FF01)
|
178
|
+
; -- Serial Transfer Data (R/W)
|
179
|
+
; --
|
180
|
+
rSB EQU $FF01
|
181
|
+
|
182
|
+
; --
|
183
|
+
; -- SC ($FF02)
|
184
|
+
; -- Serial I/O Control (R/W)
|
185
|
+
; --
|
186
|
+
rSC EQU $FF02
|
187
|
+
|
188
|
+
; --
|
189
|
+
; -- DIV ($FF04)
|
190
|
+
; -- Divider register (R/W)
|
191
|
+
; --
|
192
|
+
rDIV EQU $FF04
|
193
|
+
|
194
|
+
|
195
|
+
; --
|
196
|
+
; -- TIMA ($FF05)
|
197
|
+
; -- Timer counter (R/W)
|
198
|
+
; --
|
199
|
+
rTIMA EQU $FF05
|
200
|
+
|
201
|
+
|
202
|
+
; --
|
203
|
+
; -- TMA ($FF06)
|
204
|
+
; -- Timer modulo (R/W)
|
205
|
+
; --
|
206
|
+
rTMA EQU $FF06
|
207
|
+
|
208
|
+
|
209
|
+
; --
|
210
|
+
; -- TAC ($FF07)
|
211
|
+
; -- Timer control (R/W)
|
212
|
+
; --
|
213
|
+
rTAC EQU $FF07
|
214
|
+
|
215
|
+
TACF_START EQU %00000100
|
216
|
+
TACF_STOP EQU %00000000
|
217
|
+
TACF_4KHZ EQU %00000000
|
218
|
+
TACF_16KHZ EQU %00000011
|
219
|
+
TACF_65KHZ EQU %00000010
|
220
|
+
TACF_262KHZ EQU %00000001
|
221
|
+
|
222
|
+
|
223
|
+
; --
|
224
|
+
; -- IF ($FF0F)
|
225
|
+
; -- Interrupt Flag (R/W)
|
226
|
+
; --
|
227
|
+
; -- IE ($FFFF)
|
228
|
+
; -- Interrupt Enable (R/W)
|
229
|
+
; --
|
230
|
+
rIF EQU $FF0F
|
231
|
+
rIE EQU $FFFF
|
232
|
+
|
233
|
+
IEF_HILO EQU %00010000 ; Transition from High to Low of Pin number P10-P13
|
234
|
+
IEF_SERIAL EQU %00001000 ; Serial I/O transfer end
|
235
|
+
IEF_TIMER EQU %00000100 ; Timer Overflow
|
236
|
+
IEF_LCDC EQU %00000010 ; LCDC (see STAT)
|
237
|
+
IEF_VBLANK EQU %00000001 ; V-Blank
|
238
|
+
|
239
|
+
|
240
|
+
; --
|
241
|
+
; -- WY ($FF4A)
|
242
|
+
; -- Window Y Position (R/W)
|
243
|
+
; --
|
244
|
+
; -- 0 <EQU WY <EQU 143
|
245
|
+
; --
|
246
|
+
rWY EQU $FF4A
|
247
|
+
|
248
|
+
|
249
|
+
; --
|
250
|
+
; -- WX ($FF4B)
|
251
|
+
; -- Window X Position (R/W)
|
252
|
+
; --
|
253
|
+
; -- 7 <EQU WX <EQU 166
|
254
|
+
; --
|
255
|
+
rWX EQU $FF4B
|
256
|
+
|
257
|
+
|
258
|
+
;***************************************************************************
|
259
|
+
;*
|
260
|
+
;* Sound control registers
|
261
|
+
;*
|
262
|
+
;***************************************************************************
|
263
|
+
|
264
|
+
; --
|
265
|
+
; -- AUDVOL/NR50 ($FF24)
|
266
|
+
; -- Channel control / ON-OFF / Volume (R/W)
|
267
|
+
; --
|
268
|
+
; -- Bit 7 - Vin->SO2 ON/OFF (Vin??)
|
269
|
+
; -- Bit 6-4 - SO2 output level (volume) (# 0-7)
|
270
|
+
; -- Bit 3 - Vin->SO1 ON/OFF (Vin??)
|
271
|
+
; -- Bit 2-0 - SO1 output level (volume) (# 0-7)
|
272
|
+
; --
|
273
|
+
rNR50 EQU $FF24
|
274
|
+
rAUDVOL EQU rNR50
|
275
|
+
|
276
|
+
|
277
|
+
; --
|
278
|
+
; -- AUDTERM/NR51 ($FF25)
|
279
|
+
; -- Selection of Sound output terminal (R/W)
|
280
|
+
; --
|
281
|
+
; -- Bit 7 - Output sound 4 to SO2 terminal
|
282
|
+
; -- Bit 6 - Output sound 3 to SO2 terminal
|
283
|
+
; -- Bit 5 - Output sound 2 to SO2 terminal
|
284
|
+
; -- Bit 4 - Output sound 1 to SO2 terminal
|
285
|
+
; -- Bit 3 - Output sound 4 to SO1 terminal
|
286
|
+
; -- Bit 2 - Output sound 3 to SO1 terminal
|
287
|
+
; -- Bit 1 - Output sound 2 to SO1 terminal
|
288
|
+
; -- Bit 0 - Output sound 0 to SO1 terminal
|
289
|
+
; --
|
290
|
+
rNR51 EQU $FF25
|
291
|
+
rAUDTERM EQU rNR51
|
292
|
+
|
293
|
+
|
294
|
+
; --
|
295
|
+
; -- AUDENA/NR52 ($FF26)
|
296
|
+
; -- Sound on/off (R/W)
|
297
|
+
; --
|
298
|
+
; -- Bit 7 - All sound on/off (sets all audio regs to 0!)
|
299
|
+
; -- Bit 3 - Sound 4 ON flag (doesn't work!)
|
300
|
+
; -- Bit 2 - Sound 3 ON flag (doesn't work!)
|
301
|
+
; -- Bit 1 - Sound 2 ON flag (doesn't work!)
|
302
|
+
; -- Bit 0 - Sound 1 ON flag (doesn't work!)
|
303
|
+
; --
|
304
|
+
rNR52 EQU $FF26
|
305
|
+
rAUDENA EQU rNR52
|
306
|
+
|
307
|
+
|
308
|
+
;***************************************************************************
|
309
|
+
;*
|
310
|
+
;* SoundChannel #1 registers
|
311
|
+
;*
|
312
|
+
;***************************************************************************
|
313
|
+
|
314
|
+
; --
|
315
|
+
; -- AUD1SWEEP/NR10 ($FF10)
|
316
|
+
; -- Sweep register (R/W)
|
317
|
+
; --
|
318
|
+
; -- Bit 6-4 - Sweep Time
|
319
|
+
; -- Bit 3 - Sweep Increase/Decrease
|
320
|
+
; -- 0: Addition (frequency increases???)
|
321
|
+
; -- 1: Subtraction (frequency increases???)
|
322
|
+
; -- Bit 2-0 - Number of sweep shift (# 0-7)
|
323
|
+
; -- Sweep Time: (n*7.8ms)
|
324
|
+
; --
|
325
|
+
rNR10 EQU $FF10
|
326
|
+
rAUD1SWEEP EQU rNR10
|
327
|
+
|
328
|
+
|
329
|
+
; --
|
330
|
+
; -- AUD1LEN/NR11 ($FF11)
|
331
|
+
; -- Sound length/Wave pattern duty (R/W)
|
332
|
+
; --
|
333
|
+
; -- Bit 7-6 - Wave Pattern Duty (00:12.5% 01:25% 10:50% 11:75%)
|
334
|
+
; -- Bit 5-0 - Sound length data (# 0-63)
|
335
|
+
; --
|
336
|
+
rNR11 EQU $FF11
|
337
|
+
rAUD1LEN EQU rNR11
|
338
|
+
|
339
|
+
|
340
|
+
; --
|
341
|
+
; -- AUD1ENV/NR12 ($FF12)
|
342
|
+
; -- Envelope (R/W)
|
343
|
+
; --
|
344
|
+
; -- Bit 7-4 - Initial value of envelope
|
345
|
+
; -- Bit 3 - Envelope UP/DOWN
|
346
|
+
; -- 0: Decrease
|
347
|
+
; -- 1: Range of increase
|
348
|
+
; -- Bit 2-0 - Number of envelope sweep (# 0-7)
|
349
|
+
; --
|
350
|
+
rNR12 EQU $FF12
|
351
|
+
rAUD1ENV EQU rNR12
|
352
|
+
|
353
|
+
|
354
|
+
; --
|
355
|
+
; -- AUD1LOW/NR13 ($FF13)
|
356
|
+
; -- Frequency lo (W)
|
357
|
+
; --
|
358
|
+
rNR13 EQU $FF13
|
359
|
+
rAUD1LOW EQU rNR13
|
360
|
+
|
361
|
+
|
362
|
+
; --
|
363
|
+
; -- AUD1HIGH/NR14 ($FF14)
|
364
|
+
; -- Frequency hi (W)
|
365
|
+
; --
|
366
|
+
; -- Bit 7 - Initial (when set, sound restarts)
|
367
|
+
; -- Bit 6 - Counter/consecutive selection
|
368
|
+
; -- Bit 2-0 - Frequency's higher 3 bits
|
369
|
+
; --
|
370
|
+
rNR14 EQU $FF14
|
371
|
+
rAUD1HIGH EQU rNR14
|
372
|
+
|
373
|
+
|
374
|
+
;***************************************************************************
|
375
|
+
;*
|
376
|
+
;* SoundChannel #2 registers
|
377
|
+
;*
|
378
|
+
;***************************************************************************
|
379
|
+
|
380
|
+
; --
|
381
|
+
; -- AUD2LEN/NR21 ($FF16)
|
382
|
+
; -- Sound Length; Wave Pattern Duty (R/W)
|
383
|
+
; --
|
384
|
+
; -- see AUD1LEN for info
|
385
|
+
; --
|
386
|
+
rNR21 EQU $FF16
|
387
|
+
rAUD2LEN EQU rNR21
|
388
|
+
|
389
|
+
|
390
|
+
; --
|
391
|
+
; -- AUD2ENV/NR22 ($FF17)
|
392
|
+
; -- Envelope (R/W)
|
393
|
+
; --
|
394
|
+
; -- see AUD1ENV for info
|
395
|
+
; --
|
396
|
+
rNR22 EQU $FF17
|
397
|
+
rAUD2ENV EQU rNR22
|
398
|
+
|
399
|
+
|
400
|
+
; --
|
401
|
+
; -- AUD2LOW/NR23 ($FF18)
|
402
|
+
; -- Frequency lo (W)
|
403
|
+
; --
|
404
|
+
rNR23 EQU $FF18
|
405
|
+
rAUD2LOW EQU rNR23
|
406
|
+
|
407
|
+
|
408
|
+
; --
|
409
|
+
; -- AUD2HIGH/NR24 ($FF19)
|
410
|
+
; -- Frequency hi (W)
|
411
|
+
; --
|
412
|
+
; -- see AUD1HIGH for info
|
413
|
+
; --
|
414
|
+
rNR24 EQU $FF19
|
415
|
+
rAUD2HIGH EQU rNR24
|
416
|
+
|
417
|
+
|
418
|
+
;***************************************************************************
|
419
|
+
;*
|
420
|
+
;* SoundChannel #3 registers
|
421
|
+
;*
|
422
|
+
;***************************************************************************
|
423
|
+
|
424
|
+
; --
|
425
|
+
; -- AUD3ENA/NR30 ($FF1A)
|
426
|
+
; -- Sound on/off (R/W)
|
427
|
+
; --
|
428
|
+
; -- Bit 7 - Sound ON/OFF (1EQUON,0EQUOFF)
|
429
|
+
; --
|
430
|
+
rNR30 EQU $FF1A
|
431
|
+
rAUD3ENA EQU rNR30
|
432
|
+
|
433
|
+
|
434
|
+
; --
|
435
|
+
; -- AUD3LEN/NR31 ($FF1B)
|
436
|
+
; -- Sound length (R/W)
|
437
|
+
; --
|
438
|
+
; -- Bit 7-0 - Sound length
|
439
|
+
; --
|
440
|
+
rNR31 EQU $FF1B
|
441
|
+
rAUD3LEN EQU rNR31
|
442
|
+
|
443
|
+
|
444
|
+
; --
|
445
|
+
; -- AUD3LEVEL/NR32 ($FF1C)
|
446
|
+
; -- Select output level
|
447
|
+
; --
|
448
|
+
; -- Bit 6-5 - Select output level
|
449
|
+
; -- 00: 0/1 (mute)
|
450
|
+
; -- 01: 1/1
|
451
|
+
; -- 10: 1/2
|
452
|
+
; -- 11: 1/4
|
453
|
+
; --
|
454
|
+
rNR32 EQU $FF1C
|
455
|
+
rAUD3LEVEL EQU rNR32
|
456
|
+
|
457
|
+
|
458
|
+
; --
|
459
|
+
; -- AUD3LOW/NR33 ($FF1D)
|
460
|
+
; -- Frequency lo (W)
|
461
|
+
; --
|
462
|
+
; -- see AUD1LOW for info
|
463
|
+
; --
|
464
|
+
rNR33 EQU $FF1D
|
465
|
+
rAUD3LOW EQU rNR33
|
466
|
+
|
467
|
+
|
468
|
+
; --
|
469
|
+
; -- AUD3HIGH/NR34 ($FF1E)
|
470
|
+
; -- Frequency hi (W)
|
471
|
+
; --
|
472
|
+
; -- see AUD1HIGH for info
|
473
|
+
; --
|
474
|
+
rNR34 EQU $FF1E
|
475
|
+
rAUD3HIGH EQU rNR34
|
476
|
+
|
477
|
+
|
478
|
+
; --
|
479
|
+
; -- AUD4LEN/NR41 ($FF20)
|
480
|
+
; -- Sound length (R/W)
|
481
|
+
; --
|
482
|
+
; -- Bit 5-0 - Sound length data (# 0-63)
|
483
|
+
; --
|
484
|
+
rNR41 EQU $FF20
|
485
|
+
rAUD4LEN EQU rNR41
|
486
|
+
|
487
|
+
|
488
|
+
; --
|
489
|
+
; -- AUD4ENV/NR42 ($FF21)
|
490
|
+
; -- Envelope (R/W)
|
491
|
+
; --
|
492
|
+
; -- see AUD1ENV for info
|
493
|
+
; --
|
494
|
+
rNR42 EQU $FF21
|
495
|
+
rAUD4ENV EQU rNR42
|
496
|
+
|
497
|
+
|
498
|
+
; --
|
499
|
+
; -- AUD4POLY/NR42 ($FF22)
|
500
|
+
; -- Polynomial counter (R/W)
|
501
|
+
; --
|
502
|
+
; -- Bit 7-4 - Selection of the shift clock frequency of the (scf)
|
503
|
+
; -- polynomial counter (0000-1101)
|
504
|
+
; -- freqEQUdrf*1/2^scf (not sure)
|
505
|
+
; -- Bit 3 - Selection of the polynomial counter's step
|
506
|
+
; -- 0: 15 steps
|
507
|
+
; -- 1: 7 steps
|
508
|
+
; -- Bit 2-0 - Selection of the dividing ratio of frequencies (drf)
|
509
|
+
; -- 000: f/4 001: f/8 010: f/16 011: f/24
|
510
|
+
; -- 100: f/32 101: f/40 110: f/48 111: f/56 (fEQU4.194304 Mhz)
|
511
|
+
; --
|
512
|
+
rNR42_2 EQU $FF22
|
513
|
+
rAUD4POLY EQU rNR42_2
|
514
|
+
|
515
|
+
|
516
|
+
; --
|
517
|
+
; -- AUD4GO/NR43 ($FF23)
|
518
|
+
; -- (has wrong name and value (ff30) in Dr.Pan's doc!)
|
519
|
+
; --
|
520
|
+
; -- Bit 7 - Inital
|
521
|
+
; -- Bit 6 - Counter/consecutive selection
|
522
|
+
; --
|
523
|
+
rNR43 EQU $FF23
|
524
|
+
rAUD4GO EQU rNR43 ; silly name!
|
525
|
+
|
526
|
+
;***************************************************************************
|
527
|
+
;*
|
528
|
+
;* Cart related
|
529
|
+
;*
|
530
|
+
;***************************************************************************
|
531
|
+
|
532
|
+
ROM_NOMBC EQU 0
|
533
|
+
ROM_MBC1 EQU 1
|
534
|
+
ROM_MBC1_RAM EQU 2
|
535
|
+
ROM_MBC1_RAM_BAT EQU 3
|
536
|
+
ROM_MBC2 EQU 5
|
537
|
+
ROM_MBC2_BAT EQU 6
|
538
|
+
ROM_NOMBC_RAM EQU 8
|
539
|
+
ROM_NOMBC_RAM_BAT EQU 9
|
540
|
+
|
541
|
+
ROM_SIZE_256KBIT EQU 0
|
542
|
+
ROM_SIZE_512KBIT EQU 1
|
543
|
+
ROM_SIZE_1M EQU 2
|
544
|
+
ROM_SIZE_2M EQU 3
|
545
|
+
ROM_SIZE_4M EQU 4
|
546
|
+
ROM_SIZE_8M EQU 5
|
547
|
+
ROM_SIZE_16M EQU 6
|
548
|
+
|
549
|
+
ROM_SIZE_32KBYTE EQU 0
|
550
|
+
ROM_SIZE_64KBYTE EQU 1
|
551
|
+
ROM_SIZE_128KBYTE EQU 2
|
552
|
+
ROM_SIZE_256KBYTE EQU 3
|
553
|
+
ROM_SIZE_512KBYTE EQU 4
|
554
|
+
ROM_SIZE_1MBYTE EQU 5
|
555
|
+
ROM_SIZE_2MBYTE EQU 6
|
556
|
+
|
557
|
+
RAM_SIZE_0KBIT EQU 0
|
558
|
+
RAM_SIZE_16KBIT EQU 1
|
559
|
+
RAM_SIZE_64KBIT EQU 2
|
560
|
+
RAM_SIZE_256KBIT EQU 3
|
561
|
+
RAM_SIZE_1MBIT EQU 4
|
562
|
+
|
563
|
+
RAM_SIZE_0KBYTE EQU 0
|
564
|
+
RAM_SIZE_2KBYTE EQU 1
|
565
|
+
RAM_SIZE_8KBYTE EQU 2
|
566
|
+
RAM_SIZE_32KBYTE EQU 3
|
567
|
+
RAM_SIZE_128KBYTE EQU 4
|
568
|
+
|
569
|
+
;***************************************************************************
|
570
|
+
;*
|
571
|
+
;* Keypad related
|
572
|
+
;*
|
573
|
+
;***************************************************************************
|
574
|
+
|
575
|
+
PADF_DOWN EQU $80
|
576
|
+
PADF_UP EQU $40
|
577
|
+
PADF_LEFT EQU $20
|
578
|
+
PADF_RIGHT EQU $10
|
579
|
+
PADF_START EQU $08
|
580
|
+
PADF_SELECT EQU $04
|
581
|
+
PADF_B EQU $02
|
582
|
+
PADF_A EQU $01
|
583
|
+
|
584
|
+
PADB_DOWN EQU $7
|
585
|
+
PADB_UP EQU $6
|
586
|
+
PADB_LEFT EQU $5
|
587
|
+
PADB_RIGHT EQU $4
|
588
|
+
PADB_START EQU $3
|
589
|
+
PADB_SELECT EQU $2
|
590
|
+
PADB_B EQU $1
|
591
|
+
PADB_A EQU $0
|
592
|
+
|
593
|
+
;***************************************************************************
|
594
|
+
;*
|
595
|
+
;* Screen related
|
596
|
+
;*
|
597
|
+
;***************************************************************************
|
598
|
+
|
599
|
+
SCRN_X EQU 160 ; Width of screen in pixels
|
600
|
+
SCRN_Y EQU 144 ; Height of screen in pixels
|
601
|
+
SCRN_X_B EQU 20 ; Width of screen in bytes
|
602
|
+
SCRN_Y_B EQU 18 ; Height of screen in bytes
|
603
|
+
|
604
|
+
SCRN_VX EQU 256 ; Virtual width of screen in pixels
|
605
|
+
SCRN_VY EQU 256 ; Virtual height of screen in pixels
|
606
|
+
SCRN_VX_B EQU 32 ; Virtual width of screen in bytes
|
607
|
+
SCRN_VY_B EQU 32 ; Virtual height of screen in bytes
|
608
|
+
|
609
|
+
NINTENDO_LOGO: MACRO
|
610
|
+
;*
|
611
|
+
;* Nintendo scrolling logo
|
612
|
+
;* (Code won't work on a real GameBoy)
|
613
|
+
;* (if next six lines are altered.)
|
614
|
+
DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
|
615
|
+
DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
|
616
|
+
DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E
|
617
|
+
ENDM
|
618
|
+
|
619
|
+
ROM_HEADER: MACRO
|
620
|
+
;*
|
621
|
+
;* Nintendo scrolling logo
|
622
|
+
;* (Code won't work on a real GameBoy)
|
623
|
+
;* (if next six lines are altered.)
|
624
|
+
|
625
|
+
; 0123456789ABCDEF
|
626
|
+
DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
|
627
|
+
DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
|
628
|
+
DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E
|
629
|
+
|
630
|
+
DB "EXAMPLE",0,0,0,0,0,0,0,0 ; Cart name - 15bytes
|
631
|
+
DB 0 ; $143
|
632
|
+
DB 0,0 ; $144 - Licensee code (not important)
|
633
|
+
DB 0 ; $146 - SGB Support indicator
|
634
|
+
DB \1 ; $147 - Cart type
|
635
|
+
DB \2 ; $148 - ROM Size
|
636
|
+
DB \3 ; $149 - RAM Size
|
637
|
+
DB 1 ; $14a - Destination code
|
638
|
+
DB $33 ; $14b - Old licensee code
|
639
|
+
DB 0 ; $14c - Mask ROM version
|
640
|
+
DB 0 ; $14d - Complement check (important)
|
641
|
+
DW 0 ; $14e - Checksum (not important)
|
642
|
+
|
643
|
+
ENDM
|
644
|
+
|
645
|
+
ENDC ;HARDWARE_INC
|