gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/z80/gg/global.s
1 .GG_STATE = 0x00
2
3 .GGSTATE_STT = 0b10000000
4 .GGSTATE_NJAP = 0b01000000
5 .GGSTATE_NNTS = 0b00100000
6
7 .GG_EXT_7BIT = 0x01
8
9 .GG_EXT_CTL = 0x02
10
11 .GGEXT_NINIT = 0b10000000
12
13 .GG_SIO_SEND = 0x03
14 .GG_SIO_RECV = 0x04
15 .GG_SIO_CTL = 0x05
16
17 .SIOCTL_TXFL = 0b00000001
18 .SIOCTL_RXRD = 0b00000010
19 .SIOCTL_FRER = 0b00000100
20 .SIOCTL_INT = 0b00001000
21 .SIOCTL_TON = 0b00010000
22 .SIOCTL_RON = 0b00100000
23 .SIOCTL_BS0 = 0b01000000
24 .SIOCTL_BS1 = 0b10000000
25
26 .GG_SOUND_PAN = 0x06
27
28 .SOUNDPAN_TN1R = 0b00000001
29 .SOUNDPAN_TN2R = 0b00000010
30 .SOUNDPAN_TN3R = 0b00000100
31 .SOUNDPAN_NOSR = 0b00001000
32 .SOUNDPAN_TN1L = 0b00010000
33 .SOUNDPAN_TN2L = 0b00100000
34 .SOUNDPAN_TN3L = 0b01000000
35 .SOUNDPAN_NOSL = 0b10000000
36
37 .MEMORY_CTL = 0x3E
38
39 .MEMCTL_JOYON = 0b00000000
40 .MEMCTL_JOYOFF = 0b00000100
41 .MEMCTL_BASEON = 0b00000000
42 .MEMCTL_BASEOFF = 0b00001000
43 .MEMCTL_RAMON = 0b00000000
44 .MEMCTL_RAMOFF = 0b00010000
45 .MEMCTL_CROMON = 0b00000000
46 .MEMCTL_CROMOFF = 0b00100000
47 .MEMCTL_ROMON = 0b00000000
48 .MEMCTL_ROMOFF = 0b01000000
49 .MEMCTL_EXTON = 0b00000000
50 .MEMCTL_EXTOFF = 0b10000000
51
52 .JOY_CTL = 0x3F
53
54 .JOY_P1_TR_DIR_IN = 0b00000001
55 .JOY_P1_TR_DIR_OUT = 0b00000000
56 .JOY_P1_TH_DIR_IN = 0b00000010
57 .GUN_P1_LATCH = 0b00000010
58 .JOY_P1_TH_DIR_OUT = 0b00000000
59 .JOY_P2_TR_DIR_IN = 0b00000100
60 .JOY_P2_TR_DIR_OUT = 0b00000000
61 .JOY_P2_TH_DIR_IN = 0b00001000
62 .GUN_P2_LATCH = 0b00001000
63 .JOY_P2_TH_DIR_OUT = 0b00000000
64 .JOY_P1_TR_OUT_HI = 0b00010000
65 .JOY_P1_TR_OUT_LO = 0b00000000
66 .JOY_P1_TH_OUT_HI = 0b00100000
67 .JOY_P1_TH_OUT_LO = 0b00000000
68 .JOY_P2_TR_OUT_HI = 0b01000000
69 .JOY_P2_TR_OUT_LO = 0b00000000
70 .JOY_P2_TH_OUT_HI = 0b10000000
71 .JOY_P2_TH_OUT_LO = 0b00000000
72
73 .JOY_TH_HI = 0b11110101
74 .JOY_TH_LO = 0b01010101
75
76 .VDP_VRAM = 0x4000
77 .VDP_CRAM = 0xC000
78
79 .VDP_SAT_TERM = 0xD0
80
81 .VDP_VCOUNTER = 0x7E
82 .VDP_PSG = 0x7F
83 .VDP_HCOUNTER = 0x7F
84
85 .VDP_DATA = 0xBE
86 .VDP_CMD = 0xBF
87 .VDP_STAT = 0xBF
88
89 .STATF_INT_VBL = 0b10000000
90 .STATF_9_SPR = 0b01000000
91 .STATF_SPR_COLL = 0b00100000
92
93 .VDP_REG_MASK = 0b10000000
94 .VDP_R0 = 0b10000000
95
96 .R0_VSCRL = 0b00000000
97 .R0_VSCRL_INH = 0b10000000
98 .R0_HSCRL = 0b00000000
99 .R0_HSCRL_INH = 0b01000000
100 .R0_NO_LCB = 0b00000000
101 .R0_LCB = 0b00100000
102 .R0_IE1_OFF = 0b00000000
103 .R0_IE1 = 0b00010000
104 .R0_SS_OFF = 0b00000000
105 .R0_SS = 0b00001000
106 .R0_DEFAULT = 0b00000110
107 .R0_ES_OFF = 0b00000000
108 .R0_ES = 0b00000001
109
110 .VDP_R1 = 0b10000001
111
112 .R1_DEFAULT = 0b10000000
113 .R1_DISP_OFF = 0b00000000
114 .R1_DISP_ON = 0b01000000
115 .R1_IE_OFF = 0b00000000
116 .R1_IE = 0b00100000
117 .R1_SPR_8X8 = 0b00000000
118 .R1_SPR_8X16 = 0b00000010
119
120 .VDP_R2 = 0b10000010
121
122 .R2_MAP_0x3800 = 0xFF
123 .R2_MAP_0x3000 = 0xFD
124 .R2_MAP_0x2800 = 0xFB
125 .R2_MAP_0x2000 = 0xF9
126 .R2_MAP_0x1800 = 0xF7
127 .R2_MAP_0x1000 = 0xF5
128 .R2_MAP_0x0800 = 0xF3
129 .R2_MAP_0x0000 = 0xF1
130
131 .VDP_R3 = 0b10000011
132 .VDP_R4 = 0b10000100
133 .VDP_R5 = 0b10000101
134
135 .R5_SAT_0x3F00 = 0xFF
136 .R5_SAT_0x1F00 = 0xBF
137 .R5_SAT_MASK = 0b10000001
138
139 .VDP_R6 = 0b10000110
140
141 .R6_BANK0 = 0xFB
142 .R6_DATA_0x0000 = 0xFB
143 .R6_BANK1 = 0xFF
144 .R6_DATA_0x2000 = 0xFF
145
146 .VDP_R7 = 0b10000111
147 .VDP_RBORDER = 0b10000111
148
149 .R7_COLOR_MASK = 0b11110000
150
151 .VDP_R8 = 0b10001000
152 .VDP_RSCX = 0b10001000
153
154 .VDP_R9 = 0b10001001
155 .VDP_RSCY = 0b10001001
156
157 .VDP_R10 = 0b10001010
158
159 .R10_INT_OFF = 0xFF
160 .R10_INT_EVERY = 0x00
161
162 .JOYPAD_COUNT = 1
163
164 .UP = 0b00000001
165 .DOWN = 0b00000010
166 .LEFT = 0b00000100
167 .RIGHT = 0b00001000
168 .A = 0b00010000
169 .B = 0b00100000
170 .START = 0b01000000
171 .SELECT = 0b10000000
172
173 .JOY_PORT1 = 0xDC
174
175 .JOY_P1_UP = 0b00000001
176 .JOY_P1_MD_Z = 0b00000001
177 .JOY_P1_DOWN = 0b00000010
178 .JOY_P1_MD_Y = 0b00000010
179 .JOY_P1_LEFT = 0b00000100
180 .JOY_P1_MD_X = 0b00000100
181 .JOY_P1_RIGHT = 0b00001000
182 .JOY_P1_MD_MODE = 0b00001000
183 .JOY_P1_SW1 = 0b00010000
184 .JOY_P1_TRIGGER = 0b00010000
185 .JOY_P1_MD_A = 0b00010000
186 .JOY_P1_SW2 = 0b00100000
187 .JOY_P1_MD_START = 0b00100000
188 .JOY_P2_UP = 0b01000000
189 .JOY_P2_MD_Z = 0b01000000
190 .JOY_P2_DOWN = 0b10000000
191 .JOY_P2_MD_Y = 0b10000000
192
193 .JOY_PORT2 = 0xDD
194
195 .JOY_P2_LEFT = 0b00000001
196 .JOY_P2_MD_X = 0b00000001
197 .JOY_P2_RIGHT = 0b00000010
198 .JOY_P2_MD_MODE = 0b00000010
199 .JOY_P2_SW1 = 0b00000100
200 .JOY_P2_TRIGGER = 0b00000100
201 .JOY_P2_MD_A = 0b00000100
202 .JOY_P2_SW2 = 0b00001000
203 .JOY_P2_MD_START = 0b00001000
204 .JOY_RESET = 0b00010000
205 .JOY_P1_LIGHT = 0b01000000
206 .JOY_P2_LIGHT = 0b10000000
207
208 .FMADDRESS = 0xF0
209 .FMDATA = 0xF1
210 .AUDIOCTRL = 0xF2
211
212 .RAM_CONTROL = 0xfffc
213
214 .RAMCTL_BANK = 0b00000100
215 .RAMCTL_ROM = 0b00000000
216 .RAMCTL_RAM = 0b00001000
217 .RAMCTL_RO = 0b00010000
218 .RAMCTL_PROT = 0b10000000
219
220 .GLASSES_3D = 0xfff8
221
222 .MAP_FRAME0 = 0xfffd
223 .MAP_FRAME1 = 0xfffe
224 .MAP_FRAME2 = 0xffff
225
226 .BIOS = 0xC000
227
228 .SYSTEM_NTSC = 0x00
229 .SYSTEM_PAL = 0x01
230
231 .CPU_CLOCK = 3579545
232
233 ;; GBDK library screen modes
234
235 .T_MODE = 0x02 ; Text mode (bit 2)
236 .T_MODE_OUT = 0x02 ; Text mode output only
237 .T_MODE_INOUT = 0x03 ; Text mode with input
238 .M_NO_SCROLL = 0x04 ; Disables scrolling of the screen in text mode
239 .M_NO_INTERP = 0x08 ; Disables special character interpretation
240
241 ;; Screen dimentions in tiles
242
243 .SCREEN_X_OFS = 6
244 .SCREEN_Y_OFS = 3
245 .SCREEN_WIDTH = 20
246 .SCREEN_HEIGHT = 18
247 .VDP_MAP_HEIGHT = 28
248 .VDP_MAP_WIDTH = 32
249
250 ;; Interrupt flags
251
252 .VBL_IFLAG = 0x01
253 .LCD_IFLAG = 0x02
254
255 ; characters
256 .CR = 0x0A
257 .SPACE = 0x00
258
259 ;; C related
260 ;; Overheap of a banked call. Used for parameters
261 ;; = ret + real ret + bank
262
263 .BANKOV = 5
264
265 ;; Global variables
266 .globl .mode
267
268 ;; Interrupt routines
269 .globl _INT_ISR
270 .globl _NMI_ISR
271
272 ;; Symbols defined at link time
273 .globl .STACK
274 .globl _shadow_OAM
275 .globl __shadow_OAM_OFF
276
277 ;; Main user routine
278 .globl _main
279
280 ;; Macro definitions
281
282 .macro VDP_WRITE_DATA regH regL
283 ld a, regL
284 out (#.VDP_DATA), a
285 ld a, regH
286 inc hl
287 dec hl
288 out (#.VDP_DATA), a
289 .endm
290
291 .macro VDP_WRITE_CMD regH regL
292 ld a, regL
293 di
294 out (#.VDP_CMD), a
295 ld a, regH
296 ei
297 out (#.VDP_CMD), a
298 .endm
299
300 .macro VDP_DELAY ?lbl
301 nop
302 jr lbl
303 lbl:
304 .endm
305
306 .macro VDP_CANCEL_INT
307 in a, (.VDP_STAT) ; cancel pending VDP interrupts
308 .endm
309
310 .macro WRITE_VDP_CMD_HL
311 rst 0x10
312 .endm
313
314 .macro WRITE_VDP_DATA_HL
315 rst 0x20
316 .endm
317
318 .macro CALL_HL
319 rst 0x30
320 .endm
321
322 .macro DISABLE_VBLANK_COPY
323 ld hl, #__shadow_OAM_OFF
324 inc (hl)
325 .endm
326
327 .macro ENABLE_VBLANK_COPY
328 ld hl, #__shadow_OAM_OFF
329 dec (hl)
330 .endm
331
332 .macro ADD_A_REG16 regH regL
333 add regL
334 ld regL, a
335 adc regH
336 sub regL
337 ld regH, a
338 .endm
339
340 .macro MUL_DE_BY_A_RET_HL ?lbl1 ?lbl2
341 ; Multiply DE by A, return result in HL; preserves: BC
342 ld hl, #0
343 lbl1:
344 srl a
345 jp nc, lbl2
346 add hl, de
347 lbl2:
348 sla e
349 rl d
350 or a
351 jp nz, lbl1
352 .endm
353
354 .macro DIV_PART divident divisor ?lbl
355 rl divident
356 rla
357 sub divisor
358 jr nc, lbl
359 add divisor
360 lbl:
361 .endm
362 .macro FAST_MOD8 divident divisor
363 ; returns modulus in A
364 .rept 8
365 DIV_PART divident divisor
366 .endm
367 .endm
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.