📄 mips_stub.s
字号:
execute_load_open_u32u1: open_load32_align32 2, 1, patch_load_u32 ror $2, $2, 8 # rotate value by 8bits# Unsigned unaligned (by 2) 32bit load handlersexecute_load_bios_u32u2: region_check_align 0, 2, 2, patch_load_u32 srl $2, $5, 14 # check if PC is in BIOS region bne $2, $0, 1f # if not, perform BIOS protected read lui $1, %hi(bios_rom) # generate upper address (delay) andi $4, $4, 0x3FFC # generate offset addu $2, $1, $4 load_u32_unaligned bios_rom, 21: lui $2, %hi(bios_read_protect) # generate upper address load_u32_unaligned bios_read_protect, 2execute_load_ewram_u32u2: translate_region_ewram_load_align32 2, 2, patch_load_u32 load_u32_unaligned (ewram + 0x8000), 2execute_load_iwram_u32u2: translate_region_align 3, 2, 2, patch_load_u32, (iwram + 0x8000), 0x7FFC load_u32_unaligned (iwram + 0x8000), 2execute_load_io_u32u2: translate_region_align 4, 2, 2, patch_load_u32, io_registers, 0x3FC load_u32_unaligned io_registers, 2execute_load_palette_u32u2: translate_region_align 5, 2, 2, patch_load_u32, palette_ram, 0x3FC load_u32_unaligned palette_ram, 2execute_load_vram_u32u2: translate_region_vram_load_align32 2, 2, patch_load_u32 load_u32_unaligned vram, 2execute_load_oam_u32u2: translate_region_align 7, 2, 2, patch_load_u32, oam_ram, 0x3FC load_u32_unaligned oam_ram, 2execute_load_gamepak8_u32u2: translate_region_gamepak_align32 8, 2, 2, patch_load_u32 load_u32_unaligned 0, 2execute_load_gamepak9_u32u2: translate_region_gamepak_align32 9, 2, 2, patch_load_u32 load_u32_unaligned 0, 2execute_load_gamepakA_u32u2: translate_region_gamepak_align32 10, 2, 2, patch_load_u32 load_u32_unaligned 0, 2execute_load_gamepakB_u32u2: translate_region_gamepak_align32 11, 2, 2, patch_load_u32 load_u32_unaligned 0, 2execute_load_gamepakC_u32u2: translate_region_gamepak_align32 12, 2, 2, patch_load_u32 load_u32_unaligned 0, 2execute_load_eeprom_u32u2: eeprom_load_align32 2, 2, patch_load_u32execute_load_backup_u32u2: backup_load_align32 2, 2, patch_load_u32 ror $2, $2, 16 # rotate value by 16bitsexecute_load_open_u32u2: open_load32_align32 2, 2, patch_load_u32 ror $2, $2, 16 # rotate value by 16bits# Unsigned unaligned (by 1) 32bit load handlersexecute_load_bios_u32u3: region_check_align 0, 2, 3, patch_load_u32 srl $2, $5, 14 # check if PC is in BIOS region bne $2, $0, 1f # if not, perform BIOS protected read lui $1, %hi(bios_rom) # generate upper address (delay) andi $4, $4, 0x3FFC # generate offset addu $2, $1, $4 load_u32_unaligned bios_rom, 31: lui $2, %hi(bios_read_protect) # generate upper address load_u32_unaligned bios_read_protect, 3execute_load_ewram_u32u3: translate_region_ewram_load_align32 2, 3, patch_load_u32 load_u32_unaligned (ewram + 0x8000), 3execute_load_iwram_u32u3: translate_region_align 3, 2, 3, patch_load_u32, (iwram + 0x8000), 0x7FFC load_u32_unaligned (iwram + 0x8000), 3execute_load_io_u32u3: translate_region_align 4, 2, 3, patch_load_u32, io_registers, 0x3FC load_u32_unaligned io_registers, 3execute_load_palette_u32u3: translate_region_align 5, 2, 3, patch_load_u32, palette_ram, 0x3FC load_u32_unaligned palette_ram, 3execute_load_vram_u32u3: translate_region_vram_load_align32 2, 3, patch_load_u32 load_u32_unaligned vram, 3execute_load_oam_u32u3: translate_region_align 7, 2, 3, patch_load_u32, oam_ram, 0x3FC load_u32_unaligned oam_ram, 3execute_load_gamepak8_u32u3: translate_region_gamepak_align32 8, 2, 3, patch_load_u32 load_u32_unaligned 0, 3execute_load_gamepak9_u32u3: translate_region_gamepak_align32 9, 2, 3, patch_load_u32 load_u32_unaligned 0, 3execute_load_gamepakA_u32u3: translate_region_gamepak_align32 10, 2, 3, patch_load_u32 load_u32_unaligned 0, 3execute_load_gamepakB_u32u3: translate_region_gamepak_align32 11, 2, 3, patch_load_u32 load_u32_unaligned 0, 3execute_load_gamepakC_u32u3: translate_region_gamepak_align32 12, 2, 3, patch_load_u32 load_u32_unaligned 0, 3execute_load_eeprom_u32u3: eeprom_load_align32 2, 3, patch_load_u32execute_load_backup_u32u3: backup_load_align32 2, 3, patch_load_u32 ror $2, $2, 24 # rotate value by 24bitsexecute_load_open_u32u3: open_load32_align32 2, 3, patch_load_u32 ror $2, $2, 24 # rotate value by 24bitsload_u32_ftable: .long execute_load_bios_u32 # 0x00 BIOS .long execute_load_open_u32 # 0x01 open address .long execute_load_ewram_u32 # 0x02 EWRAM .long execute_load_iwram_u32 # 0x03 IWRAM .long execute_load_io_u32 # 0x04 I/O registers .long execute_load_palette_u32 # 0x05 Palette RAM .long execute_load_vram_u32 # 0x06 VRAM .long execute_load_oam_u32 # 0x07 OAM RAM .long execute_load_gamepak8_u32 # 0x08 gamepak .long execute_load_gamepak9_u32 # 0x09 gamepak .long execute_load_gamepakA_u32 # 0x0A gamepak .long execute_load_gamepakB_u32 # 0x0B gamepak .long execute_load_gamepakC_u32 # 0x0C gamepak .long execute_load_eeprom_u32 # 0x0D gamepak/eeprom .long execute_load_backup_u32 # 0x0E Flash ROM/SRAM .long execute_load_open_u32 # 0x0F open .long execute_load_bios_u32u1 # 0x00 BIOS unaligned (1b) .long execute_load_open_u32u1 # 0x01 open address unaligned (1b) .long execute_load_ewram_u32u1 # 0x02 EWRAM unaligned (1b) .long execute_load_iwram_u32u1 # 0x03 IWRAM unaligned (1b) .long execute_load_io_u32u1 # 0x04 I/O registers unaligned (1b) .long execute_load_palette_u32u1 # 0x05 Palette RAM unaligned (1b) .long execute_load_vram_u32u1 # 0x06 VRAM unaligned (1b) .long execute_load_oam_u32u1 # 0x07 OAM RAM unaligned (1b) .long execute_load_gamepak8_u32u1 # 0x08 gamepak unaligned (1b) .long execute_load_gamepak9_u32u1 # 0x09 gamepak unaligned (1b) .long execute_load_gamepakA_u32u1 # 0x0A gamepak unaligned (1b) .long execute_load_gamepakB_u32u1 # 0x0B gamepak unaligned (1b) .long execute_load_gamepakC_u32u1 # 0x0C gamepak unaligned (1b) .long execute_load_eeprom_u32u1 # 0x0D gamepak/eeprom unaligned (1b) .long execute_load_backup_u32u1 # 0x0E Flash ROM/SRAM unaligned (1b) .long execute_load_open_u32u1 # 0x0F open unaligned (1b) .long execute_load_bios_u32u2 # 0x00 BIOS unaligned (2b) .long execute_load_open_u32u2 # 0x01 open address unaligned (2b) .long execute_load_ewram_u32u2 # 0x02 EWRAM unaligned (2b) .long execute_load_iwram_u32u2 # 0x03 IWRAM unaligned (2b) .long execute_load_io_u32u2 # 0x04 I/O registers unaligned (2b) .long execute_load_palette_u32u2 # 0x05 Palette RAM unaligned (2b) .long execute_load_vram_u32u2 # 0x06 VRAM unaligned (2b) .long execute_load_oam_u32u2 # 0x07 OAM RAM unaligned (2b) .long execute_load_gamepak8_u32u2 # 0x08 gamepak unaligned (2b) .long execute_load_gamepak9_u32u2 # 0x09 gamepak unaligned (2b) .long execute_load_gamepakA_u32u2 # 0x0A gamepak unaligned (2b) .long execute_load_gamepakB_u32u2 # 0x0B gamepak unaligned (2b) .long execute_load_gamepakC_u32u2 # 0x0C gamepak unaligned (2b) .long execute_load_eeprom_u32u2 # 0x0D gamepak/eeprom unaligned (2b) .long execute_load_backup_u32u2 # 0x0E Flash ROM/SRAM unaligned (2b) .long execute_load_open_u32u2 # 0x0F open unaligned (2b) .long execute_load_bios_u32u3 # 0x00 BIOS unaligned (3b) .long execute_load_open_u32u3 # 0x01 open address unaligned (3b) .long execute_load_ewram_u32u3 # 0x02 EWRAM unaligned (3b) .long execute_load_iwram_u32u3 # 0x03 IWRAM unaligned (3b) .long execute_load_io_u32u3 # 0x04 I/O registers unaligned (3b) .long execute_load_palette_u32u3 # 0x05 Palette RAM unaligned (3b) .long execute_load_vram_u32u3 # 0x06 VRAM unaligned (3b) .long execute_load_oam_u32u3 # 0x07 OAM RAM unaligned (3b) .long execute_load_gamepak8_u32u3 # 0x08 gamepak unaligned (3b) .long execute_load_gamepak9_u32u3 # 0x09 gamepak unaligned (3b) .long execute_load_gamepakA_u32u3 # 0x0A gamepak unaligned (3b) .long execute_load_gamepakB_u32u3 # 0x0B gamepak unaligned (3b) .long execute_load_gamepakC_u32u3 # 0x0C gamepak unaligned (3b) .long execute_load_eeprom_u32u3 # 0x0D gamepak/eeprom unaligned (3b) .long execute_load_backup_u32u3 # 0x0E Flash ROM/SRAM unaligned (3b) .long execute_load_open_u32u3 # 0x0F open unaligned (3b)patch_load_u32: patch_handler_align load_u32_ftable, 2# Unsigned always aligned 32bit load handlersexecute_load_bios_u32a: region_check 0, patch_load_u32a srl $2, $5, 14 # check if PC is in BIOS region bne $2, $0, 1f # if not, perform BIOS protected read lui $1, %hi(bios_rom) # generate upper address (delay) andi $4, $4, 0x3FFF # generate offset addu $2, $1, $4 load_u32 bios_rom1: lui $2, %hi(bios_read_protect) # generate upper address load_u32 bios_read_protectexecute_load_ewram_u32a: translate_region_ewram patch_load_u32a load_u32 (ewram + 0x8000)execute_aligned_load32:execute_load_iwram_u32a: translate_region 3, patch_load_u32a, (iwram + 0x8000), 0x7FFF load_u32 (iwram + 0x8000)execute_load_io_u32a: translate_region 4, patch_load_u32a, io_registers, 0x3FF load_u32 io_registersexecute_load_palette_u32a: translate_region 5, patch_load_u32a, palette_ram, 0x3FF load_u32 palette_ramexecute_load_vram_u32a: translate_region_vram patch_load_u32a load_u32 vramexecute_load_oam_u32a: translate_region 7, patch_load_u32a, oam_ram, 0x3FF load_u32 oam_ramexecute_load_gamepak8_u32a: translate_region_gamepak_a 8, patch_load_u32a load_u32 0execute_load_gamepak9_u32a: translate_region_gamepak_a 9, patch_load_u32a load_u32 0execute_load_gamepakA_u32a: translate_region_gamepak_a 10, patch_load_u32a load_u32 0execute_load_gamepakB_u32a: translate_region_gamepak_a 11, patch_load_u32a load_u32 0execute_load_gamepakC_u32a: translate_region_gamepak_a 12, patch_load_u32a load_u32 0execute_load_eeprom_u32a: eeprom_load_a patch_load_u32aexecute_load_backup_u32a: backup_load_a patch_load_u32a nopexecute_load_open_u32a: open_load32_a patch_load_u32aload_u32a_ftable: .long execute_load_bios_u32a # 0x00 BIOS unaligned (3b) .long execute_load_open_u32a # 0x01 open address unaligned (3b) .long execute_load_ewram_u32a # 0x02 EWRAM unaligned (3b) .long execute_load_iwram_u32a # 0x03 IWRAM unaligned (3b) .long execute_load_io_u32a # 0x04 I/O registers unaligned (3b) .long execute_load_palette_u32a # 0x05 Palette RAM unaligned (3b) .long execute_load_vram_u32a # 0x06 VRAM unaligned (3b) .long execute_load_oam_u32a # 0x07 OAM RAM unaligned (3b) .long execute_load_gamepak8_u32a # 0x08 gamepak unaligned (3b) .long execute_load_gamepak9_u32a # 0x09 gamepak unaligned (3b) .long execute_load_gamepakA_u32a # 0x0A gamepak unaligned (3b) .long execute_load_gamepakB_u32a # 0x0B gamepak unaligned (3b) .long execute_load_gamepakC_u32a # 0x0C gamepak unaligned (3b) .long execute_load_eeprom_u32a # 0x0D gamepak/eeprom unaligned (3b) .long execute_load_backup_u32a # 0x0E Flash ROM/SRAM unaligned (3b) .long execute_load_open_u32a # 0x0F open unaligned (3b)patch_load_u32a: patch_handler load_u32a_ftable, 1# Unsigned 8bit store handlersexecute_store_ignore0_u8: ignore_region 0, patch_store_u8execute_store_ignore1_u8: ignore_region 1, patch_store_u8execute_store_ewram_u8: translate_region_ewram patch_store_u8 store_u8_smc (ewram + 0x8000)execute_store_u8:execute_store_iwram_u8: translate_region 3, patch_store_u8, (iwram + 0x8000), 0x7FFF store_u8_smc (iwram + 0x8000)execute_store_io_u8: region_check 4, patch_store_u8 andi $5, $5, 0xFF # make value 8bit andi $4, $4, 0x3FF # wrap around address addiu $sp, $sp, -4 # make room on the stack for $ra sw $ra, ($sp) save_registers jal write_io_register8 # write the value out sw $6, REG_PC($16) # save the PC (delay slot) j write_io_epilogue # handle any state changes nopexecute_store_palette_u8: region_check 5, patch_store_u8 lui $2, %hi(palette_ram) # start loading palette_ram address (delay) ins $5, $5, 8, 8 # double value andi $4, $4, 0x3FE # align palette address addu $2, $2, $4 sh $5, %lo(palette_ram)($2) # palette_ram[address] = value sll $1, $5, 1 # make green 6bits ins $1, $0, 0, 6 # make bottom bit 0 ins $1, $5, 0, 5 # insert red channel into $1 lui $2, %hi(palette_ram_converted) addu $2, $2, $4 jr $ra # return sh $1, %lo(palette_ram_converted)($2)execute_store_vram_u8: translate_region_vram_store_align16 patch_store_u8 store_u8_double vramexecute_store_oam_u8: translate_region 7, patch_store_u8, oam_ram, 0x3FE lui $1, %hi(oam_update) # write non-zero to oam_update sw $4, %lo(oam_update)($1) # cheap, but the address is non-zero store_u8_double oam_ramexecute_store_ignore8_u8: ignore_region 8, patch_store_u8execute_store_ignore9_u8: ignore_region 9, patch_store_u8execute_store_ignoreA_u8: ignore_region 10, patch_store_u8execute_store_ignoreB_u8: ignore_region 11, patch_store_u8execute_store_ignoreC_u8: ignore_region 12, patch_store_u8execute_store_eeprom_u8: store_function write_eeprom, 13, patch_store_u8, 0x3FFexecute_store_backup_u8: store_function write_backup, 14, patch_store_u8, 0xFFFFexecute_store_ignoreF_u8: ignore_high patch_store_u8store_u8_ftable: .long execute_store_ignore0_u8 # 0x00 BIOS .long execute_store_ignore1_u8 # 0x01 open address .long execute_store_ewram_u8 # 0x02 EWRAM .long execute_store_iwram_u8 # 0x03 IWRAM .long execute_store_io_u8 # 0x04 I/O registers .long execute_store_palette_u8 # 0x05 Palette RAM .long execute_store_vram_u8 # 0x06 VRAM .long execute_store_oam_u8 # 0x07 OAM RAM .long execute_store_ignore8_u8 # 0x08 gamepak .long execute_store_ignore9_u8 # 0x09 gamepak .long execute_store_ignoreA_u8 # 0x0A gamepak .long execute_store_ignoreB_u8 # 0x0B gamepak .long execute_store_ignoreC_u8 # 0x0C gamepak .long execute_store_eeprom_u8 # 0x0D gamepak/eeprom .long execute_store_backup_u8 # 0x0E Flash ROM/SRAM .long execute_store_ignoreF_u8 # 0x0F open addresspatch_store_u8: patch_handler store_u8_ftable,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -