comparison dis.c @ 2105:1bda10d60b29

Add some enhancements for disassembling Main CPU Sega CD code
author Michael Pavone <pavone@retrodev.com>
date Sat, 12 Feb 2022 14:50:40 -0800
parents f3fb7e2c727a
children f1238ffb30a3
comparison
equal deleted inserted replaced
2104:ff32a90260c9 2105:1bda10d60b29
157 157
158 uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0; 158 uint8_t labels = 0, addr = 0, only = 0, vos = 0, reset = 0;
159 tern_node * named_labels = NULL; 159 tern_node * named_labels = NULL;
160 160
161 uint32_t address_off = 0, address_end; 161 uint32_t address_off = 0, address_end;
162 uint8_t do_cd_labels = 0; 162 uint8_t do_cd_labels = 0, main_cpu = 0;
163 for(uint8_t opt = 2; opt < argc; ++opt) { 163 for(uint8_t opt = 2; opt < argc; ++opt) {
164 if (argv[opt][0] == '-') { 164 if (argv[opt][0] == '-') {
165 FILE * address_log; 165 FILE * address_log;
166 switch (argv[opt][1]) 166 switch (argv[opt][1])
167 { 167 {
180 case 'r': 180 case 'r':
181 reset = 1; 181 reset = 1;
182 break; 182 break;
183 case 'c': 183 case 'c':
184 do_cd_labels = 1; 184 do_cd_labels = 1;
185 break;
186 case 'm':
187 main_cpu = 1;
185 break; 188 break;
186 case 's': 189 case 's':
187 opt++; 190 opt++;
188 if (opt >= argc) { 191 if (opt >= argc) {
189 fputs("-s must be followed by an offset\n", stderr); 192 fputs("-s must be followed by an offset\n", stderr);
232 filesize = ftell(f); 235 filesize = ftell(f);
233 fseek(f, 0, SEEK_SET); 236 fseek(f, 0, SEEK_SET);
234 237
235 char int_key[MAX_INT_KEY_SIZE]; 238 char int_key[MAX_INT_KEY_SIZE];
236 uint8_t is_scd_iso = 0; 239 uint8_t is_scd_iso = 0;
240 uint8_t has_manual_defs = !!def;
237 if (vos) 241 if (vos)
238 { 242 {
239 vos_program_module header; 243 vos_program_module header;
240 vos_read_header(f, &header); 244 vos_read_header(f, &header);
241 vos_read_alloc_module_map(f, &header); 245 vos_read_alloc_module_map(f, &header);
286 memmove(filebuf + dst_offset/2, filebuf + offset/2, 2048); 290 memmove(filebuf + dst_offset/2, filebuf + offset/2, 2048);
287 } 291 }
288 boot_size = (end / 2352) * 2048; 292 boot_size = (end / 2352) * 2048;
289 } 293 }
290 if (is_scd_iso) { 294 if (is_scd_iso) {
295 fclose(f);
291 for(cur = filebuf; cur - filebuf < (boot_size/2); ++cur) 296 for(cur = filebuf; cur - filebuf < (boot_size/2); ++cur)
292 { 297 {
293 *cur = (*cur >> 8) | (*cur << 8); 298 *cur = (*cur >> 8) | (*cur << 8);
294 } 299 }
295 uint32_t sub_start =filebuf[0x40/2] << 16 | filebuf[0x42/2]; 300 if (main_cpu) {
296 uint32_t sub_end =filebuf[0x44/2] << 16 | filebuf[0x46/2]; 301 uint32_t main_start = 0x200;
297 if (sub_start > (boot_size - 0x20)) { 302 uint32_t extra_start = filebuf[0x30/2] << 16 | filebuf[0x32/2];
298 fprintf(stderr, "System Program start offset is %X, but image is only %X bytes\n", sub_start, (uint32_t)boot_size); 303 uint32_t main_end = (filebuf[0x34/2] << 16 | filebuf[0x36/2]) + extra_start;
299 return 1; 304 if (main_end > boot_size) {
300 } 305 main_end = boot_size;
301 if (sub_end > boot_size) { 306 }
302 sub_end = boot_size; 307 address_off = 0xFF0000;
303 } 308 address_end = address_off + main_end-main_start;
304 uint32_t offset_start = (filebuf[(sub_start + 0x18)/2] << 16 | filebuf[(sub_start + 0x1A)/2]) + sub_start; 309 filebuf += main_start / 2;
305 uint8_t has_manual_defs = !!def; 310 named_labels = add_label(named_labels, "start", 0xFF0000);
306 for(uint32_t cur = offset_start, index = 0; cur < sub_end && filebuf[cur/2]; cur+=2, ++index)
307 {
308 uint32_t offset = offset_start + filebuf[cur/2];
309 if (offset >= boot_size) {
310 break;
311 }
312 static const char* fixed_names[3] = {
313 "init",
314 "main",
315 "int_2"
316 };
317 char namebuf[32];
318 const char *name;
319 if (index < 3) {
320 name = fixed_names[index];
321 } else {
322 name = namebuf;
323 sprintf(namebuf, "usercall%u", index);
324 }
325 uint32_t address = 0x6000 + offset - sub_start;
326 named_labels = add_label(named_labels, name, address);
327 if (!has_manual_defs || !only) { 311 if (!has_manual_defs || !only) {
328 def = defer(address, def); 312 def = defer(0xFF0000, def);
329 } 313 }
330 } 314 //TODO: other regions
331 fclose(f); 315 named_labels = add_label(named_labels, "user_start", 0xFF0584);
332 do_cd_labels = 1; 316 do_cd_labels = 1;
333 filebuf += sub_start / 2; 317 } else {
334 address_off = 0x6000; 318 uint32_t sub_start =filebuf[0x40/2] << 16 | filebuf[0x42/2];
335 address_end = sub_end-sub_start + address_off; 319 uint32_t sub_end =filebuf[0x44/2] << 16 | filebuf[0x46/2];
320 if (sub_start > (boot_size - 0x20)) {
321 fprintf(stderr, "System Program start offset is %X, but image is only %X bytes\n", sub_start, (uint32_t)boot_size);
322 return 1;
323 }
324 if (sub_end > boot_size) {
325 sub_end = boot_size;
326 }
327 uint32_t offset_start = (filebuf[(sub_start + 0x18)/2] << 16 | filebuf[(sub_start + 0x1A)/2]) + sub_start;
328 for(uint32_t cur = offset_start, index = 0; cur < sub_end && filebuf[cur/2]; cur+=2, ++index)
329 {
330 uint32_t offset = offset_start + filebuf[cur/2];
331 if (offset >= boot_size) {
332 break;
333 }
334 static const char* fixed_names[3] = {
335 "init",
336 "main",
337 "int_2"
338 };
339 char namebuf[32];
340 const char *name;
341 if (index < 3) {
342 name = fixed_names[index];
343 } else {
344 name = namebuf;
345 sprintf(namebuf, "usercall%u", index);
346 }
347 uint32_t address = 0x6000 + offset - sub_start;
348 named_labels = add_label(named_labels, name, address);
349 if (!has_manual_defs || !only) {
350 def = defer(address, def);
351 }
352 }
353
354 do_cd_labels = 1;
355 filebuf += sub_start / 2;
356 address_off = 0x6000;
357 address_end = sub_end-sub_start + address_off;
358 }
336 } 359 }
337 } 360 }
338 if (!vos && !is_scd_iso) { 361 if (!vos && !is_scd_iso) {
339 if (filebuf) { 362 if (filebuf) {
340 if (filesize > (32*1024)) { 363 if (filesize > (32*1024)) {
375 def = defer(int_6, def); 398 def = defer(int_6, def);
376 } 399 }
377 } 400 }
378 } 401 }
379 if (do_cd_labels) { 402 if (do_cd_labels) {
380 named_labels = weak_label(named_labels, "bios_common_work", 0x5E80); 403 if (main_cpu) {
381 named_labels = weak_label(named_labels, "_setjmptbl", 0x5F0A); 404 named_labels = weak_label(named_labels, "_bios_reset", 0x280);
382 named_labels = weak_label(named_labels, "_waitvsync", 0x5F10); 405 named_labels = weak_label(named_labels, "_bios_entry", 0x284);
383 named_labels = weak_label(named_labels, "_buram", 0x5F16); 406 named_labels = weak_label(named_labels, "_bios_init", 0x288);
384 named_labels = weak_label(named_labels, "_cdboot", 0x5F1C); 407 named_labels = weak_label(named_labels, "_bios_init_sp", 0x28C);
385 named_labels = weak_label(named_labels, "_cdbios", 0x5F22); 408 named_labels = weak_label(named_labels, "_bios_vint", 0x290);
386 named_labels = weak_label(named_labels, "_usercall0", 0x5F28); 409 named_labels = weak_label(named_labels, "_bios_set_hint", 0x294);
387 named_labels = weak_label(named_labels, "_usercall1", 0x5F2E); 410 named_labels = weak_label(named_labels, "_bios_poll_io", 0x298);
388 named_labels = weak_label(named_labels, "_usercall2", 0x5F34); 411 named_labels = weak_label(named_labels, "_bios_detect_io", 0x29C);
389 named_labels = weak_label(named_labels, "_usercall2Address", 0x5F36); 412 named_labels = weak_label(named_labels, "_bios_clear_vram", 0x2A0);
390 named_labels = weak_label(named_labels, "_usercall3", 0x5F3A); 413 named_labels = weak_label(named_labels, "_bios_clear_nmtbl", 0x2A4);
391 named_labels = weak_label(named_labels, "_adrerr", 0x5F40); 414 named_labels = weak_label(named_labels, "_bios_clear_vsram", 0x2A8);
392 named_labels = weak_label(named_labels, "_adrerrAddress", 0x5F42); 415 named_labels = weak_label(named_labels, "_bios_init_vdp", 0x2AC);
393 named_labels = weak_label(named_labels, "_coderr", 0x5F46); 416 named_labels = weak_label(named_labels, "_bios_vdp_loadregs", 0x2B0);
394 named_labels = weak_label(named_labels, "_coderrAddress", 0x5F48); 417 named_labels = weak_label(named_labels, "_bios_vdp_fill", 0x2B4);
395 named_labels = weak_label(named_labels, "_diverr", 0x5F4C); 418 named_labels = weak_label(named_labels, "_bios_clear_vram_range", 0x2B8);
396 named_labels = weak_label(named_labels, "_diverrAddress", 0x5F4E); 419 named_labels = weak_label(named_labels, "_bios_clear_vram_range_dma", 0x2BC);
397 named_labels = weak_label(named_labels, "_chkerr", 0x5F52); 420 named_labels = weak_label(named_labels, "_bios_vram_dma_fill", 0x2C0);
398 named_labels = weak_label(named_labels, "_chkerrAddress", 0x5F54); 421 named_labels = weak_label(named_labels, "_bios_update_nmtbl", 0x2C4);
399 named_labels = weak_label(named_labels, "_trperr", 0x5F58); 422 named_labels = weak_label(named_labels, "_bios_update_nmtbl_template", 0x2C8);
400 named_labels = weak_label(named_labels, "_trperrAddress", 0x5F5A); 423 named_labels = weak_label(named_labels, "_bios_fill_nmtbl", 0x2CC);
401 named_labels = weak_label(named_labels, "_spverr", 0x5F5E); 424 named_labels = weak_label(named_labels, "_bios_vdp_dma", 0x2D0);
402 named_labels = weak_label(named_labels, "_spverrAddress", 0x5F60); 425 named_labels = weak_label(named_labels, "_bios_vdp_dma_wordram", 0x2D4);
403 named_labels = weak_label(named_labels, "_trace", 0x5F64); 426 named_labels = weak_label(named_labels, "_bios_vdp_display_enable", 0x2D8);
404 named_labels = weak_label(named_labels, "_traceAddress", 0x5F66); 427 named_labels = weak_label(named_labels, "_bios_vdp_display_disable", 0x2DC);
405 named_labels = weak_label(named_labels, "_nocod0", 0x5F6A); 428 named_labels = weak_label(named_labels, "_bios_pal_buffer", 0x2E0);
406 named_labels = weak_label(named_labels, "_nocod0Address", 0x5F6C); 429 named_labels = weak_label(named_labels, "_bios_pal_buffer_update", 0x2E4);
407 named_labels = weak_label(named_labels, "_nocod0", 0x5F70); 430 named_labels = weak_label(named_labels, "_bios_pal_dma", 0x2E8);
408 named_labels = weak_label(named_labels, "_nocod0Address", 0x5F72); 431 named_labels = weak_label(named_labels, "_bios_gfx_decomp", 0x2EC);
409 named_labels = weak_label(named_labels, "_slevel1", 0x5F76); 432 named_labels = weak_label(named_labels, "_bios_gfx_decomp_ram", 0x2F0);
410 named_labels = weak_label(named_labels, "_slevel1Address", 0x5F78); 433 named_labels = weak_label(named_labels, "_bios_update_sprites", 0x2F4);
411 named_labels = weak_label(named_labels, "_slevel2", 0x5F7C); 434 named_labels = weak_label(named_labels, "_bios_clear_ram", 0x2F8);
412 named_labels = weak_label(named_labels, "_slevel2Address", 0x5F7E); 435 named_labels = weak_label(named_labels, "_bios_display_sprite", 0x300);
413 named_labels = weak_label(named_labels, "_slevel3", 0x5F82); 436 named_labels = weak_label(named_labels, "_bios_wait_vint", 0x304);
414 named_labels = weak_label(named_labels, "_slevel3Address", 0x5F84); 437 named_labels = weak_label(named_labels, "_bios_wait_vint_flags", 0x308);
415 named_labels = weak_label(named_labels, "WORD_RAM_2M", 0x80000); 438 named_labels = weak_label(named_labels, "_bios_dma_sat", 0x30C);
416 named_labels = weak_label(named_labels, "WORD_RAM_1M", 0xC0000); 439 named_labels = weak_label(named_labels, "_bios_set_hint_direct", 0x314);
417 named_labels = weak_label(named_labels, "LED_CONTROL", 0xFFFF8000); 440 named_labels = weak_label(named_labels, "_bios_disable_hint", 0x318);
418 named_labels = weak_label(named_labels, "VERSION_RESET", 0xFFFF8001); 441 named_labels = weak_label(named_labels, "_bios_print", 0x31C);
419 named_labels = weak_label(named_labels, "MEM_MODE_WORD", 0xFFFF8002); 442 named_labels = weak_label(named_labels, "_bios_load_user_font", 0x320);
420 named_labels = weak_label(named_labels, "MEM_MODE_BYTE", 0xFFFF8003); 443 named_labels = weak_label(named_labels, "_bios_load_bios_font", 0x324);
421 named_labels = weak_label(named_labels, "CDC_CTRL", 0xFFFF8004); 444 named_labels = weak_label(named_labels, "_bios_load_bios_font_default", 0x328);
422 named_labels = weak_label(named_labels, "CDC_AR", 0xFFFF8005); 445 //TODO: more functions in the middle here
423 named_labels = weak_label(named_labels, "CDC_REG_DATA_WORD", 0xFFFF8006); 446 named_labels = weak_label(named_labels, "_bios_prng_mod", 0x338);
424 named_labels = weak_label(named_labels, "CDC_REG_DATA", 0xFFFF8007); 447 named_labels = weak_label(named_labels, "_bios_prng", 0x33C);
425 named_labels = weak_label(named_labels, "CDC_HOST_DATA", 0xFFFF8008); 448 named_labels = weak_label(named_labels, "_bios_clear_comm", 0x340);
426 named_labels = weak_label(named_labels, "CDC_DMA_ADDR", 0xFFFF800A); 449 named_labels = weak_label(named_labels, "_bios_comm_update", 0x344);
427 named_labels = weak_label(named_labels, "STOP_WATCH", 0xFFFF800C); 450 //TODO: more functions in the middle here
428 named_labels = weak_label(named_labels, "COMM_MAIN_FLAG", 0xFFFF800E); 451 named_labels = weak_label(named_labels, "_bios_sega_logo", 0x364);
429 named_labels = weak_label(named_labels, "COMM_SUB_FLAG", 0xFFFF800F); 452 named_labels = weak_label(named_labels, "_bios_set_vint", 0x368);
430 named_labels = weak_label(named_labels, "COMM_CMD0", 0xFFFF8010); 453 //TODO: more functions at the end here
431 named_labels = weak_label(named_labels, "COMM_CMD1", 0xFFFF8012); 454
432 named_labels = weak_label(named_labels, "COMM_CMD2", 0xFFFF8014); 455 named_labels = weak_label(named_labels, "CD_RESET_IFL2", 0xA12000);
433 named_labels = weak_label(named_labels, "COMM_CMD3", 0xFFFF8016); 456 named_labels = weak_label(named_labels, "CD_RESET_IFL2_BYTE", 0xA12001);
434 named_labels = weak_label(named_labels, "COMM_CMD4", 0xFFFF8018); 457 named_labels = weak_label(named_labels, "CD_WRITE_PROTECT", 0xA12002);
435 named_labels = weak_label(named_labels, "COMM_CMD5", 0xFFFF801A); 458 named_labels = weak_label(named_labels, "CD_MEM_MODE", 0xA12003);
436 named_labels = weak_label(named_labels, "COMM_CMD6", 0xFFFF801C); 459 named_labels = weak_label(named_labels, "CDC_CTRL", 0xA12004);
437 named_labels = weak_label(named_labels, "COMM_CMD7", 0xFFFF801E); 460 named_labels = weak_label(named_labels, "HINT_VECTOR", 0xA12006);
438 named_labels = weak_label(named_labels, "COMM_STATUS0", 0xFFFF8020); 461 named_labels = weak_label(named_labels, "CDC_HOST_DATA", 0xA12008);
439 named_labels = weak_label(named_labels, "COMM_STATUS1", 0xFFFF8022); 462 named_labels = weak_label(named_labels, "STOP_WATCH", 0xA1200C);
440 named_labels = weak_label(named_labels, "COMM_STATUS2", 0xFFFF8024); 463 named_labels = weak_label(named_labels, "COMM_MAIN_FLAG", 0xA1200E);
441 named_labels = weak_label(named_labels, "COMM_STATUS3", 0xFFFF8026); 464 named_labels = weak_label(named_labels, "COMM_SUB_FLAG", 0xA1200F);
442 named_labels = weak_label(named_labels, "COMM_STATUS4", 0xFFFF8028); 465 named_labels = weak_label(named_labels, "COMM_CMD0", 0xA12010);
443 named_labels = weak_label(named_labels, "COMM_STATUS5", 0xFFFF802A); 466 named_labels = weak_label(named_labels, "COMM_CMD1", 0xA12012);
444 named_labels = weak_label(named_labels, "COMM_STATUS6", 0xFFFF802C); 467 named_labels = weak_label(named_labels, "COMM_CMD2", 0xA12014);
445 named_labels = weak_label(named_labels, "COMM_STATUS7", 0xFFFF802E); 468 named_labels = weak_label(named_labels, "COMM_CMD3", 0xA12016);
446 named_labels = weak_label(named_labels, "TIMER_WORD", 0xFFFF8030); 469 named_labels = weak_label(named_labels, "COMM_CMD4", 0xA12018);
447 named_labels = weak_label(named_labels, "TIMER", 0xFFFF8031); 470 named_labels = weak_label(named_labels, "COMM_CMD5", 0xA1201A);
448 named_labels = weak_label(named_labels, "INT_MASK_WORD", 0xFFFF8032); 471 named_labels = weak_label(named_labels, "COMM_CMD6", 0xA1201C);
449 named_labels = weak_label(named_labels, "INT_MASK", 0xFFFF8033); 472 named_labels = weak_label(named_labels, "COMM_CMD7", 0xA1201E);
450 named_labels = weak_label(named_labels, "CDD_FADER", 0xFFFF8034); 473 named_labels = weak_label(named_labels, "COMM_STATUS0", 0xA12020);
451 named_labels = weak_label(named_labels, "CDD_CTRL_WORD", 0xFFFF8036); 474 named_labels = weak_label(named_labels, "COMM_STATUS1", 0xA12022);
452 named_labels = weak_label(named_labels, "CDD_CTRL_BYTE", 0xFFFF8037); 475 named_labels = weak_label(named_labels, "COMM_STATUS2", 0xA12024);
476 named_labels = weak_label(named_labels, "COMM_STATUS3", 0xA12026);
477 named_labels = weak_label(named_labels, "COMM_STATUS4", 0xA12028);
478 named_labels = weak_label(named_labels, "COMM_STATUS5", 0xA1202A);
479 named_labels = weak_label(named_labels, "COMM_STATUS6", 0xA1202C);
480 named_labels = weak_label(named_labels, "COMM_STATUS7", 0xA1202E);
481 } else {
482 named_labels = weak_label(named_labels, "bios_common_work", 0x5E80);
483 named_labels = weak_label(named_labels, "_setjmptbl", 0x5F0A);
484 named_labels = weak_label(named_labels, "_waitvsync", 0x5F10);
485 named_labels = weak_label(named_labels, "_buram", 0x5F16);
486 named_labels = weak_label(named_labels, "_cdboot", 0x5F1C);
487 named_labels = weak_label(named_labels, "_cdbios", 0x5F22);
488 named_labels = weak_label(named_labels, "_usercall0", 0x5F28);
489 named_labels = weak_label(named_labels, "_usercall1", 0x5F2E);
490 named_labels = weak_label(named_labels, "_usercall2", 0x5F34);
491 named_labels = weak_label(named_labels, "_usercall2Address", 0x5F36);
492 named_labels = weak_label(named_labels, "_usercall3", 0x5F3A);
493 named_labels = weak_label(named_labels, "_adrerr", 0x5F40);
494 named_labels = weak_label(named_labels, "_adrerrAddress", 0x5F42);
495 named_labels = weak_label(named_labels, "_coderr", 0x5F46);
496 named_labels = weak_label(named_labels, "_coderrAddress", 0x5F48);
497 named_labels = weak_label(named_labels, "_diverr", 0x5F4C);
498 named_labels = weak_label(named_labels, "_diverrAddress", 0x5F4E);
499 named_labels = weak_label(named_labels, "_chkerr", 0x5F52);
500 named_labels = weak_label(named_labels, "_chkerrAddress", 0x5F54);
501 named_labels = weak_label(named_labels, "_trperr", 0x5F58);
502 named_labels = weak_label(named_labels, "_trperrAddress", 0x5F5A);
503 named_labels = weak_label(named_labels, "_spverr", 0x5F5E);
504 named_labels = weak_label(named_labels, "_spverrAddress", 0x5F60);
505 named_labels = weak_label(named_labels, "_trace", 0x5F64);
506 named_labels = weak_label(named_labels, "_traceAddress", 0x5F66);
507 named_labels = weak_label(named_labels, "_nocod0", 0x5F6A);
508 named_labels = weak_label(named_labels, "_nocod0Address", 0x5F6C);
509 named_labels = weak_label(named_labels, "_nocod0", 0x5F70);
510 named_labels = weak_label(named_labels, "_nocod0Address", 0x5F72);
511 named_labels = weak_label(named_labels, "_slevel1", 0x5F76);
512 named_labels = weak_label(named_labels, "_slevel1Address", 0x5F78);
513 named_labels = weak_label(named_labels, "_slevel2", 0x5F7C);
514 named_labels = weak_label(named_labels, "_slevel2Address", 0x5F7E);
515 named_labels = weak_label(named_labels, "_slevel3", 0x5F82);
516 named_labels = weak_label(named_labels, "_slevel3Address", 0x5F84);
517 named_labels = weak_label(named_labels, "WORD_RAM_2M", 0x80000);
518 named_labels = weak_label(named_labels, "WORD_RAM_1M", 0xC0000);
519 named_labels = weak_label(named_labels, "LED_CONTROL", 0xFFFF8000);
520 named_labels = weak_label(named_labels, "VERSION_RESET", 0xFFFF8001);
521 named_labels = weak_label(named_labels, "MEM_MODE_WORD", 0xFFFF8002);
522 named_labels = weak_label(named_labels, "MEM_MODE_BYTE", 0xFFFF8003);
523 named_labels = weak_label(named_labels, "CDC_CTRL", 0xFFFF8004);
524 named_labels = weak_label(named_labels, "CDC_AR", 0xFFFF8005);
525 named_labels = weak_label(named_labels, "CDC_REG_DATA_WORD", 0xFFFF8006);
526 named_labels = weak_label(named_labels, "CDC_REG_DATA", 0xFFFF8007);
527 named_labels = weak_label(named_labels, "CDC_HOST_DATA", 0xFFFF8008);
528 named_labels = weak_label(named_labels, "CDC_DMA_ADDR", 0xFFFF800A);
529 named_labels = weak_label(named_labels, "STOP_WATCH", 0xFFFF800C);
530 named_labels = weak_label(named_labels, "COMM_MAIN_FLAG", 0xFFFF800E);
531 named_labels = weak_label(named_labels, "COMM_SUB_FLAG", 0xFFFF800F);
532 named_labels = weak_label(named_labels, "COMM_CMD0", 0xFFFF8010);
533 named_labels = weak_label(named_labels, "COMM_CMD1", 0xFFFF8012);
534 named_labels = weak_label(named_labels, "COMM_CMD2", 0xFFFF8014);
535 named_labels = weak_label(named_labels, "COMM_CMD3", 0xFFFF8016);
536 named_labels = weak_label(named_labels, "COMM_CMD4", 0xFFFF8018);
537 named_labels = weak_label(named_labels, "COMM_CMD5", 0xFFFF801A);
538 named_labels = weak_label(named_labels, "COMM_CMD6", 0xFFFF801C);
539 named_labels = weak_label(named_labels, "COMM_CMD7", 0xFFFF801E);
540 named_labels = weak_label(named_labels, "COMM_STATUS0", 0xFFFF8020);
541 named_labels = weak_label(named_labels, "COMM_STATUS1", 0xFFFF8022);
542 named_labels = weak_label(named_labels, "COMM_STATUS2", 0xFFFF8024);
543 named_labels = weak_label(named_labels, "COMM_STATUS3", 0xFFFF8026);
544 named_labels = weak_label(named_labels, "COMM_STATUS4", 0xFFFF8028);
545 named_labels = weak_label(named_labels, "COMM_STATUS5", 0xFFFF802A);
546 named_labels = weak_label(named_labels, "COMM_STATUS6", 0xFFFF802C);
547 named_labels = weak_label(named_labels, "COMM_STATUS7", 0xFFFF802E);
548 named_labels = weak_label(named_labels, "TIMER_WORD", 0xFFFF8030);
549 named_labels = weak_label(named_labels, "TIMER", 0xFFFF8031);
550 named_labels = weak_label(named_labels, "INT_MASK_WORD", 0xFFFF8032);
551 named_labels = weak_label(named_labels, "INT_MASK", 0xFFFF8033);
552 named_labels = weak_label(named_labels, "CDD_FADER", 0xFFFF8034);
553 named_labels = weak_label(named_labels, "CDD_CTRL_WORD", 0xFFFF8036);
554 named_labels = weak_label(named_labels, "CDD_CTRL_BYTE", 0xFFFF8037);
555 }
453 } 556 }
454 uint16_t *encoded, *next; 557 uint16_t *encoded, *next;
455 uint32_t size, tmp_addr; 558 uint32_t size, tmp_addr;
456 uint32_t address; 559 uint32_t address;
457 while(def) { 560 while(def) {