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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +5 -0
  4. data/.travis.yml +20 -0
  5. data/CHANGELOG.md +6 -0
  6. data/Gemfile +5 -0
  7. data/Gemfile.lock +23 -0
  8. data/MIT-LICENSE.txt +53 -0
  9. data/README.md +30 -0
  10. data/Rakefile +30 -0
  11. data/bin/rubygb +5 -0
  12. data/lib/galp/AND.GIF +0 -0
  13. data/lib/galp/ARROW.GIF +0 -0
  14. data/lib/galp/C.BAT +5 -0
  15. data/lib/galp/CHANGES.TXT +5 -0
  16. data/lib/galp/EXAMPLE.LNK +7 -0
  17. data/lib/galp/EXAMPLE1.TXT +266 -0
  18. data/lib/galp/GBHW.TXT +645 -0
  19. data/lib/galp/GBSPEC.TXT +1761 -0
  20. data/lib/galp/IBMPC1.TXT +2400 -0
  21. data/lib/galp/INDEX.HTM +23 -0
  22. data/lib/galp/INSTR.HTM +563 -0
  23. data/lib/galp/MEM1.HTM +199 -0
  24. data/lib/galp/MEMORY.TXT +160 -0
  25. data/lib/galp/OPCODES.HTM +351 -0
  26. data/lib/galp/OR.GIF +0 -0
  27. data/lib/galp/README.TXT +4 -0
  28. data/lib/galp/REGS.HTM +77 -0
  29. data/lib/galp/RL.GIF +0 -0
  30. data/lib/galp/RLC.GIF +0 -0
  31. data/lib/galp/RR.GIF +0 -0
  32. data/lib/galp/RRC.GIF +0 -0
  33. data/lib/galp/SETUP.BAT +7 -0
  34. data/lib/galp/SLA.GIF +0 -0
  35. data/lib/galp/SRA.GIF +0 -0
  36. data/lib/galp/SRL.GIF +0 -0
  37. data/lib/galp/START.HTM +24 -0
  38. data/lib/galp/SWAP.GIF +0 -0
  39. data/lib/galp/VID1.HTM +34 -0
  40. data/lib/galp/XOR.GIF +0 -0
  41. data/lib/rgbds/rgbasm +0 -0
  42. data/lib/rgbds/rgbfix +0 -0
  43. data/lib/rgbds/rgblink +0 -0
  44. data/lib/rubygb/cli.rb +11 -0
  45. data/lib/rubygb/rubygb.rb +15 -0
  46. data/lib/rubygb/version.rb +4 -0
  47. data/lib/rubygb.rb +7 -0
  48. data/rubygb.gemspec +23 -0
  49. data/scrap/basic.gb +0 -0
  50. data/scrap/basic.map +55 -0
  51. data/scrap/basic.obj +0 -0
  52. data/scrap/basic.s +176 -0
  53. data/scrap/basic.sym +8 -0
  54. data/spec/basic.s +176 -0
  55. data/spec/rubygb_spec.rb +19 -0
  56. 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