2023-03-09 21:35:56 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Proc D_GetSongNameModuleType
|
|
|
|
|
|
|
|
|
|
LEA DI, [SI+17] ; ES:DI points to deposit point.
|
|
|
|
|
Sub SI, 8
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'MPMI'
|
|
|
|
|
JNE D_GetSongNameModuleType1
|
|
|
|
|
|
|
|
|
|
Mov DX, [DS:60000+2Ah]
|
|
|
|
|
Mov AX, 3
|
|
|
|
|
|
|
|
|
|
Cmp DX, TRACKERVERSION
|
|
|
|
|
JA D_GSNMTImpulse1
|
|
|
|
|
|
|
|
|
|
Dec AX
|
|
|
|
|
Cmp DX, 214h
|
|
|
|
|
JB D_GSNMTImpulse1
|
|
|
|
|
|
|
|
|
|
Mov AX, 7
|
|
|
|
|
|
|
|
|
|
D_GSNMTImpulse1:
|
|
|
|
|
Mov Word Ptr [SI+23], AX
|
|
|
|
|
|
|
|
|
|
Mov SI, 60004
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType1:
|
|
|
|
|
; Cmp Word Ptr [DS:60028], 101Ah
|
|
|
|
|
; JNE D_GetSongNameModuleType2
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [DS:60044], 'MRCS'
|
|
|
|
|
JNE D_GetSongNameModuleType2
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 4
|
|
|
|
|
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType2:
|
|
|
|
|
Push SI ES DI
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop ES
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
Mov DI, Offset XMIdentification
|
|
|
|
|
Mov CX, 17
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
|
|
|
|
|
Pop DI ES SI
|
|
|
|
|
JNE D_GetSongNameModuleTypeNotXM
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 5 ; XM
|
|
|
|
|
|
|
|
|
|
Mov SI, 60000+17
|
|
|
|
|
Mov CX, 20
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
; Mov CX, 5
|
|
|
|
|
; Rep StosB
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleTypeNotXM:
|
|
|
|
|
Mov AX, [DS:60000]
|
|
|
|
|
Cmp AX, 'fi'
|
|
|
|
|
JE D_GetSongNameModuleType669
|
|
|
|
|
Cmp AX, 'NJ'
|
|
|
|
|
JNE D_GetSongNameModuleTypeNot669
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType669: ; We have a 669 module!
|
|
|
|
|
Mov Word Ptr [SI+23], 6 ; 669
|
|
|
|
|
Mov SI, 60000+2
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleTypeNot669:
|
|
|
|
|
Mov EAX, [DS:61080]
|
|
|
|
|
|
|
|
|
|
Cmp EAX, '.K.M'
|
|
|
|
|
JNE D_GetSongNameModuleType3
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 9
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType3:
|
|
|
|
|
Cmp EAX, '!K!M'
|
|
|
|
|
JNE D_GetSongNameModuleType4
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 10
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType4:
|
|
|
|
|
Cmp EAX, 'NHC4'
|
|
|
|
|
JNE D_GetSongNameModuleType5
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 11
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType5:
|
|
|
|
|
Cmp EAX, 'NHC6'
|
|
|
|
|
JNE D_GetSongNameModuleType6
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 12
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType6:
|
|
|
|
|
Cmp EAX, 'NHC8'
|
|
|
|
|
JNE D_GetSongNameModuleType11
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 13
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType11:
|
|
|
|
|
Cmp Word Ptr [DS:61082], 'HC'
|
|
|
|
|
JNE D_GetSongNameModuleType7
|
|
|
|
|
Cmp AL, '0'
|
|
|
|
|
JB D_GetSongNameModuleType7
|
|
|
|
|
Cmp AL, '9'
|
|
|
|
|
JA D_GetSongNameModuleType7
|
|
|
|
|
Cmp AH, '0'
|
|
|
|
|
JB D_GetSongNameModuleType7
|
|
|
|
|
Cmp AH, '9'
|
|
|
|
|
JA D_GetSongNameModuleType7
|
|
|
|
|
|
|
|
|
|
; Generic MOD type.
|
|
|
|
|
Sub AX, '00'
|
|
|
|
|
Mov BL, AH
|
|
|
|
|
Mov AH, 10
|
|
|
|
|
Mul AH
|
|
|
|
|
Add BL, AL
|
|
|
|
|
Mov Word Ptr [SI+23], 17
|
|
|
|
|
Mov Byte Ptr [SI+22], BL
|
|
|
|
|
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType7:
|
|
|
|
|
Cmp EAX, '4TLF'
|
|
|
|
|
JNE D_GetSongNameModuleType8
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 14
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType8:
|
|
|
|
|
; Cmp EAX, '8TLF'
|
|
|
|
|
; JNE D_GetSongNameModuleType9
|
|
|
|
|
;
|
|
|
|
|
; Mov Word Ptr [SI+23], 15
|
|
|
|
|
; Jmp D_GSNMTMod
|
|
|
|
|
;
|
|
|
|
|
; D_GetSongNameModuleType9:
|
|
|
|
|
Cmp Byte Ptr [DS:60000+471], 78h
|
|
|
|
|
JNE D_GetSongNameModuleType10
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 16
|
|
|
|
|
Jmp D_GSNMTMod
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType10:
|
|
|
|
|
Cmp Word Ptr [DS:60000], 'M'+256*'T'
|
|
|
|
|
JNE D_GetSongNameModuleType12
|
|
|
|
|
Cmp Byte Ptr [DS:60002], 'M'
|
|
|
|
|
JNE D_GetSongNameModuleType12
|
|
|
|
|
|
|
|
|
|
Mov Word Ptr [SI+23], 18
|
|
|
|
|
|
|
|
|
|
Mov SI, 60004
|
|
|
|
|
Mov CX, 20
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Mov CX, 5
|
|
|
|
|
Xor AL, AL
|
|
|
|
|
Rep StosB
|
|
|
|
|
|
|
|
|
|
D_GetSongNameModuleType12:
|
|
|
|
|
Mov Word Ptr [SI+23], 1
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GSNMTMod:
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
Mov CX, 20
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosB
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
EndP D_GetSongNameModuleType
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
Proc D_GetInstrumentInfo ; Instrument layout
|
|
|
|
|
; 48 bytes per instrument.
|
|
|
|
|
; Offset 0 = type of file.
|
|
|
|
|
; 0 = Unchecked
|
|
|
|
|
; 1 = Directory
|
|
|
|
|
; 2 = Unrecognised
|
|
|
|
|
; 3 = ITI
|
|
|
|
|
; 4 = XI
|
|
|
|
|
; 8 = .IT
|
|
|
|
|
; 9 = .XM
|
|
|
|
|
; Offset 1 = file name
|
|
|
|
|
; 15->40 is the instrument name,
|
|
|
|
|
; 40 = No. Samples
|
|
|
|
|
; 42 = File size.
|
|
|
|
|
; 44 = file offset (DWord)
|
|
|
|
|
|
|
|
|
|
Mov AX, 48
|
|
|
|
|
Mul BX
|
|
|
|
|
Mov DI, AX
|
|
|
|
|
|
|
|
|
|
Mov DS, CS:DiskDataArea
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
|
|
|
|
|
; Check for XM
|
|
|
|
|
Push CS
|
|
|
|
|
Pop ES
|
|
|
|
|
|
|
|
|
|
; Comment ~
|
|
|
|
|
|
|
|
|
|
Push DI
|
|
|
|
|
Mov DI, Offset XMIdentification
|
|
|
|
|
Mov CX, 17
|
|
|
|
|
RepE CmpSB
|
|
|
|
|
Pop DI
|
|
|
|
|
|
|
|
|
|
Mov AL, 9
|
|
|
|
|
JE D_InModuleInstrument ; XM module found?
|
|
|
|
|
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [SI], 'MPMI' ; Impulse Tracker module?
|
|
|
|
|
JNE D_GetInstrumentInfoNotIT
|
|
|
|
|
Cmp Word Ptr [SI+22h], 0
|
|
|
|
|
JE D_GetInstrumentInfoNotIT
|
|
|
|
|
Test Byte Ptr [SI+2Ch], 4 ; Instrument mode?
|
|
|
|
|
JZ D_GetInstrumentInfoNotIT
|
|
|
|
|
|
|
|
|
|
Mov AL, 8
|
|
|
|
|
|
|
|
|
|
D_InModuleInstrument:
|
|
|
|
|
Push DS
|
|
|
|
|
Pop ES
|
|
|
|
|
|
|
|
|
|
StosB
|
|
|
|
|
Add DI, 14
|
|
|
|
|
Push CS
|
|
|
|
|
Pop DS
|
|
|
|
|
Mov SI, Offset LibraryMsg
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfoNotIT:
|
|
|
|
|
; ~
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [SI], 'IPMI'
|
|
|
|
|
JNE D_GetInstrumentInfo1
|
|
|
|
|
|
|
|
|
|
Push DS
|
|
|
|
|
Pop ES
|
|
|
|
|
Mov Byte Ptr [DI], 3
|
|
|
|
|
|
|
|
|
|
Mov AL, [SI+1Eh]
|
|
|
|
|
Xor AH, AH
|
|
|
|
|
|
|
|
|
|
Add DI, 15
|
|
|
|
|
Add SI, 20h
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
StosW ; NOS.
|
|
|
|
|
|
|
|
|
|
ClC
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfo1: ; Check for XI
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Mov DI, Offset XIIdentification
|
|
|
|
|
Mov CX, 21
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
|
|
|
|
|
Pop DI
|
|
|
|
|
JNE D_GetInstrumentInfo2
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfoXI:
|
|
|
|
|
Push DS
|
|
|
|
|
Pop ES
|
|
|
|
|
|
|
|
|
|
Mov Byte Ptr [DI], 4 ; XI
|
|
|
|
|
Add DI, 15
|
|
|
|
|
Mov CX, 22
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosB
|
|
|
|
|
Mov AX, [DS:60000+128h] ; AX = number of samples
|
|
|
|
|
StosW ; NoS
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfo2:
|
|
|
|
|
Push DS
|
|
|
|
|
Pop ES
|
|
|
|
|
|
|
|
|
|
Mov SI, DI
|
|
|
|
|
Mov CX, 48
|
|
|
|
|
Mov AX, CS:NumInstruments
|
|
|
|
|
Sub AX, BX
|
|
|
|
|
Add SI, CX
|
|
|
|
|
Mul CX
|
|
|
|
|
Mov CX, AX
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop DS
|
|
|
|
|
Assume DS:Disk
|
|
|
|
|
|
|
|
|
|
Dec NumInstruments
|
|
|
|
|
|
|
|
|
|
Mov AX, CurrentInstrument
|
|
|
|
|
Cmp AX, NumInstruments
|
|
|
|
|
JAE D_GetInstrumentInfo3
|
|
|
|
|
|
|
|
|
|
Cmp AX, BX
|
|
|
|
|
JBE D_GetInstrumentInfoEnd
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfo3:
|
|
|
|
|
Sub AX, 1
|
|
|
|
|
AdC AX, 0
|
|
|
|
|
|
|
|
|
|
D_GetInstrumentInfoEnd:
|
|
|
|
|
Mov CurrentInstrument, AX
|
|
|
|
|
|
|
|
|
|
StC
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
EndP D_GetInstrumentInfo
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
Proc D_GetSampleInfo ; BX = sample num.
|
|
|
|
|
|
|
|
|
|
Mov AX, 96
|
|
|
|
|
Mul BX
|
|
|
|
|
Mov DI, AX
|
|
|
|
|
Mov BX, AX
|
|
|
|
|
Mov DS, CS:DiskDataArea
|
|
|
|
|
Mov SI, 60000
|
|
|
|
|
Push DS
|
|
|
|
|
Pop ES ; ES:DI points to sample block
|
|
|
|
|
; DS:SI points to header
|
|
|
|
|
|
|
|
|
|
Mov Byte Ptr [BX+90], 2 ; Recognised sample default.
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'SPMI'
|
|
|
|
|
JE D_GetSampleInfo1 ; Possibly a IT sample.
|
|
|
|
|
Cmp DWord Ptr [DS:60000+4Ch], 'SRCS'
|
|
|
|
|
JE D_GetSampleInfo4
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'FFIR'
|
|
|
|
|
JE D_GetSampleInfo8 ; AIFF?
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'MROF'
|
|
|
|
|
JE D_GetSampleInfo13
|
|
|
|
|
|
|
|
|
|
Mov AL, 21h
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'MPMI'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Mov AL, 23h
|
|
|
|
|
Cmp DWord Ptr [DS:60000+44], 'FMTP'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Inc AX ; AL = 24h
|
|
|
|
|
Mov ECX, [DS:60000]
|
|
|
|
|
And ECX, 0FFFFFFh
|
|
|
|
|
Cmp ECX, 'M'*10000h+'T'*100h+'M'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Inc AX ; AL = 25h
|
|
|
|
|
Cmp Word Ptr [DS:60000], 'fi'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
Cmp Word Ptr [DS:60000], 'NJ'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Inc AX ; AL = 26h
|
|
|
|
|
Cmp DWord Ptr [DS:60000], '<27>RAF'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Mov ECX, [DS:60000+1080]
|
|
|
|
|
Mov AX, 427h ; MOD Module + 4 channels
|
|
|
|
|
Cmp ECX, '.K.M'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
Cmp ECX, '!K!M'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
Cmp ECX, '4TLF'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
Cmp ECX, 'NHC4'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Mov AH, 6 ; 6 Channel
|
|
|
|
|
Cmp ECX, 'NHC6'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Mov AH, 8
|
|
|
|
|
Cmp ECX, 'NHC8'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
Cmp ECX, '8TLF'
|
|
|
|
|
JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
Cmp Word Ptr [DS:61082], 'HC'
|
|
|
|
|
JNE D_GetSampleInfoS3M
|
|
|
|
|
|
|
|
|
|
Sub CX, '00'
|
|
|
|
|
Cmp CL, 9
|
|
|
|
|
JA D_GetSampleInfoS3M
|
|
|
|
|
Cmp CH, 9
|
|
|
|
|
JA D_GetSampleInfoS3M
|
|
|
|
|
Mov AL, 10
|
|
|
|
|
Mul CL
|
|
|
|
|
Add AL, CH
|
|
|
|
|
Mov AH, AL
|
|
|
|
|
Mov AL, 28h
|
|
|
|
|
Jmp D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoS3M:
|
|
|
|
|
Cmp DWord Ptr [DS:60000+2Ch], 'MRCS'
|
|
|
|
|
JNE D_GetSampleInfoModuleTypes3
|
|
|
|
|
|
|
|
|
|
Mov AL, 20h ; ST3?
|
|
|
|
|
Jmp D_GetSampleInfoModuleTypes1
|
|
|
|
|
; Cmp Word Ptr [DS:60000+1Ch], 101Ah
|
|
|
|
|
; JE D_GetSampleInfoModuleTypes1
|
|
|
|
|
; Jmp D_GetSampleInfoModuleTypes3
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoModuleTypes3: ; KRZ
|
|
|
|
|
Cmp DWord Ptr [DS:60000], 'MARP'
|
|
|
|
|
JNE D_GetSampleInfoNotKRZ
|
|
|
|
|
|
|
|
|
|
Cmp Word Ptr [DS:60000+32], 0FFFFh
|
|
|
|
|
JNE D_GetSampleInfoNotKRZ
|
|
|
|
|
|
|
|
|
|
; Check filename for .KRZ
|
|
|
|
|
|
|
|
|
|
LEA SI, [BX+4]
|
|
|
|
|
Mov CX, 9
|
|
|
|
|
|
|
|
|
|
D_CheckKRZFileName:
|
|
|
|
|
Cmp Byte Ptr [SI], 0
|
|
|
|
|
JE D_GetSampleInfoNotKRZ
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [SI], 'ZRK.'
|
|
|
|
|
JE D_FoundKRZ
|
|
|
|
|
|
|
|
|
|
Inc SI
|
|
|
|
|
Loop D_CheckKRZFileName
|
|
|
|
|
Jmp D_GetSampleInfoNotKRZ
|
|
|
|
|
|
|
|
|
|
D_FoundKRZ:
|
|
|
|
|
Mov AL, 29h
|
|
|
|
|
Jmp D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoNotKRZ: ; FT2 check
|
|
|
|
|
Push SI
|
|
|
|
|
Push ES
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop ES
|
|
|
|
|
Mov DI, Offset GUSPATIdentification
|
|
|
|
|
Mov CX, 22
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
|
|
|
|
|
Pop DI
|
|
|
|
|
Pop ES
|
|
|
|
|
Pop SI
|
|
|
|
|
JNE D_GetSampleInfoNotPAT
|
|
|
|
|
|
|
|
|
|
Cmp Byte Ptr [DS:60000+198], 1
|
|
|
|
|
JE G_GetSampleInfoPAT
|
|
|
|
|
|
|
|
|
|
Mov AL, 2Ah
|
|
|
|
|
Jmp D_GetSampleInfoModuleTypes1
|
|
|
|
|
|
|
|
|
|
G_GetSampleInfoPAT:
|
|
|
|
|
Mov Byte Ptr [BX+88], 16
|
|
|
|
|
|
|
|
|
|
Mov EAX, 'SPMI'
|
|
|
|
|
StosD
|
|
|
|
|
Mov SI, DI
|
|
|
|
|
Add DI, 13
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Global vol = 64
|
|
|
|
|
|
|
|
|
|
Mov AX, 4001h ; sample present
|
|
|
|
|
Mov DL, [DS:60000+239+55] ; modes
|
|
|
|
|
|
|
|
|
|
Test DL, 1 ; 8/16 bit
|
|
|
|
|
JZ GetSampleInfoPATSamples2
|
|
|
|
|
|
|
|
|
|
Or AL, 2
|
|
|
|
|
|
|
|
|
|
GetSampleInfoPATSamples2:
|
|
|
|
|
Test DL, 4 ; Looping enabled?
|
|
|
|
|
JZ GetSampleInfoPATSamples3
|
|
|
|
|
|
|
|
|
|
Or AL, 10h
|
|
|
|
|
|
|
|
|
|
GetSampleInfoPATSamples3:
|
|
|
|
|
Test DL, 8 ; Ping pong loops?
|
|
|
|
|
JZ GetSampleInfoPATSamples4
|
|
|
|
|
|
|
|
|
|
Or AL, 40h
|
|
|
|
|
|
|
|
|
|
GetSampleInfoPATSamples4:
|
|
|
|
|
StosW ; OK.. now for name.
|
|
|
|
|
|
|
|
|
|
Mov SI, 60000+131
|
|
|
|
|
Mov CX, 16
|
|
|
|
|
|
|
|
|
|
GetSampleInfoPATSamples5:
|
|
|
|
|
LodsB
|
|
|
|
|
Test AL, AL
|
|
|
|
|
JZ GetSampleInfoPATSamples6
|
|
|
|
|
StosB
|
|
|
|
|
Loop GetSampleInfoPATSamples5
|
|
|
|
|
|
|
|
|
|
Xor AL, AL
|
|
|
|
|
|
|
|
|
|
GetSampleInfoPATSamples6:
|
|
|
|
|
Add CX, 10
|
|
|
|
|
Rep StosB
|
|
|
|
|
|
|
|
|
|
; Convert, default pan
|
|
|
|
|
|
|
|
|
|
Mov AH, 32
|
|
|
|
|
Mov AL, [DS:60000+239+55]
|
|
|
|
|
And AL, 2
|
|
|
|
|
ShR AL, 1
|
|
|
|
|
Xor AL, 1
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
; Length.
|
|
|
|
|
|
|
|
|
|
Mov DL, [DS:60000+239+55]
|
|
|
|
|
|
|
|
|
|
Mov EAX, [DS:60000+239+16] ; LoopEnd -> FileSize
|
|
|
|
|
Mov [DI+20h], EAX ; File size
|
|
|
|
|
Call StorePATLength
|
|
|
|
|
|
|
|
|
|
Mov EAX, [DS:60000+239+12] ; LoopBeg
|
|
|
|
|
Call StorePATLength
|
|
|
|
|
Mov EAX, [DS:60000+239+16] ; LoopEnd
|
|
|
|
|
Call StorePATLength
|
|
|
|
|
|
|
|
|
|
Mov AX, [DS:60000+239+20]
|
|
|
|
|
And EAX, 0FFFFh
|
|
|
|
|
|
|
|
|
|
Comment ~
|
|
|
|
|
Push ES DI
|
|
|
|
|
|
|
|
|
|
Call Music_GetPitchTable ; Returns ES:DI
|
|
|
|
|
Mov BP, [DS:60000+239+56]
|
|
|
|
|
And BP, 0FFh
|
|
|
|
|
ShL BP, 2
|
|
|
|
|
Mul DWord Ptr [ES:DI+BP]
|
|
|
|
|
SHRD EAX, EDX, 16
|
|
|
|
|
|
|
|
|
|
Pop DI ES
|
|
|
|
|
~
|
|
|
|
|
StosD ; C5Spd
|
|
|
|
|
|
|
|
|
|
Xor EAX, EAX
|
|
|
|
|
StosD
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Mov EAX, 14Fh
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoNotPAT:
|
|
|
|
|
Push SI
|
|
|
|
|
Push ES
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop ES
|
|
|
|
|
Mov DI, Offset XMIdentification
|
|
|
|
|
Mov CX, 17
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
|
|
|
|
|
Pop DI
|
|
|
|
|
Pop ES
|
|
|
|
|
Pop SI
|
|
|
|
|
JNE TXWaveSampleIdentification
|
|
|
|
|
|
|
|
|
|
Mov AL, 22h ; FT2
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoModuleTypes1:
|
|
|
|
|
Mov Word Ptr [BX+88], AX
|
|
|
|
|
Mov Byte Ptr [BX+90], 1
|
|
|
|
|
|
|
|
|
|
Push DS
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop DS
|
|
|
|
|
|
|
|
|
|
Mov SI, Offset LibraryMsg
|
|
|
|
|
LEA DI, [BX+14h]
|
|
|
|
|
Mov CX, 26/2
|
|
|
|
|
Rep MovsW
|
|
|
|
|
|
|
|
|
|
Pop DS
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
TXWaveSampleIdentification:
|
|
|
|
|
Push SI
|
|
|
|
|
Push ES
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop ES
|
|
|
|
|
Mov DI, Offset TXWaveIdentification
|
|
|
|
|
Mov CX, 16
|
|
|
|
|
RepE CmpSB
|
|
|
|
|
|
|
|
|
|
Pop DI
|
|
|
|
|
Pop ES
|
|
|
|
|
Pop SI
|
|
|
|
|
; OK.. have a TX Wave.
|
|
|
|
|
; Now to transfer data.
|
|
|
|
|
JNE D_GetSampleInfo2
|
|
|
|
|
|
|
|
|
|
Mov AL, [DS:60000+16h]
|
|
|
|
|
And AL, 7Fh
|
|
|
|
|
Cmp AL, 49h
|
|
|
|
|
JNE D_GetSampleInfo2
|
|
|
|
|
|
|
|
|
|
Mov Byte Ptr [BX+88], 13
|
|
|
|
|
|
|
|
|
|
Mov EAX, 'SPMI'
|
|
|
|
|
StosD
|
|
|
|
|
Mov SI, DI
|
|
|
|
|
Add DI, 13
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Global vol = 64
|
|
|
|
|
|
|
|
|
|
Mov AX, 64*256+1+2 ; Flag = sample + 16 bit
|
|
|
|
|
; Default volume = 64
|
|
|
|
|
Cmp Byte Ptr [DS:60000+16h], 049h
|
|
|
|
|
JNE D_GetTXInfo3
|
|
|
|
|
|
|
|
|
|
Or AL, 10h ; Loop forwards
|
|
|
|
|
|
|
|
|
|
D_GetTXInfo3:
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Mov CX, 13
|
|
|
|
|
|
|
|
|
|
D_GetTXInfo1:
|
|
|
|
|
LodsB
|
|
|
|
|
Test AL, AL
|
|
|
|
|
JZ D_GetTXInfo2
|
|
|
|
|
|
|
|
|
|
StosB
|
|
|
|
|
Loop D_GetTXInfo1
|
|
|
|
|
|
|
|
|
|
D_GetTXInfo2:
|
|
|
|
|
Xor AL, AL
|
|
|
|
|
Rep StosB
|
|
|
|
|
|
|
|
|
|
Mov CX, 13
|
|
|
|
|
Rep StosB
|
|
|
|
|
; Length...
|
|
|
|
|
Mov AX, 16+1 ; TX Wave, signed
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Mov EDX, [DS:60000+18h]
|
|
|
|
|
Mov ECX, [DS:60000+1Bh]
|
|
|
|
|
And EDX, 1FFFFh ; Attack length
|
|
|
|
|
And ECX, 1FFFFh ; Loop Length
|
|
|
|
|
|
|
|
|
|
Mov EAX, ECX
|
|
|
|
|
Add EAX, EDX ; Length
|
|
|
|
|
StosD
|
|
|
|
|
Mov EAX, EDX ; LoopStart
|
|
|
|
|
StosD
|
|
|
|
|
Add EAX, ECX ; LoopEnd
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Mov EAX, 33000 ; Freq
|
|
|
|
|
Cmp Byte Ptr [DS:60000+17h], 2
|
|
|
|
|
JB D_GetTXInfo4
|
|
|
|
|
|
|
|
|
|
Mov AX, 50000
|
|
|
|
|
JE D_GetTXInfo4
|
|
|
|
|
|
|
|
|
|
Mov AX, 16000
|
|
|
|
|
|
|
|
|
|
D_GetTXInfo4:
|
|
|
|
|
StosD ; Frequency
|
|
|
|
|
Xor EAX, EAX
|
|
|
|
|
StosD
|
|
|
|
|
StosD
|
|
|
|
|
Mov AX, 20h
|
|
|
|
|
StosD
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo2:
|
|
|
|
|
Mov DWord Ptr [BX+88], 30004h ; Unknown Type
|
|
|
|
|
|
|
|
|
|
Mov EAX, 'SPMI'
|
|
|
|
|
StosD
|
|
|
|
|
Mov SI, DI
|
|
|
|
|
Add DI, 13
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Global vol = 64
|
|
|
|
|
Mov AL, 1
|
|
|
|
|
StosB ; Flag = sample.
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Default vol = 64.
|
|
|
|
|
|
|
|
|
|
Mov CX, 13
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo6:
|
|
|
|
|
LodsB
|
|
|
|
|
Test AL, AL
|
|
|
|
|
JZ D_GetSampleInfo7
|
|
|
|
|
|
|
|
|
|
StosB
|
|
|
|
|
Loop D_GetSampleInfo6
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo7:
|
|
|
|
|
Xor AL, AL
|
|
|
|
|
Rep StosB
|
|
|
|
|
|
|
|
|
|
Mov CX, 15
|
|
|
|
|
Rep StosB
|
|
|
|
|
; Length...
|
|
|
|
|
Mov EAX, 4177910
|
|
|
|
|
|
|
|
|
|
Cmp EAX, [BX+80]
|
|
|
|
|
JB D_GetSampleInfo3
|
|
|
|
|
|
|
|
|
|
Mov EAX, [BX+80]
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo3:
|
|
|
|
|
StosD
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
Mov AX, 8363
|
|
|
|
|
StosW
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
Mov CX, 9
|
|
|
|
|
Rep StosW
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo1:
|
|
|
|
|
Mov Byte Ptr [BX+88], 2
|
|
|
|
|
|
|
|
|
|
Mov CX, 4
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Add SI, 12
|
|
|
|
|
Add DI, 12
|
|
|
|
|
Mov CX, 64
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo4:
|
|
|
|
|
Mov Byte Ptr [BX+88], 3 ; Scrm
|
|
|
|
|
|
|
|
|
|
Mov EAX, 'SPMI'
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Add DI, 13
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB
|
|
|
|
|
|
|
|
|
|
Mov AL, 1
|
|
|
|
|
Mov CL, [DS:60000+1Fh]
|
|
|
|
|
Mov CH, CL
|
|
|
|
|
|
|
|
|
|
And CL, 1
|
|
|
|
|
ShL CL, 4
|
|
|
|
|
Or AL, CL ; Loop...
|
|
|
|
|
|
|
|
|
|
And CH, 4
|
|
|
|
|
ShR CH, 1
|
|
|
|
|
Or AL, CH ; 16 bit.
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo5:
|
|
|
|
|
StosB
|
|
|
|
|
Mov AL, [DS:60000+1Ch]
|
|
|
|
|
StosB
|
|
|
|
|
Mov SI, 60000+30h
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
Rep MovsB
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosB
|
|
|
|
|
StosW ; Name done... now for length
|
|
|
|
|
|
|
|
|
|
Mov EAX, [DS:60000+10h]
|
|
|
|
|
StosD
|
|
|
|
|
Mov EAX, [DS:60000+14h]
|
|
|
|
|
StosD
|
|
|
|
|
Mov EAX, [DS:60000+18h]
|
|
|
|
|
StosD
|
|
|
|
|
Mov EAX, [DS:60000+20h] ; C5Spd
|
|
|
|
|
StosD
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
; Now for sample pointer.
|
|
|
|
|
Mov CL, 4
|
|
|
|
|
Mov AX, [DS:60000+0Eh]
|
|
|
|
|
Mov DL, [DS:60000+0Fh]
|
|
|
|
|
Mov DH, [DS:60000+0Dh]
|
|
|
|
|
ShL AX, CL
|
|
|
|
|
ShR DX, CL
|
|
|
|
|
StosW ; Sample pointer in file.
|
|
|
|
|
Mov AX, DX
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Xor AX, AX ; Vibrato info
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo8: ; WAV Identification
|
|
|
|
|
Push SI
|
|
|
|
|
Push DI
|
|
|
|
|
Push DS
|
|
|
|
|
|
|
|
|
|
Push CS
|
|
|
|
|
Pop DS
|
|
|
|
|
Mov SI, Offset WAVEfmtID
|
|
|
|
|
Mov DI, 60008
|
|
|
|
|
Mov CX, 8
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
JNE NotWAV
|
|
|
|
|
|
|
|
|
|
Add DI, 2
|
|
|
|
|
Mov CX, 4
|
|
|
|
|
RepE CmpsB
|
|
|
|
|
|
|
|
|
|
NotWAV:
|
|
|
|
|
Pop DS
|
|
|
|
|
|
|
|
|
|
JNE D_GetSampleInfo9
|
|
|
|
|
|
|
|
|
|
Mov BP, 60000+18h
|
|
|
|
|
Add BP, [DS:60000+10h]
|
|
|
|
|
Mov CX, 3 ; Only allow 3 blocks
|
|
|
|
|
|
|
|
|
|
CheckNextWAVE:
|
|
|
|
|
Cmp DWord Ptr [DS:BP-4], 'atad'
|
|
|
|
|
JE D_GetSampleWaveFound
|
|
|
|
|
|
|
|
|
|
Mov AX, [DS:BP]
|
|
|
|
|
Add AX, 8
|
|
|
|
|
Add BP, AX
|
|
|
|
|
JC D_GetSampleInfo9
|
|
|
|
|
|
|
|
|
|
Loop CheckNextWAVE
|
|
|
|
|
Jmp D_GetSampleInfo9
|
|
|
|
|
|
|
|
|
|
D_GetSampleWaveFound:
|
|
|
|
|
Mov DL, [DS:60000+22h] ; DL = number of bits.
|
|
|
|
|
Mov DH, 1
|
|
|
|
|
Cmp DL, 8
|
|
|
|
|
JE D_GetSampleInfo9
|
|
|
|
|
|
|
|
|
|
Mov DH, 3
|
|
|
|
|
Cmp DL, 16
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo9:
|
|
|
|
|
Pop DI
|
|
|
|
|
Pop SI
|
|
|
|
|
JNE D_GetSampleInfo2
|
|
|
|
|
; We have a WAV file!
|
|
|
|
|
Cmp Word Ptr [DS:60000+16h], 2
|
|
|
|
|
JNE D_GetSampleWAVStereo
|
|
|
|
|
|
|
|
|
|
Or DH, 4
|
|
|
|
|
|
|
|
|
|
D_GetSampleWAVStereo:
|
|
|
|
|
Mov AL, DH
|
|
|
|
|
And AL, 3
|
|
|
|
|
Add AL, 4
|
|
|
|
|
Mov Byte Ptr [BX+88], AL ; 5 = 8 bit, 7 = 16 bit.
|
|
|
|
|
|
|
|
|
|
Mov EAX, 'SPMI'
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Mov SI, DI
|
|
|
|
|
Add DI, 13
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Global vol = 64
|
|
|
|
|
Mov AL, DH
|
|
|
|
|
StosB ; Flag = sample.
|
|
|
|
|
Mov AL, 64
|
|
|
|
|
StosB ; Default vol = 64.
|
|
|
|
|
|
|
|
|
|
Mov CX, 13
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo10:
|
|
|
|
|
LodsB
|
|
|
|
|
And AL, AL
|
|
|
|
|
JZ D_GetSampleInfo11
|
|
|
|
|
|
|
|
|
|
StosB
|
|
|
|
|
Loop D_GetSampleInfo10
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo11:
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
Add CX, 13
|
|
|
|
|
Rep StosB
|
|
|
|
|
|
|
|
|
|
Mov AL, DH
|
|
|
|
|
And AL, 4 ; stereo?
|
|
|
|
|
ShL AL, 3
|
|
|
|
|
|
|
|
|
|
Test DH, 2
|
|
|
|
|
JZ D_GetSampleInfo19
|
|
|
|
|
|
|
|
|
|
Inc AX
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo19:
|
|
|
|
|
StosW ; Sample format
|
|
|
|
|
|
|
|
|
|
Mov EAX, 4177910 ; Length
|
|
|
|
|
|
|
|
|
|
Cmp EAX, [DS:BP]
|
|
|
|
|
JB D_GetSampleInfo12
|
|
|
|
|
|
|
|
|
|
Mov EAX, [DS:BP]
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo12:
|
|
|
|
|
Test DH, 2
|
|
|
|
|
JZ D_GetSampleInfo18
|
|
|
|
|
|
|
|
|
|
ShR EAX, 1
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo18:
|
|
|
|
|
Test DH, 4
|
|
|
|
|
JZ D_GetSampleWAVStereo2
|
|
|
|
|
|
|
|
|
|
ShR EAX, 1
|
|
|
|
|
|
|
|
|
|
D_GetSampleWAVStereo2:
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Mov AX, [DS:60000+18h] ; Frequency
|
|
|
|
|
StosW
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
Mov CX, 5
|
|
|
|
|
Rep StosW
|
|
|
|
|
Mov AX, BP
|
|
|
|
|
Add AX, 4-60000
|
|
|
|
|
; Mov AX, 2Ch
|
|
|
|
|
StosW
|
|
|
|
|
Xor AX, AX
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
StosW
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo13: ; AIFF Identification
|
|
|
|
|
Mov AL, 3
|
|
|
|
|
Cmp DWord Ptr [DS:60000+8], 'VS61'
|
|
|
|
|
JE D_GetSampleInfoIFF
|
|
|
|
|
|
|
|
|
|
Mov AL, 1
|
|
|
|
|
Cmp DWord Ptr [DS:60000+8], 'XVS8'
|
|
|
|
|
JNE D_GetSampleInfo2
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFF:
|
|
|
|
|
Mov Byte Ptr [BX+88], 17 ; AIFF format.
|
|
|
|
|
Mov Byte Ptr [BX+12h], AL
|
|
|
|
|
Mov SI, 60000 + 0Ch
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFF1:
|
|
|
|
|
Cmp DWord Ptr [DS:SI], 'EMAN'
|
|
|
|
|
JE D_GetSampleInfoIFFName
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [DS:SI], 'RDHV'
|
|
|
|
|
JE D_GetSampleInfoIFFHeader
|
|
|
|
|
|
|
|
|
|
Cmp DWord Ptr [DS:SI], 'YDOB'
|
|
|
|
|
JNE D_IFFHeaderNext
|
|
|
|
|
|
|
|
|
|
; Body.
|
|
|
|
|
Mov DWord Ptr [DI], 'SPMI'
|
|
|
|
|
Mov Byte Ptr [DI+11h], 64 ; Global volume
|
|
|
|
|
Mov Byte Ptr [DI+13h], 64 ; Default volume
|
|
|
|
|
Mov Word Ptr [DI+2Eh], 1 ; Sign conversion
|
|
|
|
|
|
|
|
|
|
Add DI, 30h
|
|
|
|
|
Mov AX, [SI+06h] ; Size
|
|
|
|
|
Mov DX, [SI+04h]
|
|
|
|
|
Call Near Ptr D_GetSampleInfoBSwap
|
|
|
|
|
StosD
|
|
|
|
|
Xor EAX, EAX
|
|
|
|
|
Add DI, 0Ch
|
|
|
|
|
StosD
|
|
|
|
|
StosD
|
|
|
|
|
StosD
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Add SI, 8-60000
|
|
|
|
|
Mov [BX+48h], SI
|
|
|
|
|
|
|
|
|
|
Ret
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFFName:
|
|
|
|
|
Push SI
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Mov CX, [SI+6]
|
|
|
|
|
XChg CL, CH
|
|
|
|
|
Cmp CX, 25
|
|
|
|
|
JBE D_GetSampleInfoIFFName1
|
|
|
|
|
|
|
|
|
|
Mov CX, 25
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFFName1:
|
|
|
|
|
Add SI, 8
|
|
|
|
|
Add DI, 14h
|
|
|
|
|
Rep MovsB
|
|
|
|
|
|
|
|
|
|
D_IFFHeaderEnd:
|
|
|
|
|
Pop DI
|
|
|
|
|
Pop SI
|
|
|
|
|
|
|
|
|
|
D_IFFHeaderNext:
|
|
|
|
|
Mov AX, [SI+6]
|
|
|
|
|
XChg AL, AH
|
|
|
|
|
Add AX, 8
|
|
|
|
|
Add SI, AX
|
|
|
|
|
JC D_GetSampleInfo2
|
|
|
|
|
|
|
|
|
|
Jmp D_GetSampleInfoIFF1
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFFHeader:
|
|
|
|
|
Push SI
|
|
|
|
|
Push DI
|
|
|
|
|
|
|
|
|
|
Add DI, 34h
|
|
|
|
|
|
|
|
|
|
Mov AX, [SI+0Eh] ; Loop start
|
|
|
|
|
Mov DX, [SI+0Ch]
|
|
|
|
|
Call Near Ptr D_GetSampleInfoBSwap
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Push EAX
|
|
|
|
|
Mov AX, [SI+12h] ; Loop end
|
|
|
|
|
Mov DX, [SI+10h]
|
|
|
|
|
Call Near Ptr D_GetSampleInfoBSwap
|
|
|
|
|
Test EAX, EAX
|
|
|
|
|
JZ D_GetSampleInfoIFFHeader1
|
|
|
|
|
|
|
|
|
|
Or Byte Ptr [BX+12h], 16
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoIFFHeader1:
|
|
|
|
|
Pop EDX
|
|
|
|
|
Add EAX, EDX
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Xor EAX, EAX
|
|
|
|
|
Mov AX, [SI+14h]
|
|
|
|
|
XChg AL, AH
|
|
|
|
|
StosD
|
|
|
|
|
|
|
|
|
|
Jmp D_IFFHeaderEnd
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfoBSwap:
|
|
|
|
|
XChg DH, AL
|
|
|
|
|
XChg DL, AH
|
|
|
|
|
|
|
|
|
|
ShL EAX, 16
|
|
|
|
|
Mov AX, DX
|
|
|
|
|
|
|
|
|
|
Test Byte Ptr [BX+12h], 2
|
|
|
|
|
JZ D_GetSampleInfo17
|
|
|
|
|
|
|
|
|
|
ShR EAX, 1 ; Halve length for 16-bit samples.
|
|
|
|
|
|
|
|
|
|
D_GetSampleInfo17:
|
|
|
|
|
RetN
|
|
|
|
|
|
|
|
|
|
EndP D_GetSampleInfo
|
|
|
|
|
|