From 15a0bf120a4564642eb380575054cc5a0793aa98 Mon Sep 17 00:00:00 2001 From: Connor Olding Date: Sat, 29 Sep 2018 07:05:33 +0200 Subject: [PATCH] improve wait macros --- debug.asm | 12 ++++++------ inc/64drive.inc | 2 ++ inc/n64_pi.inc | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/debug.asm b/debug.asm index cc29fc7..04b7a26 100644 --- a/debug.asm +++ b/debug.asm @@ -46,10 +46,10 @@ Drive64Write: // set length (needs to be decremented due to DMA quirk) subiu t3, a3, 1 - PI_WAIT() - sw t1, PI_DRAM_ADDR(t5) - sw t2, PI_CART_ADDR(t5) - sw t3, PI_RD_LEN(t5) // "read" from DRAM to cart + PI_WAIT() // clobbers a0,t0 + sw t1, PI_DRAM_ADDR(a0) + sw t2, PI_CART_ADDR(a0) + sw t3, PI_RD_LEN(a0) // "read" from DRAM to cart PI_WAIT() Drive64WriteDirect: // TODO: rewrite so this takes a0,a1 instead of a2,a3 @@ -66,7 +66,7 @@ Drive64WriteDirect: // TODO: rewrite so this takes a0,a1 instead of a2,a3 lui t9, K_BASE lw t9, K_CI_BASE(t9) - CI_USB_WRITE_WAIT(0x10000) // clobbers t0,v0, requires t9 + CI_USB_WRITE_WAIT(0x10000) // clobbers a0,v0,t0, requires t9 bnez v0, Drive64WriteExit nop @@ -76,7 +76,7 @@ Drive64WriteDirect: // TODO: rewrite so this takes a0,a1 instead of a2,a3 PI_WAIT() sw t1, CI_USB_COMMAND_STATUS(t9) - CI_USB_WRITE_WAIT(0x10000) // clobbers t0,v0, requires t9 + CI_USB_WRITE_WAIT(0x10000) // clobbers a0,v0,t0, requires t9 Drive64WriteExit: jr ra diff --git a/inc/64drive.inc b/inc/64drive.inc index 9f165b9..41591e1 100644 --- a/inc/64drive.inc +++ b/inc/64drive.inc @@ -34,6 +34,7 @@ constant CI_EEPROM($1000) // 2048 bytes constant CI_WRITEBACK_LBA($1800) // 1024 bytes (256 words) macro CI_WAIT() { + // requires t9 to be set to either CI_BASE or CI_BASE_EXTENDED PI_WAIT() - lw t0, CI_STATUS(t9) @@ -43,6 +44,7 @@ macro CI_WAIT() { } macro CI_USB_WRITE_WAIT(timeout) { + // requires t9 to be set to either CI_BASE or CI_BASE_EXTENDED PI_WAIT() if {timeout} > 0 { diff --git a/inc/n64_pi.inc b/inc/n64_pi.inc index aa47ba3..cfd7f15 100644 --- a/inc/n64_pi.inc +++ b/inc/n64_pi.inc @@ -14,9 +14,9 @@ constant PI_BSD_DOM2_PGS($2C) // $0460002C Domain 2 Page Size constant PI_BSD_DOM2_RLS($30) // $04600030 Domain 2 Release macro PI_WAIT() { - lui t5, PI_BASE + lui a0, PI_BASE - - lw t0, PI_STATUS(t5) + lw t0, PI_STATUS(a0) andi t0, t0, 3 bnez t0,- nop