X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FMemory_amips.s;h=e6247c6acf951e61c24226a73370259285c9f942;hb=9761a7d0d41ad429d53c64ff35fe061c38092dbf;hp=b5ec0995ce3f69c6fe30d474a7bd2ab98ec0dfcb;hpb=b542be4686241c9e0722ff8e452980f9ac2b4d7c;p=picodrive.git diff --git a/Pico/Memory_amips.s b/Pico/Memory_amips.s index b5ec099..e6247c6 100644 --- a/Pico/Memory_amips.s +++ b/Pico/Memory_amips.s @@ -260,29 +260,27 @@ m_read_neg1: j SRAMRead nop .elseif \size == 16 + sw $ra, -4($sp) + jal SRAMRead16 addiu $sp, -4 - jal SRAMRead - sw $ra, 0($sp) lw $ra, 0($sp) - addiu $sp, 4 jr $ra - ins $v0, $v0, 8, 8 + addiu $sp, 4 .else addiu $sp, -8 - sw $a0, 4($sp) - jal SRAMRead sw $ra, 0($sp) + sw $a0, 4($sp) + jal SRAMRead16 + nop lw $a0, 4($sp) sw $v0, 4($sp) - jal SRAMRead + jal SRAMRead16 addiu $a0, 2 lw $v1, 4($sp) lw $ra, 0($sp) addiu $sp, 8 - ins $v0, $v1, 16, 16 - sll $t0, $v0, 8 jr $ra - or $v0, $t0 + ins $v0, $v1, 16, 16 .endif # m_read_nosram: 1: @@ -423,12 +421,8 @@ m_read8_z80_misc: lui $t0, %hi(PicoOpt) lw $t0, %lo(PicoOpt)($t0) andi $t0, 1 - beqz $t0, m_read8_fake_ym2612 - lui $t0, %hi(Pico+0x22208) - lui $t0, %hi(ym2612_st) - lw $t0, %lo(ym2612_st)($t0) - jr $ra - lb $v0, 0x11($t0) + bnez $t0, ym2612_read_local_68k + nop m_read8_fake_ym2612: lb $v0, %lo(Pico+0x22208)($t0) # Pico.m.rotate @@ -437,16 +431,28 @@ m_read8_fake_ym2612: sb $t1, %lo(Pico+0x22208)($t0) # delay slot friendly -.macro m_read8_call16 funcname +.macro m_read8_call16 funcname is_func_ptr=0 +.if \is_func_ptr + lui $t1, %hi(\funcname) + lw $t1, %lo(\funcname)($t1) +.endif andi $t0, $a0, 1 beqz $t0, 1f li $a1, 8 # not always needed, but shouln't cause problems +.if \is_func_ptr + jr $t1 +.else j \funcname # odd address +.endif nop 1: addiu $sp, -4 sw $ra, 0($sp) +.if \is_func_ptr + jalr $t1 +.else jal \funcname +.endif xori $a0, 1 lw $ra, 0($sp) addiu $sp, 4 @@ -463,7 +469,9 @@ m_read8_vdp: andi $t1, $a0, 0xe0 or $t0, $t1 bnez $t0, m_read_null # invalid address - m_read8_call16 PicoVideoRead + nop + j PicoVideoRead8 + nop m_read8_ram: lui $t0, %hi(Pico) @@ -475,7 +483,7 @@ m_read8_ram: m_read8_above_rom: # might still be SRam (Micro Machines, HardBall '95) m_read_rom_try_sram 0 8 - m_read8_call16 OtherRead16End + m_read8_call16 PicoRead16Hook 1 # ############################################################################# @@ -586,7 +594,9 @@ m_read16_ram: m_read16_above_rom: # might still be SRam m_read_rom_try_sram 0 16 - j OtherRead16End + lui $t1, %hi(PicoRead16Hook) + lw $t1, %lo(PicoRead16Hook)($t1) + jr $t1 ins $a0, $0, 0, 1 # ############################################################################# @@ -727,7 +737,25 @@ m_read32_above_rom: # might still be SRam m_read_rom_try_sram 0 32 ins $a0, $0, 0, 1 - m_read32_call16 OtherRead16End + lui $t1, %hi(PicoRead16Hook) + lw $t1, %lo(PicoRead16Hook)($t1) + addiu $sp, -4*3 + sw $ra, 0($sp) + sw $s0, 4($sp) + sw $t1, 8($sp) + jalr $t1 + move $s0, $a0 + + lw $t1, 8($sp) + addu $a0, $s0, 2 + jalr $t1 + move $s0, $v0 + + ins $v0, $s0, 16, 16 + lw $ra, 0($sp) + lw $s0, 4($sp) + jr $ra + addiu $sp, 4*3 # #############################################################################