Header: Clear past extra header offset (if specified).

Used in e.g. Misty Blue YM2608 version.
1 files changed, 30 insertions(+), 0 deletions(-)

M src/Header.asm
M src/Header.asm +30 -0
@@ 146,6 146,7 @@ Header_Construct:
 	ld hl,Header_noVGMFileError
 	call nz,System_ThrowExceptionWithMessage
 	call Header_ClearPastDataOffset
+	call Header_ClearPastExtraHeaderOffset
 	jr Header_FixPre102
 
 ; ix = this

          
@@ 155,6 156,17 @@ Header_Destruct: equ System_Return
 ; ix = this
 Header_ClearPastDataOffset:
 	call Header_GetDataOffset
+	jr Header_ClearPastOffset
+
+; ix = this
+Header_ClearPastExtraHeaderOffset:
+	call Header_GetExtraHeaderOffset
+	ret z
+	jr Header_ClearPastOffset
+
+; dehl = offset
+; ix = this
+Header_ClearPastOffset:
 	ld a,d
 	or e
 	or h

          
@@ 232,6 244,24 @@ Header_GetGD3Offset:
 	ld de,Header.gd3Offset
 	jr Header_GetRelativeOffset
 
+; ix = this
+; dehl <- extra header offset
+; f <- z: no extra header
+Header_GetExtraHeaderOffset: PROC
+	ld l,(ix + Header.version)
+	ld h,(ix + Header.version + 1)
+	ld bc,-170H
+	add hl,bc
+	jr nc,Pre1_70
+	ld de,Header.extraHeaderOffset
+	jr Header_GetRelativeOffset
+Pre1_70:
+	ld de,0
+	ld hl,0
+	xor a
+	ret
+	ENDP
+
 ; de = header offset
 ; ix = this
 ; dehl <- absolute offset