gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/z80/sms/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 .UP = 0b00000001
163 .DOWN = 0b00000010
164 .LEFT = 0b00000100
165 .RIGHT = 0b00001000
166 .A = 0b00010000
167 .B = 0b00100000
168 .START = 0b01000000
169 .SELECT = 0b10000000
170
171 .JOYPAD_COUNT = 2
172
173 .JOY_PORT1 = 0xDC
174
175 .JOY_PORT1 = 0xDC
176
177 .JOY_P1_UP = 0b00000001
178 .JOY_P1_MD_Z = 0b00000001
179 .JOY_P1_DOWN = 0b00000010
180 .JOY_P1_MD_Y = 0b00000010
181 .JOY_P1_LEFT = 0b00000100
182 .JOY_P1_MD_X = 0b00000100
183 .JOY_P1_RIGHT = 0b00001000
184 .JOY_P1_MD_MODE = 0b00001000
185 .JOY_P1_SW1 = 0b00010000
186 .JOY_P1_TRIGGER = 0b00010000
187 .JOY_P1_MD_A = 0b00010000
188 .JOY_P1_SW2 = 0b00100000
189 .JOY_P1_MD_START = 0b00100000
190 .JOY_P2_UP = 0b01000000
191 .JOY_P2_MD_Z = 0b01000000
192 .JOY_P2_DOWN = 0b10000000
193 .JOY_P2_MD_Y = 0b10000000
194
195 .JOY_PORT2 = 0xDD
196
197 .JOY_P2_LEFT = 0b00000001
198 .JOY_P2_MD_X = 0b00000001
199 .JOY_P2_RIGHT = 0b00000010
200 .JOY_P2_MD_MODE = 0b00000010
201 .JOY_P2_SW1 = 0b00000100
202 .JOY_P2_TRIGGER = 0b00000100
203 .JOY_P2_MD_A = 0b00000100
204 .JOY_P2_SW2 = 0b00001000
205 .JOY_P2_MD_START = 0b00001000
206 .JOY_RESET = 0b00010000
207 .JOY_P1_LIGHT = 0b01000000
208 .JOY_P2_LIGHT = 0b10000000
209
210 .FMADDRESS = 0xF0
211 .FMDATA = 0xF1
212 .AUDIOCTRL = 0xF2
213
214 .RAM_CONTROL = 0xfffc
215
216 .RAMCTL_BANK = 0b00000100
217 .RAMCTL_ROM = 0b00000000
218 .RAMCTL_RAM = 0b00001000
219 .RAMCTL_RO = 0b00010000
220 .RAMCTL_PROT = 0b10000000
221
222 .GLASSES_3D = 0xfff8
223
224 .MAP_FRAME0 = 0xfffd
225 .MAP_FRAME1 = 0xfffe
226 .MAP_FRAME2 = 0xffff
227
228 .BIOS = 0xC000
229
230 .SYSTEM_NTSC = 0x00
231 .SYSTEM_PAL = 0x01
232
233 .CPU_CLOCK = 3579545
234
235 ;; GBDK library screen modes
236
237 .T_MODE = 0x02 ; Text mode (bit 2)
238 .T_MODE_OUT = 0x02 ; Text mode output only
239 .T_MODE_INOUT = 0x03 ; Text mode with input
240 .M_NO_SCROLL = 0x04 ; Disables scrolling of the screen in text mode
241 .M_NO_INTERP = 0x08 ; Disables special character interpretation
242
243 ;; Screen dimentions in tiles
244
245 .SCREEN_X_OFS = 0
246 .SCREEN_Y_OFS = 0
247 .SCREEN_WIDTH = 32
248 .SCREEN_HEIGHT = 24
249 .VDP_MAP_HEIGHT = 28
250 .VDP_MAP_WIDTH = 32
251
252 ;; Interrupt flags
253
254 .VBL_IFLAG = 0x01
255 .LCD_IFLAG = 0x02
256
257 ; characters
258 .CR = 0x0A
259 .SPACE = 0x00
260
261 ;; C related
262 ;; Overheap of a banked call. Used for parameters
263 ;; = ret + real ret + bank
264
265 .BANKOV = 5
266
267 ;; Global variables
268 .globl .mode
269
270 ;; Interrupt routines
271 .globl _INT_ISR
272 .globl _NMI_ISR
273
274 ;; Symbols defined at link time
275 .globl .STACK
276 .globl _shadow_OAM
277 .globl __shadow_OAM_OFF
278
279 ;; Main user routine
280 .globl _main
281
282 ;; Macro definitions
283
284 .macro VDP_WRITE_DATA regH regL
285 ld a, regL
286 out (#.VDP_DATA), a
287 ld a, regH
288 inc hl
289 dec hl
290 out (#.VDP_DATA), a
291 .endm
292
293 .macro VDP_WRITE_CMD regH regL
294 ld a, regL
295 di
296 out (#.VDP_CMD), a
297 ld a, regH
298 ei
299 out (#.VDP_CMD), a
300 .endm
301
302 .macro VDP_DELAY ?lbl
303 nop
304 jr lbl
305 lbl:
306 .endm
307
308 .macro VDP_CANCEL_INT
309 in a, (.VDP_STAT) ; cancel pending VDP interrupts
310 .endm
311
312 .macro WRITE_VDP_CMD_HL
313 rst 0x10
314 .endm
315
316 .macro WRITE_VDP_DATA_HL
317 rst 0x20
318 .endm
319
320 .macro CALL_HL
321 rst 0x30
322 .endm
323
324 .macro DISABLE_VBLANK_COPY
325 ld hl, #__shadow_OAM_OFF
326 inc (hl)
327 .endm
328
329 .macro ENABLE_VBLANK_COPY
330 ld hl, #__shadow_OAM_OFF
331 dec (hl)
332 .endm
333
334 .macro ADD_A_REG16 regH regL
335 add regL
336 ld regL, a
337 adc regH
338 sub regL
339 ld regH, a
340 .endm
341
342 .macro MUL_DE_BY_A_RET_HL ?lbl1 ?lbl2
343 ; Multiply DE by A, return result in HL; preserves: BC
344 ld hl, #0
345 lbl1:
346 srl a
347 jp nc, lbl2
348 add hl, de
349 lbl2:
350 sla e
351 rl d
352 or a
353 jp nz, lbl1
354 .endm
355
356 .macro DIV_PART divident divisor ?lbl
357 rl divident
358 rla
359 sub divisor
360 jr nc, lbl
361 add divisor
362 lbl:
363 .endm
364 .macro FAST_MOD8 divident divisor
365 ; returns modulus in A
366 .rept 8
367 DIV_PART divident divisor
368 .endm
369 .endm
370
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.