9024 lines
248 KiB
NASM
9024 lines
248 KiB
NASM
|
;<3B><><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>Ŀ
|
|||
|
;<3B> Instrument List module <20>
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
Jumps
|
|||
|
.386
|
|||
|
|
|||
|
include switch.inc
|
|||
|
include network.inc
|
|||
|
|
|||
|
;<3B><><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>Ŀ
|
|||
|
;<3B> Externals <20>
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
Segment Object1 BYTE Public 'Data'
|
|||
|
Extrn SampleFrequency:Word
|
|||
|
EndS
|
|||
|
|
|||
|
Segment DiskData PARA Public 'Data'
|
|||
|
EndS
|
|||
|
|
|||
|
Segment Pattern BYTE Public 'Code'
|
|||
|
Extrn BaseOctave:Byte
|
|||
|
Extrn LastInstrument:Byte
|
|||
|
EndS
|
|||
|
|
|||
|
Extrn F_Reset5NumInputPos:Far
|
|||
|
Extrn Glbl_F4_2:Far
|
|||
|
|
|||
|
Extrn Glbl_GetCurrentMode:Far
|
|||
|
Extrn S_GetDestination:Far
|
|||
|
Extrn S_SaveScreen:Far
|
|||
|
Extrn S_RestoreScreen:Far
|
|||
|
Extrn S_DrawString:Far
|
|||
|
Extrn M_FunctionDivider:Far
|
|||
|
Extrn M_Object1List:Far
|
|||
|
Extrn M_Object1ListDefault:Far
|
|||
|
Extrn Music_GetSongSegment:Far
|
|||
|
Extrn Music_ReleaseSample:Far
|
|||
|
Extrn Music_ClearSampleName:Far
|
|||
|
Extrn Music_PlaySample:Far
|
|||
|
Extrn Music_GetInstrumentMode:Far
|
|||
|
; Extrn Music_UpdateSampleLocation:Far
|
|||
|
|
|||
|
Extrn S_GetGenerationTableOffset:Far
|
|||
|
Extrn S_GenerateCharacters:Far
|
|||
|
Extrn S_SetDirectMode:Far
|
|||
|
Extrn S_DrawBox:Far
|
|||
|
Extrn S_DrawSmallBox:Far
|
|||
|
|
|||
|
Extrn O1_ConfirmDeleteSample:Far
|
|||
|
Extrn O1_ConfirmConvertList:Far
|
|||
|
Extrn O1_ConfirmConvert2List:Far
|
|||
|
Extrn O1_ConfirmCutSample:Far
|
|||
|
Extrn O1_ExchangeSampleList:Far
|
|||
|
Extrn O1_ExchangeInstrumentList:Far
|
|||
|
Extrn O1_SwapSampleList:Far
|
|||
|
Extrn O1_SwapInstrumentList:Far
|
|||
|
Extrn O1_ReplaceSampleList:Far
|
|||
|
Extrn O1_ReplaceInstrumentList:Far
|
|||
|
Extrn O1_ResizeSampleList:Far
|
|||
|
Extrn O1_ShowSampleFrequencyList:Far
|
|||
|
Extrn O1_FrequencyIndeterminedList:Far
|
|||
|
Extrn O1_ConfirmDeleteInstrument:Far
|
|||
|
Extrn O1_SampleAmplificationList:Far
|
|||
|
Extrn O1_CopyInstrumentList:Far
|
|||
|
Extrn O1_SampleCenterList:Far
|
|||
|
|
|||
|
Extrn O1_InstrumentListGeneral:Far
|
|||
|
Extrn O1_InstrumentListVolume:Far
|
|||
|
Extrn O1_InstrumentListPanning:Far
|
|||
|
Extrn O1_InstrumentListPitch:Far
|
|||
|
Extrn O1_C5FrequencyList:Far
|
|||
|
Extrn O1_GetInstrumentAmpList:Far
|
|||
|
|
|||
|
Extrn PE_GetLastInstrument:Far
|
|||
|
Extrn PE_SwapInstruments:Far
|
|||
|
Extrn PE_UpdateInstruments:Far
|
|||
|
Extrn PEFunction_OutOfMemoryMessage:Far
|
|||
|
Extrn PE_TranslateMIDI:Far, PE_RestoreMIDINote:Far
|
|||
|
Extrn PE_InsertInstrument:Far
|
|||
|
Extrn PE_DeleteInstrument:Far
|
|||
|
|
|||
|
Extrn Music_PlayPattern:Far
|
|||
|
Extrn Music_Stop:Far
|
|||
|
Extrn Music_PlaySong:Far
|
|||
|
Extrn Music_PlayNote:Far
|
|||
|
Extrn Music_ToggleChannel:Far
|
|||
|
Extrn Music_SoloChannel:Far
|
|||
|
Extrn Music_GetSampleLocation:Far
|
|||
|
Extrn Music_ClearInstrument:Far
|
|||
|
Extrn Music_GetInstrumentMode:Far
|
|||
|
Extrn Music_AllocateSample:Far
|
|||
|
Extrn Music_GetSlaveChannelInformationTable:Far
|
|||
|
Extrn Music_SoundCardLoadAllSamples:Far
|
|||
|
Extrn Music_GetNumChannels:Far
|
|||
|
|
|||
|
Extrn Music_RegetLoopInformation:Far
|
|||
|
|
|||
|
Extrn SetInfoLine:Far
|
|||
|
|
|||
|
Extrn MouseAddEvent:Far, AddMouseQueue:Far, MouseClearEvents:Far
|
|||
|
Extrn SetKeyboardLock:Far, MouseSetXY:Far
|
|||
|
Extrn MouseRemoveEvents:Far, MouseGetStatus:Far
|
|||
|
Extrn SetMouseCursorType:Far
|
|||
|
|
|||
|
Extrn Fourier_Transform:Far, Fourier_CreateTable:Far
|
|||
|
|
|||
|
|
|||
|
;<3B><><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>Ŀ
|
|||
|
;<3B> Globals <20>
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
Global I_DrawPitchPanCenter:Far
|
|||
|
Global I_PrePitchPanCenter:Far
|
|||
|
Global I_PostPitchPanCenter:Far
|
|||
|
|
|||
|
Global I_ClearTables:Far
|
|||
|
Global I_TagInstrument:Far
|
|||
|
Global I_TagSample:Far
|
|||
|
|
|||
|
Global I_DrawEnvelope:Far
|
|||
|
Global I_PreEnvelope:Far
|
|||
|
Global I_PostEnvelope:Far
|
|||
|
|
|||
|
Global I_ConvertSample:Far
|
|||
|
Global I_DeleteSample:Far
|
|||
|
Global I_CutSample:Far
|
|||
|
Global I_ClearSampleName:Far
|
|||
|
Global I_ExchangeSamples:Far
|
|||
|
Global I_ReplaceInstrument:Far
|
|||
|
Global I_ToggleSampleQuality:Far
|
|||
|
Global I_CenterSample:Far
|
|||
|
|
|||
|
Global I_InstrumentListSpace:Far
|
|||
|
Global I_InstrumentListNoteOff:Far
|
|||
|
Global I_IncreasePlayChannel:Far
|
|||
|
Global I_DecreasePlayChannel:Far
|
|||
|
Global I_ToggleMultiChannel:Far
|
|||
|
|
|||
|
Global I_ScaleInstrumentVolumes:Far
|
|||
|
Global I_ScaleSampleVolumes:Far
|
|||
|
Global I_CopyInstrument:Far
|
|||
|
Global I_DeleteInstrument:Far
|
|||
|
Global I_DrawSampleList:Far
|
|||
|
Global I_PreSampleList:Far
|
|||
|
Global I_PostSampleList:Far
|
|||
|
Global I_ShowSampleInfo:Far
|
|||
|
Global I_SampleUp:Far
|
|||
|
Global I_SampleDown:Far
|
|||
|
Global I_CheckLoopValues:Far
|
|||
|
Global I_CheckSusLoopValues:Far
|
|||
|
Global I_MapEnvelope:Far
|
|||
|
Global I_DrawWaveForm:Far
|
|||
|
Global I_SampleButtonHandler:Far
|
|||
|
|
|||
|
Global I_DrawInstrumentWindow:Far
|
|||
|
Global I_PreInstrumentWindow:Far
|
|||
|
Global I_PostInstrumentWindow:Far
|
|||
|
|
|||
|
Global I_DrawNoteWindow:Far
|
|||
|
Global I_PreNoteWindow:Far
|
|||
|
Global I_PostNoteWindow:Far
|
|||
|
|
|||
|
Global I_AmplifySample:Far
|
|||
|
Global I_ExchangeInstruments:Far
|
|||
|
Global I_ReverseSample:Far
|
|||
|
Global I_SwapSamples:Far
|
|||
|
Global I_SwapInstruments:Far
|
|||
|
Global I_ReplaceSample:Far
|
|||
|
Global I_UpdateInstrument:Far
|
|||
|
Global I_ResizeSample:Far
|
|||
|
Global I_ResizeSampleNoInt:Far
|
|||
|
Global I_InvertSample:Far
|
|||
|
|
|||
|
Global I_GetInstrumentOffset:Far
|
|||
|
Global I_GetSampleOffset:Far
|
|||
|
Global I_CutSampleBeforeLoop:Far
|
|||
|
|
|||
|
Global I_CalculateC5Speed:Far
|
|||
|
Global I_PrintC5Frequency:Far
|
|||
|
|
|||
|
Global I_DoubleSampleSpeed:Far
|
|||
|
Global I_HalveSampleSpeed:Far
|
|||
|
Global I_SampleSpeedSemiUp:Far
|
|||
|
Global I_SampleSpeedSemiDown:Far
|
|||
|
|
|||
|
Global I_ShowSamplePlay:Far
|
|||
|
Global I_ShowInstrumentPlay:Far
|
|||
|
|
|||
|
Global I_PlaySample:Far
|
|||
|
Global I_SelectScreen:Far
|
|||
|
|
|||
|
Global I_GetInstrumentScreen:Far
|
|||
|
Global I_IdleUpdateEnvelope:Far
|
|||
|
|
|||
|
Global I_PlayNote:Far
|
|||
|
|
|||
|
Global SampleNumberInput:Byte
|
|||
|
Global SampleNumber:Byte
|
|||
|
|
|||
|
Global MaxNode:Word
|
|||
|
Global NewSampleSize:DWord
|
|||
|
Global SampleAmplification:Word
|
|||
|
|
|||
|
Global InstrumentEdit:Byte
|
|||
|
Global NodeHeld:Byte
|
|||
|
Global InstrumentScreen:Word
|
|||
|
|
|||
|
Global I_GetPresetEnvelopeOffset:Far
|
|||
|
|
|||
|
Public UpdateWAVEForm
|
|||
|
Public MIDI_PlayNote, MIDI_NoteOff, MIDI_ClearTable
|
|||
|
Public MIDI_PlaySample, MIDI_FindChannel, MIDI_AllocateChannel
|
|||
|
Public MIDI_GetChannel
|
|||
|
|
|||
|
Global InstrumentAmplification
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
Segment Inst WORD Public 'Code' USE16
|
|||
|
Assume CS:Inst, DS:Nothing
|
|||
|
|
|||
|
;<3B><><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>Ŀ
|
|||
|
;<3B> Variables <20>
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
SLAVECHANNELSIZE EQU 128
|
|||
|
HOSTCHANNELSIZE EQU 80
|
|||
|
ENVELOPEGRANULARITY EQU 50
|
|||
|
MAXENVELOPETICK EQU 9999
|
|||
|
|
|||
|
InstrumentAmplification DW 50
|
|||
|
InstrumentScreen DW 0
|
|||
|
|
|||
|
LastPlaySample DB 5*12
|
|||
|
SampleNumber DB 1 ; For instrument-sample
|
|||
|
; editing
|
|||
|
|
|||
|
NoteReleased DB 1
|
|||
|
TopInstrument DW 1
|
|||
|
InstrumentPos DW 0
|
|||
|
|
|||
|
SamplePlayTable DB 128 Dup (0)
|
|||
|
InstrumentPlayTable DB 128 Dup (0)
|
|||
|
|
|||
|
TopNote DW 0
|
|||
|
CurrentNote DW 0
|
|||
|
NotePos DW 0 ; 0->4
|
|||
|
|
|||
|
SampleNumberInput DB 0
|
|||
|
DB 3 Dup(0)
|
|||
|
|
|||
|
NewSampleSize DD 0
|
|||
|
|
|||
|
CurrentNode DW 0 ; Volume envelope
|
|||
|
MaxNode DW 0
|
|||
|
|
|||
|
AmplitudeCompensate DB 0
|
|||
|
DB 0 ; Filler
|
|||
|
CurrentAmplitude DW 0
|
|||
|
CurrentTick DW 0
|
|||
|
LastAmplitude DW 0
|
|||
|
LastTick DW 0
|
|||
|
UpperLimit DW 0
|
|||
|
|
|||
|
NodeHeld DB 0
|
|||
|
DB 0
|
|||
|
WaveLength DW 0
|
|||
|
SearchDirection DW 0
|
|||
|
EndPoint DW 0
|
|||
|
|
|||
|
InstrumentEdit DB 0
|
|||
|
LastKey DW 0
|
|||
|
|
|||
|
Interpolate DB 0 ; For resizing routines
|
|||
|
Quality DB 0
|
|||
|
MultiChannel DB 0
|
|||
|
|
|||
|
PlayChannel DW 0
|
|||
|
SampleAmplification DW 0 ; Percentage
|
|||
|
|
|||
|
MIDITable DB 128 Dup (0) ; Contains channel of each note
|
|||
|
|
|||
|
NoteData DB 0, 0, 0FFh, 0, 0 ; For noteplay in notelist
|
|||
|
|
|||
|
PlayNote DB 5*12
|
|||
|
|
|||
|
NotePosTable DB 4, 6, 8, 9
|
|||
|
SamplePos DW 25
|
|||
|
|
|||
|
Resolution DB 0
|
|||
|
UpdateInstrumentScreen DB 1
|
|||
|
|
|||
|
CompleteMsg DB 0FDh, "D% Complete", 0
|
|||
|
TopSample DW 1
|
|||
|
NoSampleMsg DB "No sample", 0
|
|||
|
Quality8Msg DB "8 bits", 0
|
|||
|
Quality16Msg DB "16 bits", 0
|
|||
|
LengthMsg DB 0FDh, 'L', 0
|
|||
|
|
|||
|
EnvelopeSetMsg DB "Envelope copied into slot ", 0FDh, "D", 0
|
|||
|
|
|||
|
EnvelopeMsg DB "Node ", 0FDh, "D/", 0FDh, "D", 13, 13
|
|||
|
DB "Tick ", 0FDh, "D", 13, 13
|
|||
|
DB "Value ", 0FDh, "S", 0
|
|||
|
|
|||
|
PlayChannelMsg DB "Using channel ", 0FDh, "D for playback", 0
|
|||
|
|
|||
|
MultiChannelEnabledMsg DB "Multichannel playback enabled", 0
|
|||
|
MultiChannelDisabledMsg DB "Multichannel playback disabled", 0
|
|||
|
|
|||
|
C5FrequencyText DB "Calculated C5Speed: ", 0FDh, "L", 0
|
|||
|
|
|||
|
LastWaveformValues DW 0
|
|||
|
|
|||
|
EnvelopeHeaderTable Label
|
|||
|
DW Offset VolEnv, Offset VolEnvEdit
|
|||
|
DW Offset PanEnv, Offset PanEnvEdit
|
|||
|
DW Offset PitchEnv, Offset PitchEnvEdit
|
|||
|
|
|||
|
VolEnv DB "Volume Envelope", 0
|
|||
|
VolEnvEdit DB "Volume Envelope (Edit)", 0
|
|||
|
PanEnv DB "Panning Envelope", 0
|
|||
|
PanEnvEdit DB "Panning Envelope (Edit)", 0
|
|||
|
PitchEnv DB "Frequency Envelope", 0
|
|||
|
PitchEnvEdit DB "Frequency Envelope (Edit)", 0
|
|||
|
|
|||
|
EnvelopeOffsets Label Word
|
|||
|
DW 130h, 182h, 1D4h
|
|||
|
|
|||
|
NoteTable DB "C-C#D-D#E-F-F#G-G#A-A#B-"
|
|||
|
KeyBoardTable DW 12Ch, 0, 11Fh, 1, 12Dh, 2, 120h, 3, 12Eh, 4
|
|||
|
DW 12Fh, 5, 122h, 6, 130h, 7, 123h, 8, 131h, 9
|
|||
|
DW 124h, 10, 132h, 11, 110h, 12, 103h, 13, 111h, 14
|
|||
|
DW 104h, 15, 112h, 16, 113h, 17, 106h, 18, 114h, 19
|
|||
|
DW 107h, 20, 115h, 21, 108h, 22, 116h, 23, 117h, 24
|
|||
|
DW 10Ah, 25, 118h, 26, 10Bh, 27, 119h, 28, 0FFFFh
|
|||
|
|
|||
|
SampleMouseEvent DW 5*8, 13*8, 35*8-1, 48*8-1
|
|||
|
SampleMouseCondition DW 102h, 28, Offset MouseSelectInst, Inst
|
|||
|
SampleMouseOffEvent DW 0, 0, 0, 0, 1108h, 28, MouseSelectOff, Inst
|
|||
|
NoteMouseEvent DW 32*8, 16*8, 42*8-1, 48*8-1
|
|||
|
NoteMouseCondition DW 102h, 10, Offset MouseSelectNote, Inst
|
|||
|
NoteMouseOffEvent DW 0, 0, 0, 0, 1108h, 10, MouseSelectNoteOff, Inst
|
|||
|
|
|||
|
ENVELOPELEFT EQU 32
|
|||
|
ENVELOPETOP EQU 18
|
|||
|
|
|||
|
MouseNodeHeld DB 0
|
|||
|
|
|||
|
MouseX DW 0
|
|||
|
MouseY DW 0
|
|||
|
LowerTickLimit DW 0
|
|||
|
UpperTickLimit DW 0
|
|||
|
|
|||
|
EnvelopeEvent1 DW ENVELOPELEFT*8, ENVELOPETOP*8
|
|||
|
DW (ENVELOPELEFT+32)*8-1, (ENVELOPETOP+8)*8-1
|
|||
|
DW 102h, 10, Offset MouseEnvelopeEvent1, Inst
|
|||
|
EnvelopeEvent4 DW ENVELOPELEFT*8, ENVELOPETOP*8
|
|||
|
DW (ENVELOPELEFT+32)*8-1, (ENVELOPETOP+8)*8-1
|
|||
|
DW 110h, 10, Offset MouseEnvelopeEvent4, Inst
|
|||
|
EnvelopeEvent2 DW 0, 0, 0, 0, 1005h, 10, Offset MouseEnvelopeEvent2, Inst
|
|||
|
EnvelopeEvent3 DW 0, 0, 0, 0, 1108h, 10, Offset MouseEnvelopeEvent3, Inst
|
|||
|
; Release
|
|||
|
|
|||
|
PresetEnvelopes Label Byte
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
InstrumentScreenTable Label
|
|||
|
DW Offset O1_InstrumentListGeneral
|
|||
|
DW Offset O1_InstrumentListVolume
|
|||
|
DW Offset O1_InstrumentListPanning
|
|||
|
DW Offset O1_InstrumentListPitch
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
SampleListKeys Label
|
|||
|
DB 0 ; Mouse left button
|
|||
|
DW 8010h
|
|||
|
DW Offset I_SelectInstrument
|
|||
|
|
|||
|
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_SampleUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_SampleDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_SamplePgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_SamplePgDn
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_SampleCtrlPgUp
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_SampleCtrlPgDn
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D2h ; Alt Ins
|
|||
|
DW Offset I_InsertSample
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D3h ; Alt Del
|
|||
|
DW Offset I_RemoveSample
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_SampleLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_SampleRight
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C7h
|
|||
|
DW Offset I_SampleHome
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CFh
|
|||
|
DW Offset I_SampleEnd
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_SampleTab
|
|||
|
|
|||
|
DB 1 ; Alt...
|
|||
|
DW 2E00h ; 'C'
|
|||
|
DW Offset I_ClearSampleName
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
InstrumentListKeys Label
|
|||
|
DB 0 ; Mouse left button
|
|||
|
DW 8010h
|
|||
|
DW Offset I_SelectInstrument2
|
|||
|
|
|||
|
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_SampleUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_SampleDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_SamplePgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_SamplePgDn
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D2h ; Alt Ins
|
|||
|
DW Offset I_InsertInstrument
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D3h ; Alt Del
|
|||
|
DW Offset I_RemoveInstrument
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_SampleCtrlPgUp
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_SampleCtrlPgDn
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_InstrumentLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_InstrumentRight
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C7h
|
|||
|
DW Offset I_InstrumentHome
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CFh
|
|||
|
DW Offset I_InstrumentEnd
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_InstrumentTab
|
|||
|
|
|||
|
DB 4
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_InstrumentShiftTab
|
|||
|
|
|||
|
DB 1 ; Alt
|
|||
|
DW 2E00h ; 'C'
|
|||
|
DW Offset I_InstrumentNameClear
|
|||
|
|
|||
|
DB 1 ; Alt...
|
|||
|
DW 1100h ; 'W'
|
|||
|
DW Offset I_InstrumentClear
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
NoteListKeys Label
|
|||
|
DB 0
|
|||
|
DW 8010h
|
|||
|
DW Offset I_SelectNoteMouse
|
|||
|
|
|||
|
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_NoteUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_NoteDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_NotePgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_NotePgDn
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C7h
|
|||
|
DW Offset I_NoteHome
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CFh
|
|||
|
DW Offset I_NoteEnd
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_NoteLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_NoteRight
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_NoteTab
|
|||
|
|
|||
|
DB 4
|
|||
|
DW 10Fh ; Shift-Tab
|
|||
|
DW Offset I_NoteShiftTab
|
|||
|
|
|||
|
DB 1
|
|||
|
DW '>'
|
|||
|
DW Offset I_NoteSampleIncrease
|
|||
|
|
|||
|
DB 1
|
|||
|
DW "'"
|
|||
|
DW Offset I_NoteSampleIncrease
|
|||
|
|
|||
|
DB 1
|
|||
|
DW '<'
|
|||
|
DW Offset I_NoteSampleDecrease
|
|||
|
|
|||
|
DB 1
|
|||
|
DW ';'
|
|||
|
DW Offset I_NoteSampleDecrease
|
|||
|
|
|||
|
DB 1 ; Alt...
|
|||
|
DW 1E00h ; 'A'
|
|||
|
DW Offset I_NoteAll
|
|||
|
|
|||
|
DB 1 ; Alt...
|
|||
|
DW 3100h ; 'N'
|
|||
|
DW Offset I_NoteNext
|
|||
|
|
|||
|
DB 1 ; Alt...
|
|||
|
DW 1900h ; 'P'
|
|||
|
DW Offset I_NotePrevious
|
|||
|
|
|||
|
DB 2 ; Alt up
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_NoteTransposeUp
|
|||
|
|
|||
|
DB 2 ; Alt down
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_NoteTransposeDown
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D2h ; Alt Ins
|
|||
|
DW Offset I_NoteInsert
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D3h ; Alt Del
|
|||
|
DW Offset I_NoteDelete
|
|||
|
|
|||
|
DB 1
|
|||
|
DW ' '
|
|||
|
DW Offset I_NoteSpace
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 11Ch ; Enter
|
|||
|
DW Offset I_NoteSamplePickup
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
VolumeEnvelopeKeys Label
|
|||
|
DB 0
|
|||
|
DW 8010h
|
|||
|
DW Offset I_MouseEnvelopePress
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8001h
|
|||
|
DW Offset I_MouseEnvelopeDrag
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8002h
|
|||
|
DW Offset I_MouseEnvelopeReleased
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8003h
|
|||
|
DW Offset I_MouseEnvelopeDelete
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh ; Tab
|
|||
|
DW Offset I_NoteShiftTab
|
|||
|
|
|||
|
DB 4 ; Shifttab
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_NoteShiftTab
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_VolumeEnvelopeLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_VolumeEnvelopeRight
|
|||
|
|
|||
|
DB 0 ; Enter
|
|||
|
DW 11Ch
|
|||
|
DW Offset I_VolumeEnvelopeEnter
|
|||
|
|
|||
|
DB 0 ; Up arrow
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_VolumeEnvelopeUp
|
|||
|
|
|||
|
DB 0 ; Up arrow
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_VolumeEnvelopeDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D2h
|
|||
|
DW Offset I_VolumeEnvelopeInsert
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D3h
|
|||
|
DW Offset I_VolumeEnvelopeDelete
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
VolumeEnvelopeNodeKeys Label
|
|||
|
DB 0
|
|||
|
DW 8010h
|
|||
|
DW Offset I_MouseEnvelopePress
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8001h
|
|||
|
DW Offset I_MouseEnvelopeDrag
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8002h
|
|||
|
DW Offset I_MouseEnvelopeReleased
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 8003h
|
|||
|
DW Offset I_MouseEnvelopeDelete
|
|||
|
|
|||
|
DB 0 ; Enter
|
|||
|
DW 11Ch
|
|||
|
DW Offset I_VolumeEnvelopeEnter
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C8h ; Up arrow
|
|||
|
DW Offset I_VolumeEnvelopeHeldUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h ; Down arrow
|
|||
|
DW Offset I_VolumeEnvelopeHeldDown
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1C8h
|
|||
|
DW Offset I_VolumeEnvelopeHeldPgUp
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1D0h
|
|||
|
DW Offset I_VolumeEnvelopeHeldPgDn
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_VolumeEnvelopeHeldLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_VolumeEnvelopeHeldRight
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_VolumeEnvelopeHeldRightFast
|
|||
|
|
|||
|
DB 4
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_VolumeEnvelopeHeldLeftFast
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_VolumeEnvelopeHeldLeftFast
|
|||
|
|
|||
|
DB 2
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_VolumeEnvelopeHeldRightFast
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h
|
|||
|
DW Offset I_VolumeEnvelopeHeldPgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h
|
|||
|
DW Offset I_VolumeEnvelopeHeldPgDn
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C7h
|
|||
|
DW Offset I_VolumeEnvelopeHeldHome
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CFh
|
|||
|
DW Offset I_VolumeEnvelopeHeldEnd
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D2h
|
|||
|
DW Offset I_VolumeEnvelopeInsert
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D3h
|
|||
|
DW Offset I_VolumeEnvelopeDelete
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_VolumeEnvelopeLeft
|
|||
|
|
|||
|
DB 3
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_VolumeEnvelopeRight
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
PitchPanCenterKeys Label
|
|||
|
DB 0
|
|||
|
DW 10Fh ; Tab
|
|||
|
DW Offset I_NoteShiftTab
|
|||
|
|
|||
|
DB 4 ; Shifttab
|
|||
|
DW 10Fh
|
|||
|
DW Offset I_NoteShiftTab
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C8h ; Up arrow
|
|||
|
DW Offset I_PitchPanCenterUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h ; Down arrow
|
|||
|
DW Offset I_PitchPanCenterDown
|
|||
|
|
|||
|
DB 1
|
|||
|
DW '+'
|
|||
|
DW Offset I_PitchPanCenterSemiUp
|
|||
|
|
|||
|
DB 1
|
|||
|
DW '-'
|
|||
|
DW Offset I_PitchPanCenterSemiDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Offset I_PitchPanCenterSemiDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Offset I_PitchPanCenterSemiUp
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
;<3B><><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>Ŀ
|
|||
|
;<3B> Functions <20>
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
;<3B><><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 I_GetInstrumentScreen Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
Mov DI, Offset InstrumentScreen
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetInstrumentScreen
|
|||
|
|
|||
|
;<3B><><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 I_GetInstrumentOffset Far
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Add BX, BX
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov BX, [DS:64712+BX]
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetInstrumentOffset
|
|||
|
|
|||
|
;<3B><><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 I_GetSampleOffset Far
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Add BX, BX
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov BX, [DS:64912+BX]
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetSampleOffset
|
|||
|
|
|||
|
;<3B><><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 I_GetEnvelopeOffset ; Returns DS:SI
|
|||
|
|
|||
|
Push AX
|
|||
|
Call I_GetInstrumentOffset ; Returns DS:BX
|
|||
|
Mov SI, CS:InstrumentScreen
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [SI+EnvelopeOffsets-2]
|
|||
|
Add SI, BX
|
|||
|
Pop AX
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetEnvelopeOffset
|
|||
|
|
|||
|
;<3B><><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 I_SelectScreen Far
|
|||
|
|
|||
|
Mov BX, [SI+22]
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov InstrumentScreen, BX
|
|||
|
|
|||
|
Mov AX, [ES:DI]
|
|||
|
|
|||
|
Add BX, BX
|
|||
|
Mov BX, [CS:InstrumentScreenTable+BX]
|
|||
|
Mov [ES:BX], AX
|
|||
|
|
|||
|
Jmp Glbl_F4_2
|
|||
|
|
|||
|
EndP I_SelectScreen
|
|||
|
|
|||
|
;<3B><><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 MouseSelectOff Far
|
|||
|
|
|||
|
Mov Word Ptr [SI-16+8], 102h
|
|||
|
Mov CS:SampleMouseCondition, 102h
|
|||
|
Mov AX, 1
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseSelectOff
|
|||
|
|
|||
|
;<3B><><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 MouseSelectNoteOff Far
|
|||
|
|
|||
|
Mov Word Ptr [SI-16+8], 102h
|
|||
|
Mov CS:NoteMouseCondition, 102h
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseSelectNoteOff
|
|||
|
|
|||
|
;<3B><><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 MouseSelectNote Far
|
|||
|
|
|||
|
Mov CS:NoteMouseCondition, 1107h
|
|||
|
|
|||
|
Push CX
|
|||
|
Mov CX, 8010h
|
|||
|
Call AddMouseQueue
|
|||
|
Pop CX
|
|||
|
|
|||
|
Cmp DX, 16*8
|
|||
|
JA MouseSelectNote1
|
|||
|
|
|||
|
Mov DX, 16*8
|
|||
|
|
|||
|
MouseSelectNote1:
|
|||
|
Cmp DX, 48*8-1
|
|||
|
JB MouseSelectNote2
|
|||
|
|
|||
|
Mov DX, 48*8-1
|
|||
|
|
|||
|
MouseSelectNote2:
|
|||
|
Call MouseSetXY
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseSelectNote
|
|||
|
|
|||
|
;<3B><><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 MouseSelectInst Far
|
|||
|
|
|||
|
Mov CS:MouseX, CX
|
|||
|
|
|||
|
Mov CS:SampleMouseCondition, 1107h
|
|||
|
|
|||
|
Push CX
|
|||
|
|
|||
|
Mov CX, 8010h
|
|||
|
ShR DX, 3
|
|||
|
Sub DX, 13
|
|||
|
Call AddMouseQueue
|
|||
|
|
|||
|
Pop CX
|
|||
|
And DX, DX
|
|||
|
JNS MouseSelectInst1
|
|||
|
|
|||
|
Mov DX, 13*8
|
|||
|
Jmp MouseSelectInst2
|
|||
|
|
|||
|
MouseSelectInst1:
|
|||
|
Cmp DX, 35
|
|||
|
JB MouseSelectInst3
|
|||
|
|
|||
|
Mov DX, 48*8-1
|
|||
|
|
|||
|
MouseSelectInst2:
|
|||
|
Call MouseSetXY
|
|||
|
|
|||
|
MouseSelectInst3:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseSelectInst
|
|||
|
|
|||
|
;<3B><><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 AddSelectEvent
|
|||
|
|
|||
|
Call MouseGetStatus
|
|||
|
Test AL, 6
|
|||
|
JNZ AddSelectEvent1
|
|||
|
|
|||
|
Mov Word Ptr [SI+8], 102h
|
|||
|
|
|||
|
AddSelectEvent1:
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP AddSelectEvent
|
|||
|
|
|||
|
;<3B><><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 I_DrawSampleList Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
|
|||
|
Test AL, AL
|
|||
|
JNZ I_DrawSampleList1
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov LastInstrument, AL
|
|||
|
|
|||
|
I_DrawSampleList1:
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov BX, TopSample
|
|||
|
Cmp BL, AL
|
|||
|
JBE I_DrawSampleList2
|
|||
|
|
|||
|
Mov BL, AL
|
|||
|
|
|||
|
I_DrawSampleList2: ; BL = top, AL = current
|
|||
|
Mov CL, BL
|
|||
|
Add CL, 34
|
|||
|
Cmp CL, AL
|
|||
|
JAE I_DrawSampleList3
|
|||
|
|
|||
|
Mov BL, AL
|
|||
|
Sub BL, 34
|
|||
|
|
|||
|
I_DrawSampleList3:
|
|||
|
Mov TopSample, BX
|
|||
|
; BX = topinstrument
|
|||
|
|
|||
|
Mov DI, (2+13*80)*2
|
|||
|
|
|||
|
Mov DX, 0A23h
|
|||
|
|
|||
|
I_DrawSampleList4:
|
|||
|
Mov AX, BX
|
|||
|
Div DH
|
|||
|
; AH = units, AL = tens
|
|||
|
Add AL, '0'
|
|||
|
StosB
|
|||
|
Mov AL, 20h
|
|||
|
StosB
|
|||
|
XChg AH, AL
|
|||
|
Add AL, '0'
|
|||
|
StosW
|
|||
|
|
|||
|
Inc BX
|
|||
|
Add DI, 156
|
|||
|
Dec DL
|
|||
|
JNE I_DrawSampleList4
|
|||
|
|
|||
|
Mov BX, TopSample
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Mov CX, 35
|
|||
|
Mov DI, (5+13*80)*2
|
|||
|
Dec BX
|
|||
|
Add BX, BX
|
|||
|
Mov SI, [BX+64912]
|
|||
|
|
|||
|
I_DrawSampleList5:
|
|||
|
Push CX
|
|||
|
Push SI
|
|||
|
Push DI
|
|||
|
|
|||
|
Add SI, 14h
|
|||
|
Mov CX, 25
|
|||
|
Mov AH, 6
|
|||
|
|
|||
|
I_DrawSampleList6:
|
|||
|
LodsB
|
|||
|
Cmp AL, 226
|
|||
|
JB I_DrawSampleNoMouse
|
|||
|
|
|||
|
Mov AL, ' '
|
|||
|
|
|||
|
I_DrawSampleNoMouse:
|
|||
|
StosW
|
|||
|
Loop I_DrawSampleList6
|
|||
|
|
|||
|
Mov AX, 2A8h
|
|||
|
StosW
|
|||
|
|
|||
|
Mov AX, 700h+'P'
|
|||
|
|
|||
|
Test Byte Ptr [SI-14h-25+12h], 1
|
|||
|
JZ I_DrawSampleList8
|
|||
|
|
|||
|
Mov AH, 6
|
|||
|
|
|||
|
I_DrawSampleList8:
|
|||
|
StosW
|
|||
|
Mov AL, 'l'
|
|||
|
StosW
|
|||
|
Mov AL, 'a'
|
|||
|
StosW
|
|||
|
Mov AL, 'y'
|
|||
|
StosW
|
|||
|
|
|||
|
Pop DI
|
|||
|
Pop SI
|
|||
|
Pop CX
|
|||
|
Add SI, 80
|
|||
|
Add DI, 160
|
|||
|
|
|||
|
Loop I_DrawSampleList5
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Xor AH, AH
|
|||
|
Sub AX, TopSample
|
|||
|
Add AX, 13
|
|||
|
Mov BX, 160
|
|||
|
Mul BX
|
|||
|
Add AX, 10
|
|||
|
Mov DI, AX
|
|||
|
|
|||
|
Mov CX, 30
|
|||
|
|
|||
|
I_DrawSampleList7:
|
|||
|
Mov AX, [ES:DI]
|
|||
|
And AH, 0Fh
|
|||
|
Or AH, 0E0h
|
|||
|
StosW
|
|||
|
|
|||
|
Loop I_DrawSampleList7
|
|||
|
|
|||
|
; Add on pointer...
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset SampleMouseEvent
|
|||
|
Mov Word Ptr [SI+4], 35*8-1
|
|||
|
Mov Word Ptr [SI+10], 28
|
|||
|
Call AddSelectEvent
|
|||
|
Mov SI, Offset SampleMouseOffEvent
|
|||
|
Mov Word Ptr [SI+4], 35*8-1
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawSampleList
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PreSampleList Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Xor AH, AH
|
|||
|
Mov SI, AX
|
|||
|
Sub AX, TopSample
|
|||
|
Add AX, 13
|
|||
|
Mov BX, 160
|
|||
|
Mul BX
|
|||
|
Add AX, 10
|
|||
|
Mov DI, AX
|
|||
|
|
|||
|
Mov AX, SamplePos
|
|||
|
Cmp AX, 25
|
|||
|
JB I_PreSampleList1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Dec SI
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [SI+64912]
|
|||
|
|
|||
|
Mov CX, 4
|
|||
|
Add DI, 52
|
|||
|
Mov AL, 30h
|
|||
|
Test Byte Ptr [SI+12h], 1
|
|||
|
JNZ I_PreSampleList2
|
|||
|
|
|||
|
Mov AL, 60h
|
|||
|
|
|||
|
I_PreSampleList2:
|
|||
|
Inc DI
|
|||
|
StosB
|
|||
|
|
|||
|
Loop I_PreSampleList2
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
I_PreSampleList1:
|
|||
|
Add DI, AX
|
|||
|
Add DI, AX
|
|||
|
|
|||
|
Mov AL, 30h
|
|||
|
Inc DI
|
|||
|
StosB
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PreSampleList
|
|||
|
|
|||
|
;<3B><><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 I_PostSampleList Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset SampleListKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC I_PostSampleList7
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
I_PostSampleList7:
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Xor AH, AH
|
|||
|
Mov SI, AX
|
|||
|
Dec SI
|
|||
|
|
|||
|
Mov AX, SamplePos
|
|||
|
Cmp AX, 25
|
|||
|
JAE I_PostSampleList2
|
|||
|
|
|||
|
Mov BX, AX ; BX = Pos. SI = LastInst
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [64912+SI] ; SI = sample offset.
|
|||
|
|
|||
|
Test CL, CL
|
|||
|
JZ I_PostSampleList1
|
|||
|
Cmp DL, 32 ; Space bar or less??
|
|||
|
JB I_PostSampleList1
|
|||
|
|
|||
|
Add BX, 14h ; To sample name.
|
|||
|
Add BX, SI
|
|||
|
Add SI, 2Ch
|
|||
|
|
|||
|
I_PostSampleList3:
|
|||
|
Cmp SI, BX
|
|||
|
JBE I_PSL3
|
|||
|
|
|||
|
Mov AL, [SI-1]
|
|||
|
Mov [SI], AL
|
|||
|
Dec SI
|
|||
|
Jmp I_PostSampleList3
|
|||
|
|
|||
|
I_PSL3:
|
|||
|
Mov [SI], DL
|
|||
|
|
|||
|
Inc SamplePos
|
|||
|
|
|||
|
Jmp I_PostSampleListEnd
|
|||
|
|
|||
|
I_PostSampleList1:
|
|||
|
Cmp CX, 10Eh
|
|||
|
JNE I_PostSampleList4
|
|||
|
|
|||
|
And BX, BX
|
|||
|
JZ I_PostSampleList4
|
|||
|
|
|||
|
Dec SamplePos
|
|||
|
Add BX, 14h
|
|||
|
Add BX, SI
|
|||
|
Add SI, 2Dh
|
|||
|
|
|||
|
I_PostSampleList5:
|
|||
|
Mov AL, [BX]
|
|||
|
Mov [BX-1], AL
|
|||
|
Inc BX
|
|||
|
Cmp BX, SI
|
|||
|
JB I_PostSampleList5
|
|||
|
|
|||
|
Mov Byte Ptr [BX-1], 0
|
|||
|
|
|||
|
I_PostSampleListEnd:
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostSampleList4:
|
|||
|
Cmp CX, 1D3h ; Delete...
|
|||
|
JNE I_PostSampleList6
|
|||
|
|
|||
|
Add BX, 15h
|
|||
|
Add BX, SI
|
|||
|
Add SI, 2Dh
|
|||
|
Jmp I_PostSampleList5
|
|||
|
|
|||
|
I_PostSampleList6:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostSampleList2: ; Play note....
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Test CH, Not 1
|
|||
|
JNZ I_PostSampleList9
|
|||
|
|
|||
|
Cmp CX, LastKey
|
|||
|
JE I_PostSampleList9
|
|||
|
|
|||
|
Mov LastKey, CX
|
|||
|
|
|||
|
|
|||
|
Mov SI, Offset KeyBoardTable
|
|||
|
|
|||
|
I_PostSampleList8:
|
|||
|
LodsW
|
|||
|
Cmp AX, 0FFFFh
|
|||
|
JE I_PostSampleList9
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
LodsW
|
|||
|
|
|||
|
Cmp BL, CL
|
|||
|
JNE I_PostSampleList8
|
|||
|
; Note to play...
|
|||
|
; AX = notemod.
|
|||
|
And CH, CH
|
|||
|
JZ I_PostSampleList10
|
|||
|
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, 12
|
|||
|
Mul BaseOctave
|
|||
|
Add AL, CL
|
|||
|
Mov AH, LastInstrument
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Call UpdateMultiChannel
|
|||
|
|
|||
|
Mov LastPlaySample, AL
|
|||
|
|
|||
|
Mov CX, PlayChannel
|
|||
|
Call Music_PlaySample
|
|||
|
Jmp I_PostSampleList9
|
|||
|
|
|||
|
I_PostSampleList10:
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Mov Word Ptr [SI], 0FFh
|
|||
|
Mov AX, PlayChannel
|
|||
|
Mov DH, 32+128
|
|||
|
Call Music_PlayNote ; Note off.
|
|||
|
|
|||
|
I_PostSampleList9:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PostSampleList
|
|||
|
|
|||
|
;<3B><><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 I_SampleLeft Far
|
|||
|
|
|||
|
Mov AX, SamplePos
|
|||
|
Dec AX
|
|||
|
JS I_SampleLeft1
|
|||
|
|
|||
|
Mov SamplePos, AX
|
|||
|
|
|||
|
I_SampleLeft1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleLeft
|
|||
|
|
|||
|
;<3B><><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 I_SampleRight Far
|
|||
|
|
|||
|
Mov AX, SamplePos
|
|||
|
Inc AX
|
|||
|
Cmp AX, 25
|
|||
|
JA I_SampleRight1
|
|||
|
|
|||
|
Mov SamplePos, AX
|
|||
|
|
|||
|
I_SampleRight1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleRight
|
|||
|
|
|||
|
;<3B><><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 I_RedrawWave
|
|||
|
|
|||
|
Call Glbl_GetCurrentMode
|
|||
|
|
|||
|
Cmp AL, 3
|
|||
|
JE I_RedrawWave1
|
|||
|
Cmp AL, 4
|
|||
|
JNE I_RedrawWave2
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
Ret
|
|||
|
|
|||
|
I_RedrawWave1:
|
|||
|
Call I_DrawWaveForm
|
|||
|
|
|||
|
I_RedrawWave2:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_RedrawWave
|
|||
|
|
|||
|
;<3B><><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 I_SelectInstrument2
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
; Set Instrument pos...
|
|||
|
Mov AX, MouseX
|
|||
|
ShR AX, 3
|
|||
|
Sub AX, 5
|
|||
|
JNC I_SelectInstrument8
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_SelectInstrument8:
|
|||
|
Cmp AX, 24
|
|||
|
JB I_SelectInstrument7
|
|||
|
|
|||
|
Mov AX, 24
|
|||
|
|
|||
|
I_SelectInstrument7:
|
|||
|
Mov InstrumentPos, AX
|
|||
|
|
|||
|
Add DX, TopInstrument
|
|||
|
Jmp I_SelectInstrument4
|
|||
|
|
|||
|
Proc I_SelectInstrument Far
|
|||
|
|
|||
|
Mov AX, MouseX
|
|||
|
Sub AX, 40
|
|||
|
ShR AX, 3
|
|||
|
Cmp AX, 25
|
|||
|
JB I_SelectInstrument6
|
|||
|
|
|||
|
Mov AX, 25
|
|||
|
|
|||
|
I_SelectInstrument6:
|
|||
|
Mov SamplePos, AX
|
|||
|
|
|||
|
Add DX, TopSample
|
|||
|
|
|||
|
I_SelectInstrument4:
|
|||
|
Cmp DX, 1
|
|||
|
JGE I_SelectInstrument1
|
|||
|
|
|||
|
Mov DX, 1
|
|||
|
|
|||
|
I_SelectInstrument1:
|
|||
|
Cmp DX, 99
|
|||
|
JL I_SelectInstrument3
|
|||
|
|
|||
|
Mov DX, 99
|
|||
|
|
|||
|
I_SelectInstrument3:
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Cmp DL, LastInstrument
|
|||
|
Mov LastInstrument, DL
|
|||
|
JE I_SelectInstrument5
|
|||
|
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
I_SelectInstrument5:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SelectInstrument
|
|||
|
|
|||
|
EndP I_SelectInstrument2
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SampleDown Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
|
|||
|
Inc AX
|
|||
|
Cmp AL, 100
|
|||
|
JAE I_SampleDown1
|
|||
|
|
|||
|
Mov LastInstrument, AL
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
I_SampleDown1:
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SampleUp Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
|
|||
|
Dec AL
|
|||
|
JZ I_SampleUp1
|
|||
|
|
|||
|
Mov LastInstrument, AL
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
I_SampleUp1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SamplePgUp Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
|
|||
|
Cmp AL, 1
|
|||
|
JE I_SamplePgUp3
|
|||
|
|
|||
|
Sub AL, 16
|
|||
|
JZ I_SamplePgUp1
|
|||
|
JNC I_SamplePgUp2
|
|||
|
|
|||
|
I_SamplePgUp1:
|
|||
|
Mov AL, 1
|
|||
|
|
|||
|
I_SamplePgUp2:
|
|||
|
Mov LastInstrument, AL
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
I_SamplePgUp3:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SamplePgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SamplePgDn Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Cmp AL, 99
|
|||
|
JE I_SamplePgDn2
|
|||
|
|
|||
|
Add AL, 16
|
|||
|
Cmp AL, 99
|
|||
|
JBE I_SamplePgDn1
|
|||
|
|
|||
|
Mov AL, 99
|
|||
|
|
|||
|
I_SamplePgDn1:
|
|||
|
Mov LastInstrument, AL
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
I_SamplePgDn2:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SamplePgDn
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SampleCtrlPgUp Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov LastInstrument, 1
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleCtrlPgUp
|
|||
|
|
|||
|
;<3B><><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 I_SampleCtrlPgDn Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov LastInstrument, 99
|
|||
|
Call I_RedrawWave
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleCtrlPgDn
|
|||
|
|
|||
|
;<3B><><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 I_SampleEnd Far
|
|||
|
|
|||
|
Mov SamplePos, 25
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleEnd
|
|||
|
|
|||
|
;<3B><><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 I_SampleHome Far
|
|||
|
|
|||
|
Mov SamplePos, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleHome
|
|||
|
|
|||
|
;<3B><><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 I_SampleTab Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 7
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleTab
|
|||
|
|
|||
|
;<3B><><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 I_ShowSampleInfo Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Push DWord Ptr [BX+30h]
|
|||
|
|
|||
|
Mov AL, [BX+12h]
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset NoSampleMsg
|
|||
|
|
|||
|
Mov AH, 2
|
|||
|
Test AL, 1
|
|||
|
JZ I_ShowSampleInfo1
|
|||
|
|
|||
|
Mov SI, Offset Quality8Msg
|
|||
|
Test AL, 2
|
|||
|
JZ I_ShowSampleInfo1
|
|||
|
|
|||
|
Mov SI, Offset Quality16Msg
|
|||
|
|
|||
|
I_ShowSampleInfo1:
|
|||
|
Mov DI, (64+22*80)*2
|
|||
|
Call S_DrawString
|
|||
|
|
|||
|
I_ShowSampleInfo2:
|
|||
|
Mov DI, (64+23*80)*2
|
|||
|
Mov SI, Offset LengthMsg
|
|||
|
Call S_DrawString
|
|||
|
|
|||
|
Pop EAX
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ShowSampleInfo
|
|||
|
|
|||
|
;<3B><><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 I_VibratoButtonSelect Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Mov AL, [BX+04Fh] ; AL = type.
|
|||
|
Xor AH, AH
|
|||
|
|
|||
|
Add DI, 82
|
|||
|
Xor CX, CX
|
|||
|
|
|||
|
I_VibratoButtonSelect1:
|
|||
|
Mov SI, [ES:DI]
|
|||
|
|
|||
|
Mov CH, AH ; Assume up
|
|||
|
Cmp AL, CL
|
|||
|
JNE I_VibratoButtonSelect2
|
|||
|
|
|||
|
Inc CH
|
|||
|
|
|||
|
I_VibratoButtonSelect2:
|
|||
|
Mov [ES:SI+33], CH
|
|||
|
|
|||
|
; Add DI, 2
|
|||
|
ScasW
|
|||
|
Inc CX
|
|||
|
Cmp CL, 3
|
|||
|
JLE I_VibratoButtonSelect1
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VibratoButtonSelect
|
|||
|
|
|||
|
;<3B><><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 I_SetVibratoWaveform Far ; AH = waveform.
|
|||
|
|
|||
|
Mov AX, [SI+24]
|
|||
|
Push AX
|
|||
|
Call I_GetSampleOffset
|
|||
|
Pop AX
|
|||
|
|
|||
|
Mov [BX+4Fh], AL
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SetVibratoWaveform
|
|||
|
|
|||
|
;<3B><><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 I_CheckLoopValues Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Mov EAX, [BX+30h]
|
|||
|
Sub EAX, 1
|
|||
|
AdC EAX, 0
|
|||
|
Cmp EAX, [BX+34h]
|
|||
|
JA I_CheckLoopValues3
|
|||
|
|
|||
|
Mov [BX+34h], EAX
|
|||
|
|
|||
|
I_CheckLoopValues3:
|
|||
|
Inc EAX
|
|||
|
Cmp EAX, [BX+38h]
|
|||
|
JAE I_CheckLoopValues2
|
|||
|
|
|||
|
Mov [BX+38h], EAX
|
|||
|
|
|||
|
I_CheckLoopValues2:
|
|||
|
Mov EAX, [BX+38h]
|
|||
|
Cmp EAX, [BX+34h]
|
|||
|
JA I_CheckLoopValues1
|
|||
|
|
|||
|
And Byte Ptr [BX+12h], NOT 00010000b
|
|||
|
|
|||
|
I_CheckLoopValues1:
|
|||
|
Call Music_RegetLoopInformation
|
|||
|
Call I_DrawWaveForm
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CheckLoopValues
|
|||
|
|
|||
|
;<3B><><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 I_CheckSusLoopValues Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Mov EAX, [BX+30h]
|
|||
|
Sub EAX, 1
|
|||
|
AdC EAX, 0
|
|||
|
Cmp EAX, [BX+40h]
|
|||
|
JA I_CheckSusLoopValues3
|
|||
|
|
|||
|
Mov [BX+40h], EAX
|
|||
|
|
|||
|
I_CheckSusLoopValues3:
|
|||
|
Inc EAX
|
|||
|
Cmp EAX, [BX+44h]
|
|||
|
JAE I_CheckSusLoopValues2
|
|||
|
|
|||
|
Mov [BX+44h], EAX
|
|||
|
|
|||
|
I_CheckSusLoopValues2:
|
|||
|
Mov EAX, [BX+44h]
|
|||
|
Cmp EAX, [BX+40h]
|
|||
|
JA I_CheckLoopValues1
|
|||
|
|
|||
|
And Byte Ptr [BX+12h], NOT 00100000b
|
|||
|
|
|||
|
I_CheckSusLoopValues1:
|
|||
|
Call Music_RegetLoopInformation
|
|||
|
Call I_DrawWaveForm
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CheckSusLoopValues
|
|||
|
|
|||
|
;<3B><><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 I_DrawWaveForm Far
|
|||
|
|
|||
|
Mov [CS:LastWaveformValues], 7f80h
|
|||
|
|
|||
|
Call S_GetGenerationTableOffset
|
|||
|
Push DI
|
|||
|
Mov CX, 176*32
|
|||
|
Xor AL, AL
|
|||
|
Rep StosB
|
|||
|
Pop DI
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
And AL, AL
|
|||
|
JNZ I_DrawWaveForm1
|
|||
|
|
|||
|
Mov AL, 1
|
|||
|
|
|||
|
I_DrawWaveForm1:
|
|||
|
Mov LastInstrument, AL
|
|||
|
Xor AH, AH
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
JC I_DrawWaveFormEnd
|
|||
|
|
|||
|
SetNZ CS:Resolution
|
|||
|
JZ I_DrawWaveForm8Bit
|
|||
|
|
|||
|
Add ECX, ECX
|
|||
|
Inc SI
|
|||
|
|
|||
|
I_DrawWaveForm8Bit:
|
|||
|
Test ECX, ECX
|
|||
|
JZ I_DrawWaveFormEnd
|
|||
|
|
|||
|
Push AX ; AX = instrument num
|
|||
|
; DS:ESI = waveform, ECX = length
|
|||
|
; ES:DI = charactergenerationtable
|
|||
|
|
|||
|
Mov EAX, ECX
|
|||
|
Mov ECX, 176
|
|||
|
Xor EDX, EDX
|
|||
|
Div ECX ; EAX = major shift. EDX = minor shift.
|
|||
|
|
|||
|
Mov EBX, EAX
|
|||
|
Xor EAX, EAX
|
|||
|
Div ECX
|
|||
|
|
|||
|
Mov EDX, EAX
|
|||
|
Xor EAX, EAX
|
|||
|
|
|||
|
Mov EBP, ESI
|
|||
|
|
|||
|
I_DrawWaveForm6:
|
|||
|
Add EAX, EDX
|
|||
|
AdC EBP, EBX
|
|||
|
Push EAX
|
|||
|
Push EBX
|
|||
|
Push ECX
|
|||
|
Push EDX
|
|||
|
|
|||
|
Mov CL, [SI]
|
|||
|
Mov CH, CL
|
|||
|
MovZX BX, CS:Resolution
|
|||
|
Inc BX
|
|||
|
|
|||
|
I_DrawWaveForm10:
|
|||
|
Cmp ESI, EBP
|
|||
|
JAE I_DrawWaveForm7
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Add SI, BX ; Get max/min vals.
|
|||
|
JC I_DrawWaveformNewBlock
|
|||
|
|
|||
|
I_DrawWaveformResume:
|
|||
|
Cmp AL, CL
|
|||
|
JL I_DrawWaveForm8
|
|||
|
|
|||
|
Cmp AL, CH
|
|||
|
JLE I_DrawWaveForm10
|
|||
|
|
|||
|
Mov CH, AL
|
|||
|
Jmp I_DrawWaveForm10
|
|||
|
|
|||
|
I_DrawWaveformNewBlock:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_DrawWaveFormResume
|
|||
|
|
|||
|
I_DrawWaveForm8:
|
|||
|
Mov CL, AL
|
|||
|
Jmp I_DrawWaveForm10
|
|||
|
|
|||
|
I_DrawWaveForm7: ; CL = min, CH = max.
|
|||
|
Mov AX, CX
|
|||
|
|
|||
|
XChg CX, [CS:LastWaveformValues]
|
|||
|
|
|||
|
Cmp AL, CH
|
|||
|
JL I_DrawWaveform7a
|
|||
|
|
|||
|
Mov AL, CH
|
|||
|
|
|||
|
I_DrawWaveform7a:
|
|||
|
Cmp AH, CL
|
|||
|
JG I_DrawWaveform7b
|
|||
|
|
|||
|
Mov AH, CL
|
|||
|
|
|||
|
I_DrawWaveform7b:
|
|||
|
SAR AH, 1
|
|||
|
SAR AL, 1
|
|||
|
Add AX, 202h
|
|||
|
SAR AH, 2
|
|||
|
SAR AL, 2
|
|||
|
|
|||
|
Xor CH, CH
|
|||
|
Mov CL, AH
|
|||
|
Sub CL, AL ; CX = iterations.
|
|||
|
Inc CX
|
|||
|
|
|||
|
Mov AL, 16
|
|||
|
Sub AL, AH
|
|||
|
Cmp AL, 32
|
|||
|
JNE I_DrawWaveForm13
|
|||
|
|
|||
|
Mov AL, 31
|
|||
|
|
|||
|
I_DrawWaveForm13:
|
|||
|
Mov AH, 176
|
|||
|
Mul AH
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
I_DrawWaveForm11:
|
|||
|
Mov Byte Ptr [ES:DI+BX], 1
|
|||
|
Add BX, 176
|
|||
|
Loop I_DrawWaveForm11
|
|||
|
|
|||
|
I_DrawWaveForm12:
|
|||
|
Pop EDX
|
|||
|
Pop ECX
|
|||
|
Pop EBX
|
|||
|
Pop EAX
|
|||
|
Inc DI
|
|||
|
Loop I_DrawWaveForm6
|
|||
|
|
|||
|
; Get Sample header offset.
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Pop SI
|
|||
|
Dec SI
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [64912+SI]
|
|||
|
|
|||
|
Mov EBX, [DS:SI+30h]
|
|||
|
Test Byte Ptr [DS:SI+12h], 10h
|
|||
|
JZ I_DrawWaveForm14
|
|||
|
|
|||
|
Mov ECX, EBX
|
|||
|
ShR ECX, 1
|
|||
|
|
|||
|
Mov EAX, 175
|
|||
|
Mul DWord Ptr [DS:SI+34h]
|
|||
|
Add EAX, ECX
|
|||
|
AdC EDX, 0
|
|||
|
Div EBX
|
|||
|
|
|||
|
Push EAX ; AX = loop start.
|
|||
|
|
|||
|
Mov EAX, 175
|
|||
|
Mul DWord Ptr [DS:SI+38h]
|
|||
|
Add EAX, ECX
|
|||
|
AdC EDX, 0
|
|||
|
Div EBX
|
|||
|
Mov EDX, EAX
|
|||
|
Pop EAX ; EDX = loop end (0-175)
|
|||
|
; EAX = loop start (0-175)
|
|||
|
|
|||
|
Call S_GetGenerationTableOffset
|
|||
|
; ES:DI
|
|||
|
Add DI, AX
|
|||
|
Sub DX, AX
|
|||
|
Dec DX
|
|||
|
Mov CX, 32
|
|||
|
Mov AH, 1
|
|||
|
|
|||
|
I_DrawSampleWaveFormLoop1:
|
|||
|
Push DI
|
|||
|
|
|||
|
; Xor AL, AL
|
|||
|
; Test AH, 2
|
|||
|
; JZ I_DrawSampleWaveFormLoop2
|
|||
|
;
|
|||
|
; Inc AL
|
|||
|
;
|
|||
|
;I_DrawSampleWaveFormLoop2:
|
|||
|
Mov AL, AH
|
|||
|
ShR AL, 1
|
|||
|
And AL, 1
|
|||
|
|
|||
|
StosB
|
|||
|
Add DI, DX
|
|||
|
StosB
|
|||
|
|
|||
|
Pop DI
|
|||
|
Add DI, 176
|
|||
|
Inc AH
|
|||
|
Loop I_DrawSampleWaveFormLoop1
|
|||
|
|
|||
|
I_DrawWaveForm14:
|
|||
|
Test Byte Ptr [DS:SI+12h], 20h
|
|||
|
JZ I_DrawWaveFormEnd
|
|||
|
|
|||
|
Mov ECX, EBX
|
|||
|
ShR ECX, 1
|
|||
|
|
|||
|
Mov EAX, 175
|
|||
|
Mul DWord Ptr [DS:SI+40h]
|
|||
|
Add EAX, ECX
|
|||
|
AdC EDX, 0
|
|||
|
Div EBX
|
|||
|
|
|||
|
Push EAX ; AX = loop start.
|
|||
|
|
|||
|
Mov EAX, 175
|
|||
|
Mul DWord Ptr [DS:SI+44h]
|
|||
|
Add EAX, ECX
|
|||
|
AdC EDX, 0
|
|||
|
Div EBX
|
|||
|
Mov EDX, EAX
|
|||
|
Pop EAX ; DX = loop end (0-175)
|
|||
|
; AX = loop start (0-175)
|
|||
|
|
|||
|
Call S_GetGenerationTableOffset
|
|||
|
; ES:DI
|
|||
|
Add DI, AX
|
|||
|
Sub DX, AX
|
|||
|
Dec DX
|
|||
|
Mov CX, 32
|
|||
|
Mov AL, 1
|
|||
|
|
|||
|
I_DrawSampleWaveFormSusLoop1:
|
|||
|
Push DI
|
|||
|
|
|||
|
StosB
|
|||
|
Add DI, DX
|
|||
|
StosB
|
|||
|
|
|||
|
Pop DI
|
|||
|
Add DI, 176
|
|||
|
Xor AL, 1
|
|||
|
Loop I_DrawSampleWaveFormSusLoop1
|
|||
|
|
|||
|
I_DrawWaveFormEnd:
|
|||
|
Mov AX, 1
|
|||
|
Mov BX, 22
|
|||
|
Mov CX, 4
|
|||
|
Call S_GenerateCharacters
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawWaveForm
|
|||
|
|
|||
|
;<3B><><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 I_DeleteSample Far
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmDeleteSample
|
|||
|
Mov CX, 4
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_DeleteSample1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Dec AX
|
|||
|
Xor AH, AH
|
|||
|
|
|||
|
Call Music_ReleaseSample
|
|||
|
Call Music_ClearSampleName
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
|
|||
|
I_DeleteSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DeleteSample
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
C5Speed DD 0
|
|||
|
|
|||
|
Proc I_CalculateC5Speed Far
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
Comment !
|
|||
|
Push DiskData
|
|||
|
Pop ES
|
|||
|
Call Fourier_CreateTable
|
|||
|
|
|||
|
Call PE_GetLastInstrument ; Into BX
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Returns DS:ESI, ECX
|
|||
|
JC I_CalculateC5SpeedEnd
|
|||
|
|
|||
|
PushF
|
|||
|
Mov DX, 2048
|
|||
|
Mov DI, 16384
|
|||
|
|
|||
|
Cmp CX, DX
|
|||
|
JB I_CalculateC5Speed1
|
|||
|
|
|||
|
Mov CX, DX
|
|||
|
|
|||
|
I_CalculateC5Speed1:
|
|||
|
Sub DX, CX
|
|||
|
PopF
|
|||
|
JNZ I_CalculateC5Speed16Bit
|
|||
|
|
|||
|
I_CalculateC5Speed8Bit:
|
|||
|
LodsB
|
|||
|
StosW
|
|||
|
Loop I_CalculateC5Speed8Bit
|
|||
|
Jmp I_CalculateC5Speed2
|
|||
|
|
|||
|
I_CalculateC5Speed16Bit:
|
|||
|
Rep MovsW
|
|||
|
|
|||
|
I_CalculateC5Speed2:
|
|||
|
Mov CX, DX
|
|||
|
Xor AX, AX
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Call Fourier_Transform
|
|||
|
|
|||
|
Comment ~
|
|||
|
|
|||
|
Mov DX, 1
|
|||
|
JZ I_CalculateC5BitSkip
|
|||
|
|
|||
|
Inc DX
|
|||
|
|
|||
|
I_CalculateC5BitSkip:
|
|||
|
Mov EBP, ECX ; EBP = number of samples
|
|||
|
|
|||
|
I_CalculateC5Speed1:
|
|||
|
Sub EBP, 512
|
|||
|
JC I_CalculateC5SpeedDisplay
|
|||
|
|
|||
|
Mov DI, 16384
|
|||
|
Mov BX, 512
|
|||
|
|
|||
|
I_CalculateC5Loop1:
|
|||
|
Cmp DX, 2
|
|||
|
JE I_CalculateC5Speed16Bit
|
|||
|
|
|||
|
I_CalculateC5Speed8Bit:
|
|||
|
Mov AL, [SI]
|
|||
|
Mov AH, AL
|
|||
|
Jmp I_CalculateC5SpeedTransfer
|
|||
|
|
|||
|
I_CalculateC5Speed16Bit:
|
|||
|
Mov AX, [SI]
|
|||
|
|
|||
|
I_CalculateC5SpeedTransfer:
|
|||
|
; StosW
|
|||
|
Mov CX, 4
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Add SI, DX
|
|||
|
JC I_CalculateC5UpdateSampleLocation
|
|||
|
|
|||
|
I_CalculateC5Continue:
|
|||
|
Dec BX
|
|||
|
JNZ I_CalculateC5Loop1
|
|||
|
|
|||
|
; OK.. do fourier
|
|||
|
Push DS
|
|||
|
PushAD
|
|||
|
|
|||
|
Call Fourier_Transform
|
|||
|
|
|||
|
; Now accumulate
|
|||
|
Mov CX, 1024-64
|
|||
|
Mov SI, 24576+64*4
|
|||
|
Mov DI, 32768+64*4
|
|||
|
|
|||
|
I_CalculateC5Speed2:
|
|||
|
FLd DWord Ptr [SI]
|
|||
|
FAdd DWord Ptr [DI]
|
|||
|
FStP DWord Ptr [DI]
|
|||
|
Add SI, 4
|
|||
|
Add DI, 4
|
|||
|
Loop I_CalculateC5Speed2
|
|||
|
|
|||
|
PopAD
|
|||
|
Pop DS
|
|||
|
Jmp I_CalculateC5Speed1
|
|||
|
|
|||
|
I_CalculateC5UpdateSampleLocation:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_CalculateC5Continue
|
|||
|
|
|||
|
I_CalculateC5SpeedDisplay:
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
~
|
|||
|
Mov SI, 24768
|
|||
|
Xor CX, CX
|
|||
|
Xor EAX, EAX
|
|||
|
Xor EBX, EBX
|
|||
|
|
|||
|
I_CalculateC5Speed3:
|
|||
|
Cmp EAX, [SI]
|
|||
|
JAE I_CalculateC5Speed4
|
|||
|
|
|||
|
Mov BX, CX
|
|||
|
Mov EAX, [SI]
|
|||
|
|
|||
|
I_CalculateC5Speed4:
|
|||
|
Add SI, 4
|
|||
|
Inc CX
|
|||
|
|
|||
|
Cmp CX, 1024
|
|||
|
JB I_CalculateC5Speed3
|
|||
|
|
|||
|
; Have BX = wavelength.
|
|||
|
Mov EAX, 17145893 ; = C5Freq * 65536
|
|||
|
Mul EBX ; EDX:EAX = frequency in 48:16 format
|
|||
|
ShRD EAX, EDX, 16
|
|||
|
|
|||
|
Mov CS:C5Speed, EAX
|
|||
|
; EAX = C5Freq
|
|||
|
Mov DI, Offset O1_C5FrequencyList
|
|||
|
Call M_Object1ListDefault
|
|||
|
|
|||
|
I_CalculateC5SpeedEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
!
|
|||
|
|
|||
|
EndP I_CalculateC5Speed
|
|||
|
|
|||
|
;<3B><><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 I_PrintC5Frequency Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Push C5Speed
|
|||
|
|
|||
|
Mov SI, Offset C5FrequencyText
|
|||
|
Mov AH, 20h
|
|||
|
Mov DI, (27+27*80)*2
|
|||
|
Call S_DrawString
|
|||
|
|
|||
|
Pop AX ; Clean up stack.
|
|||
|
Pop BX
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PrintC5Frequency
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_DeleteInstrument Far
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmDeleteInstrument
|
|||
|
Mov CX, 4
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_DeleteInstrument1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call I_GetInstrumentOffset ; Gets DS:BX
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
Add BX, 41h
|
|||
|
|
|||
|
I_DeleteInstrument2:
|
|||
|
Mov AL, [BX]
|
|||
|
And AX, 0FFh
|
|||
|
JZ I_DeleteInstrument3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push BX
|
|||
|
Push CX
|
|||
|
|
|||
|
Dec AX
|
|||
|
|
|||
|
Call Music_ReleaseSample
|
|||
|
Call Music_ClearSampleName
|
|||
|
|
|||
|
Pop CX
|
|||
|
Pop BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
I_DeleteInstrument3:
|
|||
|
Add BX, 2
|
|||
|
Loop I_DeleteInstrument2
|
|||
|
|
|||
|
Call I_InstrumentClear ; This sends network data already
|
|||
|
|
|||
|
I_DeleteInstrument1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DeleteInstrument
|
|||
|
|
|||
|
;<3B><><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 I_ConvertSample Far ; Signed/Unsigned
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov CX, BX
|
|||
|
Inc CX
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov SI, [64912+BX]
|
|||
|
Test Byte Ptr [DS:SI+12h], 1
|
|||
|
JZ I_ConvertSample1
|
|||
|
|
|||
|
Push CX
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmConvertList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop AX ; AX = sample number
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_ConvertSample1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; DS:SI = location
|
|||
|
JC I_ConvertSample1 ; CX = length.
|
|||
|
|
|||
|
SetNZ BL
|
|||
|
Xor BH, BH
|
|||
|
Add SI, BX
|
|||
|
|
|||
|
Inc BX
|
|||
|
|
|||
|
|
|||
|
I_ConvertSample2:
|
|||
|
Xor Byte Ptr [SI], 80h
|
|||
|
Add SI, BX
|
|||
|
JC I_ConvertSample3
|
|||
|
|
|||
|
I_ConvertSample4:
|
|||
|
LoopD I_ConvertSample2
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_ConvertSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_ConvertSample3:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_ConvertSample4
|
|||
|
|
|||
|
EndP I_ConvertSample
|
|||
|
|
|||
|
;<3B><><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 I_InvertSample Far ; Signed/Unsigned
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov CX, BX
|
|||
|
Inc CX
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov SI, [64912+BX]
|
|||
|
Test Byte Ptr [DS:SI+12h], 1
|
|||
|
JZ I_InvertSample1
|
|||
|
|
|||
|
XChg AX, CX ; AX = sample number.
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; DS:SI = location
|
|||
|
JC I_InvertSample1 ; CX = length.
|
|||
|
JNZ I_InvertSample_16Bit
|
|||
|
|
|||
|
I_InvertSample2:
|
|||
|
Neg Byte Ptr [SI]
|
|||
|
Add SI, 1
|
|||
|
JC I_InvertSample3
|
|||
|
|
|||
|
I_InvertSample4:
|
|||
|
LoopD I_InvertSample2
|
|||
|
|
|||
|
I_InvertSampleExit:
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_InvertSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_InvertSample3:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_InvertSample4
|
|||
|
|
|||
|
I_InvertSample_16Bit:
|
|||
|
Neg Word Ptr [SI]
|
|||
|
Add SI, 2
|
|||
|
JC I_InvertSample_16Bit2
|
|||
|
|
|||
|
I_InvertSample_16Bit1:
|
|||
|
LoopD I_InvertSample_16Bit
|
|||
|
|
|||
|
Jmp I_InvertSampleExit
|
|||
|
|
|||
|
I_InvertSample_16Bit2:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_InvertSample_16Bit1
|
|||
|
|
|||
|
EndP I_InvertSample
|
|||
|
|
|||
|
;<3B><><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 I_CutSampleBeforeLoopUpdateLoop Near
|
|||
|
|
|||
|
Sub [DS:BX+DI], EDX
|
|||
|
JNC I_CutSampleBeforeLoopUpdateLoop1
|
|||
|
|
|||
|
Mov DWord Ptr [DS:BX+DI], 0
|
|||
|
|
|||
|
I_CutSampleBeforeLoopUpdateLoop1:
|
|||
|
Add DI, 4
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CutSampleBeforeLoopUpdateLoop
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc I_CutSampleBeforeLoop Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Cmp DWord Ptr [DS:BX+34h], 0
|
|||
|
; Test Byte Ptr [DS:BX+12h], 10h
|
|||
|
JZ I_CutSampleBeforeLoop1
|
|||
|
|
|||
|
Push DS
|
|||
|
Push BX
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmCutSample
|
|||
|
Mov CX, 4
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_CutSampleBeforeLoop1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Mov EDX, [DS:BX+34h]
|
|||
|
Test Byte Ptr [DS:BX+12h], 32
|
|||
|
JZ I_CutSampleBeforeLoop2
|
|||
|
|
|||
|
Mov EAX, [DS:BX+40h]
|
|||
|
|
|||
|
Cmp EDX, EAX
|
|||
|
JB I_CutSampleBeforeLoop2
|
|||
|
Mov EDX, EAX
|
|||
|
|
|||
|
I_CutSampleBeforeLoop2:
|
|||
|
Mov DI, 34h
|
|||
|
Call I_CutSampleBeforeLoopUpdateLoop ; BX+34h - Begin
|
|||
|
Call I_CutSampleBeforeLoopUpdateLoop ; BX+38h - End
|
|||
|
|
|||
|
Add DI, 4
|
|||
|
Call I_CutSampleBeforeLoopUpdateLoop ; BX+40h - SusLBeg
|
|||
|
Call I_CutSampleBeforeLoopUpdateLoop ; BX+44h - SusLEnd
|
|||
|
|
|||
|
I_CutSampleBeforeLoop4:
|
|||
|
Sub [BX+30h], EDX
|
|||
|
Mov ECX, [BX+30h]
|
|||
|
|
|||
|
Test Byte Ptr [BX+12h], 2
|
|||
|
JZ I_CutSampleBeforeLoop6
|
|||
|
|
|||
|
Add EDX, EDX
|
|||
|
Add ECX, ECX
|
|||
|
|
|||
|
I_CutSampleBeforeLoop6:
|
|||
|
Mov ESI, EDX
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
; To diskdata segment first.
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Xor EDI, EDI
|
|||
|
|
|||
|
I_CutSampleBeforeLoop7:
|
|||
|
Mov AL, [SI]
|
|||
|
Mov [ES:DI], AL
|
|||
|
|
|||
|
Add SI, 1
|
|||
|
JC I_CutSampleBeforeLoop8
|
|||
|
|
|||
|
I_CutSampleBeforeLoop9:
|
|||
|
Add DI, 1
|
|||
|
JC I_CutSampleBeforeLoop10
|
|||
|
|
|||
|
I_CutSampleBeforeLoop11:
|
|||
|
LoopD I_CutSampleBeforeLoop7
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
Mov CX, DI
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES ; Swap DS and ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_CutSampleBeforeLoop1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_CutSampleBeforeLoop8:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_CutSampleBeforeLoop9
|
|||
|
|
|||
|
I_CutSampleBeforeLoop10:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES ; Swap DS and ES
|
|||
|
|
|||
|
Mov CX, 16384
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
|
|||
|
Add EDI, 10000h
|
|||
|
|
|||
|
Int 3
|
|||
|
Jmp I_CutSampleBeforeLoop11
|
|||
|
|
|||
|
EndP I_CutSampleBeforeLoop
|
|||
|
|
|||
|
;<3B><><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 I_CutSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Cmp DWord Ptr [DS:BX+38h], 0
|
|||
|
; Test Byte Ptr [DS:BX+12h], 10h ; Loop?
|
|||
|
JZ I_CutSample1
|
|||
|
|
|||
|
Push DS
|
|||
|
Push BX
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmCutSample
|
|||
|
Mov CX, 4
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_CutSample1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Mov EAX, [DS:BX+38h]
|
|||
|
Mov EDX, [DS:BX+44h]
|
|||
|
Cmp EAX, EDX
|
|||
|
JAE I_CutSample2
|
|||
|
Mov EAX, EDX
|
|||
|
|
|||
|
I_CutSample2:
|
|||
|
Mov [DS:BX+30h], EAX
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_CutSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
Proc I_CutSampleCheckValue Near
|
|||
|
|
|||
|
Cmp DWord Ptr [DS:BX+DI], EAX
|
|||
|
JBE I_CutSampleCheckValue1
|
|||
|
|
|||
|
Mov [DS:BX+DI], EAX
|
|||
|
|
|||
|
I_CutSampleCheckValue1:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CutSampleCheckValue
|
|||
|
|
|||
|
EndP I_CutSample
|
|||
|
|
|||
|
;<3B><><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 I_ClearSampleName Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SamplePos, 0
|
|||
|
|
|||
|
I_ClearSampleName2:
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov DI, BX
|
|||
|
|
|||
|
I_ClearSampleName3:
|
|||
|
Add DI, 4
|
|||
|
|
|||
|
Mov CX, 6
|
|||
|
Xor AX, AX
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Add DI, 4
|
|||
|
Mov CX, 13
|
|||
|
Rep StosW
|
|||
|
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Inc AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ClearSampleName
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InsertSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov SI, [DS:64912+(99-1)*2]
|
|||
|
Test Byte Ptr [SI+12h], 1
|
|||
|
JNZ I_InsertSampleEnd
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Cmp BL, 98
|
|||
|
JE I_InsertSampleEnd
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DL, BL
|
|||
|
Push BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
|
|||
|
Mov AX, 98
|
|||
|
Sub AX, BX
|
|||
|
Mov CX, 80
|
|||
|
Add BX, BX
|
|||
|
Mul CX
|
|||
|
Mov SI, [DS:64912+BX]
|
|||
|
Add SI, AX
|
|||
|
Dec SI
|
|||
|
LEA DI, [SI+80]
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
StD
|
|||
|
Rep MovsB
|
|||
|
ClD
|
|||
|
|
|||
|
Mov DWord Ptr [SI+1+48h], 0
|
|||
|
Mov Byte Ptr [SI+1+12h], 0
|
|||
|
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
Pop AX
|
|||
|
Push AX
|
|||
|
Call Music_ClearSampleName
|
|||
|
|
|||
|
Pop DX
|
|||
|
Inc DX ; DL = instrument
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_InsertSampleSampleMode
|
|||
|
; Instrument mode..
|
|||
|
; step through inst.
|
|||
|
|
|||
|
Xor EAX, EAX
|
|||
|
|
|||
|
I_InsertSample4:
|
|||
|
Mov SI, [DS:64712+EAX*2]
|
|||
|
Add SI, 41h
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_InsertSample5:
|
|||
|
Cmp [SI], DL
|
|||
|
JB I_InsertSample6
|
|||
|
|
|||
|
Cmp Byte Ptr [SI], 99
|
|||
|
JAE I_InsertSample6
|
|||
|
|
|||
|
Inc Byte Ptr [SI]
|
|||
|
|
|||
|
I_InsertSample6:
|
|||
|
Add SI, 2
|
|||
|
Loop I_InsertSample5
|
|||
|
|
|||
|
Inc AX
|
|||
|
Cmp AX, 99
|
|||
|
JB I_InsertSample4
|
|||
|
|
|||
|
Jmp I_InsertSampleFinished
|
|||
|
|
|||
|
I_InsertSampleSampleMode:
|
|||
|
Call PE_InsertInstrument
|
|||
|
|
|||
|
I_InsertSampleFinished:
|
|||
|
Call I_DrawWaveform
|
|||
|
|
|||
|
I_InsertSampleEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InsertSample
|
|||
|
|
|||
|
;<3B><><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 I_RemoveSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Test Byte Ptr [BX+12h], 1
|
|||
|
JNZ I_RemoveSampleEnd
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DL, BL
|
|||
|
Push BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
|
|||
|
Mov AX, 98
|
|||
|
Sub AX, BX
|
|||
|
Mov CX, 80
|
|||
|
Add BX, BX
|
|||
|
Mul CX
|
|||
|
Mov DI, [DS:64912+BX]
|
|||
|
LEA SI, [DI+80]
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Pop DX
|
|||
|
Inc DX ; DL = instrument
|
|||
|
|
|||
|
Push DS
|
|||
|
Push DI
|
|||
|
|
|||
|
Mov DWord Ptr [DI+48h], 0
|
|||
|
Mov Byte Ptr [DI+12h], 0
|
|||
|
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_RemoveSampleSampleMode
|
|||
|
; Instrument mode..
|
|||
|
; step through inst.
|
|||
|
|
|||
|
Xor EAX, EAX
|
|||
|
|
|||
|
I_RemoveSample4:
|
|||
|
Mov SI, [DS:64712+EAX*2]
|
|||
|
Add SI, 41h
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_RemoveSample5:
|
|||
|
Cmp [SI], DL
|
|||
|
JB I_RemoveSample6
|
|||
|
|
|||
|
Dec Byte Ptr [SI]
|
|||
|
|
|||
|
I_RemoveSample6:
|
|||
|
Add SI, 2
|
|||
|
Loop I_RemoveSample5
|
|||
|
|
|||
|
Inc AX
|
|||
|
Cmp AX, 99
|
|||
|
JB I_RemoveSample4
|
|||
|
|
|||
|
Jmp I_RemoveSampleFinished
|
|||
|
|
|||
|
I_RemoveSampleSampleMode:
|
|||
|
Call PE_DeleteInstrument
|
|||
|
|
|||
|
I_RemoveSampleFinished:
|
|||
|
Call I_DrawWaveform
|
|||
|
|
|||
|
Pop DI
|
|||
|
Pop ES
|
|||
|
Jmp I_ClearSampleName3
|
|||
|
|
|||
|
I_RemoveSampleEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_RemoveSample
|
|||
|
|
|||
|
;<3B><><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 I_InsertInstrument Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Cmp BL, 98
|
|||
|
JE I_InsertInstrumentEnd
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DL, BL
|
|||
|
Push BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
|
|||
|
Mov AX, 98
|
|||
|
Sub AX, BX
|
|||
|
Mov CX, 554
|
|||
|
Add BX, BX
|
|||
|
Mul CX
|
|||
|
Mov SI, [DS:64712+BX]
|
|||
|
Add SI, AX
|
|||
|
Dec SI
|
|||
|
LEA DI, [SI+554]
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
StD
|
|||
|
Rep MovsB
|
|||
|
ClD
|
|||
|
|
|||
|
Pop DX
|
|||
|
Inc DX ; DL = instrument
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_InsertInstrumentFinished
|
|||
|
|
|||
|
Call PE_InsertInstrument
|
|||
|
|
|||
|
I_InsertInstrumentFinished:
|
|||
|
Jmp I_InstrumentClear ; Sends network data
|
|||
|
|
|||
|
I_InsertInstrumentEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InsertInstrument
|
|||
|
|
|||
|
;<3B><><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 I_RemoveInstrument Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DL, BL
|
|||
|
Push BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
|
|||
|
Mov AX, 98
|
|||
|
Sub AX, BX
|
|||
|
Mov CX, 554
|
|||
|
Add BX, BX
|
|||
|
Mul CX
|
|||
|
MOv DI, [DS:64712+BX]
|
|||
|
LEA SI, [DI+554]
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Pop DX
|
|||
|
Inc DX ; DL = instrument
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_RemoveInstrumentFinished
|
|||
|
|
|||
|
Call PE_DeleteInstrument
|
|||
|
|
|||
|
I_RemoveInstrumentFinished:
|
|||
|
Mov AX, 98
|
|||
|
Call Music_ClearInstrument
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_RemoveInstrumentEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_RemoveInstrument
|
|||
|
|
|||
|
;<3B><><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 GetSampleNumber ; Carry if not a num.
|
|||
|
; DX otherwise,
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov SI, Offset SampleNumberInput
|
|||
|
Xor DX, DX
|
|||
|
|
|||
|
GetSampleNumber1:
|
|||
|
LodsB
|
|||
|
And AL, AL
|
|||
|
JZ GetSampleNumber2
|
|||
|
|
|||
|
Cmp AL, '0'
|
|||
|
JB GetSampleNumber3
|
|||
|
Cmp AL, '9'
|
|||
|
JA GetSampleNumber3
|
|||
|
|
|||
|
Sub AL, '0'
|
|||
|
XChg DL, AL
|
|||
|
Mov AH, 10
|
|||
|
Mul AH
|
|||
|
Add DL, AL
|
|||
|
|
|||
|
Jmp GetSampleNumber1
|
|||
|
|
|||
|
GetSampleNumber3:
|
|||
|
StC
|
|||
|
Ret
|
|||
|
|
|||
|
GetSampleNumber2:
|
|||
|
Test DX, DX
|
|||
|
JZ GetSampleNumber3
|
|||
|
|
|||
|
; ClC
|
|||
|
Ret
|
|||
|
|
|||
|
EndP GetSampleNumber
|
|||
|
|
|||
|
;<3B><><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 GetNumberInput ; DI = Offset of list.
|
|||
|
; Returns DX with sample number.
|
|||
|
|
|||
|
Push DI
|
|||
|
|
|||
|
Mov DI, Offset SampleNumberInput
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
Xor AL, AL
|
|||
|
Mov CX, 4
|
|||
|
Rep StosB
|
|||
|
|
|||
|
Pop DI
|
|||
|
|
|||
|
Call S_SaveScreen
|
|||
|
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Call S_RestoreScreen
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ GetNumberInput1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Call GetSampleNumber
|
|||
|
JC GetNumberInput1
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
GetNumberInput1:
|
|||
|
Pop AX ; Add SP, 2
|
|||
|
Mov AX, 1
|
|||
|
RetF
|
|||
|
|
|||
|
EndP GetNumberInput
|
|||
|
|
|||
|
;<3B><><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 I_ExchangeSamples Far
|
|||
|
|
|||
|
; Clear input...
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_ExchangeSampleList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Mov SI, DX
|
|||
|
Dec SI
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Cmp BX, SI
|
|||
|
JE I_ExchangeSamples1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
Mov DI, [DS:64912+BX]
|
|||
|
Mov SI, [DS:64912+SI] ; DS:SI, ES:DI point to
|
|||
|
; sample headers
|
|||
|
|
|||
|
Mov CX, 80
|
|||
|
|
|||
|
I_ExchangeSamples2:
|
|||
|
Mov AL, [ES:DI]
|
|||
|
MovsB
|
|||
|
Mov [DS:SI-1], AL
|
|||
|
|
|||
|
Loop I_ExchangeSamples2
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_ExchangeSamples1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ExchangeSamples
|
|||
|
|
|||
|
;<3B><><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 I_SwapSamples Far
|
|||
|
|
|||
|
; Clear input...
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_SwapSampleList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Mov SI, DX
|
|||
|
Dec SI
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DH, BL
|
|||
|
Inc DH ; DH/DL = samples to swap
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Cmp DL, DH
|
|||
|
JE I_SwapSamples1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
Mov DI, [DS:64912+BX]
|
|||
|
Mov SI, [DS:64912+SI] ; DS:SI, ES:DI point to
|
|||
|
; sample headers
|
|||
|
|
|||
|
Mov CX, 80
|
|||
|
|
|||
|
I_SwapSamples2:
|
|||
|
Mov AL, [ES:DI] ; Swapping headers.
|
|||
|
MovsB
|
|||
|
Mov [DS:SI-1], AL
|
|||
|
|
|||
|
Loop I_SwapSamples2
|
|||
|
|
|||
|
; Now to swap pattern
|
|||
|
; stuff...
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_SwapSamples3
|
|||
|
; Instrument mode..
|
|||
|
; step through inst.
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_SwapSamples4:
|
|||
|
Push AX
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
Add BX, BX
|
|||
|
Mov SI, [DS:64712+BX]
|
|||
|
Add SI, 41h
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_SwapSamples5:
|
|||
|
Mov AL, [SI]
|
|||
|
Cmp AL, DL
|
|||
|
JNE I_SwapSamples6
|
|||
|
|
|||
|
Mov [SI], DH
|
|||
|
Jmp I_SwapSamples7
|
|||
|
|
|||
|
I_SwapSamples6:
|
|||
|
Cmp AL, DH
|
|||
|
JNE I_SwapSamples7
|
|||
|
|
|||
|
Mov [SI], DL
|
|||
|
|
|||
|
I_SwapSamples7:
|
|||
|
Add SI, 2
|
|||
|
Loop I_SwapSamples5
|
|||
|
|
|||
|
Pop AX
|
|||
|
|
|||
|
Inc AX
|
|||
|
Cmp AX, 99
|
|||
|
JB I_SwapSamples4
|
|||
|
|
|||
|
Jmp I_SwapSamples8
|
|||
|
|
|||
|
I_SwapSamples3: ; Sample mode..
|
|||
|
Call PE_SwapInstruments
|
|||
|
|
|||
|
I_SwapSamples8:
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_SwapSamples1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SwapSamples
|
|||
|
|
|||
|
;<3B><><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 I_ReplaceSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_ReplaceSampleList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DH, BL
|
|||
|
Inc DH ; DH/DL = samples to swap
|
|||
|
|
|||
|
Cmp DL, DH
|
|||
|
JE I_ReplaceSample1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
; Now to swap pattern
|
|||
|
; stuff...
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_ReplaceSample3
|
|||
|
; Instrument mode..
|
|||
|
; step through inst.
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_ReplaceSample4:
|
|||
|
Push AX
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
Add BX, BX
|
|||
|
Mov SI, [DS:64712+BX]
|
|||
|
Add SI, 41h
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_ReplaceSample5:
|
|||
|
Mov AL, [SI]
|
|||
|
|
|||
|
Cmp AL, DH
|
|||
|
JNE I_ReplaceSample7
|
|||
|
|
|||
|
Mov [SI], DL
|
|||
|
|
|||
|
I_ReplaceSample7:
|
|||
|
Add SI, 2
|
|||
|
Loop I_ReplaceSample5
|
|||
|
|
|||
|
Pop AX
|
|||
|
|
|||
|
Inc AX
|
|||
|
Cmp AX, 99
|
|||
|
JBE I_ReplaceSample4
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_ReplaceSample3: ; Sample mode..
|
|||
|
XChg DH, DL
|
|||
|
Or DH, 80h
|
|||
|
Call PE_SwapInstruments
|
|||
|
|
|||
|
I_ReplaceSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ReplaceSample
|
|||
|
|
|||
|
;<3B><><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 I_ReMix
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
; OK...
|
|||
|
Call I_GetSampleOffset
|
|||
|
Mov EDX, CS:NewSampleSize
|
|||
|
Mov AX, 99
|
|||
|
|
|||
|
Test Byte Ptr [BX+12h], 2
|
|||
|
JZ I_ReMix1
|
|||
|
|
|||
|
Add EDX, EDX
|
|||
|
|
|||
|
I_ReMix1:
|
|||
|
; Limit size of EDX...
|
|||
|
Cmp EDX, 4177920
|
|||
|
JBE I_ReMixLimitMaxSize
|
|||
|
|
|||
|
Mov EDX, 4177920
|
|||
|
Mov CS:NewSampleSize, EDX
|
|||
|
|
|||
|
Test Byte Ptr [BX+12h], 2
|
|||
|
JZ I_ReMixLimitMaxSize
|
|||
|
|
|||
|
ShR CS:NewSampleSize, 1
|
|||
|
|
|||
|
I_ReMixLimitMaxSize:
|
|||
|
Call Music_AllocateSample ; Returns ES:DI
|
|||
|
Mov AX, ES
|
|||
|
And AX, AX
|
|||
|
JNZ I_ReMixEnoughMem
|
|||
|
|
|||
|
Call PEFunction_OutOfMemoryMessage
|
|||
|
|
|||
|
I_ReMixNoMix:
|
|||
|
Ret
|
|||
|
|
|||
|
I_ReMixEnoughMem:
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Call PE_GetLastInstrument ; Into BX
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Returns DS:ESI, ECX
|
|||
|
JNZ I_ReMix16Bit
|
|||
|
|
|||
|
I_ReMix8Bit:
|
|||
|
Mov EAX, ECX
|
|||
|
Xor EDX, EDX
|
|||
|
Div CS:NewSampleSize
|
|||
|
|
|||
|
Mov BP, AX
|
|||
|
ShR EAX, 16
|
|||
|
JNZ I_ReMixNoMix
|
|||
|
|
|||
|
Xor EAX, EAX ; BP:AX = skip value...
|
|||
|
Div CS:NewSampleSize
|
|||
|
|
|||
|
ShR EAX, 16
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
; BP:BX = skip value.
|
|||
|
Xor ESI, ESI ; DS:ESI = source
|
|||
|
Xor EDI, EDI ; Go from the start!
|
|||
|
Xor CX, CX ; CX = error.
|
|||
|
; ES:EDI = destination
|
|||
|
|
|||
|
I_ReMix8Bit2:
|
|||
|
Cmp CS:Interpolate, 0
|
|||
|
JNE I_ReMix8BitInterpolate
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Jmp I_ReMix8BitStore
|
|||
|
|
|||
|
I_ReMix8BitInterpolate:
|
|||
|
MovSX AX, Byte Ptr [SI]
|
|||
|
Mov DX, 100h
|
|||
|
Sub DL, CH
|
|||
|
SbB DH, 0
|
|||
|
IMul DX ; AX = [SI]*(1-Remainder)*256
|
|||
|
|
|||
|
Push AX
|
|||
|
|
|||
|
Add SI, 1
|
|||
|
JNC I_ReMix8BitInterpolate2
|
|||
|
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
|
|||
|
I_ReMix8BitInterpolate2:
|
|||
|
MovSX AX, Byte Ptr [SI]
|
|||
|
Mov DL, CH
|
|||
|
Xor DH, DH
|
|||
|
Mul DX
|
|||
|
|
|||
|
Pop DX ; DX = Old AX = [SI]*(1-Remainder)*256
|
|||
|
Add AX, DX
|
|||
|
Add AX, 80h ; Rounding.
|
|||
|
Mov AL, AH
|
|||
|
|
|||
|
Sub ESI, 1
|
|||
|
|
|||
|
I_ReMix8BitStore:
|
|||
|
Mov [ES:DI], AL
|
|||
|
|
|||
|
Add CX, BX
|
|||
|
AdC SI, BP
|
|||
|
JC I_ReMix8Bit3
|
|||
|
|
|||
|
I_ReMix8Bit4:
|
|||
|
Add DI, 1
|
|||
|
JC I_ReMix8Bit5
|
|||
|
|
|||
|
I_ReMix8Bit6:
|
|||
|
Cmp EDI, CS:NewSampleSize
|
|||
|
JB I_ReMix8Bit2
|
|||
|
|
|||
|
Jmp I_ReMixCleanUp
|
|||
|
|
|||
|
I_ReMix8Bit3:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_Remix8Bit4
|
|||
|
|
|||
|
I_ReMix8Bit5:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov CX, 16384
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
|
|||
|
Add EDI, 10000h
|
|||
|
|
|||
|
Call I_RepositionSample
|
|||
|
Jmp I_ReMix8Bit6
|
|||
|
|
|||
|
I_ReMix16Bit:
|
|||
|
Mov EAX, ECX
|
|||
|
Xor EDX, EDX
|
|||
|
Div CS:NewSampleSize
|
|||
|
|
|||
|
Mov BP, AX
|
|||
|
Add BP, BP
|
|||
|
ShR EAX, 15
|
|||
|
JNZ I_ReMixNoMix
|
|||
|
|
|||
|
Xor EAX, EAX ; BP:AX = skip value...
|
|||
|
Div CS:NewSampleSize
|
|||
|
|
|||
|
ShR EAX, 16
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
; BP:BX = skip value.
|
|||
|
Xor ESI, ESI ; DS:ESI = source
|
|||
|
Xor EDI, EDI ; Go from the start!
|
|||
|
Xor CX, CX ; CX = error.
|
|||
|
; ES:EDI = destination
|
|||
|
|
|||
|
I_ReMix16Bit2:
|
|||
|
Cmp CS:Interpolate, 0
|
|||
|
JNE I_ReMix16BitInterpolate
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
Jmp I_ReMix16BitStore
|
|||
|
|
|||
|
I_ReMix16BitInterpolate:
|
|||
|
Mov AX, [SI] ; AX = [SI]*(1-Remainder)*256
|
|||
|
Mov DX, 100h
|
|||
|
Sub DL, CH
|
|||
|
SbB DH, 0
|
|||
|
IMul DX ; DX:AX = [SI]*(1-Remainder)*256
|
|||
|
|
|||
|
Push DX
|
|||
|
Push AX
|
|||
|
|
|||
|
Add SI, 2
|
|||
|
JNC I_ReMix16BitInterpolate2
|
|||
|
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
|
|||
|
I_ReMix16BitInterpolate2:
|
|||
|
Mov AX, [SI]
|
|||
|
|
|||
|
MovZX DX, CH
|
|||
|
IMul DX ; DX:AX = Remainder*256
|
|||
|
ShL EDX, 16
|
|||
|
Mov DX, AX
|
|||
|
|
|||
|
Pop EAX
|
|||
|
|
|||
|
Add EAX, EDX
|
|||
|
Add EAX, 80h ; Rounding.
|
|||
|
ShR EAX, 8
|
|||
|
|
|||
|
Sub ESI, 2
|
|||
|
|
|||
|
I_ReMix16BitStore:
|
|||
|
Mov [ES:DI], AX
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Add CX, BX
|
|||
|
SetC AL
|
|||
|
Add AX, AX
|
|||
|
Add AX, BP
|
|||
|
Add SI, AX
|
|||
|
JC I_ReMix16Bit3
|
|||
|
|
|||
|
I_ReMix16Bit4:
|
|||
|
Add DI, 2
|
|||
|
JC I_ReMix16Bit5
|
|||
|
|
|||
|
I_ReMix16Bit6:
|
|||
|
Mov EAX, EDI
|
|||
|
ShR EAX, 1
|
|||
|
Cmp EAX, CS:NewSampleSize
|
|||
|
JB I_ReMix16Bit2
|
|||
|
|
|||
|
Jmp I_ReMixCleanUp
|
|||
|
|
|||
|
I_ReMix16Bit3:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_Remix16Bit4
|
|||
|
|
|||
|
I_ReMix16Bit5:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov CX, 16384
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
|
|||
|
Add EDI, 10000h
|
|||
|
|
|||
|
Call I_RepositionSample
|
|||
|
Jmp I_ReMix16Bit6
|
|||
|
|
|||
|
I_ReMixCleanUp:
|
|||
|
; Copy leftover stuff...
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov CX, DI
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Call I_GetSampleOffset ; Gets DS:BX
|
|||
|
Mov SI, BX
|
|||
|
Mov ECX, [SI+30h]
|
|||
|
Mov EBX, CS:NewSampleSize
|
|||
|
; ECX = length of old samp
|
|||
|
; EBX = length of new samp
|
|||
|
Mov [SI+30h], EBX
|
|||
|
Add SI, 34h
|
|||
|
|
|||
|
Call Near Ptr I_ReMix5
|
|||
|
Call Near Ptr I_ReMix5
|
|||
|
Call Near Ptr I_ReMix5
|
|||
|
Call Near Ptr I_ReMix5
|
|||
|
Call Near Ptr I_ReMix5
|
|||
|
; Now grab the data from Inst99
|
|||
|
Call I_SwapMemoryAllocation
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
I_ReMix5:
|
|||
|
Mov EAX, [SI]
|
|||
|
Mul EBX
|
|||
|
|
|||
|
Cmp EDX, ECX
|
|||
|
JAE I_ReMix6
|
|||
|
|
|||
|
Div ECX
|
|||
|
Cmp EAX, 9999999
|
|||
|
JB I_ReMix7
|
|||
|
|
|||
|
I_ReMix6:
|
|||
|
Mov EAX, 9999999
|
|||
|
|
|||
|
I_ReMix7:
|
|||
|
Mov [SI], EAX
|
|||
|
Add SI, 4
|
|||
|
|
|||
|
I_ReMixEnd:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ReMix
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_ResizeSample Far
|
|||
|
|
|||
|
Mov CS:Interpolate, 1
|
|||
|
Jmp I_ResizeJumpPoint
|
|||
|
|
|||
|
EndP I_ResizeSample
|
|||
|
|
|||
|
;<3B><><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 I_ResizeSampleNoInt Far
|
|||
|
|
|||
|
Mov CS:Interpolate, 0
|
|||
|
|
|||
|
I_ResizeJumpPoint:
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Mov AL, [BX+12h]
|
|||
|
Test AL, 1
|
|||
|
JZ I_ResizeSampleNoInt1
|
|||
|
|
|||
|
And AL, 2
|
|||
|
Mov CS:Quality, AL
|
|||
|
|
|||
|
Cmp DWord Ptr [DS:BX+30h], 0
|
|||
|
JE I_ResizeSampleNoInt1
|
|||
|
|
|||
|
Mov EAX, [DS:BX+30h] ; Old length
|
|||
|
Mov CS:NewSampleSize, EAX
|
|||
|
|
|||
|
Call F_Reset5NumInputPos
|
|||
|
Call S_SaveScreen
|
|||
|
|
|||
|
Mov DI, Offset O1_ResizeSampleList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Call S_RestoreScreen
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_ResizeSampleNoInt1
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov EDX, NewSampleSize
|
|||
|
And EDX, EDX
|
|||
|
JZ I_ResizeSampleNoInt1
|
|||
|
|
|||
|
Call I_Remix
|
|||
|
|
|||
|
I_ResizeSampleNoInt1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ResizeSampleNoInt
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_CenterSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Gets DS:SI, and ECX.
|
|||
|
; Zero flag if 8 bit.
|
|||
|
JNC I_CenterSample1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_CenterSample1:
|
|||
|
Push AX ; Remember sample num.
|
|||
|
; Scan through wave first,
|
|||
|
; and find max deviation from
|
|||
|
; mean.
|
|||
|
JNZ I_CenterSamplePre16Bit1
|
|||
|
Mov BL, [SI]
|
|||
|
Mov DL, [SI]
|
|||
|
|
|||
|
I_CenterSamplePre8Bit1:
|
|||
|
Mov AL, [SI]
|
|||
|
Cmp AL, BL
|
|||
|
JL I_CenterSamplePre8Bit3
|
|||
|
Cmp AL, DL
|
|||
|
JG I_CenterSamplePre8Bit4
|
|||
|
|
|||
|
I_CenterSamplePre8Bit2:
|
|||
|
Add SI, 1
|
|||
|
JC I_CenterSamplePre8BitNextBlock
|
|||
|
|
|||
|
I_CenterSamplePre8Bit5:
|
|||
|
LoopD I_CenterSamplePre8Bit1
|
|||
|
|
|||
|
MovSX BX, BL
|
|||
|
MovSX DX, DL
|
|||
|
|
|||
|
Add BX, DX
|
|||
|
Neg BX
|
|||
|
SAR BX, 1
|
|||
|
|
|||
|
Jmp I_CenterSample2
|
|||
|
|
|||
|
I_CenterSamplePre8Bit3:
|
|||
|
Mov BL, AL
|
|||
|
Jmp I_CenterSamplePre8Bit2
|
|||
|
|
|||
|
I_CenterSamplePre8Bit4:
|
|||
|
Mov DL, AL
|
|||
|
Jmp I_CenterSamplePre8Bit2
|
|||
|
|
|||
|
I_CenterSamplePre8BitNextBlock:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
|
|||
|
Jmp I_CenterSamplePre8Bit5
|
|||
|
|
|||
|
I_CenterSamplePre16Bit:
|
|||
|
Mov BX, [SI]
|
|||
|
Mov DX, [SI]
|
|||
|
|
|||
|
I_CenterSamplePre16Bit1:
|
|||
|
Mov AX, [SI]
|
|||
|
Cmp AX, BX
|
|||
|
JL I_CenterSamplePre16Bit3
|
|||
|
Cmp AX, DX
|
|||
|
JG I_CenterSamplePre16Bit4
|
|||
|
|
|||
|
I_CenterSamplePre16Bit2:
|
|||
|
Add SI, 2
|
|||
|
JC I_CenterSamplePre16BitNextBlock
|
|||
|
|
|||
|
I_CenterSamplePre16Bit5:
|
|||
|
LoopD I_CenterSamplePre16Bit1
|
|||
|
|
|||
|
MovSX EBX, BX
|
|||
|
MovSX EDX, DX
|
|||
|
Add EBX, EDX
|
|||
|
Neg EBX
|
|||
|
SAR EBX, 1
|
|||
|
|
|||
|
Jmp I_CenterSample2
|
|||
|
|
|||
|
I_CenterSamplePre16Bit3:
|
|||
|
Mov BX, AX
|
|||
|
Jmp I_CenterSamplePre16Bit2
|
|||
|
|
|||
|
I_CenterSamplePre16Bit4:
|
|||
|
Mov DX, AX
|
|||
|
Jmp I_CenterSamplePre16Bit2
|
|||
|
|
|||
|
I_CenterSamplePre16BitNextBlock:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_CenterSamplePre16Bit5
|
|||
|
|
|||
|
I_CenterSample2:
|
|||
|
Push BX
|
|||
|
|
|||
|
Mov DI, Offset O1_SampleCenterList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop BX
|
|||
|
Pop AX ; AX = sample num
|
|||
|
Test DL, 1
|
|||
|
JZ I_CenterSampleEnd
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Loads DS:ESI and ECX again.
|
|||
|
JNZ I_CenterSample16Bit1
|
|||
|
|
|||
|
I_CenterSample8Bit1:
|
|||
|
Add [SI], BL
|
|||
|
Add SI, 1
|
|||
|
JC I_CenterSample8BitNextBlock
|
|||
|
|
|||
|
I_CenterSample8Bit2:
|
|||
|
LoopD I_CenterSample8Bit1
|
|||
|
Jmp I_CenterSample3
|
|||
|
|
|||
|
I_CenterSample8BitNextBlock:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_CenterSample8Bit2
|
|||
|
|
|||
|
I_CenterSample16Bit1:
|
|||
|
Add [SI], BX
|
|||
|
Add SI, 2
|
|||
|
JC I_CenterSample16BitNextBlock
|
|||
|
|
|||
|
I_CenterSample16Bit2:
|
|||
|
LoopD I_CenterSample16Bit1
|
|||
|
Jmp I_CenterSample3
|
|||
|
|
|||
|
I_CenterSample16BitNextBlock:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_CenterSample16Bit2
|
|||
|
|
|||
|
I_CenterSample3:
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_CenterSampleEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CenterSample
|
|||
|
|
|||
|
;<3B><><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 I_AmplifySample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Gets DS:SI, and ECX.
|
|||
|
JNC I_AmplifySample1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_AmplifySample1:
|
|||
|
Push AX ; Remember sample num.
|
|||
|
; Scan through wave first,
|
|||
|
; and find max deviation from
|
|||
|
; mean.
|
|||
|
Mov BX, 0 ; BX = deviation from mean
|
|||
|
JNZ I_AmplifySample11 ; 16 bit stuff.
|
|||
|
|
|||
|
I_AmplifySample2:
|
|||
|
Mov AL, [SI]
|
|||
|
; Sub AL, 80h
|
|||
|
CBW
|
|||
|
Xor AL, AH
|
|||
|
Sub AL, AH
|
|||
|
|
|||
|
Cmp AL, BH
|
|||
|
JB I_AmplifySample3
|
|||
|
|
|||
|
Mov BH, AL
|
|||
|
|
|||
|
I_AmplifySample3:
|
|||
|
Add SI, 1
|
|||
|
JC I_AmplifySample8
|
|||
|
|
|||
|
I_AmplifySample9:
|
|||
|
LoopD I_AmplifySample2
|
|||
|
Jmp I_AmplifySample10
|
|||
|
|
|||
|
I_AmplifySample8:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_AmplifySample9
|
|||
|
|
|||
|
I_AmplifySample11:
|
|||
|
Mov AX, [SI]
|
|||
|
; Sub AX, 8000h
|
|||
|
CWD
|
|||
|
Xor AX, DX
|
|||
|
Sub AX, DX
|
|||
|
Cmp AX, BX
|
|||
|
JB I_AmplifySample12
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
I_AmplifySample12:
|
|||
|
Add SI, 2
|
|||
|
JC I_AmplifySample13
|
|||
|
|
|||
|
I_AmplifySample14:
|
|||
|
LoopD I_AmplifySample11
|
|||
|
Jmp I_AmplifySample10
|
|||
|
|
|||
|
I_AmplifySample13:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_AmplifySample14
|
|||
|
|
|||
|
|
|||
|
I_AmplifySample10:
|
|||
|
; OK. so BL contains max dev.
|
|||
|
; Amplificat = (8000h/MaxDev)*100
|
|||
|
Xor AX, AX
|
|||
|
Mov DX, 32h
|
|||
|
|
|||
|
Cmp DX, BX
|
|||
|
JAE I_AmplifySample4
|
|||
|
|
|||
|
Div BX
|
|||
|
|
|||
|
Cmp AX, 400
|
|||
|
JB I_AmplifySample5
|
|||
|
|
|||
|
I_AmplifySample4:
|
|||
|
Mov AX, 400
|
|||
|
|
|||
|
I_AmplifySample5:
|
|||
|
Mov CS:SampleAmplification, AX
|
|||
|
|
|||
|
Mov DI, Offset O1_SampleAmplificationList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop AX ; AX = sample num
|
|||
|
And DX, DX
|
|||
|
JZ I_AmplifySampleEnd
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Loads DS:ESI and ECX again.
|
|||
|
|
|||
|
PushF
|
|||
|
|
|||
|
; NewSample = OldSample*SampleAmplification/100, clipped.
|
|||
|
|
|||
|
Mov AX, CS:SampleAmplification
|
|||
|
Xor DX, DX
|
|||
|
Mov BX, 100
|
|||
|
Div BX
|
|||
|
ShL EAX, 16
|
|||
|
Div BX
|
|||
|
Mov EBX, EAX ; EBX = multiplier, 16.16 bit.
|
|||
|
|
|||
|
PopF
|
|||
|
JNZ I_AmplifySample20
|
|||
|
|
|||
|
I_AmplifySample6:
|
|||
|
MovSX EAX, Byte Ptr [SI]
|
|||
|
|
|||
|
IMul EBX
|
|||
|
|
|||
|
Add EAX, 8000h ; Rounding factor
|
|||
|
ShR EAX, 16
|
|||
|
|
|||
|
Cmp AX, 7Fh
|
|||
|
JGE I_AmplifySampleClip1
|
|||
|
|
|||
|
Cmp AX, -80h
|
|||
|
JGE I_AmplifySample7
|
|||
|
|
|||
|
Mov AL, 80h
|
|||
|
Jmp I_AmplifySample7
|
|||
|
|
|||
|
I_AmplifySampleClip1:
|
|||
|
Mov AL, 7Fh
|
|||
|
|
|||
|
I_AmplifySample7:
|
|||
|
Mov [SI], AL
|
|||
|
Add SI, 1
|
|||
|
JC I_AmplifySample16
|
|||
|
|
|||
|
I_AmplifySample17:
|
|||
|
LoopD I_AmplifySample6
|
|||
|
Jmp I_AmplifySample15
|
|||
|
|
|||
|
I_AmplifySample16:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_AmplifySample17
|
|||
|
|
|||
|
I_AmplifySample20: ; 16 bit amplification!, EBX = 16.16 bit multiplier.
|
|||
|
; Newsample = OldSample*SampleAmplification/100
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
MovSX EAX, AX
|
|||
|
|
|||
|
IMul EBX
|
|||
|
Add EAX, 8000h ; Rounding factor
|
|||
|
AdC EDX, 0 ; Rounding stuff, etc.
|
|||
|
|
|||
|
ShRD EAX, EDX, 16
|
|||
|
|
|||
|
Cmp EAX, 7FFFh
|
|||
|
JGE I_AmplifySampleClip2
|
|||
|
|
|||
|
Cmp EAX, -8000h
|
|||
|
JGE I_AmplifySample18
|
|||
|
|
|||
|
Mov AX, 8000h
|
|||
|
Jmp I_AmplifySample18
|
|||
|
|
|||
|
I_AmplifySampleClip2:
|
|||
|
Mov AX, 7FFFh
|
|||
|
|
|||
|
I_AmplifySample18:
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Add SI, 2
|
|||
|
JC I_AmplifySample21
|
|||
|
|
|||
|
I_AmplifySample19:
|
|||
|
LoopD I_AmplifySample20
|
|||
|
Jmp I_AmplifySample15
|
|||
|
|
|||
|
I_AmplifySample21:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_AmplifySample19
|
|||
|
|
|||
|
I_AmplifySample15:
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_AmplifySampleEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_AmplifySample
|
|||
|
|
|||
|
;<3B><><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 I_ReverseSample Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Gets DS:SI, and CX.
|
|||
|
JC I_ReverseSample1
|
|||
|
|
|||
|
JNZ I_ReverseSample10
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Push ECX
|
|||
|
|
|||
|
Mov EDX, ECX
|
|||
|
Mov AX, 99
|
|||
|
Call Music_AllocateSample ; Returns ES:DI
|
|||
|
Mov AX, ES
|
|||
|
And AX, AX
|
|||
|
|
|||
|
Pop ECX
|
|||
|
|
|||
|
JZ I_ReverseSampleError
|
|||
|
|
|||
|
Mov ESI, ECX
|
|||
|
Dec ESI
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Xor EDI, EDI
|
|||
|
|
|||
|
I_ReverseSample2:
|
|||
|
Mov AL, [SI]
|
|||
|
Mov [ES:DI], AL
|
|||
|
|
|||
|
Sub SI, 1
|
|||
|
JC I_ReverseSample4
|
|||
|
|
|||
|
I_ReverseSample5:
|
|||
|
Add DI, 1
|
|||
|
JC I_ReverseSample6
|
|||
|
|
|||
|
I_ReverseSample7:
|
|||
|
LoopD I_ReverseSample2
|
|||
|
Jmp I_ReverseSample3
|
|||
|
|
|||
|
I_ReverseSample4:
|
|||
|
Sub ESI, 10000h
|
|||
|
JC I_ReverseSample5
|
|||
|
Int 3
|
|||
|
|
|||
|
Jmp I_ReverseSample5
|
|||
|
|
|||
|
I_ReverseSample6:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Mov CX, 16384
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
Add EDI, 10000h
|
|||
|
Call I_RepositionSample
|
|||
|
Jmp I_ReverseSample7
|
|||
|
|
|||
|
I_ReverseSample10:
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Push ECX
|
|||
|
|
|||
|
Mov EDX, ECX
|
|||
|
Add EDX, EDX
|
|||
|
Mov AX, 99
|
|||
|
Call Music_AllocateSample ; Returns ES:DI
|
|||
|
Mov AX, ES
|
|||
|
And AX, AX
|
|||
|
|
|||
|
Pop ECX
|
|||
|
|
|||
|
JZ I_ReverseSampleError
|
|||
|
|
|||
|
Mov ESI, ECX
|
|||
|
Dec ESI
|
|||
|
Add ESI, ESI
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Xor EDI, EDI
|
|||
|
|
|||
|
I_ReverseSample12:
|
|||
|
Mov AX, [SI]
|
|||
|
Mov [ES:DI], AX
|
|||
|
|
|||
|
Sub SI, 2
|
|||
|
JC I_ReverseSample14
|
|||
|
|
|||
|
I_ReverseSample15:
|
|||
|
Add DI, 2
|
|||
|
JC I_ReverseSample16
|
|||
|
|
|||
|
I_ReverseSample17:
|
|||
|
LoopD I_ReverseSample12
|
|||
|
Jmp I_ReverseSample3
|
|||
|
|
|||
|
I_ReverseSample14:
|
|||
|
Sub ESI, 10000h
|
|||
|
JC I_ReverseSample15
|
|||
|
Int 3
|
|||
|
|
|||
|
Jmp I_ReverseSample15
|
|||
|
|
|||
|
I_ReverseSample16:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Mov CX, 16384
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
Add EDI, 10000h
|
|||
|
Call I_RepositionSample
|
|||
|
Jmp I_ReverseSample17
|
|||
|
|
|||
|
|
|||
|
I_ReverseSampleError:
|
|||
|
Call PEFunction_OutOfMemoryMessage
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_ReverseSample3:
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Mov CX, DI
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
; Now to release old memory, and swap
|
|||
|
; in new lot...
|
|||
|
Call I_SwapMemoryAllocation
|
|||
|
|
|||
|
Call I_GetSampleOffset ; Returns DS:BX
|
|||
|
|
|||
|
Mov EDX, [BX+30h] ; DX = length
|
|||
|
Mov EAX, EDX
|
|||
|
Mov ECX, EDX
|
|||
|
|
|||
|
Sub EAX, [BX+34h]
|
|||
|
Sub ECX, [BX+38h]
|
|||
|
Mov [BX+34h], ECX
|
|||
|
Mov [BX+38h], EAX
|
|||
|
|
|||
|
Mov EAX, EDX
|
|||
|
Mov ECX, EDX
|
|||
|
|
|||
|
Sub EAX, [BX+40h]
|
|||
|
Sub ECX, [BX+44h]
|
|||
|
Mov [BX+40h], ECX
|
|||
|
Mov [BX+44h], EAX
|
|||
|
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_ReverseSample1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ReverseSample
|
|||
|
|
|||
|
;<3B><><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 I_SwapMemoryAllocation
|
|||
|
|
|||
|
Call I_GetSampleOffset ; Gets DS:BX
|
|||
|
Mov SI, [DS:64912+99*2]
|
|||
|
Mov EAX, [SI+48h]
|
|||
|
XChg [BX+48h], EAX
|
|||
|
Mov [SI+48h], EAX
|
|||
|
|
|||
|
Mov AX, 99
|
|||
|
Call Music_ReleaseSample
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SwapMemoryAllocation
|
|||
|
|
|||
|
;<3B><><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 I_RepositionSample
|
|||
|
|
|||
|
|
|||
|
Push AX
|
|||
|
Push BX
|
|||
|
Push ECX
|
|||
|
Push ESI
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX ; AX = sample no.
|
|||
|
Inc AX
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Return DS:ESI, ECX
|
|||
|
|
|||
|
Pop ESI
|
|||
|
Int 3
|
|||
|
|
|||
|
Pop ECX
|
|||
|
Pop BX
|
|||
|
Pop AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_RepositionSample
|
|||
|
|
|||
|
;<3B><><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 I_ToggleSampleQuality Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Mov AL, [BX+12h]
|
|||
|
Test AL, 1
|
|||
|
JZ I_ToggleSampleQuality1
|
|||
|
|
|||
|
Test AL, 2
|
|||
|
JZ I_To16Bit
|
|||
|
|
|||
|
I_To8Bit:
|
|||
|
Push DS
|
|||
|
Push BX
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmConvert2List
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_ToggleSampleQuality1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Cmp DX, 1
|
|||
|
JE I_ConvertTo8Bit
|
|||
|
|
|||
|
And Byte Ptr [BX+12h], Not 2
|
|||
|
|
|||
|
ShL DWord Ptr [BX+30h], 1
|
|||
|
ShL DWord Ptr [BX+34h], 1
|
|||
|
ShL DWord Ptr [BX+38h], 1
|
|||
|
ShL DWord Ptr [BX+40h], 1
|
|||
|
ShL DWord Ptr [BX+44h], 1
|
|||
|
|
|||
|
Jmp I_ToggleSampleQualityEnd
|
|||
|
|
|||
|
I_ConvertTo8Bit:
|
|||
|
Mov EDX, [BX+30h]
|
|||
|
Mov AX, 99 ; Shove it into inst 99 first.
|
|||
|
Call Music_AllocateSample
|
|||
|
|
|||
|
Mov AX, ES
|
|||
|
And AX, AX
|
|||
|
JZ I_OutOfMemory
|
|||
|
|
|||
|
And Byte Ptr [BX+12h], Not 2
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX ; AX = sample no.
|
|||
|
Inc AX
|
|||
|
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation ; Return DS:ESI
|
|||
|
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Xor EDI, EDI
|
|||
|
|
|||
|
I_ConvertTo8Bit1:
|
|||
|
Mov AX, [SI]
|
|||
|
; Add AX, 80h
|
|||
|
; SBB AH, 0
|
|||
|
Mov [ES:DI], AH
|
|||
|
|
|||
|
Add SI, 2
|
|||
|
JC I_ConvertTo8Bit2
|
|||
|
|
|||
|
I_ConvertTo8Bit3:
|
|||
|
Add DI, 1
|
|||
|
JC I_ConvertTo8Bit5
|
|||
|
|
|||
|
I_ConvertTo8Bit4:
|
|||
|
LoopD I_ConvertTo8Bit1
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Mov CX, DI
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
; Now to release old memory, and swap
|
|||
|
; in new lot...
|
|||
|
Call I_SwapMemoryAllocation
|
|||
|
|
|||
|
Jmp I_ToggleSampleQualityEnd
|
|||
|
|
|||
|
I_ConvertTo8Bit2:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_ConvertTo8Bit3
|
|||
|
|
|||
|
I_ConvertTo8Bit5:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Mov CX, 16384
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
Add EDI, 10000h
|
|||
|
Jmp I_ConvertTo8Bit4
|
|||
|
|
|||
|
I_OutOfMemory:
|
|||
|
Call PEFunction_OutOfMemoryMessage
|
|||
|
Jmp I_ToggleSampleQuality1
|
|||
|
|
|||
|
I_To16Bit:
|
|||
|
Push DS
|
|||
|
Push BX
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmConvert2List
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ I_ToggleSampleQuality1
|
|||
|
|
|||
|
Call Music_Stop
|
|||
|
|
|||
|
Cmp DX, 1
|
|||
|
JE I_ConvertTo16Bit
|
|||
|
|
|||
|
Or Byte Ptr [BX+12h], 2
|
|||
|
|
|||
|
ShR DWord Ptr [BX+30h], 1
|
|||
|
ShR DWord Ptr [BX+34h], 1
|
|||
|
ShR DWord Ptr [BX+38h], 1
|
|||
|
ShR DWord Ptr [BX+40h], 1
|
|||
|
ShR DWord Ptr [BX+44h], 1
|
|||
|
|
|||
|
Jmp I_ToggleSampleQualityEnd
|
|||
|
|
|||
|
I_ConvertTo16Bit:
|
|||
|
Mov EDX, [BX+30h]
|
|||
|
Add EDX, EDX
|
|||
|
Mov AX, 99 ; Shove it into inst 99 first.
|
|||
|
Call Music_AllocateSample
|
|||
|
|
|||
|
Mov AX, ES
|
|||
|
And AX, AX
|
|||
|
JZ I_OutOfMemory
|
|||
|
|
|||
|
Or Byte Ptr [BX+12h], 2
|
|||
|
|
|||
|
Mov ECX, [BX+30h]
|
|||
|
Xor ESI, ESI
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
Mov AX, DiskData
|
|||
|
Mov ES, AX
|
|||
|
Assume ES:Nothing
|
|||
|
|
|||
|
Xor EDI, EDI
|
|||
|
|
|||
|
I_ConvertTo16Bit1:
|
|||
|
Mov AH, [SI]
|
|||
|
Xor AL, AL
|
|||
|
Mov [ES:DI], AX
|
|||
|
|
|||
|
Add SI, 1
|
|||
|
JC I_ConvertTo16Bit2
|
|||
|
|
|||
|
I_ConvertTo16Bit3:
|
|||
|
Add DI, 2
|
|||
|
JC I_ConvertTo16Bit5
|
|||
|
|
|||
|
I_ConvertTo16Bit4:
|
|||
|
LoopD I_ConvertTo16Bit1
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Mov CX, DI
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Call I_SwapMemoryAllocation
|
|||
|
|
|||
|
Jmp I_ToggleSampleQualityEnd
|
|||
|
|
|||
|
I_ConvertTo16Bit2:
|
|||
|
Add ESI, 10000h
|
|||
|
Int 3
|
|||
|
Jmp I_ConvertTo16Bit3
|
|||
|
|
|||
|
I_ConvertTo16Bit5:
|
|||
|
PushAD
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Mov AX, 100
|
|||
|
Xor CX, CX
|
|||
|
Call Music_GetSampleLocation
|
|||
|
|
|||
|
Mov ESI, EDI
|
|||
|
Int 3
|
|||
|
|
|||
|
Push DS
|
|||
|
Push ES
|
|||
|
|
|||
|
Pop DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Xor DI, DI
|
|||
|
Mov CX, 16384
|
|||
|
Rep MovsD
|
|||
|
|
|||
|
Pop ES
|
|||
|
Pop DS
|
|||
|
PopAD
|
|||
|
|
|||
|
Call I_RepositionSample
|
|||
|
|
|||
|
Add EDI, 10000h
|
|||
|
Jmp I_ConvertTo16Bit4
|
|||
|
|
|||
|
I_ToggleSampleQualityEnd:
|
|||
|
Call I_DrawWaveForm
|
|||
|
Call Music_SoundCardLoadAllSamples
|
|||
|
|
|||
|
I_ToggleSampleQuality1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ToggleSampleQuality
|
|||
|
|
|||
|
;<3B><><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 I_DrawInstrumentWindow Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Test AL, AL
|
|||
|
JNZ I_DrawInstrumentWindow1
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov LastInstrument, AL
|
|||
|
|
|||
|
I_DrawInstrumentWindow1: ; AL = last instrument
|
|||
|
Xor AH, AH ; Now for bounds check.
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov BX, TopInstrument
|
|||
|
Cmp AX, BX
|
|||
|
JAE I_DrawInstrumentWindow2
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
I_DrawInstrumentWindow2:
|
|||
|
Mov CX, BX
|
|||
|
Add CX, 34
|
|||
|
Cmp CX, AX
|
|||
|
JAE I_DrawInstrumentWindow3
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
Sub BX, 34
|
|||
|
|
|||
|
I_DrawInstrumentWindow3:
|
|||
|
Mov TopInstrument, BX ; OK.. now to draw nums
|
|||
|
Push AX
|
|||
|
|
|||
|
Mov DI, (2+13*80)*2
|
|||
|
|
|||
|
Mov DX, 0A23h
|
|||
|
|
|||
|
I_DrawInstrumentWindow4:
|
|||
|
Mov AX, BX
|
|||
|
Div DH
|
|||
|
; AH = units, AL = tens
|
|||
|
Add AL, '0'
|
|||
|
StosB
|
|||
|
Mov AL, 20h
|
|||
|
StosB
|
|||
|
XChg AH, AL
|
|||
|
Add AL, '0'
|
|||
|
StosW
|
|||
|
|
|||
|
Inc BX
|
|||
|
Add DI, 156
|
|||
|
Dec DL
|
|||
|
JNE I_DrawInstrumentWindow4
|
|||
|
|
|||
|
Mov BX, TopInstrument
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Mov DX, 35
|
|||
|
Mov DI, (5+13*80)*2
|
|||
|
Dec BX
|
|||
|
Mov SI, BX
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [SI+64712]
|
|||
|
Add SI, 20h
|
|||
|
|
|||
|
Pop CX ; CX = last instrument
|
|||
|
Dec CX
|
|||
|
|
|||
|
I_DrawInstrumentWindow5:
|
|||
|
Push CX
|
|||
|
|
|||
|
Mov AH, 6
|
|||
|
Cmp BX, CX
|
|||
|
JNE I_DrawInstrumentWindow7
|
|||
|
|
|||
|
Mov AH, 0E6h
|
|||
|
|
|||
|
I_DrawInstrumentWindow7:
|
|||
|
Mov CX, 25
|
|||
|
|
|||
|
I_DrawInstrumentWindow6:
|
|||
|
LodsB
|
|||
|
|
|||
|
Cmp AL, 226
|
|||
|
JB I_DrawInstrumentNoMouse
|
|||
|
|
|||
|
Mov AL, ' '
|
|||
|
|
|||
|
I_DrawInstrumentNoMouse:
|
|||
|
StosW
|
|||
|
Loop I_DrawInstrumentWindow6
|
|||
|
|
|||
|
Add DI, 160-(25*2)
|
|||
|
Add SI, 554-25
|
|||
|
Pop CX
|
|||
|
|
|||
|
Inc BX
|
|||
|
Dec DX
|
|||
|
JNZ I_DrawInstrumentWindow5
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov SI,Offset SampleMouseEvent
|
|||
|
Mov Word Ptr [SI+4], 30*8-1
|
|||
|
Mov Word Ptr [SI+10], 4
|
|||
|
Call AddSelectEvent
|
|||
|
Mov SI, Offset SampleMouseOffEvent
|
|||
|
Mov Word Ptr [SI+4], 30*8-1
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawInstrumentWindow
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PreInstrumentWindow Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, LastInstrument
|
|||
|
Xor AH, AH
|
|||
|
Mov SI, AX
|
|||
|
Sub AX, TopInstrument
|
|||
|
Add AX, 13
|
|||
|
Mov BX, 160
|
|||
|
Mul BX
|
|||
|
Add AX, 11
|
|||
|
Mov DI, AX
|
|||
|
Cmp InstrumentEdit, 1
|
|||
|
JE I_PreInstrumentWindow2
|
|||
|
|
|||
|
Mov CX, 25
|
|||
|
|
|||
|
I_PreInstrumentWindow1:
|
|||
|
Mov Byte Ptr [ES:DI], 30h
|
|||
|
; Add DI, 2
|
|||
|
ScasW
|
|||
|
|
|||
|
Loop I_PreInstrumentWindow1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PreInstrumentWindow2:
|
|||
|
Mov AX, CS:InstrumentPos
|
|||
|
Add AX, AX
|
|||
|
Add DI, AX
|
|||
|
Mov Byte Ptr [ES:DI], 30h
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PreInstrumentWindow
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 MIDI_AllocateChannel Far ; Given AX = Base channel, DL = note
|
|||
|
; Finds physical channel, returns AX
|
|||
|
; if no channel available, then
|
|||
|
; overtakes channel at base channel
|
|||
|
; Given DI = max channel
|
|||
|
Push BX CX DX SI DS
|
|||
|
|
|||
|
Push DX
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov DX, AX
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
MIDI_AllocateChannel1:
|
|||
|
Inc DX
|
|||
|
Cmp DX, DI
|
|||
|
JA MIDI_AllocateChannelOvertake
|
|||
|
|
|||
|
Mov SI, Offset MIDITable
|
|||
|
Mov CX, 128
|
|||
|
|
|||
|
MIDI_AllocateChannel2:
|
|||
|
LodsB
|
|||
|
Cmp AL, DL
|
|||
|
JE MIDI_AllocateChannel1
|
|||
|
Loop MIDI_AllocateChannel2
|
|||
|
|
|||
|
Mov AX, DX
|
|||
|
Jmp MIDI_AllocateChannelEnd
|
|||
|
|
|||
|
MIDI_AllocateChannelOvertake: ; Search for basechannel
|
|||
|
Mov SI, Offset MIDITable
|
|||
|
|
|||
|
MIDI_AllocateChannel3:
|
|||
|
LodsB
|
|||
|
Cmp AL, DL
|
|||
|
JNE MIDI_AllocateChannel3
|
|||
|
|
|||
|
; Clear out last entry...
|
|||
|
Mov Byte Ptr [SI-1], 0
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
MIDI_AllocateChannelEnd:
|
|||
|
Pop BX ; BL = note
|
|||
|
And BX, 07Fh
|
|||
|
Mov [MIDITable+BX], AL
|
|||
|
|
|||
|
Dec AX
|
|||
|
|
|||
|
Pop DS SI DX CX BX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_AllocateChannel
|
|||
|
|
|||
|
|
|||
|
;<3B><><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 MIDI_GetChannel Far
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Mov AL, [CS:MIDITable+BX]
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_GetChannel
|
|||
|
|
|||
|
;<3B><><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 MIDI_FindChannel Far ; Given BX = Note, returns AX = channel
|
|||
|
; number, cleans up table, AL = 0FFh =
|
|||
|
; note not present
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
XChg [CS:MIDITable+BX], AL
|
|||
|
Dec AL
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_FindChannel
|
|||
|
|
|||
|
;<3B><><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 MIDI_ClearTable Far
|
|||
|
|
|||
|
Push AX CX ES DI
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov DI, Offset MIDITable
|
|||
|
Xor AX, AX
|
|||
|
Mov CX, 64
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Pop DI ES CX AX
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_ClearTable
|
|||
|
|
|||
|
;<3B><><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 MIDI_NoteOff Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
; DL = note
|
|||
|
MIDI_NoteOff2:
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
Mov CX, 0FFh
|
|||
|
JNZ MIDI_NoteOff3
|
|||
|
|
|||
|
Dec CX
|
|||
|
|
|||
|
MIDI_NoteOff3:
|
|||
|
MovZX BX, DL
|
|||
|
Call MIDI_FindChannel
|
|||
|
Cmp AL, 0FFh
|
|||
|
JE MIDI_NoteOff1
|
|||
|
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Mov Word Ptr [SI], CX ; Note off/cut
|
|||
|
Mov Word Ptr [SI+3], 0 ; No effect
|
|||
|
Mov DH, 32
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
MIDI_NoteOff1:
|
|||
|
Mov AX, 1
|
|||
|
; Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_NoteOff
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 MIDI_PlayNote Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Call PE_TranslateMIDI
|
|||
|
JC MIDI_PlayNote1
|
|||
|
JZ MIDI_NoteOff2
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AH, BL
|
|||
|
Inc AH
|
|||
|
Mov AL, DL ; Note
|
|||
|
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Mov [SI], AX
|
|||
|
Mov [SI+2], DH
|
|||
|
Mov Word Ptr [SI+3], 0
|
|||
|
|
|||
|
Call Music_GetNumChannels ; Into AX
|
|||
|
Mov DI, AX
|
|||
|
Mov AX, PlayChannel
|
|||
|
Call PE_RestoreMIDINote
|
|||
|
Call MIDI_AllocateChannel
|
|||
|
|
|||
|
Mov DH, 32
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
Mov Byte Ptr [SI+2], 0FFh
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
MIDI_PlayNote1:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
|
|||
|
EndP MIDI_PlayNote
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PlayNote Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Test CH, Not 1
|
|||
|
JNZ I_PlayNote5
|
|||
|
|
|||
|
Cmp CX, LastKey
|
|||
|
JE I_PlayNote5
|
|||
|
|
|||
|
Mov LastKey, CX
|
|||
|
|
|||
|
Mov SI, Offset KeyBoardTable
|
|||
|
|
|||
|
I_PlayNote1:
|
|||
|
LodsW
|
|||
|
Cmp AX, 0FFFFh
|
|||
|
JE I_PlayNote5
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
LodsW
|
|||
|
|
|||
|
Cmp BL, CL
|
|||
|
JNE I_PlayNote1
|
|||
|
; Note to play...
|
|||
|
; AX = notemod.
|
|||
|
Mov CL, AL
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, 12
|
|||
|
Mul BaseOctave
|
|||
|
Add AL, CL
|
|||
|
Cmp AL, 119
|
|||
|
JBE I_PlayNoteMax
|
|||
|
|
|||
|
Mov AL, 119
|
|||
|
|
|||
|
I_PlayNoteMax:
|
|||
|
Mov DL, AL
|
|||
|
|
|||
|
Test CH, CH
|
|||
|
JZ MIDI_NoteOff
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AH, BL
|
|||
|
Inc AH
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
MovZX BX, AL
|
|||
|
Cmp [MIDITable+BX], 0
|
|||
|
JNE I_PlayNote6
|
|||
|
|
|||
|
Call UpdateMultiChannel
|
|||
|
|
|||
|
Mov PlayNote, AL
|
|||
|
|
|||
|
I_PlayNote3:
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Push DS
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
|
|||
|
Test Byte Ptr [BX+19h], 80h
|
|||
|
Mov DH, 32
|
|||
|
JZ I_PlayNote4
|
|||
|
|
|||
|
Add DH, 128
|
|||
|
|
|||
|
I_PlayNote4:
|
|||
|
Pop DS
|
|||
|
Call Music_GetNumChannels ; Into AX
|
|||
|
Mov DI, AX
|
|||
|
Mov AX, PlayChannel
|
|||
|
Call MIDI_AllocateChannel
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
I_PlayNote6:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PlayNote5:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PlayNote
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PostInstrumentWindow Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Mov SI, Offset InstrumentListKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC I_PostInstrumentWindow1
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
I_PostInstrumentWindow1:
|
|||
|
Cmp InstrumentEdit, 0
|
|||
|
JE I_PostInstrumentWindow7
|
|||
|
|
|||
|
Cmp CX, 101h
|
|||
|
JE I_PostInstrumentWindow15
|
|||
|
Cmp CX, 11Ch
|
|||
|
JNE I_PostInstrumentWindow13
|
|||
|
|
|||
|
I_PostInstrumentWindow15:
|
|||
|
Mov InstrumentEdit, 0
|
|||
|
Jmp I_PostInstrumentWindow12
|
|||
|
|
|||
|
I_PostInstrumentWindow13:
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov SI, BX
|
|||
|
Mov BX, InstrumentPos
|
|||
|
; BX = Pos, SI = LastInst
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [64712+SI] ; SI = instrument offset.
|
|||
|
|
|||
|
Test CL, CL
|
|||
|
JZ I_PostInstrumentWindow3
|
|||
|
Cmp DL, 32
|
|||
|
JB I_PostInstrumentWindow3
|
|||
|
|
|||
|
Add BX, 20h
|
|||
|
Add BX, SI
|
|||
|
Add SI, 38h
|
|||
|
|
|||
|
I_PostInstrumentWindow2:
|
|||
|
Cmp SI, BX
|
|||
|
JBE I_PIW2
|
|||
|
|
|||
|
Mov AL, [SI-1]
|
|||
|
Mov [SI], AL
|
|||
|
Dec SI
|
|||
|
Jmp I_PostInstrumentWindow2
|
|||
|
|
|||
|
I_PIW2:
|
|||
|
|
|||
|
Mov [SI], DL
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Jmp I_InstrumentRight
|
|||
|
|
|||
|
I_PostInstrumentWindow3:
|
|||
|
Cmp CX, 10Eh ; Backspace
|
|||
|
JNE I_PostInstrumentWindow5
|
|||
|
|
|||
|
And BX, BX
|
|||
|
JZ I_PostInstrumentWindow6
|
|||
|
|
|||
|
Dec InstrumentPos
|
|||
|
Add BX, 20h
|
|||
|
Add BX, SI
|
|||
|
Add SI, 39h
|
|||
|
|
|||
|
I_PostInstrumentWindow4:
|
|||
|
Mov AL, [BX]
|
|||
|
Mov [BX-1], AL
|
|||
|
Inc BX
|
|||
|
Cmp BX, SI
|
|||
|
JB I_PostInstrumentWindow4
|
|||
|
|
|||
|
Mov Byte Ptr [BX-1], 0
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_PostInstrumentWindow12:
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostInstrumentWindow5:
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp CX, 1D3h ; Delete...
|
|||
|
JNE I_PostInstrumentWindow6
|
|||
|
|
|||
|
Add BX, 21h
|
|||
|
Add BX, SI
|
|||
|
Add SI, 39h
|
|||
|
Jmp I_PostInstrumentWindow4
|
|||
|
|
|||
|
I_PostInstrumentWindow6:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostInstrumentWindow7:
|
|||
|
Assume DS:Inst
|
|||
|
Cmp DX, ' ' ; Spacebar
|
|||
|
JNE I_PostInstrumentWindow14
|
|||
|
|
|||
|
Mov InstrumentEdit, 1
|
|||
|
Mov InstrumentPos, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostInstrumentWindow14:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PostInstrumentWindow
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentLeft Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp InstrumentEdit, 0
|
|||
|
JE I_InstrumentLeft2
|
|||
|
|
|||
|
Cmp InstrumentPos, 0
|
|||
|
JE I_InstrumentLeft1
|
|||
|
|
|||
|
Dec InstrumentPos
|
|||
|
; Jmp I_InstrumentLeft1
|
|||
|
|
|||
|
I_InstrumentLeft2:
|
|||
|
; Mov Word Ptr [ES:DI], 8
|
|||
|
|
|||
|
I_InstrumentLeft1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentLeft
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentRight Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp InstrumentEdit, 0
|
|||
|
JE I_InstrumentRight2
|
|||
|
|
|||
|
Cmp InstrumentPos, 24
|
|||
|
JAE I_InstrumentRight1
|
|||
|
|
|||
|
Inc InstrumentPos
|
|||
|
Jmp I_InstrumentRight1
|
|||
|
|
|||
|
I_InstrumentRight2:
|
|||
|
Mov Word Ptr [ES:DI], 5
|
|||
|
|
|||
|
I_InstrumentRight1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
|
|||
|
EndP I_InstrumentRight
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentHome Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov InstrumentPos, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentHome
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentEnd Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov InstrumentPos, 24
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentEnd
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentTab Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 5
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentTab
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentShiftTab Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 8
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentShiftTab
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentNameClear Far
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
Mov DI, BX
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Mov CX, 6
|
|||
|
Add DI, 4
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Add DI, 10h
|
|||
|
Mov CX, 13
|
|||
|
Rep StosW
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Inc AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentNameClear
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentClear Far
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AX, BX
|
|||
|
Call Music_ClearInstrument
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentClear
|
|||
|
|
|||
|
;<3B><><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 I_DrawNoteWindow Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset NoteMouseEvent
|
|||
|
Call AddSelectEvent
|
|||
|
Mov SI, Offset NoteMouseOffEvent
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
; Now for bounds check.
|
|||
|
|
|||
|
Mov BX, TopNote
|
|||
|
Cmp AX, BX
|
|||
|
JAE I_DrawNoteWindow2
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
I_DrawNoteWindow2:
|
|||
|
Mov CX, BX
|
|||
|
Add CX, 31
|
|||
|
Cmp CX, AX
|
|||
|
JAE I_DrawNoteWindow3
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
Sub BX, 31
|
|||
|
|
|||
|
I_DrawNoteWindow3:
|
|||
|
Mov TopNote, BX ; OK.. now to draw nums
|
|||
|
Mov CX, BX
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Add BX, 40h
|
|||
|
Add BX, CX
|
|||
|
Add BX, CX
|
|||
|
Mov DI, (32+16*80)*2
|
|||
|
|
|||
|
Mov DX, 0C20h
|
|||
|
XChg SI, BX
|
|||
|
; DS:SI = pointer to translation
|
|||
|
; ES:DI = screen
|
|||
|
; CX = Current note.
|
|||
|
I_DrawNoteWindow4:
|
|||
|
; Draw left hand note first.
|
|||
|
Mov AX, CX
|
|||
|
Div DH ; AH = note, AL = octave.
|
|||
|
Push AX
|
|||
|
|
|||
|
Mov AL, AH
|
|||
|
Mov BX, AX
|
|||
|
And BX, 0FFh ; BX = note.
|
|||
|
Add BX, BX ; BX = note*2
|
|||
|
Mov AH, 2
|
|||
|
Mov AL, [CS:BX+NoteTable]
|
|||
|
StosW
|
|||
|
Mov AL, [CS:BX+NoteTable+1]
|
|||
|
StosW
|
|||
|
|
|||
|
Pop AX ; AL = octave
|
|||
|
Add AL, '0'
|
|||
|
Mov AH, 2
|
|||
|
StosW
|
|||
|
|
|||
|
; View division...
|
|||
|
Mov AL, 0A8h
|
|||
|
StosW
|
|||
|
; Note translation...
|
|||
|
|
|||
|
LodsB ; AL = note..
|
|||
|
Xor AH, AH
|
|||
|
Div DH
|
|||
|
Push AX
|
|||
|
|
|||
|
Mov AL, AH
|
|||
|
Mov BX, AX
|
|||
|
And BX, 0FFh ; BX = note.
|
|||
|
Add BX, BX ; BX = note*2
|
|||
|
Mov AH, 2
|
|||
|
Mov AL, [CS:BX+NoteTable]
|
|||
|
StosW
|
|||
|
Mov AL, [CS:BX+NoteTable+1]
|
|||
|
StosW
|
|||
|
|
|||
|
Pop AX ; AL = octave
|
|||
|
Add AL, '0'
|
|||
|
Mov AH, 2
|
|||
|
StosW
|
|||
|
|
|||
|
Mov AL, ' '
|
|||
|
StosW
|
|||
|
; Now sample number.
|
|||
|
LodsB ; AL = sample number (base 0)
|
|||
|
; Inc AL ; Convert to base 1
|
|||
|
|
|||
|
And AL, AL
|
|||
|
JNZ I_DrawNoteWindow5
|
|||
|
|
|||
|
Mov AL, 173
|
|||
|
StosW
|
|||
|
StosW
|
|||
|
Jmp I_DrawNoteWindow6
|
|||
|
|
|||
|
I_DrawNoteWindow5:
|
|||
|
Xor AH, AH
|
|||
|
Mov BL, 10
|
|||
|
Div BL ; AH = units, AL = tens.
|
|||
|
Add AX, 3030h
|
|||
|
Mov BL, AH
|
|||
|
Mov AH, 2
|
|||
|
StosW
|
|||
|
Mov AL, BL
|
|||
|
StosW
|
|||
|
|
|||
|
I_DrawNoteWindow6:
|
|||
|
Add DI, 160-10*2
|
|||
|
|
|||
|
Inc CX
|
|||
|
Dec DL
|
|||
|
JNZ I_DrawNoteWindow4
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawNoteWindow
|
|||
|
|
|||
|
;<3B><><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 I_PreNoteWindow Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Mov AX, CurrentNote
|
|||
|
Sub AX, TopNote
|
|||
|
Add AX, 16
|
|||
|
Mov BX, 160
|
|||
|
Mul BX
|
|||
|
Add AX, 32*2
|
|||
|
Mov DI, AX ; First hilight the row..
|
|||
|
|
|||
|
Mov CX, 10
|
|||
|
Push DI
|
|||
|
|
|||
|
I_PreNoteWindow1:
|
|||
|
Inc DI
|
|||
|
Or Byte Ptr [ES:DI], 0E0h
|
|||
|
Inc DI
|
|||
|
Loop I_PreNoteWindow1
|
|||
|
|
|||
|
Pop DI
|
|||
|
|
|||
|
Mov BX, NotePos
|
|||
|
Mov BL, [NotePosTable+BX]
|
|||
|
Xor BH, BH
|
|||
|
Add DI, BX
|
|||
|
Add DI, BX
|
|||
|
|
|||
|
Inc DI
|
|||
|
Mov Byte Ptr [ES:DI], 30h
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PreNoteWindow
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PostNoteWindow Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset NoteListKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC I_PostNoteWindow1
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
I_PostNoteWindow1:
|
|||
|
Cmp NotePos, 0
|
|||
|
JNE I_PostNoteWindow5
|
|||
|
|
|||
|
Mov SI, Offset KeyBoardTable
|
|||
|
|
|||
|
I_PostNoteWindow2:
|
|||
|
LodsW
|
|||
|
Cmp AX, 0FFFFh
|
|||
|
JE I_PostNoteWindow3
|
|||
|
|
|||
|
Mov BX, AX
|
|||
|
LodsW
|
|||
|
|
|||
|
Cmp BX, CX
|
|||
|
JNE I_PostNoteWindow2
|
|||
|
; Note to play...
|
|||
|
; AX = notemod.
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AL, 12
|
|||
|
Mul BaseOctave
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
Mov SI, CurrentNote
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Add CX, AX
|
|||
|
Cmp CX, 119
|
|||
|
JA I_PostNoteWindow4 ; If note > B-9... not valid!
|
|||
|
|
|||
|
Mov CH, SampleNumber
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Mov [DS:BX+SI+40h], CX
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AH, BL
|
|||
|
Inc AH
|
|||
|
Mov AL, Byte Ptr CurrentNote
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Mov AX, PlayChannel
|
|||
|
Mov DH, 32+128
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
I_PostNoteWindow4:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostNoteWindow3:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostNoteWindow5:
|
|||
|
Cmp DL, '0'
|
|||
|
JB I_PostNoteWindow6
|
|||
|
Cmp DL, '9'
|
|||
|
JA I_PostNoteWindow6
|
|||
|
|
|||
|
Sub DL, '0'
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Assume DS:Nothing
|
|||
|
; DS:BX points to inst.
|
|||
|
Add BX, 40h
|
|||
|
|
|||
|
Mov AX, NotePos
|
|||
|
Cmp AL, 1
|
|||
|
JE I_PostNoteWindow7
|
|||
|
|
|||
|
Inc BX
|
|||
|
|
|||
|
Cmp AL, 2
|
|||
|
JE I_PostNoteWindow8
|
|||
|
|
|||
|
Cmp AL, 3
|
|||
|
JE I_PostNoteWindow9
|
|||
|
|
|||
|
I_PostNoteWindow6:
|
|||
|
Cmp DX, '.'
|
|||
|
JNE I_PostNoteWindow10
|
|||
|
Cmp NotePos, 2
|
|||
|
JB I_PostNoteWindow10
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Assume DS:Nothing
|
|||
|
Add BX, SI
|
|||
|
Add BX, 41h
|
|||
|
Mov Byte Ptr [BX], 0
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
I_PostNoteWindow10:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostNoteWindow7: ; Octave of note.
|
|||
|
Mov AL, [DS:BX+SI] ; AL = Note
|
|||
|
Xor AH, AH
|
|||
|
Mov CL, 0Ch
|
|||
|
Div CL ; AL = octave, AH = Note
|
|||
|
|
|||
|
Mov AL, DL
|
|||
|
Mov CH, AH
|
|||
|
Mul CL
|
|||
|
Add AL, CH ; AL = new note
|
|||
|
|
|||
|
Mov [DS:BX+SI], AL
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
I_PostNoteWindow8:
|
|||
|
Mov AL, [DS:BX+SI] ; AL = sample.
|
|||
|
Xor AH, AH
|
|||
|
Mov CL, 10
|
|||
|
Div CL ; AL = tens, AH = units
|
|||
|
|
|||
|
Mov AL, DL
|
|||
|
Mov CH, AH
|
|||
|
Mul CL
|
|||
|
Add AL, CH
|
|||
|
|
|||
|
Mov SampleNumber, AL
|
|||
|
Mov [DS:BX+SI], AL
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteRight
|
|||
|
|
|||
|
I_PostNoteWindow9:
|
|||
|
Mov AL, [DS:BX+SI]
|
|||
|
Xor AH, AH
|
|||
|
Mov CL, 10
|
|||
|
Div CL
|
|||
|
|
|||
|
Mov CH, AH
|
|||
|
Mul CL
|
|||
|
|
|||
|
Add AL, DL
|
|||
|
|
|||
|
Mov SampleNumber, AL
|
|||
|
Mov [DS:BX+SI], AL
|
|||
|
|
|||
|
Mov NotePos, 2
|
|||
|
|
|||
|
I_PostNoteWindowEnd:
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
EndP I_PostNoteWindow
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_SelectNoteMouse Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
ShR DX, 3
|
|||
|
Add DX, TopNote
|
|||
|
Sub DX, 16
|
|||
|
JNC I_SelectNoteMouse1
|
|||
|
|
|||
|
Xor DX, DX
|
|||
|
|
|||
|
I_SelectNoteMouse1:
|
|||
|
Cmp DX, 119
|
|||
|
JB I_SelectNoteMouse2
|
|||
|
|
|||
|
Mov DX, 119
|
|||
|
|
|||
|
I_SelectNoteMouse2:
|
|||
|
Mov CurrentNote, DX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SelectNoteMouse
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteUp Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
Dec AX
|
|||
|
JS I_NoteUp2
|
|||
|
|
|||
|
Mov CurrentNote, AX
|
|||
|
Jmp I_NoteUp1
|
|||
|
|
|||
|
I_NoteUp2:
|
|||
|
Mov Word Ptr [ES:DI], 5
|
|||
|
|
|||
|
I_NoteUp1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteDown Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
Inc AX
|
|||
|
Cmp AX, 119
|
|||
|
JA I_NoteDown1
|
|||
|
|
|||
|
Mov CurrentNote, AX
|
|||
|
|
|||
|
I_NoteDown1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NotePgUp Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
Sub AX, 12
|
|||
|
JNS I_NotePgUp1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_NotePgUp1:
|
|||
|
Mov CurrentNote, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NotePgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NotePgDn Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
Add AX, 12
|
|||
|
Cmp AX, 119
|
|||
|
JBE I_NotePgDn1
|
|||
|
|
|||
|
Mov AX, 119
|
|||
|
|
|||
|
I_NotePgDn1:
|
|||
|
Mov CurrentNote, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NotePgDn
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteRight Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, NotePos
|
|||
|
Inc AX
|
|||
|
Cmp AX, 4
|
|||
|
JB I_NoteRight1
|
|||
|
|
|||
|
Mov AX, 3
|
|||
|
|
|||
|
I_NoteRight1:
|
|||
|
Mov NotePos, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteRight
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteLeft Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
Mov AX, NotePos
|
|||
|
Dec AX
|
|||
|
JS I_NoteLeft1
|
|||
|
|
|||
|
Mov NotePos, AX
|
|||
|
|
|||
|
I_NoteLeft1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteLeft
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteHome Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CurrentNote, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteHome
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteEnd Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CurrentNote, 119
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteEnd
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteTab Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 16
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteTab
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteShiftTab Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 4
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteShiftTab
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteSampleIncrease Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AL, SampleNumber
|
|||
|
Inc AX
|
|||
|
Cmp AL, 99
|
|||
|
JA I_NoteSampleIncrease1
|
|||
|
|
|||
|
Mov SampleNumber, AL
|
|||
|
|
|||
|
I_NoteSampleIncrease1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteSampleIncrease
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteSampleDecrease Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AL, SampleNumber
|
|||
|
Dec AL
|
|||
|
JS I_NoteSampleDecrease1
|
|||
|
|
|||
|
Mov SampleNumber, AL
|
|||
|
|
|||
|
I_NoteSampleDecrease1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteSampleDecrease
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteSamplePickUp Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Mov AX, SI
|
|||
|
Mov PlayNote, AL
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Mov AX, [DS:BX+SI+40h]
|
|||
|
|
|||
|
Mov SampleNumber, AH
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteSamplePickUp
|
|||
|
|
|||
|
;<3B><><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 I_NoteNext Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Add SI, SI
|
|||
|
JZ I_NoteNext1
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add BX, SI
|
|||
|
Add BX, 40h
|
|||
|
|
|||
|
Mov AX, [DS:BX-2] ; 'Last note.'
|
|||
|
Cmp AL, 119 ; Is previous note >= B-9
|
|||
|
JAE I_NoteNext1
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov [DS:BX], AX
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
I_NoteNext1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteNext
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NotePrevious Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Cmp SI, 119
|
|||
|
JAE I_NotePrevious1
|
|||
|
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add BX, SI
|
|||
|
Add BX, 40h
|
|||
|
|
|||
|
Mov AX, [DS:BX+2] ; 'Last note.'
|
|||
|
Test AL, AL
|
|||
|
JZ I_NotePrevious1
|
|||
|
|
|||
|
Dec AX
|
|||
|
Mov [DS:BX], AX
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNote
|
|||
|
Dec AX
|
|||
|
JS I_NotePrevious1
|
|||
|
|
|||
|
Mov CurrentNote, AX
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_NotePrevious1:
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NotePrevious
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteAll Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
LEA DI, [BX+40h]
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
Mov AH, SampleNumber
|
|||
|
Xor AL, AL
|
|||
|
|
|||
|
|
|||
|
I_NoteAll1:
|
|||
|
StosW
|
|||
|
Inc AX
|
|||
|
Loop I_NoteAll1
|
|||
|
|
|||
|
Sub DI, 110h
|
|||
|
|
|||
|
MovZX BX, SampleNumber
|
|||
|
Add BX, BX
|
|||
|
JZ I_NoteAll2
|
|||
|
|
|||
|
Mov SI, [BX+64910]
|
|||
|
Add SI, 14h
|
|||
|
|
|||
|
Mov CX, 26
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
I_NoteAll2:
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteAll
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteInsert Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
LEA DI, [BX+40h+120*2-2]
|
|||
|
LEA SI, [DI-2]
|
|||
|
Mov CX, 119
|
|||
|
|
|||
|
StD
|
|||
|
Rep MovsW
|
|||
|
Xor AX, AX
|
|||
|
StosW
|
|||
|
ClD
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteInsert
|
|||
|
|
|||
|
;<3B><><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 I_NoteDelete Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
LEA DI, [BX+40h]
|
|||
|
LEA SI, [DI+2]
|
|||
|
Mov CX, 119
|
|||
|
|
|||
|
Rep MovsW
|
|||
|
Xor AX, AX
|
|||
|
StosW
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteDelete
|
|||
|
|
|||
|
;<3B><><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 I_NoteTransposeUp Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
LEA DI, [BX+40h]
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_NoteTransposeUp1:
|
|||
|
Mov AL, [DI]
|
|||
|
Inc AX
|
|||
|
Cmp AL, 119
|
|||
|
JBE I_NoteTransposeUp2
|
|||
|
|
|||
|
Mov AL, 119
|
|||
|
|
|||
|
I_NoteTransposeUp2:
|
|||
|
StosB
|
|||
|
Inc DI
|
|||
|
Loop I_NoteTransposeUp1
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteTransposeUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteTransposeDown Far
|
|||
|
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
LEA DI, [BX+40h]
|
|||
|
|
|||
|
Mov CX, 120
|
|||
|
|
|||
|
I_NoteTransposeDown1:
|
|||
|
Mov AL, [DI]
|
|||
|
Sub AL, 1
|
|||
|
AdC AL, 0
|
|||
|
StosB
|
|||
|
Inc DI
|
|||
|
Loop I_NoteTransposeDown1
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteTransposeDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_NoteSpace Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
Cmp NotePos, 2
|
|||
|
JB I_NoteSpace1
|
|||
|
|
|||
|
Mov SI, CurrentNote
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Assume DS:Nothing
|
|||
|
Mov AL, SampleNumber
|
|||
|
Mov [BX+SI+41h], AL
|
|||
|
|
|||
|
Jmp I_NoteDown
|
|||
|
|
|||
|
I_NoteSpace1:
|
|||
|
NetworkSendInstrument
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_NoteSpace
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_ExchangeInstruments Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_ExchangeInstrumentList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Mov SI, DX
|
|||
|
Dec SI
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Cmp SI, BX
|
|||
|
JE I_ExchangeInstruments1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
Mov DI, [DS:64712+BX]
|
|||
|
Mov SI, [DS:64712+SI] ; DS:SI, ES:DI point to
|
|||
|
; sample headers
|
|||
|
|
|||
|
Mov CX, 554
|
|||
|
|
|||
|
I_ExchangeInstruments2:
|
|||
|
Mov AL, [ES:DI]
|
|||
|
MovsB
|
|||
|
Mov [DS:SI-1], AL
|
|||
|
|
|||
|
Loop I_ExchangeInstruments2
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_ExchangeInstruments1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ExchangeInstruments
|
|||
|
|
|||
|
;<3B><><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 I_DoubleSampleSpeed Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Mov EAX, [BX+3Ch]
|
|||
|
ShL EAX, 1
|
|||
|
Cmp EAX, 9999999
|
|||
|
JA I_DoubleSampleSpeed1
|
|||
|
|
|||
|
Mov [BX+3Ch], EAX
|
|||
|
|
|||
|
I_DoubleSampleSpeed1:
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DoubleSampleSpeed
|
|||
|
|
|||
|
;<3B><><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 I_HalveSampleSpeed Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
ShR DWord Ptr [BX+3Ch], 1
|
|||
|
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_HalveSampleSpeed
|
|||
|
|
|||
|
;<3B><><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 I_SampleSpeedSemiUp Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Mov EAX, 255392045
|
|||
|
Mul DWord Ptr [BX+3Ch]
|
|||
|
|
|||
|
Add EDX, [BX+3Ch]
|
|||
|
JC I_SampleSpeedSemiUp1
|
|||
|
|
|||
|
Mov [BX+3Ch], EDX
|
|||
|
|
|||
|
I_SampleSpeedSemiUp1:
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleSpeedSemiUp
|
|||
|
|
|||
|
;<3B><><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 I_SampleSpeedSemiDown Far
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
|
|||
|
Mov EAX, 4053909306
|
|||
|
Mul DWord Ptr [BX+3Ch]
|
|||
|
Mov [BX+3Ch], EDX
|
|||
|
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleSpeedSemiDown
|
|||
|
|
|||
|
;<3B><><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 I_ReplaceInstrument Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_ReplaceInstrumentList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DH, BL
|
|||
|
Inc DH ; DH/DL = samples to swap
|
|||
|
|
|||
|
Cmp DL, DH
|
|||
|
JE I_ReplaceInstrument1
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_ReplaceInstrument1
|
|||
|
|
|||
|
XChg DH, DL
|
|||
|
Or DH, 80h
|
|||
|
Call PE_SwapInstruments
|
|||
|
|
|||
|
I_ReplaceInstrument1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ReplaceInstrument
|
|||
|
|
|||
|
;<3B><><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 I_ScaleSampleVolumes Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_GetInstrumentAmpList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Cmp DX, 1
|
|||
|
JNE I_ScaleSampleVolumesEnd
|
|||
|
|
|||
|
Mov BP, CS:InstrumentAmplification
|
|||
|
Mov BX, 100
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov SI, 64912
|
|||
|
Mov CX, 99
|
|||
|
|
|||
|
I_ScaleSampleVolumes1:
|
|||
|
Xor AX, AX
|
|||
|
Mov DI, [SI]
|
|||
|
Mov AL, [DI+11h]
|
|||
|
Mul BP
|
|||
|
Div BX
|
|||
|
Cmp AX, 64
|
|||
|
JB I_ScaleSampleVolumes2
|
|||
|
|
|||
|
Mov AX, 64
|
|||
|
|
|||
|
I_ScaleSampleVolumes2:
|
|||
|
Mov [DI+11h], AL
|
|||
|
|
|||
|
Add SI, 2
|
|||
|
Dec CX
|
|||
|
JNZ I_ScaleSampleVolumes1
|
|||
|
|
|||
|
I_ScaleSampleVolumesEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ScaleSampleVolumes
|
|||
|
|
|||
|
;<3B><><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 I_ScaleInstrumentVolumes Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_GetInstrumentAmpList
|
|||
|
Mov CX, 3
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Cmp DX, 1
|
|||
|
JNE I_ScaleInstrumentVolumesEnd
|
|||
|
|
|||
|
Mov BP, CS:InstrumentAmplification
|
|||
|
Mov BX, 100
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov DS, AX
|
|||
|
Mov SI, 64712
|
|||
|
Mov CX, 99
|
|||
|
|
|||
|
I_ScaleInstrumentVolumes1:
|
|||
|
Xor AX, AX
|
|||
|
Mov DI, [SI]
|
|||
|
Mov AL, [DI+18h]
|
|||
|
Mul BP
|
|||
|
Div BX
|
|||
|
Cmp AX, 128
|
|||
|
JB I_ScaleInstrumentVolumes2
|
|||
|
|
|||
|
Mov AX, 128
|
|||
|
|
|||
|
I_ScaleInstrumentVolumes2:
|
|||
|
Mov [DI+18h], AL
|
|||
|
|
|||
|
Add SI, 2
|
|||
|
Dec CX
|
|||
|
JNZ I_ScaleInstrumentVolumes1
|
|||
|
|
|||
|
I_ScaleInstrumentVolumesEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ScaleInstrumentVolumes
|
|||
|
|
|||
|
;<3B><><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 I_CopyInstrument Far
|
|||
|
|
|||
|
Mov DI, Offset O1_CopyInstrumentList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Call I_GetInstrumentOffset ; Gets DS:BX with cur inst.
|
|||
|
|
|||
|
Mov DI, BX
|
|||
|
Mov SI, DX
|
|||
|
Add SI, SI
|
|||
|
Mov SI, [64710+SI]
|
|||
|
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov CX, 554/2
|
|||
|
Rep MovsW
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_CopyInstrument
|
|||
|
|
|||
|
;<3B><><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 I_SwapInstruments Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Mov DI, Offset O1_SwapInstrumentList
|
|||
|
Call GetNumberInput
|
|||
|
|
|||
|
Mov SI, DX
|
|||
|
; Dec SI
|
|||
|
Add SI, SI
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DH, BL
|
|||
|
Inc DH ; DH/DL = samples to swap
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Cmp DL, DH
|
|||
|
JE I_SwapInstruments1
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DS, AX
|
|||
|
Mov DI, [DS:64712+BX]
|
|||
|
Mov SI, [DS:64710+SI] ; DS:SI, ES:DI point to
|
|||
|
; sample headers
|
|||
|
|
|||
|
Mov CX, 554
|
|||
|
|
|||
|
I_SwapInstruments2:
|
|||
|
Mov AL, [ES:DI] ; Swapping headers.
|
|||
|
MovsB
|
|||
|
Mov [DS:SI-1], AL
|
|||
|
|
|||
|
Loop I_SwapInstruments2
|
|||
|
|
|||
|
; Now to swap pattern
|
|||
|
; stuff...
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_SwapInstruments3
|
|||
|
|
|||
|
Call PE_SwapInstruments
|
|||
|
|
|||
|
I_SwapInstruments3:
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_SwapInstruments1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SwapInstruments
|
|||
|
|
|||
|
;<3B><><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 I_UpdateInstrument Far
|
|||
|
|
|||
|
EnsureNoNetwork
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov DX, BX
|
|||
|
Inc DX
|
|||
|
Add BX, BX
|
|||
|
|
|||
|
Call Music_GetSongSegment
|
|||
|
Mov ES, AX
|
|||
|
Mov DI, [ES:64712+BX]
|
|||
|
Add DI, 40h
|
|||
|
|
|||
|
Call PE_UpdateInstruments
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_UpdateInstrument
|
|||
|
|
|||
|
;<3B><><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 MouseEnvelopeEvent1 Far
|
|||
|
|
|||
|
Mov CS:MouseX, CX
|
|||
|
Mov CS:MouseY, DX
|
|||
|
|
|||
|
Mov CX, 8010h ; Envelope mouse control request..
|
|||
|
Call AddMouseQueue
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseEnvelopeEvent1
|
|||
|
|
|||
|
;<3B><><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 MouseEnvelopeEvent4 Far ; Delete node
|
|||
|
|
|||
|
Test BH, 6
|
|||
|
JNZ MouseEnvelopeEvent4_1
|
|||
|
|
|||
|
Mov CS:MouseX, CX
|
|||
|
Mov CS:MouseY, DX
|
|||
|
|
|||
|
Mov CX, 8003h ; Envelope mouse control request..
|
|||
|
Call AddMouseQueue
|
|||
|
|
|||
|
MouseEnvelopeEvent4_1:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseEnvelopeEvent4
|
|||
|
|
|||
|
;<3B><><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 MouseEnvelopeEvent2 Far ; Envelope drag
|
|||
|
|
|||
|
Mov CS:MouseX, CX
|
|||
|
Mov CS:MouseY, DX
|
|||
|
|
|||
|
Mov CX, 8001h
|
|||
|
Call AddMouseQueue
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseEnvelopeEvent2
|
|||
|
|
|||
|
;<3B><><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 MouseEnvelopeEvent3 Far ; Release envelope
|
|||
|
|
|||
|
Mov CX, 8002h
|
|||
|
Call AddMouseQueue
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MouseEnvelopeEvent3
|
|||
|
|
|||
|
;<3B><><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 DrawEnvelopeHeader ; AH = colour, DS = inst
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, InstrumentScreen ; 1-3
|
|||
|
Add SI, SI ; 2-6
|
|||
|
Add SI, Word Ptr NodeHeld ; 2-7
|
|||
|
Add SI, SI ; 4-14
|
|||
|
Mov SI, [EnvelopeHeaderTable+SI-4]
|
|||
|
Mov DI, (33+16*80)*2
|
|||
|
|
|||
|
Call S_DrawString
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP DrawEnvelopeHeader
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_DrawEnvelope Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AH, 20h
|
|||
|
Call DrawEnvelopeHeader
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Mov DI, (32+18*80)*2
|
|||
|
Mov AX, 0C00h
|
|||
|
|
|||
|
Mov DX, 8
|
|||
|
|
|||
|
I_DrawEnvelope1:
|
|||
|
Mov CX, 32
|
|||
|
|
|||
|
I_DrawEnvelope2:
|
|||
|
StosW
|
|||
|
Inc AX
|
|||
|
Loop I_DrawEnvelope2
|
|||
|
|
|||
|
Add DI, (80-32)*2
|
|||
|
Dec DX
|
|||
|
JNZ I_DrawEnvelope1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; Returns DS:SI
|
|||
|
Mov BX, CS:CurrentNode ; to envelope table
|
|||
|
Mov CX, BX
|
|||
|
|
|||
|
Add BX, BX
|
|||
|
Add BX, CX ; BX = CurrentNode*3
|
|||
|
|
|||
|
Mov AL, [SI+BX+6]
|
|||
|
CBW ; Value
|
|||
|
|
|||
|
Test Byte Ptr [SI], 80h
|
|||
|
JZ I_DrawEnvelope5
|
|||
|
|
|||
|
Add AX, 32
|
|||
|
|
|||
|
I_DrawEnvelope5:
|
|||
|
Push AX
|
|||
|
Push Word Ptr [SI+BX+7] ; Tick
|
|||
|
Push CS:MaxNode
|
|||
|
Push CX ; Node
|
|||
|
|
|||
|
Mov DI, (66+19*80)*2
|
|||
|
Mov AH, 2
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Mov SI, Offset EnvelopeMsg
|
|||
|
Call S_DrawString
|
|||
|
|
|||
|
Add SP, 8
|
|||
|
|
|||
|
Cmp MouseNodeHeld, 0
|
|||
|
JZ I_DrawEnvelope4
|
|||
|
|
|||
|
Call MouseGetStatus
|
|||
|
Test AL, 6
|
|||
|
JNZ I_DrawEnvelope3
|
|||
|
|
|||
|
Call I_MouseEnvelopeReleased
|
|||
|
Jmp I_DrawEnvelope4
|
|||
|
|
|||
|
I_DrawEnvelope3:
|
|||
|
Mov SI, Offset EnvelopeEvent3
|
|||
|
Call MouseAddEvent
|
|||
|
Mov SI, Offset EnvelopeEvent2
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
I_DrawEnvelope4:
|
|||
|
Mov SI, Offset EnvelopeEvent1
|
|||
|
Call MouseAddEvent
|
|||
|
Mov SI, Offset EnvelopeEvent4
|
|||
|
Call MouseAddEvent
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawEnvelope
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PreEnvelope Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov AH, 23h
|
|||
|
Call DrawEnvelopeHeader
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PreEnvelope
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_PostEnvelope Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset VolumeEnvelopeNodeKeys
|
|||
|
|
|||
|
Cmp NodeHeld, 1
|
|||
|
JE I_PostEnvelope2
|
|||
|
|
|||
|
Mov SI, Offset VolumeEnvelopeKeys
|
|||
|
|
|||
|
I_PostEnvelope2:
|
|||
|
Call M_FunctionDivider
|
|||
|
JC I_PostEnvelope1
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
I_PostEnvelope1:
|
|||
|
IF ENABLEPRESETENVELOPES
|
|||
|
|
|||
|
Cmp DX, '0'
|
|||
|
JB I_PostEnvelopeNoPreset
|
|||
|
Cmp DX, '9'
|
|||
|
JA I_PostEnvelopeNoPreset
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
Mov DI, SI ; ES:DI set
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Mov AL, 81
|
|||
|
Sub DL, '0'
|
|||
|
Mul DL ; AX = offset
|
|||
|
Mov SI, AX
|
|||
|
Add SI, Offset PresetEnvelopes
|
|||
|
|
|||
|
Mov CX, 6/2
|
|||
|
Rep MovsW
|
|||
|
Mov CX, 25
|
|||
|
|
|||
|
I_PostEnvelopePreset1:
|
|||
|
LodsB
|
|||
|
Sub AL, AmplitudeCompensate
|
|||
|
StosB
|
|||
|
MovsW
|
|||
|
Loop I_PostEnvelopePreset1
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostEnvelopeNoPreset:
|
|||
|
Test CH, 60h ; Alt?
|
|||
|
JZ I_PostEnvelopeNoSet
|
|||
|
Test CH, 1 ; On keypress
|
|||
|
JZ I_PostEnvelopeNoSet
|
|||
|
|
|||
|
Cmp CL, 2
|
|||
|
JB I_PostEnvelopeNoSet
|
|||
|
Cmp CL, 0Bh
|
|||
|
JA I_PostEnvelopeNoSet
|
|||
|
JNE I_PostEnvelopeSet2
|
|||
|
|
|||
|
Mov CL, 1
|
|||
|
|
|||
|
I_PostEnvelopeSet2:
|
|||
|
Mov AX, CX
|
|||
|
Dec AX
|
|||
|
And AX, 0FFh
|
|||
|
Mov SI, Offset EnvelopeSetMsg
|
|||
|
Call SetInfoLine
|
|||
|
Mov CL, 81
|
|||
|
Mul CL
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; Gets DS:SI
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
Mov DI, AX
|
|||
|
Add DI, Offset PresetEnvelopes ; ES:DI points to dest
|
|||
|
|
|||
|
LodsW
|
|||
|
And AL, 7Fh
|
|||
|
StosW
|
|||
|
|
|||
|
Mov CX, 4/2
|
|||
|
Rep MovsW
|
|||
|
Mov CX, 25
|
|||
|
|
|||
|
I_PostEnvelopeSet1:
|
|||
|
LodsB
|
|||
|
Add AL, CS:AmplitudeCompensate
|
|||
|
StosB
|
|||
|
MovsW
|
|||
|
Loop I_PostEnvelopeSet1
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
I_PostEnvelopeNoSet:
|
|||
|
ENDIF ; PRESETENVELOPES
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PostEnvelope
|
|||
|
|
|||
|
;<3B><><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 I_MapEnvelope Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp InstrumentScreen, 0
|
|||
|
JNE I_MapEnvelope1
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
I_MapEnvelope1:
|
|||
|
Mov UpdateInstrumentScreen, 0
|
|||
|
|
|||
|
Push BP
|
|||
|
|
|||
|
Call S_GetGenerationTableOffset
|
|||
|
Push DI ; ES:DI points to table.
|
|||
|
Mov CX, 32*8*8*8/4
|
|||
|
Xor EAX, EAX
|
|||
|
Rep StosD
|
|||
|
Pop DI
|
|||
|
Push DI
|
|||
|
|
|||
|
Add DI, 3
|
|||
|
Mov CX, 32
|
|||
|
Inc AX
|
|||
|
|
|||
|
I_MapEnvelopeYAxis1:
|
|||
|
StosB
|
|||
|
Add DI, 511
|
|||
|
Loop I_MapEnvelopeYAxis1
|
|||
|
|
|||
|
Pop DI
|
|||
|
Push DI
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; DS:SI points to envelope
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Mov AL, 32
|
|||
|
|
|||
|
Add DI, 31*256
|
|||
|
|
|||
|
Test Byte Ptr [SI], 80h
|
|||
|
JNZ I_MapEnvelopeFilterCompensate
|
|||
|
Cmp Byte Ptr [CS:InstrumentScreen], 1
|
|||
|
JNE I_MapEnvelopeXAxis1
|
|||
|
|
|||
|
Xor AL, AL
|
|||
|
I_MapEnvelopeFilterCompensate:
|
|||
|
Add DI, 31*256
|
|||
|
|
|||
|
I_MapEnvelopeXAxis1:
|
|||
|
Mov CS:AmplitudeCompensate, AL
|
|||
|
|
|||
|
Mov AX, 100h
|
|||
|
Mov CX, 128
|
|||
|
|
|||
|
Rep StosW ; X-axis drawn
|
|||
|
|
|||
|
Pop DI
|
|||
|
|
|||
|
Xor DH, DH
|
|||
|
Mov DL, [SI+1]
|
|||
|
|
|||
|
Mov CS:MaxNode, DX
|
|||
|
Cmp CS:CurrentNode, DX
|
|||
|
JB I_MapEnvelope2
|
|||
|
|
|||
|
Mov AX, DX
|
|||
|
Sub AX, 1
|
|||
|
AdC AX, 0
|
|||
|
Mov CS:CurrentNode, AX
|
|||
|
|
|||
|
I_MapEnvelope2:
|
|||
|
Test DX, DX
|
|||
|
JZ I_MapEnvelopeEnd
|
|||
|
|
|||
|
Sub DX, 1
|
|||
|
AdC DX, 1
|
|||
|
|
|||
|
Push DX
|
|||
|
|
|||
|
; DX = last node
|
|||
|
; DS:SI = envelope, ES:DI = table
|
|||
|
Mov BX, DX ; MaxNode
|
|||
|
Add BX, BX
|
|||
|
Add BX, DX ; BX = MaxNode*3
|
|||
|
|
|||
|
Mov AX, [DS:SI+BX+6+1-3] ; Get last nodes tick
|
|||
|
Xor DX, DX
|
|||
|
Mov BX, ENVELOPEGRANULARITY
|
|||
|
Div BX
|
|||
|
Inc AX
|
|||
|
Mul BX
|
|||
|
Mov CS:UpperLimit, AX
|
|||
|
|
|||
|
Push DI
|
|||
|
Xor BP, BP
|
|||
|
Jmp I_MapEnvelope4
|
|||
|
|
|||
|
I_MapEnvelope3:
|
|||
|
Push CX
|
|||
|
Push DI
|
|||
|
|
|||
|
I_MapEnvelope4: ; Node drawing part
|
|||
|
Mov BX, BP
|
|||
|
Add BX, BX
|
|||
|
Add BX, BP
|
|||
|
|
|||
|
Mov AL, 64
|
|||
|
Sub AL, CS:AmplitudeCompensate
|
|||
|
Sub AL, [SI+BX+6]
|
|||
|
Mov AH, 244 ; 244 = 61/64*256
|
|||
|
Mul AH
|
|||
|
; AX = amplitude
|
|||
|
Mov CS:CurrentAmplitude, AX
|
|||
|
Mov CX, AX ; CX = amplitude
|
|||
|
|
|||
|
Mov AX, [SI+BX+7]
|
|||
|
Cmp AX, CS:UpperLimit
|
|||
|
JAE I_MapEnvelopeError
|
|||
|
|
|||
|
Mov DX, 250 ; 249 if UpperLimit = LastNode tick
|
|||
|
Mul DX
|
|||
|
; Add AX, 125
|
|||
|
; AdC DX, 0
|
|||
|
Div CS:UpperLimit
|
|||
|
|
|||
|
Mov CS:CurrentTick, AX
|
|||
|
|
|||
|
; OK.. plot points
|
|||
|
Xor CL, CL
|
|||
|
Add DI, AX
|
|||
|
Add DI, CX
|
|||
|
Add DI, 256+3
|
|||
|
|
|||
|
Mov AX, 101h
|
|||
|
Mov [ES:DI], AX
|
|||
|
Mov [ES:DI-256], AX
|
|||
|
Mov [ES:DI+256], AX
|
|||
|
Mov [ES:DI-1], AL
|
|||
|
Mov [ES:DI-256-1], AL
|
|||
|
Mov [ES:DI+256-1], AL
|
|||
|
|
|||
|
Cmp BP, CS:CurrentNode
|
|||
|
JNE I_MapEnvelope5
|
|||
|
|
|||
|
Dec AX
|
|||
|
Mov [ES:DI+2], AX
|
|||
|
Mov [ES:DI+256+2], AX
|
|||
|
Mov [ES:DI-256+2], AX
|
|||
|
XChg AH, AL
|
|||
|
Mov [ES:DI-3], AX
|
|||
|
Mov [ES:DI+256-3], AX
|
|||
|
Mov [ES:DI-256-3], AX
|
|||
|
|
|||
|
I_MapEnvelope5:
|
|||
|
Sub DI, CX
|
|||
|
Sub DI, 256
|
|||
|
Mov AX, BP
|
|||
|
Mov CX, 64
|
|||
|
|
|||
|
Test Byte Ptr [SI], 2
|
|||
|
JZ I_MapEnvelope6
|
|||
|
|
|||
|
Mov AH, 1
|
|||
|
|
|||
|
Cmp AL, [SI+2]
|
|||
|
JE I_MapEnvelopeLoop1
|
|||
|
Cmp AL, [SI+3]
|
|||
|
JNE I_MapEnvelope6
|
|||
|
|
|||
|
I_MapEnvelopeLoop1:
|
|||
|
Mov AL, AH
|
|||
|
ShR AL, 1
|
|||
|
StosB
|
|||
|
Add DI, 255
|
|||
|
Inc AH
|
|||
|
Loop I_MapEnvelopeLoop1
|
|||
|
|
|||
|
Jmp I_MapEnvelope7
|
|||
|
|
|||
|
I_MapEnvelope6:
|
|||
|
Test Byte Ptr [SI], 4
|
|||
|
JZ I_MapEnvelope7
|
|||
|
|
|||
|
Cmp AL, [SI+4]
|
|||
|
JE I_MapEnvelopeSusLoop2
|
|||
|
Cmp AL, [SI+5]
|
|||
|
JNE I_MapEnvelope7
|
|||
|
|
|||
|
I_MapEnvelopeSusLoop2:
|
|||
|
Mov AL, 1
|
|||
|
|
|||
|
I_MapEnvelopeSusLoop1:
|
|||
|
StosB
|
|||
|
Add DI, 255
|
|||
|
Xor AL, 1
|
|||
|
Loop I_MapEnvelopeSusLoop1
|
|||
|
|
|||
|
I_MapEnvelope7: ; Now for line segment
|
|||
|
Test BP, BP
|
|||
|
JZ I_MapEnvelope8 ; Don't draw line for first node
|
|||
|
|
|||
|
Pop DI
|
|||
|
Push DI
|
|||
|
|
|||
|
Add DI, CS:LastTick
|
|||
|
Add DI, 103h
|
|||
|
|
|||
|
Mov CX, CS:CurrentTick
|
|||
|
Sub CX, CS:LastTick
|
|||
|
JC I_MapEnvelope8 ; Error..
|
|||
|
JNZ I_MapEnvelope11
|
|||
|
|
|||
|
; Vertical line.
|
|||
|
Mov AX, CS:LastAmplitude
|
|||
|
Mov CX, CS:CurrentAmplitude
|
|||
|
Xor AL, AL
|
|||
|
Xor CL, CL
|
|||
|
|
|||
|
Add DI, AX ; LastAmplitude
|
|||
|
|
|||
|
Mov DX, 256
|
|||
|
|
|||
|
Sub CX, AX
|
|||
|
JNS I_MapEnvelope9
|
|||
|
|
|||
|
Neg DX
|
|||
|
Neg CX
|
|||
|
|
|||
|
I_MapEnvelope9:
|
|||
|
ShR CX, 8
|
|||
|
JZ I_MapEnvelope12
|
|||
|
|
|||
|
I_MapEnvelope10:
|
|||
|
Mov Byte Ptr [ES:DI], 1
|
|||
|
Add DI, DX
|
|||
|
Loop I_MapEnvelope10
|
|||
|
|
|||
|
I_MapEnvelope12:
|
|||
|
Jmp I_MapEnvelope8
|
|||
|
|
|||
|
I_MapEnvelope11: ; Diagonal line
|
|||
|
Push SI
|
|||
|
|
|||
|
Xor SI, SI
|
|||
|
Mov AX, CS:CurrentAmplitude
|
|||
|
Sub AX, CS:LastAmplitude
|
|||
|
JNS I_MapEnvelope13
|
|||
|
|
|||
|
Inc SI ; SI = 1 if opp direction
|
|||
|
Neg AX
|
|||
|
|
|||
|
I_MapEnvelope13:
|
|||
|
Xor DX, DX
|
|||
|
Div CX
|
|||
|
Mov DX, AX
|
|||
|
|
|||
|
Test SI, SI
|
|||
|
Mov SI, -256
|
|||
|
JZ I_MapEnvelope15
|
|||
|
|
|||
|
Neg SI
|
|||
|
Neg DX
|
|||
|
|
|||
|
I_MapEnvelope15:
|
|||
|
Mov BX, CS:LastAmplitude
|
|||
|
Inc CX
|
|||
|
Dec DI
|
|||
|
Push DI
|
|||
|
Jmp I_MapEnvelope17
|
|||
|
|
|||
|
I_MapEnvelope14:
|
|||
|
Push DI
|
|||
|
Push BX
|
|||
|
Xor BL, BL
|
|||
|
Add DI, BX
|
|||
|
|
|||
|
I_MapEnvelope16:
|
|||
|
Mov Byte Ptr [ES:DI], 1
|
|||
|
Add DI, SI
|
|||
|
Dec AL
|
|||
|
JNZ I_MapEnvelope16
|
|||
|
|
|||
|
Pop BX
|
|||
|
|
|||
|
I_MapEnvelope17:
|
|||
|
Mov AL, BH
|
|||
|
Add BX, DX
|
|||
|
Sub AL, BH
|
|||
|
|
|||
|
CBW ;
|
|||
|
Xor AL, AH ; AL = |AL|
|
|||
|
Sub AL, AH ;
|
|||
|
Sub AL, 1
|
|||
|
AdC AL, 1
|
|||
|
|
|||
|
Pop DI
|
|||
|
Inc DI
|
|||
|
Loop I_MapEnvelope14
|
|||
|
|
|||
|
Pop SI
|
|||
|
|
|||
|
I_MapEnvelope8:
|
|||
|
Mov AX, CS:CurrentAmplitude
|
|||
|
Mov BX, CS:CurrentTick
|
|||
|
Mov CS:LastAmplitude, AX
|
|||
|
Mov CS:LastTick, BX
|
|||
|
|
|||
|
I_MapEnvelopeError:
|
|||
|
Pop DI
|
|||
|
Pop CX
|
|||
|
Inc BP
|
|||
|
Loop I_MapEnvelope3
|
|||
|
|
|||
|
; Now shove on playing points.
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Inc BX
|
|||
|
|
|||
|
Mov CX, CS:InstrumentScreen
|
|||
|
Mov BP, CX
|
|||
|
Mov DL, 1
|
|||
|
Add CL, 11
|
|||
|
ShL BP, 4
|
|||
|
ShL DX, CL
|
|||
|
Add BP, 48h
|
|||
|
|
|||
|
Call Music_GetSlaveChannelInformationTable
|
|||
|
; Returns DS:SI, CX
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
I_MapEnvelopePlaying1:
|
|||
|
Cmp [SI+33h], BL
|
|||
|
JNE I_MapEnvelopePlayingNext
|
|||
|
|
|||
|
Test Byte Ptr [SI], 1
|
|||
|
JZ I_MapEnvelopePlayingNext
|
|||
|
|
|||
|
Mov AX, [DS:SI+BP]
|
|||
|
And AX, AX
|
|||
|
JNZ I_MapEnvelopePlaying2
|
|||
|
|
|||
|
Test [SI], DX
|
|||
|
JZ I_MapEnvelopePlayingNext
|
|||
|
|
|||
|
I_MapEnvelopePlaying2:
|
|||
|
Cmp AX, CS:UpperLimit
|
|||
|
JAE I_MapEnvelopePlayingNext
|
|||
|
|
|||
|
Push CX
|
|||
|
Push DX
|
|||
|
|
|||
|
Call S_GetGenerationTableOffset
|
|||
|
Add DI, 3
|
|||
|
|
|||
|
Mov DX, 250
|
|||
|
Mul DX
|
|||
|
Div CS:UpperLimit
|
|||
|
|
|||
|
Add DI, AX
|
|||
|
Mov CX, 64
|
|||
|
|
|||
|
I_DrawEnvelopePlaying1:
|
|||
|
Mov Byte Ptr [ES:DI], 1
|
|||
|
Add DI, 256
|
|||
|
Loop I_DrawEnvelopePlaying1
|
|||
|
|
|||
|
Mov CS:UpdateInstrumentScreen, 1
|
|||
|
|
|||
|
Pop DX
|
|||
|
Pop CX
|
|||
|
|
|||
|
I_MapEnvelopePlayingNext:
|
|||
|
Add SI, SLAVECHANNELSIZE
|
|||
|
Loop I_MapEnvelopePlaying1
|
|||
|
|
|||
|
I_MapEnvelopeEnd:
|
|||
|
Xor AX, AX
|
|||
|
Mov BX, 32
|
|||
|
Mov CX, 8
|
|||
|
Call S_GenerateCharacters
|
|||
|
|
|||
|
Pop BP
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_MapEnvelope
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_GetMouseNode ; Returns DI, carry if none
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
; Returns DS:SI to envelope
|
|||
|
Xor CH, CH
|
|||
|
Mov CL, [SI+1]
|
|||
|
|
|||
|
Add SI, 6 ; Start of envelope.. have to find
|
|||
|
; a point that fits MouseX, MouseY
|
|||
|
; XPixel = ENVELOPELEFT*8 + 250*Tick/UpperLimit + 3
|
|||
|
; YPixel = ENVELOPETOP*8 + 61*(64-AmplitudeCompensate-Amplitude)/64 + 1
|
|||
|
|
|||
|
Xor DI, DI ; DI = node number.
|
|||
|
JCXZ I_GetMouseNode3
|
|||
|
|
|||
|
I_GetMouseNode1:
|
|||
|
Mov BX, DI
|
|||
|
Add BX, BX
|
|||
|
Add BX, DI
|
|||
|
|
|||
|
Mov AX, 250
|
|||
|
Mul Word Ptr [SI+BX+1]
|
|||
|
Div CS:UpperLimit
|
|||
|
Add AX, ENVELOPELEFT*8+2
|
|||
|
|
|||
|
Mov DL, 64
|
|||
|
Sub DL, CS:AmplitudeCompensate
|
|||
|
Sub DL, [SI+BX]
|
|||
|
|
|||
|
Mov BX, AX ; BX = XPixel
|
|||
|
|
|||
|
Mov AL, 244 ; 244 = 61/64*256
|
|||
|
Mul DL
|
|||
|
Mov AL, AH
|
|||
|
Xor AH, AH
|
|||
|
Add AX, ENVELOPETOP*8 ; AX = YPixel of node...
|
|||
|
|
|||
|
Cmp MouseX, BX
|
|||
|
JB I_GetMouseNode2
|
|||
|
Cmp MouseY, AX
|
|||
|
JB I_GetMouseNode2
|
|||
|
Add AX, 2
|
|||
|
Add BX, 2
|
|||
|
Cmp MouseX, BX
|
|||
|
JA I_GetMouseNode2
|
|||
|
Cmp MouseY, AX
|
|||
|
JA I_GetMouseNode2
|
|||
|
|
|||
|
I_GetMouseNode3:
|
|||
|
ClC
|
|||
|
Ret
|
|||
|
|
|||
|
I_GetMouseNode2:
|
|||
|
Inc DI
|
|||
|
Cmp DI, CX
|
|||
|
JB I_GetMouseNode1
|
|||
|
|
|||
|
StC
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetMouseNode
|
|||
|
|
|||
|
;<3B><><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 I_MouseEnvelopeDelete Far
|
|||
|
|
|||
|
Call I_GetMouseNode
|
|||
|
JC I_MouseEnvelopeDelete1
|
|||
|
Mov CS:CurrentNode, DI
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Jmp I_VolumeEnvelopeDelete
|
|||
|
|
|||
|
I_MouseEnvelopeDelete1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_MouseEnvelopeDelete
|
|||
|
|
|||
|
;<3B><><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 I_MouseEnvelopePress Far
|
|||
|
Assume DS:Nothing
|
|||
|
; If on top of node, then pick up this
|
|||
|
; node, ; MouseNodeHeld = 1
|
|||
|
; If NOT near node, and nodes < 25,
|
|||
|
; then CREATE new node in appropriate
|
|||
|
; position, MouseNodeHeld = 1. If
|
|||
|
; no node will fit in-between, then
|
|||
|
; do nothing.
|
|||
|
; Else nothing
|
|||
|
Call I_GetMouseNode
|
|||
|
JNC I_MouseEnvelopeNodeFound1
|
|||
|
Cmp CX, 25
|
|||
|
JAE I_MouseEnvelopePressError
|
|||
|
|
|||
|
; Figger out envelope tick position...
|
|||
|
Mov AX, MouseX
|
|||
|
Sub AX, ENVELOPELEFT*8+3
|
|||
|
JNC I_MouseEnvelopeCreateNode4
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_MouseEnvelopeCreateNode4:
|
|||
|
Mov BX, 250
|
|||
|
Mul CS:UpperLimit
|
|||
|
Add AX, 125
|
|||
|
AdC DX, 0
|
|||
|
Div BX
|
|||
|
|
|||
|
Mov CX, AX ; CX = new position....
|
|||
|
Cmp AX, MAXENVELOPETICK
|
|||
|
JB I_MouseEnvelopeCreateNode3
|
|||
|
|
|||
|
Mov CX, MAXENVELOPETICK
|
|||
|
|
|||
|
I_MouseEnvelopeCreateNode3:
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Mov DL, [SI+1]
|
|||
|
Mov BX, SI
|
|||
|
Xor DH, DH
|
|||
|
Xor DI, DI
|
|||
|
Add BX, 7
|
|||
|
|
|||
|
I_MouseEnvelopeCreateNode1:
|
|||
|
Cmp CX, [BX]
|
|||
|
JE I_MouseEnvelopePressError
|
|||
|
JB I_MouseEnvelopeCreateNode2
|
|||
|
|
|||
|
Add BX, 3
|
|||
|
Inc DI
|
|||
|
Cmp DI, DX
|
|||
|
JB I_MouseEnvelopeCreateNode1
|
|||
|
|
|||
|
I_MouseEnvelopeCreateNode2:
|
|||
|
ClI
|
|||
|
|
|||
|
Inc Byte Ptr [SI+1]
|
|||
|
|
|||
|
Push BX
|
|||
|
Push CX
|
|||
|
Push DI
|
|||
|
|
|||
|
Mov CX, DI
|
|||
|
Cmp CL, [SI+2]
|
|||
|
JA I_MEPIns1
|
|||
|
|
|||
|
Inc Byte Ptr [SI+2]
|
|||
|
|
|||
|
I_MEPIns1:
|
|||
|
Cmp CL, [SI+3]
|
|||
|
JA I_MEPIns2
|
|||
|
|
|||
|
Inc Byte Ptr [SI+3]
|
|||
|
|
|||
|
I_MEPIns2:
|
|||
|
Cmp CL, [SI+4]
|
|||
|
JA I_MEPIns3
|
|||
|
|
|||
|
Inc Byte Ptr [SI+4]
|
|||
|
|
|||
|
I_MEPIns3:
|
|||
|
Cmp CL, [SI+5]
|
|||
|
JA I_MEPIns4
|
|||
|
|
|||
|
Inc Byte Ptr [SI+5]
|
|||
|
|
|||
|
I_MEPIns4:
|
|||
|
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
StD
|
|||
|
|
|||
|
Sub DX, DI
|
|||
|
Mov CX, DX
|
|||
|
Add CX, CX
|
|||
|
Add CX, DX ; CX = (Last-New)*3
|
|||
|
|
|||
|
LEA DI, [BX+1]
|
|||
|
Add DI, CX
|
|||
|
LEA SI, [DI-3]
|
|||
|
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
ClD
|
|||
|
|
|||
|
Pop DI
|
|||
|
Pop CX
|
|||
|
Pop BX
|
|||
|
|
|||
|
Mov [BX], CX
|
|||
|
|
|||
|
Mov CX, 61
|
|||
|
Mov AX, MouseY
|
|||
|
Sub AX, ENVELOPETOP*8
|
|||
|
JNC I_MEPChk1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_MEPChk1:
|
|||
|
Cmp AX, CX
|
|||
|
JB I_MepChk2
|
|||
|
|
|||
|
Mov AX, CX
|
|||
|
|
|||
|
I_MEPChk2:
|
|||
|
ShL AX, 6
|
|||
|
Xor DX, DX
|
|||
|
Div CX
|
|||
|
|
|||
|
Mov DL, 64
|
|||
|
Sub DL, AL
|
|||
|
Sub DL, CS:AmplitudeCompensate
|
|||
|
Mov [BX-1], DL
|
|||
|
|
|||
|
I_MouseEnvelopeNodeFound1: ; Have to find limits...
|
|||
|
Mov CurrentNode, DI
|
|||
|
Call I_EnvelopeSelected
|
|||
|
|
|||
|
StI
|
|||
|
|
|||
|
Mov BX, DI
|
|||
|
Mov CL, BL
|
|||
|
Inc CX
|
|||
|
Add BX, BX
|
|||
|
Add BX, DI
|
|||
|
; AX = lower limit, DX = upper limit
|
|||
|
Xor AX, AX
|
|||
|
Xor DX, DX
|
|||
|
And DI, DI
|
|||
|
JZ I_MouseEnvelopeNodeFound3
|
|||
|
|
|||
|
Mov DX, MAXENVELOPETICK
|
|||
|
Mov AX, [SI+BX+6+1-3]
|
|||
|
Inc AX
|
|||
|
|
|||
|
I_MouseEnvelopeNodeFound2:
|
|||
|
Cmp CL, [SI+1]
|
|||
|
JAE I_MouseEnvelopeNodeFound3
|
|||
|
|
|||
|
Mov DX, [SI+BX+6+1+3]
|
|||
|
Dec DX
|
|||
|
|
|||
|
I_MouseEnvelopeNodeFound3:
|
|||
|
Mov LowerTickLimit, AX
|
|||
|
Mov UpperTickLimit, DX
|
|||
|
|
|||
|
Mov BX, 2
|
|||
|
Call SetMouseCursorType
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Mov MouseNodeHeld, AL
|
|||
|
Call SetKeyboardLock
|
|||
|
Jmp I_MousePressChain
|
|||
|
|
|||
|
I_MouseEnvelopePressError:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_MouseEnvelopePress
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_MouseEnvelopeDrag Far
|
|||
|
Assume DS:Nothing
|
|||
|
; CurrentNode update
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
; Returns DS:SI to envelope
|
|||
|
Mov AX, CurrentNode
|
|||
|
Mov BX, AX
|
|||
|
Add BX, BX
|
|||
|
Add BX, AX
|
|||
|
LEA SI, [SI+BX+6] ; DS:SI points to current node
|
|||
|
|
|||
|
; Tick first
|
|||
|
Mov AX, MouseX
|
|||
|
Sub AX, ENVELOPELEFT*8+3
|
|||
|
JNC I_MouseEnvelopeDrag1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_MouseEnvelopeDrag1:
|
|||
|
Mov BX, 250
|
|||
|
Mul CS:UpperLimit
|
|||
|
Add AX, 125
|
|||
|
AdC DX, 0
|
|||
|
Div BX
|
|||
|
; AX = tick.. now to check bounds..
|
|||
|
Cmp AX, LowerTickLimit
|
|||
|
JAE I_MouseEnvelopeDrag2
|
|||
|
|
|||
|
Mov AX, LowerTickLimit
|
|||
|
|
|||
|
I_MouseEnvelopeDrag2:
|
|||
|
Cmp AX, UpperTickLimit
|
|||
|
JBE I_MouseEnvelopeDrag3
|
|||
|
|
|||
|
Mov AX, UpperTickLimit
|
|||
|
|
|||
|
I_MouseEnvelopeDrag3:
|
|||
|
ClI
|
|||
|
|
|||
|
Mov [SI+1], AX
|
|||
|
|
|||
|
Mov AX, MouseY
|
|||
|
Mov CX, 61
|
|||
|
Sub AX, ENVELOPETOP*8
|
|||
|
JNC I_MouseEnvelopeDrag4
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_MouseEnvelopeDrag4:
|
|||
|
Cmp AX, CX
|
|||
|
JBE I_MouseEnvelopeDrag5
|
|||
|
|
|||
|
Mov AX, CX
|
|||
|
|
|||
|
I_MouseEnvelopeDrag5:
|
|||
|
ShL AX, 6
|
|||
|
Xor DX, DX
|
|||
|
Div CX
|
|||
|
|
|||
|
Mov DL, 64
|
|||
|
Sub DL, AL
|
|||
|
Sub DL, CS:AmplitudeCompensate
|
|||
|
Mov [SI], DL
|
|||
|
|
|||
|
StI
|
|||
|
|
|||
|
; XPixel = ENVELOPELEFT*8 + 250*Tick/UpperLimit + 3
|
|||
|
; YPixel = ENVELOPETOP*8 + 61*(64-AmplitudeCompensate-Amplitude)/64 + 1
|
|||
|
|
|||
|
I_MousePressChain:
|
|||
|
Push CS:UpperLimit
|
|||
|
Call I_RedrawWave
|
|||
|
Pop AX
|
|||
|
Cmp AX, CS:UpperLimit
|
|||
|
JE I_GetMousePositionEnd
|
|||
|
|
|||
|
; Set position....
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Mov AX, CS:CurrentNode
|
|||
|
Add SI, AX
|
|||
|
Add SI, AX
|
|||
|
Add SI, AX
|
|||
|
Add SI, 6
|
|||
|
|
|||
|
Mov AX, 250
|
|||
|
Mul Word Ptr [SI+1]
|
|||
|
Div CS:UpperLimit
|
|||
|
Add AX, ENVELOPELEFT*8-1 ; +3
|
|||
|
Mov CX, AX
|
|||
|
|
|||
|
Xor DX, DX
|
|||
|
Mov AL, 64
|
|||
|
Sub AL, CS:AmplitudeCompensate
|
|||
|
Sub AL, [SI]
|
|||
|
Mov AH, 244
|
|||
|
Mul AH
|
|||
|
Mov DL, AH
|
|||
|
|
|||
|
Add DX, ENVELOPETOP*8-2 ; +1
|
|||
|
Call MouseSetXY
|
|||
|
|
|||
|
I_GetMousePositionEnd:
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_MouseEnvelopeDrag
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_MouseEnvelopeReleased Far
|
|||
|
Assume DS:Inst
|
|||
|
; MouseNodeHeld = 0
|
|||
|
|
|||
|
Xor BX, BX
|
|||
|
Call SetMouseCursorType
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Mov CS:MouseNodeHeld, AL
|
|||
|
Call SetKeyboardLock
|
|||
|
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_MouseEnvelopeReleased
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeRight Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, CurrentNode
|
|||
|
Inc AX
|
|||
|
Cmp AX, MaxNode
|
|||
|
JAE I_VolumeEnvelopeRight1
|
|||
|
|
|||
|
Mov CurrentNode, AX
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_VolumeEnvelopeRight1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeRight
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeLeft Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp CurrentNode, 0
|
|||
|
JE I_VolumeEnvelopeLeft1
|
|||
|
|
|||
|
Dec CurrentNode
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_VolumeEnvelopeLeft1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeLeft
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeUp Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 5
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeUp
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeDown Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 17
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeDown
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldUp Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, 6
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Add AL, CS:AmplitudeCompensate
|
|||
|
|
|||
|
Cmp AL, 64
|
|||
|
JAE I_VolumeEnvelopeHeldUp1
|
|||
|
|
|||
|
Inc Byte Ptr [SI]
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldUp1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldDown Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, 6
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Add AL, CS:AmplitudeCompensate
|
|||
|
|
|||
|
JZ I_VolumeEnvelopeHeldDown1
|
|||
|
|
|||
|
Dec Byte Ptr [SI]
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldDown1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldLeft Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldLeft1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7 ; DS:SI points to node's posn
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
|
|||
|
Dec AX
|
|||
|
Cmp AX, [SI-3] ; Last node.
|
|||
|
JE I_VolumeEnvelopeHeldLeft1
|
|||
|
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldLeft1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldLeft
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldLeftFast Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldLeftFast2
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
|
|||
|
Sub AX, 16
|
|||
|
JNC I_VolumeEnvelopeHeldLeftFast3
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldLeftFast3:
|
|||
|
Cmp AX, [SI-3] ; Last node.
|
|||
|
JA I_VolumeEnvelopeHeldLeftFast1
|
|||
|
|
|||
|
Mov AX, [SI-3]
|
|||
|
Inc AX
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldLeftFast1:
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldLeftFast2:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldLeftFast
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldHome Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldHome1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7
|
|||
|
|
|||
|
Mov AX, [SI-3]
|
|||
|
Inc AX
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldHome1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldHome
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldRight Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldRight1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
Cmp AX, MAXENVELOPETICK
|
|||
|
JAE I_VolumeEnvelopeHeldRight1
|
|||
|
|
|||
|
Inc AX
|
|||
|
Inc CX
|
|||
|
Cmp CX, CS:MaxNode
|
|||
|
JE I_VolumeEnvelopeHeldRight2
|
|||
|
|
|||
|
Cmp AX, [SI+3] ; Last node.
|
|||
|
JE I_VolumeEnvelopeHeldRight1
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldRight2:
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldRight1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldRight
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldEnd Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldEnd1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7
|
|||
|
|
|||
|
|
|||
|
Mov AX, MAXENVELOPETICK
|
|||
|
Inc CX
|
|||
|
Cmp CX, CS:MaxNode
|
|||
|
JE I_VolumeEnvelopeHeldEnd2
|
|||
|
|
|||
|
Mov AX, [SI+3]
|
|||
|
Dec AX
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldEnd2:
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldEnd1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldEnd
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldRightFast Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov DX, CX
|
|||
|
Add DX, DX
|
|||
|
JZ I_VolumeEnvelopeHeldRightFast1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, DX
|
|||
|
Add SI, 7
|
|||
|
|
|||
|
Mov AX, [SI]
|
|||
|
|
|||
|
Add AX, 16
|
|||
|
Inc CX
|
|||
|
Cmp CX, CS:MaxNode
|
|||
|
JE I_VolumeEnvelopeHeldRightFast3
|
|||
|
|
|||
|
Cmp AX, [SI+3]
|
|||
|
JB I_VolumeEnvelopeHeldRightFast2
|
|||
|
|
|||
|
Mov AX, [SI+3]
|
|||
|
Dec AX
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldRightFast3:
|
|||
|
Cmp AX, MAXENVELOPETICK
|
|||
|
JBE I_VolumeEnvelopeHeldRightFast2
|
|||
|
|
|||
|
Mov AX, MAXENVELOPETICK
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldRightFast2:
|
|||
|
Mov [SI], AX
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldRightFast1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldRightFast
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldPgDn Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov AH, AmplitudeCompensate
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, 6
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Add AL, AH
|
|||
|
Sub AL, 8
|
|||
|
JNS I_VolumeEnvelopeHeldPgDn1
|
|||
|
|
|||
|
Xor AL, AL
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldPgDn1:
|
|||
|
Sub AL, AH
|
|||
|
Mov [SI], AL
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldPgDn
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeHeldPgUp Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov CX, CurrentNode
|
|||
|
Mov AH, AmplitudeCompensate
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, CX
|
|||
|
Add SI, 6
|
|||
|
|
|||
|
Mov AL, [SI]
|
|||
|
Add AL, AH
|
|||
|
Add AL, 8
|
|||
|
Cmp AL, 64
|
|||
|
JBE I_VolumeEnvelopeHeldPgUp1
|
|||
|
|
|||
|
Mov AL, 64
|
|||
|
|
|||
|
I_VolumeEnvelopeHeldPgUp1:
|
|||
|
Sub AL, AH
|
|||
|
Mov [SI], AL
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeHeldPgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeInsert Far
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov DX, CurrentNode
|
|||
|
|
|||
|
Inc DX
|
|||
|
Mov CX, MaxNode
|
|||
|
Cmp DX, CX
|
|||
|
JE I_VolumeEnvelopeInsert1
|
|||
|
|
|||
|
Mov DI, CX
|
|||
|
Sub CX, DX
|
|||
|
|
|||
|
Cmp DI, 25
|
|||
|
JE I_VolumeEnvelopeInsert1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; DS:SI
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
LEA BX, [SI+6]
|
|||
|
Add BX, DX
|
|||
|
Add BX, DX
|
|||
|
Add BX, DX
|
|||
|
Mov AX, [BX+1]
|
|||
|
Sub AX, [BX-2]
|
|||
|
Cmp AX, 2
|
|||
|
JB I_VolumeEnvelopeInsert1
|
|||
|
|
|||
|
ClI
|
|||
|
|
|||
|
Inc Byte Ptr [SI+1]
|
|||
|
|
|||
|
Mov BX, DI
|
|||
|
Add BX, BX
|
|||
|
Add BX, DI
|
|||
|
LEA BX, [BX+SI+6]
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert2:
|
|||
|
Mov AX, [BX-3]
|
|||
|
Mov [BX], AX
|
|||
|
Mov AL, [BX-1]
|
|||
|
Mov [BX+2], AL
|
|||
|
|
|||
|
Sub BX, 3
|
|||
|
Loop I_VolumeEnvelopeInsert2
|
|||
|
|
|||
|
Mov AX, [BX+4]
|
|||
|
Add AX, [BX-2]
|
|||
|
ShR AX, 1
|
|||
|
Mov [BX+1], AX
|
|||
|
|
|||
|
Mov AH, CS:AmplitudeCompensate
|
|||
|
Mov AL, [BX+3]
|
|||
|
Add AL, [BX-3]
|
|||
|
Add AL, AH
|
|||
|
Add AL, AH
|
|||
|
ShR AL, 1
|
|||
|
Sub AL, AH
|
|||
|
Mov [BX], AL
|
|||
|
|
|||
|
Mov CL, Byte Ptr CS:CurrentNode
|
|||
|
Cmp CL, [SI+2]
|
|||
|
JAE I_VolumeEnvelopeInsert4
|
|||
|
|
|||
|
Inc Byte Ptr [SI+2]
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert4:
|
|||
|
Cmp CL, [SI+3]
|
|||
|
JAE I_VolumeEnvelopeInsert5
|
|||
|
|
|||
|
Inc Byte Ptr [SI+3]
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert5:
|
|||
|
Cmp CL, [SI+4]
|
|||
|
JAE I_VolumeEnvelopeInsert6
|
|||
|
|
|||
|
Inc Byte Ptr [SI+4]
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert6:
|
|||
|
Cmp CL, [SI+5]
|
|||
|
JAE I_VolumeEnvelopeInsert7
|
|||
|
|
|||
|
Inc Byte Ptr [SI+5]
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert7:
|
|||
|
StI
|
|||
|
|
|||
|
Call I_MapEnvelope
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
I_VolumeEnvelopeInsert1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeInsert
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeDelete Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov DX, CurrentNode
|
|||
|
Mov DI, DX
|
|||
|
Add DI, DI
|
|||
|
Add DI, DX ; DI = CurrentNode*3
|
|||
|
JZ I_VolumeEnvelopeDelete1
|
|||
|
|
|||
|
Mov CX, MaxNode
|
|||
|
Cmp CX, 2
|
|||
|
JBE I_VolumeEnvelopeDelete1
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; Returns DS:SI
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
ClI
|
|||
|
|
|||
|
Dec Byte Ptr [SI+1]
|
|||
|
|
|||
|
Mov BX, SI
|
|||
|
LEA SI, [BX+DI+6]
|
|||
|
|
|||
|
Sub CX, DX
|
|||
|
Dec CX
|
|||
|
JZ I_VolumeEnvelopeDelete11
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete2:
|
|||
|
Mov AL, [SI+3]
|
|||
|
Mov [SI], AL
|
|||
|
Mov AX, [SI+4]
|
|||
|
Mov [SI+1], AX
|
|||
|
|
|||
|
Add SI, 3
|
|||
|
Loop I_VolumeEnvelopeDelete2
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete11:
|
|||
|
Xor AX, AX ; Neatness.. clear ending
|
|||
|
Mov [SI], AX
|
|||
|
Mov [SI+2], AL
|
|||
|
; Ok.. check loop stuff
|
|||
|
Mov DL, [BX+1]
|
|||
|
Dec DX ; DL = number of nodes
|
|||
|
Mov DH, Byte Ptr CS:CurrentNode
|
|||
|
|
|||
|
Cmp DH, [BX+2]
|
|||
|
JAE I_VolumeEnvelopeDelete7
|
|||
|
|
|||
|
Dec Byte Ptr [BX+2]
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete7:
|
|||
|
Cmp DH, [BX+3]
|
|||
|
JAE I_VolumeEnvelopeDelete8
|
|||
|
|
|||
|
Dec Byte Ptr [BX+3]
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete8:
|
|||
|
Cmp DH, [BX+4]
|
|||
|
JAE I_VolumeEnvelopeDelete9
|
|||
|
|
|||
|
Dec Byte Ptr [BX+4]
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete9:
|
|||
|
Cmp DH, [BX+5]
|
|||
|
JAE I_VolumeEnvelopeDelete10
|
|||
|
|
|||
|
Dec Byte Ptr [BX+5]
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete10:
|
|||
|
Cmp DL, [BX+2]
|
|||
|
JAE I_VolumeEnvelopeDelete3
|
|||
|
|
|||
|
Mov [BX+2], DL
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete3:
|
|||
|
Cmp DL, [BX+3]
|
|||
|
JAE I_VolumeEnvelopeDelete4
|
|||
|
|
|||
|
Mov [BX+3h], DL
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete4:
|
|||
|
Cmp DL, [BX+4]
|
|||
|
JAE I_VolumeEnvelopeDelete5
|
|||
|
|
|||
|
Mov [BX+4], DL
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete5:
|
|||
|
Cmp DL, [BX+5]
|
|||
|
JAE I_VolumeEnvelopeDelete6
|
|||
|
|
|||
|
Mov [BX+5], DL
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete6:
|
|||
|
StI
|
|||
|
Call I_MapEnvelope
|
|||
|
|
|||
|
I_VolumeEnvelopeDelete1:
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeDelete
|
|||
|
|
|||
|
;<3B><><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 I_EnvelopeSelected
|
|||
|
|
|||
|
Call I_GetEnvelopeOffset ; Returns DS:SI
|
|||
|
|
|||
|
IF FILTERENVELOPES
|
|||
|
Cmp CS:InstrumentScreen, 3
|
|||
|
JNE I_MouseEnvelopeNoFilter
|
|||
|
|
|||
|
Test Byte Ptr [SI], 1
|
|||
|
JNZ I_MouseEnvelopeNoFilter
|
|||
|
|
|||
|
Or Byte Ptr [SI], 80h
|
|||
|
|
|||
|
I_MouseEnvelopeNoFilter:
|
|||
|
ELSE
|
|||
|
And Byte Ptr [SI], 7Fh ; Turn of filters.
|
|||
|
|
|||
|
ENDIF
|
|||
|
|
|||
|
Or Byte Ptr [SI], 1 ; Turn on envelope
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_EnvelopeSelected
|
|||
|
|
|||
|
;<3B><><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 I_VolumeEnvelopeEnter Far
|
|||
|
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Xor NodeHeld, 1
|
|||
|
JZ I_VolumeEnvelopeEnter1
|
|||
|
|
|||
|
Call I_EnvelopeSelected
|
|||
|
|
|||
|
I_VolumeEnvelopeEnter1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_VolumeEnvelopeEnter
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentListSpace Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp NoteReleased, 1
|
|||
|
JNE I_InstrumentSpace1
|
|||
|
|
|||
|
Mov NoteReleased, 0
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov AH, BL
|
|||
|
Inc AH
|
|||
|
Mov AL, PlayNote
|
|||
|
Mov [SI], AX
|
|||
|
Mov AX, PlayChannel
|
|||
|
Mov DH, 32+128
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
I_InstrumentSpace1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentListSpace
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_InstrumentListNoteOff Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov NoteReleased, 1
|
|||
|
Mov SI, Offset NoteData
|
|||
|
Mov Word Ptr [SI], 255
|
|||
|
Mov AX, PlayChannel
|
|||
|
Mov DH, 32+128
|
|||
|
Call Music_PlayNote
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_InstrumentListNoteOff
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_ShowSamplePlay Far
|
|||
|
; Clear table first.
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
; DS = Inst
|
|||
|
Mov SI, Offset SamplePlayTable
|
|||
|
Mov CX, 100
|
|||
|
|
|||
|
I_ShowSamplePlayClearTable:
|
|||
|
And Byte Ptr [SI], Not 3
|
|||
|
Inc SI
|
|||
|
Loop I_ShowSamplePlayClearTable
|
|||
|
|
|||
|
Call Music_GetSlaveChannelInformationTable
|
|||
|
; DS:SI points to table.
|
|||
|
; CX = numchannels.
|
|||
|
Xor BH, BH
|
|||
|
|
|||
|
I_ShowSamplePlay1:
|
|||
|
Mov AX, [SI]
|
|||
|
Test AL, 1 ; Is channel on?
|
|||
|
JZ I_ShowSamplePlay2
|
|||
|
|
|||
|
Test AH, 8 ; Is it muted?
|
|||
|
JNZ I_ShowSamplePlay2
|
|||
|
|
|||
|
Mov BL, [SI+36h]
|
|||
|
Cmp BL, 100
|
|||
|
JAE I_ShowSamplePlay2
|
|||
|
|
|||
|
Or [CS:SamplePlayTable+BX], 1 ; Show sample is on.
|
|||
|
|
|||
|
Cmp DWord Ptr [SI+2Ch], 0
|
|||
|
JNE I_ShowSamplePlay2
|
|||
|
|
|||
|
Or [CS:SamplePlayTable+BX], 2
|
|||
|
|
|||
|
I_ShowSamplePlay2:
|
|||
|
Add SI, SLAVECHANNELSIZE
|
|||
|
Loop I_ShowSamplePlay1
|
|||
|
|
|||
|
; OK.. now to dump the stuff
|
|||
|
; onscreen
|
|||
|
|
|||
|
Mov BX, TopSample
|
|||
|
Dec BX
|
|||
|
Mov SI, Offset SamplePlayTable
|
|||
|
|
|||
|
Jmp I_ShowInstrumentPlay5
|
|||
|
|
|||
|
EndP I_ShowSamplePlay
|
|||
|
|
|||
|
;<3B><><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 I_ShowInstrumentPlay Far
|
|||
|
; Clear table first.
|
|||
|
|
|||
|
Call Music_GetInstrumentMode
|
|||
|
JZ I_ShowInstrumentPlayEnd
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
; DS = Inst
|
|||
|
Mov SI, Offset InstrumentPlayTable
|
|||
|
Mov CX, 100
|
|||
|
|
|||
|
I_ShowInstrumentPlayClearTable:
|
|||
|
And Byte Ptr [SI], Not 3
|
|||
|
Inc SI
|
|||
|
Loop I_ShowInstrumentPlayClearTable
|
|||
|
|
|||
|
Call Music_GetSlaveChannelInformationTable
|
|||
|
; DS:SI points to table.
|
|||
|
; CX = numchannels.
|
|||
|
Xor BH, BH
|
|||
|
|
|||
|
I_ShowInstrumentPlay1:
|
|||
|
Mov AX, [SI]
|
|||
|
Test AL, 1 ; Is channel on?
|
|||
|
JZ I_ShowInstrumentPlay2
|
|||
|
|
|||
|
Test AH, 8 ; Is it muted?
|
|||
|
JNZ I_ShowInstrumentPlay2
|
|||
|
|
|||
|
Mov BL, [SI+33h]
|
|||
|
Cmp BL, 100
|
|||
|
JAE I_ShowInstrumentPlay2
|
|||
|
|
|||
|
Or [CS:InstrumentPlayTable+BX], 1 ; Show sample is on.
|
|||
|
|
|||
|
Cmp DWord Ptr [SI+2Ch], 0
|
|||
|
JNE I_ShowInstrumentPlay2
|
|||
|
|
|||
|
Or [CS:InstrumentPlayTable+BX], 2
|
|||
|
|
|||
|
I_ShowInstrumentPlay2:
|
|||
|
Add SI, SLAVECHANNELSIZE
|
|||
|
Loop I_ShowInstrumentPlay1
|
|||
|
|
|||
|
; OK.. now to dump the stuff
|
|||
|
; onscreen
|
|||
|
|
|||
|
Mov BX, TopInstrument
|
|||
|
Mov SI, Offset InstrumentPlayTable
|
|||
|
|
|||
|
I_ShowInstrumentPlay5:
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Mov CX, 35
|
|||
|
Mov DI, (1+13*80)*2
|
|||
|
|
|||
|
I_ShowInstrumentPlay3:
|
|||
|
Mov AX, 2100h
|
|||
|
|
|||
|
Mov DL, [CS:SI+BX]
|
|||
|
|
|||
|
Cmp DL, 0 ; No dot.
|
|||
|
JE I_ShowInstrumentPlay4
|
|||
|
|
|||
|
Mov AL, 173
|
|||
|
|
|||
|
Cmp DL, 4 ; Dark small dot
|
|||
|
JE I_ShowInstrumentPlay4
|
|||
|
|
|||
|
Mov AH, 23h
|
|||
|
|
|||
|
Test DL, 2 ; Small bright dot
|
|||
|
JZ I_ShowInstrumentPlay4
|
|||
|
|
|||
|
Mov AL, 183 ; Large bright dot.
|
|||
|
|
|||
|
I_ShowInstrumentPlay4:
|
|||
|
StosW
|
|||
|
|
|||
|
Add DI, 158
|
|||
|
Inc BX
|
|||
|
Loop I_ShowInstrumentPlay3
|
|||
|
|
|||
|
I_ShowInstrumentPlayEnd:
|
|||
|
Ret
|
|||
|
|
|||
|
|
|||
|
EndP I_ShowInstrumentPlay
|
|||
|
|
|||
|
;<3B><><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 I_ClearTables Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov DI, Offset SamplePlayTable
|
|||
|
Mov CX, 128
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ClearTables
|
|||
|
|
|||
|
;<3B><><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 I_TagInstrument Far
|
|||
|
|
|||
|
Mov Byte Ptr [CS:InstrumentPlayTable+BX], 4
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_TagInstrument
|
|||
|
|
|||
|
;<3B><><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 I_TagSample Far
|
|||
|
|
|||
|
Mov Byte Ptr [CS:SamplePlayTable+BX], 4
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_TagSample
|
|||
|
|
|||
|
;<3B><><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 MIDI_PlaySample Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Test DH, DH
|
|||
|
JNZ MIDI_PlaySample1
|
|||
|
|
|||
|
Jmp MIDI_NoteOff2
|
|||
|
|
|||
|
MIDI_PlaySample1:
|
|||
|
Call Music_GetNumChannels ; Into AX
|
|||
|
Mov DI, AX
|
|||
|
Mov AX, PlayChannel
|
|||
|
Call MIDI_AllocateChannel
|
|||
|
|
|||
|
Call PE_GetLastInstrument
|
|||
|
Mov CX, AX
|
|||
|
Mov AL, DL
|
|||
|
Mov AH, BL
|
|||
|
Inc AH
|
|||
|
Call Music_PlaySample
|
|||
|
|
|||
|
MIDI_PlaySample2:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP MIDI_PlaySample
|
|||
|
|
|||
|
;<3B><><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 I_PlaySample Far
|
|||
|
|
|||
|
Mov AX, Pattern
|
|||
|
Mov DS, AX
|
|||
|
Assume DS:Pattern
|
|||
|
|
|||
|
Mov AH, LastInstrument
|
|||
|
Mov AL, CS:LastPlaySample
|
|||
|
|
|||
|
Mov CX, CS:PlayChannel
|
|||
|
Call Music_PlaySample
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PlaySample
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_IncreasePlayChannel Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, PlayChannel
|
|||
|
Cmp AX, 63
|
|||
|
JAE I_IncreasePlayChannel1
|
|||
|
|
|||
|
Inc AX
|
|||
|
|
|||
|
I_IncreasePlayChannel1:
|
|||
|
Mov PlayChannel, AX
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov SI, Offset PlayChannelMsg
|
|||
|
|
|||
|
Call SetInfoLine
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_IncreasePlayChannel
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_DecreasePlayChannel Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov AX, PlayChannel
|
|||
|
And AX, AX
|
|||
|
JZ I_DecreasePlayChannel1
|
|||
|
|
|||
|
Dec AX
|
|||
|
|
|||
|
I_DecreasePlayChannel1:
|
|||
|
Mov PlayChannel, AX
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov SI, Offset PlayChannelMsg
|
|||
|
|
|||
|
Call SetInfoLine
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DecreasePlayChannel
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 UpdateMultiChannel
|
|||
|
|
|||
|
Cmp CS:MultiChannel, 0
|
|||
|
JE UpdateMultiChannel1
|
|||
|
|
|||
|
Push AX
|
|||
|
Push BX
|
|||
|
Push DS
|
|||
|
Push SI
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Call Music_GetNumChannels ; Into AX
|
|||
|
Mov BX, PlayChannel
|
|||
|
Inc BX
|
|||
|
Cmp BX, AX
|
|||
|
JB UpdateMultiChannel2
|
|||
|
|
|||
|
Xor BX, BX
|
|||
|
|
|||
|
UpdateMultiChannel2:
|
|||
|
Mov PlayChannel, BX
|
|||
|
Mov AX, BX
|
|||
|
Inc AX
|
|||
|
|
|||
|
Mov SI, Offset PlayChannelMsg
|
|||
|
Call SetInfoLine
|
|||
|
|
|||
|
Pop SI
|
|||
|
Pop DS
|
|||
|
Pop BX
|
|||
|
Pop AX
|
|||
|
|
|||
|
UpdateMultiChannel1:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP UpdateMultiChannel
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_ToggleMultiChannel Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset MultiChannelEnabledMsg
|
|||
|
Xor MultiChannel, 1
|
|||
|
JNZ I_ToggleMultiChannel1
|
|||
|
|
|||
|
Mov SI, Offset MultiChannelDisabledMsg
|
|||
|
|
|||
|
I_ToggleMultiChannel1:
|
|||
|
Call SetInfoLine
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_ToggleMultiChannel
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><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 I_DrawPitchPanCenter Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Call I_GetInstrumentOffset ; Returns DS:BX
|
|||
|
Mov DI, (54+45*80)*2
|
|||
|
|
|||
|
Mov AL, [BX+17h]
|
|||
|
Mov CL, 12
|
|||
|
Xor AH, AH
|
|||
|
Xor BH, BH
|
|||
|
|
|||
|
Div CL
|
|||
|
; AL = octave, AH = note
|
|||
|
Mov BL, AH
|
|||
|
Mov DL, AL
|
|||
|
Add BX, BX
|
|||
|
Add DL, '0'
|
|||
|
|
|||
|
Mov AH, 2
|
|||
|
Mov AL, [CS:NoteTable+BX]
|
|||
|
StosW
|
|||
|
Mov AL, [CS:NoteTable+BX+1]
|
|||
|
StosW
|
|||
|
Mov AL, DL
|
|||
|
StosW
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_DrawPitchPanCenter
|
|||
|
|
|||
|
;<3B><><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 I_PrePitchPanCenter Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
Mov AL, 3h
|
|||
|
Mov DI, (54+45*80)*2+1
|
|||
|
StosB
|
|||
|
Inc DI
|
|||
|
StosB
|
|||
|
Inc DI
|
|||
|
StosB
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PrePitchPanCenter
|
|||
|
|
|||
|
;<3B><><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 I_PostPitchPanCenter Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Mov SI, Offset PitchPanCenterKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC I_PostPitchPanCenter1
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
I_PostPitchPanCenter1:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PostPitchPanCenter
|
|||
|
|
|||
|
;<3B><><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 I_PitchPanCenterUp Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 27
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PitchPanCenterUp
|
|||
|
|
|||
|
;<3B><><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 I_PitchPanCenterDown Far
|
|||
|
|
|||
|
Mov Word Ptr [ES:DI], 29
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PitchPanCenterDown
|
|||
|
|
|||
|
;<3B><><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 I_PitchPanCenterSemiUp Far
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Mov AL, [BX+17h]
|
|||
|
|
|||
|
Cmp AL, 119
|
|||
|
JAE I_PitchPanCenterSemiUp1
|
|||
|
|
|||
|
Inc AX
|
|||
|
Mov [BX+17h], AL
|
|||
|
|
|||
|
I_PitchPanCenterSemiUp1:
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PitchPanCenterSemiUp
|
|||
|
|
|||
|
;<3B><><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 I_PitchPanCenterSemiDown Far
|
|||
|
|
|||
|
Call I_GetInstrumentOffset
|
|||
|
Mov AL, [BX+17h]
|
|||
|
|
|||
|
Dec AL
|
|||
|
JS I_PitchPanCenterSemiDown1
|
|||
|
|
|||
|
Mov [BX+17h], AL
|
|||
|
|
|||
|
I_PitchPanCenterSemiDown1:
|
|||
|
NetworkSendInstrument
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_PitchPanCenterSemiDown
|
|||
|
|
|||
|
;<3B><><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 I_IdleUpdateEnvelope Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Inst
|
|||
|
|
|||
|
Cmp UpdateInstrumentScreen, 0
|
|||
|
JNE I_IdleUpdateEnvelope2
|
|||
|
|
|||
|
Mov CL, Byte Ptr InstrumentScreen
|
|||
|
Add CL, 11
|
|||
|
Mov DL, 1
|
|||
|
ShL DX, CL
|
|||
|
|
|||
|
Call PE_GetLastInstrument ; Gets BX
|
|||
|
Inc BX
|
|||
|
Call Music_GetSlaveChannelInformationTable
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
I_IdleUpdateEnvelope1:
|
|||
|
Cmp Byte Ptr [SI+33h], BL
|
|||
|
JNE I_IdleUpdateEnvelope4
|
|||
|
|
|||
|
Test Byte Ptr [SI], 1
|
|||
|
JZ I_IdleUpdateEnvelope4
|
|||
|
|
|||
|
Test [SI], DX
|
|||
|
JZ I_IdleUpdateEnvelope4
|
|||
|
|
|||
|
I_IdleUpdateEnvelope2:
|
|||
|
Call I_MapEnvelope
|
|||
|
Jmp I_IdleUpdateEnvelope3
|
|||
|
|
|||
|
I_IdleUpdateEnvelope4:
|
|||
|
Add SI, SLAVECHANNELSIZE
|
|||
|
Loop I_IdleUpdateEnvelope1
|
|||
|
|
|||
|
I_IdleUpdateEnvelope3:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_IdleUpdateEnvelope
|
|||
|
|
|||
|
;<3B><><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 UpdateWAVEForm Far
|
|||
|
|
|||
|
Call I_RedrawWave
|
|||
|
Ret
|
|||
|
|
|||
|
EndP UpdateWAVEForm
|
|||
|
|
|||
|
;<3B><><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 I_SampleButtonHandler Far
|
|||
|
|
|||
|
Test AX, AX
|
|||
|
JZ I_SampleButtonHandler1
|
|||
|
|
|||
|
NetworkSendSample
|
|||
|
|
|||
|
I_SampleButtonHandler1:
|
|||
|
Push DS
|
|||
|
|
|||
|
Call I_GetSampleOffset
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
Mov DI, BX
|
|||
|
Pop DS
|
|||
|
|
|||
|
Add DI, [SI+24]
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_SampleButtonHandler
|
|||
|
|
|||
|
;<3B><><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 I_GetPresetEnvelopeOffset Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Mov DX, Offset PresetEnvelopes
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP I_GetPresetEnvelopeOffset
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
EndS
|
|||
|
|
|||
|
;<3B><><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>
|
|||
|
|
|||
|
End
|