; DEBUG = 10F90-113D0, 113F0-11800
;
; 10F90-10FA0 = CD1 LBA / CD2 LBA / CD3 LBA / CD4 LBA
; 10FA0-10FB0 = DVD5 state / CD #
; 10FB0-11050 = address -> time LBA remap
; 11050-110A0 = address -> time DVD5 remap
; 110A0-11xxx = time -> address LBA remap



;8005ee6c : 00651821  ADDU    00000046 (v1), 00000046 (v1), 00000001 (a1),
;8005ee70 : 00431021  ADDU    00033dfb (v0), 00033dfb (v0), 00000047 (v1),
;-->
;8005ee74 : 03E00008  JR      8001f540 (ra),
;8005ee78 : 2442FF6A  ADDIU   00033e42 (v0), 00033e42 (v0), ff6a (65386),
;-->


org $800110A0

; OLD code

addiu v0,v0,$ff6a

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

; avoid LBA range (0-17)
sltiu a1,v0,$18
bne a1,r0,EXIT
nop


; avoid LBA range (9542E+)
lui a0,$9
ori a0,a0,$542E
sltu a1,v0,a0
beq a1,r0,EXIT
nop


; Remap ROOT-DIR (9542A-9542D)
addiu a0,a0,$fffc
sltu a1,v0,a0
bne a1,r0,REMAP_LBA
nop


; load CD # (0-3)
lui a0,$8001
lbu a1,$0fa4(a0)
nop


; remap to $9542A
beq r0,r0,EXIT
subu v0,v0,a1

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

REMAP_LBA:

; load CD # (0-3)
lui a0,$8001
lbu a1,$0fa4(a0)
nop

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

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

; move v0 to 'fixed LBA offset'
addiu v0,v0,$18




; check for 160+ minutes
lui a0,$8001
lw a0,$1490(a0)
nop
beq a0,r0,EXIT

; re-adjust for 160+ minutes
lui v1,$a
ori v1,v1,$fc80
addu v0,v0,v1

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

; OLD code

EXIT:

jr ra
nop
