rubygb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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