tools: bmp2tiles clearer error message
[swan-dev] / sample / WonderSwan.inc
1 ;--------------------------------------------\r
2 ;     Wonderswan Registers & Equates v0.2\r
3 ;              by Orion_ [2008]\r
4 ;\r
5 ; http://onorisoft.free.fr/\r
6 ;\r
7 ; with help of WStech24.txt by Judge and Dox\r
8 ;--------------------------------------------\r
9 \r
10 ; IO_   mean byte access\r
11 ; IOw_  mean word access\r
12 \r
13 \r
14 ;-------------\r
15 ; Rom Header\r
16 \r
17 RH_ROM_4MBITS           equ     0x02\r
18 RH_ROM_8MBITS           equ     0x03\r
19 RH_ROM_16MBITS          equ     0x04\r
20 RH_ROM_32MBITS          equ     0x06\r
21 RH_ROM_64MBITS          equ     0x08\r
22 RH_ROM_128MBITS         equ     0x09\r
23 \r
24 RH_NO_SRAM              equ     0x00\r
25 RH_SRAM_64KBITS         equ     0x01\r
26 RH_SRAM_256KBITS        equ     0x02\r
27 RH_SRAM_1MBITS          equ     0x03\r
28 RH_SRAM_2MBITS          equ     0x04\r
29 RH_SRAM_1KBITS          equ     0x10\r
30 RH_SRAM_16KBITS         equ     0x20\r
31 RH_SRAM_8KBITS          equ     0x50\r
32 \r
33 RH_WS_MONO              equ     0x00\r
34 RH_WS_COLOR             equ     0x01\r
35 \r
36 RH_NO_RTC               equ     0x00\r
37 RH_RTC                  equ     0x01\r
38 \r
39 RH_HORIZONTAL           equ     (0x04 + 0x00)\r
40 RH_VERTICAL             equ     (0x04 + 0x01)\r
41 \r
42 \r
43 \r
44 ;-----------------\r
45 ; Memory Address\r
46 \r
47 WS_RAM_BASE     equ     0x0000\r
48 WS_TILE_BANK    equ     0x2000\r
49 WS_STACK        equ     WS_TILE_BANK-2\r
50 \r
51 WSC_TILE_BANK1  equ     0x4000\r
52 WSC_TILE_BANK2  equ     0x8000\r
53 WSC_RAM_BASE2   equ     0xC000\r
54 WSC_PALETTES    equ     0xFE00\r
55 WSC_STACK       equ     WSC_PALETTES-2\r
56 \r
57 MAP_SIZE        equ     0x800\r
58 SPR_TABLE_SIZE  equ     0x200\r
59 \r
60 \r
61 \r
62 ;-------------\r
63 ; Interrupts\r
64 \r
65 INTVEC_HBLANK_TIMER     equ     7\r
66 INTVEC_VBLANK_START     equ     6\r
67 INTVEC_VBLANK_TIMER     equ     5\r
68 INTVEC_DRAWING_LINE     equ     4\r
69 INTVEC_SERIAL_RECEIVE   equ     3\r
70 INTVEC_RTC_ALARM        equ     2\r
71 INTVEC_KEY_PRESS        equ     1\r
72 INTVEC_SERIAL_SEND      equ     0\r
73 \r
74 \r
75 \r
76 ;-----------------\r
77 ; Useful Defines\r
78 \r
79 %define BG_CHR(tile,pal,bank,hflip,vflip)       (((vflip) << 15) | ((hflip) << 14) | ((bank) << 13) | ((pal) << 9) | (tile))\r
80 \r
81 %macro  ROM_HEADER      7       ; Label, Segment, DevID, WSType, RomSize, SRamSize, WSSpec\r
82         times   ((64*1024)-16)-$+%1 db 0xFF\r
83 \r
84         db      0xEA    ; jmpf\r
85         dw      %1      ; Label\r
86         dw      %2      ; Segment\r
87         db      0x00\r
88 \r
89         db      %3      ; Developer ID\r
90         db      %4\r
91         db      0x01    ; Cart number\r
92         db      0x00\r
93         db      %5\r
94         db      %6\r
95         db      %7\r
96         db      0x00\r
97         dw      0x0000  ; Checksum\r
98 %endmacro\r
99 \r
100 %macro  PADDING 1       ; Number of Segment\r
101         times   (%1*64*1024) db 0xFF\r
102 %endmacro\r
103 \r
104 SCREEN_WIDTH    equ     224\r
105 SCREEN_HEIGHT   equ     144\r
106 SCREEN_TWIDTH   equ     (SCREEN_WIDTH / 8)\r
107 SCREEN_THEIGHT  equ     (SCREEN_HEIGHT / 8)\r
108 MAP_WIDTH       equ     256\r
109 MAP_HEIGHT      equ     256\r
110 MAP_TWIDTH      equ     (MAP_WIDTH / 8)\r
111 MAP_THEIGHT     equ     (MAP_HEIGHT / 8)\r
112 \r
113 \r
114 \r
115 ;-----------------------------------\r
116 ; I/O Ports and associated equates\r
117 \r
118 IO_DISPLAY_CTRL equ     0x00\r
119 BG_ON           equ     0x01\r
120 BG_OFF          equ     0x00\r
121 FG_ON           equ     0x02\r
122 FG_OFF          equ     0x00\r
123 SPR_ON          equ     0x04\r
124 SPR_OFF         equ     0x00\r
125 SPR_WIN_ON      equ     0x08\r
126 SPR_WIN_OFF     equ     0x00\r
127 FG_IN_OUT_WIN   equ     0x00\r
128 FG_IN_WIN       equ     0x10\r
129 FG_OUT_WIN      equ     0x30\r
130 \r
131 IO_BG_PAL       equ     0x01\r
132 %define BG_COLOR(a)     (a)\r
133 %define BG_PAL(a)       (a << 4)\r
134 \r
135 IO_CUR_LINE     equ     0x02\r
136 IO_LINE_COMP    equ     0x03\r
137 \r
138 IO_SPR_TABLE    equ     0x04\r
139 %define SPR_TABLE(a)    (a >> 9)        ; Sprite Table Address must be 512 bytes aligned !\r
140 \r
141 IO_SPR_START    equ     0x05\r
142 IO_SPR_STOP     equ     0x06\r
143 \r
144 IO_FGBG_MAP     equ     0x07\r
145 %define FG_MAP(a)       ((a >> 11) << 4)        ; FG Map Address must be 2048 bytes aligned !\r
146 %define BG_MAP(a)       (a >> 11)               ; BG Map Address must be 2048 bytes aligned !\r
147 \r
148 IO_FG_WIN_X0    equ     0x08\r
149 IO_FG_WIN_Y0    equ     0x09\r
150 IO_FG_WIN_X1    equ     0x0A\r
151 IO_FG_WIN_Y1    equ     0x0B\r
152 \r
153 IO_SPR_WIN_X0   equ     0x0C\r
154 IO_SPR_WIN_Y0   equ     0x0D\r
155 IO_SPR_WIN_X1   equ     0x0E\r
156 IO_SPR_WIN_Y1   equ     0x0F\r
157 \r
158 IO_BG_X         equ     0x10\r
159 IO_BG_Y         equ     0x11\r
160 \r
161 IO_FG_X         equ     0x12\r
162 IO_FG_Y         equ     0x13\r
163 \r
164 IO_LCD_CTRL     equ     0x14\r
165 LCD_ON          equ     0x01\r
166 LCD_OFF         equ     0x00\r
167 \r
168 IO_LCD_ICONS    equ     0x15\r
169 LCD_ICON_SLEEP  equ     0x01\r
170 LCD_ICON_VERTI  equ     0x02\r
171 LCD_ICON_HORIZ  equ     0x04\r
172 LCD_ICON_DOT1   equ     0x08\r
173 LCD_ICON_DOT2   equ     0x10\r
174 LCD_ICON_DOT3   equ     0x20\r
175 \r
176 IO_PALSHADE_10  equ     0x1C\r
177 IO_PALSHADE_32  equ     0x1D\r
178 IO_PALSHADE_54  equ     0x1E\r
179 IO_PALSHADE_76  equ     0x1F\r
180 \r
181 IO_WS_PAL_00    equ     0x20\r
182 IO_WS_PAL_01    equ     0x21\r
183 IO_WS_PAL_10    equ     0x22\r
184 IO_WS_PAL_11    equ     0x23\r
185 IO_WS_PAL_20    equ     0x24\r
186 IO_WS_PAL_21    equ     0x25\r
187 IO_WS_PAL_30    equ     0x26\r
188 IO_WS_PAL_31    equ     0x27\r
189 IO_WS_PAL_40    equ     0x28\r
190 IO_WS_PAL_41    equ     0x29\r
191 IO_WS_PAL_50    equ     0x2A\r
192 IO_WS_PAL_51    equ     0x2B\r
193 IO_WS_PAL_60    equ     0x2C\r
194 IO_WS_PAL_61    equ     0x2D\r
195 IO_WS_PAL_70    equ     0x2E\r
196 IO_WS_PAL_71    equ     0x2F\r
197 IO_WS_PAL_80    equ     0x30\r
198 IO_WS_PAL_81    equ     0x31\r
199 IO_WS_PAL_90    equ     0x32\r
200 IO_WS_PAL_91    equ     0x33\r
201 IO_WS_PAL_A0    equ     0x34\r
202 IO_WS_PAL_A1    equ     0x35\r
203 IO_WS_PAL_B0    equ     0x36\r
204 IO_WS_PAL_B1    equ     0x37\r
205 IO_WS_PAL_C0    equ     0x38\r
206 IO_WS_PAL_C1    equ     0x39\r
207 IO_WS_PAL_D0    equ     0x3A\r
208 IO_WS_PAL_D1    equ     0x3B\r
209 IO_WS_PAL_E0    equ     0x3C\r
210 IO_WS_PAL_E1    equ     0x3D\r
211 IO_WS_PAL_F0    equ     0x3E\r
212 IO_WS_PAL_F1    equ     0x3F\r
213 \r
214 IOw_DMA_SRC     equ     0x40\r
215 IO_DMA_SRC_BANK equ     0x42\r
216 IO_DMA_DST_BANK equ     0x43\r
217 IOw_DMA_DST     equ     0x44\r
218 IOw_DMA_SIZE    equ     0x46\r
219 IO_DMA_CTRL     equ     0x48\r
220 DMA_START       equ     0x80\r
221 DMA_CHECK       equ     0x80\r
222 \r
223 IOw_SNDDMA_SRC  equ     0x4A\r
224 IO_SNDDMA_BANK  equ     0x4C\r
225 IOw_SNDDMA_SIZE equ     0x4E\r
226 IO_SNDDMA_CTRL  equ     0x52\r
227 \r
228 IO_VIDEO_MODE   equ     0x60\r
229 VMODE_16C_CHK   equ     0xE0    ; 16 colors per tile chunky mode\r
230 VMODE_16C_PLN   equ     0xC0    ; 16 colors per tile planar mode\r
231 VMODE_4C        equ     0x40    ; 4 colors per tile color\r
232 VMODE_4C_MONO   equ     0x00    ; 4 colors per tile mono\r
233 VMODE_CLEANINIT equ     0x0C    ; (?) from FF2\r
234 \r
235 IOw_AUDIO1_FREQ equ     0x80    ; Frequency\r
236 IOw_AUDIO2_FREQ equ     0x82\r
237 IOw_AUDIO3_FREQ equ     0x84\r
238 IOw_AUDIO4_FREQ equ     0x86\r
239 \r
240 IO_AUDIO1_VOL   equ     0x88    ; Volume\r
241 IO_AUDIO2_VOL   equ     0x89\r
242 IO_AUDIO3_VOL   equ     0x8A\r
243 IO_AUDIO4_VOL   equ     0x8B\r
244 \r
245 IO_AUDIO_SWEEP_VAL      equ     0x8C\r
246 IO_AUDIO_SWEEP_STEP     equ     0x8D\r
247 \r
248 IO_AUDIO_NOISE_CTRL     equ     0x8E\r
249 %define NOISE_TYPE(a)   (a)\r
250 NOISE_RESET             equ     0x08\r
251 NOISE_ENABLE            equ     0x10\r
252 \r
253 IO_AUDIO_SAMPLE         equ     0x8F    ; Sample  location\r
254 %define AUDIO_SAMPLE(a) (a >> 6)\r
255 \r
256 IO_AUDIO_CTRL   equ     0x90\r
257 AUDIO_1_ON      equ     0x01\r
258 AUDIO_1_OFF     equ     0x00\r
259 AUDIO_2_ON      equ     0x02\r
260 AUDIO_2_OFF     equ     0x00\r
261 AUDIO_3_ON      equ     0x04\r
262 AUDIO_3_OFF     equ     0x00\r
263 AUDIO_4_ON      equ     0x08\r
264 AUDIO_4_OFF     equ     0x00\r
265 AUDIO_2_VOICE   equ     0x20\r
266 AUDIO_3_SWEEP   equ     0x40\r
267 AUDIO_4_NOISE   equ     0x80\r
268 \r
269 IO_AUDIO_OUTPUT         equ     0x91\r
270 AUDIO_OUT_MONO          equ     0x01\r
271 AUDIO_OUT_STEREO        equ     0x08\r
272 %define AUDIO_OUT_VOLUME(a)     ((a & 0x03) << 1)\r
273 \r
274 IOw_AUDIO_NOISE_CNT     equ     0x92\r
275 IO_AUDIO_VOLUME         equ     0x94    ; Global Volume (4 bits)\r
276 \r
277 IO_HARDWARE_TYPE        equ     0xA0\r
278 WS_COLOR                equ     0x02\r
279 WS_MONO                 equ     0x00\r
280 \r
281 IO_TIMER_CTRL                   equ     0xA2\r
282 HBLANK_TIMER_ON                 equ     0x01\r
283 HBLANK_TIMER_OFF                equ     0x00\r
284 HBLANK_TIMER_MODE_ONESHOT       equ     0x00\r
285 HBLANK_TIMER_MODE_AUTOPRESET    equ     0x02\r
286 VBLANK_TIMER_ON                 equ     0x04\r
287 VBLANK_TIMER_OFF                equ     0x00\r
288 VBLANK_TIMER_MODE_ONESHOT       equ     0x00\r
289 VBLANK_TIMER_MODE_AUTOPRESET    equ     0x08\r
290 \r
291 IOw_HBLANK_FREQ equ     0xA4\r
292 IOw_VBLANK_FREQ equ     0xA6\r
293 \r
294 IO_HBLANK_CNT1  equ     0xA8    ; Hblank Counter - 1/12000s\r
295 IO_HBLANK_CNT2  equ     0xA9    ; Hblank Counter - 1/(12000>>8)s\r
296 IO_VBLANK_CNT1  equ     0xAA    ; Vblank Counter - 1/75s\r
297 IO_VBLANK_CNT2  equ     0xAB    ; Vblank Counter - 1/(75>>8)s\r
298 \r
299 IO_INT_BASE     equ     0xB0\r
300 INT_BASE        equ     0x20\r
301 \r
302 IO_COMM_DATA    equ     0xB1    ; Communication byte\r
303 \r
304 IO_INT_ENABLE           equ     0xB2\r
305 INT_HBLANK_TIMER        equ     0x80\r
306 INT_VBLANK_START        equ     0x40\r
307 INT_VBLANK_TIMER        equ     0x20\r
308 INT_DRAWING_LINE        equ     0x10\r
309 INT_SERIAL_RECEIVE      equ     0x08\r
310 INT_RTC_ALARM           equ     0x04\r
311 INT_KEY_PRESS           equ     0x02\r
312 INT_SERIAL_SEND         equ     0x01\r
313 \r
314 IO_COMM_DIR             equ     0xB3    ; Communication direction\r
315 COMM_RECEIVE_INT_GEN    equ     0x80\r
316 COMM_SPEED_9600         equ     0x00\r
317 COMM_SPEED_38400        equ     0x40\r
318 COMM_SEND_INT_GEN       equ     0x20\r
319 COMM_SEND_COMPLETE      equ     0x04\r
320 COMM_ERROR              equ     0x02\r
321 COMM_RECEIVE_COMPLETE   equ     0x01\r
322 \r
323 IO_KEYPAD               equ     0xB5\r
324 KEYPAD_READ_ARROWS_V    equ     0x10\r
325 KEYPAD_READ_ARROWS_H    equ     0x20\r
326 KEYPAD_READ_BUTTONS     equ     0x40\r
327 PAD_UP                  equ     0x01\r
328 PAD_RIGHT               equ     0x02\r
329 PAD_DOWN                equ     0x04\r
330 PAD_LEFT                equ     0x08\r
331 PAD_START               equ     0x02\r
332 PAD_A                   equ     0x04\r
333 PAD_B                   equ     0x08\r
334 \r
335 IO_INT_ACK              equ     0xB6    ; See IO_INT_ENABLE equates for values\r
336 \r
337 IOw_INTERNAL_EEPROM_DATA        equ     0xBA\r
338 IOw_INTERNAL_EEPROM_ADDRESS     equ     0xBC\r
339 \r
340 IOw_INTERNAL_EEPROM_CTRL        equ     0xBE\r
341 IEEPROM_INIT                    equ     0x80\r
342 IEEPROM_PROTECT                 equ     0x40\r
343 IEEPROM_WRITE                   equ     0x20\r
344 IEEPROM_READ                    equ     0x10\r
345 IEEPROM_WRITE_COMPLETE          equ     0x02\r
346 IEEPROM_READ_COMPLETE           equ     0x01\r
347 \r
348 IO_ROM_BASE_BANK        equ     0xC0\r
349 IO_SRAM_BANK            equ     0xC1\r
350 IO_ROM_BANK_SEGMENT2    equ     0xC2\r
351 IO_ROM_BANK_SEGMENT3    equ     0xC3\r
352 \r
353 IO_RTC_COMMAND          equ     0xCA\r
354 RTC_COMMAND_RESET       equ     0x10\r
355 RTC_COMMAND_ALARM       equ     0x12\r
356 RTC_COMMAND_SET_TIME    equ     0x14\r
357 RTC_COMMAND_GET_TIME    equ     0x15\r
358 RTC_COMMAND_ACK         equ     0x80\r
359 \r
360 IO_RTC_DATA     equ     0xCB\r