├── README.md ├── bank_80.asm ├── bank_81.asm ├── bank_82.asm ├── bank_83.asm ├── bank_84.asm ├── bank_85.asm ├── bank_86.asm ├── bank_87.asm ├── bank_88.asm ├── bios ├── all.asm ├── bank80.asm └── ram.inc ├── include ├── BSXTokens_arm9.inc └── BSXTokens_byuu.inc └── update ├── biosupdate_boot_hook.asm ├── biosupdate_detect_receiver_and_do_downloads.asm ├── biosupdate_execute_game_code.asm ├── biosupdate_file_start_hook_arm9.asm ├── biosupdate_file_start_hook_byuu.asm ├── biosupdate_flash_get_and_interprete_id.asm ├── biosupdate_flash_get_id.asm ├── biosupdate_forward_queue_to_channel_map.asm ├── biosupdate_nmi_hook.asm ├── biosupdate_send_16bit_to_port_2199.asm └── info.txt /README.md: -------------------------------------------------------------------------------- 1 | # bsxbios_dis 2 | BS-X BIOS Disassembly 3 | 4 | Disassembly done by p4plus2, LuigiBlood & pantalytron -------------------------------------------------------------------------------- /bios/all.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS Disassembly 2 | //For bass ARM9 3 | 4 | arch snes.cpu 5 | 6 | include "ram.inc" 7 | include "bank80.asm" -------------------------------------------------------------------------------- /bios/bank80.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS Disassembly 2 | //Bank $80 3 | 4 | //======================================================== 5 | // UPDATE REGISTERS 6 | //======================================================== 7 | 8 | update_ppu: //($808200) 9 | php 10 | sep #$20 11 | lda.w inidisp_shadow 12 | sta $2100 13 | sta $021B 14 | lda.w obsel_shadow 15 | sta $2101 16 | lda.w bgmode_shadow 17 | sta $2105 18 | lda.w mosaic_shadow 19 | sta $2106 20 | lda.w bg1sc_shadow 21 | sta $2107 22 | lda.w bg2sc_shadow 23 | sta $2108 24 | lda.w bg3sc_shadow 25 | sta $2109 26 | lda.w bg4sc_shadow 27 | sta $210A 28 | lda.w bg12nba_shadow 29 | sta $210B 30 | lda.w bg34nba_shadow 31 | sta $210C 32 | lda.w m7sel_shadow 33 | sta $211A 34 | lda.w w12sel_shadow 35 | sta $2123 36 | lda.w w34sel_shadow 37 | sta $2124 38 | lda.w wobjsel_shadow 39 | sta $2125 40 | lda.w wh0_shadow 41 | sta $2126 42 | lda.w wh1_shadow 43 | sta $2127 44 | lda.w wh2_shadow 45 | sta $2128 46 | lda.w wh3_shadow 47 | sta $2129 48 | lda.w wbglog_shadow 49 | sta $212A 50 | lda.w wobjlog_shadow 51 | sta $212B 52 | lda.w tm_shadow 53 | sta $212C 54 | lda.w ts_shadow 55 | sta $212E 56 | lda.w tmw_shadow 57 | sta $212D 58 | lda.w tsw_shadow 59 | sta $212F 60 | lda.w cgwsel_shadow 61 | sta $2130 62 | lda.w cgadsub_shadow 63 | sta $2131 64 | lda.w coldata_r_shadow 65 | ora.b #$20 66 | sta $2132 67 | lda.w coldata_g_shadow 68 | ora.b #$40 69 | sta $2132 70 | lda.w coldata_b_shadow 71 | ora.b #$80 72 | sta $2132 73 | lda.w setini_shadow 74 | sta $2133 75 | lda.w bg1hofs_shadow 76 | sta $210D 77 | lda.w bg1hofs_h_shadow 78 | sta $210D 79 | lda.w bg1vofs_shadow 80 | sta $210E 81 | lda.w bg1vofs_h_shadow 82 | sta $210E 83 | lda.w bg2hofs_shadow 84 | sta $210F 85 | lda.w bg2hofs_h_shadow 86 | sta $210F 87 | lda.w bg2vofs_shadow 88 | sta $2110 89 | lda.w bg2vofs_h_shadow 90 | sta $2110 91 | lda.w bg3hofs_shadow 92 | sta $2111 93 | lda.w bg3hofs_h_shadow 94 | sta $2111 95 | lda.w bg3vofs_shadow 96 | sta $2112 97 | lda.w bg3vofs_h_shadow 98 | sta $2112 99 | lda.w bg4hofs_shadow 100 | sta $2113 101 | lda.w bg4hofs_h_shadow 102 | sta $2113 103 | lda.w bg4vofs_shadow 104 | sta $2114 105 | lda.w bg4vofs_h_shadow 106 | sta $2114 107 | lda.w hdmaen_shadow 108 | sta $420C 109 | plp 110 | rtl 111 | 112 | update_cgram: //($808328) 113 | php 114 | sep #$10 115 | rep #$20 116 | lda $021C 117 | beq + //Don't do it if $021C is 0 118 | lda.w #$2200 119 | sta $4310 120 | lda.w #$2000 121 | sta $4312 122 | ldx.b #$7E 123 | stx $4314 124 | lda.w #$0200 125 | sta $4315 126 | ldx.b #$00 127 | stx $2121 128 | ldx.b #$02 129 | stx $420B 130 | stz $021C 131 | +; plp 132 | rtl 133 | 134 | CODE_808358: 135 | php 136 | rep #$20 137 | lda.w #$0061 138 | sta $0224 139 | plp 140 | rtl 141 | 142 | CODE_808363: 143 | php 144 | sep #$20 145 | lda $0224 //Multiply something 146 | sta $4202 147 | lda.b #$05 148 | sta $4203 149 | nop 150 | rep #$20 151 | lda $4216 152 | pha 153 | sep #$20 154 | lda $0225 155 | sta $4202 156 | lda.b #$05 157 | sta $4203 158 | xba 159 | nop 160 | lda $4216 161 | sec 162 | adc $02,s 163 | sta $02,s 164 | rep #$20 165 | pla 166 | adc.w #$0011 167 | adc $0226 168 | sta $0224 169 | plp 170 | rtl 171 | 172 | enable_nmi: //($80839D) 173 | php 174 | sep #$20 175 | lda.w nmitimen_shadow 176 | ora.b #$80 177 | sta $4200 178 | sta.w nmitimen_shadow 179 | plp 180 | rtl 181 | 182 | disable_nmi: //($8083AD) 183 | php 184 | sep #$20 185 | lda.w nmitimen_shadow 186 | and.b #$7F 187 | sta $4200 188 | sta.w nmitimen_shadow 189 | plp 190 | rtl 191 | 192 | upload_zero_to_vram: //($8083BD) 193 | php 194 | sep #$20 195 | lda.b #$80 196 | sta $2115 //Set Up VRAM 197 | stz $2116 198 | stz $2117 199 | lda.b #$09 200 | sta $4300 201 | lda.b #$18 202 | sta $4301 203 | lda.b #$F5 204 | sta $4302 205 | lda.b #$83 206 | sta $4303 207 | lda.b #$80 208 | sta $4304 209 | lda.b #$00 210 | sta $4305 211 | lda.b #$00 //Set up DMA (Mode 1, transfer 2 bytes) 212 | sta $4306 //$8083F5 (ROM) -> $2118 (VRAM) 213 | lda.b #$01 //$0000 bytes 214 | sta $420B 215 | plp 216 | rtl 217 | 218 | upload_zero_to_vram_data: //($8083F5) 219 | dw $0000 220 | 221 | enable_force_blank: //($8083F7) 222 | php 223 | sep #$20 224 | lda.w inidisp_shadow 225 | ora.b #$80 226 | sta.w inidisp_shadow 227 | plp 228 | rtl 229 | 230 | disable_force_blank: //($808404) 231 | php 232 | sep #$20 233 | lda.w inidisp_shadow 234 | and.b #$7F 235 | sta.w inidisp_shadow 236 | plp 237 | rtl 238 | 239 | shadow_register_setup: //($808411) 240 | php 241 | sep #$10 242 | rep #$20 243 | lda $03,s //Use Return Address as argument 244 | sta $0021 245 | lda $02,s 246 | sta $0020 247 | clc 248 | adc.w #$0003 //Set Return Address properly (+3) 249 | sta $02,s 250 | ldy.b #$01 251 | lda [$20],y 252 | sta $0023 253 | iny 254 | lda [$20],y 255 | sta $0024 256 | sep #$20 257 | ldy.b #$00 258 | -; lda [$23],y //Read Register Shadow Address 259 | tax 260 | cmp.b #$FF //If $FF, stop 261 | beq + 262 | iny 263 | lda [$23],y //Read value to write to shadow register 264 | sta $0100,x 265 | iny 266 | bra - 267 | +; plp 268 | rtl 269 | 270 | DATA_808449: 271 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 272 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 273 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 274 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 275 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 276 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 277 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 278 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 279 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 280 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 281 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 282 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 283 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 284 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 285 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 286 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 287 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 288 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 289 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 290 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 291 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 292 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 293 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 294 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 295 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 296 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 297 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 298 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 299 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 300 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 301 | dw $0001, $0002, $0004, $0008, $0010, $0020, $0040, $0080 302 | dw $0100, $0200, $0400, $0800, $1000, $2000, $4000, $8000 303 | 304 | DATA_808649: 305 | db $00, $1E; dw $0003 306 | db $00, $1E; dw $000C 307 | db $00, $1E; dw $0030 308 | db $00, $1E; dw $00C0 309 | db $00, $1E; dw $0300 310 | db $00, $1E; dw $0C00 311 | db $00, $1E; dw $3000 312 | db $00, $1E; dw $C000 313 | db $02, $1E; dw $0003 314 | db $02, $1E; dw $000C 315 | db $02, $1E; dw $0030 316 | db $02, $1E; dw $00C0 317 | db $02, $1E; dw $0300 318 | db $02, $1E; dw $0C00 319 | db $02, $1E; dw $3000 320 | db $02, $1E; dw $C000 321 | db $04, $1E; dw $0003 322 | db $04, $1E; dw $000C 323 | db $04, $1E; dw $0030 324 | db $04, $1E; dw $00C0 325 | db $04, $1E; dw $0300 326 | db $04, $1E; dw $0C00 327 | db $04, $1E; dw $3000 328 | db $04, $1E; dw $C000 329 | db $06, $1E; dw $0003 330 | db $06, $1E; dw $000C 331 | db $06, $1E; dw $0030 332 | db $06, $1E; dw $00C0 333 | db $06, $1E; dw $0300 334 | db $06, $1E; dw $0C00 335 | db $06, $1E; dw $3000 336 | db $06, $1E; dw $C000 337 | db $08, $1E; dw $0003 338 | db $08, $1E; dw $000C 339 | db $08, $1E; dw $0030 340 | db $08, $1E; dw $00C0 341 | db $08, $1E; dw $0300 342 | db $08, $1E; dw $0C00 343 | db $08, $1E; dw $3000 344 | db $08, $1E; dw $C000 345 | db $0A, $1E; dw $0003 346 | db $0A, $1E; dw $000C 347 | db $0A, $1E; dw $0030 348 | db $0A, $1E; dw $00C0 349 | db $0A, $1E; dw $0300 350 | db $0A, $1E; dw $0C00 351 | db $0A, $1E; dw $3000 352 | db $0A, $1E; dw $C000 353 | db $0C, $1E; dw $0003 354 | db $0C, $1E; dw $000C 355 | db $0C, $1E; dw $0030 356 | db $0C, $1E; dw $00C0 357 | db $0C, $1E; dw $0300 358 | db $0C, $1E; dw $0C00 359 | db $0C, $1E; dw $3000 360 | db $0C, $1E; dw $C000 361 | db $0E, $1E; dw $0003 362 | db $0E, $1E; dw $000C 363 | db $0E, $1E; dw $0030 364 | db $0E, $1E; dw $00C0 365 | db $0E, $1E; dw $0300 366 | db $0E, $1E; dw $0C00 367 | db $0E, $1E; dw $3000 368 | db $0E, $1E; dw $C000 369 | db $10, $1E; dw $0003 370 | db $10, $1E; dw $000C 371 | db $10, $1E; dw $0030 372 | db $10, $1E; dw $00C0 373 | db $10, $1E; dw $0300 374 | db $10, $1E; dw $0C00 375 | db $10, $1E; dw $3000 376 | db $10, $1E; dw $C000 377 | db $12, $1E; dw $0003 378 | db $12, $1E; dw $000C 379 | db $12, $1E; dw $0030 380 | db $12, $1E; dw $00C0 381 | db $12, $1E; dw $0300 382 | db $12, $1E; dw $0C00 383 | db $12, $1E; dw $3000 384 | db $12, $1E; dw $C000 385 | db $14, $1E; dw $0003 386 | db $14, $1E; dw $000C 387 | db $14, $1E; dw $0030 388 | db $14, $1E; dw $00C0 389 | db $14, $1E; dw $0300 390 | db $14, $1E; dw $0C00 391 | db $14, $1E; dw $3000 392 | db $14, $1E; dw $C000 393 | db $16, $1E; dw $0003 394 | db $16, $1E; dw $000C 395 | db $16, $1E; dw $0030 396 | db $16, $1E; dw $00C0 397 | db $16, $1E; dw $0300 398 | db $16, $1E; dw $0C00 399 | db $16, $1E; dw $3000 400 | db $16, $1E; dw $C000 401 | db $18, $1E; dw $0003 402 | db $18, $1E; dw $000C 403 | db $18, $1E; dw $0030 404 | db $18, $1E; dw $00C0 405 | db $18, $1E; dw $0300 406 | db $18, $1E; dw $0C00 407 | db $18, $1E; dw $3000 408 | db $18, $1E; dw $C000 409 | db $1A, $1E; dw $0003 410 | db $1A, $1E; dw $000C 411 | db $1A, $1E; dw $0030 412 | db $1A, $1E; dw $00C0 413 | db $1A, $1E; dw $0300 414 | db $1A, $1E; dw $0C00 415 | db $1A, $1E; dw $3000 416 | db $1A, $1E; dw $C000 417 | db $1C, $1E; dw $0003 418 | db $1C, $1E; dw $000C 419 | db $1C, $1E; dw $0030 420 | db $1C, $1E; dw $00C0 421 | db $1C, $1E; dw $0300 422 | db $1C, $1E; dw $0C00 423 | db $1C, $1E; dw $3000 424 | db $1C, $1E; dw $C000 425 | db $1E, $1E; dw $0003 426 | db $1E, $1E; dw $000C 427 | db $1E, $1E; dw $0030 428 | db $1E, $1E; dw $00C0 429 | db $1E, $1E; dw $0300 430 | db $1E, $1E; dw $0C00 431 | db $1E, $1E; dw $3000 432 | db $1E, $1E; dw $C000 433 | 434 | CODE_808849: 435 | lda [$20] 436 | beq CODE_8088C5 437 | sta $04 438 | ldy.w #$0002 439 | ldx $1E20 440 | clc 441 | -; lda [$20],y 442 | sta $0C 443 | iny 444 | iny 445 | adc $00 446 | sta $1C00,x 447 | bit.w #$0100 448 | beq + 449 | lda.l DATA_808649,x 450 | sta $06 451 | lda ($06) 452 | ora.l DATA_808449,x 453 | sta ($06) 454 | +; lda [$20],y 455 | and.w #$00FF 456 | bit.w #$0080 457 | beq + 458 | ora.w #$FF00 459 | +; clc 460 | adc $02 461 | cmp.w #$00F0 462 | bcc + 463 | cmp.w #$FFF0 464 | bcs + 465 | lda.w #$00F0 466 | +; sep #$20 467 | sta $1C01,x 468 | iny 469 | rep #$21 470 | lda $0C 471 | bpl + 472 | lda.l DATA_808649,x 473 | sta $06 474 | lda ($06) 475 | ora.l (DATA_808449+2),x 476 | sta ($06) 477 | +; lda [$20],y 478 | iny 479 | iny 480 | and $0A 481 | adc $08 482 | sta $1C02,x 483 | txa 484 | adc.w #$0004 485 | adc.w #$01FF 486 | tax 487 | dec $04 488 | bne - 489 | stx $1E20 490 | CODE_8088C5: 491 | rtl 492 | 493 | CODE_8088C6: 494 | lda $0000,y 495 | bne + 496 | rtl 497 | +; sta $0004 498 | iny 499 | iny 500 | ldx $1E20 501 | clc 502 | -; lda $0000,y 503 | clc 504 | adc $0000 505 | sta $1C00,x 506 | bit.w #$0100 507 | beq + 508 | lda.l DATA_808649,x 509 | sta $0006 510 | lda ($06) 511 | ora.l DATA_808449,x 512 | sta ($06) 513 | +; sep #$20 514 | clc 515 | lda $0002,y 516 | bmi + 517 | adc $0002 518 | bcs CODE_808909 519 | bcc CODE_808907 520 | +; adc $0002 521 | bcc CODE_808909 522 | CODE_808907: 523 | lda.b #$F0 524 | CODE_808909: 525 | sta $1C01,x 526 | rep #$21 527 | lda $0000,y 528 | bpl + 529 | lda.l DATA_808649,x 530 | sta $0006 531 | lda ($06) 532 | ora.l (DATA_808449+2),x 533 | sta ($06) 534 | +; lda $0003,y 535 | adc $0008 536 | ora $000A 537 | sta $1C02,x 538 | txa 539 | adc.w #$0004 540 | and.w #$01FF 541 | tax 542 | tya 543 | adc.w #$0005 544 | tay 545 | dec $0004 546 | bne - 547 | stx $1E20 548 | rtl 549 | 550 | upload_oam: //($808944) 551 | php 552 | sep #$10 553 | rep #$20 554 | lda.w #$0400 555 | sta $4300 556 | lda.w #$1C00 557 | sta $4302 558 | ldx.b #$00 559 | stx $4304 560 | lda.w #$0220 561 | sta $4305 562 | stz $2102 //DMA Setup: 563 | ldx.b #$01 //$001C00 (RAM) -> $2104 (OAM) 564 | stx $420B //$0220 bytes 565 | plp 566 | rtl 567 | 568 | read_joypad: //($80896A) 569 | php 570 | sep #$20 571 | -; lda $4212 //Wait until Auto-Joypad read is done 572 | and.b #$01 573 | bne - 574 | rep #$20 575 | lda $4218 //Joypad 1 576 | sta.w joy1_input 577 | eor.w joy1_input_last 578 | and.w joy1_input 579 | sta.w joy1_pushed 580 | sta $0158 581 | lda.w joy1_input 582 | beq + 583 | cmp.w joy1_input_last 584 | bne + 585 | dec $0162 586 | bne ++ 587 | lda.w joy1_input 588 | sta $0158 589 | lda $014E 590 | sta $0162 591 | bra ++ 592 | +; lda $014C 593 | sta $0162 594 | +; lda.w joy1_input 595 | sta.w joy1_input_last 596 | lda $421A //Joypad 2 597 | sta.w joy2_input 598 | eor joy2_input_last 599 | and.w joy2_input 600 | sta.w joy2_pushed 601 | sta $015A 602 | lda.w joy2_input 603 | beq + 604 | cmp joy2_input_last 605 | bne + 606 | dec $016A 607 | bne ++ 608 | lda.w joy2_input 609 | sta $015A 610 | lda $014E 611 | sta $016A 612 | bra ++ 613 | +; lda $014C 614 | sta $016A 615 | +; lda.w joy2_input 616 | sta joy2_input_last 617 | plp 618 | rtl 619 | 620 | upload_oam2: //($8089EE) 621 | php //Why this a second time? 622 | sep #$10 623 | rep #$20 624 | lda.w #$0400 625 | sta $4300 626 | lda.w #$1C00 627 | sta $4302 628 | ldx.b #$00 629 | stx $4304 630 | lda.w #$0220 631 | sta $4305 632 | stz $2102 //DMA Setup: 633 | ldx.b #$01 //$001C00 (RAM) -> $2104 (OAM) 634 | stx $420B //$0220 bytes 635 | plp 636 | rtl 637 | 638 | CODE_808A14: 639 | php 640 | phd 641 | sep #$30 642 | lda $1E21 643 | and.b #$03 644 | asl 645 | tax 646 | jsr.w (DATA_008A2A,x) 647 | rep #$30 648 | stz $1E20 649 | pld 650 | plp 651 | rtl 652 | 653 | DATA_008A2A: 654 | dw CODE_808A32 655 | dw CODE_808A51 656 | dw clear_oam_low_buffer_return 657 | dw clear_oam_low_buffer_return 658 | 659 | CODE_808A32: 660 | rep #$20 661 | ldx.w #$0BF0 662 | lda.w #$1D00 663 | tcd 664 | jsr clear_oam_low_buffer 665 | pld 666 | lda $1E20 667 | lsr 668 | clc 669 | adc.w #clear_oam_low_buffer 670 | sta $003C 671 | lda.w #$1C00 672 | tcd 673 | jmp ($003C) 674 | 675 | CODE_808A51: 676 | rep #$20 677 | ldx.w #$ADF0 678 | jsr CODE_80291E 679 | sbc $184A00,x 680 | adc.w #clear_oam_low_buffer 681 | sta $003C 682 | lda.w #$1D00 683 | tcd 684 | jmp ($003C) 685 | 686 | clear_oam_low_buffer: //($808A6A) 687 | stx $01 688 | stx $05 689 | stx $09 690 | stx $0D 691 | stx $11 692 | stx $15 693 | stx $19 694 | stx $1D 695 | stx $21 696 | stx $25 697 | stx $29 698 | stx $2D 699 | stx $31 700 | stx $35 701 | stx $39 702 | stx $3D 703 | stx $41 704 | stx $45 705 | stx $49 706 | stx $4D 707 | stx $51 708 | stx $55 709 | stx $59 710 | stx $5D 711 | stx $61 712 | stx $65 713 | stx $69 714 | stx $6D 715 | stx $71 716 | stx $75 717 | stx $79 718 | stx $7D 719 | stx $81 720 | stx $85 721 | stx $89 722 | stx $8D 723 | stx $91 724 | stx $95 725 | stx $99 726 | stx $9D 727 | stx $A1 728 | stx $A5 729 | stx $A9 730 | stx $AD 731 | stx $B1 732 | stx $B5 733 | stx $B9 734 | stx $BD 735 | stx $C1 736 | stx $C5 737 | stx $C9 738 | stx $CD 739 | stx $D1 740 | stx $D5 741 | stx $D9 742 | stx $DD 743 | stx $E1 744 | stx $E5 745 | stx $E9 746 | stx $ED 747 | stx $F1 748 | stx $F5 749 | stx $F9 750 | stx $FD 751 | clear_oam_low_buffer_return: 752 | rts 753 | 754 | clear_oam_high_buffer: //($808AEB) 755 | stz $1E00 756 | stz $1E02 757 | stz $1E04 758 | stz $1E06 759 | stz $1E08 760 | stz $1E0A 761 | stz $1E0C 762 | stz $1E0E 763 | stz $1E10 764 | stz $1E12 765 | stz $1E14 766 | stz $1E16 767 | stz $1E18 768 | stz $1E1A 769 | stz $1E1C 770 | stz $1E1E 771 | rtl 772 | 773 | CODE_808B1C: 774 | php 775 | phb 776 | sep #$20 777 | lda $05,s 778 | pha 779 | plb 780 | rep #$30 781 | lda $03,s 782 | tax 783 | lda $0001,x 784 | and.w #$00FF 785 | sta $0038 786 | sta $003A 787 | inx 788 | ldy.w #$0000 789 | -; lsr $0038 790 | bcc + 791 | lda $0001,x 792 | sta $4300,y 793 | lda $0003,x 794 | sta $4302,y 795 | lda $0005,x 796 | sta $4304,y 797 | lda $0006,x 798 | sta $4305,y 799 | txa 800 | clc 801 | adc.w #$0007 802 | tax 803 | +; tya 804 | clc 805 | adc.w #$0010 806 | tay 807 | cpy.w #$0080 808 | bne - 809 | txa 810 | sta $03,s 811 | sep #$20 812 | lda $003A 813 | sta $420B 814 | plb 815 | plp 816 | rtl 817 | 818 | CODE_808B75: 819 | phx 820 | phy 821 | pha 822 | php 823 | sep #$10 824 | rep #$20 825 | ldx $0014 826 | stx $4202 827 | ldx $0016 828 | stx $4203 829 | nop 830 | nop 831 | nop 832 | lda $4216 833 | sta $0018 834 | ldx $0015 835 | stx $4202 836 | ldx $0017 837 | stx $4203 838 | nop 839 | nop 840 | nop 841 | ldx $4216 842 | stx $001A 843 | ldy $4217 844 | ldx $0015 845 | stx $4202 846 | ldx $0016 847 | stx $4203 848 | nop 849 | nop 850 | lda $0019 851 | clc 852 | adc $4216 853 | sta $0019 854 | bcc + 855 | iny 856 | +; ldx $0014 857 | stx $4202 858 | ldx $0017 859 | stx $4203 860 | nop 861 | nop 862 | lda $0019 863 | clc 864 | adc $4216 865 | sta $0019 866 | bcc + 867 | iny 868 | +; sty $001B 869 | plp 870 | pla 871 | ply 872 | plx 873 | rtl 874 | 875 | CODE_808BE8: 876 | php 877 | rep #$30 878 | stz $14 879 | lda $1C 880 | bne + 881 | stz $1A 882 | bra ++ 883 | +; ldx.w #$0011 884 | clc 885 | -; rol $1A 886 | dex 887 | beq + 888 | rol $14 889 | lda $14 890 | beq - 891 | sec 892 | sbc $1C 893 | bcc - 894 | sta $14 895 | bra - 896 | +; plp 897 | rtl 898 | 899 | CODE_808C0F: 900 | phb //Something to do with VRAM DMA pipeline 901 | php 902 | phk 903 | plb 904 | sep #$30 905 | lda.b #$80 906 | sta $020C 907 | lda.b #$10 908 | sta $01FC 909 | ldx.b #$0F 910 | -; stz $016C,x 911 | dex 912 | bpl - 913 | plp 914 | plb 915 | rtl 916 | 917 | CODE_808C2A: //Invoke_dma_via_ax_ptr 918 | php 919 | rep #$30 920 | phx 921 | phy 922 | tay 923 | lda $0643 924 | pha 925 | lda.w #$0001 926 | sta $0643 927 | tya 928 | xba 929 | sta $3F 930 | stx $3E 931 | sep #$30 932 | ldy #$00 933 | ldx #$0F 934 | -; lda $016C,x 935 | beq CODE_808C5E 936 | dex 937 | bpl - 938 | bra CODE_808C53 939 | CODE_808C50: 940 | stz $016C,x 941 | CODE_808C53: 942 | nop 943 | CODE_808C54: 944 | rep #$30 945 | pla 946 | sta $0643 947 | ply 948 | plx 949 | plp 950 | rtl 951 | CODE_808C5E: 952 | lda [$3E],y 953 | iny 954 | sta $016C,x 955 | -; beq - 956 | dec 957 | beq CODE_808C9E 958 | lda [$3E],y 959 | iny 960 | sta $01AC,x 961 | lda [$3E],y 962 | iny 963 | sta $01BC,x 964 | lda [$3E],y 965 | iny 966 | sta $01CC,x 967 | lda [$3E],y 968 | iny 969 | sta $01DC,x 970 | lda [$3E],y 971 | iny 972 | sta $01EC,x 973 | lda [$3E],y 974 | iny 975 | sta $017C,x 976 | lda [$3E],y 977 | iny 978 | sta $018C,x 979 | lda [$3E],y 980 | cmp.b #$80 981 | bcs CODE_808C50 982 | sta $019C,x 983 | bra CODE_808CC1 984 | CODE_808C9E: 985 | lda [$3E],y 986 | iny 987 | sta $01AC,x 988 | lda [$3E],y 989 | iny 990 | sta $01BC,x 991 | lda [$3E],y 992 | iny 993 | sta $01CC,x 994 | lda [$3E],y 995 | iny 996 | sta $01DC,x 997 | lda [$3E],y 998 | iny 999 | sta $01EC,x 1000 | lda [$3E],y 1001 | sta $017C,x 1002 | lda.b #$80 1003 | sta $01FC,x 1004 | txa 1005 | ldx $01FC 1006 | sta $01FC,x 1007 | sta $01FC 1008 | lda $021B 1009 | bpl + 1010 | jsl CODE_808CDC 1011 | +; brl CODE_808C54 1012 | 1013 | CODE_808CDC: //Invoke_dma_via_ax_ptr (dma pipeline work subroutine) 1014 | phb 1015 | php 1016 | phk 1017 | plb 1018 | sep #$30 1019 | ldx #$10 1020 | CODE_808CE4: 1021 | lda $01FC,x 1022 | bmi CODE_808CFB 1023 | tax 1024 | lda $016C,x 1025 | dec 1026 | beq CODE_808D4C 1027 | dec 1028 | beq CODE_808D08 1029 | dec 1030 | bne CODE_808CF9 1031 | brl CODE_808D83 1032 | CODE_808CF9: 1033 | bra CODE_808CF9 1034 | CODE_808CFB: 1035 | lda #$80 1036 | sta $020C 1037 | lda #$10 1038 | sta $01FC 1039 | plp 1040 | plb 1041 | rtl 1042 | CODE_808D08: 1043 | lda $01AC,x 1044 | sta $4312 1045 | lda $01BC,x 1046 | sta $4313 1047 | lda $01CC,x 1048 | sta $4314 1049 | lda $01DC,x 1050 | sta $4315 1051 | lda $01EC,x 1052 | sta $4316 1053 | lda $017C,x 1054 | sta $2115 1055 | lda $018C,x 1056 | sta $2116 1057 | lda $019C,x 1058 | sta $2117 1059 | lda #$01 1060 | sta $4310 1061 | lda #$18 1062 | sta $4311 1063 | lda.b #$02 1064 | sta $420B 1065 | stz $016C,x 1066 | bra CODE_808CE4 1067 | CODE_808D4C: 1068 | lda $01AC,x 1069 | sta $4312 1070 | lda $01BC,x 1071 | sta $4313 1072 | lda $01CC,x 1073 | sta $4314 1074 | lda $01DC,x 1075 | sta $4315 1076 | lda $01EC,x 1077 | sta $4316 1078 | lda $017C,x 1079 | sta $2121 1080 | stz $4310 1081 | lda #$22 1082 | sta $4311 1083 | lda #$02 1084 | sta $420B 1085 | stz $016C,x 1086 | brl CODE_808CE4 1087 | CODE_808D83: 1088 | lda $01AC,x 1089 | sta $4312 1090 | lda $01BC,x 1091 | sta $4313 1092 | lda $01CC,x 1093 | sta $4314 1094 | lda $01DC,x 1095 | sta $4315 1096 | lda $01EC,x 1097 | sta $4316 1098 | lda $017C,x 1099 | sta $2115 1100 | lda $018C,x 1101 | sta $2116 1102 | lda $019C,x 1103 | sta $2117 1104 | lda #$81 1105 | sta $4310 1106 | lda #$39 1107 | sta $4311 1108 | lda $2139 1109 | lda $213A 1110 | lda #$02 1111 | sta $420B 1112 | stz $016C,x 1113 | brl CODE_808CE4 1114 | 1115 | CODE_808DCE: //Mouse related 1116 | phx 1117 | jsr CODE_808DD9 //mouseX_input_l 1118 | inx 1119 | inx 1120 | jsr CODE_808DD9 //mouseX_input_h 1121 | plx 1122 | rts 1123 | 1124 | CODE_808DD9: //Turn mouse input into real negative number 1125 | lda.w mouse1_input_l,x 1126 | bpl + 1127 | and.b #$7F 1128 | eor.b #$FF 1129 | inc 1130 | sta.w mouse1_input_l,x 1131 | bra ++ 1132 | +; and.b #$7F 1133 | +; sta.w mouse1_input_l,x 1134 | rts 1135 | 1136 | CODE_808DEE: //Mouse? Unknown 1137 | txa 1138 | asl a 1139 | tay 1140 | lda $0158,y 1141 | asl a 1142 | asl a 1143 | rol $0215,x 1144 | lda $0154,y 1145 | asl a 1146 | asl a 1147 | rol $0215,x 1148 | lda $0150,y 1149 | asl a 1150 | asl a 1151 | rol $0215,x 1152 | ASL $0215,x 1153 | lda $0158,y 1154 | asl a 1155 | rol $0215,x 1156 | lda $0154,y 1157 | asl a 1158 | rol $0215,x 1159 | lda $0150,y 1160 | asl a 1161 | rol $0215,x 1162 | jsr CODE_808E25 1163 | rts 1164 | 1165 | CODE_808E25: //Mouse? Unknown 1166 | lda $0219,x 1167 | bne + 1168 | lda $0215,x 1169 | and #$22 1170 | beq +++ 1171 | sta $0217,x 1172 | lda #$40 1173 | sta $0219,x 1174 | bra +++ 1175 | +; lda $0211,x 1176 | ora $0213,x 1177 | bne + 1178 | dec $0219,x 1179 | lda $0215,x 1180 | and #$22 1181 | and $0217,x 1182 | beq ++ 1183 | asl a 1184 | asl a 1185 | ora $0215,x 1186 | sta $0215,x 1187 | +; stz $0219,x 1188 | stz $0217,x 1189 | +; rts 1190 | 1191 | CODE_808E5F: //Mouse Read stuff? 1192 | ldx #$01 1193 | -; txa 1194 | asl a 1195 | tay 1196 | lda $4218,y 1197 | and #$0F 1198 | cmp #$01 1199 | beq + 1200 | stz $0217,x 1201 | stz $0219,x 1202 | bra ++ 1203 | +; lda $020E 1204 | ora.w DATA_808E97,x 1205 | sta $020E 1206 | ldy #$10 1207 | -; lda $4016,x 1208 | lsr a 1209 | rol $0211,x 1210 | rol $0213,x 1211 | dey 1212 | bne - 1213 | jsr CODE_808DCE 1214 | jsr CODE_808DEE 1215 | +; dex 1216 | bpl -- 1217 | rts 1218 | 1219 | DATA_808E97: 1220 | db $01, $02 1221 | 1222 | CODE_808E99: //Mouse? 1223 | phb 1224 | php 1225 | phk 1226 | plb 1227 | sep #$30 1228 | stz $020E 1229 | stz $0215 1230 | stz $0211 1231 | stz $0213 1232 | stz $0216 1233 | stz $0212 1234 | stz $0214 1235 | lda $0135 1236 | lsr a 1237 | bcc + 1238 | -; lda $4212 1239 | lsr a 1240 | bcs - 1241 | jsr CODE_808E5F 1242 | jsr CODE_808F0A 1243 | +; plp 1244 | plb 1245 | rtl 1246 | 1247 | CODE_808EC9: //Manual Joypad Read 1248 | lda #$06 1249 | sta $0041 1250 | -; lda #$01 1251 | sta $4016 1252 | lda $4016,x 1253 | stz $4016 1254 | lda #$01 1255 | sta $4016 1256 | lda #$00 1257 | sta $4016 1258 | sta $0044 1259 | ldy #$0A 1260 | -; lda $4016,x 1261 | dey 1262 | bne - 1263 | lda $4016,x 1264 | lsr a 1265 | rol $0044 1266 | lda $4016,x 1267 | lsr a 1268 | rol $0044 1269 | lda $0044 1270 | cmp $020F,x 1271 | beq + 1272 | dec $0041 1273 | bne -- 1274 | +; rts 1275 | 1276 | CODE_808F0A: //Read both joypad ports? 1277 | ldx #$01 1278 | -; lda $020E 1279 | and.w DATA_808F1B,x 1280 | beq + 1281 | jsr CODE_808EC9 1282 | +; dex 1283 | bpl - 1284 | rts 1285 | 1286 | DATA_808F1B: 1287 | db $01, $02 1288 | 1289 | CODE_808F1D: //Enable Auto-Joypad Read 1290 | php 1291 | sep #$20 1292 | lda.w nmitimen_shadow 1293 | ora #$01 1294 | sta $4200 1295 | sta.w nmitimen_shadow 1296 | lda #$10 1297 | sta $014C 1298 | lda #$02 1299 | sta $014E 1300 | plp 1301 | rtl 1302 | 1303 | CODE_808F37: 1304 | php 1305 | sep #$20 1306 | lda #$01 1307 | sta $020D 1308 | lda #$02 1309 | sta $020F 1310 | sta $0210 1311 | plp 1312 | rtl 1313 | 1314 | CODE_808F49: //Frame Counter 1315 | lda $0627 1316 | inc 1317 | cmp #$003C 1318 | bcs + 1319 | sta $0627 1320 | rtl 1321 | +; stz $0627 1322 | lda $0629 1323 | inc 1324 | cmp #$003C 1325 | bcs + 1326 | sta $0629 1327 | rtl 1328 | +; stz $0629 1329 | lda $062B 1330 | inc 1331 | cmp #$003C 1332 | bcs + 1333 | sta $062B 1334 | rtl 1335 | +; stz $062B 1336 | inc $062D 1337 | rtl 1338 | 1339 | //======================================================== 1340 | // RESET VECTOR AND INITIALIZATION 1341 | //======================================================== 1342 | 1343 | _reset: //($808F7D) 1344 | sei //Set Interrupt Flag 1345 | clc //Clear Carry Flag 1346 | xce //Switch to Native Mode 1347 | jml init 1348 | 1349 | init: //($808F84) 1350 | sep #$20 //8-bit A 1351 | rep #$10 //16-bit X/Y 1352 | phk 1353 | plb //Set Data Bank to $80 1354 | lda.b #$01 1355 | sta $4200 //Enable Auto-Joypad Read 1356 | sta $420D //Enable FastROM Access Speed 1357 | lda.b #$80 1358 | sta $2100 //Force Blank 1359 | 1360 | rep #$30 //16-bit A/X/Y 1361 | lda.w #$0000 1362 | tcd //Set Direct Page to $0000 1363 | lda $0663 1364 | eor.w #$FFFF 1365 | cmp $0661 1366 | bne init_ram 1367 | cmp.w #$5347 1368 | bne init_ram 1369 | tcd 1370 | init_ram: 1371 | lda.w #$0000 1372 | sta $7E0000 1373 | sta $7F0000 1374 | 1375 | lda.w #$FFFD 1376 | ldx.w #$0001 1377 | txy 1378 | iny 1379 | mvn $7E=$7E //Clear Bank $7E (WRAM) 1380 | 1381 | lda.w #$FFFD 1382 | ldx.w #$0001 1383 | txy 1384 | iny 1385 | mvn $7F=$7F //Clear Bank $7F (WRAM) 1386 | 1387 | phk 1388 | plb //Set Data Bank to $80 1389 | tdc 1390 | sta $0665 //Keep Direct Page to $0665 1391 | lda.w #$0000 1392 | tcd //Set Direct Page to $0000 1393 | lda.w #$1EFF 1394 | tas //Set Stack Pointer to $1EFF 1395 | jsl shadow_register_setup //Set up PPU register shadows 1396 | dl DATA_8090D7 //Argument for shadow_register_setup 1397 | 1398 | lda.w #$0080 1399 | sta.w inidisp_shadow 1400 | sta $021B 1401 | lda.w #$0001 1402 | sta.w nmitimen_shadow 1403 | jsl update_ppu //Update PPU Registers 1404 | 1405 | lda $9FFFF1 //Set Music Bank 0 address 1406 | sta $21 //for APU upload 1407 | lda $9FFFF0 1408 | sta $20 1409 | jsl apu_upload_curr_thread_bios //($80995A) 1410 | //Upload Music Bank 0 1411 | init_waitvblank: 1412 | lda $4212 1413 | lsr //Wait for V-Blank Flag 1414 | bcc init_waitvblank 1415 | 1416 | init_waitaftervblank: 1417 | lda $4212 1418 | lsr //Wait after V-Blank Flag 1419 | bcs init_waitaftervblank 1420 | 1421 | lda $421A //Read Joypad 2 1422 | and.w #$FFF0 1423 | cmp.w #$C0F0 //Check if A/B/X/Y/L/R are all pressed 1424 | bne init_sramcheck 1425 | jsl CODE_80C8E4 //If pressed, initialize the SRAM 1426 | lda.w #$0384 1427 | ldy.w #$0001 1428 | jsl apu_message //($105C1C) Make a sound effect 1429 | 1430 | init_sramcheck: 1431 | jsl CODE_80C8F7 //Check SRAM Integrity 1432 | jsl boot_hook //($105974) 1433 | 1434 | sep #$20 //8-bit A 1435 | rep #$10 //16-bit X/Y 1436 | stz $143F //Init Satellaview Detection Flag 1437 | jsl detect_receiver //Satellaview Expansion Base Detection Code 1438 | //Returns: Z flag - If set, Satellaview is not found 1439 | beq init_afterdetect 1440 | inc $143F //Set Satellaview Detection Flag to 1 1441 | 1442 | init_afterdetect: 1443 | jsl mute_radio_audio //($105B58) 1444 | jsl init_port_2199_registers //($1059A4) 1445 | jsl map_flash_for_rw_access //($105A6C) 1446 | jsl flash_get_and_interprete_id //($105B0C) 1447 | jsl map_flash_for_no_rw_access //($105A70) 1448 | 1449 | rep #$30 1450 | jsl CODE_808C0F //Setup VRAM? 1451 | jsl CODE_80A709 1452 | jsl CODE_808358 1453 | jsl CODE_105B40 //($105B40) 1454 | 1455 | lda.w #$0008 1456 | sta $014C 1457 | lda.w #$0004 1458 | sta $014E 1459 | lda.w #$FFFF 1460 | sta $0A13 1461 | lda.w #$FFFF 1462 | sta $7E8715 1463 | lda $0665 1464 | cmp.w #$5347 1465 | beq init_SGcheck 1466 | lda.w #$8000 1467 | sta $0637 1468 | lda.w #$0094 1469 | sta $0639 //$0637 = $948000 1470 | bra init_aftercreatethread 1471 | 1472 | init_SGcheck: 1473 | jsl CODE_80937F //Set Next NMI to nothing 1474 | jsl reset_interpreter //($81C210) 1475 | jsl set_interpreter_enable_flag //($81C29A) 1476 | lda.w #$0094 1477 | sta $BE 1478 | lda.w #$BD38 1479 | jsl create_interpreter_thread //($81C2B0) Skip the Title Screen? 1480 | init_aftercreatethread: 1481 | stz $0665 1482 | jsl CODE_809225 //destroy machine code threads? 1483 | lda.w #$913A 1484 | sta $063F 1485 | lda.w #$0080 1486 | sta $0641 //Set $063F to $80913A 1487 | jsl enable_nmi //Enable NMI 1488 | cli 1489 | init_jump_setup: 1490 | jsr CODE_80936A //Set $0633 to $80913A 1491 | phk 1492 | pea $90D2 1493 | jmp [$0633] //Jump to CODE_80913A 1494 | jmp init_jump_setup 1495 | rtl 1496 | 1497 | DATA_8090D7: 1498 | db $01, $00 1499 | db $02, $00 1500 | db $03, $00 1501 | db $04, $00 1502 | db $05, $00 1503 | db $06, $00 1504 | db $07, $00 1505 | db $08, $00 1506 | db $09, $00 1507 | db $0A, $00 1508 | db $0B, $00 1509 | db $0F, $00 1510 | db $10, $00 1511 | db $11, $00 1512 | db $12, $00 1513 | db $13, $00 1514 | db $14, $00 1515 | db $15, $00 1516 | db $16, $00 1517 | db $17, $00 1518 | db $18, $00 1519 | db $19, $00 1520 | db $1A, $00 1521 | db $1B, $00 1522 | db $1C, $00 1523 | db $1D, $00 1524 | db $1E, $00 1525 | db $0C, $00 1526 | db $0D, $00 1527 | db $0E, $00 1528 | db $1F, $00 1529 | db $20, $00 1530 | db $21, $00 1531 | db $22, $00 1532 | db $23, $00 1533 | db $24, $00 1534 | db $25, $00 1535 | db $26, $00 1536 | db $27, $00 1537 | db $28, $00 1538 | db $2A, $30 1539 | db $2B, $00 1540 | db $2C, $E0 1541 | db $30, $00 1542 | db $38, $00 1543 | db $39, $00 1544 | db $36, $00 1545 | db $37, $00 1546 | db $3A, $00 1547 | db $FF 1548 | 1549 | //======================================================== 1550 | // MACHINE CODE THREAD MANAGEMENT (?) 1551 | //======================================================== 1552 | 1553 | CODE_80913A: //change machine code thread? 1554 | php 1555 | rep #$30 1556 | pha 1557 | phx 1558 | phy 1559 | phd 1560 | phb 1561 | phk 1562 | plb 1563 | tsx 1564 | txa 1565 | sep #$10 1566 | ldy $0645 1567 | ldx $0650,y 1568 | bpl + 1569 | sta $064D,y 1570 | +; tyx 1571 | sep #$30 1572 | lda #$FF 1573 | bra + 1574 | -; bit $0650,x 1575 | bvs + 1576 | bmi ++ 1577 | bne +++ 1578 | +; inx 1579 | inx 1580 | inx 1581 | inx 1582 | cpx #$10 1583 | bcc - 1584 | ldx #$00 1585 | bra - 1586 | +; stx $0645 1587 | txy 1588 | rep #$30 1589 | ldx $064D,y 1590 | txs 1591 | plb 1592 | pld 1593 | ply 1594 | plx 1595 | pla 1596 | plp 1597 | rtl 1598 | +; stx $0645 1599 | lda #$80 1600 | sta $0650,x 1601 | rep #$20 1602 | lda $064D,x 1603 | sta $064A 1604 | ldy $064F,x 1605 | sty $064C 1606 | rep #$30 1607 | lda $0645 1608 | and #$00FF 1609 | tax 1610 | lda.w DATA_8091A6,x 1611 | tcs 1612 | jml [$064A] 1613 | 1614 | DATA_8091A6: //Stack Pointer related 1615 | dw $1E97, $0000, $1F0F, $0000, $1F87, $0000, $1FFF, $0000 1616 | 1617 | CODE_8091B6: 1618 | create_machine_code_thread: 1619 | phx 1620 | php 1621 | sep #$30 1622 | ldx #$00 1623 | -; lda $0650,x 1624 | beq + 1625 | inx 1626 | inx 1627 | inx 1628 | inx 1629 | cpx #$10 1630 | bne - 1631 | plp 1632 | plx 1633 | sec 1634 | rtl 1635 | +; rep #$20 1636 | lda $065D 1637 | sta $064D,x 1638 | lda $065F 1639 | and #$00FF 1640 | ora #$0100 1641 | sta $064F,x 1642 | stx $0660 1643 | txa 1644 | plp 1645 | plx 1646 | clc 1647 | rtl 1648 | 1649 | CODE_8091E9: 1650 | sep #$30 1651 | ldx $0645 1652 | stz $0650,x 1653 | jmp CODE_80913A 1654 | 1655 | CODE_8091F4: 1656 | phx 1657 | php 1658 | sep #$30 1659 | tax 1660 | stz $0650,x 1661 | plp 1662 | plx 1663 | rtl 1664 | 1665 | CODE_8091FF: 1666 | rep #$30 1667 | lda $063B 1668 | sta $0637 1669 | lda $063D 1670 | sta $0639 1671 | jsl CODE_809225 1672 | jmp CODE_80913A 1673 | 1674 | CODE_809214: 1675 | rep #$30 1676 | lda $063B 1677 | sta $0637 1678 | lda $063D 1679 | sta $0639 1680 | jmp CODE_8091E9 1681 | 1682 | CODE_809225: //Destroy all Machine Code threads? 1683 | php 1684 | sep #$30 1685 | ldx #$00 1686 | txa 1687 | -; sta $0650,x 1688 | inx 1689 | inx 1690 | inx 1691 | inx 1692 | cpx #$10 1693 | bne - 1694 | plp 1695 | rtl 1696 | 1697 | CODE_809238: 1698 | pause_machine_code_thread: 1699 | php 1700 | rep #$30 1701 | pha 1702 | phx 1703 | phy 1704 | sep #$30 1705 | ldx $0645 1706 | lda $0650,x 1707 | ora #$40 1708 | sta $0650,x 1709 | rep #$30 1710 | ply 1711 | plx 1712 | pla 1713 | jsl CODE_80913A 1714 | plp 1715 | rtl 1716 | 1717 | CODE_809256: 1718 | php 1719 | sep #$30 1720 | ldx $0645 1721 | lda $0650,x 1722 | ora #$40 1723 | sta $0650,x 1724 | jsl CODE_80913A 1725 | plp 1726 | rtl 1727 | 1728 | CODE_80926A: 1729 | php 1730 | rep #$30 1731 | pha 1732 | phx 1733 | phy 1734 | sep #$30 1735 | lda $021B 1736 | bpl + 1737 | jsl CODE_808CDC 1738 | bra ++ 1739 | +; ldx $0645 1740 | lda $0650,x 1741 | ora #$40 1742 | sta $0650,x 1743 | +; rep #$30 1744 | ply 1745 | plx 1746 | pla 1747 | jsl CODE_80913A 1748 | plp 1749 | rtl 1750 | 1751 | CODE_809293: 1752 | php 1753 | sep #$30 1754 | ldx #$00 1755 | -; bit $0650,x 1756 | bvc + 1757 | lda $0650,x 1758 | and #$BF 1759 | sta $0650,x 1760 | +; inx 1761 | inx 1762 | inx 1763 | inx 1764 | cpx #$10 1765 | bne - 1766 | plp 1767 | rtl 1768 | 1769 | //======================================================== 1770 | // NMI VECTOR 1771 | //======================================================== 1772 | 1773 | _nmi: //($8092AF) 1774 | jml nmi_handler 1775 | nmi_handler: //($8092B3) 1776 | rep #$30 //16-bit A/X/Y 1777 | pha 1778 | phx 1779 | phy 1780 | phb 1781 | phd 1782 | phk 1783 | plb //Set Program Bank to $80 1784 | lda.w #$0000 1785 | tcd //Set Direct Page to $0000 1786 | lda $4210 //Acknowledge NMI IRQ 1787 | jsl nmi_hook //($105978) 1788 | lda $0D,s 1789 | and.w #$00FF 1790 | cmp.w #$0004 1791 | nmi_loopforever: 1792 | beq nmi_loopforever 1793 | 1794 | lda $0643 //Check if NMI Handler was already active 1795 | beq nmi_continue 1796 | jmp nmi_force_end 1797 | nmi_continue: 1798 | inc $0643 //Set NMI Handler Flag 1799 | jsl upload_oam //Update OAM 1800 | jsl CODE_808CDC //Work off DMA Pipeline 1801 | jsl CODE_809C4E //? 1802 | jsl CODE_83AFC8 //? 1803 | jsl update_cgram //Update CGRAM 1804 | jsl CODE_80AC5E //VRAM DMA 1805 | jsl update_ppu //Update PPU Registers 1806 | jsl CODE_809390 //USELESS 1807 | jsl nmi_do_led_blinking //($105B4C) 1808 | jsl read_joypad //? 1809 | jsl CODE_808E99 //? 1810 | jsl apu_nmi_handling //($105C20) 1811 | jsl download_nmi_handling //($105B44) 1812 | jsl CODE_808363 //? 1813 | jsl clear_oam_high_buffer //? 1814 | jsr CODE_809355 //Setup address to return 1815 | phk 1816 | pea $9321 1817 | jmp [$062F] 1818 | nmi_force_end: 1819 | rep #$30 1820 | jsl download_nmi_handling //($105B44) 1821 | jsl CODE_808F49 //Frame Counter? 1822 | pld 1823 | plb 1824 | ply 1825 | plx 1826 | pla 1827 | rti 1828 | 1829 | CODE_809355: 1830 | lda $0639 1831 | bmi + 1832 | sta $0631 1833 | ora #$8000 1834 | sta $0639 1835 | lda $0637 1836 | sta $062F 1837 | +; rts ;++ 1838 | 1839 | CODE_80936A: 1840 | lda $0641 1841 | bmi + 1842 | sta $0635 1843 | ora #$8000 1844 | sta $0641 1845 | lda $063F 1846 | sta $0633 1847 | +; rts 1848 | 1849 | CODE_80937F: //Set next NMI Jump to nothing 1850 | php 1851 | rep #$30 1852 | lda.w #(CODE_80938F) 1853 | sta $0637 1854 | lda.w #(CODE_80938F >> 16) 1855 | sta $0639 1856 | plp 1857 | CODE_80938F: 1858 | rtl 1859 | 1860 | CODE_809390: //Does nothing 1861 | php 1862 | plp 1863 | rtl 1864 | 1865 | CODE_809393: //Does nothing 1866 | php 1867 | plp 1868 | rtl 1869 | 1870 | _irq: //($809396) 1871 | jsl irq_vector //($10597C) 1872 | rti 1873 | 1874 | _cop: //($80939B) 1875 | _brk: 1876 | jml _brk 1877 | 1878 | CODE_80939F: 1879 | //TODO 1880 | 1881 | //======================================================== 1882 | // HEADER 1883 | //======================================================== 1884 | 1885 | _header: //($80FFB0) 1886 | //Extended Header 1887 | db "01" //Maker Code: Nintendo (01) 1888 | db "ZBSJ" //Game Code: "ZBSJ" 1889 | db $00, $00, $00, $00, $00, $00 //Reserved 1890 | db $00 //Expansion FLASH Size: 0KB 1891 | db $09 //Expansion RAM Size: 512KB (PSRAM) 1892 | db $00 //Version Type: Normal 1893 | db $00 //Chipset Sub type (0) 1894 | 1895 | //SNES Header 1896 | db "Satellaview BS-X " //Game Name 1897 | db $30 //ROM Type: FastROM, LoROM 1898 | db $E5 //Chipset Type: BS-X 1899 | db $0A //ROM Size: 1024KB 1900 | db $05 //RAM Size: 32KB (SRAM) 1901 | db $00 //Country: Japan 1902 | db $33 //Developer Code: EXTENDED 1903 | db $01 //Version: 1.1 1904 | dw $7479 //Checksum Complement 1905 | dw $8B86 //Checksum 1906 | 1907 | //Exception Vectors 1908 | //--Native Mode 1909 | dw $FFFF // 1910 | dw $FFFF // 1911 | dw _cop //COP ($939B) 1912 | dw _brk //BRK ($939B) 1913 | dw $FFFF // 1914 | dw _nmi //NMI ($92AF) 1915 | dw $FFFF // 1916 | dw _irq //IRQ ($9396) 1917 | //--Emulation Mode 1918 | dw $FFFF // 1919 | dw $FFFF // 1920 | dw $FFFF //COP 1921 | dw $FFFF // 1922 | dw $FFFF // 1923 | dw $FFFF //NMI 1924 | dw _reset //RESET ($8F7D) 1925 | dw $FFFF // -------------------------------------------------------------------------------- /bios/ram.inc: -------------------------------------------------------------------------------- 1 | //BS-X BIOS RAM Mapping 2 | 3 | //======================================================== 4 | // Main 5 | //======================================================== 6 | 7 | constant args($7E0000) 8 | 9 | //======================================================== 10 | // Token Interpreter 11 | //======================================================== 12 | 13 | constant token_pc($7E00AC) //Token PC [24-bit Memory Address] 14 | constant token_table0($7E00AF) //Token Table Pointer 0 [24-bit Memory Address] 15 | constant token_table1($7E00B2) //Token Table Pointer 1 [24-bit Memory Address] 16 | constant token_table2($7E00B5) //Token Table Pointer 2 [24-bit Memory Address] 17 | 18 | //======================================================== 19 | // Register Shadows 20 | //======================================================== 21 | 22 | constant inidisp_shadow($7E0100) //$2100 - INIDISP 23 | constant obsel_shadow($7E0101) //$2101 - OBSEL 24 | 25 | constant bgmode_shadow($7E0104) //$2105 - BGMODE 26 | constant mosaic_shadow($7E0105) //$2106 - MOSAIC 27 | constant bg1sc_shadow($7E0106) //$2107 - BG1SC 28 | constant bg2sc_shadow($7E0107) //$2108 - BG2SC 29 | constant bg3sc_shadow($7E0108) //$2109 - BG3SC 30 | constant bg4sc_shadow($7E0109) //$210A - BG4SC 31 | constant bg12nba_shadow($7E010A) //$210B - BG12NBA 32 | constant bg34nba_shadow($7E010B) //$210C - BG34NBA 33 | constant m7sel_shadow($7E010C) //$211A - M7SEL 34 | constant w12sel_shadow($7E010D) //$2123 - W12SEL 35 | constant w34sel_shadow($7E010E) //$2124 - W34SEL 36 | constant bg1hofs_shadow($7E010F) //$210D.L - BG1HOFS 37 | constant bg1hofs_h_shadow($7E0110) //$210D.H - BG1HOFS 38 | constant bg1vofs_shadow($7E0111) //$210E.L - BG1VOFS 39 | constant bg1vofs_h_shadow($7E0112) //$210E.H - BG1VOFS 40 | constant bg2hofs_shadow($7E0113) //$210F.L - BG2HOFS 41 | constant bg2hofs_h_shadow($7E0114) //$210F.H - BG2HOFS 42 | constant bg2vofs_shadow($7E0115) //$2110.L - BG2VOFS 43 | constant bg2vofs_h_shadow($7E0116) //$2110.H - BG2VOFS 44 | constant bg3hofs_shadow($7E0117) //$2111.L - BG3HOFS 45 | constant bg3hofs_h_shadow($7E0118) //$2111.H - BG3HOFS 46 | constant bg3vofs_shadow($7E0119) //$2112.L - BG3VOFS 47 | constant bg3vofs_h_shadow($7E011A) //$2112.H - BG3VOFS 48 | constant bg4hofs_shadow($7E011B) //$2113.L - BG4HOFS 49 | constant bg4hofs_h_shadow($7E011C) //$2113.H - BG4HOFS 50 | constant bg4vofs_shadow($7E011D) //$2114.L - BG4VOFS 51 | constant bg4vofs_h_shadow($7E011E) //$2114.H - BG4VOFS 52 | constant wobjsel_shadow($7E011F) //$2125 - WOBJSEL 53 | constant wh0_shadow($7E0120) //$2126 - WH0 54 | constant wh1_shadow($7E0121) //$2127 - WH1 55 | constant wh2_shadow($7E0122) //$2128 - WH2 56 | constant wh3_shadow($7E0123) //$2129 - WH3 57 | constant wbglog_shadow($7E0124) //$212A - WBGLOG 58 | constant wobjlog_shadow($7E0125) //$212B - WOBJLOG 59 | constant tm_shadow($7E0126) //$212C - TM 60 | constant tmw_shadow($7E0127) //$212E - TMW 61 | constant ts_shadow($7E0128) //$212D - TS 62 | constant tsw_shadow($7E0129) //$212F - TSW 63 | constant cgwsel_shadow($7E012A) //$2130 - CGWSEL 64 | constant cgadsub_shadow($7E012B) //$2131 - CGADSUB 65 | 66 | constant coldata_r_shadow($7E012D) //$2132 - COLDATA (RED) 67 | constant coldata_g_shadow($7E012E) //$2132 - COLDATA (GREEN) 68 | constant coldata_b_shadow($7E012F) //$2132 - COLDATA (BLUE) 69 | constant setini_shadow($7E0130) //$2133 - SETINI 70 | 71 | constant nmitimen_shadow($7E0135) //$4200 - NMITIMEN 72 | constant hdmaen_shadow($7E013A) //$420C - HDMAEN 73 | 74 | //======================================================== 75 | // Joypad Input 76 | //======================================================== 77 | 78 | constant joy1_input($7E0150) 79 | constant joy2_input($7E0152) 80 | constant joy1_pushed($7E0154) 81 | constant joy2_pushed($7E0156) 82 | constant joy1_unk($7E0158) 83 | constant joy2_unk($7E015A) 84 | constant joy1_input_last($7E015C) 85 | constant joy2_input_last($7E0164) 86 | 87 | //======================================================== 88 | // VRAM DMA Pipeline 89 | //======================================================== 90 | 91 | //Up to 0x10 slots 92 | constant vdma_type($7E016C) //CGRAM ($01) / VRAM Write ($02) / VRAM Read ($03) 93 | constant vdma_cgadd($7E017C) //CGRAM Address (If CGRAM type slot) 94 | constant vdma_vmain($7E017C) //VRAM Setup 95 | constant vdma_vmaddl($7E018C) //VRAM Word Address Low 96 | constant vdma_vmaddh($7E018C) //VRAM Word Address High 97 | constant vdma_a1t1l($7E01AC) //Memory Address Low 98 | constant vdma_a1t1h($7E01BC) //Memory Address High 99 | constant vdma_a1b1($7E01CC) //Memory High 100 | constant vdma_das1l($7E01DC) //Size Low 101 | constant vdma_das1h($7E01EC) //Size High 102 | constant vdma_flag($7E01FC) //Is Slot Occupied? 103 | 104 | //======================================================== 105 | // Mouse Input 106 | //======================================================== 107 | 108 | constant mouse_plug($7E020E) 109 | constant mouse1_input_l($7E0211) 110 | constant mouse2_input_l($7E0212) 111 | constant mouse1_input_h($7E0213) 112 | constant mouse2_input_h($7E0214) 113 | 114 | //======================================================== 115 | // Misc 116 | //======================================================== 117 | 118 | constant nmi_jmp($7E062F) //NMI Handler Jump 119 | 120 | constant init_jmp($7E0633) //Init Jump 121 | constant init_jmp_setup($7E063F) //Init Jump Setup 122 | 123 | constant nmi_flag($7E0643) //Is NMI Handler active? flag 124 | 125 | constant filename($7E069B) //Current Filename 126 | 127 | //======================================================== 128 | // Text Rendering 129 | //======================================================== 130 | 131 | constant text_style($7E0725) //Text Style 132 | //#$01: Reversed color 133 | //#$02: Bold 134 | //#$04: Italic 135 | //#$08: Underline 136 | 137 | //======================================================== 138 | // Misc 139 | //======================================================== 140 | 141 | constant error_number($7E13C5) //Error Number 142 | //09 = Memory Pack Content Checksum Failed 143 | 144 | constant seconds_left($7E1433) 145 | constant ticks_left($7E1437) 146 | 147 | constant receiver_found($7E143F) //Satellaview Found 148 | 149 | constant interpreter_check($7E1998) 150 | constant y_step($7E199A) 151 | constant x_step($7E199C) 152 | constant joypad_read_press($7E199E) 153 | constant joypad_read_input($7E19A0) 154 | constant joypad_read_unk($7E19A2) 155 | 156 | //======================================================== 157 | // Video 158 | //======================================================== 159 | 160 | constant oam_buffer($7E1C00) 161 | constant cgram_buffer($7E2000) 162 | 163 | //======================================================== 164 | // Map 165 | //======================================================== 166 | 167 | constant tileset_gfx_table($7E2200) //4 8x8 tiles to 1 16x16 table 168 | constant tileset_coll_table($7E2200) //Collision data for tileset 169 | constant bg1_map($7E4600) //BG1 Map Data (64x48) 170 | constant bg2_map($7E5E00) //BG2 Map Data (64x48) 171 | 172 | constant loaded_header($7E99A6) //Loaded Game Header 173 | constant mp_info($7E99D6) //Memory Pack Info 174 | 175 | //======================================================== 176 | // Satellite Download 177 | //======================================================== 178 | 179 | constant sat_prefix($7E9A20) //Prefix Download [20 bytes] 180 | constant sat_data($7E9A34) //Data Download [440 bytes] 181 | constant sat_channelmap($7E9BEC) //Channel Map [1485 bytes] 182 | constant sat_message($7EA1B9) //Message [100 bytes] 183 | constant sat_townstatus($7EA21D) //Town Status [256 bytes] 184 | constant sat_townstatus_temp($7EA31D) //Town Status (Temporary) [256 bytes] 185 | constant sat_directory($7EC000) //Directory [16000 bytes] 186 | constant sat_customtoken($7F0000) //Custom Tokens [2560 bytes?] 187 | constant sat_download_temp($7FC000) //Temporary [16000 bytes] -------------------------------------------------------------------------------- /include/BSXTokens_arm9.inc: -------------------------------------------------------------------------------- 1 | //BS-X Tokens Include File for bass 2 | //By LuigiBlood, based on nocash documentation 3 | 4 | //Each thread has X and Y variables for OBJ (Sprites) uses. 5 | 6 | //Normal Tokens 7 | macro ControlSubThread(entrypoint) { 8 | db $00 9 | dl {entrypoint} 10 | } 11 | 12 | macro SetXYsignViewDirectionToSignsOfIncomingValues(vX, vY) { 13 | db $01 14 | dl {vX}, {vY} 15 | } 16 | 17 | macro SleepWithFixedObjShape(wSleep, pObjShape) { 18 | db $02 19 | dw {wSleep} 20 | dl {pObjShape} 21 | } 22 | 23 | macro SleepWithXYstepAs9wayObjShape(wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9) { 24 | db $03 25 | dw {wSleep} 26 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 27 | } 28 | 29 | macro SleepWithXYsignAs9wayObjShape(wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9) { 30 | db $04 31 | dw {wSleep} 32 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 33 | } 34 | 35 | macro ClearForcedBlankAndFadeIn(wSleep, wSpeedRange) { 36 | db $05 37 | dw {wSleep}, {wSpeedRange} 38 | } 39 | 40 | macro MasterBrightnessFadeOut(wSleep, wSpeedRange) { 41 | db $06 42 | dw {wSleep}, {wSpeedRange} 43 | } 44 | 45 | macro SetMosaicAndSleep(wSleep, wBgFlags, wMosaicSize) { 46 | db $07 47 | dw {wSleep}, {wBgFlags}, {wMosaicSize} 48 | } 49 | 50 | macro SleepAndBlendFromCurrentToNewPalette(wSleep, vPalIndex, pNewPalette) { 51 | db $09 52 | dw {wSleep} 53 | dl {vPalIndex} 54 | dl {pNewPalette} 55 | } 56 | 57 | macro HdmaEffectsOnBg3(wSleep, wEffectType, vScrollOffset, vExtraOffset) { 58 | db $0A 59 | dw {wSleep}, {wEffectType} 60 | dl {vScrollOffset}, {vExtraOffset} 61 | } 62 | 63 | macro SleepWithAngleAs9wayObjShape(wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9) { 64 | db $0B 65 | dw {wSleep} 66 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 67 | } 68 | 69 | macro DisableObjsOfAllThreads() { 70 | db $0C 71 | } 72 | 73 | macro ReEnableObjsOfAllThreads() { 74 | db $0D 75 | } 76 | 77 | macro SleepWithXYsignAs9wayPlayerGenderObjShape(wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9) { 78 | db $0E 79 | dw {wSleep} 80 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 81 | } 82 | 83 | macro SleepAndSetXYpos(wSleep, vX, vY) { 84 | db $10 85 | dw {wSleep} 86 | dl {vX}, {vY} 87 | } 88 | 89 | macro SleepAndMoveTowardsTargetXYpos(wSleep, vX, vY) { 90 | db $11 91 | dw {wSleep} 92 | dl {vX}, {vY} 93 | } 94 | 95 | macro SleepAndMoveByIncomingXYstep(wSleep, vX, vY) { 96 | db $12 97 | dw {wSleep} 98 | dl {vX}, {vY} 99 | } 100 | 101 | macro SleepAndMoveAndAdjustXYstep(wSleep, vRotationAngleToOldXYstep) { 102 | db $13 103 | dw {wSleep} 104 | dl {vRotationAngleToOldXYstep} 105 | } 106 | 107 | macro SleepAndMoveWithinBoundary(wSleep, vX1, vX2, vY1, vY2, wFactor) { 108 | db $14 109 | dw {wSleep} 110 | dl {vX1}, {vX2}, {vY1}, {vY2} 111 | dw {wFactor} 112 | } 113 | 114 | macro SleepAndMoveChangeBothXYstepsIfCollideOtherThread(wSleep, wBounceSpeed) { 115 | db $15 116 | dw {wSleep}, {wBounceSpeed} 117 | } 118 | 119 | macro SleepAndMoveAndIncrementXYstep(wSleep, vXincr, vYincr, qXlimit, qYlimit) { 120 | db $16 121 | dw {wSleep} 122 | dl {vXincr}, {vYincr}, {qXlimit}, {qYlimit} 123 | } 124 | 125 | macro SleepAndMoveByIncomingYstepAndWavingXstep(wSleep, wY) { 126 | db $17 127 | dw {wSleep}, {wY} 128 | } 129 | 130 | macro SleepAndMoveAndAccelerateTowardsTarget(wSleep, vX, vY, vSpeed) { 131 | db $18 132 | dw {wSleep} 133 | dl {vX}, {vY}, {vSpeed} 134 | } 135 | 136 | macro SleepAndMoveAndSomethingComplicated(wSleep, vX, vY) { 137 | db $19 138 | dw {wSleep} 139 | dl {vX}, {vY} 140 | } 141 | 142 | macro AdjustXYstep(wNewSpeedOrSo) { 143 | db $1A 144 | dw {wNewSpeedOrSo} 145 | } 146 | 147 | macro MoveByOldXYstepWithoutSleep() { 148 | db $1B 149 | } 150 | 151 | macro SleepAndMoveChangeXYstepIfCollideOtherThread(wSleep, vMask, vX, vY) { 152 | db $1C 153 | dw {wSleep} 154 | dl {vMask}, {vX}, {vY} 155 | } 156 | 157 | macro Goto(pTarget) { 158 | db $20 159 | dl {pTarget} 160 | } 161 | 162 | macro Gosub(pTarget) { 163 | db $21 164 | dl {pTarget} 165 | } 166 | 167 | macro Return() { 168 | db $22 169 | } 170 | 171 | macro QuitThread() { 172 | db $23 173 | } 174 | 175 | macro LoopStart(wRepeatCount) { 176 | db $24 177 | dl {wRepeatCount} 178 | } 179 | 180 | macro Sleep(wSleep) { 181 | db $25 182 | dw {wSleep} 183 | } 184 | 185 | macro MathsLet(vA, vB) { 186 | db $26 187 | dl {vA}, {vB} 188 | } 189 | 190 | macro MathsAdd(vA, vB) { 191 | db $27 192 | dl {vA}, {vB} 193 | } 194 | 195 | macro MathsSub(vA, vB) { 196 | db $28 197 | dl {vA}, {vB} 198 | } 199 | 200 | macro MathsAnd(vA, vB) { 201 | db $29 202 | dl {vA}, {vB} 203 | } 204 | 205 | macro MathsOr(vA, vB) { 206 | db $2A 207 | dl {vA}, {vB} 208 | } 209 | 210 | macro MathsXor(vA, vB) { 211 | db $2B 212 | dl {vA}, {vB} 213 | } 214 | 215 | macro MathsNot(vA) { 216 | db $2C 217 | dl {vA} 218 | } 219 | 220 | macro MathsMulSigned(vA, vB) { 221 | db $2D 222 | dl {vA}, {vB} 223 | } 224 | 225 | macro MathsDivSigned(vA, vB) { 226 | db $2E 227 | dl {vA}, {vB} 228 | } 229 | 230 | macro SignedCompareWithConditionalGoto(vA, wOperator, vB, pTarget) { 231 | db $2F 232 | dl {vA} 233 | dw {wOperator} 234 | dl {vB} 235 | dl {pTarget} 236 | } 237 | 238 | macro GotoIf_1998_IsNonzero(pTarget) { 239 | db $30 240 | dl {pTarget} 241 | } 242 | 243 | macro GotoIf_1998_IsZero(pTarget) { 244 | db $31 245 | dl {pTarget} 246 | } 247 | 248 | macro GotoArray(vArrayIndex, pPointerToArrayWithTargets) { 249 | db $32 250 | dl {vArrayIndex}, {pPointerToArrayWithTargets} 251 | } 252 | 253 | macro ReadJoypad(bJoypadNumber, wX, wY) { 254 | db $33 255 | db {bJoypadNumber} 256 | dw {wX}, {wY} 257 | } 258 | 259 | macro CreateAnotherInterpreterThreadWithLimit(vThreadCount, bLimit, pEntry) { 260 | db $34 261 | dl {vThreadCount} 262 | db {bLimit} 263 | dl {pEntry} 264 | } 265 | 266 | macro CheckIfXYposCollidesWithFlaggedThreads(vFlagMask) { 267 | db $35 268 | dl {vFlagMask} 269 | } 270 | 271 | macro GetUnsignedRandomValue(vA, wB) { 272 | db $36 273 | dl {vA} 274 | dw {wB} 275 | } 276 | 277 | macro SetObjWidthDepthFlagmask(vWidth, vDepth, vMask) { 278 | db $37 279 | dl {vWidth}, {vDepth}, {vMask} 280 | } 281 | 282 | macro CreateAnotherInterpreterThreadWithIncomingXYpos(vX, vY, pEntrypoint) { 283 | db $38 284 | dl {vX}, {vY}, {pEntrypoint} 285 | } 286 | 287 | macro SoundApuMessage00h_nnh(vParameter8bit) { 288 | db $3A 289 | dl {vParameter8bit} 290 | } 291 | 292 | macro SoundApuMessage01h_nnnh(vLower6bit, bMiddle2bit, bUpper2bit) { 293 | db $3B 294 | dl {vLower6bit} 295 | db {bMiddle2bit}, {bUpper2bit} 296 | } 297 | 298 | macro SoundApuMessage02h_nnnnh(vLower6bit, bMiddle2bit, bUpper2bit) { 299 | db $3C 300 | dl {vLower6bit} 301 | db {bMiddle2bit}, {bUpper2bit} 302 | } 303 | 304 | macro SoundApuUpload(bMode, pPtrToPtrToData) { 305 | db $3D 306 | db {bMode} 307 | dl {pPtrToPtrToData} 308 | } 309 | 310 | macro SetPpuBgModeKillAllOtherThreadsAndResetVariousStuff(bBgMode) { 311 | db $3E 312 | db {bBgMode} 313 | } 314 | 315 | macro SetTemporaryTableForBanksF1hAndUp(vTableNumber, pTableBase) { 316 | db $3F 317 | dl {vTableNumber}, {pTableBase} 318 | } 319 | 320 | macro KillAllFlaggedThreads(vMask) { 321 | db $40 322 | dl {vMask} 323 | } 324 | 325 | macro SetBUGGEDTimerHotspot(wHotspot) { 326 | db $41 327 | dw {wHotspot} 328 | } 329 | 330 | macro Ppu_Bg1_Bg2_SetScrollPosition(vX, vY) { 331 | db $42 332 | dl {vX}, {vY} 333 | } 334 | 335 | macro Ppu_Bg1_Bg2_ApplyScrollOffsetAndSleep(wSleep, vX, vY) { 336 | db $43 337 | dw {wSleep} 338 | dl {vX}, {vY} 339 | } 340 | 341 | macro NopWithDummyParameters(wUnused1, wUnused2) { 342 | db $44 343 | dw {wUnused1}, {wUnused2} 344 | } 345 | 346 | macro NopWithoutParameters() { 347 | db $45 348 | } 349 | 350 | macro AllocateAndInitObjTilesOrUseExistingTiles(wLen, pSrc) { 351 | db $46 352 | dw {wLen} 353 | dl {pSrc} 354 | } 355 | 356 | macro AllocateAndInitObjPaletteOrUseExistingPalette(pSrc) { 357 | db $47 358 | dl {pSrc} 359 | } 360 | 361 | macro DmaObjTilesToVram(wObjVramAddr, wOBjVramEnd, pSrc) { 362 | db $48 363 | dw {wObjVramAddr}, {wOBjVramEnd} 364 | dl {pSrc} 365 | } 366 | 367 | macro SetObjPalette(wObjPalIndex, wObjPalEnd, pSrc) { 368 | db $49 369 | dw {wObjPalIndex}, {wObjPalEnd} 370 | dl {pSrc} 371 | } 372 | 373 | macro SramAddSubOrSetMoney(bAction, vLower16bit, vMiddle16bit, vUpper16bit) { 374 | db $4A 375 | db {bAction} 376 | dl {vLower16bit}, {vMiddle16bit}, {vUpper16bit} 377 | } 378 | 379 | macro SramUpdateChksumAndBackupCopy() { 380 | db $4B 381 | } 382 | 383 | macro TestAndGotoIfNonzero(vA, vB, pTarget) { 384 | db $50 385 | dl {vA}, {vB}, {pTarget} 386 | } 387 | 388 | macro TestAndGotoIfZero(vA, vB, pTarget) { 389 | db $51 390 | dl {vA}, {vB}, {pTarget} 391 | } 392 | 393 | macro InitNineGeneralPurposePrivateVariables(wA, wB, wC, wD, wE, wF, wG, wH, wI) { 394 | db $52 395 | dw {wA}, {wB}, {wC}, {wD}, {wE}, {wF}, {wG}, {wH}, {wI} 396 | } 397 | 398 | macro MultipleCreateThreadBySelectedTableEntries(vFlags, vLimit, pPtrToTable) { 399 | db $53 400 | dl {vFlags}, {vLimit}, {pPtrToTable} 401 | } 402 | 403 | macro PrepareMultipleGosub() { 404 | db $54 405 | } 406 | 407 | macro StrangeXYposMultiplyThenDivide(wA, wB) { 408 | db $55 409 | dw {wA}, {wB} 410 | } 411 | 412 | macro BuggedForceXYposIntoScreenArea() { 413 | db $56 414 | } 415 | 416 | macro Maths32bitAdd16bitMul100h(vA, vB) { 417 | db $57 418 | dl {vA}, {vB} 419 | } 420 | 421 | macro Maths32bitSub16bitMul100h(vA, vB) { 422 | db $58 423 | dl {vA}, {vB} 424 | } 425 | 426 | macro SoundApuUploadWithTimeout(wTimeout, pPtrToPtrToData) { 427 | db $59 428 | dw {wTimeout} 429 | dl {pPtrToPtrToData} 430 | } 431 | 432 | macro CallMachineCodeFunction(pTarget) { 433 | db $60 434 | dl {pTarget} 435 | } 436 | 437 | macro SetTemporaryOffsetFor0AxxxxhVariables(vOffset) { 438 | db $61 439 | dl {vOffset} 440 | } 441 | 442 | macro LoopNext() { 443 | db $62 444 | } 445 | 446 | macro SetForcedBlankAndSleepOnce() { 447 | db $63 448 | } 449 | 450 | macro ClearForcedBlankAndSleepOnce() { 451 | db $64 452 | } 453 | 454 | macro AllocateAndInitObjPaletteAndObjTilesOrUseExistingOnes(pSrc) { 455 | db $65 456 | dl {pSrc} 457 | } 458 | 459 | macro WriteBgTiles(wBgNumber, pPtrTo16bitLenAnd24bitSrcPtr) { 460 | db $66 461 | dw {wBgNumber} 462 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 463 | } 464 | 465 | macro WritePalette(pPtrTo16bitLenAnd24bitSrcPtr) { 466 | db $67 467 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 468 | } 469 | 470 | macro WriteBgMap(wBgNumber, pPtrTo16bitLenAnd24bitSrcPtr) { 471 | db $68 472 | dw {wBgNumber} 473 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 474 | } 475 | 476 | macro KillAllOtherThreads() { 477 | db $69 478 | } 479 | 480 | macro MultipleGosubToSelectedTableEntries(vFlags, pPtrToTable) { 481 | db $6A 482 | dl {vFlags}, {pPtrToTable} 483 | } 484 | 485 | macro AllocateAndInitBgPaletteTilesAndMap2(vX, vY, pPtrToThreePtrs, vBgMapSize) { 486 | db $6B 487 | dl {vX}, {vY}, {pPtrToThreePtrs}, {vBgMapSize} 488 | } 489 | 490 | macro DeallocateAllObjTilesAndObjPalettes() { 491 | db $6C 492 | } 493 | 494 | macro BuggedSetBgParameters(bBgNumber, pPtr, wXsize, wYsize, wUnused1, wUnused2) { 495 | db $6D 496 | db {bBgNumber} 497 | dl {pPtr} 498 | dw {wXsize}, {wYsize} 499 | dw {wUnused1}, {wUnused2} 500 | } 501 | 502 | macro BuggedSetUnusedParameters(bSomeNumber, pPtr, wX, wY) { 503 | db $6E 504 | db {bSomeNumber} 505 | dl {pPtr} 506 | dw {wX}, {wY} 507 | } 508 | 509 | macro BuggedChangeBgScrolling(wX, wY) { 510 | db $6F 511 | dw {wX}, {wY} 512 | } 513 | 514 | macro PauseAllOtherThreads() { 515 | db $70 516 | } 517 | 518 | macro UnPauseAllOtherThreads() { 519 | db $71 520 | } 521 | 522 | macro GosubIfAccessedByPlayer(pGosubTargetOrPeopleFolderID) { 523 | db $72 524 | dl {pGosubTargetOrPeopleFolderID} 525 | } 526 | 527 | macro Dma16kbyteObjTilesToTempBufferAt7F4000h() { 528 | db $73 529 | } 530 | 531 | macro Dma16kbyteObjTilesFromTempBufferAt7F4000h() { 532 | db $74 533 | } 534 | 535 | macro SetFixedPlayerGenderObjShape(pSrc, wLen1, wLen2) { 536 | db $75 537 | dl {pSrc} 538 | dw {wLen1}, {wLen2} 539 | } 540 | 541 | macro InstallPeopleIfSatelliteIsOnline() { 542 | db $76 543 | } 544 | 545 | macro KillAllOtherThreadsAndGotoCrash() { 546 | db $77 547 | } 548 | 549 | macro ZerofillBgBufferInWram(vBgNumber) { 550 | db $78 551 | dl {vBgNumber} 552 | } 553 | 554 | macro ChangePtrToObjPriority(vVariableToBePointedTo) { 555 | db $79 556 | dl {vVariableToBePointedTo} 557 | } 558 | 559 | macro ChangeObjVsBgPriority(vPriorityBits) { 560 | db $7A 561 | dl {vPriorityBits} 562 | } 563 | 564 | macro SetXYposRelativeToParentThread(vX, vY) { 565 | db $7B 566 | dl {vX}, {vY} 567 | } 568 | 569 | macro TransferObjTilesAndObjPaletteToVram(pPtrToPtrsToPaletteAndTileInfo) { 570 | db $7C 571 | dl {pPtrToPtrsToPaletteAndTileInfo} 572 | } 573 | 574 | macro AllocateAndInitBgPaletteTilesAndMap1(vX, vY, pPtrToThreePtrs, vBgMapSize) { 575 | db $7D 576 | dl {vX}, {vY}, {pPtrToThreePtrs}, {vBgMapSize} 577 | } 578 | 579 | macro DrawMessageBoxAllAtOnce(vWindowNumber, vDelay, vX, vY, pPtrToString) { 580 | db $7E 581 | dl {vWindowNumber}, {vDelay}, {vX}, {vY}, {pPtrToString} 582 | } 583 | 584 | 585 | //Extended Tokens 586 | macro CallKillAllMachineCodeThreads() { 587 | db $60 588 | dl $809225 589 | } 590 | 591 | macro CallGetTextLayerVramBase() { 592 | db $60 593 | dl $80B47D 594 | } 595 | 596 | macro CallClearBg3TextLayer() { 597 | db $60 598 | dl $80B91E 599 | } 600 | 601 | macro CallSetApuRelatedPtr() { 602 | db $60 603 | dl $818EF9 604 | } 605 | 606 | macro CallDrawMessageBoxCharByChar(vWindowNumber, vDelay, vX, vY, pPtrToString) { 607 | db $60 608 | dl $818F06 609 | dl {vWindowNumber}, {vDelay}, {vX}, {vY}, {pPtrToString} 610 | } 611 | 612 | macro CallDrawBlackCircleInLowerRightOfWindow() { 613 | db $60 614 | dl $818FF0 615 | } 616 | 617 | macro CallDisplayButton_A_ObjInLowerRightOfWindow() { 618 | db $60 619 | dl $81903D 620 | } 621 | 622 | macro CallSetGuiBorderScheme(pAddr1, pAddr2) { 623 | db $60 624 | dl $81A508 625 | dl {pAddr1}, {pAddr2} 626 | } 627 | 628 | macro CallSetTextWindowBoundaries(wWindowNumber, bXpos, bYpos, bXsize, bYsize) { 629 | db $60 630 | dl $81A551 631 | dw {wWindowNumber} 632 | db {bXpos}, {bYpos} 633 | db {bXsize}, {bYsize} 634 | } 635 | 636 | macro CallHideTextWindow(wWindowNumber) { 637 | db $60 638 | dl $81A56E 639 | dw {wWindowNumber} 640 | } 641 | 642 | macro CallSelectWindowBorder(wWindowNumber, wBorder) { 643 | db $60 644 | dl $81A57B 645 | dw {wWindowNumber}, {wBorder} 646 | } 647 | 648 | macro CallSelectTextColor(wWindowNumber, bColor, bTileBank, bPalette) { 649 | db $60 650 | dl $81A59A 651 | dw {wWindowNumber} 652 | db {bColor}, {bTileBank}, {bPalette} 653 | } 654 | 655 | macro CallClearTextWindowDrawBorder(wWindowNumber) { 656 | db $60 657 | dl $81A5C3 658 | dw {wWindowNumber} 659 | } 660 | 661 | macro CallZoomInTextWindow(wWindowNumber, wZoomType) { 662 | db $60 663 | dl $81A5D2 664 | dw {wWindowNumber}, {wZoomType} 665 | } 666 | 667 | macro CallZoomOutTextWindow(wWindowNumber, wZoomType) { 668 | db $60 669 | dl $81A603 670 | dw {wWindowNumber}, {wZoomType} 671 | } 672 | 673 | macro CallSetGuiColorScheme(pAddr) { 674 | db $60 675 | dl $81A634 676 | dl {pAddr} 677 | } 678 | 679 | macro CallChangePaletteOfTextRow(vX, vY, vWidth, vPalette) { 680 | db $60 681 | dl $81A65D 682 | dl {vX}, {vY} 683 | dl {vWidth}, {vPalette} 684 | } 685 | 686 | macro CallPeekMemory16bit(vDest, pSource) { 687 | db $60 688 | dl $81A693 689 | dl {vDest}, {pSource} 690 | } 691 | 692 | macro CallPokeMemory16bit(vSource, pDest) { 693 | db $60 694 | dl $81A6B4 695 | dl {vSource}, {pDest} 696 | } 697 | 698 | macro CallInitializeAndDeallocateAllObjTilesAndObjPalettes() { 699 | db $60 700 | dl $81C7D0 701 | } 702 | 703 | macro CallDeallocateAllObjs() { 704 | db $60 705 | dl $81C871 706 | } 707 | 708 | macro CallBackupObjPalette() { 709 | db $60 710 | dl $81CDF9 711 | } 712 | 713 | macro CallRestoreObjPalette() { 714 | db $60 715 | dl $81CE09 716 | } 717 | 718 | macro CallUploadPaletteVram(pSource, wVramAddr, bPaletteIndex) { 719 | db $60 720 | dl $829699 721 | dl {pSource} 722 | dw {wVramAddr} 723 | db {bPaletteIndex} 724 | } 725 | 726 | macro CallTestIfFolderExists() { 727 | db $60 728 | dl $88932F 729 | } 730 | 731 | macro CallTestIfDoor() { 732 | db $60 733 | dl $88D076 734 | } 735 | 736 | macro CallSelectPlayerAsSecondaryThread() { 737 | db $60 738 | dl $99D9A4 739 | } 740 | 741 | //Token Functions Addresses 742 | constant EnterTown($99D69A) 743 | constant DeallocMostBgPalettesAndBgTiles($828230) 744 | constant SetCursorShapeMain($88C1C2) 745 | constant SetCursorShape0($88C1C6) 746 | constant SetCursorShape1($88C1D0) 747 | constant SetCursorShape2($88C1E0) 748 | constant SetCursorShape3($88C1EA) 749 | constant SetCursorShape4($88C1F4) 750 | constant SetCursorShape5($88C1FE) 751 | constant PauseSubThreadIfXYstepIsZero($99D8AB) 752 | constant MoveWithinX1andX2boundaries($99D8CD) 753 | constant MoveWithinY1andY2boundaries($99D903) 754 | constant Unknown0($99D782) 755 | constant Unknown1($99E386) 756 | constant Unknown2($99E719) 757 | constant Unknown3($88D136) 758 | constant Unknown4($99E768) 759 | constant Unknown5($88D11F) 760 | constant Unknown6($99E39C) 761 | constant Unknown7($873F22) 762 | constant Unknown8($99D7EE) 763 | 764 | //People Tokens Addresses List $99DAEC 765 | constant Person00($93F3FF) 766 | constant Person01($91E4A4) 767 | constant Person02($91C091) 768 | constant Person03($91EECC) 769 | constant Person04($92DE59) 770 | constant Person05($93AC14) 771 | constant Person06($91C170) 772 | constant Person07($91C7F0) 773 | constant Person08($919D9E) 774 | constant Person09($919E04) 775 | constant Person0A($919E36) 776 | constant Person0B($92CC80) 777 | constant Person0C($928F1D) 778 | constant Person0D($91DBAE) 779 | constant Person0E($92BDA4) 780 | constant Person0F($91AAD7) 781 | constant Person10($91ABC1) 782 | constant Person11($99D53A) 783 | constant Person12($9AA3F3) 784 | constant Person13($9AA425) 785 | constant Person14($9AA457) 786 | constant Person15($9AA489) 787 | constant Person16($9AA4BB) 788 | constant Person17($9AA4ED) 789 | constant Person18($928E8B) 790 | constant Person19($99D340) 791 | constant Person1A($99D372) 792 | constant Person1B($99D3A4) 793 | constant Person1C($99D3D6) 794 | constant Person1D($99D43C) 795 | constant Person1E($939E57) 796 | constant Person1F($99D4A2) 797 | constant Person20($99D508) 798 | constant Person21($93E444) 799 | constant Person22($92B672) 800 | constant Person23($92B75C) 801 | constant Person24($92B7C2) 802 | constant Person25($91D349) 803 | constant Person26($91D37B) 804 | constant Person27($91F622) 805 | constant Person28($92A32D) 806 | constant Person29($91888F) 807 | constant Person2A($93973B) 808 | constant Person2B($93A61D) 809 | constant Person2C($7F0000) //CUSTOM 810 | constant Person2D($7F0004) //CUSTOM 811 | constant Person2E($93E4C3) 812 | constant Person2F($000000) //NONE 813 | constant Person30($000000) //NONE 814 | constant Person31($000000) //NONE 815 | constant Person32($90CAC3) 816 | constant Person33($90CC15) 817 | constant Person34($90CD67) 818 | constant Person35($90CEB9) 819 | constant Person36($000000) //NONE 820 | constant Person37($93DFF2) 821 | constant Person38($92C9FD) 822 | constant Person39($92CA19) 823 | constant Person3A($92CA35) 824 | constant Person3B($000000) //NONE 825 | constant Person3C($000000) //NONE 826 | constant Person3D($000000) //NONE 827 | constant Person3E($000000) //NONE 828 | constant Person3F($000000) //NONE 829 | 830 | //Item Token Addresses List 831 | constant Item00($99974D) //Transfer Device 832 | constant Item07($88D17D) //Express Ticket Train 833 | constant Item08($88D1B7) //Regular Ticket Train 834 | constant Item09($88D257) //Bus Ticket 835 | constant Item0A($88D28E) //Taxi Ticket 836 | constant Item0B($88D2C5) //Rental Car Ticket 837 | constant Item0E($88D364) //Whale Bait 838 | constant Item0F($88D39B) //Dolphin Bait 839 | constant Item10($88D3D2) //Ricefish Bait 840 | constant Item11($88D46F) //Genderbender 841 | constant Item12($88D531) //Male Symbol 842 | constant Item13($88D565) //Female Symbol 843 | constant Item15($88D599) //Name Frog 844 | constant Item16($88D60C) //Frame Frog 845 | constant Item17($88D677) //Color Frog 846 | constant Item18($88D6DC) //Arrow Frog 847 | 848 | //Variable Types 849 | macro var_imm(x) { //Immediate Value 850 | ($000000 + {x}) 851 | } 852 | 853 | macro var_prv(x) { //Private Variable 854 | ($010000 + {x}) 855 | } 856 | 857 | macro var_glb(x) { //Global Variable 858 | ($020000 + {x}) 859 | } 860 | 861 | macro var_spc_w(x) { //Special Variable Write-only 862 | ($030000 + {x}) 863 | } 864 | 865 | macro var_spc_rw(x) { //Special Variable Read/Write 866 | ($090000 + {x}) 867 | } 868 | 869 | macro var_spc_r(x) { //Special Variable Read-only 870 | ($0A0000 + {x}) 871 | } 872 | 873 | constant var_minus_mask($FFFFFF) //XOR the private/global variable with it for negative numbers 874 | 875 | //Specific Vars 876 | define var_prv_id(var_prv($1600)) //Unsure 877 | define var_prv_un1(var_prv($1628)) 878 | define var_prv_x(var_prv($1650)) //X variable 879 | define var_prv_un2(var_prv($1678)) 880 | define var_prv_y(var_prv($16A0)) //Y variable 881 | define var_prv_xstep(var_prv($16C8)) //X step 882 | define var_prv_ystep(var_prv($16F0)) //Y step 883 | 884 | //Pointer Types 885 | macro ptr_normal(x) { //Normal Pointer 886 | ($000000 + {x}) 887 | } 888 | 889 | macro ptr_relative(x) { //Relative Pointer based on current program counter [$AC] 890 | ($F00000 | ({x} & $FFFF)) 891 | } 892 | 893 | //These uses token 3F, Temporary Tables [$AF+(tblnum*3)] 894 | macro ptr_imm0(x) { //Table 0 Index Pointer Immediate Value 895 | ($F10000 | ({x} & $1FFFF)) 896 | } 897 | 898 | macro ptr_prv0(x) { //Table 0 Index Pointer Private Variable 899 | ($F30000 | ({x} & $FFFF)) 900 | } 901 | 902 | macro ptr_glb0(x) { //Table 0 Index Pointer Global Variable 903 | ($F40000 | ({x} & $FFFF)) 904 | } 905 | 906 | 907 | macro ptr_imm1(x) { //Table 1 Index Pointer Immediate Value 908 | ($F50000 | ({x} & $1FFFF)) 909 | } 910 | 911 | macro ptr_prv1(x) { //Table 1 Index Pointer Private Variable 912 | ($F70000 | ({x} & $FFFF)) 913 | } 914 | 915 | macro ptr_glb1(x) { //Table 1 Index Pointer Global Variable 916 | ($F80000 | ({x} & $FFFF)) 917 | } 918 | 919 | 920 | macro ptr_imm2(x) { //Table 2 Index Pointer Immediate Value 921 | ($F90000 | ({x} & $1FFFF)) 922 | } 923 | 924 | macro ptr_prv2(x) { //Table 2 Index Pointer Private Variable 925 | ($FB0000 | ({x} & $FFFF)) 926 | } 927 | 928 | macro ptr_glb2(x) { //Table 2 Index Pointer Global Variable 929 | ($FC0000 | ({x} & $FFFF)) 930 | } 931 | 932 | //Compare Types 933 | constant cmp_less($0000) //LESS (<) 934 | constant cmp_lessequ($0001) //LESS OR EQUAL (<=) 935 | constant cmp_equ($0002) //EQUAL (=) 936 | constant cmp_notequ($0003) //NOT EQUAL (!=) 937 | constant cmp_great($0004) //GREATER (>) 938 | constant cmp_greatequ($0005) //GREATER OR EQUAL (>=) 939 | 940 | //Entrypoint Special Values for Token $00 941 | constant ctlsub_pause($000000) //Pause SubThread 942 | constant ctlsub_unpause_obj($000001) //Unpause SubThread and reenable OBJ 943 | constant ctlsub_pausenextframe($000002) //Pause after the next frame 944 | constant ctlsub_pause_obj($000003) //Pause and Disable OBJ 945 | constant ctlsub_reset($000004) //Reset and Restart the SubThread 946 | constant ctlsub_kill($000005) //Kill SubThread 947 | -------------------------------------------------------------------------------- /include/BSXTokens_byuu.inc: -------------------------------------------------------------------------------- 1 | //BS-X Tokens Include File for bass 2 | //By LuigiBlood, based on nocash documentation 3 | 4 | //Each thread has X and Y variables for OBJ (Sprites) uses. 5 | 6 | //Normal Tokens 7 | macro ControlSubThread entrypoint 8 | db $00 9 | dl {entrypoint} 10 | endmacro 11 | 12 | macro SetXYsignViewDirectionToSignsOfIncomingValues vX, vY 13 | db $01 14 | dl {vX}, {vY} 15 | endmacro 16 | 17 | macro SleepWithFixedObjShape wSleep, pObjShape 18 | db $02 19 | dw {wSleep} 20 | dl {pObjShape} 21 | endmacro 22 | 23 | macro SleepWithXYstepAs9wayObjShape wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9 24 | db $03 25 | dw {wSleep} 26 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 27 | endmacro 28 | 29 | macro SleepWithXYsignAs9wayObjShape wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9 30 | db $04 31 | dw {wSleep} 32 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 33 | endmacro 34 | 35 | macro ClearForcedBlankAndFadeIn wSleep, wSpeedRange 36 | db $05 37 | dw {wSleep}, {wSpeedRange} 38 | endmacro 39 | 40 | macro MasterBrightnessFadeOut wSleep, wSpeedRange 41 | db $06 42 | dw {wSleep}, {wSpeedRange} 43 | endmacro 44 | 45 | macro SetMosaicAndSleep wSleep, wBgFlags, wMosaicSize 46 | db $07 47 | dw {wSleep}, {wBgFlags}, {wMosaicSize} 48 | endmacro 49 | 50 | macro SleepAndBlendFromCurrentToNewPalette wSleep, vPalIndex, pNewPalette 51 | db $09 52 | dw {wSleep} 53 | dl {vPalIndex} 54 | dl {pNewPalette} 55 | endmacro 56 | 57 | macro HdmaEffectsOnBg3 wSleep, wEffectType, vScrollOffset, vExtraOffset 58 | db $0A 59 | dw {wSleep}, {wEffectType} 60 | dl {vScrollOffset}, {vExtraOffset} 61 | endmacro 62 | 63 | macro SleepWithAngleAs9wayObjShape wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9 64 | db $0B 65 | dw {wSleep} 66 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 67 | endmacro 68 | 69 | macro DisableObjsOfAllThreads 70 | db $0C 71 | endmacro 72 | 73 | macro ReEnableObjsOfAllThreads 74 | db $0D 75 | endmacro 76 | 77 | macro SleepWithXYsignAs9wayPlayerGenderObjShape wSleep, pObjShape1, pObjShape2, pObjShape3, pObjShape4, pObjShape5, pObjShape6, pObjShape7, pObjShape8, pObjShape9 78 | db $0E 79 | dw {wSleep} 80 | dl {pObjShape1}, {pObjShape2}, {pObjShape3}, {pObjShape4}, {pObjShape5}, {pObjShape6}, {pObjShape7}, {pObjShape8}, {pObjShape9} 81 | endmacro 82 | 83 | macro SleepAndSetXYpos wSleep, vX, vY 84 | db $10 85 | dw {wSleep} 86 | dl {vX}, {vY} 87 | endmacro 88 | 89 | macro SleepAndMoveTowardsTargetXYpos wSleep, vX, vY 90 | db $11 91 | dw {wSleep} 92 | dl {vX}, {vY} 93 | endmacro 94 | 95 | macro SleepAndMoveByIncomingXYstep wSleep, vX, vY 96 | db $12 97 | dw {wSleep} 98 | dl {vX}, {vY} 99 | endmacro 100 | 101 | macro SleepAndMoveAndAdjustXYstep wSleep, vRotationAngleToOldXYstep 102 | db $13 103 | dw {wSleep} 104 | dl {vRotationAngleToOldXYstep} 105 | endmacro 106 | 107 | macro SleepAndMoveWithinBoundary wSleep, vX1, vX2, vY1, vY2, wFactor 108 | db $14 109 | dw {wSleep} 110 | dl {vX1}, {vX2}, {vY1}, {vY2} 111 | dw {wFactor} 112 | endmacro 113 | 114 | macro SleepAndMoveChangeBothXYstepsIfCollideOtherThread wSleep, wBounceSpeed 115 | db $15 116 | dw {wSleep}, {wBounceSpeed} 117 | endmacro 118 | 119 | macro SleepAndMoveAndIncrementXYstep wSleep, vXincr, vYincr, qXlimit, qYlimit 120 | db $16 121 | dw {wSleep} 122 | dl {vXincr}, {vYincr}, {qXlimit}, {qYlimit} 123 | endmacro 124 | 125 | macro SleepAndMoveByIncomingYstepAndWavingXstep wSleep, wY 126 | db $17 127 | dw {wSleep}, {wY} 128 | endmacro 129 | 130 | macro SleepAndMoveAndAccelerateTowardsTarget wSleep, vX, vY, vSpeed 131 | db $18 132 | dw {wSleep} 133 | dl {vX}, {vY}, {vSpeed} 134 | endmacro 135 | 136 | macro SleepAndMoveAndSomethingComplicated wSleep, vX, vY 137 | db $19 138 | dw {wSleep} 139 | dl {vX}, {vY} 140 | endmacro 141 | 142 | macro AdjustXYstep wNewSpeedOrSo 143 | db $1A 144 | dw {wNewSpeedOrSo} 145 | endmacro 146 | 147 | macro MoveByOldXYstepWithoutSleep 148 | db $1B 149 | endmacro 150 | 151 | macro SleepAndMoveChangeXYstepIfCollideOtherThread wSleep, vMask, vX, vY 152 | db $1C 153 | dw {wSleep} 154 | dl {vMask}, {vX}, {vY} 155 | endmacro 156 | 157 | macro Goto pTarget 158 | db $20 159 | dl {pTarget} 160 | endmacro 161 | 162 | macro Gosub pTarget 163 | db $21 164 | dl {pTarget} 165 | endmacro 166 | 167 | macro Return 168 | db $22 169 | endmacro 170 | 171 | macro QuitThread 172 | db $23 173 | endmacro 174 | 175 | macro LoopStart wRepeatCount 176 | db $24 177 | dl {wRepeatCount} 178 | endmacro 179 | 180 | macro Sleep wSleep 181 | db $25 182 | dw {wSleep} 183 | endmacro 184 | 185 | macro MathsLet vA, vB 186 | db $26 187 | dl {vA}, {vB} 188 | endmacro 189 | 190 | macro MathsAdd vA, vB 191 | db $27 192 | dl {vA}, {vB} 193 | endmacro 194 | 195 | macro MathsSub vA, vB 196 | db $28 197 | dl {vA}, {vB} 198 | endmacro 199 | 200 | macro MathsAnd vA, vB 201 | db $29 202 | dl {vA}, {vB} 203 | endmacro 204 | 205 | macro MathsOr vA, vB 206 | db $2A 207 | dl {vA}, {vB} 208 | endmacro 209 | 210 | macro MathsXor vA, vB 211 | db $2B 212 | dl {vA}, {vB} 213 | endmacro 214 | 215 | macro MathsNot vA 216 | db $2C 217 | dl {vA} 218 | endmacro 219 | 220 | macro MathsMulSigned vA, vB 221 | db $2D 222 | dl {vA}, {vB} 223 | endmacro 224 | 225 | macro MathsDivSigned vA, vB 226 | db $2E 227 | dl {vA}, {vB} 228 | endmacro 229 | 230 | macro SignedCompareWithConditionalGoto vA, wOperator, vB, pTarget 231 | db $2F 232 | dl {vA} 233 | dw {wOperator} 234 | dl {vB} 235 | dl {pTarget} 236 | endmacro 237 | 238 | macro GotoIf_1998_IsNonzero pTarget 239 | db $30 240 | dl {pTarget} 241 | endmacro 242 | 243 | macro GotoIf_1998_IsZero pTarget 244 | db $31 245 | dl {pTarget} 246 | endmacro 247 | 248 | macro GotoArray vArrayIndex, pPointerToArrayWithTargets 249 | db $32 250 | dl {vArrayIndex}, {pPointerToArrayWithTargets} 251 | endmacro 252 | 253 | macro ReadJoypad bJoypadNumber, wX, wY 254 | db $33 255 | db {bJoypadNumber} 256 | dw {wX}, {wY} 257 | endmacro 258 | 259 | macro CreateAnotherInterpreterThreadWithLimit vThreadCount, bLimit, pEntry 260 | db $34 261 | dl {vThreadCount} 262 | db {bLimit} 263 | dl {pEntry} 264 | endmacro 265 | 266 | macro CheckIfXYposCollidesWithFlaggedThreads vFlagMask 267 | db $35 268 | dl {vFlagMask} 269 | endmacro 270 | 271 | macro GetUnsignedRandomValue vA, wB 272 | db $36 273 | dl {vA} 274 | dw {wB} 275 | endmacro 276 | 277 | macro SetObjWidthDepthFlagmask vWidth, vDepth, vMask 278 | db $37 279 | dl {vWidth}, {vDepth}, {vMask} 280 | endmacro 281 | 282 | macro CreateAnotherInterpreterThreadWithIncomingXYpos vX, vY, pEntrypoint 283 | db $38 284 | dl {vX}, {vY}, {pEntrypoint} 285 | endmacro 286 | 287 | macro SoundApuMessage00h_nnh vParameter8bit 288 | db $3A 289 | dl {vParameter8bit} 290 | endmacro 291 | 292 | macro SoundApuMessage01h_nnnh vLower6bit, bMiddle2bit, bUpper2bit 293 | db $3B 294 | dl {vLower6bit} 295 | db {bMiddle2bit}, {bUpper2bit} 296 | endmacro 297 | 298 | macro SoundApuMessage02h_nnnnh vLower6bit, bMiddle2bit, bUpper2bit 299 | db $3C 300 | dl {vLower6bit} 301 | db {bMiddle2bit}, {bUpper2bit} 302 | endmacro 303 | 304 | macro SoundApuUpload bMode, pPtrToPtrToData 305 | db $3D 306 | db {bMode} 307 | dl {pPtrToPtrToData} 308 | endmacro 309 | 310 | macro SetPpuBgModeKillAllOtherThreadsAndResetVariousStuff bBgMode 311 | db $3E 312 | db {bBgMode} 313 | endmacro 314 | 315 | macro SetTemporaryTableForBanksF1hAndUp vTableNumber, pTableBase 316 | db $3F 317 | dl {vTableNumber}, {pTableBase} 318 | endmacro 319 | 320 | macro KillAllFlaggedThreads vMask 321 | db $40 322 | dl {vMask} 323 | endmacro 324 | 325 | macro SetBUGGEDTimerHotspot wHotspot 326 | db $41 327 | dw {wHotspot} 328 | endmacro 329 | 330 | macro Ppu_Bg1_Bg2_SetScrollPosition vX, vY 331 | db $42 332 | dl {vX}, {vY} 333 | endmacro 334 | 335 | macro Ppu_Bg1_Bg2_ApplyScrollOffsetAndSleep wSleep, vX, vY 336 | db $43 337 | dw {wSleep} 338 | dl {vX}, {vY} 339 | endmacro 340 | 341 | macro NopWithDummyParameters wUnused1, wUnused2 342 | db $44 343 | dw {wUnused1}, {wUnused2} 344 | endmacro 345 | 346 | macro NopWithoutParameters 347 | db $45 348 | endmacro 349 | 350 | macro AllocateAndInitObjTilesOrUseExistingTiles wLen, pSrc 351 | db $46 352 | dw {wLen} 353 | dl {pSrc} 354 | endmacro 355 | 356 | macro AllocateAndInitObjPaletteOrUseExistingPalette pSrc 357 | db $47 358 | dl {pSrc} 359 | endmacro 360 | 361 | macro DmaObjTilesToVram wObjVramAddr, wOBjVramEnd, pSrc 362 | db $48 363 | dw {wObjVramAddr}, {wOBjVramEnd} 364 | dl {pSrc} 365 | endmacro 366 | 367 | macro SetObjPalette wObjPalIndex, wObjPalEnd, pSrc 368 | db $49 369 | dw {wObjPalIndex}, {wObjPalEnd} 370 | dl {pSrc} 371 | endmacro 372 | 373 | macro SramAddSubOrSetMoney bAction, vLower16bit, vMiddle16bit, vUpper16bit 374 | db $4A 375 | db {bAction} 376 | dl {vLower16bit}, {vMiddle16bit}, {vUpper16bit} 377 | endmacro 378 | 379 | macro SramUpdateChksumAndBackupCopy 380 | db $4B 381 | endmacro 382 | 383 | macro TestAndGotoIfNonzero vA, vB, pTarget 384 | db $50 385 | dl {vA}, {vB}, {pTarget} 386 | endmacro 387 | 388 | macro TestAndGotoIfZero vA, vB, pTarget 389 | db $51 390 | dl {vA}, {vB}, {pTarget} 391 | endmacro 392 | 393 | macro InitNineGeneralPurposePrivateVariables wA, wB, wC, wD, wE, wF, wG, wH, wI 394 | db $52 395 | dw {wA}, {wB}, {wC}, {wD}, {wE}, {wF}, {wG}, {wH}, {wI} 396 | endmacro 397 | 398 | macro MultipleCreateThreadBySelectedTableEntries vFlags, vLimit, pPtrToTable 399 | db $53 400 | dl {vFlags}, {vLimit}, {pPtrToTable} 401 | endmacro 402 | 403 | macro PrepareMultipleGosub 404 | db $54 405 | endmacro 406 | 407 | macro StrangeXYposMultiplyThenDivide wA, wB 408 | db $55 409 | dw {wA}, {wB} 410 | endmacro 411 | 412 | macro BuggedForceXYposIntoScreenArea 413 | db $56 414 | endmacro 415 | 416 | macro Maths32bitAdd16bitMul100h vA, vB 417 | db $57 418 | dl {vA}, {vB} 419 | endmacro 420 | 421 | macro Maths32bitSub16bitMul100h vA, vB 422 | db $58 423 | dl {vA}, {vB} 424 | endmacro 425 | 426 | macro SoundApuUploadWithTimeout wTimeout, pPtrToPtrToData 427 | db $59 428 | dw {wTimeout} 429 | dl {pPtrToPtrToData} 430 | endmacro 431 | 432 | macro CallMachineCodeFunction pTarget 433 | db $60 434 | dl {pTarget} 435 | endmacro 436 | 437 | macro SetTemporaryOffsetFor0AxxxxhVariables vOffset 438 | db $61 439 | dl {vOffset} 440 | endmacro 441 | 442 | macro LoopNext 443 | db $62 444 | endmacro 445 | 446 | macro SetForcedBlankAndSleepOnce 447 | db $63 448 | endmacro 449 | 450 | macro ClearForcedBlankAndSleepOnce 451 | db $64 452 | endmacro 453 | 454 | macro AllocateAndInitObjPaletteAndObjTilesOrUseExistingOnes pSrc 455 | db $65 456 | dl {pSrc} 457 | endmacro 458 | 459 | macro WriteBgTiles wBgNumber, pPtrTo16bitLenAnd24bitSrcPtr 460 | db $66 461 | dw {wBgNumber} 462 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 463 | endmacro 464 | 465 | macro WritePalette pPtrTo16bitLenAnd24bitSrcPtr 466 | db $67 467 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 468 | endmacro 469 | 470 | macro WriteBgMap wBgNumber, pPtrTo16bitLenAnd24bitSrcPtr 471 | db $68 472 | dw {wBgNumber} 473 | dl {pPtrTo16bitLenAnd24bitSrcPtr} 474 | endmacro 475 | 476 | macro KillAllOtherThreads 477 | db $69 478 | endmacro 479 | 480 | macro MultipleGosubToSelectedTableEntries vFlags, pPtrToTable 481 | db $6A 482 | dl {vFlags}, {pPtrToTable} 483 | endmacro 484 | 485 | macro AllocateAndInitBgPaletteTilesAndMap2 vX, vY, pPtrToThreePtrs, vBgMapSize 486 | db $6B 487 | dl {vX}, {vY}, {pPtrToThreePtrs}, {vBgMapSize} 488 | endmacro 489 | 490 | macro DeallocateAllObjTilesAndObjPalettes 491 | db $6C 492 | endmacro 493 | 494 | macro BuggedSetBgParameters bBgNumber, pPtr, wXsize, wYsize, wUnused1, wUnused2 495 | db $6D 496 | db {bBgNumber} 497 | dl {pPtr} 498 | dw {wXsize}, {wYsize} 499 | dw {wUnused1}, {wUnused2} 500 | endmacro 501 | 502 | macro BuggedSetUnusedParameters bSomeNumber, pPtr, wX, wY 503 | db $6E 504 | db {bSomeNumber} 505 | dl {pPtr} 506 | dw {wX}, {wY} 507 | endmacro 508 | 509 | macro BuggedChangeBgScrolling wX, wY 510 | db $6F 511 | dw {wX}, {wY} 512 | endmacro 513 | 514 | macro PauseAllOtherThreads 515 | db $70 516 | endmacro 517 | 518 | macro UnPauseAllOtherThreads 519 | db $71 520 | endmacro 521 | 522 | macro GosubIfAccessedByPlayer pGosubTargetOrPeopleFolderID 523 | db $72 524 | dl {pGosubTargetOrPeopleFolderID} 525 | endmacro 526 | 527 | macro Dma16kbyteObjTilesToTempBufferAt7F4000h 528 | db $73 529 | endmacro 530 | 531 | macro Dma16kbyteObjTilesFromTempBufferAt7F4000h 532 | db $74 533 | endmacro 534 | 535 | macro SetFixedPlayerGenderObjShape pSrc, wLen1, wLen2 536 | db $75 537 | dl {pSrc} 538 | dw {wLen1}, {wLen2} 539 | endmacro 540 | 541 | macro InstallPeopleIfSatelliteIsOnline 542 | db $76 543 | endmacro 544 | 545 | macro KillAllOtherThreadsAndGotoCrash 546 | db $77 547 | endmacro 548 | 549 | macro ZerofillBgBufferInWram vBgNumber 550 | db $78 551 | dl {vBgNumber} 552 | endmacro 553 | 554 | macro ChangePtrToObjPriority vVariableToBePointedTo 555 | db $79 556 | dl {vVariableToBePointedTo} 557 | endmacro 558 | 559 | macro ChangeObjVsBgPriority vPriorityBits 560 | db $7A 561 | dl {vPriorityBits} 562 | endmacro 563 | 564 | macro SetXYposRelativeToParentThread vX, vY 565 | db $7B 566 | dl {vX}, {vY} 567 | endmacro 568 | 569 | macro TransferObjTilesAndObjPaletteToVram pPtrToPtrsToPaletteAndTileInfo 570 | db $7C 571 | dl {pPtrToPtrsToPaletteAndTileInfo} 572 | endmacro 573 | 574 | macro AllocateAndInitBgPaletteTilesAndMap1 vX, vY, pPtrToThreePtrs, vBgMapSize 575 | db $7D 576 | dl {vX}, {vY}, {pPtrToThreePtrs}, {vBgMapSize} 577 | endmacro 578 | 579 | macro DrawMessageBoxAllAtOnce vWindowNumber, vDelay, vX, vY, pPtrToString 580 | db $7E 581 | dl {vWindowNumber}, {vDelay}, {vX}, {vY}, {pPtrToString} 582 | endmacro 583 | 584 | 585 | //Extended Tokens 586 | macro CallKillAllMachineCodeThreads 587 | db $60 588 | dl $809225 589 | endmacro 590 | 591 | macro CallGetTextLayerVramBase 592 | db $60 593 | dl $80B47D 594 | endmacro 595 | 596 | macro CallClearBg3TextLayer 597 | db $60 598 | dl $80B91E 599 | endmacro 600 | 601 | macro CallSetApuRelatedPtr 602 | db $60 603 | dl $818EF9 604 | endmacro 605 | 606 | macro CallDrawMessageBoxCharByChar vWindowNumber, vDelay, vX, vY, pPtrToString 607 | db $60 608 | dl $818F06 609 | dl {vWindowNumber}, {vDelay}, {vX}, {vY}, {pPtrToString} 610 | endmacro 611 | 612 | macro CallDrawBlackCircleInLowerRightOfWindow 613 | db $60 614 | dl $818FF0 615 | endmacro 616 | 617 | macro CallDisplayButton_A_ObjInLowerRightOfWindow 618 | db $60 619 | dl $81903D 620 | endmacro 621 | 622 | macro CallSetGuiBorderScheme pAddr1, pAddr2 623 | db $60 624 | dl $81A508 625 | dl {pAddr1}, {pAddr2} 626 | endmacro 627 | 628 | macro CallSetTextWindowBoundaries wWindowNumber, bXpos, bYpos, bXsize, bYsize 629 | db $60 630 | dl $81A551 631 | dw {wWindowNumber} 632 | db {bXpos}, {bYpos} 633 | db {bXsize}, {bYsize} 634 | endmacro 635 | 636 | macro CallHideTextWindow wWindowNumber 637 | db $60 638 | dl $81A56E 639 | dw {wWindowNumber} 640 | endmacro 641 | 642 | macro CallSelectWindowBorder wWindowNumber, wBorder 643 | db $60 644 | dl $81A57B 645 | dw {wWindowNumber}, {wBorder} 646 | endmacro 647 | 648 | macro CallSelectTextColor wWindowNumber, bColor, bTileBank, bPalette 649 | db $60 650 | dl $81A59A 651 | dw {wWindowNumber} 652 | db {bColor}, {bTileBank}, {bPalette} 653 | endmacro 654 | 655 | macro CallClearTextWindowDrawBorder wWindowNumber 656 | db $60 657 | dl $81A5C3 658 | dw {wWindowNumber} 659 | endmacro 660 | 661 | macro CallZoomInTextWindow wWindowNumber, wZoomType 662 | db $60 663 | dl $81A5D2 664 | dw {wWindowNumber}, {wZoomType} 665 | endmacro 666 | 667 | macro CallZoomOutTextWindow wWindowNumber, wZoomType 668 | db $60 669 | dl $81A603 670 | dw {wWindowNumber}, {wZoomType} 671 | endmacro 672 | 673 | macro CallSetGuiColorScheme pAddr 674 | db $60 675 | dl $81A634 676 | dl {pAddr} 677 | endmacro 678 | 679 | macro CallChangePaletteOfTextRow vX, vY, vWidth, vPalette 680 | db $60 681 | dl $81A65D 682 | dl {vX}, {vY} 683 | dl {vWidth}, {vPalette} 684 | endmacro 685 | 686 | macro CallPeekMemory16bit vDest, pSource 687 | db $60 688 | dl $81A693 689 | dl {vDest}, {pSource} 690 | endmacro 691 | 692 | macro CallPokeMemory16bit vSource, pDest 693 | db $60 694 | dl $81A6B4 695 | dl {vSource}, {pDest} 696 | endmacro 697 | 698 | macro CallInitializeAndDeallocateAllObjTilesAndObjPalettes 699 | db $60 700 | dl $81C7D0 701 | endmacro 702 | 703 | macro CallDeallocateAllObjs 704 | db $60 705 | dl $81C871 706 | endmacro 707 | 708 | macro CallBackupObjPalette 709 | db $60 710 | dl $81CDF9 711 | endmacro 712 | 713 | macro CallRestoreObjPalette 714 | db $60 715 | dl $81CE09 716 | endmacro 717 | 718 | macro CallUploadPaletteVram pSource, wVramAddr, bPaletteIndex 719 | db $60 720 | dl $829699 721 | dl {pSource} 722 | dw {wVramAddr} 723 | db {bPaletteIndex} 724 | endmacro 725 | 726 | macro CallTestIfFolderExists 727 | db $60 728 | dl $88932F 729 | endmacro 730 | 731 | macro CallTestIfDoor 732 | db $60 733 | dl $88D076 734 | endmacro 735 | 736 | macro CallSelectPlayerAsSecondaryThread 737 | db $60 738 | dl $99D9A4 739 | endmacro 740 | 741 | //Token Functions Addresses 742 | define EnterTown $99D69A 743 | define DeallocMostBgPalettesAndBgTiles $828230 744 | define SetCursorShapeMain $88C1C2 745 | define SetCursorShape0 $88C1C6 746 | define SetCursorShape1 $88C1D0 747 | define SetCursorShape2 $88C1E0 748 | define SetCursorShape3 $88C1EA 749 | define SetCursorShape4 $88C1F4 750 | define SetCursorShape5 $88C1FE 751 | define PauseSubThreadIfXYstepIsZero $99D8AB 752 | define MoveWithinX1andX2boundaries $99D8CD 753 | define MoveWithinY1andY2boundaries $99D903 754 | define Unknown0 $99D782 755 | define Unknown1 $99E386 756 | define Unknown2 $99E719 757 | define Unknown3 $88D136 758 | define Unknown4 $99E768 759 | define Unknown5 $88D11F 760 | define Unknown6 $99E39C 761 | define Unknown7 $873F22 762 | define Unknown8 $99D7EE 763 | 764 | //People Tokens Addresses List $99DAEC 765 | define Person00 $93F3FF 766 | define Person01 $91E4A4 767 | define Person02 $91C091 768 | define Person03 $91EECC 769 | define Person04 $92DE59 770 | define Person05 $93AC14 771 | define Person06 $91C170 772 | define Person07 $91C7F0 773 | define Person08 $919D9E 774 | define Person09 $919E04 775 | define Person0A $919E36 776 | define Person0B $92CC80 777 | define Person0C $928F1D 778 | define Person0D $91DBAE 779 | define Person0E $92BDA4 780 | define Person0F $91AAD7 781 | define Person10 $91ABC1 782 | define Person11 $99D53A 783 | define Person12 $9AA3F3 784 | define Person13 $9AA425 785 | define Person14 $9AA457 786 | define Person15 $9AA489 787 | define Person16 $9AA4BB 788 | define Person17 $9AA4ED 789 | define Person18 $928E8B 790 | define Person19 $99D340 791 | define Person1A $99D372 792 | define Person1B $99D3A4 793 | define Person1C $99D3D6 794 | define Person1D $99D43C 795 | define Person1E $939E57 796 | define Person1F $99D4A2 797 | define Person20 $99D508 798 | define Person21 $93E444 799 | define Person22 $92B672 800 | define Person23 $92B75C 801 | define Person24 $92B7C2 802 | define Person25 $91D349 803 | define Person26 $91D37B 804 | define Person27 $91F622 805 | define Person28 $92A32D 806 | define Person29 $91888F 807 | define Person2A $93973B 808 | define Person2B $93A61D 809 | define Person2C $7F0000 //CUSTOM 810 | define Person2D $7F0004 //CUSTOM 811 | define Person2E $93E4C3 812 | define Person2F $000000 813 | define Person30 $000000 814 | define Person31 $000000 815 | define Person32 $90CAC3 816 | define Person33 $90CC15 817 | define Person34 $90CD67 818 | define Person35 $90CEB9 819 | define Person36 $000000 820 | define Person37 $93DFF2 821 | define Person38 $92C9FD 822 | define Person39 $92CA19 823 | define Person3A $92CA35 824 | define Person3B $000000 825 | define Person3C $000000 826 | define Person3D $000000 827 | define Person3E $000000 828 | define Person3F $000000 829 | 830 | //Item Token Addresses List 831 | define Item00 $99974D //Transfer Device 832 | define Item07 $88D17D //Express Ticket Train 833 | define Item08 $88D1B7 //Regular Ticket Train 834 | define Item09 $88D257 //Bus Ticket 835 | define Item0A $88D28E //Taxi Ticket 836 | define Item0B $88D2C5 //Rental Car Ticket 837 | define Item0E $88D364 //Whale Bait 838 | define Item0F $88D39B //Dolphin Bait 839 | define Item10 $88D3D2 //Ricefish Bait 840 | define Item11 $88D46F //Genderbender 841 | define Item12 $88D531 //Male Symbol 842 | define Item13 $88D565 //Female Symbol 843 | define Item15 $88D599 //Name Frog 844 | define Item16 $88D60C //Frame Frog 845 | define Item17 $88D677 //Color Frog 846 | define Item18 $88D6DC //Arrow Frog 847 | 848 | //Variable Types 849 | define var_imm $000000 //Immediate Value 850 | define var_prv $010000 //Private Variable 851 | define var_glb $020000 //Global Variable 852 | define var_minus_mask $FFFFFF //XOR the private/global variable with it for negative numbers 853 | define var_spc_w $030000 //Special Variable Write-only 854 | define var_spc_rw $090000 //Special Variable Read/Write 855 | define var_spc_r $0A0000 //Special Variable Read-only 856 | 857 | //Specific Vars 858 | define var_prv_id ({var_prv}+$1600) //Unsure 859 | define var_prv_un1 ({var_prv}+$1628) 860 | define var_prv_x ({var_prv}+$1650) //X variable 861 | define var_prv_un2 ({var_prv}+$1678) 862 | define var_prv_y ({var_prv}+$16A0) //Y variable 863 | define var_prv_xstep ({var_prv}+$16C8) //X step 864 | define var_prv_ystep ({var_prv}+$16F0) //Y step 865 | 866 | //Pointer Types 867 | define ptr_normal $000000 //Normal Pointer 868 | define ptr_token $F00000 //Relative Pointer based on current program counter [$AC] 869 | 870 | //These uses token 3F, Temporary Tables [$AF+(tblnum*3)] 871 | define ptr_index0 $F10000 //Table 0 Index Pointer Immediate Value 872 | define ptr_thrid0 $F30000 //Table 0 Index Pointer Private Variable 873 | define ptr_gblid0 $F40000 //Table 0 Index Pointer Global Variable 874 | 875 | define ptr_index3 $F50000 //Table 1 Index Pointer Immediate Value 876 | define ptr_thrid3 $F70000 //Table 1 Index Pointer Private Variable 877 | define ptr_gblid3 $F80000 //Table 1 Index Pointer Global Variable 878 | 879 | define ptr_index6 $F90000 //Table 2 Index Pointer Immediate Value 880 | define ptr_thrid6 $FB0000 //Table 2 Index Pointer Private Variable 881 | define ptr_gblid6 $FC0000 //Table 2 Index Pointer Global Variable 882 | 883 | //Compare Types 884 | define cmp_less $0000 //LESS (<) 885 | define cmp_lessequ $0001 //LESS OR EQUAL (<=) 886 | define cmp_equ $0002 //EQUAL (=) 887 | define cmp_notequ $0003 //NOT EQUAL (!=) 888 | define cmp_great $0004 //GREATER (>) 889 | define cmp_greatequ $0005 //GREATER OR EQUAL (>=) 890 | 891 | //Entrypoint Special Values for Token $00 892 | define ctlsub_pause $000000 //Pause SubThread 893 | define ctlsub_unpause_obj $000001 //Unpause SubThread and reenable OBJ 894 | define ctlsub_pausenextframe $000002 //Pause after the next frame 895 | define ctlsub_pause_obj $000003 //Pause and Disable OBJ 896 | define ctlsub_reset $000004 //Reset and Restart the SubThread 897 | define ctlsub_kill $000005 //Kill SubThread 898 | -------------------------------------------------------------------------------- /update/biosupdate_boot_hook.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //boot_hook update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | boot_hook: 6 | sep #$30 7 | lda.b #$01 8 | sta $2194 //Enable streams 9 | sta $013B 10 | dec a 11 | sta $7EA1B8 12 | ldx.b #$07 //Wait for 7 frames 13 | boot_hook_nmi_wait: 14 | lda $4210 15 | bpl boot_hook_nmi_wait 16 | boot_hook_nmi_off_wait: 17 | lda $4210 18 | bmi boot_hook_nmi_off_wait 19 | dex 20 | bne boot_hook_nmi_wait 21 | lda $0665 22 | cmp.b #$47 23 | bne boot_hook_return 24 | sep #$20 25 | rep #$10 26 | stz $143F 27 | jsl detect_receiver //($10598C) detect_receiver BIOS function 28 | beq boot_hook_receiver_not_found 29 | inc $143F //Satellaview found 30 | boot_hook_receiver_not_found: 31 | pla 32 | plx 33 | jml $809048 34 | boot_hook_return: 35 | rtl -------------------------------------------------------------------------------- /update/biosupdate_detect_receiver_and_do_downloads.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //detect_receiver_and_do_downloads update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | detect_receiver_and_do_downloads: 6 | sep #$20 7 | rep #$10 8 | jsl flush_old_download //($105B84) flush_old_download 9 | jsl detect_receiver //($10598C) detect_receiver 10 | beq receiver_not_found 11 | lda.b #$01 12 | bra receiver_found 13 | receiver_not_found: 14 | jsr port_2196_test_bit1 //($105994)port_2196_test_bit1 15 | beq 2196_test_correct 16 | lda.b #$02 17 | receiver_found: 18 | jml $80F461 19 | 2196_test_correct: 20 | ldx.w #$0122 21 | jml $80F397 22 | -------------------------------------------------------------------------------- /update/biosupdate_execute_game_code.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //execute_game_code update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | execute_game_code: 6 | sep #$20 7 | lda.b #$00 8 | sta $0C5000 //Disable Write to Memory Pack 9 | sta $0D5000 10 | jml $80BC84 //Goes to execute_game_code from the BIOS itself 11 | -------------------------------------------------------------------------------- /update/biosupdate_file_start_hook_arm9.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //file_start_hook update from bsx18.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | //$115276 6 | file_start_hook: 7 | lda.w #$1152 8 | sta $AD 9 | lda.w #$5281 10 | sta $AC //$AC = $115281 (change PC of BS-X Token Interpreter) 11 | rtl 12 | 13 | //$115281 14 | file_start_hook_script: 15 | SoundApuMessage00h_nnh($81) //Stop music 16 | MasterBrightnessFadeOut($20, $20) 17 | KillAllOtherThreads() 18 | ControlSubThread({ctlsub_kill}) 19 | SetForcedBlankAndSleepOnce() 20 | CallMachineCodeFunction($95819E) 21 | CallPeekMemory16bit(var_prv($19DA), $7E99CF) 22 | MathsAnd(var_prv($19DA), $80) 23 | SignedCompareWithConditionalGoto(var_prv($19DA), {cmp_notequ}, 0, $9560AD} 24 | CallMachineCodeFunction($9581AD) 25 | CallGetTextLayerVramBase() 26 | CallSetGuiBorderScheme($949BF1, $9499E1) 27 | CallSetGuiColorScheme($94A431) 28 | CallClearBg3TextLayer() 29 | CallSetTextWindowBoundaries($0000, $02, $0B, $1C, $0A) 30 | CallSelectTextColor(0, 1, 0, 0) 31 | CallSelectWindowBorder(0, $FF) 32 | DrawMessageBoxAllAtOnce(0, 0, 0, 0, file_start_hook_text) 33 | ClearForcedBlankAndSleepOnce() 34 | SoundApuUpload(0, $9FFFF3) //Upload Music Bank 35 | Sleep(1) 36 | SoundApuMessage00h_nnh($12) //Play Music $12 37 | Sleep(2) 38 | ClearForcedBlankAndFadeIn($20, $20) 39 | Sleep($20) 40 | SoundApuMessage01h_nnnh(1, 3, 3) //Play SFX 41 | Sleep($40) 42 | Goto($9580CB) //??? 43 | 44 | file_start_hook_text: 45 | //$11531E (Shift-JIS format) 46 | db " JO23-BS-TDM1\n St.GIGA\n\n これからお送りします情報を無断で他に\n 複製することを禁止します。" -------------------------------------------------------------------------------- /update/biosupdate_file_start_hook_byuu.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //file_start_hook update from bsx18.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | //$115276 6 | file_start_hook: 7 | lda.w #$1152 8 | sta $AD 9 | lda.w #$5281 10 | sta $AC //$AC = $115281 (change PC of BS-X Token Interpreter) 11 | rtl 12 | 13 | //$115281 14 | file_start_hook_script: 15 | {SoundApuMessage00h_nnh ({var_imm}+$81)} //Stop music 16 | {MasterBrightnessFadeOut $0020, $0020} 17 | {KillAllOtherThreads} 18 | {ControlSubThread {ctlsub_kill}} 19 | {SetForcedBlankAndSleepOnce} 20 | {CallMachineCodeFunction $95819E} 21 | {CallPeekMemory16bit ({var_prv}+$19DA), $7E99CF} 22 | {MathsAnd ({var_prv}+$19DA), ({var_imm}+$80)} 23 | {SignedCompareWithConditionalGoto ({var_prv}+$19DA), {cmp_notequ}, ({var_imm}+0), $9560AD} 24 | {CallMachineCodeFunction $9581AD} 25 | {CallGetTextLayerVramBase} 26 | {CallSetGuiBorderScheme $949BF1, $9499E1} 27 | {CallSetGuiColorScheme $94A431} 28 | {CallClearBg3TextLayer} 29 | {CallSetTextWindowBoundaries $0000, $02, $0B, $1C, $0A} 30 | {CallSelectTextColor $0000, $01, $00, $00} 31 | {CallSelectWindowBorder $0000, $00FF} 32 | {DrawMessageBoxAllAtOnce ({var_imm}+0), ({var_imm}+0), ({var_imm}+0), ({var_imm}+0), file_start_hook_text} 33 | {ClearForcedBlankAndSleepOnce} 34 | {SoundApuUpload $00, $9FFFF3} //Upload Music Bank 35 | {Sleep $0001} 36 | {SoundApuMessage00h_nnh ({var_imm}+$12)} //Play Music $12 37 | {Sleep $0002} 38 | {ClearForcedBlankAndFadeIn $0020, $0020} 39 | {Sleep $0020} 40 | {SoundApuMessage01h_nnnh ({var_imm}+1), $03, $03} //Play SFX 41 | {Sleep $0040} 42 | {Goto $9580CB} //??? 43 | 44 | file_start_hook_text: 45 | //$11531E 46 | " JO23-BS-TDM1\n St.GIGA\n\n これからお送りします情報を無断で他に\n 複製することを禁止します。" -------------------------------------------------------------------------------- /update/biosupdate_flash_get_and_interprete_id.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //flash_get_and_interprete_id update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | flash_get_and_interprete_id: 6 | jsl flash_get_and_interprete_id_bios //($80C177) Original BIOS flash_get_and_interprete_id 7 | php 8 | sep #$20 9 | lda $1441 10 | cmp.b #$04 11 | bcc check 12 | stz $1441 13 | check: 14 | plp 15 | rtl 16 | -------------------------------------------------------------------------------- /update/biosupdate_flash_get_id.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //flash_get_id update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | flash_get_id: 6 | php 7 | sep #$30 8 | lda.b #$38 9 | sta $C00000 10 | lda.b #$D0 11 | sta $C00000 //Reset Page Buffer (Vendor Info) command 12 | pha 13 | pla 14 | pha 15 | pla 16 | pha 17 | pla //Waste time 18 | lda.b #$71 19 | sta $C00000 //Read Extended Status 20 | loop: 21 | lda $C00004 //reads C00004 (GSR) instead of C00002 (PSR) in the BIOS 22 | bpl loop //Loop until flash is ready 23 | jml $80C1E6 //Continue with the BIOS code 24 | -------------------------------------------------------------------------------- /update/biosupdate_forward_queue_to_channel_map.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //forward_queue_to_channel_map update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | forward_queue_to_channel_map: 6 | sep #$20 7 | lda $7EA1B8 8 | bne not_zero 9 | inc a 10 | sta $7EA1B8 11 | jml forward_queue_to_channel_map //($80E0E5) Original forward_queue_to_channel_map BIOS code 12 | not_zero: 13 | rep #$20 14 | lda $1429 15 | and.w #$00FF 16 | asl a 17 | tax 18 | sep #$20 19 | jsr (jumps,x) 20 | rtl 21 | 22 | jumps: 23 | dw $50D1, $50DA, $51BF 24 | 25 | //$50D1 26 | INC $1429 27 | STZ $1413 28 | STZ $1412 29 | //$50DA 30 | LDA $143C 31 | AND #$1C 32 | CMP #$10 33 | BEQ PacketStartFlag 34 | JMP Return1 35 | PacketStartFlag: 36 | LDY $1435 37 | STY $1433 38 | STZ $1437 39 | LDY #$FFFF 40 | STY $4B 41 | INY 42 | SearchFirstPacket: 43 | LDA $9A20,y 44 | BIT #$10 45 | BNE FirstPacketFound 46 | INY 47 | CPY $143D 48 | BNE SearchFirstPacket 49 | JMP Return1 50 | FirstPacketFound: 51 | STY $47 52 | LDA $9A20,y 53 | BIT #$80 54 | BNE .arLabel059 55 | INY 56 | CPY $143D 57 | BEQ .arLabel05B 58 | SearchLastPacket: 59 | LDA $9A20,y 60 | BIT #$90 61 | BNE .arLabel052 62 | INY 63 | CPY $143D 64 | BNE SearchLastPacket 65 | BRA .arLabel05B 66 | .arLabel052: 67 | BIT #$10 68 | BEQ .arLabel059 69 | JMP $521C 70 | .arLabel059: 71 | STY $4B 72 | .arLabel05B: 73 | JSR $5252 74 | LDY $47 75 | INY 76 | INY 77 | LDA $9A34,y 78 | STA $1411 79 | INY 80 | LDA $9A34,y 81 | STA $1410 82 | INY 83 | LDA $9A34,y 84 | STA $140F 85 | INY 86 | STY $49 87 | LDX #$9BEC 88 | STX $51 89 | LDA #$7E 90 | STA $53 91 | LDX $4B 92 | BPL $2F 93 | LDX $143D 94 | STX $47 95 | JSR $5252 96 | LDX #$0000 97 | LDA $9A34,y 98 | PHY 99 | TXY 100 | STA [$51],y 101 | PLY 102 | INY 103 | INX 104 | CPY $47 105 | BNE $F2 106 | TXY 107 | JSR $5243 108 | REP #$20 109 | LDA $47 110 | SEC 111 | SBC $49 112 | STA $47 113 | JSR $522E 114 | SEP #$20 115 | INC $1429 116 | Return1: 117 | RTS 118 | STX $47 119 | JSR $5252 120 | LDA $1411 121 | BNE $20 122 | LDX $140F 123 | BEQ $17 124 | STX $47 125 | LDX #$0000 126 | LDA $9A34,y 127 | PHY 128 | TXY 129 | STA [$51],y 130 | PLY 131 | INY 132 | INX 133 | CPX $47 134 | BNE $F2 135 | TXY 136 | JSR $5243 137 | STZ $1427 138 | RTS 139 | LDA #$01 140 | STA $1429 141 | LDY $1435 142 | STY $1433 143 | STZ $1437 144 | RTS 145 | 146 | //$51BF 147 | LDX $143D 148 | STX $47 149 | JSR $5252 150 | LDA $143C 151 | BIT #$1C 152 | BNE $4E 153 | BIT #$80 154 | BNE $19 155 | REP #$20 156 | LDY #$0000 157 | LDA $9A34,y 158 | STA [$51],y 159 | INY 160 | INY 161 | CPY $47 162 | BNE $F5 163 | SEP #$20 164 | JSR $522E 165 | JSR $5243 166 | RTS 167 | LDA $1411 168 | BMI $19 169 | BNE $1B 170 | LDY $140F 171 | BEQ $12 172 | STY $47 173 | LDY #$0000 174 | LDA $9A34,y 175 | STA [$51],y 176 | INY 177 | CPY $47 178 | BNE $F6 179 | JSR $5243 180 | STZ $1427 181 | RTS 182 | LDA #$01 183 | STA $1429 184 | LDY $1435 185 | STY $1433 186 | STZ $1437 187 | RTS 188 | STZ $1429 189 | LDY $1435 190 | STY $1433 191 | STZ $1437 192 | LDA #$8D05 193 | CMP #$6013 194 | PHP 195 | REP #$20 196 | LDA $140F 197 | SEC 198 | SBC $47 199 | STA $140F 200 | SEP #$20 201 | BCS $03 202 | DEC $1411 203 | PLP 204 | RTS 205 | REP #$20 206 | TYA 207 | CLC 208 | ADC $51 209 | STA $51 210 | SEP #$20 211 | BCC $02 212 | INC $53 213 | RTS 214 | REP #$20 215 | LDA $47 216 | ASL A 217 | ASL A 218 | ADC $47 219 | ASL A 220 | ADC $47 221 | ASL A 222 | STA $47 223 | SEP #$20 224 | RTS -------------------------------------------------------------------------------- /update/biosupdate_nmi_hook.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //nmi_hook update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | nmi_hook: 6 | php 7 | sep #$20 8 | lda $013B 9 | sta $420D //MEMSEL, FastROM speed setting 10 | plp 11 | rtl 12 | -------------------------------------------------------------------------------- /update/biosupdate_send_16bit_to_port_2199.asm: -------------------------------------------------------------------------------- 1 | //BS-X BIOS 2 | //send_16bit_to_port_2199 update from bsx16.srm (BS-X SRAMS Dumps 6-26-01) 3 | //Disassembled by LuigiBlood 4 | 5 | send_16bit_to_port_2199: 6 | phb 7 | phk 8 | plb 9 | jsl send_16bit_to_port_2199 //($80C3D6) Goes to send_16bit_to_port_2199 from the BIOS itself 10 | plb 11 | rtl 12 | -------------------------------------------------------------------------------- /update/info.txt: -------------------------------------------------------------------------------- 1 | Those updates are found in the BS-X SRAM. --------------------------------------------------------------------------------