; DEBUG = 17F60-18370
;
; 17F60-17F70 = CD1 LBA / CD2 LBA / CD3 LBA / CD4 LBA
; 17F70-17F80 = <unused>
; 17F80-18020 = address -> time LBA remap
; 18020-180xx = time -> address LBA remap



;8009a350 : 00651821  ADDU    0000001e (v1), 0000001e (v1), 00000006 (a1),
;8009a354 : 00431021  ADDU    000143bb (v0), 000143bb (v0), 00000024 (v1),
;-->
;8009a358 : 03E00008  JR      800363ec (ra),
;8009a35c : 2442FF6A  ADDIU   000143df (v0), 000143df (v0), ff6a (65386),
;-->


org $80018020

; OLD code
addiu v0,v0,$ff6a

; ========================
; ========================
; ========================
; ========================

; A22AC-A22B3 = DISKNO1 range
lui a0,$a
ori a0,a0,$22ac
sltu a1,v0,a0
beq a1,r0,REMAP_DISKNO
nop

; ignore range (0-1D91E)
lui a0,$1
ori a0,a0,$d91f
sltu a1,v0,a0
bne a1,r0,EXIT
nop

; ########################
; ########################
; ########################

; load CD # (1-4)
lui a0,$800a+1
lbu a1,$c87c(a0)
nop

; remap CD range (1-4 ==> 0-3)
addiu a1,a1,$ffff

; load from LBA table
lui a0,$8001
sll a1,a1,2
addu a0,a0,a1
lw v1,$7f60(a0)
nop

; move v0 to 'zero offset'
subu v0,v0,v1

; move v0 to 'fixed LBA offset'
lui v1,$1
ori v1,v1,$d91f
addu v0,v0,v1


beq r0,r0,EXIT
nop

; ########################
; ########################
; ########################

REMAP_DISKNO:

; move to base address: AA2AC ==> 0 ==> 708
subu v0,v0,a0
addiu v0,v0,$708


; load CD # (1-4)
lui a0,$800a+1
lbu a1,$c87c(a0)
nop

; remap CD range (1-4 ==> 0-3)
addiu a1,a1,$ffff

; 708 / 70A / 70C / 70E ==> 708
subu v0,v0,a1
subu v0,v0,a1


;beq r0,r0,EXIT
;nop

; ======================
; ======================
; ======================
; ======================

EXIT:

jr ra
nop
