12313 lines
		
	
	
		
			344 KiB
		
	
	
	
		
			NASM
		
	
	
	
			
		
		
	
	
			12313 lines
		
	
	
		
			344 KiB
		
	
	
	
		
			NASM
		
	
	
	
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 | 
						|
;³ PatternEdit module                                                          ³
 | 
						|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
 | 
						|
 | 
						|
                        Jumps
 | 
						|
                        .386
 | 
						|
 | 
						|
include switch.inc
 | 
						|
 | 
						|
include network.inc
 | 
						|
 | 
						|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 | 
						|
;³ Externals                                                                   ³
 | 
						|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
 | 
						|
 | 
						|
Segment         Object1 BYTE Public 'Data'
 | 
						|
EndS
 | 
						|
 | 
						|
Segment         Disk BYTE Public 'Code'
 | 
						|
EndS
 | 
						|
 | 
						|
Segment         Inst BYTE Public 'Code'
 | 
						|
                Extrn   InstrumentEdit:Byte
 | 
						|
                Extrn   NodeHeld:Byte
 | 
						|
EndS
 | 
						|
 | 
						|
                Extrn   E_GetFreeEMS:Far
 | 
						|
                Extrn   E_UnInitEMS:Far
 | 
						|
                Extrn   E_ReleaseEMS:Far
 | 
						|
                Extrn   E_AllocateEMS:Far
 | 
						|
                Extrn   E_MapAvailableEMSMemory:Far
 | 
						|
                Extrn   E_GetEMSPageFrame:Far
 | 
						|
 | 
						|
                Extrn   Glbl_F2:Far, Glbl_F6:Far
 | 
						|
                Extrn   Glbl_GetHeaderMode:Far
 | 
						|
                Extrn   Glbl_LeftBrace:Far, Glbl_RightBrace:Far
 | 
						|
                Extrn   Glbl_LeftSquareBracket:Far, Glbl_RightSquareBracket:Far
 | 
						|
 | 
						|
                Extrn   I_ClearTables:Far
 | 
						|
 | 
						|
                Extrn   K_UnInitKeyBoard:Far
 | 
						|
                Extrn   K_SetScrollLock:Far
 | 
						|
                Extrn   K_IsKeyDown:Far
 | 
						|
 | 
						|
                Extrn   M_FunctionHandler:Far
 | 
						|
                Extrn   M_Object1List:Far
 | 
						|
                Extrn   M_FunctionDivider:Far
 | 
						|
 | 
						|
                Extrn   Music_PlayPartSong:Far
 | 
						|
                Extrn   Music_GetSongSegment:Far
 | 
						|
                Extrn   Music_UnInitMusic:Far
 | 
						|
                Extrn   Music_ReleasePattern:Far
 | 
						|
                Extrn   Music_AllocatePattern:Far
 | 
						|
                Extrn   Music_GetPattern:Far
 | 
						|
                Extrn   Music_GetInstrumentMode:Far
 | 
						|
                Extrn   Music_UpdatePatternOffset:Far
 | 
						|
                Extrn   Music_PlayNote:Far
 | 
						|
                Extrn   Music_InitMixTable:Far
 | 
						|
                Extrn   Music_InitMuteTable:Far
 | 
						|
                Extrn   Music_InitStereo:Far
 | 
						|
                Extrn   Music_ToggleChannel:Far
 | 
						|
                Extrn   Music_SoloChannel:Far
 | 
						|
                Extrn   Music_GetPlayMode:Far
 | 
						|
                Extrn   Music_PlayPattern:Far
 | 
						|
                Extrn   Music_GetLastChannel:Far
 | 
						|
                Extrn   Music_SetNextOrder:Far
 | 
						|
                Extrn   Music_NextOrder:Far
 | 
						|
                Extrn   Music_LastOrder:Far
 | 
						|
                Extrn   Music_Stop:Far
 | 
						|
 | 
						|
                Extrn   Music_UnmuteAll:Far
 | 
						|
 | 
						|
                Extrn   Music_SoundCardLoadSample:Far
 | 
						|
                Extrn   Music_SoundCardLoadAllSamples:Far
 | 
						|
                Extrn   Music_GetDisplayVariables:Far
 | 
						|
 | 
						|
                Extrn   Network_UpdatePattern:Far
 | 
						|
 | 
						|
                Extrn   FileName:Byte
 | 
						|
 | 
						|
                Extrn   O1_ConfirmNoSave:Far
 | 
						|
                Extrn   O1_NoBlockMarkedList:Far
 | 
						|
                Extrn   O1_SwapOutOfRangeList:Far
 | 
						|
                Extrn   O1_OverlapBlockList:Far
 | 
						|
                Extrn   O1_OutOfMemoryList:Far
 | 
						|
                Extrn   O1_NoBlockDataList:Far
 | 
						|
                Extrn   O1_GetAmpList:Far
 | 
						|
                Extrn   O1_GetFastAmpList:Far
 | 
						|
 | 
						|
IF SHOWPATTERNLENGTH
 | 
						|
                Extrn   O1_ShowPatternLengthList:Far
 | 
						|
ENDIF
 | 
						|
 | 
						|
                Extrn   O1_TemplateErrorList:Far
 | 
						|
                Extrn   O1_PatternTooLongList:Far
 | 
						|
                Extrn   O1_SelectMultiChannel:Far
 | 
						|
                Extrn   O1_UndoList:Far
 | 
						|
                Extrn   O1_SetPatternLength:Far
 | 
						|
                Extrn   O1_PatternSizeMismatchList:Far
 | 
						|
 | 
						|
                Extrn   S_UnInitScreen:Far
 | 
						|
                Extrn   S_DrawBox:Far
 | 
						|
                Extrn   S_DrawString:Far
 | 
						|
                Extrn   S_GetDestination:Far
 | 
						|
                Extrn   S_SaveScreen:Far
 | 
						|
                Extrn   S_RestoreScreen:Far
 | 
						|
                Extrn   S_SetDirectMode:Far
 | 
						|
                Extrn   S_DrawSmallBox:Far
 | 
						|
                Extrn   S_InvertCursor:Far
 | 
						|
 | 
						|
                Extrn   PatternLength
 | 
						|
 | 
						|
                Extrn   UpdateInfoLine:Far
 | 
						|
                Extrn   SetInfoLine:Far
 | 
						|
                Extrn   MouseUpdateDisable:Far
 | 
						|
                Extrn   UpdateWAVEForm:Far
 | 
						|
 | 
						|
                Extrn   MIDI_AllocateChannel:Far, MIDI_FindChannel:Far
 | 
						|
                Extrn   Music_GetDelay:Far, MIDI_GetChannel:Far
 | 
						|
 | 
						|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 | 
						|
;³ Globals                                                                     ³
 | 
						|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
 | 
						|
 | 
						|
                Global  PE_ClearUndoBuffer:Far
 | 
						|
 | 
						|
                Global  PE_ShowOrder:Far
 | 
						|
                Global  PE_NewPattern:Far
 | 
						|
 | 
						|
                Global  PE_InitPatternEdit:Far
 | 
						|
                Global  PE_UnInitPatternEdit:Far
 | 
						|
                Global  PE_DrawOrderList:Far
 | 
						|
                Global  PE_FillHeader:Far
 | 
						|
                Global  PE_PreOrderList:Far
 | 
						|
                Global  PE_PostOrderList:Far
 | 
						|
                Global  PE_ConvAX2Num:Far
 | 
						|
                Global  PE_GetCurrentPattern:Far
 | 
						|
                Global  PE_GetMaxPattern:Far
 | 
						|
                Global  PE_FillSpeedTempo:Far
 | 
						|
 | 
						|
                Global  PE_SetPatternModified:Far
 | 
						|
                Global  PE_GetLastInstrument:Far
 | 
						|
                Global  PE_DrawPatternEdit:Far
 | 
						|
                Global  PE_PrePatternEdit:Far
 | 
						|
                Global  PE_PostPatternEdit:Far
 | 
						|
                Global  PE_SetCommandCursor:Far
 | 
						|
                Global  PEFunction_IncreaseOctave:Far
 | 
						|
                Global  PEFunction_DecreaseOctave:Far
 | 
						|
 | 
						|
                Global  PE_F7:Far
 | 
						|
 | 
						|
                Global  PE_GetPatternConfigOffset:Far
 | 
						|
 | 
						|
                Global  PE_SwapInstruments:Far
 | 
						|
                Global  PE_GetMaxOrder:Far
 | 
						|
                Global  PE_GotoPattern:Far
 | 
						|
                Global  PECheckModified:Far
 | 
						|
 | 
						|
                Global  PE_TranslateXMPattern:Far
 | 
						|
                Global  PE_TranslateS3MPattern:Far
 | 
						|
                Global  PE_TranslateMODPattern:Far
 | 
						|
                Global  PE_TranslateMTMPattern:Far
 | 
						|
                Global  PE_Translate669Pattern:Far
 | 
						|
                Global  PE_ResetOrderPattern:Far
 | 
						|
                Global  PEFunction_OutOfMemoryMessage:Far
 | 
						|
                Global  PE_UpdateInstruments:Far
 | 
						|
 | 
						|
                Global  PEFunction_DrawUndo:Far
 | 
						|
                Global  PEFunction_PreUndo:Far
 | 
						|
                Global  PEFunction_PostUndo:Far
 | 
						|
                Global  PEResetModified:Far
 | 
						|
 | 
						|
                Global  PE_SaveCurrentPattern:Far
 | 
						|
                Global  PE_RestoreCurrentPattern:Far
 | 
						|
                Global  PEFunction_StoreCurrentPattern:Far
 | 
						|
 | 
						|
                Global  BaseOctave
 | 
						|
                Global  SkipValue
 | 
						|
                Global  RowHiLight1:Byte
 | 
						|
                Global  RowHiLight2:Byte
 | 
						|
                Global  MaxRow:Word
 | 
						|
                Global  NumberOfRows:Word
 | 
						|
                Global  Amplification
 | 
						|
                Global  FastVolumeAmplification
 | 
						|
                Global  CommandToValue:Byte
 | 
						|
                Global  LastInstrument:Byte
 | 
						|
                Public  MultiChannelInfo
 | 
						|
                Public  PatternDataArea
 | 
						|
                Public  Order, CentraliseCursor
 | 
						|
                Public  PatternSetLength, PatternLengthStart, PatternLengthEnd
 | 
						|
                Public  MIDI_SetInstrument, PE_TranslateMIDI
 | 
						|
                Public  MIDIAmplification, MIDICentralNote, PE_RestoreMIDINote
 | 
						|
                Public  PE_InsertInstrument, PE_DeleteInstrument
 | 
						|
                Public  Flags, Modified, PatternModified
 | 
						|
 | 
						|
                Public  LastKeyBoard1, PatternNumber
 | 
						|
 | 
						|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
 | 
						|
 | 
						|
Segment                 Pattern WORD Public 'Code' USE16
 | 
						|
                        Assume CS:Pattern, DS:Nothing
 | 
						|
 | 
						|
CREATENEWLOGFILE        EQU     0
 | 
						|
include debug.inc
 | 
						|
 | 
						|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 | 
						|
;³ Variables                                                                   ³
 | 
						|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
 | 
						|
 | 
						|
NONOTE                  EQU     0FDh
 | 
						|
MAXNOTE                 EQU     119
 | 
						|
 | 
						|
;PatternSize             DW      0
 | 
						|
;PatternEnd              DW      0
 | 
						|
PatternDataArea         DW      PatternData
 | 
						|
 | 
						|
TempVariableArea        DW      0
 | 
						|
TempVariableArea2       DW      0
 | 
						|
TempVariableArea3       DW      0
 | 
						|
TempVariableArea4       DW      0
 | 
						|
TempVariableArea5       DW      0
 | 
						|
TempVariableArea6       DW      0
 | 
						|
 | 
						|
TopOrder                DW      0
 | 
						|
Order                   DW      0
 | 
						|
OrderCursor             DW      0
 | 
						|
PatternNumber           DW      0
 | 
						|
TopRow                  DW      0
 | 
						|
Row                     DW      0
 | 
						|
MaxRow                  DW      63
 | 
						|
NumberOfRows            DW      64
 | 
						|
 | 
						|
LeftChannel             DW      0
 | 
						|
Channel                 DW      0
 | 
						|
MIDIChannel             DW      0
 | 
						|
PatternCursor           DW      0
 | 
						|
BaseOctave              DW      4
 | 
						|
SkipValue               DW      1
 | 
						|
MultiChannelInfo        DB      64 Dup (0)
 | 
						|
BlockMark               DW      0  ; 0 if no block marked, 1 if block is marked
 | 
						|
BlockLeft               DW      0
 | 
						|
BlockTop                DW      0
 | 
						|
BlockRight              DW      0
 | 
						|
BlockBottom             DW      0
 | 
						|
BlockDataArea           DW      0
 | 
						|
BlockAnchorChannel      DW      0
 | 
						|
BlockAnchorRow          DW      0
 | 
						|
BlockReset              DW      0
 | 
						|
LastKeyBoard1           DW      0, 0
 | 
						|
LastKeyBoard2           DW      0, 0
 | 
						|
LastKeyBoard3           DW      0, 0
 | 
						|
 | 
						|
EmptyRow                DB      64 Dup ( NONOTE, 0, 0FFh, 0, 0 )
 | 
						|
 | 
						|
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
 | 
						|
                        DW      0FFFFh
 | 
						|
 | 
						|
MODPeriodTable          DW      1712, 1616, 1525, 1440, 1357, 1281 ; Octave 0
 | 
						|
                        DW      1209, 1141, 1077, 1017,  961,  907
 | 
						|
                        DW       856,  808,  762,  720,  678,  640 ; Octave 1
 | 
						|
                        DW       604,  570,  538,  508,  480,  453
 | 
						|
                        DW       428,  404,  381,  360,  339,  320 ; Octave 2
 | 
						|
                        DW       302,  285,  269,  254,  240,  226
 | 
						|
                        DW       214,  202,  190,  180,  170,  160 ; Octave 3
 | 
						|
                        DW       151,  143,  135,  127,  120,  113
 | 
						|
                        DW       107,  101,   95,   90,   85,   80 ; Octave 4
 | 
						|
                        DW        75,   71,   67,   63,   60,   56
 | 
						|
                        DW        53,   50,   47,   45,   42,   40 ; Octave 5
 | 
						|
                        DW        37,   35,   33,   31,   30,   28
 | 
						|
 | 
						|
Amplification           DW      100
 | 
						|
 | 
						|
PlayMarkPattern         DW      0
 | 
						|
PlayMarkRow             DW      0
 | 
						|
PlayMarkOn              DB      0
 | 
						|
VolumePan               DB      0
 | 
						|
 | 
						|
UndoBuffer              DW      20 Dup (0)      ; Word for segment, word for
 | 
						|
                                                ; type:
 | 
						|
 | 
						|
UndoBufferTypes         Label   Word
 | 
						|
        DW      Offset UndoBufferType0, Offset UndoBufferType1
 | 
						|
        DW      Offset UndoBufferType2, Offset UndoBufferType3
 | 
						|
        DW      Offset UndoBufferType4, Offset UndoBufferType5
 | 
						|
        DW      Offset UndoBufferType6, Offset UndoBufferType7
 | 
						|
        DW      Offset UndoBufferType8, Offset UndoBufferType9
 | 
						|
        DW      Offset UndoBufferType10, Offset UndoBufferType11
 | 
						|
        DW      Offset UndoBufferType12, Offset UndoBufferType13
 | 
						|
        DW      Offset UndoBufferType14, Offset UndoBufferType15
 | 
						|
        DW      Offset UndoBufferType16, Offset UndoBufferType17
 | 
						|
        DW      Offset UndoBufferType18, Offset UndoBufferType19
 | 
						|
        DW      Offset UndoBufferType20, Offset UndoBufferType21
 | 
						|
        DW      Offset UndoBufferType22
 | 
						|
 | 
						|
UndoBufferType0         DB      "Empty", 0
 | 
						|
UndoBufferType1         DB      "Undo revert pattern data (Alt-BkSpace)", 0
 | 
						|
UndoBufferType2         DB      "Undo transposition up", 0FFh, 10, " (Alt-Q)", 0
 | 
						|
UndoBufferType3         DB      "Undo transposition down", 0FFh, 8, " (Alt-A)", 0
 | 
						|
UndoBufferType4         DB      "Undo block length double", 0FFh, 7, " (Alt-F)", 0
 | 
						|
UndoBufferType5         DB      "Undo block length halve", 0FFh, 8, " (Alt-G)", 0
 | 
						|
UndoBufferType6         DB      "Undo volume amplification", 0FFh, 6, " (Alt-J)", 0
 | 
						|
UndoBufferType7         DB      "Undo volume or panning slide   (Alt-K)", 0
 | 
						|
UndoBufferType8         DB      "Recover volumes/pannings", 0FFh, 5, " (2*Alt-K)", 0
 | 
						|
UndoBufferType9         DB      "Replace mixed data", 0FFh, 13, " (Alt-M)", 0
 | 
						|
UndoBufferType10        DB      "Replace overwritten data", 0FFh, 7, " (Alt-O)", 0
 | 
						|
UndoBufferType11        DB      "Undo paste data", 0FFh, 16, " (Alt-P)", 0
 | 
						|
UndoBufferType12        DB      "Undo set sample/instrument", 0FFh, 5, " (Alt-S)", 0
 | 
						|
UndoBufferType13        DB      "Undo set volume/panning", 0FFh, 8, " (Alt-V)", 0
 | 
						|
UndoBufferType14        DB      "Replace extra volumes/pannings (Alt-W)", 0
 | 
						|
UndoBufferType15        DB      "Undo effect data slide", 0FFh, 9, " (Alt-X)", 0
 | 
						|
UndoBufferType16        DB      "Recover effects/effect data  (2*Alt-X)", 0
 | 
						|
UndoBufferType17        DB      "Undo swap block", 0FFh, 16, " (Alt-Y)", 0
 | 
						|
UndoBufferType18        DB      "Undo block cut", 0FFh, 17, " (Alt-Z)", 0
 | 
						|
UndoBufferType19        DB      "Remove inserted row(s)", 0FFh, 4, " (Alt-Insert)", 0
 | 
						|
UndoBufferType20        DB      "Replace deleted row(s)", 0FFh, 4, " (Alt-Delete)", 0
 | 
						|
UndoBufferType21        DB      "Redo", 0FFh, 28, " (Undo)", 0
 | 
						|
UndoBufferType22        DB      "Pattern ", 0FDh, "D", 0
 | 
						|
 | 
						|
SelectUndo              DW      0
 | 
						|
ShiftPressed            DB      0
 | 
						|
NoteEntered             DB      0
 | 
						|
 | 
						|
PreviewNote             DB      0, 0, 0FFh, 0, 0
 | 
						|
 | 
						|
Modified                DB      0               ; } Order important
 | 
						|
PatternModified         DB      0               ; }
 | 
						|
 | 
						|
MIDIPlayTrigger         DB      0               ; 0 = nothing, 1 = play
 | 
						|
                                                ; pattern, 2 = play song.
 | 
						|
 | 
						|
CompleteMsg             DB      0FDh, "D% Complete", 0
 | 
						|
Template                DB      0
 | 
						|
TemplateMsg1            DB      "Template, Overwrite", 0
 | 
						|
TemplateMsg2            DB      "Template, Mix - Pattern data precedence", 0
 | 
						|
TemplateMsg3            DB      "Template, Mix - Clipboard data precedence", 0
 | 
						|
TemplateMsg4            DB      "Template, Notes only", 0
 | 
						|
TriggerMsg1             DB      "No MIDI Trigger", 0
 | 
						|
TriggerMsg2             DB      "Pattern MIDI Trigger", 0
 | 
						|
TriggerMsg3             DB      "Song MIDI Trigger", 0
 | 
						|
NextOrderMsg            DB      "Playing order ", 0FDh, "D next", 0
 | 
						|
CursorStepMSg           DB      "Cursor step set to ", 0FDh, "D", 0
 | 
						|
 | 
						|
EncodingInfo            DB      384 Dup (0)
 | 
						|
PatternSetLength        DW      64
 | 
						|
PatternLengthStart      DW      0
 | 
						|
PatternLengthEnd        DW      0
 | 
						|
TempData                DB      320 Dup (0)
 | 
						|
 | 
						|
PEFunctions             Label   Word
 | 
						|
                        DB      0
 | 
						|
                        DW      11Ch            ; Enter
 | 
						|
                        DW      Offset PEFunction_PickUp
 | 
						|
 | 
						|
IF SHOWPATTERNLENGTH
 | 
						|
                        DB      0
 | 
						|
                        DW      111Ch            ; Right Ctrl+Enter
 | 
						|
                        DW      Offset PE_ShowPatternLength
 | 
						|
ENDIF
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '{'
 | 
						|
                        DW      Near Ptr PE_LeftBrace
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '}'
 | 
						|
                        DW      Near Ptr PE_RightBrace
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '['
 | 
						|
                        DW      Near Ptr PE_LeftSquareBracket
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      ']'
 | 
						|
                        DW      Near Ptr PE_RightSquareBracket
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1C8h
 | 
						|
                        DW      Offset PEFunction_Up
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1D0h
 | 
						|
                        DW      Offset PEFunction_Down
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1CBh
 | 
						|
                        DW      Offset PEFunction_Left
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1CDh
 | 
						|
                        DW      Offset PEFunction_Right
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1C9h
 | 
						|
                        DW      PEFunction_PgUp
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1D1h
 | 
						|
                        DW      PEFunction_PgDn
 | 
						|
 | 
						|
                        DB      2
 | 
						|
                        DW      1C7h
 | 
						|
                        DW      Offset PEFunction_Alt_Home
 | 
						|
 | 
						|
                        DB      2
 | 
						|
                        DW      1CFh
 | 
						|
                        DW      Offset PEFunction_Alt_End
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1C7h
 | 
						|
                        DW      Offset PEFunction_Home
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1CFh
 | 
						|
                        DW      Offset PEFunction_End
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1C9h
 | 
						|
                        DW      PEFunction_Ctrl_PgUp
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1D1h
 | 
						|
                        DW      PEFunction_Ctrl_PgDn
 | 
						|
 | 
						|
                        DB      2               ; Alt...
 | 
						|
                        DW      1CBh            ; Left Arrow
 | 
						|
                        DW      Offset PEFunction_AltLeft
 | 
						|
 | 
						|
                        DB      2               ; Alt...
 | 
						|
                        DW      1CDh            ; Right Arrow
 | 
						|
                        DW      Offset PEFunction_AltRight
 | 
						|
 | 
						|
                        DB      3               ; Ctrl...
 | 
						|
                        DW      1CBh            ; Left Arrow
 | 
						|
                        DW      Offset PEFunction_ViewLeft
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1CDh
 | 
						|
                        DW      Offset PEFunction_ViewRight
 | 
						|
 | 
						|
                        DB      2               ; Alt...
 | 
						|
                        DW      1C8h            ; Up Arrow
 | 
						|
                        DW      Offset PEFunction_AltUp
 | 
						|
 | 
						|
                        DB      2
 | 
						|
                        DW      1D0h
 | 
						|
                        DW      Offset PEFunction_AltDown
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1C7h
 | 
						|
                        DW      Offset PEFunction_Ctrl_Home
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1CFh
 | 
						|
                        DW      Offset PEFunction_Ctrl_End
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1C8h
 | 
						|
                        DW      Offset PEFunction_Up
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1D0h
 | 
						|
                        DW      Offset PEFunction_Down
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1CBh
 | 
						|
                        DW      Offset PEFunction_AltLeft
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1CDh
 | 
						|
                        DW      Offset PEFunction_AltRight
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1C9h
 | 
						|
                        DW      PEFunction_ShiftPgUp
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1D1h
 | 
						|
                        DW      PEFunction_ShiftPgDn
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1C7h
 | 
						|
                        DW      Offset PEFunction_Home
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      1CFh
 | 
						|
                        DW      Offset PEFunction_End
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      12Ah
 | 
						|
                        DW      Offset PEFunction_Press_Shift
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      136h
 | 
						|
                        DW      Offset PEFunction_Press_Shift
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      2Ah
 | 
						|
                        DW      Offset PEFunction_Release_Shift
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      36h
 | 
						|
                        DW      Offset PEFunction_Release_Shift
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      10Fh
 | 
						|
                        DW      Offset PEFunction_Tab
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      10Fh
 | 
						|
                        DW      Offset PEFunction_ShiftTab
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      ','
 | 
						|
                        DW      Offset PEFunction_SetMask
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1D2h
 | 
						|
                        DW      Offset PEFunction_Insert
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      1D3h            ; Delete
 | 
						|
                        DW      Offset PEFunction_Delete
 | 
						|
 | 
						|
                        DB      2               ; Alt...
 | 
						|
                        DW      1D2h            ; Insert
 | 
						|
                        DW      Offset PEFunction_RowInsert
 | 
						|
 | 
						|
                        DB      2               ; Alt...
 | 
						|
                        DW      1D3h            ; Delete
 | 
						|
                        DW      Offset PEFunction_RowDelete
 | 
						|
 | 
						|
                        DB      3               ; Ctrl...
 | 
						|
                        DW      1D2h            ; Insert
 | 
						|
                        DW      Offset PEFunction_RollDown
 | 
						|
 | 
						|
                        DB      3               ; Ctrl...
 | 
						|
                        DW      1D3h            ; Delete
 | 
						|
                        DW      Offset PEFunction_RollUp
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      10Eh
 | 
						|
                        DW      Offset PEFunction_BackSpace
 | 
						|
 | 
						|
                        DB      3               ; Ctrl...
 | 
						|
                        DW      10Eh            ; Backspace
 | 
						|
                        DW      Offset PEFunction_Undo
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '<'
 | 
						|
                        DW      Offset PEFunction_DecreaseInstrument
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '>'
 | 
						|
                        DW      Offset PEFunction_IncreaseInstrument
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      ';'
 | 
						|
                        DW      Offset PEFunction_DecreaseInstrument
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      "'"
 | 
						|
                        DW      Offset PEFunction_IncreaseInstrument
 | 
						|
 | 
						|
                        DB      3               ; Ctrl
 | 
						|
                        DW      1C8h
 | 
						|
                        DW      Offset PEFunction_DecreaseInstrument
 | 
						|
 | 
						|
                        DB      3
 | 
						|
                        DW      1D0h
 | 
						|
                        DW      Offset PEFunction_IncreaseInstrument
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      3000h           ; Alt 'B'
 | 
						|
                        DW      Offset PEFunction_MarkBeginBlock
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      3100h           ; Alt 'N'
 | 
						|
                        DW      Offset PEFunction_ToggleMultiChannel
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1200h           ; Alt 'E'
 | 
						|
                        DW      Offset PEFunction_MarkEndBlock
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1600h           ; Alt 'U'
 | 
						|
                        DW      Offset PEFunction_UnMarkBlock
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1700h           ; Alt 'I'
 | 
						|
                        DW      Offset PEFunction_ToggleTemplate
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      ':'
 | 
						|
                        DW      Offset PEFunction_TemplateOff
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2000h           ; Alt 'D'
 | 
						|
                        DW      Offset PEFunction_AltD
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1F00h           ; Alt 'S'
 | 
						|
                        DW      Offset PEFunction_AltS
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2500h           ; Alt 'K'
 | 
						|
                        DW      Offset PEFunction_AltK
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2C00h           ; Alt 'Z'
 | 
						|
                        DW      Offset PEFunction_WipeBlock
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2600h           ; Alt 'L'
 | 
						|
                        DW      Offset PEFunction_AltL
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1800h           ; Alt 'O'
 | 
						|
                        DW      Offset PEFunction_BlockOverwrite
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1900h           ; Alt 'P'
 | 
						|
                        DW      Offset PEFunction_BlockPaste
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2E00h           ; Alt 'C'
 | 
						|
                        DW      Offset PEFunction_BlockCopy
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      3h              ; Ctrl 'C'
 | 
						|
                        DW      Offset PEFunction_ToggleCentralise
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      146h            ; Scroll Lock
 | 
						|
                        DW      Offset PEFunction_ToggleTrace
 | 
						|
 | 
						|
                        DB      2               ; Alt Scroll Lock
 | 
						|
                        DW      146h
 | 
						|
                        DW      Offset MIDIInputToggle
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      3200h           ; Alt 'M'
 | 
						|
                        DW      Offset PEFunction_BlockMix
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1000h           ; Alt 'Q'
 | 
						|
                        DW      Offset PEFunction_SemiUp
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1E00h           ; Alt 'A'
 | 
						|
                        DW      Offset PEFunction_SemiDown
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2D00h           ; Alt 'X'
 | 
						|
                        DW      Offset PEFunction_WipeCommands
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2400h           ; Alt 'J'
 | 
						|
                        DW      Offset PEFunction_VolumeAmp
 | 
						|
 | 
						|
                        DB      1               ; Ctrl...
 | 
						|
                        DW      0Ah             ; 'J'
 | 
						|
                        DW      Offset ToggleFastVolume
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2F00h           ; Alt 'V'
 | 
						|
                        DW      Offset PEFunction_BlockVolume
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1100h           ; Alt 'W'
 | 
						|
                        DW      Offset PEFunction_WipeExcessVolumes
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1400h           ; Alt 'T'
 | 
						|
                        DW      Offset PEFunction_ViewTrack
 | 
						|
 | 
						|
                        DB      1               ; Ctrl...
 | 
						|
                        DW      14h             ; 'T'
 | 
						|
                        DW      Offset PEFunction_ToggleTracking
 | 
						|
 | 
						|
                        DB      1               ; Ctrl...
 | 
						|
                        DW      8h              ; 'H'
 | 
						|
                        DW      Offset PEFunction_ToggleRowHilight
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2300h           ; Alt 'H'
 | 
						|
                        DW      Offset PEFunction_ToggleDivision
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1300h           ; Alt 'R'
 | 
						|
                        DW      Offset PEFunction_ClearViews
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      1500h           ; Alt 'Y'
 | 
						|
                        DW      Offset PEFunction_BlockSwap
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2200h           ; Alt 'G'
 | 
						|
                        DW      Offset PEFunction_BlockHalve
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      2100h           ; Alt 'F'
 | 
						|
                        DW      Offset PEFunction_BlockDouble
 | 
						|
 | 
						|
;                        DB      0
 | 
						|
;                        DW      14Eh            ; Grey Plus
 | 
						|
;                        DW      Offset PEFunction_NextPattern
 | 
						|
;
 | 
						|
;                        DB      0
 | 
						|
;                        DW      14Ah            ; Grey Minus
 | 
						|
;                        DW      Offset PEFunction_LastPattern
 | 
						|
 | 
						|
                        DB      4               ; Shift
 | 
						|
                        DW      14Eh
 | 
						|
                        DW      Offset PEFunction_Next4Patterns
 | 
						|
 | 
						|
                        DB      4
 | 
						|
                        DW      14Ah
 | 
						|
                        DW      Offset PEFunction_Last4Patterns
 | 
						|
 | 
						|
                        DB      3               ; Ctrl..
 | 
						|
                        DW      14Eh            ; Grey Plus
 | 
						|
                        DW      Offset PEFunction_NextOrderPattern
 | 
						|
 | 
						|
                        DB      3               ; Ctrl..
 | 
						|
                        DW      14Ah            ; Grey Minus
 | 
						|
                        DW      Offset PEFunction_LastOrderPattern
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '+'
 | 
						|
                        DW      Offset PEFunction_NextPattern
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '-'
 | 
						|
                        DW      Offset PEFunction_LastPattern
 | 
						|
 | 
						|
                        DB      3               ; Ctrl
 | 
						|
                        DW      141h            ; F7
 | 
						|
                        DW      Offset PEFunction_SetPlayMark
 | 
						|
 | 
						|
                        DB      2
 | 
						|
                        DW      10Bh
 | 
						|
                        DW      Offset PEFunction_Alt0
 | 
						|
 | 
						|
                        DB      2       ; Alt Backspace
 | 
						|
                        DW      10Eh
 | 
						|
                        DW      Offset PEFunction_RestoreData
 | 
						|
 | 
						|
                        DB      2       ; Alt..
 | 
						|
                        DW      11Ch    ; Enter
 | 
						|
                        DW      Offset PEFunction_StoreCurrentPattern
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      0B02h   ; Left-Shift, Left-Ctrl '1'
 | 
						|
                        DW      Offset PEFunction_Ctrl_Shift1
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      0B03h   ; Left-Shift, Left-Ctrl '2'
 | 
						|
                        DW      Offset PEFunction_Ctrl_Shift2
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      0B04h   ; Left-Shift, Left-Ctrl '3'
 | 
						|
                        DW      Offset PEFunction_Ctrl_Shift3
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      0B05h   ; Left-Shift, Left-Ctrl '4'
 | 
						|
                        DW      Offset PEFunction_Ctrl_Shift4
 | 
						|
 | 
						|
                        DB      3       ; Ctrl..
 | 
						|
                        DW      10Bh    ; '0'
 | 
						|
                        DW      Offset PEFunction_Ctrl0
 | 
						|
 | 
						|
                        DB      3       ; Ctrl...
 | 
						|
                        DW      102h    ; '1'
 | 
						|
                        DW      Offset PEFunction_Ctrl1
 | 
						|
 | 
						|
                        DB      3       ; Ctrl...
 | 
						|
                        DW      103h    ; '2'
 | 
						|
                        DW      Offset PEFunction_Ctrl2
 | 
						|
 | 
						|
                        DB      3       ; Ctrl...
 | 
						|
                        DW      104h    ; '3'
 | 
						|
                        DW      Offset PEFunction_Ctrl3
 | 
						|
 | 
						|
                        DB      3       ; Ctrl...
 | 
						|
                        DW      105h    ; '4'
 | 
						|
                        DW      Offset PEFunction_Ctrl4
 | 
						|
 | 
						|
                        DB      3       ; Ctrl...
 | 
						|
                        DW      106h    ; '5'
 | 
						|
                        DW      Offset PEFunction_Ctrl5
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '\'
 | 
						|
                        DW      Offset PEFunction_Alt_F9
 | 
						|
 | 
						|
                        DB      0
 | 
						|
                        DW      135h
 | 
						|
                        DW      Offset PEFunction_MuteNext
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '?'
 | 
						|
                        DW      Offset PEFunction_MutePrevious
 | 
						|
 | 
						|
                        DB      2       ; Alt
 | 
						|
                        DW      143h    ; F9
 | 
						|
                        DW      Offset PEFunction_Alt_F9
 | 
						|
 | 
						|
                        DB      1
 | 
						|
                        DW      '|'
 | 
						|
                        DW      Offset PEFunction_SoloGotoNext
 | 
						|
 | 
						|
                        DB      2       ; Alt \
 | 
						|
                        DW      12Bh
 | 
						|
                        DW      Offset PEFunction_UnmuteAll
 | 
						|
 | 
						|
                        DB      2       ; Alt
 | 
						|
                        DW      144h    ; F10
 | 
						|
                        DW      Offset PEFunction_Alt_F10
 | 
						|
 | 
						|
                        DB      3       ; Ctrl
 | 
						|
                        DW      140h    ; F6
 | 
						|
                        DW      Offset PE_PlayCurrentPosition
 | 
						|
 | 
						|
                        DB      3       ; Ctrl
 | 
						|
                        DW      13Ch    ; F2
 | 
						|
                        DW      Offset PE_SetPatternLength
 | 
						|
 | 
						|
                        DB      1       ; Ctrl 'V'
 | 
						|
                        DW      16h
 | 
						|
                        DW      Offset PE_ToggleDefaultVolume
 | 
						|
 | 
						|
                        DB      1       ; Ctrl 'Z'
 | 
						|
                        DW      1Ah
 | 
						|
                        DW      Offset PE_CycleMIDIPlayTrigger
 | 
						|
 | 
						|
                        DB      6       ; MIDI message
 | 
						|
                        DW      8000h
 | 
						|
                        DW      Offset PE_MIDINoteOff
 | 
						|
 | 
						|
                        DB      6       ; MIDI message
 | 
						|
                        DW      9000h
 | 
						|
                        DW      Offset PE_MIDINote
 | 
						|
 | 
						|
                        DB      6       ; MIDI message
 | 
						|
                        DW      0A000h
 | 
						|
                        DW      Offset PE_MIDIAftertouch
 | 
						|
 | 
						|
                        DB      0FFh
 | 
						|
 | 
						|
CursorPositions         DB      0, 2, 4, 5, 7, 8, 10, 11, 12
 | 
						|
                        DB      0, 2, 3, 4, 5, 6, 7, 8, 9
 | 
						|
                        DB      0, 2, 3, 3, 4, 4, 5, 6, 6
 | 
						|
 | 
						|
                        DB      20h, 2, 1, 2, 1, 2, 0, 1, 2
 | 
						|
                        DB      10h, 1, 0, 1, 0, 1, 0, 1, 1
 | 
						|
 | 
						|
MaskChange              DB      0, 0, 1, 1, 2, 2, 4, 4, 4
 | 
						|
ChannelMsg              DB      " Channel xx ", 0
 | 
						|
ChannelMsg2             DB      "Channel xx", 0
 | 
						|
ChannelMsg3             DB      " Chnl xx", 0
 | 
						|
ChannelMsg4             DB      " xx", 0
 | 
						|
ChannelMsg5             DB      "xx", 0
 | 
						|
ChannelMsg6             DB      "Ch xx", 0
 | 
						|
ChannelMsg7             DB      "Chnl xx", 0
 | 
						|
 | 
						|
NoteNames               Label   Byte
 | 
						|
                        DB      "C-C#D-D#E-F-F#G-G#A-A#B-" ; Cmaj
 | 
						|
StartChannelEdit        DW      5
 | 
						|
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
; Don't change order of variables within here!!!!
 | 
						|
 | 
						|
KeySignature            DW      0
 | 
						|
NumChannelsEdit         DW      5
 | 
						|
 | 
						|
RowHiLight1             DB      4
 | 
						|
RowHiLight2             DB      16
 | 
						|
 | 
						|
EditMask                DB      3               ; Bit 0 = ins
 | 
						|
                                                ; Bit 1 = vol
 | 
						|
                                                ; Bit 2 = commands
 | 
						|
ViewDivision            DB      1
 | 
						|
ViewWidth               DW      0
 | 
						|
ViewChannels            DW      100 Dup (0FFFFh)   ; Contains channel/viewmethod
 | 
						|
ViewChannelTracking     DB      0
 | 
						|
CommandToValue          DB      0
 | 
						|
CentraliseCursor        DB      0E8h    ; Bit 0 = centralise cursor
 | 
						|
                                        ; Bit 1 = hilight row
 | 
						|
                                        ; Bit 2 = fast volume changes
 | 
						|
                                        ; Bit 3 = Record tick base
 | 
						|
                                        ; Bit 4 = Program base 1
 | 
						|
                                        ; Bit 5 = Record note off
 | 
						|
                                        ; Bit 6 = Record velocity
 | 
						|
                                        ; Bit 7 = Record aftertouch
 | 
						|
MIDIAmplification       DB      100
 | 
						|
MIDICentralNote         DB      60
 | 
						|
FastVolumeAmplification DW      67
 | 
						|
Flags                   DB      0       ; Extra flags
 | 
						|
                                        ; Bit 0 = display defaults.
 | 
						|
                                        ; Bit 1 = Record note cuts.
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
ViewMethodInfo          Label
 | 
						|
                        DW      Offset ViewFull
 | 
						|
                        DW      13              ; Width
 | 
						|
 | 
						|
                        DW      Offset ViewCompress
 | 
						|
                        DW      10              ; Width
 | 
						|
 | 
						|
                        DW      Offset ViewAllSmall
 | 
						|
                        DW      7
 | 
						|
 | 
						|
                        DW      Offset ViewNote
 | 
						|
                        DW      3
 | 
						|
 | 
						|
                        DW      Offset ViewTiny
 | 
						|
                        DW      2
 | 
						|
 | 
						|
EmptyData               DB      253, 0, 255, 0, 0
 | 
						|
 | 
						|
TempNumbers             DB      3 Dup (0)
 | 
						|
 | 
						|
ErrorMsg                DB      "Unable to allocate memory for pattern edit area.", 13, 10
 | 
						|
                        DB      "Sorry, more conventional memory is required to run this program.", 13, 10, "$"
 | 
						|
 | 
						|
ViewChannelTrackingMsg  DB      "View-Channel cursor tracking enabled", 0
 | 
						|
NoViewChannelTrackingMsg DB     "View-Channel cursor tracking disabled", 0
 | 
						|
CentraliseCursorMsg     DB      "Centralise cursor enabled", 0
 | 
						|
NoCentraliseCursorMsg   DB      "Centralise cursor disabled", 0
 | 
						|
TraceMsg                DB      "Playback tracing enabled", 0
 | 
						|
NoTraceMsg              DB      "Playback tracing disabled", 0
 | 
						|
PanningControlSetMsg    DB      "Panning control set", 0
 | 
						|
VolumeControlSetMsg     DB      "Volume control set", 0
 | 
						|
NoRowHilightMsg         DB      "Row hilight disabled", 0
 | 
						|
RowHilightMsg           DB      "Row hilight enabled", 0
 | 
						|
NoFastVolumeMsg         DB      "Alt-I / Alt-J fast volume changes disabled", 0
 | 
						|
FastVolumeMsg           DB      "Alt-I / Alt-J fast volume changes enabled", 0
 | 
						|
FastVolumeNotEnabledMsg DB      "Alt-I / Alt-J fast volume changes not enabled", 0
 | 
						|
DefaultVolumeOn         DB      "Default volumes enabled", 0
 | 
						|
DefaultVolumeOff        DB      "Default volumes disabled", 0
 | 
						|
MIDIInputDisabledMsg    DB      "MIDI Input Disabled", 0
 | 
						|
MIDIInputEnabledMsg     DB      "MIDI Input Enabled", 0
 | 
						|
MIDIInputEnabled        DB      1
 | 
						|
 | 
						|
LastNote                DB      60
 | 
						|
LastInstrument          DB      1
 | 
						|
LastVolume              DB      0FFh
 | 
						|
LastCommand             DB      0
 | 
						|
LastCommandValue        DB      0
 | 
						|
TracePlayback           DB      0
 | 
						|
 | 
						|
OrderListKeys   Label
 | 
						|
 | 
						|
IF ORDERSORT
 | 
						|
        DB      1
 | 
						|
        DW      1300h   ; Alt-R
 | 
						|
        DW      Offset PE_PostOrderListReorder
 | 
						|
ENDIF
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      10Fh
 | 
						|
        DW      Offset PE_PostOrderList20
 | 
						|
 | 
						|
        DB      1
 | 
						|
        DW      0F00h
 | 
						|
        DW      Offset PE_PostOrderList21
 | 
						|
 | 
						|
        DB      3               ; Ctrl-F7
 | 
						|
        DW      141h
 | 
						|
        DW      Offset PE_PostOrderListNextOrder
 | 
						|
 | 
						|
        DB      1               ; Spacebar
 | 
						|
        DW      ' '
 | 
						|
        DW      Offset PE_PostOrderListNextOrder
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1C8h            ; Up
 | 
						|
        DW      Offset PE_PostOrderList1
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1D0h            ; Down
 | 
						|
        DW      Offset PE_PostOrderList3
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1C9h            ; PgUp
 | 
						|
        DW      Offset PE_PostOrderList4
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1D1h            ; PgDn
 | 
						|
        DW      Offset PE_PostOrderList6
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1CBh            ; Left
 | 
						|
        DW      Offset PE_PostOrderList7
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1CDh            ; Right
 | 
						|
        DW      Offset PE_PostOrderList9
 | 
						|
 | 
						|
        DB      5
 | 
						|
        DW      'G'
 | 
						|
        DW      Offset PE_PostOrderList24
 | 
						|
 | 
						|
        DB      1
 | 
						|
        DW      '-'
 | 
						|
        DW      Offset PE_PostOrderList16
 | 
						|
 | 
						|
        DB      1
 | 
						|
        DW      '+'
 | 
						|
        DW      Offset PE_PostOrderList17
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1D3h    ; Insert
 | 
						|
        DW      Offset PE_PostOrderList18
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1D2h    ; Delete
 | 
						|
        DW      Offset PE_PostOrderList19
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1CFh    ; End
 | 
						|
        DW      PE_PostOrderListEndKey
 | 
						|
 | 
						|
        DB      0
 | 
						|
        DW      1C7h
 | 
						|
        DW      PE_PostOrderListHomeKey
 | 
						|
 | 
						|
        DB      5
 | 
						|
        DW      'N'
 | 
						|
        DW      PE_PostOrderList22
 | 
						|
 | 
						|
        DB      0FFh
 | 
						|
 | 
						|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 | 
						|
;³ Functions                                                                   ³
 | 
						|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
 | 
						|
 | 
						|
Proc            PE_ConvAX2Num Far               ; ES:DI points to screen
 | 
						|
                                                ; CH = colour
 | 
						|
                                                ; AX = number
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Push    BX
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mov     BX, 10
 | 
						|
 | 
						|
                And     AX, AX
 | 
						|
                JNS     PE_ConvAX2Num1
 | 
						|
 | 
						|
                Mov     Byte Ptr [ES:DI], '-'
 | 
						|
                Inc     DI
 | 
						|
                Neg     AX
 | 
						|
                Mov     [ES:DI], CH
 | 
						|
                Inc     DI
 | 
						|
                Jmp     PE_ConvAX2Num2
 | 
						|
 | 
						|
PE_ConvAX2Num1:
 | 
						|
                Xor     DX, DX
 | 
						|
                Div     BX
 | 
						|
                Add     DL, '0'
 | 
						|
                Mov     DH, CH
 | 
						|
                Mov     [ES:DI+4], DX
 | 
						|
 | 
						|
PE_ConvAX2Num2:
 | 
						|
                Xor     DX, DX
 | 
						|
                Div     BX
 | 
						|
                Add     DL, '0'
 | 
						|
                Mov     DH, CH
 | 
						|
                Mov     [ES:DI+2], DX
 | 
						|
 | 
						|
                Xor     DX, DX
 | 
						|
                Div     BX
 | 
						|
                Add     DL, '0'
 | 
						|
                Mov     DH, CH
 | 
						|
                Mov     [ES:DI], DX
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
                Pop     BX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ConvAX2Num
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ConvHexAL Near
 | 
						|
 | 
						|
                Cmp     AL, 10
 | 
						|
                SBB     AL, 69h
 | 
						|
                DAS
 | 
						|
                StosW
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ConvHexAL
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetMaxOrder Far              ; Returns AX with max order
 | 
						|
 | 
						|
                Push    CX
 | 
						|
                Push    ES
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     DI, 256
 | 
						|
                Mov     CX, 257
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                RepNE   ScasB
 | 
						|
                Mov     AX, 256
 | 
						|
                Sub     AX, CX
 | 
						|
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PE_GetMaxOrder1
 | 
						|
 | 
						|
                Dec     AX
 | 
						|
 | 
						|
PE_GetMaxOrder1:
 | 
						|
                Pop     DI
 | 
						|
                Pop     ES
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetMaxOrder
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ClearEncodingInfo       ; Encoding info
 | 
						|
                                        ; 1.Mask, 2.Instrument, 3.Volume, 4.Cmd
 | 
						|
                                        ; 5.CmdVal, 6.Note
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
 | 
						|
                Mov     DI, Offset EncodingInfo
 | 
						|
 | 
						|
                Mov     CX, 64
 | 
						|
 | 
						|
ClearEncodingInfo1:
 | 
						|
                Mov     AX, NONOTE*100h ; Mask&Note
 | 
						|
                StosW
 | 
						|
                Mov     AH, 0FFh        ; Ins&Vol
 | 
						|
                StosW
 | 
						|
                Xor     AX, AX          ; Cmd&Value
 | 
						|
                StosW
 | 
						|
 | 
						|
                Loop    ClearEncodingInfo1
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            ClearEncodingInfo
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
IF ORDERSORT
 | 
						|
 | 
						|
Proc            PE_PostOrderListSwapPatterns    ; Given BX = pattern 1
 | 
						|
                                                ;       DX = Pattern 2
 | 
						|
 | 
						|
                PushA
 | 
						|
 | 
						|
                Mov     AX, CS:PatternNumber
 | 
						|
 | 
						|
                Cmp     AX, BX
 | 
						|
                JNE     PE_PostOrderListSwapPatterns1
 | 
						|
                Mov     AX, DX
 | 
						|
                Jmp     PE_PostOrderLIstSwapPatterns2
 | 
						|
 | 
						|
PE_PostOrderListSwapPatterns1:
 | 
						|
                Cmp     AX, DX
 | 
						|
                JNE     PE_PostOrderListSwapPatterns2
 | 
						|
                Mov     AX, BX
 | 
						|
 | 
						|
PE_PostOrderListSwapPatterns2:
 | 
						|
                Mov     CS:PatternNumber, AX
 | 
						|
 | 
						|
; Search through order list and swap BX with DX
 | 
						|
 | 
						|
                Mov     SI, 100h
 | 
						|
                Mov     CX, SI
 | 
						|
 | 
						|
PE_PostOrderListSwapPatterns3:
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Cmp     AL, BL
 | 
						|
                JNE     PE_PostOrderListSwapPatterns4
 | 
						|
 | 
						|
                Mov     [SI-1], DL
 | 
						|
                Jmp     PE_PostOrderListSwapPatterns5
 | 
						|
 | 
						|
PE_PostOrderListSwapPatterns4:
 | 
						|
                Cmp     AL, DL
 | 
						|
                JNE     PE_PostOrderListSwapPatterns5
 | 
						|
 | 
						|
                Mov     [SI-1], BL
 | 
						|
 | 
						|
PE_PostOrderListSwapPatterns5:
 | 
						|
                Loop    PE_PostOrderListSwapPatterns3
 | 
						|
 | 
						|
; Now swap memory references to patterns.
 | 
						|
 | 
						|
                LEA     BX, [EBX*4+63912]
 | 
						|
                LEA     DI, [EDX*4+63912]
 | 
						|
 | 
						|
                Mov     EAX, [BX]
 | 
						|
                XChg    EAX, [DI]
 | 
						|
                Mov     [BX], EAX
 | 
						|
 | 
						|
; Finished!
 | 
						|
 | 
						|
                PopA
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PostOrderListSwapPatterns
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PostOrderListReorder Far
 | 
						|
 | 
						|
                EnsureNoNetwork
 | 
						|
 | 
						|
                Call    Music_Stop
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX                  ; DS:100h = order list.
 | 
						|
                                                ; DS:63912 (4) = pattern data
 | 
						|
                Mov     SI, 100h
 | 
						|
                Xor     DX, DX          ; DX = min pattern
 | 
						|
                Mov     CX, SI
 | 
						|
                Xor     BX, BX
 | 
						|
 | 
						|
PE_PostOrderListReorder1:
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 200
 | 
						|
                JAE     PE_PostOrderListReorder2
 | 
						|
 | 
						|
                Cmp     AL, DL
 | 
						|
                JB      PE_PostOrderListReorder2
 | 
						|
                JE      PE_PostOrderListReorder3
 | 
						|
 | 
						|
                Mov     BL, AL
 | 
						|
                Call    PE_PostOrderListSwapPatterns
 | 
						|
 | 
						|
PE_PostOrderListReorder3:
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
PE_PostOrderListReorder2:
 | 
						|
                Loop    PE_PostOrderListReorder1
 | 
						|
 | 
						|
PE_PostOrderListReorderExit:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PostOrderListReorder
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
ENDIF           ; ORDERSORT
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ResetOrderPattern Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Mov     Order, AX
 | 
						|
                Mov     OrderCursor, AX
 | 
						|
                Mov     Channel, AX
 | 
						|
                Mov     PatternCursor, AX
 | 
						|
                Mov     LastInstrument, 1
 | 
						|
                Mov     PlayMarkOn, 0
 | 
						|
 | 
						|
                Mov     BX, AX
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
                MovZX   AX, Byte Ptr [ES:BX+256]
 | 
						|
 | 
						|
                Cmp     AX, 199
 | 
						|
                JBE     PE_ResetOrderPattern1
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PE_ResetOrderPattern1:
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    NewPattern
 | 
						|
                Mov     Word Ptr [CS:Modified], 0
 | 
						|
 | 
						|
                Call    Music_InitMixTable              ; Here 'cos it's called
 | 
						|
                                                        ; on file loading.
 | 
						|
                Call    Music_InitMuteTable             ; ditto.
 | 
						|
                Call    Music_InitStereo
 | 
						|
                Call    Music_SoundCardLoadAllSamples
 | 
						|
                Call    PE_ClearUndoBuffer
 | 
						|
 | 
						|
                Mov     AX, Inst
 | 
						|
                Mov     DS, AX
 | 
						|
                        Assume DS:Inst
 | 
						|
                Mov     NodeHeld, 0
 | 
						|
                Mov     InstrumentEdit, 0
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ResetOrderPattern
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetMaxPattern Far            ; Assumes DS:SongData
 | 
						|
 | 
						|
                Push    CX
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
 | 
						|
                Mov     SI, 63912
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Xor     DI, DI
 | 
						|
                Mov     CX, 200
 | 
						|
 | 
						|
PE_GetMaxPattern1:
 | 
						|
                Cmp     Word Ptr [SI], 0
 | 
						|
                JE      PE_GetMaxPattern2
 | 
						|
 | 
						|
                Mov     AX, DI
 | 
						|
 | 
						|
PE_GetMaxPattern2:
 | 
						|
                Inc     DI
 | 
						|
                Add     SI, 4
 | 
						|
                Loop    PE_GetMaxPattern1
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
                Pop     CX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetMaxPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_FillHeader Far
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
                Call    S_GetDestination
 | 
						|
                Mov     SI, 4
 | 
						|
                Mov     DI, (12+3*80)*2
 | 
						|
                Mov     CX, 25
 | 
						|
                Mov     AH, 5
 | 
						|
 | 
						|
PE_FillHeader1:
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 226
 | 
						|
                JB      PE_FillHeader14
 | 
						|
 | 
						|
                Mov     AL, ' '
 | 
						|
 | 
						|
PE_FillHeader14:
 | 
						|
                StosW
 | 
						|
                Loop    PE_FillHeader1
 | 
						|
 | 
						|
                Push    DS
 | 
						|
 | 
						|
                Mov     AX, Disk
 | 
						|
                Mov     DS, AX
 | 
						|
                Mov     SI, Offset FileName
 | 
						|
                Mov     DI, (12+4*80)*2
 | 
						|
                Mov     AH, 5
 | 
						|
 | 
						|
PE_FillHeader11:
 | 
						|
                LodsB
 | 
						|
                StosW
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     PE_FillHeader11
 | 
						|
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     CH, AH
 | 
						|
                Mov     AX, Order
 | 
						|
                Mov     DI, (12+5*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Call    PE_GetMaxOrder
 | 
						|
                Mov     DI, (16+5*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     DI, (12+6*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Call    PE_GetMaxPattern
 | 
						|
                Mov     DI, (16+6*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     DI, (12+7*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Mov     DI, (16+7*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Call    Glbl_GetHeaderMode
 | 
						|
                                        ; AL = inst
 | 
						|
                                        ; AH = mode.
 | 
						|
                Mov     DI, (50+3*80)*2
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     PE_FillHeader6
 | 
						|
 | 
						|
                Mov     AX, 5*256+'.'
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                ScasW
 | 
						|
;                Add     DI, 2
 | 
						|
                Mov     AL, '.'
 | 
						|
                Mov     CX, 25
 | 
						|
                Rep     StosW
 | 
						|
                Jmp     PE_FillHeader7
 | 
						|
 | 
						|
PE_FillHeader6:
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Mov     DL, 10
 | 
						|
                Xor     AH, AH
 | 
						|
                Mov     CX, AX
 | 
						|
                Div     DL
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     DL, AH
 | 
						|
                Mov     AH, 5
 | 
						|
                StosW
 | 
						|
                Mov     AL, DL
 | 
						|
                StosW
 | 
						|
                ScasW
 | 
						|
;                Add     DI, 2
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Dec     CX
 | 
						|
                And     AH, AH          ; CX = ins number
 | 
						|
                JZ      PE_FillHeader8
 | 
						|
 | 
						|
                                        ; Complex instrument mode
 | 
						|
                Mov     AX, 554
 | 
						|
                Mul     CX
 | 
						|
                Add     AX, 544
 | 
						|
                Jmp     PE_FillHeader9
 | 
						|
 | 
						|
PE_FillHeader8:                         ; Simple instrument mode
 | 
						|
                Mov     AX, 80
 | 
						|
                Mul     CX
 | 
						|
                Add     AX, 55932
 | 
						|
 | 
						|
PE_FillHeader9:
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     CX, 25
 | 
						|
                Mov     AH, 5
 | 
						|
 | 
						|
PE_FillHeader10:
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 226
 | 
						|
                JB      PE_FillHeader13
 | 
						|
 | 
						|
                Mov     AL, ' '
 | 
						|
 | 
						|
PE_FillHeader13:
 | 
						|
                StosW
 | 
						|
                Loop    PE_FillHeader10
 | 
						|
 | 
						|
PE_FillHeader7:
 | 
						|
;                Mov     AL, LastVolume
 | 
						|
 | 
						|
                Call    PE_FillSpeedTempo
 | 
						|
 | 
						|
;                Cmp     AL, 0FFh
 | 
						|
;                JNE     PE_FillHeader4
 | 
						|
;
 | 
						|
;                Mov     AX, 5*256+'.'
 | 
						|
;                StosW
 | 
						|
;                StosW
 | 
						|
;                Jmp     PE_FillHeader5
 | 
						|
;
 | 
						|
;PE_FillHeader4:
 | 
						|
;                Xor     AH, AH
 | 
						|
;                Mov     CL, 10
 | 
						|
;                Div     CL
 | 
						|
;                Add     AX, 3030h
 | 
						|
;                Mov     DL, AH
 | 
						|
;                Mov     AH, 5
 | 
						|
;                StosW
 | 
						|
;                Mov     AL, DL
 | 
						|
;                StosW
 | 
						|
 | 
						|
PE_FillHeader5:
 | 
						|
                Mov     AX, BaseOctave
 | 
						|
                Add     AL, '0'
 | 
						|
                Mov     AH, 5
 | 
						|
                Mov     [ES:((50+5*80)*2)], AX
 | 
						|
 | 
						|
;                Mov     AH, 48h
 | 
						|
;                Mov     BX, 0FFFFh
 | 
						|
;                Int     21h
 | 
						|
;                Mov     AX, BX
 | 
						|
;                Mov     CX, 2006h
 | 
						|
;                ShR     AX, CL
 | 
						|
;                Mov     DI, (71+6*80)*2
 | 
						|
;                Call    PE_ConvAX2Num
 | 
						|
;
 | 
						|
;                Call    E_GetFreeEMS
 | 
						|
;                Xor     DX, DX
 | 
						|
;                Mov     BX, 1000
 | 
						|
;                Div     BX
 | 
						|
;
 | 
						|
;                Add     AL, '0'
 | 
						|
;                Mov     AH, CH
 | 
						|
;                Mov     [ES:(70+7*80)*2], AX
 | 
						|
;                Mov     AX, DX
 | 
						|
;                Mov     DI, (71+7*80)*2
 | 
						|
;                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
 | 
						|
;                Call    K_GetCaps
 | 
						|
;                Mov     AH, 21h
 | 
						|
;                And     AL, AL
 | 
						|
;                JZ      PE_FillHeader2
 | 
						|
;
 | 
						|
;                Mov     AH, 23h
 | 
						|
;
 | 
						|
;PE_FillHeader2:
 | 
						|
;                Mov     DI, (75+10*80)*2
 | 
						|
;                Mov     SI, Offset CapsMsg
 | 
						|
;                Mov     CX, 4
 | 
						|
;
 | 
						|
;PE_FillHeader3:
 | 
						|
;                SegCS   LodsB
 | 
						|
;                StosW
 | 
						|
;                Loop    PE_FillHeader3
 | 
						|
 | 
						|
                Call    UpdateInfoLine
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_FillHeader
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_FillSpeedTempo Far
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
 | 
						|
                Call    Music_GetDisplayVariables       ; AX = current speed.
 | 
						|
                Mov     CH, 5
 | 
						|
                Mov     DI, (50+4*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Mov     AX, BX
 | 
						|
                Mov     DI, (54+4*80)*2
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_FillSpeedTempo
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_DrawOrderList Far
 | 
						|
 | 
						|
                Mov     AL, 80
 | 
						|
                Mul     Byte Ptr [SI+3]
 | 
						|
                Add     AL, [SI+2]
 | 
						|
                AdC     AH, 0
 | 
						|
                Add     AX, AX
 | 
						|
                Mov     DI, AX
 | 
						|
                Mov     CX, [SI+4]
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, TopOrder            ; Bounds checking...
 | 
						|
                Mov     BX, Order
 | 
						|
                Cmp     AX, BX
 | 
						|
                JBE     PE_DrawOrderList1
 | 
						|
 | 
						|
                Mov     AX, BX
 | 
						|
 | 
						|
PE_DrawOrderList1:
 | 
						|
                Mov     DX, AX
 | 
						|
                Add     DX, CX
 | 
						|
                Cmp     DX, BX
 | 
						|
                JA      PE_DrawOrderList2
 | 
						|
 | 
						|
                LEA     AX, [BX+1]
 | 
						|
                Sub     AX, CX
 | 
						|
 | 
						|
PE_DrawOrderList2:
 | 
						|
                Mov     TopOrder, AX
 | 
						|
                Mov     BX, AX
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
PE_DrawOrderList3:
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Mov     CH, 20h
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Add     DI, 160
 | 
						|
                Inc     AX
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Loop    PE_DrawOrderList3
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 8               ; BX = toporder, DI = order area
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
                Add     BX, 256
 | 
						|
 | 
						|
PE_DrawOrderList4:
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Mov     CH, 2
 | 
						|
                MovZX   AX, Byte Ptr [BX]
 | 
						|
                Cmp     AX, 0FEh
 | 
						|
                JB      PE_DrawOrderList5
 | 
						|
 | 
						|
                Mov     CL, '-'
 | 
						|
                Cmp     AL, 0FEh
 | 
						|
                JNE     PE_DrawOrderList7
 | 
						|
 | 
						|
                Mov     CL, '+'
 | 
						|
 | 
						|
PE_DrawOrderList7:
 | 
						|
                Mov     AX, CX
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Sub     DI, 6
 | 
						|
 | 
						|
                Jmp     PE_DrawOrderList6
 | 
						|
 | 
						|
 | 
						|
PE_DrawOrderList5:
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
PE_DrawOrderList6:
 | 
						|
                Pop     CX
 | 
						|
                Inc     BX
 | 
						|
                Add     DI, 160
 | 
						|
                Loop    PE_DrawOrderList4
 | 
						|
 | 
						|
                Call    Music_GetPlayMode
 | 
						|
                Cmp     AX, 2
 | 
						|
                JNE     PE_DrawOrderList8
 | 
						|
 | 
						|
                Jmp     PE_ShowOrder
 | 
						|
 | 
						|
PE_DrawOrderList8:
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_DrawOrderList
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PreOrderList Far
 | 
						|
 | 
						|
                Mov     AL, 80
 | 
						|
                Mov     BX, Order
 | 
						|
                Sub     BX, TopOrder
 | 
						|
                Add     BL, [SI+3]
 | 
						|
                Mul     BL
 | 
						|
                Add     AL, [SI+2]
 | 
						|
                AdC     AH, 0
 | 
						|
                Add     AX, 4
 | 
						|
                Add     AX, OrderCursor
 | 
						|
                Add     AX, AX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Inc     DI
 | 
						|
                Mov     Byte Ptr [ES:DI], 30h
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PreOrderList
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NetworkOrderList Near
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Call    Network_GetSendQueue
 | 
						|
                JZ      NetworkOrderList1
 | 
						|
 | 
						|
                Mov     AX, NETWORK_SONGDATAOBJECT*100h ; Destination ALL
 | 
						|
                StosW
 | 
						|
                Mov     AX, 256
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
NetworkOrderList1:
 | 
						|
                Call    Network_FinishedSendQueue
 | 
						|
ENDIF
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            NetworkOrderList
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PostOrderList Far
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
                Mov     SI, [BX]
 | 
						|
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     AL, 80
 | 
						|
                Mov     BX, Order
 | 
						|
                Sub     BX, TopOrder
 | 
						|
                Add     BL, [SI+3]
 | 
						|
                Mul     BL
 | 
						|
                Add     AL, [SI+2]
 | 
						|
                AdC     AH, 0
 | 
						|
                Add     AX, 4
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
 | 
						|
;                Push    ES
 | 
						|
;                Push    DI
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     FS
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
                Mov     SI, Offset OrderListKeys
 | 
						|
                Call    M_FunctionDivider
 | 
						|
                Mov     AX, Order
 | 
						|
                JC      PE_NoKeyFound
 | 
						|
 | 
						|
                Jmp     [SI]
 | 
						|
 | 
						|
PE_NoKeyFound:
 | 
						|
                Test    CH, Not 1
 | 
						|
                JNZ     PE_PostOrderList10
 | 
						|
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PostOrderList10
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JBE     PE_PostOrderList11
 | 
						|
 | 
						|
PE_PostOrderList10:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostOrderListNextOrder:
 | 
						|
                Call    Music_GetPlayMode
 | 
						|
                Cmp     AX, 2
 | 
						|
                JNE     PE_PostOrderListNextOrderEnd
 | 
						|
 | 
						|
                Mov     AX, Order
 | 
						|
                Mov     SI, Offset NextOrderMsg
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Call    Music_SetNextOrder
 | 
						|
 | 
						|
PE_PostOrderListNextOrderEnd:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostOrderListHomeKey:
 | 
						|
                Mov     Order, 0
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderListEndKey:
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
                Mov     SI, 100h
 | 
						|
 | 
						|
PE_PostOrderListEndKeyLoop:
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_postOrderListEndKeyLoopEnd
 | 
						|
 | 
						|
                Cmp     SI, 100h+255
 | 
						|
                JBE     PE_PostOrderListEndKeyLoop
 | 
						|
 | 
						|
PE_PostOrderListEndKeyLoopEnd:
 | 
						|
                Sub     SI, 101h
 | 
						|
                Mov     CS:Order, SI
 | 
						|
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList20:
 | 
						|
                Push    FS
 | 
						|
                Pop     DS
 | 
						|
                Mov     SI, [BX]
 | 
						|
 | 
						|
                Mov     AX, [SI+6]
 | 
						|
                Mov     [DI], AX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList21:
 | 
						|
                Push    FS
 | 
						|
                Pop     DS
 | 
						|
                Mov     SI, [BX]
 | 
						|
 | 
						|
                Mov     AX, [SI+8]
 | 
						|
                Mov     [DI], AX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList1:                              ; Up
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PE_PostOrderList2
 | 
						|
 | 
						|
                Dec     AX
 | 
						|
                Mov     Order, AX
 | 
						|
 | 
						|
PE_PostOrderList2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostOrderList3b:
 | 
						|
                Call    NetworkOrderList
 | 
						|
 | 
						|
PE_PostOrderList3:                              ; Down
 | 
						|
                Cmp     AX, 255
 | 
						|
                JAE     PE_PostOrderList2
 | 
						|
                Inc     AX
 | 
						|
                Mov     Order, AX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList4:                              ; PgUp
 | 
						|
                Sub     AX, 16
 | 
						|
                JNS     PE_PostOrderList5
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PE_PostOrderList5:
 | 
						|
                Mov     Order, AX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList6:                              ; PgDn
 | 
						|
                Add     AX, 16
 | 
						|
                And     AH, AH
 | 
						|
                JZ      PE_PostOrderList5
 | 
						|
 | 
						|
                Mov     AX, 255
 | 
						|
                Jmp     PE_PostOrderList5
 | 
						|
 | 
						|
PE_PostOrderList7:                              ; Left
 | 
						|
                Mov     AX, OrderCursor
 | 
						|
                Dec     AX
 | 
						|
                JNS     PE_PostOrderList8
 | 
						|
 | 
						|
                Mov     AX, 2
 | 
						|
 | 
						|
PE_PostOrderList8:
 | 
						|
                Mov     OrderCursor, AX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList9:                              ; Right
 | 
						|
                Mov     AX, OrderCursor
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, 2
 | 
						|
                JBE     PE_PostOrderList8
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Jmp     PE_PostOrderList8
 | 
						|
 | 
						|
PE_PostOrderList11:
 | 
						|
                Mov     SI, AX
 | 
						|
                MovZX   AX, Byte Ptr [ES:SI+256]         ; AX = pattern number
 | 
						|
                Cmp     AL, 199
 | 
						|
                JBE     PE_PostOrderList15
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
 | 
						|
PE_PostOrderList15:                     ; Number
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                Mov     [TempNumbers+2], AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     CL
 | 
						|
                Mov     [TempNumbers+1], AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     CL
 | 
						|
                Mov     [TempNumbers], AH
 | 
						|
 | 
						|
                Mov     BX, OrderCursor
 | 
						|
                Sub     DX, '0'
 | 
						|
                Mov     TempNumbers[BX], DL
 | 
						|
 | 
						|
                Mov     AL, [TempNumbers]
 | 
						|
                Mul     CL
 | 
						|
                Add     AL, [TempNumbers+1]
 | 
						|
                Mul     CL
 | 
						|
                Add     AL, [TempNumbers+2]
 | 
						|
 | 
						|
                Cmp     AX, 199
 | 
						|
                JBE     PE_PostOrderList12
 | 
						|
 | 
						|
                Mov     AX, 199
 | 
						|
 | 
						|
PE_PostOrderList12:
 | 
						|
                Mov     [ES:SI+256], AL
 | 
						|
                Call    NetworkOrderList
 | 
						|
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, 2
 | 
						|
                JBE     PE_PostOrderList13
 | 
						|
 | 
						|
                Cmp     SI, 255
 | 
						|
                JE      PE_PostOrderList2
 | 
						|
 | 
						|
                Xor     BX, BX
 | 
						|
                Inc     Order
 | 
						|
 | 
						|
PE_PostOrderList13:
 | 
						|
                Mov     OrderCursor, BX
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
 | 
						|
PE_PostOrderList16:                     ; '-'
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     Byte Ptr [ES:SI+256], 0FFh
 | 
						|
                Mov     OrderCursor, 0
 | 
						|
 | 
						|
                Jmp     PE_PostOrderList3b
 | 
						|
 | 
						|
PE_PostOrderList17:                     ; '+'
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     Byte Ptr [ES:SI+256], 0FEh
 | 
						|
                Mov     OrderCursor, 0
 | 
						|
 | 
						|
                Jmp     PE_PostOrderList3b
 | 
						|
 | 
						|
PE_PostOrderList18:                     ; Del
 | 
						|
                Mov     SI, AX
 | 
						|
                Add     SI, 256
 | 
						|
                Mov     DI, SI
 | 
						|
                Inc     SI
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     CX, 512
 | 
						|
                Sub     CX, SI
 | 
						|
                Rep     MovsB
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
 | 
						|
                Call    NetworkOrderList
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList19:                     ; Ins
 | 
						|
                Mov     CX, 255
 | 
						|
                Mov     DI, 511
 | 
						|
                Mov     SI, DI
 | 
						|
                Sub     CX, AX
 | 
						|
                Dec     SI
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                StD
 | 
						|
                Rep     MovsB
 | 
						|
                ClD
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
 | 
						|
                Call    NetworkOrderList
 | 
						|
                Jmp     PE_PostOrderList2
 | 
						|
 | 
						|
PE_PostOrderList22:
 | 
						|
                Mov     SI, Order
 | 
						|
                And     SI, SI
 | 
						|
                JZ      PE_PostOrderList23
 | 
						|
 | 
						|
                Mov     AL, [ES:SI+255]
 | 
						|
                Cmp     AL, 198
 | 
						|
                JA      PE_PostOrderList23
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
                Mov     [ES:SI+256], AL
 | 
						|
 | 
						|
                Mov     AX, SI
 | 
						|
                Jmp     PE_PostOrderList3b
 | 
						|
 | 
						|
PE_PostOrderList23:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostOrderList24:                             ; 'G'
 | 
						|
                Mov     BX, AX
 | 
						|
                MovZX   AX, Byte Ptr [ES:BX+256]
 | 
						|
                Cmp     AL, 200
 | 
						|
                JAE     PE_PostOrderList23
 | 
						|
 | 
						|
                Jmp     PE_GotoPattern2
 | 
						|
 | 
						|
EndP            PE_PostOrderList
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_UnInitPatternEdit Far
 | 
						|
 | 
						|
                Mov     AX, CS:BlockDataArea
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PE_UnInitPatternEdit1
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     AH, 49h
 | 
						|
                Int     21h
 | 
						|
 | 
						|
PE_UnInitPatternEdit1:
 | 
						|
                Call    PE_ClearUndoBuffer
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_UnInitPatternEdit
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ClearPatternData
 | 
						|
 | 
						|
                Push    CX DX DS SI ES DI
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
                Xor     DI, DI
 | 
						|
 | 
						|
                Mov     DX, 200
 | 
						|
 | 
						|
PE_ClearPatternData1:
 | 
						|
                Mov     CX, 320/4
 | 
						|
                Mov     SI, Offset EmptyRow
 | 
						|
                Rep     MovsD
 | 
						|
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PE_ClearPatternData1
 | 
						|
 | 
						|
                Pop     DI ES SI DS DX CX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ClearPatternData
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_InitPatternEdit Far
 | 
						|
 | 
						|
                Trace   " - Initialising pattern data area"
 | 
						|
 | 
						|
                Call    PE_ClearPatternData
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_InitPatternEdit
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
include it_pe_v.inc
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_DrawPatternEdit Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     TracePlayback, 0
 | 
						|
                JE      PE_TraceOff
 | 
						|
 | 
						|
                Call    Music_GetPlayMode       ; AX = playmode
 | 
						|
                                                ; BX = current row
 | 
						|
                                                ; CX = current pattern
 | 
						|
                                                ; DX = order.
 | 
						|
                Cmp     AX, 1
 | 
						|
                JB      PE_TraceOff
 | 
						|
                JE      PE_NoTraceOrder
 | 
						|
 | 
						|
                Mov     Order, DX
 | 
						|
 | 
						|
PE_NoTraceOrder:
 | 
						|
                Cmp     BX, Row
 | 
						|
                JE      PE_SetMIDIChannel
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     MIDIChannel, AX
 | 
						|
 | 
						|
                Mov     Row, BX
 | 
						|
 | 
						|
PE_SetMIDIChannel:
 | 
						|
                Cmp     CX, PatternNumber
 | 
						|
                JE      PE_TraceOff
 | 
						|
 | 
						|
                Push    CX                      ; Pattern number
 | 
						|
                Push    CS
 | 
						|
                Push    Offset PE_TraceTurnOffError
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PE_NoStoreRequired
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PE_NoStoreRequired:
 | 
						|
                Pop     AX
 | 
						|
                Pop     AX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    NewPattern
 | 
						|
                Jmp     PE_TraceOff
 | 
						|
 | 
						|
PE_TraceTurnOffError:
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
PE_TraceTurnOff:
 | 
						|
                Mov     CS:TracePlayback, 0
 | 
						|
 | 
						|
PE_TraceOff:
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Mov     AL, Template
 | 
						|
                Cmp     AL, 1
 | 
						|
                JB      PE_DrawPAtternEdit30
 | 
						|
 | 
						|
                Mov     SI, Offset TemplateMsg1
 | 
						|
                JE      PE_DrawPatternEdit31
 | 
						|
 | 
						|
                Mov     SI, Offset TemplateMsg2
 | 
						|
                Cmp     AL, 3
 | 
						|
                JB      PE_DrawPatternEdit31
 | 
						|
 | 
						|
                Mov     SI, Offset TemplateMsg3
 | 
						|
                JE      PE_DrawPatternEdit31
 | 
						|
 | 
						|
                Mov     SI, Offset TemplateMsg4
 | 
						|
 | 
						|
PE_DrawPatternEdit31:
 | 
						|
                Mov     DI, (2+12*80)*2
 | 
						|
                Mov     AH, 23h
 | 
						|
                Call    S_DrawString
 | 
						|
 | 
						|
PE_DrawPatternEdit30:
 | 
						|
                Test    CentraliseCursor, 1
 | 
						|
                JZ      PE_NoCentraliseCursor
 | 
						|
 | 
						|
                Call    PE_CentraliseCursor
 | 
						|
 | 
						|
PE_NoCentraliseCursor:
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Cmp     AX, Row
 | 
						|
                JAE     PE_DrawPatternEdit27
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
PE_DrawPatternEdit27:
 | 
						|
                Mov     BX, BlockTop
 | 
						|
                Cmp     BX, AX
 | 
						|
                JLE     PE_DrawPatternEdit28
 | 
						|
 | 
						|
                Mov     BlockTop, AX
 | 
						|
 | 
						|
PE_DrawPatternEdit28:
 | 
						|
                Mov     BX, BlockBottom
 | 
						|
                Cmp     BX, AX
 | 
						|
                JLE     PE_DrawPatternEdit29
 | 
						|
 | 
						|
                Mov     BlockBottom, AX
 | 
						|
 | 
						|
PE_DrawPatternEdit29:
 | 
						|
                Mov     BX, ViewWidth
 | 
						|
                Test    BX, BX
 | 
						|
                JZ      PE_DrawPatternEdit1
 | 
						|
 | 
						|
                Mov     CX, 3
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JE      PE_DrawPatternEditNoEditChannels
 | 
						|
 | 
						|
                Xor     CX, CX
 | 
						|
 | 
						|
PE_DrawPatternEditNoEditChannels:
 | 
						|
                Mov     AX, 1
 | 
						|
                Add     AX, CX
 | 
						|
                Push    AX
 | 
						|
                Push    14
 | 
						|
                Mov     AX, BX
 | 
						|
                Add     AX, CX
 | 
						|
                Push    AX
 | 
						|
                Push    47
 | 
						|
                Push    27
 | 
						|
                Call    S_DrawBox
 | 
						|
                Add     SP, 10
 | 
						|
 | 
						|
PE_DrawPatternEdit1:
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JE      PE_DrawPatternEdit34
 | 
						|
 | 
						|
                Mov     CX, 4
 | 
						|
                Add     CX, BX
 | 
						|
                Push    CX
 | 
						|
                Mov     AX, 14
 | 
						|
                Push    AX
 | 
						|
                Mul     NumChannelsEdit
 | 
						|
                Add     AX, CX
 | 
						|
                Push    AX
 | 
						|
                Push    47
 | 
						|
                Push    27
 | 
						|
                Call    S_DrawBox
 | 
						|
                Add     SP, 10
 | 
						|
 | 
						|
                Mov     AX, LeftChannel
 | 
						|
                Mov     CX, Channel
 | 
						|
 | 
						|
                Cmp     AX, CX
 | 
						|
                JLE     PE_DrawPatternEdit21
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
 | 
						|
PE_DrawPatternEdit21:
 | 
						|
                Mov     DX, AX
 | 
						|
                Add     DX, NumChannelsEdit
 | 
						|
                Cmp     DX, CX
 | 
						|
                JG      PE_DrawPatternEdit22
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
                Sub     AX, NumChannelsEdit
 | 
						|
                Inc     AX
 | 
						|
 | 
						|
PE_DrawPatternEdit22:
 | 
						|
                Mov     LeftChannel, AX
 | 
						|
                                                ; Channel markers.
 | 
						|
                Mov     DX, AX                  ; DL = left channel
 | 
						|
                Mov     AX, 5+14*80
 | 
						|
                Add     AX, ViewWidth
 | 
						|
                Add     AX, AX
 | 
						|
                Mov     DI, AX
 | 
						|
                Mov     DH, 10
 | 
						|
 | 
						|
                Mov     CX, NumChannelsEdit
 | 
						|
 | 
						|
PE_DrawPatternEdit23:
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                MovZX   AX, DL
 | 
						|
                Inc     AX
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     SI, Offset ChannelMsg
 | 
						|
                Mov     [SI+9], AX
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
 | 
						|
                Mov     SI, DX
 | 
						|
                And     SI, 0FFh
 | 
						|
                Add     SI, 40h
 | 
						|
                Mov     AH, 13h
 | 
						|
                Test    Byte Ptr [SI], 80h
 | 
						|
                JZ      PE_DrawPatternEdit32
 | 
						|
 | 
						|
                Mov     AH, 10h
 | 
						|
 | 
						|
PE_DrawPatternEdit32:
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     CX, 12
 | 
						|
 | 
						|
PE_DrawPatternEdit24:
 | 
						|
                LodsB
 | 
						|
                StosW
 | 
						|
                Loop    PE_DrawPatternEdit24
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 4
 | 
						|
                Inc     DX
 | 
						|
                Loop    PE_DrawPatternEdit23
 | 
						|
 | 
						|
PE_DrawPatternEdit34:
 | 
						|
                Cmp     ViewChannelTracking, 0
 | 
						|
                JE      PE_DrawPatternEditNormal
 | 
						|
 | 
						|
                                        ; OK.. using view windows ONLY.
 | 
						|
                                        ; now to perform scrolling if necessary.
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
                Mov     DL, [SI]
 | 
						|
 | 
						|
                Cmp     DL, 0FFh
 | 
						|
                JE      PE_DrawPatternEditNormal
 | 
						|
 | 
						|
                Mov     DH, DL          ; DL = min channel, DH = max channel
 | 
						|
                Mov     CX, Channel     ; Also check
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly1:
 | 
						|
                LodsW
 | 
						|
 | 
						|
                Cmp     AL, CL
 | 
						|
                JE      PE_DrawPatternEditNormalJP
 | 
						|
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_DrawPatternViewChannelOnly2
 | 
						|
 | 
						|
                Cmp     AL, DL
 | 
						|
                JB      PE_DrawPatternViewChannelOnly3
 | 
						|
 | 
						|
                Cmp     AL, DH
 | 
						|
                JA      PE_DrawPatternViewChannelOnly4
 | 
						|
 | 
						|
                Jmp     PE_DrawPatternViewChannelOnly1
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly3:
 | 
						|
                Mov     DL, AL
 | 
						|
                Jmp     PE_DrawPatternViewChannelOnly1
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly4:
 | 
						|
                Mov     DH, AL
 | 
						|
                Jmp     PE_DrawPatternViewChannelOnly1
 | 
						|
 | 
						|
PE_DrawPatternEditNormalJP:
 | 
						|
                Jmp     PE_DrawPatternEditNormal
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly2:         ; OK.. so channel is not in list,
 | 
						|
                                        ; DL = min channel, DH = max channel.
 | 
						|
                Mov     CH, CL
 | 
						|
                Sub     CH, DH          ; CH = curchannel-maxchannel
 | 
						|
 | 
						|
                Cmp     DH, CL
 | 
						|
                JBE     PE_DrawPatternViewChannelOnly5
 | 
						|
 | 
						|
                Mov     CH, CL
 | 
						|
                Sub     CH, DL
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly5:         ; CH = modifier.
 | 
						|
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly6:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_DrawPatternEditNormal
 | 
						|
 | 
						|
                Add     AL, CH
 | 
						|
                JS      PE_DrawPatternViewChannelOnly7
 | 
						|
 | 
						|
                Cmp     AL, 63
 | 
						|
                JBE     PE_DrawPatternViewChannelOnly8
 | 
						|
 | 
						|
                Mov     AL, 63
 | 
						|
                Jmp     PE_DrawPatternViewChannelOnly8
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly7:
 | 
						|
                Xor     AL, AL
 | 
						|
 | 
						|
PE_DrawPatternViewChannelOnly8:
 | 
						|
                Mov     [SI-2], AL
 | 
						|
                Jmp     PE_DrawPatternViewChannelOnly6
 | 
						|
 | 
						|
PE_DrawPatternEditNormal:
 | 
						|
                Mov     AX, TopRow
 | 
						|
                Mov     CX, Row
 | 
						|
 | 
						|
                Cmp     AX, CX
 | 
						|
                JLE     PE_DrawPatternEdit2
 | 
						|
 | 
						|
                Mov     AX, CX                  ; if row < toprow, toprow = row
 | 
						|
 | 
						|
PE_DrawPatternEdit2:
 | 
						|
                LEA     DX, [EAX+32]
 | 
						|
                Cmp     DX, CX
 | 
						|
                JG      PE_DrawPatternEdit3
 | 
						|
 | 
						|
                LEA     AX, [ECX-31]
 | 
						|
 | 
						|
PE_DrawPatternEdit3:
 | 
						|
                Mov     TopRow, AX
 | 
						|
 | 
						|
                Mov     CX, MaxRow
 | 
						|
                Sub     CX, 31
 | 
						|
                Cmp     AX, CX
 | 
						|
                JBE     PE_DrawPatternEdit35
 | 
						|
 | 
						|
                Mov     TopRow, CX
 | 
						|
                Mov     AX, CX
 | 
						|
 | 
						|
PE_DrawPatternEdit35:
 | 
						|
                Mov     DI, (1+15*80)*2
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JNE     PE_DrawPatternEditAllView
 | 
						|
 | 
						|
                Xor     BX, BX
 | 
						|
 | 
						|
PE_DrawPatternEditAllView:
 | 
						|
                LEA     DI, [EDI+EBX*2]
 | 
						|
 | 
						|
                Xor     BX, BX
 | 
						|
                Cmp     PlayMarkOn, 0
 | 
						|
                JE      PE_DrawPlayMark
 | 
						|
 | 
						|
                Mov     CX, PlayMarkPattern
 | 
						|
                Cmp     CX, PatternNumber
 | 
						|
                JNE     PE_DrawPlayMark
 | 
						|
 | 
						|
                Mov     BX, 1                   ; Check to draw playmark
 | 
						|
 | 
						|
PE_DrawPlayMark:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     DX, 32
 | 
						|
 | 
						|
PE_DrawPatternEdit4:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CH, 20h
 | 
						|
                And     BX, BX
 | 
						|
                JZ      PE_DrawPatternEditRowNumber
 | 
						|
 | 
						|
                Cmp     AX, PlayMarkRow
 | 
						|
                JNE     PE_DrawPatternEditRowNumber
 | 
						|
 | 
						|
                Mov     CH, 0B0h
 | 
						|
 | 
						|
PE_DrawPatternEditRowNumber:
 | 
						|
                Call    PE_ConvAX2Num
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Inc     AX
 | 
						|
                Add     DI, 160
 | 
						|
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PE_DrawPatternEdit4
 | 
						|
 | 
						|
                Mov     BX, Offset NoteNames    ; CS:BX points to notenames
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                                        ; Viewing columns...
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
                Mov     DI, (15*80+2)*2
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JNE     PE_DrawviewColumnStart
 | 
						|
 | 
						|
                Add     DI, 6
 | 
						|
 | 
						|
PE_DrawViewColumnStart:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_DrawViewColumn2
 | 
						|
 | 
						|
PE_DrawViewColumn1:
 | 
						|
                                        ; AL = channel, AH = view method.
 | 
						|
                Mov     DL, AL
 | 
						|
                MovZX   CX, AH
 | 
						|
                LEA     BP, [ViewMethodInfo+ECX*4]
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
                Push    ES
 | 
						|
                Push    DI
 | 
						|
                Push    BP
 | 
						|
 | 
						|
                Mov     SI, 5
 | 
						|
                Xor     AH, AH
 | 
						|
                Push    DX
 | 
						|
                Mul     SI
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     AX, 320
 | 
						|
                Mov     CX, TopRow
 | 
						|
                Mul     CX
 | 
						|
                Pop     DX
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Add     SI, AX          ; DS:SI points to appropriate data.
 | 
						|
                                        ; CS:BX points to note type.
 | 
						|
                                        ; ES:DI points to screen area.
 | 
						|
                                        ; DL = Channel number
 | 
						|
                                        ; CX = Row number
 | 
						|
 | 
						|
                Call    [Near Ptr CS:BP]
 | 
						|
 | 
						|
                Pop     BP
 | 
						|
                Pop     DI
 | 
						|
                Pop     ES
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_DrawViewColumn2
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Mov     CX, [CS:BP+2]
 | 
						|
                Add     DI, CX
 | 
						|
                Add     DI, CX
 | 
						|
 | 
						|
                Cmp     ViewDivision, 0
 | 
						|
                JE      PE_DrawViewColumn4
 | 
						|
 | 
						|
                Mov     CX, 32
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     AX, 2A8h
 | 
						|
 | 
						|
PE_DrawViewColumn3:
 | 
						|
                StosW
 | 
						|
                Add     DI, 158
 | 
						|
                Loop    PE_DrawViewColumn3
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                StosW                           ; Just to do: Add DI, 2
 | 
						|
 | 
						|
PE_DrawViewColumn4:
 | 
						|
                Pop     AX
 | 
						|
                Jmp     PE_DrawViewColumn1
 | 
						|
 | 
						|
PE_DrawViewColumn2:
 | 
						|
                Pop     DS
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 8
 | 
						|
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JE      PE_DrawPatternHilightRow
 | 
						|
 | 
						|
PE_DrawPatternEdit33:
 | 
						|
                Mov     AX, 320
 | 
						|
                Mov     BP, TopRow
 | 
						|
                Mul     BP
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     LeftChannel
 | 
						|
                Add     SI, AX             ; SI contains offset to channel data
 | 
						|
                Mov     DX, NumChannelsEdit
 | 
						|
 | 
						|
                Mov     CX, 32                  ; 32 rows
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
PE_DrawPatternEdit5:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
                Push    BP
 | 
						|
 | 
						|
                Mov     CX, 60Ch
 | 
						|
 | 
						|
                Mov     AX, BP
 | 
						|
                Cmp     RowHiLight2, 0
 | 
						|
                JZ      PE_DrawPatternEdit8
 | 
						|
                Div     RowHiLight2
 | 
						|
                And     AH, AH
 | 
						|
                JNZ     PE_DrawPatternEdit8
 | 
						|
 | 
						|
                Mov     CH, 0E6h
 | 
						|
                Jmp     PE_DrawPatternEdit6
 | 
						|
 | 
						|
PE_DrawPatternEdit8:
 | 
						|
                Mov     AX, BP
 | 
						|
                Cmp     RowHiLight1, 0
 | 
						|
                JZ      PE_DrawPatternEdit6
 | 
						|
                Div     RowHiLight1
 | 
						|
                And     AH, AH
 | 
						|
                JNZ     PE_DrawPatternEdit6
 | 
						|
 | 
						|
                Mov     CH, 0F6h
 | 
						|
 | 
						|
PE_DrawPatternEdit6:                    ; CH = colour, CL = 12 (for division)
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Cmp     CS:BlockMark, 0
 | 
						|
                JE      PE_DrawPatternEdit25
 | 
						|
 | 
						|
                Cmp     BP, CS:BlockTop
 | 
						|
                JB      PE_DrawPatternEdit25
 | 
						|
 | 
						|
                Cmp     BP, CS:BlockBottom
 | 
						|
                JA      PE_DrawPatternEdit25
 | 
						|
 | 
						|
                Mov     AX, CS:LeftChannel
 | 
						|
                Add     AX, CS:NumChannelsEdit
 | 
						|
                Sub     AX, DX
 | 
						|
 | 
						|
                Cmp     AX, CS:BlockLeft
 | 
						|
                JB      PE_DrawPatternEdit25
 | 
						|
 | 
						|
                Cmp     AX, CS:BlockRight
 | 
						|
                JA      PE_DrawPatternEdit25
 | 
						|
 | 
						|
                Test    CH, 80h
 | 
						|
                JZ      PE_DrawPatternEdit26
 | 
						|
 | 
						|
                Mov     CH, 93h
 | 
						|
                Jmp     PE_DrawPatternHilight1
 | 
						|
 | 
						|
PE_DrawPatternEdit26:
 | 
						|
                Mov     CH, 83h
 | 
						|
                Jmp     PE_DrawPatternHilight1
 | 
						|
 | 
						|
PE_DrawPatternEdit25:
 | 
						|
                Cmp     BP, Row
 | 
						|
                JNE     PE_DrawPatternHilight1
 | 
						|
 | 
						|
                Test    CentraliseCursor, 2
 | 
						|
                JZ      PE_DrawPatternHilight1
 | 
						|
 | 
						|
                Mov     CH, 016h
 | 
						|
 | 
						|
PE_DrawPatternHilight1:
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Call    Draw_3Note
 | 
						|
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW                           ; Note->Instrument space
 | 
						|
 | 
						|
                Mov     DL, 10
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Call    Draw_2Instrument
 | 
						|
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     PE_DrawPattern16
 | 
						|
 | 
						|
                Test    CS:Flags, 1
 | 
						|
                JZ      PE_DrawPatternNoDefaultVolume
 | 
						|
 | 
						|
                Cmp     Byte Ptr [SI-3], MAXNOTE
 | 
						|
                JA      PE_DrawPatternNoDefaultVolume
 | 
						|
                Cmp     Byte Ptr [SI-2], 0
 | 
						|
                JE      PE_DrawPatternNoDefaultVolume
 | 
						|
 | 
						|
                Sub     DI, 2
 | 
						|
                Mov     AL, 191
 | 
						|
                StosW
 | 
						|
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     FS, AX
 | 
						|
                Mov     BL, [SI-2]      ; Sample/Instrument
 | 
						|
                And     BX, 0FFh
 | 
						|
                Add     BX, BX
 | 
						|
 | 
						|
                Test    Byte Ptr [FS:2Ch], 4    ; Sample mode?
 | 
						|
                JZ      DefaultVolumeSample
 | 
						|
 | 
						|
DefaultVolumeInstrument:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     BX, [FS:64710+BX]       ; Instrument pointer
 | 
						|
                Mov     DI, [SI-3]
 | 
						|
                And     DI, 0FFh                ; DI = Note
 | 
						|
                Add     DI, DI
 | 
						|
                Mov     BX, [FS:BX+DI+41h]      ; BL = sample
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                And     BX, 0FFh
 | 
						|
                Add     BX, BX
 | 
						|
                JZ      DefaultVolumeNoSample
 | 
						|
 | 
						|
DefaultVolumeSample:
 | 
						|
                Mov     BX, [FS:64910+BX]       ; Sample
 | 
						|
                Mov     AL, [FS:BX+13h]         ; Default volume
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Mov     DL, 10
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DL
 | 
						|
                Add     AX, '00'
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, DH
 | 
						|
                StosW
 | 
						|
                Mov     AL, 192
 | 
						|
                StosW
 | 
						|
                Jmp     PE_DrawPatternEffect
 | 
						|
 | 
						|
DefaultVolumeNoSample:
 | 
						|
                Pop     BX
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 173         ; Replace with default volume
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Mov     AL, 192
 | 
						|
                StosW
 | 
						|
                Jmp     PE_DrawPatternEffect
 | 
						|
 | 
						|
PE_DrawPatternNoDefaultVolume:
 | 
						|
                Mov     AL, 173                         ; '.'
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     PE_DrawPattern17
 | 
						|
 | 
						|
PE_DrawPattern16:
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      PE_DrawPatternNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      PE_DrawPatternVEffect1
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
PE_DrawPatternVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DL
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, DH
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     PE_DrawPattern17
 | 
						|
 | 
						|
PE_DrawPatternNoVEffect:
 | 
						|
                Mov     CL, CH
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      PE_DrawPatternNoPan
 | 
						|
 | 
						|
                And     CL, 0F0h
 | 
						|
                Or      CL, 2
 | 
						|
                And     AL, 7Fh         ; Filter out panning stuff.
 | 
						|
 | 
						|
 | 
						|
PE_DrawPatternNoPan:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DL
 | 
						|
                                                ; AH = units, AL = tens
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AH, CL
 | 
						|
                Add     AL, '0'
 | 
						|
                StosW
 | 
						|
                Mov     AL, DH
 | 
						|
                Add     AL, '0'
 | 
						|
                StosW
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
 | 
						|
PE_DrawPattern17:
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
PE_DrawPatternEffect:
 | 
						|
                LodsB
 | 
						|
                Add     AL, 64
 | 
						|
                Cmp     AL, 64
 | 
						|
                JNE     PE_DrawPattern18
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
 | 
						|
PE_DrawPattern18:
 | 
						|
                StosW
 | 
						|
                LodsB                   ; Commandvalue
 | 
						|
                Mov     DH, AL
 | 
						|
                ShR     AL, 4
 | 
						|
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Mov     AL, DH
 | 
						|
                And     AL, 15
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Dec     DX
 | 
						|
                JZ      PE_DrawPatternEdit9
 | 
						|
 | 
						|
                And     AX, 0F000h
 | 
						|
                Or      AX, 2A8h
 | 
						|
                Cmp     AH, 80h
 | 
						|
                JB      PE_DrawDiv1
 | 
						|
                Cmp     AH, 0A0h
 | 
						|
                JAE     PE_DrawDiv1
 | 
						|
 | 
						|
                Mov     AX, 2A8h
 | 
						|
 | 
						|
PE_DrawDiv1:
 | 
						|
                StosW
 | 
						|
                Jmp     PE_DrawPatternEdit6
 | 
						|
 | 
						|
PE_DrawPatternEdit9:
 | 
						|
                Pop     BP
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 160                 ; Screen
 | 
						|
                Add     SI, 320                 ; PatternData
 | 
						|
                Inc     BP                      ; Row
 | 
						|
                Loop    PE_DrawPatternEdit5
 | 
						|
 | 
						|
PE_DrawPatternHilightRow:
 | 
						|
                Call    Music_GetPlayMode
 | 
						|
                Test    AX, AX
 | 
						|
                JZ      PE_DrawPattern40
 | 
						|
 | 
						|
                Cmp     CX, CS:PatternNumber
 | 
						|
                JNE     PE_DrawPattern40
 | 
						|
 | 
						|
                Sub     BX, CS:TopRow
 | 
						|
                JC      PE_DrawPattern40
 | 
						|
                Cmp     BL, 32
 | 
						|
                JAE     PE_DrawPattern40
 | 
						|
                Mov     AL, 80
 | 
						|
                Mul     BL
 | 
						|
 | 
						|
                Mov     DI, AX
 | 
						|
                Add     DI, 1+15*80
 | 
						|
                Cmp     CS:NumChannelsEdit, 0
 | 
						|
                JE      PE_DrawPattern41
 | 
						|
 | 
						|
                Add     DI, CS:ViewWidth
 | 
						|
 | 
						|
PE_DrawPattern41:
 | 
						|
                Add     DI, DI
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     CL, 3
 | 
						|
 | 
						|
PE_DrawPattern42:
 | 
						|
                Inc     DI
 | 
						|
                Mov     AL, [DI]
 | 
						|
                And     AL, 0F0h
 | 
						|
                Or      AL, 3
 | 
						|
                StosB
 | 
						|
 | 
						|
                Dec     CL
 | 
						|
                JNZ     PE_DrawPattern42
 | 
						|
 | 
						|
PE_DrawPattern40:
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_DrawPatternEdit
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PrePatternEdit Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     NumChannelsEdit, 0
 | 
						|
                JNE     PE_PrePatternEdit18
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit18:
 | 
						|
                Call    S_GetDestination
 | 
						|
 | 
						|
                Mov     AX, 80
 | 
						|
                Mov     BX, 15
 | 
						|
                Add     BX, Row
 | 
						|
                Sub     BX, TopRow
 | 
						|
                Mul     BL
 | 
						|
                Add     AX, ViewWidth
 | 
						|
                Add     AX, 5
 | 
						|
                Mov     BX, PatternCursor
 | 
						|
                Add     AL, [CursorPositions+BX]
 | 
						|
                AdC     AH, 0
 | 
						|
                Mov     DI, AX
 | 
						|
                Mov     AL, 14
 | 
						|
                Mov     BX, Channel
 | 
						|
                Sub     BX, LeftChannel
 | 
						|
                Mul     BL
 | 
						|
                Add     DI, AX
 | 
						|
                Add     DI, DI
 | 
						|
                Inc     DI
 | 
						|
                Mov     Byte Ptr [ES:DI], 30h
 | 
						|
 | 
						|
                Mov     DI, 8+47*80
 | 
						|
                Add     DI, ViewWidth
 | 
						|
                Add     DI, DI
 | 
						|
                Mov     SI, LeftChannel
 | 
						|
                Mov     DX, NumChannelsEdit
 | 
						|
 | 
						|
PE_PrePatternEdit16:
 | 
						|
                Cmp     [MultiChannelInfo+SI], 0        ; Put the 'M's in.
 | 
						|
                JE      PE_PrePatternEdit17
 | 
						|
 | 
						|
                Mov     Byte Ptr [ES:DI], 172
 | 
						|
 | 
						|
PE_PrePatternEdit17:
 | 
						|
                Inc     SI
 | 
						|
                Add     DI, 28
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PE_PrePatternEdit16
 | 
						|
 | 
						|
                Mov     DI, 5+47*80
 | 
						|
                Add     DI, ViewWidth
 | 
						|
                Mov     AL, 14
 | 
						|
                Mov     BX, Channel
 | 
						|
                Sub     BX, LeftChannel
 | 
						|
                Mul     BL
 | 
						|
                Add     DI, AX
 | 
						|
                Add     DI, DI                  ; Points to bottom of channel.
 | 
						|
 | 
						|
                Mov     DX, 1
 | 
						|
                Cmp     Template, 0
 | 
						|
                JE      PE_PrePatternEditLoop
 | 
						|
;                Test    CL, CL
 | 
						|
;                JZ      PE_PrePatternEditLoop
 | 
						|
                Cmp     BlockDataArea, 0
 | 
						|
                JE      PE_PrePatternEditLoop
 | 
						|
 | 
						|
                Mov     FS, BlockDataArea
 | 
						|
                Mov     AX, [FS:0]              ; Block width
 | 
						|
                Mov     DX, NumChannelsEdit
 | 
						|
                Add     DX, LeftChannel
 | 
						|
                Sub     DX, Channel
 | 
						|
                Cmp     DX, AX
 | 
						|
                JB      PE_PrePatternEditLoop
 | 
						|
 | 
						|
                Mov     DX, AX
 | 
						|
 | 
						|
PE_PrePatternEditLoop:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     AX, 23A9h
 | 
						|
                Mov     CX, PatternCursor
 | 
						|
                Mov     CH, EditMask
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PrePatternEdit1
 | 
						|
 | 
						|
                Mov     AL, 0AAh
 | 
						|
 | 
						|
PE_PrePatternEdit1:
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
;                Add     DI, 2
 | 
						|
                ScasW
 | 
						|
 | 
						|
                Test    CH, 1
 | 
						|
                JZ      PE_PrePatternEdit2
 | 
						|
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     PE_PrePatternEdit3
 | 
						|
 | 
						|
PE_PrePatternEdit2:
 | 
						|
                Add     DI, 4
 | 
						|
 | 
						|
PE_PrePatternEdit3:
 | 
						|
;                Add     DI, 2
 | 
						|
                ScasW
 | 
						|
 | 
						|
                Test    CH, 2
 | 
						|
                JZ      PE_PrePatternEdit4
 | 
						|
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     PE_PrePatternEdit5
 | 
						|
 | 
						|
PE_PrePatternEdit4:
 | 
						|
                Add     DI, 4
 | 
						|
 | 
						|
PE_PrePatternEdit5:
 | 
						|
;                Add     DI, 2
 | 
						|
                ScasW
 | 
						|
 | 
						|
                Test    CH, 4
 | 
						|
                JZ      PE_PrePatternEdit6
 | 
						|
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
PE_PrePatternEdit6:
 | 
						|
                Pop     DI                      ; Mark in the actual channels
 | 
						|
                Mov     AL, 0A9h
 | 
						|
                Test    CL, CL
 | 
						|
                JNZ     PE_PrePatternEdit7
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
                Add     DI, 22
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PE_PrePatternEditLoop
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit7:
 | 
						|
                Cmp     CL, 1
 | 
						|
                JA      PE_PrePatternEdit8
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
                Add     DI, 4
 | 
						|
                StosW
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit8:
 | 
						|
                Cmp     CL, 3
 | 
						|
                JA      PE_PrePatternEdit10
 | 
						|
 | 
						|
                Test    CH, 1
 | 
						|
                JZ      PE_PrePatternEdit9
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
 | 
						|
PE_PrePatternEdit9:
 | 
						|
                Add     DI, 8
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit10:
 | 
						|
                Cmp     CL, 5
 | 
						|
                JA      PE_PrePatternEdit12
 | 
						|
 | 
						|
                Test    CH, 2
 | 
						|
                JZ      PE_PrePatternEdit11
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
 | 
						|
PE_PrePatternEdit11:
 | 
						|
 | 
						|
                Add     DI, 14
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit12:
 | 
						|
                Cmp     CL, 6
 | 
						|
                JA      PE_PrePatternEdit14
 | 
						|
 | 
						|
                Test    CH, 4
 | 
						|
                JZ      PE_PrePatternEdit13
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
 | 
						|
PE_PrePatternEdit13:
 | 
						|
                Add     DI, 20
 | 
						|
                StosW
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PrePatternEdit14:
 | 
						|
                Test    CH, 4
 | 
						|
                JZ      PE_PrePatternEdit15
 | 
						|
 | 
						|
                Mov     AL, 0ABh
 | 
						|
 | 
						|
PE_PrePatternEdit15:
 | 
						|
                Add     DI, 22
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PrePatternEdit
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            GetPatternOffset
 | 
						|
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Push    BX
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
                Pop     BX
 | 
						|
                Pop     AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            GetPatternOffset
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NetworkPatternBlock Near   ; CL = width, CH = Height, BL = Channel, BH = Row
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Call    Network_GetSendQueue
 | 
						|
                JZ      PE_GotoNextInputNoNetwork
 | 
						|
 | 
						|
                Mov     AX, NETWORK_PARTIALPATTERNOBJECT*100h ; Destination ALL
 | 
						|
                StosW
 | 
						|
                Mov     AL, Byte Ptr PatternNumber
 | 
						|
                StosB
 | 
						|
                Mov     AX, BX
 | 
						|
                StosW
 | 
						|
                Mov     AX, CX
 | 
						|
                StosW
 | 
						|
 | 
						|
PE_GotoNextInputNoNetwork:
 | 
						|
                Call    Network_FinishedSendQueue
 | 
						|
 | 
						|
                Ret
 | 
						|
ENDIF
 | 
						|
 | 
						|
EndP            NetworkPatternBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NetworkPartialPattern Near   ; CL = width, CH = Height
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Push    BX
 | 
						|
                Mov     BL, Byte Ptr Channel
 | 
						|
                Mov     BH, Byte Ptr Row
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
                Pop     BX
 | 
						|
ENDIF
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            NetworkPartialPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NetworkBlock Near
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Mov     BL, Byte Ptr BlockLeft
 | 
						|
                Mov     BH, Byte Ptr BlockTop
 | 
						|
                Mov     CL, Byte Ptr BlockRight
 | 
						|
                Mov     CH, Byte Ptr BlockBottom
 | 
						|
                Sub     CX, BX
 | 
						|
                Add     CX, 101h
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
ENDIF
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            NetworkBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
PatternCursorJumpTable  DW      Offset PE_PatternCursorPos0
 | 
						|
                        DW      Offset PE_PatternCursorPos1
 | 
						|
                        DW      Offset PE_PatternCursorPos2
 | 
						|
                        DW      Offset PE_PatternCursorPos3
 | 
						|
                        DW      Offset PE_PatternCursorPos4
 | 
						|
                        DW      Offset PE_PatternCursorPos5
 | 
						|
                        DW      Offset PE_PatternCursorPos6
 | 
						|
                        DW      Offset PE_PatternCursorPos7
 | 
						|
                        DW      Offset PE_PatternCursorPos8
 | 
						|
 | 
						|
Proc            PE_PostPatternEdit Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Test    CH, 1
 | 
						|
                JZ      PE_PostPatternEdit17
 | 
						|
 | 
						|
                Mov     EAX, [DWord Ptr LastKeyBoard1]
 | 
						|
                Mov     EBX, [DWord Ptr LastKeyBoard2]
 | 
						|
 | 
						|
                Mov     [DWord Ptr LastKeyBoard2], EAX
 | 
						|
                Mov     [DWord Ptr LastKeyBoard3], EBX
 | 
						|
 | 
						|
                Mov     [LastKeyBoard1], CX
 | 
						|
                Mov     [LastKeyBoard1+2], DX
 | 
						|
 | 
						|
PE_PostPatternEdit17:
 | 
						|
                Mov     AL, CH
 | 
						|
                Mov     SI, Offset PEFunctions
 | 
						|
                And     AL, 6
 | 
						|
                Mov     ShiftPressed, AL
 | 
						|
 | 
						|
                Test    CH, 6
 | 
						|
                PushF
 | 
						|
                Call    M_FunctionDivider
 | 
						|
                JC      PE_PostPatternEdit1
 | 
						|
 | 
						|
                PopF
 | 
						|
                JNZ     PE_PostPatternEditShift
 | 
						|
 | 
						|
PE_PostPatternEditNotShift:
 | 
						|
                Jmp     [SI]
 | 
						|
 | 
						|
PE_PostPatternEditShift:
 | 
						|
                Cmp     Byte Ptr [SI-3], 6      ; MIDI message
 | 
						|
                JE      PE_PostPatternEditNotshift
 | 
						|
 | 
						|
                Mov     AX, [SI-2]
 | 
						|
 | 
						|
                Cmp     AX, 10Fh   ; Shift Tab
 | 
						|
                JE      PE_PostPatternEditNotShift
 | 
						|
 | 
						|
                Cmp     AX, '?'
 | 
						|
                JE      PE_PostPatternEditNotShift
 | 
						|
 | 
						|
                Cmp     AX, '|'
 | 
						|
                JE      PE_PostPatternEditNotShift
 | 
						|
 | 
						|
                Push    [Row]
 | 
						|
                Push    [Channel]
 | 
						|
 | 
						|
                Push    CS
 | 
						|
 | 
						|
                Call    [SI]
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
;                Mov     CX, BlockAnchorRow
 | 
						|
;                Mov     DX, BlockAnchorChannel
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
                Cmp     CX, Row
 | 
						|
                JNE     PE_PostPatternEditShift1
 | 
						|
 | 
						|
                Cmp     DX, Channel
 | 
						|
                JE      PE_PostPatternEditShift2
 | 
						|
 | 
						|
PE_PostPatternEditShift1:
 | 
						|
                Cmp     BlockReset, 0
 | 
						|
                JE      PE_PostPatternEditShift3
 | 
						|
 | 
						|
                Mov     BlockReset, 0
 | 
						|
                Mov     BlockMark, 0
 | 
						|
 | 
						|
PE_PostPatternEditShift3:
 | 
						|
                                        ; Set block marks.
 | 
						|
                Mov     AX, BlockAnchorChannel
 | 
						|
                Mov     BX, BlockAnchorRow
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Call    PEFunction_MarkBeginBlockChain
 | 
						|
                Jmp     PEFunction_MarkEndBlock
 | 
						|
 | 
						|
PE_PostPatternEditShift2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostPatternEdit1:
 | 
						|
                PopF
 | 
						|
                Test    CH, 60h
 | 
						|
                JNZ     PE_PostPatternEdit6
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
                Mov     BX, PatternCursor
 | 
						|
                Add     BX, BX
 | 
						|
                Jmp     [PatternCursorJumpTable+BX]
 | 
						|
 | 
						|
PE_PostPatternEdit6:
 | 
						|
                Mov     AX, CX
 | 
						|
                And     AX, 1FFh
 | 
						|
                Cmp     AX, 10Ah
 | 
						|
                JA      PE_PostPatternEdit7
 | 
						|
 | 
						|
                Cmp     AX, 102h
 | 
						|
                JB      PE_PostPatternEdit7
 | 
						|
                                        ; Alt-1 -> Alt-9
 | 
						|
                Sub     AX, 101h
 | 
						|
;                Dec     AL
 | 
						|
;                Dec     AH
 | 
						|
                Mov     SkipValue, AX
 | 
						|
 | 
						|
                Mov     SI, Offset CursorStepMsg
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PostPatternEdit7:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PostPatternEdit
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_PgUp Far
 | 
						|
 | 
						|
                Mov     Row, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_PgUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_PgDn Far
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_PgDn
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Up Far
 | 
						|
 | 
						|
                Mov     BX, SkipValue
 | 
						|
                And     BX, BX
 | 
						|
                JNZ     PEFunction_Up2
 | 
						|
 | 
						|
                Mov     BX, 1
 | 
						|
 | 
						|
PEFunction_Up2:
 | 
						|
                Mov     AX, Row
 | 
						|
                Sub     AX, BX
 | 
						|
                JS      PEFunction_Up1
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
PEFunction_Up1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Up
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Down Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     BX, SkipValue
 | 
						|
                And     BX, BX
 | 
						|
                JNZ     PEFunction_Down2
 | 
						|
 | 
						|
                Mov     BX, 1
 | 
						|
 | 
						|
PEFunction_Down2:
 | 
						|
                Mov     AX, Row
 | 
						|
                Add     AX, BX
 | 
						|
                Cmp     AX, MaxRow
 | 
						|
                JA      PEFunction_Down1
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
PEFunction_Down1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Down
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Left Far
 | 
						|
 | 
						|
                Mov     CX, PatternCursor
 | 
						|
                Mov     BX, Channel
 | 
						|
                Dec     CX
 | 
						|
                JNS     PEFunction_Left1
 | 
						|
 | 
						|
                Mov     CX, 8
 | 
						|
                Dec     BX
 | 
						|
                JS      PEFunction_Left2
 | 
						|
 | 
						|
                Mov     Channel, BX
 | 
						|
 | 
						|
                Cmp     CommandToValue, 0
 | 
						|
                JE      PEFunction_Left1
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
;                Mov     ES, PatternDataArea
 | 
						|
;                Mov     AX, 64
 | 
						|
;                Mul     Row
 | 
						|
;                Add     AX, BX
 | 
						|
;                Mov     DX, 5
 | 
						|
;                Mul     DX
 | 
						|
;                Mov     DI, AX
 | 
						|
                Cmp     Word Ptr [ES:DI+3], 0
 | 
						|
                JNE     PEFunction_Left1
 | 
						|
 | 
						|
                Mov     CX, 6
 | 
						|
 | 
						|
PEFunction_Left1:
 | 
						|
                Mov     PatternCursor, CX
 | 
						|
 | 
						|
PEFunction_Left2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Left
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Right Far                    ; If there is no
 | 
						|
                                                        ; command value... skip!
 | 
						|
 | 
						|
                Mov     CX, PatternCursor
 | 
						|
                Mov     BX, Channel
 | 
						|
                Inc     CX
 | 
						|
                Cmp     CX, 6
 | 
						|
                JBE     PEFunction_Right1
 | 
						|
 | 
						|
                Cmp     CommandToValue, 0
 | 
						|
                JE      PEFunction_Right4
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
;                Mov     ES, PatternDataArea
 | 
						|
;                Mov     AX, 64
 | 
						|
;                Mul     Row
 | 
						|
;                Add     AX, Channel
 | 
						|
;                Mov     DX, 5
 | 
						|
;                Mul     DX
 | 
						|
;                Mov     DI, AX
 | 
						|
                Cmp     Word Ptr [ES:DI+3], 0
 | 
						|
                JE      PEFunction_Right3
 | 
						|
 | 
						|
PEFunction_Right4:
 | 
						|
                Cmp     CX, 9
 | 
						|
                JB      PEFunction_Right1
 | 
						|
 | 
						|
PEFunction_Right3:
 | 
						|
                Xor     CX, CX
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, 64
 | 
						|
                JAE     PEFunction_Right2
 | 
						|
 | 
						|
PEFunction_Right1:
 | 
						|
                Mov     PatternCursor, CX
 | 
						|
                Mov     Channel, BX
 | 
						|
 | 
						|
PEFunction_Right2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Right
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Press_Shift Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
 | 
						|
                Mov     BlockAnchorChannel, AX
 | 
						|
                Mov     BlockAnchorRow, BX
 | 
						|
                Mov     BlockReset, 1
 | 
						|
                Mov     NoteEntered, 0
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Press_Shift
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Release_Shift Far
 | 
						|
 | 
						|
                Cmp     NoteEntered, 0
 | 
						|
                JE      PEFunction_Release_Shift1
 | 
						|
 | 
						|
                Mov     AX, BlockAnchorChannel
 | 
						|
                Mov     BX, BlockAnchorRow
 | 
						|
 | 
						|
                Mov     Channel, AX
 | 
						|
                Mov     Row, BX
 | 
						|
 | 
						|
                Call    PE_GotoNextInput
 | 
						|
 | 
						|
PEFunction_Release_Shift1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Release_Shift
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Alt_Home Far
 | 
						|
                Mov     BL, RowHilight1
 | 
						|
                Jmp     PEFunction_PgUpChain
 | 
						|
 | 
						|
Proc            PEFunction_PgUp Far
 | 
						|
 | 
						|
                Mov     BL, RowHiLight2
 | 
						|
 | 
						|
PEFunction_PgUpChain:
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     CX, MaxRow
 | 
						|
                Mov     DX, SkipValue
 | 
						|
                And     DX, 0FFh
 | 
						|
                JNZ     PEFunction_PgUp3
 | 
						|
 | 
						|
                Mov     DL, 1
 | 
						|
 | 
						|
PEFunction_PgUp3:
 | 
						|
                And     BX, 0FFh
 | 
						|
 | 
						|
                JNZ     PEFunction_PgUp2
 | 
						|
 | 
						|
                Mov     BX, 16
 | 
						|
 | 
						|
PEFunction_PgUp2:
 | 
						|
                Sub     CX, DX          ; Sub maxrow, skipvalue
 | 
						|
                Cmp     CX, AX
 | 
						|
                JAE     PEFunction_PgUp4
 | 
						|
 | 
						|
                Dec     AX
 | 
						|
                Div     BL
 | 
						|
                Mul     BL
 | 
						|
                Jmp     PEFunction_PgUp1
 | 
						|
 | 
						|
PEFunction_PgUp4:
 | 
						|
                Sub     AX, BX
 | 
						|
                JNS     PEFunction_PgUp1
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PEFunction_PgUp1:
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_PgUp
 | 
						|
 | 
						|
EndP            PEFunction_Alt_Home
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_CentraliseCursor
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Sub     AX, 16
 | 
						|
                JNC     PE_CentraliseCursor1
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PE_CentraliseCursor1:
 | 
						|
                Mov     TopRow, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_CentraliseCursor
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
 | 
						|
Proc            PEFunction_Alt_End Far
 | 
						|
                Mov     BL, RowHilight1
 | 
						|
                Jmp     PEFunction_PgDnChain
 | 
						|
 | 
						|
Proc            PEFunction_PgDn Far
 | 
						|
 | 
						|
                Mov     BL, RowHiLight2
 | 
						|
 | 
						|
PEFunction_PgDnChain:
 | 
						|
                Mov     AX, Row
 | 
						|
                And     BX, 0FFh
 | 
						|
                JNZ     PEFunction_PgDn2
 | 
						|
 | 
						|
                Mov     BX, 16
 | 
						|
 | 
						|
PEFunction_PgDn2:
 | 
						|
                Add     AX, BX
 | 
						|
                Cmp     AX, MaxRow
 | 
						|
                JBE     PEFunction_PgDn1
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
 | 
						|
PEFunction_PgDn1:
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_PgDn
 | 
						|
 | 
						|
EndP            PEFunction_Alt_End
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ShiftPgUp Far
 | 
						|
 | 
						|
                Call    PEFunction_PgUp
 | 
						|
                Call    PE_CentraliseCursor
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ShiftPgUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ShiftPgDn Far
 | 
						|
 | 
						|
                Call    PEFunction_PgDn
 | 
						|
                Call    PE_CentraliseCursor
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ShiftPgDn
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Home Far
 | 
						|
 | 
						|
                Cmp     PatternCursor, 0
 | 
						|
                JE      PEFunction_Home1
 | 
						|
 | 
						|
                Mov     PatternCursor, 0
 | 
						|
                Jmp     PEFunction_Home3
 | 
						|
 | 
						|
PEFunction_Home1:
 | 
						|
                Cmp     Channel, 0
 | 
						|
                JE      PEFunction_Home2
 | 
						|
 | 
						|
                Mov     Channel, 0
 | 
						|
                Jmp     PEFunction_Home3
 | 
						|
 | 
						|
PEFunction_Home2:
 | 
						|
                Mov     Row, 0
 | 
						|
 | 
						|
PEFunction_Home3:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Home
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_End Far
 | 
						|
 | 
						|
                Cmp     PatternCursor, 8
 | 
						|
                JE      PEFunction_End1
 | 
						|
 | 
						|
                Mov     PatternCursor, 8
 | 
						|
                Jmp     PEFunction_End3
 | 
						|
 | 
						|
PEFunction_End1:
 | 
						|
                Call    Music_GetLastChannel
 | 
						|
 | 
						|
                Cmp     Channel, AX
 | 
						|
                JE      PEFunction_End2
 | 
						|
 | 
						|
                Mov     Channel, AX
 | 
						|
                Jmp     PEFunction_End3
 | 
						|
 | 
						|
PEFunction_End2:
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
PEFunction_End3:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_End
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Tab Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Cmp     AX, 63
 | 
						|
                JAE     PEFunction_Tab1
 | 
						|
 | 
						|
                Mov     PatternCursor, 0
 | 
						|
                Inc     Channel
 | 
						|
 | 
						|
PEFunction_Tab1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Tab
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ShiftTab Far
 | 
						|
 | 
						|
                Cmp     PatternCursor, 0
 | 
						|
                JNE     PEFunction_ShiftTab2
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_ShiftTab1
 | 
						|
 | 
						|
                Dec     Channel
 | 
						|
 | 
						|
PEFunction_ShiftTab2:
 | 
						|
                Mov     PatternCursor, 0
 | 
						|
 | 
						|
PEFunction_ShiftTab1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ShiftTab
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SetMask Far
 | 
						|
 | 
						|
                Mov     BX, PatternCursor
 | 
						|
                Mov     AL, [MaskChange+BX]
 | 
						|
                Xor     EditMask, AL
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SetMask
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleMultiChannel Far
 | 
						|
 | 
						|
                Mov     BX, Channel
 | 
						|
                Xor     [MultiChannelInfo+BX], 1
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 3100h
 | 
						|
                JNE     PEFunction_ToggleMultiChannel1
 | 
						|
 | 
						|
                Mov     CX, 7
 | 
						|
                Add     CX, Channel
 | 
						|
                Mov     DI, Offset O1_SelectMultiChannel
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
PEFunction_ToggleMultiChannel1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleMultiChannel
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BackSpace Far
 | 
						|
 | 
						|
                Xor     CX, CX
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     BX, Channel
 | 
						|
                Sub     AX, SkipValue
 | 
						|
                JS      PEFunction_BackSpace3
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
                Cmp     [MultiChannelInfo+BX], 0
 | 
						|
                JE      PEFunction_BackSpace5
 | 
						|
 | 
						|
                Mov     DX, BX
 | 
						|
 | 
						|
PEFunction_BackSpace1:
 | 
						|
                Dec     BX
 | 
						|
                JNS     PEFunction_BackSpace4
 | 
						|
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_BackSpace3
 | 
						|
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
PEFunction_BackSpace4:
 | 
						|
                And     BX, 63
 | 
						|
                Cmp     BX, DX
 | 
						|
                JE      PEFunction_BackSpace2
 | 
						|
 | 
						|
                Cmp     [MultiChannelInfo+BX], 0
 | 
						|
                JE      PEFunction_BackSpace1
 | 
						|
 | 
						|
PEFunction_BackSpace2:
 | 
						|
                Mov     Channel, BX
 | 
						|
                Cmp     SkipValue, 0
 | 
						|
                JNE     PEFunction_BackSpace3
 | 
						|
 | 
						|
                And     CX, CX
 | 
						|
                JZ      PEFunction_BackSpace3
 | 
						|
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_BackSpace3
 | 
						|
 | 
						|
                Dec     Row
 | 
						|
                Jmp     PEFunction_BackSpace3
 | 
						|
 | 
						|
PEFunction_BackSpace5:                  ; AX = row
 | 
						|
                Cmp     SkipValue, 0
 | 
						|
                JNE     PEFunction_BackSpace3
 | 
						|
 | 
						|
                Mov     BX, Channel
 | 
						|
                Dec     BX
 | 
						|
                JNS     PEFunction_BackSpace6
 | 
						|
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_BackSpace3
 | 
						|
                Dec     AX
 | 
						|
 | 
						|
PEFunction_BackSpace6:
 | 
						|
                And     BX, 63
 | 
						|
                Mov     Row, AX
 | 
						|
                Mov     Channel, BX
 | 
						|
 | 
						|
PEFunction_BackSpace3:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BackSpace
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_PickUp Far
 | 
						|
 | 
						|
                Cmp     Template, 4
 | 
						|
                JE      PEFunction_PickUp2
 | 
						|
 | 
						|
                Mov     Template, 0             ; Turn off templates
 | 
						|
 | 
						|
PEFunction_PickUp2:
 | 
						|
                Call    GetPatternOffset
 | 
						|
                Mov     EAX, [ES:DI]
 | 
						|
 | 
						|
                Test    AH, AH
 | 
						|
                JNZ     PEFunction_PickUp1
 | 
						|
 | 
						|
                Mov     AH, LastInstrument
 | 
						|
 | 
						|
PEFunction_PickUp1:
 | 
						|
                Mov     DWord Ptr [LastNote], EAX
 | 
						|
                Mov     AL, [ES:DI+4]
 | 
						|
                Mov     LastCommandValue, AL
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_PickUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos1 Far
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos1_1
 | 
						|
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PatternCursorPos1_1
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JA      PE_PatternCursorPos1_1
 | 
						|
 | 
						|
                Mov     AL, [ES:DI]
 | 
						|
                Cmp     AL, 120
 | 
						|
                JA      PE_PatternCursorPos1_2
 | 
						|
 | 
						|
                AAM     12              ; AH = octave, AL = note
 | 
						|
                Mov     AH, DL
 | 
						|
                Sub     AH, '0'
 | 
						|
                AAD     12
 | 
						|
                StosB
 | 
						|
 | 
						|
PE_PatternCursorPos1_2:
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     PE_GotoNextInput
 | 
						|
 | 
						|
PE_PatternCursorPos1_1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos1
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos0 Far
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos0_4
 | 
						|
 | 
						|
                Push    CX
 | 
						|
                Mov     SI, Offset KeyBoardTable
 | 
						|
 | 
						|
                And     CH, Not 6               ; Remove shift mask.
 | 
						|
 | 
						|
PE_PatternCursorPos0_1:
 | 
						|
                LodsW
 | 
						|
                Cmp     AX, 0FFFFh
 | 
						|
                JE      PE_PatternCursorPos0_3
 | 
						|
 | 
						|
                Cmp     AX, CX
 | 
						|
                JNE     PE_PatternCursorPos0_2
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
                Mov     BX, 3Ah
 | 
						|
                Call    K_IsKeyDown
 | 
						|
                JNZ     PE_PatternCursorPreview
 | 
						|
 | 
						|
                Jmp     PE_NewNote
 | 
						|
 | 
						|
PE_PatternCursorPreview:
 | 
						|
                Mov     AX, 12
 | 
						|
                Mul     BaseOctave
 | 
						|
                Mov     BX, AX
 | 
						|
                LodsW
 | 
						|
                Add     AX, BX
 | 
						|
 | 
						|
                Mov     SI, Offset PreviewNote
 | 
						|
 | 
						|
                Cmp     AX, MAXNOTE
 | 
						|
                JA      PE_PatternCursorPos0_4
 | 
						|
 | 
						|
                Mov     AH, LastInstrument
 | 
						|
                Mov     [SI], AX
 | 
						|
 | 
						|
                Mov     AX, CS:Channel
 | 
						|
                Mov     DH, 32
 | 
						|
                Call    Music_PlayNote
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_PatternCursorPos0_2:
 | 
						|
                LodsW                   ; Add SI, 2
 | 
						|
                Jmp     PE_PatternCursorPos0_1
 | 
						|
 | 
						|
PE_PatternCursorPos0_3:
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
                Mov     AL, NONOTE
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      WipeNote
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
                Cmp     DX, '1'
 | 
						|
                JE      WipeNote
 | 
						|
                Cmp     DX, '!'
 | 
						|
                JE      WipeNote
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
                Cmp     DX, '`'
 | 
						|
                JE      WipeNote
 | 
						|
                Cmp     DX, '~'
 | 
						|
                JE      WipeNote
 | 
						|
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      NoteSpace
 | 
						|
 | 
						|
                Cmp     DX, '4'
 | 
						|
                JE      PEFunction_PlayCurrentNote
 | 
						|
                Cmp     DX, '$'
 | 
						|
                JE      PEFunction_PlayCurrentNote
 | 
						|
 | 
						|
                Cmp     DX, '8'
 | 
						|
                JE      PEFunction_PlayCurrentRow
 | 
						|
 | 
						|
PE_PatternCursorPos0_4:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos0
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NoteSpace Far
 | 
						|
 | 
						|
                Mov     AL, LastNote
 | 
						|
                Jmp     PE_NewNote4
 | 
						|
 | 
						|
EndP            NoteSpace
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            WipeNote Far
 | 
						|
 | 
						|
                Mov     AH, EditMask
 | 
						|
 | 
						|
                Mov     BP, 1
 | 
						|
                Cmp     Template, 0
 | 
						|
                JE      WipeNote4
 | 
						|
 | 
						|
                Cmp     BlockDataArea, 0
 | 
						|
                JE      WipeNote4
 | 
						|
 | 
						|
                Mov     FS, BlockDataArea
 | 
						|
                Cmp     Word Ptr [FS:2], 1
 | 
						|
                JNE     WipeNote4
 | 
						|
 | 
						|
                Mov     BP, [FS:0]
 | 
						|
 | 
						|
WipeNote4:
 | 
						|
                Mov     CX, BP
 | 
						|
                Mov     CH, 1
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
WipeNote5:
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
                Mov     LastNote, AL
 | 
						|
                Test    AH, 1
 | 
						|
                JZ      WipeNote1
 | 
						|
 | 
						|
                Mov     Byte Ptr [ES:DI+1], 0
 | 
						|
 | 
						|
WipeNote1:
 | 
						|
                Test    AH, 2
 | 
						|
                JZ      WipeNote2
 | 
						|
 | 
						|
                Mov     Byte Ptr [ES:DI+2], 0FFh
 | 
						|
 | 
						|
WipeNote2:
 | 
						|
                Test    AH, 4
 | 
						|
                JZ      WipeNote3
 | 
						|
 | 
						|
                Mov     Word Ptr [ES:DI+3], 0
 | 
						|
 | 
						|
WipeNote3:
 | 
						|
                Add     DI, 5
 | 
						|
                Dec     BP
 | 
						|
                JNZ     WipeNote5
 | 
						|
 | 
						|
IF CHORDENTRY
 | 
						|
                Cmp     ShiftPressed, 0
 | 
						|
                JE      PE_GotoNextInput
 | 
						|
 | 
						|
                Push    SkipValue
 | 
						|
                Mov     SkipValue, 0
 | 
						|
                Mov     NoteEntered, 1
 | 
						|
 | 
						|
                Call    PE_GotoNextInput
 | 
						|
                Pop     SkipValue
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
ELSE
 | 
						|
                Jmp     PE_GotoNextInput
 | 
						|
ENDIF
 | 
						|
 | 
						|
EndP            WipeNote
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GotoNextInput Far
 | 
						|
 | 
						|
 | 
						|
                Mov     CX, PatternCursor
 | 
						|
                And     CX, CX
 | 
						|
                JZ      PE_GotoNextInput4
 | 
						|
 | 
						|
                Cmp     CX, 1
 | 
						|
                JE      PE_GotoNextInput4
 | 
						|
 | 
						|
                Cmp     CX, 2
 | 
						|
                JNE     PE_GotoNextInput5
 | 
						|
 | 
						|
PE_GotoNextInput7:
 | 
						|
                Inc     PatternCursor
 | 
						|
                Jmp     PE_GotoNextInput3
 | 
						|
 | 
						|
PE_GotoNextInput5:
 | 
						|
                Cmp     CX, 3
 | 
						|
                JNE     PE_GotoNextInput6
 | 
						|
 | 
						|
PE_GotoNextInput8:
 | 
						|
                Dec     PatternCursor
 | 
						|
                Jmp     PE_GotoNextInput4
 | 
						|
 | 
						|
PE_GotoNextInput6:
 | 
						|
                Cmp     CX, 4
 | 
						|
                JE      PE_GotoNextInput7
 | 
						|
 | 
						|
                Cmp     CX, 5
 | 
						|
                JE      PE_GotoNextInput8
 | 
						|
 | 
						|
                Cmp     CX, 6
 | 
						|
                JNE     PE_GotoNextInput9
 | 
						|
 | 
						|
                Cmp     CommandToValue, 0
 | 
						|
                JZ      PE_GotoNextInput4
 | 
						|
 | 
						|
                Jmp     PE_GotoNextInput7
 | 
						|
 | 
						|
PE_GotoNextInput9:
 | 
						|
                Cmp     CX, 7
 | 
						|
                JE      PE_GotoNextInput7
 | 
						|
 | 
						|
                Cmp     CommandToValue, 0
 | 
						|
                JE      PE_GotoNextInput8
 | 
						|
 | 
						|
                Sub     PatternCursor, 2
 | 
						|
 | 
						|
PE_GotoNextInput4:
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     BX, Channel
 | 
						|
                Add     AX, SkipValue
 | 
						|
                Cmp     AX, MaxRow
 | 
						|
                JA      PE_GotoNextInput3
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
                Cmp     PatternCursor, 0
 | 
						|
                JNE     PE_GotoNextInput10
 | 
						|
 | 
						|
                Cmp     [MultiChannelInfo+BX], 0
 | 
						|
                JE      PE_GotoNextInput10
 | 
						|
 | 
						|
                Mov     DX, BX
 | 
						|
                Xor     CX, CX
 | 
						|
 | 
						|
PE_GotoNextInput1:
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, 63
 | 
						|
                JBE     PE_GotoNextInput11
 | 
						|
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
PE_GotoNextInput11:
 | 
						|
                And     BX, 63
 | 
						|
                Cmp     DX, BX
 | 
						|
                JE      PE_GotoNextInput2
 | 
						|
 | 
						|
                Cmp     [MultiChannelInfo+BX], 0
 | 
						|
                JE      PE_GotoNextInput1
 | 
						|
 | 
						|
PE_GotoNextInput2:
 | 
						|
                Mov     Channel, BX
 | 
						|
                Cmp     SkipValue, 0
 | 
						|
                JNE     PE_GotoNextInput3
 | 
						|
 | 
						|
                And     CX, CX
 | 
						|
                JZ      PE_GotoNextInput3
 | 
						|
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
                Jmp     PEFunction_Down
 | 
						|
 | 
						|
PE_GotoNextInput10:
 | 
						|
                Cmp     SkipValue, 0
 | 
						|
                JNE     PE_GotoNextInput3
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     CX, Row
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, 63
 | 
						|
                JBE     PE_GotoNextInput12
 | 
						|
                Cmp     CX, MaxRow
 | 
						|
                JAE     PE_GotoNextInput3
 | 
						|
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
PE_GotoNextInput12:
 | 
						|
                And     AX, 63
 | 
						|
                Mov     Row, CX
 | 
						|
                Mov     Channel, AX
 | 
						|
 | 
						|
PE_GotoNextInput3:
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GotoNextInput
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            TemplateSetup
 | 
						|
 | 
						|
                Mov     AH, AL
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Mov     BX, Channel
 | 
						|
                Mov     AX, 320
 | 
						|
                Mov     BP, MaxRow
 | 
						|
                Inc     BP
 | 
						|
                Mul     BP
 | 
						|
                Mov     BP, AX                  ; BP = max offset.
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, BX
 | 
						|
                Mov     CX, 5
 | 
						|
                Mul     CX
 | 
						|
 | 
						|
                Mov     DI, AX                  ; DI = pattern offset.
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
                Mov     DS, BlockDataArea
 | 
						|
                Xor     SI, SI
 | 
						|
 | 
						|
                LodsW
 | 
						|
                Mov     DX, AX                          ; DX = width
 | 
						|
                LodsW
 | 
						|
                Mov     CX, AX                          ; CX = height
 | 
						|
 | 
						|
                Pop     AX                              ; AH = note.
 | 
						|
                Sub     AH, [DS:4]
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            TemplateSetup
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_TemplateOverwrite            ; AX = note
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Call    TemplateSetup
 | 
						|
 | 
						|
PE_TemplateOverWrite1:
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PE_TemplateOverWrite2:
 | 
						|
                Cmp     BX, 64
 | 
						|
                JAE     PE_TemplateOverWrite3
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JA      PE_TemplateOverWrite6
 | 
						|
 | 
						|
                Add     AL, AH
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JBE     PE_TemplateOverWrite6
 | 
						|
 | 
						|
                Mov     AL, NONOTE
 | 
						|
 | 
						|
PE_TemplateOverWrite6:
 | 
						|
                StosB
 | 
						|
                MovsW
 | 
						|
                MovsW
 | 
						|
                Jmp     PE_TemplateOverWrite4
 | 
						|
 | 
						|
PE_TemplateOverWrite3:
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
PE_TemplateOverWrite4:
 | 
						|
                Inc     BX
 | 
						|
                Loop    PE_TemplateOverWrite2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Add     DI, 320
 | 
						|
                Cmp     DI, BP
 | 
						|
                JAE     PE_TemplateOverWrite5
 | 
						|
 | 
						|
                Loop    PE_TemplateOverWrite1
 | 
						|
 | 
						|
PE_TemplateOverWrite5:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_TemplateOverWrite
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_TemplateMixPattern            ; AX = note
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Call    TemplateSetup
 | 
						|
 | 
						|
PE_TemplateMixPattern1:
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PE_TemplateMixPattern2:
 | 
						|
                Cmp     BX, 64
 | 
						|
                JAE     PE_TemplateMixPattern3
 | 
						|
 | 
						|
                Mov     AL, [DS:SI]
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JA      PE_TemplateMixPattern6
 | 
						|
 | 
						|
                Add     AL, AH
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JBE     PE_TemplateMixPattern6
 | 
						|
 | 
						|
                Mov     AL, NONOTE
 | 
						|
 | 
						|
PE_TemplateMixPattern6:
 | 
						|
                Cmp     Byte Ptr [ES:DI], NONOTE
 | 
						|
                JNE     PE_TemplateMixPattern7
 | 
						|
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
 | 
						|
PE_TemplateMixPattern7:
 | 
						|
                Cmp     Byte Ptr [ES:DI+1], 0
 | 
						|
                JNE     PE_TemplateMixPattern8
 | 
						|
 | 
						|
                Mov     AL, [DS:SI+1]
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
PE_TemplateMixPattern8:
 | 
						|
                Cmp     Byte Ptr [ES:DI+2], 0FFh
 | 
						|
                JNE     PE_TemplateMixPattern9
 | 
						|
 | 
						|
                Mov     AL, [DS:SI+2]
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
 | 
						|
PE_TemplateMixPattern9:
 | 
						|
                Cmp     Word Ptr [ES:DI+3], 0
 | 
						|
                JNE     PE_TemplateMixPattern3
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Mov     AX, [DS:SI+3]
 | 
						|
                Mov     [ES:DI+3], AX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
PE_TemplateMixPattern3:
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
PE_TemplateMixPattern4:
 | 
						|
                Inc     BX
 | 
						|
                Loop    PE_TemplateMixPattern2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Add     DI, 320
 | 
						|
                Cmp     DI, BP
 | 
						|
                JAE     PE_TemplateMixPattern5
 | 
						|
 | 
						|
                Loop    PE_TemplateMixPattern1
 | 
						|
 | 
						|
PE_TemplateMixPattern5:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_TemplateMixPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_TemplateMixClipBoard            ; AX = note
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Call    TemplateSetup
 | 
						|
 | 
						|
PE_TemplateMixClipBoard1:
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PE_TemplateMixClipBoard2:
 | 
						|
                Cmp     BX, 64
 | 
						|
                JAE     PE_TemplateMixClipBoard3
 | 
						|
 | 
						|
                Mov     AL, [DS:SI]
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JA      PE_TemplateMixClipBoard6
 | 
						|
 | 
						|
                Add     AL, AH
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JBE     PE_TemplateMixClipBoard6
 | 
						|
 | 
						|
                Mov     AL, NONOTE
 | 
						|
 | 
						|
PE_TemplateMixClipBoard6:
 | 
						|
                Cmp     Byte Ptr [DS:SI], NONOTE
 | 
						|
                JE      PE_TemplateMixClipBoard7
 | 
						|
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
 | 
						|
PE_TemplateMixClipBoard7:
 | 
						|
                Cmp     Byte Ptr [DS:SI+1], 0
 | 
						|
                JE      PE_TemplateMixClipBoard8
 | 
						|
 | 
						|
                Mov     AL, [DS:SI+1]
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
PE_TemplateMixClipBoard8:
 | 
						|
                Cmp     Byte Ptr [DS:SI+2], 0FFh
 | 
						|
                JE      PE_TemplateMixClipBoard9
 | 
						|
 | 
						|
                Mov     AL, [DS:SI+2]
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
 | 
						|
PE_TemplateMixClipBoard9:
 | 
						|
                Cmp     Word Ptr [DS:SI+3], 0
 | 
						|
                JE      PE_TemplateMixClipBoard3
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Mov     AX, [DS:SI+3]
 | 
						|
                Mov     [ES:DI+3], AX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
PE_TemplateMixClipBoard3:
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
PE_TemplateMixClipBoard4:
 | 
						|
                Inc     BX
 | 
						|
                Loop    PE_TemplateMixClipBoard2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Add     DI, 320
 | 
						|
                Cmp     DI, BP
 | 
						|
                JAE     PE_TemplateMixClipBoard5
 | 
						|
 | 
						|
                Loop    PE_TemplateMixClipBoard1
 | 
						|
 | 
						|
PE_TemplateMixClipBoard5:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_TemplateMixClipBoard
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_TemplateNotesOnly
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Call    TemplateSetup
 | 
						|
 | 
						|
PE_TemplateNotesOnly1:
 | 
						|
                Push    BP
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
                Mov     BP, Word Ptr [CS:EditMask]
 | 
						|
 | 
						|
PE_TemplateNotesOnly2:
 | 
						|
                Cmp     BX, 64
 | 
						|
                JAE     PE_TemplateNotesOnly3
 | 
						|
 | 
						|
                Or      BP, 8
 | 
						|
                Mov     AL, [SI]
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JA      PE_TemplateNotesOnly7
 | 
						|
 | 
						|
                Add     AL, AH
 | 
						|
                And     BP, Not 8
 | 
						|
                Cmp     AL, MAXNOTE
 | 
						|
                JA      PE_TemplateNotesOnly3
 | 
						|
 | 
						|
PE_TemplateNotesOnly7:
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
 | 
						|
                Test    BP, 8
 | 
						|
                JNZ     PE_TemplateNotesOnly3
 | 
						|
                Test    BP, 1
 | 
						|
                JZ      PE_TemplateNotesOnly5
 | 
						|
 | 
						|
                Mov     AL, CS:LastInstrument
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
PE_TemplateNotesOnly5:
 | 
						|
                Test    BP, 2
 | 
						|
                JZ      PE_TemplateNotesOnly6
 | 
						|
 | 
						|
                Mov     AL, CS:LastVolume
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
 | 
						|
PE_TemplateNotesOnly6:
 | 
						|
                Test    BP, 4
 | 
						|
                JZ      PE_TemplateNotesOnly3
 | 
						|
 | 
						|
                Mov     AX, [Word Ptr CS:LastCommand]
 | 
						|
                Mov     [ES:DI+3], AX
 | 
						|
 | 
						|
PE_TemplateNotesOnly3:
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
                Inc     BX
 | 
						|
                Loop    PE_TemplateNotesOnly2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Pop     BP
 | 
						|
 | 
						|
                Add     DI, 320
 | 
						|
                Cmp     DI, BP
 | 
						|
                JAE     PE_TemplateNotesOnly4
 | 
						|
 | 
						|
                Loop    PE_TemplateNotesOnly1
 | 
						|
 | 
						|
PE_TemplateNotesOnly4:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_TemplateNotesOnly
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_Template Far                 ; AX = note.
 | 
						|
 | 
						|
                Mov     BX, BlockDataArea
 | 
						|
                Test    BX, BX
 | 
						|
                JZ      PEFunction_NoBlockData
 | 
						|
 | 
						|
                Mov     ES, BX
 | 
						|
                Cmp     Byte Ptr [ES:4], 119
 | 
						|
                JBE     PE_Template3
 | 
						|
 | 
						|
                Mov     DI, Offset O1_TemplateErrorList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_Template3:
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
                Mov     BL, Template
 | 
						|
                Cmp     BL, 2
 | 
						|
                JE      PE_Template1
 | 
						|
                JA      PE_Template2
 | 
						|
 | 
						|
                Call    PE_TemplateOverWrite
 | 
						|
                Jmp     PE_Template4
 | 
						|
 | 
						|
PE_Template1:
 | 
						|
                Call    PE_TemplateMixPattern
 | 
						|
                Jmp     PE_Template4
 | 
						|
 | 
						|
PE_Template2:
 | 
						|
                Cmp     BL, 4
 | 
						|
                JE      PE_Template6
 | 
						|
 | 
						|
                Call    PE_TemplateMixClipBoard
 | 
						|
                Jmp     PE_Template4
 | 
						|
 | 
						|
PE_Template6:
 | 
						|
                Call    PE_TemplateNotesOnly
 | 
						|
 | 
						|
PE_Template4:                           ; Play notes, if clipboard height = 1
 | 
						|
                Mov     CL, [ES:0]
 | 
						|
                Mov     CH, [ES:2]
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Cmp     Word Ptr [ES:2], 1              ; height
 | 
						|
                JNE     PE_TemplateNoPlay
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     DX, 5
 | 
						|
                Mul     DX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     CX, [ES:0]              ; CX = Width
 | 
						|
                Mov     AX, Channel
 | 
						|
                Push    DS
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     DH, 32
 | 
						|
 | 
						|
PE_TemplatePlay:
 | 
						|
                Call    Music_PlayNote
 | 
						|
 | 
						|
                Add     SI, 5
 | 
						|
                Inc     AX
 | 
						|
                Dec     CX
 | 
						|
                JNZ     PE_TemplatePlay
 | 
						|
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
PE_TemplateNoPlay:
 | 
						|
                Cmp     SkipValue, 0
 | 
						|
                JNE     PE_GotoNextInput
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     BX, MaxRow
 | 
						|
                Add     AX, [ES:2]
 | 
						|
                Cmp     AX, BX
 | 
						|
                JBE     PE_Template5
 | 
						|
 | 
						|
                Mov     AX, BX
 | 
						|
 | 
						|
PE_Template5:
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_Template
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_NewNote Far
 | 
						|
 | 
						|
                Mov     AX, 12
 | 
						|
                Mul     BaseOctave
 | 
						|
                Mov     BX, AX
 | 
						|
                LodsW
 | 
						|
                Add     AX, BX
 | 
						|
 | 
						|
                Cmp     AX, MAXNOTE
 | 
						|
                JBE     PE_NewNote5
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_NewNote5:
 | 
						|
                Cmp     Template, 0
 | 
						|
                JNE     PE_Template
 | 
						|
 | 
						|
PE_NewNote4:
 | 
						|
                Mov     AH, EditMask
 | 
						|
 | 
						|
                Mov     SI, DI
 | 
						|
 | 
						|
                Mov     LastNote, AL
 | 
						|
                StosB
 | 
						|
 | 
						|
                Test    AH, 1
 | 
						|
                JZ      PE_NewNote1
 | 
						|
 | 
						|
                Mov     AL, LastInstrument
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
 | 
						|
PE_NewNote1:
 | 
						|
                Test    AH, 2
 | 
						|
                JZ      PE_NewNote2
 | 
						|
 | 
						|
                Mov     AL, LastVolume
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
PE_NewNote2:
 | 
						|
                Test    AH, 4
 | 
						|
                JZ      PE_NewNote3
 | 
						|
 | 
						|
                Mov     AL, LastCommand
 | 
						|
                Mov     AH, LastCommandValue
 | 
						|
                Mov     [ES:DI+2], AX
 | 
						|
 | 
						|
PE_NewNote3:                                    ; Play routine reqd here...
 | 
						|
                Push    DS
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Pop     DS              ; DS = patterndatasegment
 | 
						|
 | 
						|
                Mov     AX, CS:Channel
 | 
						|
                Mov     DH, 32
 | 
						|
                Call    Music_PlayNote
 | 
						|
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
IF CHORDENTRY
 | 
						|
                Cmp     ShiftPressed, 0
 | 
						|
                JE      PE_GotoNextInput
 | 
						|
 | 
						|
                Push    SkipValue
 | 
						|
                Mov     SkipValue, 0
 | 
						|
                Mov     NoteEntered, 1
 | 
						|
 | 
						|
                Call    PE_GotoNextInput
 | 
						|
                Pop     SkipValue
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
ELSE
 | 
						|
                Jmp     PE_GotoNextInput
 | 
						|
ENDIF
 | 
						|
 | 
						|
EndP            PE_NewNote
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Delete Far
 | 
						|
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     MaxRow
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
 | 
						|
                Mov     BP, 1
 | 
						|
                Cmp     Template, 0
 | 
						|
                JE      PEFunction_Delete3
 | 
						|
 | 
						|
                Cmp     PatternCursor, 0
 | 
						|
                JNE     PEFunction_Delete3
 | 
						|
 | 
						|
                Cmp     BlockDataArea, 0
 | 
						|
                JE      PEFunction_Delete3
 | 
						|
 | 
						|
                Mov     FS, BlockDataArea
 | 
						|
                Cmp     Word Ptr [FS:2], 1
 | 
						|
                JNE     PEFunction_Delete3
 | 
						|
 | 
						|
                Mov     BP, [FS:0]
 | 
						|
 | 
						|
PEFunction_Delete3:
 | 
						|
                Mov     CX, BP
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Sub     CH, Byte Ptr Row
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Push    AX DI
 | 
						|
 | 
						|
                Mov     SI, DI
 | 
						|
                Push    ES
 | 
						|
                Pop     DS                      ; DS:SI and ES:DI point to pat
 | 
						|
 | 
						|
                Add     SI, 320
 | 
						|
                Mov     DX, 315
 | 
						|
 | 
						|
PEFunction_Delete1:
 | 
						|
                Cmp     DI, AX
 | 
						|
                JAE     PEFunction_Delete2
 | 
						|
 | 
						|
                Mov     CX, 5
 | 
						|
                Rep     MovsB
 | 
						|
                Add     SI, DX
 | 
						|
                Add     DI, DX
 | 
						|
                Jmp     PEFunction_Delete1
 | 
						|
 | 
						|
PEFunction_Delete2:
 | 
						|
                Mov     AX, NONOTE
 | 
						|
                StosW
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
 | 
						|
                Pop     DI AX
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
                Dec     BP
 | 
						|
                JNZ     PEFunction_Delete3
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Delete
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Insert Far
 | 
						|
 | 
						|
                Mov     BP, 1
 | 
						|
                Cmp     Template, 0
 | 
						|
                JE      PEFunction_Insert3
 | 
						|
 | 
						|
                Cmp     PatternCursor, 0
 | 
						|
                JNE     PEFunction_Insert3
 | 
						|
 | 
						|
                Cmp     BlockDataArea, 0
 | 
						|
                JE      PEFunction_Insert3
 | 
						|
 | 
						|
                Mov     FS, BlockDataArea
 | 
						|
                Cmp     Word Ptr [FS:2], 1
 | 
						|
                JNE     PEFunction_Insert3
 | 
						|
 | 
						|
                Mov     BP, [FS:0]
 | 
						|
 | 
						|
PEFunction_Insert3:
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
                Mov     CX, BP
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Sub     CH, Byte Ptr Row
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     MaxRow
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
                Call    GetPatternOffset
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
                Mov     BX, DI
 | 
						|
                Mov     DX, -325
 | 
						|
 | 
						|
PEFunction_Insert4:
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Mov     DI, SI
 | 
						|
                Sub     SI, 320
 | 
						|
 | 
						|
PEFunction_Insert1:
 | 
						|
                Cmp     DI, BX
 | 
						|
                JBE     PEFunction_Insert2
 | 
						|
 | 
						|
                Mov     CX, 5
 | 
						|
                Rep     MovsB
 | 
						|
                Add     SI, DX
 | 
						|
                Add     DI, DX
 | 
						|
                Jmp     PEFunction_Insert1
 | 
						|
 | 
						|
PEFunction_Insert2:
 | 
						|
                Mov     AX, NONOTE
 | 
						|
                StosW
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Add     SI, 5
 | 
						|
                Add     BX, 5
 | 
						|
 | 
						|
                Dec     BP
 | 
						|
                JNZ     PEFunction_Insert4
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Insert
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_RowDelete Far
 | 
						|
 | 
						|
                Cmp     Byte Ptr LastKeyBoard2, 0D3h
 | 
						|
                JE      PEFunction_RowDelete2
 | 
						|
 | 
						|
                Mov     DI, 20
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_RowDelete2:
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     Row
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     CX, MaxRow
 | 
						|
                Sub     CX, Row
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     CX
 | 
						|
                Mov     CX, AX
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
                Mov     SI, DI
 | 
						|
                Add     SI, 320
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Mov     DX, 64
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
PEFunction_RowDelete1:
 | 
						|
                Mov     CX, 5
 | 
						|
                Mov     SI, Offset EmptyData
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_RowDelete1
 | 
						|
 | 
						|
                Mov     BL, 0
 | 
						|
                Mov     BH, Byte Ptr Row
 | 
						|
                Mov     CL, 64
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Sub     CH, Byte Ptr Row
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_RowDelete
 | 
						|
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_RowInsert Far
 | 
						|
 | 
						|
                Cmp     Byte Ptr LastKeyBoard2, 0D2h
 | 
						|
                JE      PEFunction_RowInsert2
 | 
						|
 | 
						|
                Mov     DI, 19
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_RowInsert2:
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     MaxRow
 | 
						|
                Add     AX, 63*5
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     CX, MaxRow
 | 
						|
                Sub     CX, Row
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     CX
 | 
						|
                Mov     CX, AX
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
                Mov     SI, DI
 | 
						|
                Sub     SI, 320
 | 
						|
                StD
 | 
						|
                Rep     MovsB
 | 
						|
                ClD
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     Row
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     DX, 64
 | 
						|
 | 
						|
 | 
						|
PEFunction_RowInsert1:
 | 
						|
                Mov     CX, 5
 | 
						|
                Mov     SI, Offset EmptyData
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_RowInsert1
 | 
						|
 | 
						|
                Mov     BL, 0
 | 
						|
                Mov     BH, Byte Ptr Row
 | 
						|
                Mov     CL, 64
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Sub     CH, BH
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_RowInsert
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_DecreaseInstrument Far
 | 
						|
 | 
						|
                Sub     LastInstrument, 1
 | 
						|
                AdC     LastInstrument, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_DecreaseInstrument
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_IncreaseInstrument Far
 | 
						|
 | 
						|
                Cmp     LastInstrument, 99
 | 
						|
                AdC     LastInstrument, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_IncreaseInstrument
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_DecreaseOctave Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Sub     BaseOctave, 1
 | 
						|
                AdC     BaseOctave, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_DecreaseOctave
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_IncreaseOctave Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Cmp     BaseOctave, 9
 | 
						|
                AdC     BaseOctave, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_IncreaseOctave
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos2 Far                ; Tens column of ins.
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos2_1
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Mov     AL, LastInstrument
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos2_2
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos2_2
 | 
						|
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PatternCursorPos2_1
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JA      PE_PatternCursorPos2_1
 | 
						|
 | 
						|
                MovZX   AX, Byte Ptr [ES:DI+1]
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                                                        ; AH = units/AL = tens
 | 
						|
                Mov     BL, AH
 | 
						|
                Mov     AL, DL
 | 
						|
                Sub     AL, '0'
 | 
						|
 | 
						|
                Mul     CL
 | 
						|
                Add     AL, BL
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
 | 
						|
                Mov     LastInstrument, AL
 | 
						|
 | 
						|
PE_PatternCursorPos2_2:
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos2_1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos2
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos3 Far                ; Unit column of ins.
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos3_1
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Mov     AL, LastInstrument
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos3_2
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos3_2
 | 
						|
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PatternCursorPos3_1
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JA      PE_PatternCursorPos3_1
 | 
						|
 | 
						|
                MovZX   AX, Byte Ptr [ES:DI+1]
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                                                        ; AH = units/AL = tens
 | 
						|
                Mul     CL
 | 
						|
                Sub     DL, '0'
 | 
						|
                Add     AL, DL
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
                Mov     LastInstrument, AL
 | 
						|
 | 
						|
PE_PatternCursorPos3_2:
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos3_1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos3
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos4 Far                ; Tens column of vol.
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos4_1
 | 
						|
 | 
						|
                Cmp     DX, '`'
 | 
						|
                JE      PE_VolumePan
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Mov     AL, LastVolume
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos4_9
 | 
						|
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos4_9
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
                Mov     AL, [ES:DI+2]
 | 
						|
                Cmp     AL, 255
 | 
						|
                JNE     PE_PatternCursorPos4_2
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
 | 
						|
PE_PatternCursorPos4_2:
 | 
						|
                And     AX, 7Fh
 | 
						|
                Cmp     AL, 65
 | 
						|
                JB      PE_PatternCursorPos4_4
 | 
						|
 | 
						|
                Sub     AL, 65
 | 
						|
 | 
						|
PE_PatternCursorPos4_4:
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PatternCursorPos4_5
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JA      PE_PatternCursorPos4_5
 | 
						|
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                                                        ; AH = units/AL = tens
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AL, DL
 | 
						|
                Sub     AL, '0'
 | 
						|
 | 
						|
                Mul     CL
 | 
						|
                Add     AL, DH
 | 
						|
 | 
						|
                Cmp     AL, 64
 | 
						|
                JBE     PE_PatternCursorPos4_3
 | 
						|
 | 
						|
                Mov     AL, 64
 | 
						|
 | 
						|
PE_PatternCursorPos4_3:
 | 
						|
                Or      AL, VolumePan                   ; Panning flag.
 | 
						|
 | 
						|
PE_PatternCursorPos4_9:
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
                Mov     LastVolume, AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos4_5:
 | 
						|
                Cmp     DX, 'A'
 | 
						|
                JB      PE_PatternCursorPos4_6
 | 
						|
                Cmp     DX, 'H'
 | 
						|
                JA      PE_PatternCursorPos4_6
 | 
						|
                Sub     DX, 'A'
 | 
						|
                Jmp     PE_PatternCursorPos4_7
 | 
						|
 | 
						|
PE_PatternCursorPos4_6:
 | 
						|
                Cmp     DX, 'a'
 | 
						|
                JB      PE_PatternCursorPos4_1
 | 
						|
                Cmp     DX, 'h'
 | 
						|
                JA      PE_PatternCursorPos4_1
 | 
						|
 | 
						|
                Sub     DX, 'a'
 | 
						|
 | 
						|
PE_PatternCursorPos4_7:
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                Mov     CH, AH
 | 
						|
                Mov     AL, DL
 | 
						|
                Mul     CL              ; AL = tens.
 | 
						|
 | 
						|
                Cmp     AL, 60
 | 
						|
                JB      PE_PatternCursorPos4_8
 | 
						|
 | 
						|
                Add     AL, 128-60
 | 
						|
 | 
						|
PE_PatternCursorPos4_8:
 | 
						|
                Add     AL, 65
 | 
						|
                Add     AL, CH
 | 
						|
                Jmp     PE_PatternCursorPos4_9
 | 
						|
 | 
						|
PE_PatternCursorPos4_1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos4
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_VolumePan Far
 | 
						|
 | 
						|
                Xor     VolumePan, 80h
 | 
						|
                Mov     SI, Offset PanningControlSetMsg
 | 
						|
 | 
						|
                JNZ     PE_VolumePan1
 | 
						|
 | 
						|
                Mov     SI, Offset VolumeControlSetMsg
 | 
						|
 | 
						|
PE_VolumePan1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_VolumePan
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos5 Far                ; Unit column of vol.
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos5_1
 | 
						|
 | 
						|
                Cmp     DX, '`'
 | 
						|
                JE      PE_VolumePan
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Mov     AL, LastVolume
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos5_6
 | 
						|
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos5_6
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
                Cmp     DX, '0'
 | 
						|
                JB      PE_PatternCursorPos5_1
 | 
						|
 | 
						|
                Cmp     DX, '9'
 | 
						|
                JA      PE_PatternCursorPos5_1
 | 
						|
 | 
						|
                Mov     AL, [ES:DI+2]
 | 
						|
                Cmp     AL, 255
 | 
						|
                JNE     PE_PatternCursorPos5_2
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
 | 
						|
PE_PatternCursorPos5_2:
 | 
						|
                And     AX, 7Fh
 | 
						|
                Cmp     AL, 65
 | 
						|
                JB      PE_PatternCursorPos5_4
 | 
						|
 | 
						|
                Sub     AL, 65
 | 
						|
 | 
						|
PE_PatternCursorPos5_4:
 | 
						|
                Mov     CL, 10
 | 
						|
                Div     CL
 | 
						|
                                                        ; AH = units/AL = tens
 | 
						|
                Mul     CL
 | 
						|
                Sub     DL, '0'
 | 
						|
                Add     AL, DL
 | 
						|
 | 
						|
                Mov     AH, [ES:DI+2]
 | 
						|
                Cmp     AH, 255
 | 
						|
                JE      PE_PatternCursorPos5_5
 | 
						|
                And     AH, 7Fh
 | 
						|
                Cmp     AH, 64
 | 
						|
                JBE     PE_PatternCursorPos5_5
 | 
						|
 | 
						|
                Add     AL, 65
 | 
						|
                Test    Byte Ptr [ES:DI+2], 80h
 | 
						|
                JZ      PE_PatternCursorPos5_6
 | 
						|
                Add     AL, 128
 | 
						|
                Jmp     PE_PatternCursorPos5_6
 | 
						|
 | 
						|
PE_PatternCursorPos5_5:
 | 
						|
                Cmp     AL, 64
 | 
						|
                JBE     PE_PatternCursorPos5_3
 | 
						|
 | 
						|
                Mov     AL, 64
 | 
						|
 | 
						|
PE_PatternCursorPos5_3:
 | 
						|
                Or      AL, VolumePan
 | 
						|
 | 
						|
PE_PatternCursorPos5_6:
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
                Mov     LastVolume, AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos5_1:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos5
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos6 Far
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos6_2
 | 
						|
 | 
						|
                Mov     AL, LastCommand
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos6_3
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos6_3
 | 
						|
 | 
						|
                Mov     AX, DX
 | 
						|
 | 
						|
                Cmp     AX, 'a'
 | 
						|
                JB      PE_PatternCursorPos6_1
 | 
						|
 | 
						|
                Cmp     AX, 'z'
 | 
						|
                JA      PE_PatternCursorPos6_1
 | 
						|
 | 
						|
                Sub     AX, 32
 | 
						|
 | 
						|
PE_PatternCursorPos6_1:
 | 
						|
                Cmp     AX, 'A'
 | 
						|
                JB      PE_PatternCursorPos6_2
 | 
						|
 | 
						|
                Cmp     AX, 'Z'
 | 
						|
                JA      PE_PatternCursorPos6_2
 | 
						|
 | 
						|
                Sub     AL, '@'
 | 
						|
 | 
						|
PE_PatternCursorPos6_3:
 | 
						|
                Mov     LastCommand, AL
 | 
						|
                Mov     [ES:DI+3], AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     PE_GotoNextInput
 | 
						|
 | 
						|
PE_PatternCursorPos6_2:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos6
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos7 Far
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos7_3
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Xor     AL, AL
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos7_5
 | 
						|
 | 
						|
                Mov     AL, LastCommandValue
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos7_5
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
                Mov     AX, DX
 | 
						|
                Cmp     AX, 'a'
 | 
						|
                JB      PE_PatternCursorPos7_1
 | 
						|
 | 
						|
                Cmp     AX, 'f'
 | 
						|
                JA      PE_PatternCursorPos7_1
 | 
						|
 | 
						|
                Sub     AX, 32
 | 
						|
 | 
						|
PE_PatternCursorPos7_1:
 | 
						|
                Cmp     AX, 'A'
 | 
						|
                JB      PE_PatternCursorPos7_2
 | 
						|
 | 
						|
                Cmp     AX, 'F'
 | 
						|
                JA      PE_PatternCursorPos7_2
 | 
						|
 | 
						|
                Sub     AX, 'A'-10
 | 
						|
                Jmp     PE_PatternCursorPos7_4
 | 
						|
 | 
						|
PE_PatternCursorPos7_2:
 | 
						|
                Cmp     AX, '0'
 | 
						|
                JB      PE_PatternCursorPos7_3
 | 
						|
 | 
						|
                Cmp     AX, '9'
 | 
						|
                JA      PE_PatternCursorPos7_3
 | 
						|
 | 
						|
                Sub     AX, '0'
 | 
						|
 | 
						|
PE_PatternCursorPos7_4:
 | 
						|
                Mov     AH, AL
 | 
						|
                Mov     AL, [ES:DI+4]
 | 
						|
                SHL     AH, 4
 | 
						|
                And     AL, 0Fh
 | 
						|
                Or      AL, AH
 | 
						|
 | 
						|
PE_PatternCursorPos7_5:
 | 
						|
                Mov     [ES:DI+4], AL
 | 
						|
                Mov     LastCommandValue, AL
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos7_3:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos7
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PatternCursorPos8 Far
 | 
						|
 | 
						|
                Test    CL, CL
 | 
						|
                JZ      PE_PatternCursorPos8_3
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput4
 | 
						|
                Xor     AH, AH
 | 
						|
                Cmp     DX, '.'
 | 
						|
                JE      PE_PatternCursorPos8_5
 | 
						|
 | 
						|
                Mov     AH, LastCommandValue
 | 
						|
                Cmp     DX, ' '
 | 
						|
                JE      PE_PatternCursorPos8_5
 | 
						|
 | 
						|
                Mov     BX, Offset PE_GotoNextInput
 | 
						|
                Mov     AX, DX
 | 
						|
                Cmp     AX, 'a'
 | 
						|
                JB      PE_PatternCursorPos8_1
 | 
						|
 | 
						|
                Cmp     AX, 'f'
 | 
						|
                JA      PE_PatternCursorPos8_1
 | 
						|
 | 
						|
                Sub     AX, 32
 | 
						|
 | 
						|
PE_PatternCursorPos8_1:
 | 
						|
                Cmp     AX, 'A'
 | 
						|
                JB      PE_PatternCursorPos8_2
 | 
						|
 | 
						|
                Cmp     AX, 'F'
 | 
						|
                JA      PE_PatternCursorPos8_2
 | 
						|
 | 
						|
                Sub     AX, 'A'-10
 | 
						|
                Jmp     PE_PatternCursorPos8_4
 | 
						|
 | 
						|
PE_PatternCursorPos8_2:
 | 
						|
                Cmp     AX, '0'
 | 
						|
                JB      PE_PatternCursorPos7_3
 | 
						|
 | 
						|
                Cmp     AX, '9'
 | 
						|
                JA      PE_PatternCursorPos7_3
 | 
						|
 | 
						|
                Sub     AX, '0'
 | 
						|
 | 
						|
PE_PatternCursorPos8_4:
 | 
						|
                Mov     AH, [ES:DI+4]
 | 
						|
                And     AH, 0F0h
 | 
						|
                Or      AH, AL
 | 
						|
 | 
						|
PE_PatternCursorPos8_5:
 | 
						|
                Mov     [ES:DI+4], AH
 | 
						|
                Mov     LastCommandValue, AH
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Jmp     BX
 | 
						|
 | 
						|
PE_PatternCursorPos8_3:
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PatternCursorPos8
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SetCommandCursor Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     DI, Offset CommandToValue
 | 
						|
;                Mov     AL, [SI+24]
 | 
						|
;                Mov     CS:CommandToValue, AL
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SetCommandCursor
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_MarkBeginBlock Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
 | 
						|
PEFunction_MarkBeginBlockChain:
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JNE     PEFunction_MarkBeginBlock1
 | 
						|
 | 
						|
                Mov     BlockMark, 1
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
                Mov     BlockRight, AX
 | 
						|
                Mov     BlockTop, BX
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
                Jmp     PEFunction_MarkBeginBlock5
 | 
						|
 | 
						|
PEFunction_MarkBeginBlock1:
 | 
						|
                Cmp     AX, BlockRight
 | 
						|
                JBE     PEFunction_MarkBeginBlock2
 | 
						|
 | 
						|
                Mov     CX, BlockRight
 | 
						|
                Mov     BlockRight, AX
 | 
						|
                Mov     BlockLeft, CX
 | 
						|
                Jmp     PEFunction_MarkBeginBlock3
 | 
						|
 | 
						|
PEFunction_MarkBeginBlock2:
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
 | 
						|
PEFunction_MarkBeginBlock3:
 | 
						|
                Cmp     BX, BlockBottom
 | 
						|
                JBE     PEFunction_MarkBeginBlock4
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
                Mov     BlockTop, CX
 | 
						|
                Jmp     PEFunction_MarkBeginBlock5
 | 
						|
 | 
						|
PEFunction_MarkBeginBlock4:
 | 
						|
                Mov     BlockTop, BX
 | 
						|
 | 
						|
PEFunction_MarkBeginBlock5:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_MarkBeginBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_MarkEndBlock Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
 | 
						|
PEFunction_MarkEndChain:
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JNE     PEFunction_MarkEndBlock1
 | 
						|
 | 
						|
                Mov     BlockMark, 1
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
                Mov     BlockRight, AX
 | 
						|
                Mov     BlockTop, BX
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
                Jmp     PEFunction_MarkEndBlock5
 | 
						|
 | 
						|
PEFunction_MarkEndBlock1:
 | 
						|
                Cmp     AX, BlockLeft
 | 
						|
                JAE     PEFunction_MarkEndBlock2
 | 
						|
 | 
						|
                Mov     CX, BlockLeft
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
                Mov     BlockRight, CX
 | 
						|
                Jmp     PEFunction_MarkEndBlock3
 | 
						|
 | 
						|
PEFunction_MarkEndBlock2:
 | 
						|
                Mov     BlockRight, AX
 | 
						|
 | 
						|
PEFunction_MarkEndBlock3:
 | 
						|
                Cmp     BX, BlockTop
 | 
						|
                JAE     PEFunction_MarkEndBlock4
 | 
						|
 | 
						|
                Mov     CX, BlockTop
 | 
						|
                Mov     BlockTop, BX
 | 
						|
                Mov     BlockBottom, CX
 | 
						|
                Jmp     PEFunction_MarkEndBlock5
 | 
						|
 | 
						|
PEFunction_MarkEndBlock4:
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
 | 
						|
PEFunction_MarkEndBlock5:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_MarkEndBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltD Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
                MovZX   DX, RowHiLight2
 | 
						|
 | 
						|
                Cmp     Word Ptr [LastKeyBoard2+2], 2000h
 | 
						|
                JNE     PEFunction_AltD1
 | 
						|
                                        ; OK, at least 1 Alt-D already..
 | 
						|
                                        ; Now double length...
 | 
						|
                Mov     DX, BlockBottom
 | 
						|
                Sub     DX, BlockTop
 | 
						|
                Inc     DX
 | 
						|
                Add     DX, DX
 | 
						|
                Add     DX, BlockTop
 | 
						|
                Dec     DX
 | 
						|
                Cmp     DX, MaxRow
 | 
						|
                JBE     PEFunction_AltD3
 | 
						|
 | 
						|
                Mov     DX, MaxRow
 | 
						|
 | 
						|
PEFunction_AltD3:
 | 
						|
                Mov     BlockBottom, DX
 | 
						|
                Jmp     PEFunction_AltD4
 | 
						|
 | 
						|
PEFunction_AltD1:
 | 
						|
                Dec     DX
 | 
						|
                Mov     BlockTop, BX
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
                Mov     BlockRight, AX
 | 
						|
 | 
						|
                Add     BX, DX
 | 
						|
                Cmp     BX, MaxRow
 | 
						|
                JBE     PEFunction_AltD2
 | 
						|
 | 
						|
                Mov     BX, MaxRow
 | 
						|
 | 
						|
PEFunction_AltD2:
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
                Mov     BlockMark, 1
 | 
						|
 | 
						|
PEFunction_AltD4:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltD
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltS Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1F00h
 | 
						|
                JE      PEFunction_AltS5
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     DI, 12
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_AltS5:
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
 | 
						|
                Mov     SI, AX
 | 
						|
                Inc     SI
 | 
						|
 | 
						|
                Mov     AH, LastInstrument
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_AltS1:
 | 
						|
                Push    SI
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_AltS2:
 | 
						|
                Cmp     Byte Ptr [SI], 0
 | 
						|
                JE      PEFunction_AltS3
 | 
						|
 | 
						|
                Mov     [SI], AH
 | 
						|
 | 
						|
PEFunction_AltS3:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PEFunction_AltS2
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Pop     SI
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_AltS1
 | 
						|
 | 
						|
PEFunction_AltS4:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltS
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEGetVolume             ; Given DL = note, DH = instrument
 | 
						|
                                        ; Returns DL, Carry if none
 | 
						|
 | 
						|
                Push    AX BX DI DS
 | 
						|
 | 
						|
                Cmp     DL, MAXNOTE
 | 
						|
                JA      PEGetVolumeError
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
 | 
						|
                Mov     BL, DH
 | 
						|
                And     BX, 0FFh
 | 
						|
                JZ      PEGetVolumeError
 | 
						|
                Add     BX, BX
 | 
						|
 | 
						|
                Test    Byte Ptr [DS:2Ch], 4
 | 
						|
                JZ      PEGetVolumeSample
 | 
						|
 | 
						|
                Mov     DI, DX
 | 
						|
                Mov     BX, [DS:64710+BX]
 | 
						|
                And     DI, 0FFh        ; Note
 | 
						|
                Add     DI, DI
 | 
						|
                Mov     BX, [DS:BX+DI+41h]
 | 
						|
                And     BX, 0FFh        ; BX = sample
 | 
						|
                JZ      PEGetVolumeError
 | 
						|
                Add     BX, BX
 | 
						|
 | 
						|
PEGetVolumeSample:
 | 
						|
                Mov     BX, [DS:64910+BX]
 | 
						|
                Mov     DL, [BX+13h]
 | 
						|
 | 
						|
                DB      85h     ;
 | 
						|
PEGetVolumeError:               ;
 | 
						|
                StC             ;
 | 
						|
 | 
						|
PEGetVolumeEnd:
 | 
						|
                Pop     DS DI BX AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEGetVolume
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltK Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 2500h
 | 
						|
                JNE     PEFunction_AltK7
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard3+2], 2500h
 | 
						|
                JE      PEFunction_AltK11
 | 
						|
 | 
						|
                Mov     DI, 8
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                                        ; OK.. wipe volume data...
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
;                Add     DI, 2
 | 
						|
                ScasW
 | 
						|
 | 
						|
                Mov     AL, 0FFh
 | 
						|
 | 
						|
PEFunction_AltK12:
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_AltK13:
 | 
						|
                StosB
 | 
						|
                Add     DI, 4
 | 
						|
                Loop    PEFunction_AltK13
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 320
 | 
						|
                Loop    PEFunction_AltK12
 | 
						|
 | 
						|
PEFunction_AltK11:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_AltK7:
 | 
						|
                Mov     DI, 7
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockBottom
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                JZ      PEFunction_AltK2        ; CX contains number of rows
 | 
						|
 | 
						|
;                Add     SI, 2
 | 
						|
;                Add     DI, 2
 | 
						|
                LodsW
 | 
						|
                ScasW
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_AltK1:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
; AltK6 = don't slide.
 | 
						|
 | 
						|
                MovZX   AX, Byte Ptr [DI]
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     PEFunction_KVolume1
 | 
						|
 | 
						|
                Mov     DX, [DI-2]
 | 
						|
                Call    PEGetVolume
 | 
						|
                JC      PEFunction_AltK6
 | 
						|
                MovZX   AX, DL
 | 
						|
 | 
						|
PEFunction_KVolume1:
 | 
						|
                MovZX   BX, Byte Ptr [SI]
 | 
						|
                Cmp     BL, 0FFh
 | 
						|
                JNE     PEFunction_KVolume2
 | 
						|
 | 
						|
                Mov     DX, [SI-2]
 | 
						|
                Call    PEGetVolume
 | 
						|
                JC      PEFunction_AltK6
 | 
						|
                MovZX   BX, DL
 | 
						|
 | 
						|
PEFunction_KVolume2:                            ; Now BOTH AL and BL are pan
 | 
						|
                                                ; Or BOTH AL and BL are volume
 | 
						|
                Mov     DL, AL
 | 
						|
                Mov     DH, BL
 | 
						|
 | 
						|
                And     DX, 7F7Fh
 | 
						|
                Cmp     DL, 64
 | 
						|
                JA      PEFunction_AltK6
 | 
						|
                Cmp     DH, 64
 | 
						|
                JA      PEFunction_AltK6
 | 
						|
 | 
						|
                Mov     DL, AL
 | 
						|
                Mov     DH, BL
 | 
						|
 | 
						|
                And     DX, 8080h
 | 
						|
                JZ      PEFunction_AltK14
 | 
						|
                Cmp     DX, 8080h
 | 
						|
                JNE     PEFunction_AltK6
 | 
						|
 | 
						|
PEFunction_AltK14:
 | 
						|
                Mov     [DI], AL
 | 
						|
                Mov     [SI], BL
 | 
						|
 | 
						|
                Sub     AX, BX                  ; AX = change.
 | 
						|
                JS      PEFunction_AltK4
 | 
						|
 | 
						|
                Div     CL
 | 
						|
                Mov     BH, AL
 | 
						|
                Xor     AL, AL
 | 
						|
                Div     CL
 | 
						|
                Mov     BL, AL
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Jmp     PEFunction_AltK5
 | 
						|
 | 
						|
 | 
						|
PEFunction_AltK4:
 | 
						|
                Neg     AX
 | 
						|
                Div     CL
 | 
						|
                Mov     BH, AL
 | 
						|
                Xor     AL, AL
 | 
						|
                Div     CL
 | 
						|
                Mov     BL, AL
 | 
						|
                Neg     BX
 | 
						|
 | 
						|
                Mov     AL, 0FFh
 | 
						|
 | 
						|
PEFunction_AltK5:
 | 
						|
                Mov     AH, [SI]
 | 
						|
 | 
						|
PEFunction_AltK3:
 | 
						|
                Mov     [SI], AH
 | 
						|
 | 
						|
                Add     AX, BX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_AltK3
 | 
						|
 | 
						|
PEFunction_AltK6:
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_AltK1
 | 
						|
 | 
						|
PEFunction_AltK2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltK
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltL Far
 | 
						|
 | 
						|
                Call    Music_GetLastChannel    ; AX = max channel.
 | 
						|
                Mov     BX, MaxRow
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 2600h
 | 
						|
                JNE     PEFunction_AltL1
 | 
						|
 | 
						|
                Xor     CX, CX
 | 
						|
                Cmp     CX, BlockTop
 | 
						|
                JNE     PEFunction_AltL2
 | 
						|
                Cmp     CX, BlockLeft
 | 
						|
                JNE     PEFunction_AltL2
 | 
						|
                Cmp     BlockRight, AX
 | 
						|
                JNE     PEFunction_AltL2
 | 
						|
                Cmp     BX, BlockBottom
 | 
						|
                JNE     PEFunction_AltL2
 | 
						|
                Jmp     PEFunction_AltL1
 | 
						|
 | 
						|
PEFunction_AltL2:
 | 
						|
                Xor     CX, CX
 | 
						|
                Mov     BlockTop, CX
 | 
						|
                Mov     BlockLeft, CX
 | 
						|
                Mov     BlockRight, AX
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
                Jmp     PEFunction_AltL3
 | 
						|
 | 
						|
PEFunction_AltL1:
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BlockTop, 0
 | 
						|
                Mov     BlockLeft, AX
 | 
						|
                Mov     BlockRight, AX
 | 
						|
                Mov     BlockBottom, BX
 | 
						|
 | 
						|
PEFunction_AltL3:
 | 
						|
                Mov     BlockMark, 1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltL
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_WipeBlock Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 2C00h
 | 
						|
                JE      PEFunction_WipeBlock1
 | 
						|
 | 
						|
                Mov     DI, 18
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Cmp     Template, 0
 | 
						|
                JNE     PEFunction_WipeBlock4
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Call    PEFunction_BlockCopy
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
PEFunction_WipeBlock4:
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
 | 
						|
PEFunction_WipeBlock2:
 | 
						|
                Push    DI
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_WipeBlock3:
 | 
						|
                Mov     AX, NONOTE
 | 
						|
                StosW
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
                Loop    PEFunction_WipeBlock3
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 320
 | 
						|
                Loop    PEFunction_WipeBlock2
 | 
						|
 | 
						|
PEFunction_WipeBlock1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_WipeBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_RollUp Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     BP, BlockBottom
 | 
						|
                Sub     BP, BlockTop
 | 
						|
                JZ      PEFunction_RollUpEnd
 | 
						|
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     DX
 | 
						|
 | 
						|
                Mov     CX, AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     DI, Offset TempData
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Rep     MovsB
 | 
						|
                Pop     DI
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
                LEA     SI, [DI+320]
 | 
						|
 | 
						|
PEFunction_RollUp1:
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Add     SI, 320
 | 
						|
                Add     DI, 320
 | 
						|
 | 
						|
                Dec     BP
 | 
						|
                JNZ     PEFunction_RollUp1
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                Mov     SI, Offset TempData
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
PEFunction_RollUpEnd:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_RollUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_RollDown Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockBottom
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     BP, BlockBottom
 | 
						|
                Sub     BP, BlockTop
 | 
						|
                JZ      PEFunction_RollDownEnd
 | 
						|
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     DX
 | 
						|
 | 
						|
                Mov     CX, AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     DI, Offset TempData
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Rep     MovsB
 | 
						|
                Pop     DI
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
                LEA     SI, [DI-320]
 | 
						|
 | 
						|
PEFunction_RollDown1:
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Sub     SI, 320
 | 
						|
                Sub     DI, 320
 | 
						|
 | 
						|
                Dec     BP
 | 
						|
                JNZ     PEFunction_RollDown1
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                Mov     SI, Offset TempData
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
PEFunction_RollDownEnd:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_RollDown
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockHalve Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Mov     DI, 5
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
                Mov     BL, Byte Ptr BlockLeft
 | 
						|
                Mov     BH, Byte Ptr BlockTop
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Mov     CL, Byte Ptr BlockRight
 | 
						|
                Sub     CX, BX
 | 
						|
                Add     CX, 101h
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     BlockTop
 | 
						|
                Mov     BX, AX
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     BlockLeft
 | 
						|
                Add     BX, AX
 | 
						|
                Mov     SI, BX
 | 
						|
                Mov     DI, BX
 | 
						|
 | 
						|
                Mov     DX, BlockBottom
 | 
						|
                Sub     DX, BlockTop
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockRight
 | 
						|
                Sub     CX, BlockLeft
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     AX, BlockTop
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
 | 
						|
PEFunction_BlockHalve1:
 | 
						|
                Push    AX
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Cmp     AX, CS:MaxRow
 | 
						|
                JBE     PEFunction_BlockHalve3
 | 
						|
 | 
						|
PEFunction_BlockHalve2:
 | 
						|
                Mov     AX, NONOTE
 | 
						|
                StosW
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
                Loop    PEFunction_BlockHalve2
 | 
						|
 | 
						|
                Jmp     PEFunction_BlockHalve4
 | 
						|
 | 
						|
PEFunction_BlockHalve3:
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     CX
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
PEFunction_BlockHalve4:
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Pop     AX
 | 
						|
                Add     SI, 640
 | 
						|
                Add     DI, 320
 | 
						|
                Add     AX, 2
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_BlockHalve1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockHalve
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockDouble Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Mov     DI, 4
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
                Mov     BL, Byte Ptr BlockLeft
 | 
						|
                Mov     BH, Byte Ptr BlockTop
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Mov     CL, Byte Ptr BlockRight
 | 
						|
                Sub     CX, BX
 | 
						|
                Add     CX, 101h
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Mul     CX
 | 
						|
                Mov     SI, AX
 | 
						|
                Add     CX, CX                  ; CX = 2*number of rows+2*top
 | 
						|
                Sub     CX, BlockTop            ; CX = 2*number of rows+top
 | 
						|
                Inc     CX
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     CX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Push    CX                      ; CX = output row.
 | 
						|
 | 
						|
                Mov     CX, BlockRight
 | 
						|
                Sub     CX, BlockLeft
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     BlockLeft
 | 
						|
                Add     SI, AX
 | 
						|
                Add     DI, AX
 | 
						|
 | 
						|
                Pop     DX                      ; DX = output row
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
 | 
						|
PEFunction_BlockDouble1:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Cmp     DX, CS:MaxRow
 | 
						|
                JA      PEFunction_BlockDouble2
 | 
						|
                                                ; Empty stuff now..
 | 
						|
                Push    CX
 | 
						|
 | 
						|
PEFunction_BlockDouble4:
 | 
						|
                Mov     AX, NONOTE
 | 
						|
                StosW
 | 
						|
                Mov     AL, 0FFh
 | 
						|
                StosB
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
                Loop    PEFunction_BlockDouble4
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
PEFunction_BlockDouble2:
 | 
						|
                Pop     DI
 | 
						|
                Sub     DI, 320
 | 
						|
                Dec     DX
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
                Cmp     DX, CS:MaxRow
 | 
						|
                JA      PEFunction_BlockDouble3
 | 
						|
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     CX
 | 
						|
                Mov     CX, AX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
PEFunction_BlockDouble3:
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Sub     SI, 320
 | 
						|
                Sub     DI, 320
 | 
						|
 | 
						|
                Cmp     DX, CS:BlockTop
 | 
						|
                JBE     PEFunction_BlockDouble5
 | 
						|
 | 
						|
                Dec     DX
 | 
						|
                Jmp     PEFunction_BlockDouble1
 | 
						|
 | 
						|
PEFunction_BlockDouble5:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockDouble
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockSwap Far                ; Alt-H... sorry.
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                                                        ; Check that boundaries
 | 
						|
                                                        ;  are OK..
 | 
						|
 | 
						|
                                        ; 1. Check that vertices of new block
 | 
						|
                                        ;    don't lie in old block.
 | 
						|
                                        ; 2. Check that 2nd block < channels
 | 
						|
                                        ;    and 2nd block < maxrow.
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
                Call    Near Ptr PEFunction_BlockSwap1
 | 
						|
                Add     AX, BlockRight
 | 
						|
                Sub     AX, BlockLeft
 | 
						|
                Call    Near Ptr PEFunction_BlockSwap1
 | 
						|
                Add     BX, BlockBottom
 | 
						|
                Sub     BX, BlockTop
 | 
						|
                Call    Near Ptr PEFunction_BlockSwap1
 | 
						|
                Mov     AX, Channel
 | 
						|
                Call    Near Ptr PEFunction_BlockSwap1
 | 
						|
                Jmp     PEFunction_BlockSwap3
 | 
						|
 | 
						|
PEFunction_BlockSwap1:
 | 
						|
                Cmp     AX, BlockLeft
 | 
						|
                JB      PEFunction_BlockSwap2
 | 
						|
                Cmp     AX, BlockRight
 | 
						|
                JA      PEFunction_BlockSwap2
 | 
						|
 | 
						|
                Cmp     BX, BlockTop
 | 
						|
                JB      PEFunction_BlockSwap2
 | 
						|
                Cmp     BX, BlockBottom
 | 
						|
                JA      PEFunction_BlockSwap2
 | 
						|
 | 
						|
                                        ; Uh oh... cursor is in block.
 | 
						|
 | 
						|
                Mov     DI, Offset O1_OverlapBlockList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Pop     AX              ; Clear stack
 | 
						|
                Mov     AX, 1
 | 
						|
                RetF
 | 
						|
 | 
						|
PEFunction_BlockSwap2:
 | 
						|
                RetN
 | 
						|
 | 
						|
PEFunction_BlockSwap3:
 | 
						|
                Mov     DI, 17
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     BL, Byte Ptr Channel
 | 
						|
                Mov     BH, Byte Ptr Row
 | 
						|
                Mov     CL, Byte Ptr BlockRight
 | 
						|
                Mov     CH, Byte Ptr BlockBottom
 | 
						|
                Sub     CL, Byte Ptr BlockLeft
 | 
						|
                Sub     CH, Byte Ptr BlockTop
 | 
						|
                Add     CX, 101h
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     BX, Row
 | 
						|
 | 
						|
                Mov     CX, BlockRight
 | 
						|
                Sub     CX, BlockLeft
 | 
						|
                Inc     CX                      ; CX = block width.
 | 
						|
                Add     AX, CX
 | 
						|
                Cmp     AX, 64
 | 
						|
                JA      PEFunction_BlockSwap4
 | 
						|
 | 
						|
                Mov     DX, BlockBottom
 | 
						|
                Sub     DX, BlockTop            ; DX = block height-1.
 | 
						|
                Add     BX, DX
 | 
						|
                Cmp     BX, MaxRow
 | 
						|
                JBE     PEFunction_BlockSwap5
 | 
						|
 | 
						|
PEFunction_BlockSwap4:
 | 
						|
                Mov     DI, Offset O1_SwapOutOfRangeList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_BlockSwap5:                                  ; Do swap.
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     BlockTop
 | 
						|
                Mov     BX, AX
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     BlockLeft
 | 
						|
                Add     BX, AX
 | 
						|
                Mov     SI, BX                          ; SI = "marked" block
 | 
						|
 | 
						|
                Call    GetPatternOffset                ; DI = implied block
 | 
						|
;                Mov     AX, 320
 | 
						|
;                Mul     Row
 | 
						|
;                Mov     BX, AX
 | 
						|
;                Mov     AX, 5
 | 
						|
;                Mul     Channel
 | 
						|
;                Add     BX, AX
 | 
						|
;                Mov     SI, BX                          ; SI = implied block.
 | 
						|
 | 
						|
                Mov     CX, BlockRight
 | 
						|
                Sub     CX, BlockLeft
 | 
						|
                Inc     CX                              ; CX = width of block.
 | 
						|
                Mov     AX, 5
 | 
						|
                Mul     CX
 | 
						|
                Mov     CX, AX
 | 
						|
 | 
						|
                Mov     DX, BlockBottom
 | 
						|
                Sub     DX, BlockTop
 | 
						|
                Inc     DX                              ; DX = height of block
 | 
						|
 | 
						|
;                Mov     ES, PatternDataArea
 | 
						|
                Push    ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
PEFunction_BlockSwap6:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
PEFunction_BlockSwap7:
 | 
						|
                Mov     AL, [DS:DI]
 | 
						|
                MovsB
 | 
						|
                Mov     [DS:SI-1], AL
 | 
						|
                Loop    PEFunction_BlockSwap7
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 320
 | 
						|
                Add     DI, 320
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_BlockSwap6
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockSwap
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockCopy Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Mov     AX, BlockDataArea
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_BlockCopy1
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     AH, 49h
 | 
						|
                Int     21h
 | 
						|
 | 
						|
PEFunction_BlockCopy1:
 | 
						|
                Mov     AX, BlockBottom
 | 
						|
                Sub     AX, BlockTop
 | 
						|
                Inc     AX
 | 
						|
 | 
						|
                Mov     BX, BlockRight
 | 
						|
                Sub     BX, BlockLeft
 | 
						|
                Inc     BX
 | 
						|
                Mul     BX
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                                                ; AX = size of block
 | 
						|
                Mov     BX, AX
 | 
						|
                Add     BX, 19                  ; + space for width/height
 | 
						|
                ShR     BX, 4
 | 
						|
                Mov     AH, 48h
 | 
						|
                Int     21h
 | 
						|
                JNC     PEFunction_BlockCopy2
 | 
						|
 | 
						|
                Jmp     PEFunction_OutOfMemoryMessage
 | 
						|
 | 
						|
PEFunction_BlockCopy2:
 | 
						|
                Mov     BlockDataArea, AX
 | 
						|
                Xor     DI, DI
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
                Mov     AX, BlockRight
 | 
						|
                Sub     AX, BlockLeft
 | 
						|
                Inc     AX
 | 
						|
                StosW
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     DX, AX                  ; DX = width*5
 | 
						|
 | 
						|
                Mov     AX, BlockBottom
 | 
						|
                Sub     AX, BlockTop
 | 
						|
                Inc     AX
 | 
						|
                StosW
 | 
						|
                Mov     CX, AX                  ; CX = height
 | 
						|
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_BlockCopy3:
 | 
						|
                Push    SI
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Pop     SI
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_BlockCopy3
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockCopy
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_NoBlockMarkedMessage Far
 | 
						|
 | 
						|
                Mov     DI, Offset O1_NoBlockMarkedList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_OutOfMemoryMessage Far
 | 
						|
 | 
						|
                Call    PE_FillHeader
 | 
						|
                Call    S_SaveScreen
 | 
						|
 | 
						|
                Mov     DI, Offset O1_OutOfMemoryList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Call    S_RestoreScreen
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_OutOfMemoryMessage
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_NoBlockData Far
 | 
						|
 | 
						|
                Mov     DI, Offset O1_NoBlockDataList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_NoBlockData
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockOverWrite Far
 | 
						|
 | 
						|
                Mov     AX, BlockDataArea
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_NoBlockData
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1800h
 | 
						|
                JE      PEFunction_BlockOverWrite5
 | 
						|
 | 
						|
                Mov     DI, 10
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     CL, [ES:0]
 | 
						|
                Mov     CH, [ES:2]
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
PEFunction_BlockOverWrite6:
 | 
						|
 | 
						|
                Mov     BP, MaxRow
 | 
						|
                Mov     BX, Row
 | 
						|
                Mov     CX, Channel
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
 | 
						|
                Mov     DS, AX
 | 
						|
 | 
						|
                Mov     SI, 4                   ; DS:SI points to block
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
                Mov     DX, [DS:0]
 | 
						|
                Mov     CX, [DS:2]              ; DX = width, CX = height
 | 
						|
 | 
						|
PEFunction_BlockOverWrite1:
 | 
						|
                Push    AX
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
PEFunction_BlockOverWrite2:
 | 
						|
                Cmp     AX, 63
 | 
						|
                JA      PEFunction_BlockOverWrite3
 | 
						|
 | 
						|
                Mov     CX, 5
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Jmp     PEFunction_BlockOverWrite4
 | 
						|
 | 
						|
PEFunction_BlockOverWrite3:
 | 
						|
                Add     SI, 5
 | 
						|
 | 
						|
PEFunction_BlockOverWrite4:
 | 
						|
                Inc     AX                      ; AX = channel
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_BlockOverWrite2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Pop     AX
 | 
						|
                Add     DI, 320
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, BP
 | 
						|
                JA      PEFunction_BlockOverWrite5
 | 
						|
 | 
						|
                Loop    PEFunction_BlockOverWrite1
 | 
						|
 | 
						|
PEFunction_BlockOverWrite5:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockOverWrite
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockPaste Far
 | 
						|
 | 
						|
                Mov     AX, BlockDataArea
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_NoBlockData
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1900h
 | 
						|
                JE      PEFunction_BlockPaste6
 | 
						|
 | 
						|
                Mov     DI, 11
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_BlockPaste6:
 | 
						|
                Push    DS
 | 
						|
                Mov     BP, MaxRow
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
                Mov     CH, Byte Ptr MaxRow
 | 
						|
                Sub     CH, Byte Ptr Row
 | 
						|
                Inc     CH
 | 
						|
                Mov     CL, [ES:0]
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     BX, [ES:0]              ; width
 | 
						|
                Mov     CX, [ES:2]              ; height
 | 
						|
 | 
						|
; Condition:
 | 
						|
;  If Row == 0 && Channel == 0 && height > MaxRow && width > 1, then set maxrow = height
 | 
						|
                Cmp     CX, BP
 | 
						|
                JB      PEFunction_BlockPaste7
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Or      AX, Row
 | 
						|
                JNZ     PEFunction_BlockPaste7
 | 
						|
 | 
						|
                Cmp     BX, 1
 | 
						|
                JBE     PEFunction_BlockPaste7
 | 
						|
 | 
						|
                Mov     BP, CX
 | 
						|
                Dec     BP
 | 
						|
                Mov     MaxRow, BP
 | 
						|
 | 
						|
PEFunction_BlockPaste7:
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BP
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     DX, 5
 | 
						|
                Mul     DX
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     CX
 | 
						|
                Add     DI, AX                  ; DI has destination...
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Push    DS
 | 
						|
                Pop     ES
 | 
						|
 | 
						|
PEFunction_BlockPaste1:
 | 
						|
                Push    AX
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     AX, CS:Row
 | 
						|
                Add     AX, CX
 | 
						|
                Mov     DX, BP
 | 
						|
                Add     DX, CX
 | 
						|
 | 
						|
PEFunction_BlockPaste5:
 | 
						|
                Cmp     DX, BP
 | 
						|
                JA      PEFunction_BlockPaste3
 | 
						|
 | 
						|
                Mov     CX, 5
 | 
						|
                Rep     MovsB
 | 
						|
                Sub     SI, 325
 | 
						|
                Sub     DI, 325
 | 
						|
 | 
						|
                Jmp     PEFunction_BlockPaste4
 | 
						|
 | 
						|
PEFunction_BlockPaste3:
 | 
						|
                Sub     SI, 320
 | 
						|
                Sub     DI, 320
 | 
						|
 | 
						|
PEFunction_BlockPaste4:
 | 
						|
                Dec     DX
 | 
						|
                Cmp     DX, AX
 | 
						|
                JAE     PEFunction_BlockPaste5
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     CX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, 63
 | 
						|
                JA      PEFunction_BlockPaste2
 | 
						|
 | 
						|
                Dec     BX
 | 
						|
                JNZ     PEFunction_BlockPaste1
 | 
						|
 | 
						|
PEFunction_BlockPaste2:
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, BlockDataArea
 | 
						|
                Jmp     PEFunction_BlockOverWrite6
 | 
						|
 | 
						|
EndP            PEFunction_BlockPaste
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SecondBlockMix Far
 | 
						|
 | 
						|
                Mov     BP, MaxRow
 | 
						|
                Mov     BX, Row
 | 
						|
                Mov     CX, Channel
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
 | 
						|
                Mov     DS, BlockDataArea
 | 
						|
 | 
						|
                Mov     SI, 4                   ; DS:SI points to block
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
 | 
						|
                Mov     CL, [DS:0]
 | 
						|
                Mov     CH, [DS:2]
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     DX, [DS:0]
 | 
						|
                Mov     CX, [DS:2]              ; DX = width, CX = height
 | 
						|
 | 
						|
PEFunction_SecondBlockMix1:
 | 
						|
                Push    AX
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
PEFunction_SecondBlockMix2:
 | 
						|
                Cmp     AX, 63
 | 
						|
                JA      PEFunction_SecondBlockMix3
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:DI], NONOTE        ; Note
 | 
						|
                JNE     PEFunction_SecondBlockMix7
 | 
						|
 | 
						|
                Mov     CL, [DS:SI]
 | 
						|
                Mov     [ES:DI], CL
 | 
						|
 | 
						|
PEFunction_SecondBlockMix7:
 | 
						|
                Inc     SI
 | 
						|
                Inc     DI
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:DI], 0             ; Instrument
 | 
						|
                JNE     PEFunction_SecondBlockMix8
 | 
						|
 | 
						|
                Mov     CL, [DS:SI]
 | 
						|
                Mov     [ES:DI], CL
 | 
						|
 | 
						|
PEFunction_SecondBlockMix8:
 | 
						|
                Inc     SI
 | 
						|
                Inc     DI
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:DI], 0FFh          ; Volume
 | 
						|
                JNE     PEFunction_SecondBlockMix9
 | 
						|
 | 
						|
                Mov     CL, [DS:SI]
 | 
						|
                Mov     [ES:DI], CL
 | 
						|
 | 
						|
PEFunction_SecondBlockMix9:
 | 
						|
                Inc     SI
 | 
						|
                Inc     DI
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:DI], 0             ; Command
 | 
						|
                JNE     PEFunction_SecondBlockMix10
 | 
						|
 | 
						|
                Mov     CL, [DS:SI]
 | 
						|
                Mov     [ES:DI], CL
 | 
						|
 | 
						|
PEFunction_SecondBlockMix10:
 | 
						|
                Inc     SI
 | 
						|
                Inc     DI
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:DI], 0             ; Commandvalue
 | 
						|
                JNE     PEFunction_SecondBlockMix11
 | 
						|
 | 
						|
                Mov     CL, [DS:SI]
 | 
						|
                Mov     [ES:DI], CL
 | 
						|
 | 
						|
PEFunction_SecondBlockMix11:
 | 
						|
                Inc     SI
 | 
						|
                Inc     DI
 | 
						|
                Jmp     PEFunction_SecondBlockMix4
 | 
						|
 | 
						|
PEFunction_SecondBlockMix3:
 | 
						|
                Add     SI, 5
 | 
						|
 | 
						|
PEFunction_SecondBlockMix4:
 | 
						|
                Inc     AX                      ; AX = channel
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_SecondBlockMix2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Pop     AX
 | 
						|
                Add     DI, 320
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, BP
 | 
						|
                JA      PEFunction_SecondBlockMix5
 | 
						|
 | 
						|
                Loop    PEFunction_SecondBlockMix1
 | 
						|
 | 
						|
PEFunction_SecondBlockMix5:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SecondBlockMix
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockMix Far
 | 
						|
 | 
						|
                Cmp     BlockDataArea, 0
 | 
						|
                JE      PEFunction_NoBlockData
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 3200h
 | 
						|
                JNE     PEFunction_BlockMix1
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyboard3+2], 3200h
 | 
						|
                JE      PEFunction_BlockMix6
 | 
						|
 | 
						|
                Jmp     PEFunction_SecondBlockMix
 | 
						|
 | 
						|
PEFunction_BlockMix1:
 | 
						|
                Mov     DI, 9
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     BP, MaxRow
 | 
						|
                Mov     BX, Row
 | 
						|
                Mov     CX, Channel
 | 
						|
 | 
						|
                Call    GetPatternOffset
 | 
						|
 | 
						|
                Mov     DS, BlockDataArea
 | 
						|
                Mov     SI, 4                   ; DS:SI points to block
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
 | 
						|
                Mov     CL, [DS:0]
 | 
						|
                Mov     CH, [DS:2]
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     DX, [DS:0]
 | 
						|
                Mov     CX, [DS:2]              ; DX = width, CX = height
 | 
						|
 | 
						|
PEFunction_BlockMix2:
 | 
						|
                Push    AX
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
PEFunction_BlockMix3:
 | 
						|
                Cmp     AX, 63
 | 
						|
                JA      PEFunction_BlockMix4
 | 
						|
 | 
						|
                Cmp     DWord Ptr [ES:DI], NONOTE + 0FF0000h
 | 
						|
                JNE     PEFunction_BlockMix7
 | 
						|
                Cmp     Byte Ptr [ES:DI+4], 0
 | 
						|
                JNE     PEFunction_BlockMix7
 | 
						|
 | 
						|
                Mov     CX, 5
 | 
						|
                Rep     MovsB
 | 
						|
 | 
						|
                Jmp     PEFunction_BlockMix5
 | 
						|
 | 
						|
PEFunction_BlockMix7:
 | 
						|
                Add     DI, 5
 | 
						|
 | 
						|
PEFunction_BlockMix4:
 | 
						|
                Add     SI, 5
 | 
						|
 | 
						|
PEFunction_BlockMix5:
 | 
						|
                Inc     AX                      ; AX = channel
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_BlockMix3
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Pop     AX
 | 
						|
                Add     DI, 320
 | 
						|
                Inc     BX
 | 
						|
                Cmp     BX, BP
 | 
						|
                JA      PEFunction_BlockMix6
 | 
						|
 | 
						|
                Loop    PEFunction_BlockMix2
 | 
						|
 | 
						|
PEFunction_BlockMix6:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockMix
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_UnMarkBlock Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JZ      PEFunction_UnMarkBlock1
 | 
						|
 | 
						|
                Mov     BlockMark, 0
 | 
						|
                Jmp     PEFunction_UnMarkBlock2
 | 
						|
 | 
						|
PEFunction_UnMarkBlock1:
 | 
						|
                Mov     AX, BlockDataArea
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_NoBlockData
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     AH, 49h
 | 
						|
                Int     21h
 | 
						|
 | 
						|
                Mov     BlockDataArea, 0
 | 
						|
PEFunction_UnMarkBlock2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_UnMarkBlock
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SemiUp Far
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1000h
 | 
						|
                JE      PEFunction_SemiUp6
 | 
						|
 | 
						|
                Mov     DI, 2
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_SemiUp6:
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JNE     PEFunction_SemiUp4
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     CX, 1
 | 
						|
                Mov     DX, CX
 | 
						|
                Jmp     PEFunction_SemiUp5
 | 
						|
 | 
						|
PEFunction_SemiUp4:
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX                      ; AX = start offset
 | 
						|
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
PEFunction_SemiUp5:
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_SemiUp1:
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
PEFunction_SemiUp2:
 | 
						|
                Cmp     Byte Ptr [SI], 119
 | 
						|
                JAE     PEFunction_SemiUp3
 | 
						|
 | 
						|
                Inc     Byte Ptr [SI]
 | 
						|
 | 
						|
PEFunction_SemiUp3:
 | 
						|
                Add     SI, 5
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_SemiUp2
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_SemiUp1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SemiUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SemiDown Far
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1E00h
 | 
						|
                JE      PEFunction_SemiDown6
 | 
						|
 | 
						|
                Mov     DI, 3
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_SemiDown6:
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JNE     PEFunction_SemiDown4
 | 
						|
 | 
						|
                Mov     CX, 101h
 | 
						|
                Call    NetworkPartialPattern
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     CX, 1
 | 
						|
                Mov     DX, CX
 | 
						|
                Jmp     PEFunction_SemiDown5
 | 
						|
 | 
						|
PEFunction_SemiDown4:
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX                      ; AX = start offset
 | 
						|
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
PEFunction_SemiDown5:
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_SemiDown1:
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
PEFunction_SemiDown2:
 | 
						|
                Cmp     Byte Ptr [SI], 0
 | 
						|
                JLE     PEFunction_SemiDown3
 | 
						|
 | 
						|
                Dec     Byte Ptr [SI]
 | 
						|
 | 
						|
PEFunction_SemiDown3:
 | 
						|
                Add     SI, 5
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_SemiDown2
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_SemiDown1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SemiDown
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SlideCommand Far
 | 
						|
 | 
						|
                Mov     DI, 15
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockBottom
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                JZ      PEFunction_AltX2        ; CX contains number of rows
 | 
						|
 | 
						|
                Add     SI, 4
 | 
						|
                Add     DI, 4
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
PEFunction_AltX1:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                MovZX   AX, Byte Ptr [DI]
 | 
						|
                MovZX   BX, Byte Ptr [SI]
 | 
						|
                Sub     AX, BX                  ; AX = change.
 | 
						|
                JS      PEFunction_AltX4
 | 
						|
 | 
						|
                Div     CL
 | 
						|
                Mov     BH, AL
 | 
						|
                Xor     AL, AL
 | 
						|
                Div     CL
 | 
						|
                Mov     BL, AL
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Jmp     PEFunction_AltX5
 | 
						|
 | 
						|
 | 
						|
PEFunction_AltX4:
 | 
						|
                Neg     AX
 | 
						|
                Div     CL
 | 
						|
                Mov     BH, AL
 | 
						|
                Xor     AL, AL
 | 
						|
                Div     CL
 | 
						|
                Mov     BL, aL
 | 
						|
                Neg     BX
 | 
						|
 | 
						|
                Mov     AL, 0FFh
 | 
						|
 | 
						|
PEFunction_AltX5:
 | 
						|
                Mov     AH, [SI]
 | 
						|
 | 
						|
PEFunction_AltX3:
 | 
						|
                Mov     [SI], AH
 | 
						|
 | 
						|
                Add     AX, BX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_AltX3
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 5
 | 
						|
                Dec     DX
 | 
						|
                JNZ     PEFunction_AltX1
 | 
						|
 | 
						|
PEFunction_AltX2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SlideCommand
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_WipeCommands Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 2D00h
 | 
						|
                JE      PEFunction_WipeCommands4
 | 
						|
 | 
						|
                Jmp     PEFunction_SlideCommand
 | 
						|
 | 
						|
PEFunction_WipeCommands4:
 | 
						|
                Cmp     [Word Ptr LastKeyBoard3+2], 2D00h
 | 
						|
                JE      PEFunction_WipeCommands6
 | 
						|
 | 
						|
                Mov     DI, 16
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
PEFunction_WipeCommands6:
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     ES, PatternDataArea
 | 
						|
                Add     DI, 3
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PEFunction_WipeCommands2:
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_WipeCommands3:
 | 
						|
                StosW
 | 
						|
                Add     DI, 3
 | 
						|
                Loop    PEFunction_WipeCommands3
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 320
 | 
						|
                Loop    PEFunction_WipeCommands2
 | 
						|
 | 
						|
PEFunction_WipeCommands1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_WipeCommands
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_VolumeAmp Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Test    CentraliseCursor, 4
 | 
						|
                JZ      PENoFast1
 | 
						|
 | 
						|
                Mov     AX, FastVolumeAmplification
 | 
						|
                Mov     Amplification, AX
 | 
						|
                Jmp     PEFastVolumeAmp
 | 
						|
 | 
						|
PENoFast1:
 | 
						|
                Cmp     Amplification, 200
 | 
						|
                JBE     PENoFast2
 | 
						|
 | 
						|
                Mov     Amplification, 200
 | 
						|
 | 
						|
PENoFast2:
 | 
						|
                Push    DS
 | 
						|
 | 
						|
                Mov     DI, Offset O1_GetAmpList
 | 
						|
                Mov     CX, 3
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Cmp     DX, 1
 | 
						|
                JNE     PEFunction_VolumeAmp1
 | 
						|
 | 
						|
PEFastVolumeAmp:
 | 
						|
                Mov     DI, 6
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     BP, Amplification
 | 
						|
                Mov     BX, 100
 | 
						|
;                Mov     BH, 100                 ; For division
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Add     SI, 2
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
PEFunction_VolumeAmp2:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_VolumeAmp3:
 | 
						|
                Mov     AL, [SI]
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     PEFunction_VolumeAmp6
 | 
						|
 | 
						|
                Mov     DI, [SI-1]
 | 
						|
                And     DI, 0FFh
 | 
						|
                JZ      PEFunction_VolumeAmp4
 | 
						|
                                                ; OK.. find whether inst/sample
 | 
						|
                                                ; then get default vol.
 | 
						|
                Call    Music_GetInstrumentMode
 | 
						|
                JZ      PEFunction_VolumeAmp7
 | 
						|
 | 
						|
                Add     DI, DI
 | 
						|
                Mov     DI, [ES:64712+DI-2]
 | 
						|
                Mov     AL, [SI-2]
 | 
						|
                And     AX, 0FFh
 | 
						|
                JZ      PEFunction_VolumeAmp4
 | 
						|
                Add     AX, AX
 | 
						|
                Add     DI, AX
 | 
						|
                Mov     DI, [ES:DI+41h]
 | 
						|
                And     DI, 0FFh
 | 
						|
                JZ      PEFunction_VolumeAmp4
 | 
						|
 | 
						|
PEFunction_VolumeAmp7:
 | 
						|
                Dec     DI
 | 
						|
                Add     DI, DI
 | 
						|
                Mov     DI, [ES:64912+DI]
 | 
						|
                Mov     AL, [ES:DI+13h]
 | 
						|
 | 
						|
PEFunction_VolumeAmp6:
 | 
						|
                Cmp     AL, 64
 | 
						|
                JA      PEFunction_VolumeAmp4
 | 
						|
 | 
						|
                Xor     AH, AH
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mul     BP
 | 
						|
                Div     BX
 | 
						|
 | 
						|
                Pop     DX
 | 
						|
 | 
						|
                Cmp     AX, 64
 | 
						|
                JBE     PEFunction_VolumeAmp5
 | 
						|
 | 
						|
                Mov     AL, 64
 | 
						|
 | 
						|
PEFunction_VolumeAmp5:
 | 
						|
                Mov     [SI], AL
 | 
						|
 | 
						|
PEFunction_VolumeAmp4:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PEFunction_VolumeAmp3
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_VolumeAmp2
 | 
						|
 | 
						|
PEFunction_VolumeAmp1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_VolumeAmp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            GetPatternLength
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
                Push    ES
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    ClearEncodingInfo
 | 
						|
                                                ; OK, masks are reset.
 | 
						|
 | 
						|
                Mov     CX, CS:MaxRow
 | 
						|
                Inc     CX
 | 
						|
                Mov     DX, CX                  ; DX = count of bytes.
 | 
						|
                                                ; End of row bytes added.
 | 
						|
 | 
						|
                Mov     DS, CS:PatternDataArea
 | 
						|
                Xor     SI, SI                  ; SI = pattern area.
 | 
						|
 | 
						|
                Mov     DI, Offset EncodingInfo ; ES:DI points to encoding info
 | 
						|
 | 
						|
GetPatternLength1:
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, 64
 | 
						|
 | 
						|
GetPatternLength2:
 | 
						|
                Cmp     Word Ptr [SI], NONOTE
 | 
						|
                JNE     GetPatternLength4
 | 
						|
                Cmp     Byte Ptr [SI+2], 0FFh
 | 
						|
                JNE     GetPatternLength4
 | 
						|
                Cmp     Word Ptr [SI+3], 0
 | 
						|
                JE      GetPatternLength3
 | 
						|
 | 
						|
GetPatternLength4:
 | 
						|
                Inc     DX                      ; 1 byte for channel
 | 
						|
                                                ;   indication
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                                                ; AH will be mask
 | 
						|
                MovZX   AX, Byte Ptr [SI]       ; Note
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JE      GetPatternLength5
 | 
						|
                Cmp     AL, [ES:DI+1]           ; 5 is note.
 | 
						|
                JE      GetPatternLength12
 | 
						|
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Or      AH, 1
 | 
						|
                Jmp     GetPatternLength5
 | 
						|
 | 
						|
GetPatternLength12:
 | 
						|
                Or      AH, 16
 | 
						|
 | 
						|
GetPatternLength5:
 | 
						|
                Mov     AL, [SI+1]              ; Instrument
 | 
						|
                And     AL, AL
 | 
						|
                JZ      GetPatternLength7
 | 
						|
 | 
						|
                Cmp     AL, [ES:DI+2]
 | 
						|
                JE      GetPatternLength6
 | 
						|
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Or      AH, 2
 | 
						|
                Jmp     GetPatternLength7
 | 
						|
 | 
						|
GetPatternLength6:
 | 
						|
                Or      AH, 32
 | 
						|
 | 
						|
GetPatternLength7:
 | 
						|
                Mov     AL, [SI+2]              ; Volume
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      GetPatternLength8
 | 
						|
 | 
						|
                Cmp     AL, [ES:DI+3]
 | 
						|
                JE      GetPatternLength9
 | 
						|
 | 
						|
                Mov     [ES:DI+3], AL
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Or      AH, 4
 | 
						|
                Jmp     GetPatternLength8
 | 
						|
 | 
						|
GetPatternLength9:
 | 
						|
                Or      AH, 64
 | 
						|
 | 
						|
GetPatternLength8:
 | 
						|
                Mov     BX, [SI+3]
 | 
						|
                And     BX, BX
 | 
						|
                JZ      GetPatternLength11
 | 
						|
                Cmp     BX, [ES:DI+4]
 | 
						|
                JE      GetPatternLength10
 | 
						|
 | 
						|
                Mov     [ES:DI+4], BX
 | 
						|
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Or      AH, 8
 | 
						|
 | 
						|
                Jmp     GetPatternLength11
 | 
						|
 | 
						|
GetPatternLength10:
 | 
						|
                Or      AH, 128
 | 
						|
 | 
						|
GetPatternLength11:
 | 
						|
                Cmp     AH, [ES:DI]
 | 
						|
                JE      GetPatternLength3
 | 
						|
 | 
						|
                Inc     DX
 | 
						|
                JZ      GetPatternLength13
 | 
						|
                Mov     [ES:DI], AH
 | 
						|
 | 
						|
GetPatternLength3:
 | 
						|
 | 
						|
                Add     SI, 5
 | 
						|
                Add     DI, 6
 | 
						|
                Loop    GetPatternLength2
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     CX
 | 
						|
                Loop    GetPatternLength1
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     ES
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
GetPatternLength13:
 | 
						|
                Mov     DI, Offset O1_PatternTooLongList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Add     SP, 22          ; yes!
 | 
						|
                Mov     AX, 1
 | 
						|
                RetF
 | 
						|
 | 
						|
EndP            GetPatternLength
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
IF SHOWPATTERNLENGTH
 | 
						|
 | 
						|
Proc            PE_ShowPatternLength Far
 | 
						|
 | 
						|
                Push    AX                      ; Just for stack length..
 | 
						|
                Call    GetPatternLength
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Mov     AX, Object1
 | 
						|
                Push    AX
 | 
						|
                Mov     DS, AX
 | 
						|
                Mov     AX, Offset O1_ShowPatternLengthList
 | 
						|
                Push    AX
 | 
						|
                Mov     SI, Offset PatternLength
 | 
						|
                Mov     [SI], DX
 | 
						|
                Call    M_FunctionHandler
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ShowPatternLength
 | 
						|
 | 
						|
ENDIF
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
DecodePatternBytes      DW      0
 | 
						|
DecodePatternOffset     DW      0
 | 
						|
 | 
						|
Proc            DecodePattern           ; DS:SI points to pattern info to decode
 | 
						|
 | 
						|
                PushA
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
;                Call    ClearEncodingInfo      ; Should be unnecess.
 | 
						|
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     BX, Offset EncodingInfo
 | 
						|
 | 
						|
                LodsW                   ; AX = number of bytes
 | 
						|
                Mov     CS:DecodePatternBytes, AX
 | 
						|
                LodsW                   ; AX = maxrow
 | 
						|
                Mov     CX, AX
 | 
						|
                Dec     AX
 | 
						|
                Mov     CS:MaxRow, AX
 | 
						|
                LodsW
 | 
						|
                LodsW
 | 
						|
 | 
						|
                Mov     CS:DecodePatternOffset, SI
 | 
						|
 | 
						|
                Call    PE_ClearPatternData
 | 
						|
 | 
						|
                Mov     ES, CS:PatternDataArea
 | 
						|
                Xor     DI, DI
 | 
						|
 | 
						|
DecodePattern1:
 | 
						|
                Push    CX
 | 
						|
 | 
						|
DecodePattern5:
 | 
						|
                LodsB                           ; AL = channel byte.
 | 
						|
                Test    AL, AL
 | 
						|
                JZ      DecodePattern2
 | 
						|
 | 
						|
                Push    BX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     CX, AX
 | 
						|
                Dec     CX
 | 
						|
                And     CX, 63
 | 
						|
 | 
						|
        ; DI = DI + Channel*5
 | 
						|
        ; BX = EncodingInfo + Channel*6
 | 
						|
 | 
						|
                LEA     BX, [ECX*4+ECX]
 | 
						|
                LEA     DI, [DI+BX]
 | 
						|
                LEA     BX, [EBX+ECX+EncodingInfo]
 | 
						|
 | 
						|
                Test    AL, 128
 | 
						|
                JZ      DecodePattern3
 | 
						|
 | 
						|
                Mov     DL, [SI]
 | 
						|
                Inc     SI
 | 
						|
 | 
						|
                Mov     [CS:BX], DL
 | 
						|
                Jmp     DecodePattern4
 | 
						|
 | 
						|
DecodePattern3:
 | 
						|
                Mov     DL, [CS:BX]             ; DL = mask
 | 
						|
 | 
						|
DecodePattern4:
 | 
						|
                Test    DL, 1
 | 
						|
                JZ      DecodePattern13
 | 
						|
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
                Mov     [CS:BX+1], AL
 | 
						|
                Jmp     DecodePattern6
 | 
						|
 | 
						|
DecodePattern13:
 | 
						|
                Test    DL, 16
 | 
						|
                JZ      DecodePattern6
 | 
						|
 | 
						|
                Mov     AL, [CS:BX+1]
 | 
						|
                Mov     [ES:DI], AL
 | 
						|
 | 
						|
DecodePattern6:
 | 
						|
                Test    DL, 2
 | 
						|
                JZ      DecodePattern7
 | 
						|
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
                Mov     [CS:BX+2], AL
 | 
						|
                Jmp     DecodePattern8
 | 
						|
 | 
						|
DecodePattern7:
 | 
						|
                Test    DL, 32
 | 
						|
                JZ      DecodePattern8
 | 
						|
 | 
						|
                Mov     AL, [CS:BX+2]
 | 
						|
                Mov     [ES:DI+1], AL
 | 
						|
 | 
						|
DecodePattern8:
 | 
						|
                Test    DL, 4
 | 
						|
                JZ      DecodePattern9
 | 
						|
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
                Mov     [CS:BX+3], AL
 | 
						|
                Jmp     DecodePattern10
 | 
						|
 | 
						|
DecodePattern9:
 | 
						|
                Test    DL, 64
 | 
						|
                JZ      DecodePattern10
 | 
						|
 | 
						|
                Mov     AL, [CS:BX+3]
 | 
						|
                Mov     [ES:DI+2], AL
 | 
						|
 | 
						|
DecodePattern10:
 | 
						|
                Test    DL, 8
 | 
						|
                JZ      DecodePattern11
 | 
						|
 | 
						|
                LodsW
 | 
						|
 | 
						|
                Mov     [ES:DI+3], AX
 | 
						|
                Mov     [CS:BX+4], AX
 | 
						|
                Jmp     DecodePattern12
 | 
						|
 | 
						|
DecodePattern11:
 | 
						|
                Test    DL, 128
 | 
						|
                JZ      DecodePattern12
 | 
						|
 | 
						|
                Mov     AX, [CS:BX+4]
 | 
						|
                Mov     [ES:DI+3], AX
 | 
						|
 | 
						|
DecodePattern12:
 | 
						|
                Pop     DI
 | 
						|
                Pop     BX
 | 
						|
                Jmp     DecodePattern5
 | 
						|
 | 
						|
DecodePattern2:
 | 
						|
                Pop     CX
 | 
						|
                Add     DI, 320
 | 
						|
                Loop    DecodePattern1
 | 
						|
 | 
						|
                Sub     SI, CS:DecodePatternOffset
 | 
						|
                Cmp     SI, CS:DecodePatternBytes
 | 
						|
                JE      DecodePatternEnd
 | 
						|
 | 
						|
                Mov     CX, 0FFFFh
 | 
						|
                Mov     DI, Offset O1_PatternSizeMismatchList
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
DecodePatternEnd:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                PopA
 | 
						|
 | 
						|
                Call    Music_UpdatePatternOffset
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            DecodePattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            EncodePattern           ; ES:DI points to area to deposit data
 | 
						|
                                        ; DX = length of data
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Push    ES
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    ClearEncodingInfo
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     ES
 | 
						|
 | 
						|
                Mov     BX, Offset EncodingInfo
 | 
						|
 | 
						|
                Mov     AX, DX
 | 
						|
                StosW
 | 
						|
 | 
						|
                Mov     CX, CS:MaxRow
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     AX, CX
 | 
						|
                StosW
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                StosW
 | 
						|
                StosW                           ; This is the header.
 | 
						|
 | 
						|
                Xor     SI, SI
 | 
						|
                Mov     DS, CS:PatternDataArea
 | 
						|
 | 
						|
EncodePattern1:
 | 
						|
                Push    BX
 | 
						|
                Push    CX
 | 
						|
 | 
						|
                Xor     DX, DX                  ; DL = channelnumber
 | 
						|
                                                ; DH is used as mask val.
 | 
						|
                Mov     CX, 64
 | 
						|
 | 
						|
EncodePattern2:
 | 
						|
                Cmp     Word Ptr [SI], NONOTE
 | 
						|
                JNE     EncodePattern3
 | 
						|
                Cmp     Byte Ptr [SI+2], 0FFh
 | 
						|
                JNE     EncodePattern8
 | 
						|
                Cmp     Word Ptr [SI+3], 0
 | 
						|
                JE      EncodePattern4
 | 
						|
                Jmp     EncodePattern10
 | 
						|
 | 
						|
EncodePattern3:
 | 
						|
                Mov     AL, [SI]
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JE      EncodePattern5
 | 
						|
                Cmp     AL, [CS:BX+1]   ; 1=note
 | 
						|
                JE      EncodePattern6
 | 
						|
 | 
						|
                Mov     [CS:BX+1], AL
 | 
						|
                Or      DH, 1
 | 
						|
                Jmp     EncodePattern5
 | 
						|
 | 
						|
EncodePattern6:
 | 
						|
                Or      DH, 16
 | 
						|
 | 
						|
EncodePattern5:
 | 
						|
                Mov     AL, [SI+1]
 | 
						|
                And     AL, AL
 | 
						|
                JZ      EncodePattern8
 | 
						|
                Cmp     AL, [CS:BX+2]   ; 2=ins
 | 
						|
                JE      EncodePattern7
 | 
						|
 | 
						|
                Mov     [CS:BX+2], AL
 | 
						|
                Or      DH, 2
 | 
						|
                Jmp     EncodePattern8
 | 
						|
 | 
						|
EncodePattern7:
 | 
						|
                Or      DH, 32
 | 
						|
 | 
						|
EncodePattern8:
 | 
						|
                Mov     AL, [SI+2]
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      EncodePattern10
 | 
						|
                Cmp     AL, [CS:BX+3]   ; 3=vol
 | 
						|
                JE      EncodePattern9
 | 
						|
 | 
						|
                Mov     [CS:BX+3], AL
 | 
						|
                Or      DH, 4
 | 
						|
                Jmp     EncodePattern10
 | 
						|
 | 
						|
EncodePattern9:
 | 
						|
                Or      DH, 64
 | 
						|
 | 
						|
EncodePattern10:
 | 
						|
                Mov     AX, [SI+3]
 | 
						|
                Test    AX, AX
 | 
						|
                JZ      EncodePattern12
 | 
						|
                Cmp     AX, [CS:BX+4]   ; 4=effect
 | 
						|
                JE      EncodePattern11
 | 
						|
 | 
						|
                Mov     [CS:BX+4], AX
 | 
						|
                Or      DH, 8
 | 
						|
                Jmp     EncodePattern12
 | 
						|
 | 
						|
EncodePattern11:
 | 
						|
                Or      DH, 128
 | 
						|
 | 
						|
EncodePattern12:
 | 
						|
                Mov     AL, DL
 | 
						|
                Inc     AX
 | 
						|
 | 
						|
                Cmp     [CS:BX], DH     ; 0 = mask
 | 
						|
                JE      EncodePattern13
 | 
						|
 | 
						|
                Mov     [CS:BX], DH
 | 
						|
                Or      AL, 128                 ; read another mask...
 | 
						|
                StosB
 | 
						|
                Mov     AL, DH
 | 
						|
                StosB
 | 
						|
                Jmp     EncodePattern14
 | 
						|
 | 
						|
EncodePattern13:
 | 
						|
                StosB
 | 
						|
 | 
						|
EncodePattern14:
 | 
						|
                Test    DH, 1
 | 
						|
                JZ      EncodePattern15
 | 
						|
 | 
						|
                Mov     AL, [SI]
 | 
						|
                StosB
 | 
						|
 | 
						|
EncodePattern15:
 | 
						|
                Test    DH, 2
 | 
						|
                JZ      EncodePattern16
 | 
						|
 | 
						|
                Mov     AL, [SI+1]
 | 
						|
                StosB
 | 
						|
 | 
						|
EncodePattern16:
 | 
						|
                Test    DH, 4
 | 
						|
                JZ      EncodePattern17
 | 
						|
 | 
						|
                Mov     AL, [SI+2]
 | 
						|
                StosB
 | 
						|
 | 
						|
EncodePattern17:
 | 
						|
                Test    DH, 8
 | 
						|
                JZ      EncodePattern18
 | 
						|
 | 
						|
                Mov     AX, [SI+3]
 | 
						|
                StosW
 | 
						|
 | 
						|
EncodePattern18:
 | 
						|
                Xor     DH, DH
 | 
						|
 | 
						|
EncodePattern4:
 | 
						|
                Add     SI, 5
 | 
						|
                Add     BX, 6
 | 
						|
                Inc     DX
 | 
						|
                Loop    EncodePattern2
 | 
						|
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Xor     AL, AL
 | 
						|
                StosB
 | 
						|
                Loop    EncodePattern1
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Pop     BX
 | 
						|
                Pop     AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            EncodePattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_StorePattern
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_StorePattern5
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                ShL     AX, 8
 | 
						|
                Add     AX, NETWORK_ENTIREPATTERNOBJECT
 | 
						|
                Call    Network_AddWordToQueue
 | 
						|
 | 
						|
PEFunction_StorePattern5:
 | 
						|
ENDIF
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     SI, AX
 | 
						|
                Call    Music_ReleasePattern
 | 
						|
 | 
						|
                Call    GetPatternLength
 | 
						|
                Cmp     DX, 64
 | 
						|
                JNE     PEFunction_StorePattern1
 | 
						|
                Cmp     CS:MaxRow, 63
 | 
						|
                JE      PEFunction_StorePattern2
 | 
						|
 | 
						|
PEFunction_StorePattern1:
 | 
						|
                Add     DX, 8
 | 
						|
                JC      PEFunction_StorePattern4
 | 
						|
 | 
						|
                ClI
 | 
						|
 | 
						|
                Call    Music_AllocatePattern
 | 
						|
                Mov     AX, ES
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_StorePattern3
 | 
						|
                Sub     DX, 8
 | 
						|
                Call    EncodePattern
 | 
						|
 | 
						|
                StI
 | 
						|
 | 
						|
PEFunction_StorePattern2:
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_StorePattern3:
 | 
						|
                StI
 | 
						|
 | 
						|
                Add     SP, 2
 | 
						|
                Jmp     PEFunction_OutOfMemoryMessage
 | 
						|
 | 
						|
PEFunction_StorePattern4:
 | 
						|
                Mov     DI, Offset O1_PatternTooLongList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
                Mov     AX, 1
 | 
						|
                RetF
 | 
						|
 | 
						|
EndP            PEFunction_StorePattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_StoreCurrentPattern Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_StoreCurrentPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            NewPattern                      ; Reqs. AX = pattern
 | 
						|
 | 
						|
IF NETWORKENABLED
 | 
						|
                Call    Network_UpdatePattern
 | 
						|
ENDIF
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Mov     CS:PatternModified, 0
 | 
						|
                Mov     AH, CS:Byte Ptr PatternNumber
 | 
						|
                Mov     AL, 22
 | 
						|
                Mov     DI, AX
 | 
						|
;                Mov     DI, 22
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            NewPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GotoPattern Far                      ; AX = pattern.
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     Row, BX
 | 
						|
                Mov     Channel, CX
 | 
						|
 | 
						|
PE_GotoPattern2:
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PE_GotoPattern1
 | 
						|
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
 | 
						|
PE_GotoPattern1:
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
                Jmp     Glbl_F2
 | 
						|
 | 
						|
EndP            PE_GotoPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
include pe_trans.inc
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_NextPattern Far
 | 
						|
 | 
						|
                Cmp     TracePlayback, 0
 | 
						|
                JE      PEFunction_NextPatternNoTrace
 | 
						|
 | 
						|
                Call    Music_GetPlayMode
 | 
						|
                Cmp     AX, 1
 | 
						|
                JE      PEFunction_NextPattern1
 | 
						|
                JB      PEFunction_NextPatternNoTrace
 | 
						|
 | 
						|
                Call    Music_NextOrder
 | 
						|
                Jmp     PEFunction_NextPattern1
 | 
						|
 | 
						|
PEFunction_NextPatternNoTrace:
 | 
						|
                Cmp     PatternNumber, 199
 | 
						|
                JAE     PEFunction_NextPattern1
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_NextPattern2
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_NextPattern2:
 | 
						|
                Inc     PatternNumber
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
PEFunction_NextPattern1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_NextPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_LastPattern Far
 | 
						|
 | 
						|
                Cmp     TracePlayback, 0
 | 
						|
                JE      PEFunction_LastPatternNoTrace
 | 
						|
 | 
						|
                Call    Music_GetPlayMode
 | 
						|
                Cmp     AX, 1
 | 
						|
                JE      PEFunction_LastPattern1
 | 
						|
                JB      PEFunction_LastPatternNoTrace
 | 
						|
 | 
						|
                Call    Music_LastOrder
 | 
						|
                Jmp     PEFunction_LastPattern1
 | 
						|
 | 
						|
PEFunction_LastPatternNoTrace:
 | 
						|
                Cmp     PatternNumber, 0
 | 
						|
                JE      PEFunction_LastPattern1
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_LastPattern2
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_LastPattern2:
 | 
						|
                Dec     PatternNumber
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
PEFunction_LastPattern1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_LastPattern
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Next4Patterns Far
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_Next4Patterns2
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_Next4Patterns2:
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Add     AX, 4
 | 
						|
                Cmp     AX, 199
 | 
						|
                JBE     PEFunction_Next4Patterns1
 | 
						|
 | 
						|
                Mov     AX, 199
 | 
						|
 | 
						|
PEFunction_Next4Patterns1:
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Next4Patterns
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Last4Patterns Far
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_Last4Patterns2
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_Last4Patterns2:
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Sub     AX, 4
 | 
						|
                JNS     PEFunction_Last4Patterns1
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PEFunction_Last4Patterns1:
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Last4Patterns
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_LastOrderPattern Far
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_LastOrderPattern3
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_LastOrderPattern3:
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
                Mov     BX, Order
 | 
						|
                And     BX, BX
 | 
						|
                JZ      PEFunction_LastOrderPattern2
 | 
						|
 | 
						|
                Cmp     Byte Ptr [ES:BX+0FFh], 200
 | 
						|
                JAE     PEFunction_LastOrderPattern2
 | 
						|
 | 
						|
                Dec     BX
 | 
						|
                Mov     Order, BX
 | 
						|
 | 
						|
PEFunction_LastOrderPattern2:
 | 
						|
                MovZX   AX, Byte Ptr [ES:BX+0100h]
 | 
						|
                Cmp     AL, 200
 | 
						|
                JAE     PEFunction_LastOrderPattern1
 | 
						|
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
PEFunction_LastOrderPattern1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_LastOrderPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_NextOrderPattern Far
 | 
						|
 | 
						|
                Cmp     PatternModified, 0
 | 
						|
                JE      PEFunction_NextOrderPattern3
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
PEFunction_NextOrderPattern3:
 | 
						|
                Mov     BX, Order
 | 
						|
 | 
						|
                Cmp     BX, 0FFh
 | 
						|
                JAE     PEFunction_NextOrderPattern1
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
                Cmp     Byte Ptr [ES:BX+101h], 200
 | 
						|
                JAE     PEFunction_NextOrderPattern2
 | 
						|
 | 
						|
                Inc     BX
 | 
						|
                Mov     Order, BX
 | 
						|
 | 
						|
PEFunction_NextOrderPattern2:
 | 
						|
                MovZX   AX, Byte Ptr [ES:BX+100h]
 | 
						|
                Cmp     AL, 200
 | 
						|
                JAE     PEFunction_NextOrderPattern1
 | 
						|
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
 | 
						|
                Call    NewPattern
 | 
						|
 | 
						|
PEFunction_NextOrderPattern1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_NextOrderPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Alt0 Far
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Mov     SkipValue, AX
 | 
						|
                Mov     SI, Offset CursorStepMsg
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Alt0
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_BlockVolume Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2], 2F00h
 | 
						|
                JE      PEFunction_BlockVolume3
 | 
						|
 | 
						|
                Mov     DI, 13
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
PEFunction_BlockVolume3:
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     AL, LastVolume
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Add     SI, 2
 | 
						|
 | 
						|
PEFunction_BlockVolume1:
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_BlockVolume2:
 | 
						|
                Mov     [SI], AL
 | 
						|
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PEFunction_BlockVolume2
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_BlockVolume1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_BlockVolume
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_WipeExcessVolumes Far
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                Cmp     [Word Ptr LastKeyBoard2+2], 1100h
 | 
						|
                JE      PEFunction_WipeExcessVolumesEnd
 | 
						|
 | 
						|
                Mov     DI, 14
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
                Call    NetworkBlock
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     BlockTop
 | 
						|
                Add     AX, BlockLeft
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
 | 
						|
                Mov     CX, BlockBottom
 | 
						|
                Sub     CX, BlockTop
 | 
						|
                Inc     CX
 | 
						|
 | 
						|
                Mov     DX, BlockRight
 | 
						|
                Sub     DX, BlockLeft
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     AL, 0FFh
 | 
						|
 | 
						|
PEFunction_WipeExcessVolumes1:
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Mov     CX, DX
 | 
						|
 | 
						|
PEFunction_WipeExcessVolumes2:
 | 
						|
                Cmp     Byte Ptr [SI+1], 0
 | 
						|
                JNE     PEFunction_WipeExcessVolumes3
 | 
						|
 | 
						|
                Cmp     Byte Ptr [SI], NONOTE
 | 
						|
                JAE     PEFunction_WipeExcessVolumes4
 | 
						|
 | 
						|
PEFunction_WipeExcessVolumes3:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PEFunction_WipeExcessVolumes2
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     CX
 | 
						|
                Add     SI, 320
 | 
						|
                Loop    PEFunction_WipeExcessVolumes1
 | 
						|
 | 
						|
PEFunction_WipeExcessVolumesEnd:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_WipeExcessVolumes4:
 | 
						|
                Mov     [SI+2], AL
 | 
						|
                Jmp     PEFunction_WipeExcessVolumes3
 | 
						|
 | 
						|
EndP            PEFunction_WipeExcessVolumes
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_PlayCurrentNote Far
 | 
						|
 | 
						|
                Mov     AX, 64
 | 
						|
                Mul     Row
 | 
						|
                Add     AX, Channel
 | 
						|
                Mov     BX, 5
 | 
						|
                Mul     BX
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     DH, 32
 | 
						|
                Call    Music_PlayNote
 | 
						|
 | 
						|
IF CHORDENTRY
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Cmp     ShiftPressed, 0
 | 
						|
                JE      PE_GotoNextInput
 | 
						|
 | 
						|
                Push    SkipValue
 | 
						|
                Mov     SkipValue, 0
 | 
						|
                Mov     NoteEntered, 1
 | 
						|
 | 
						|
                Call    PE_GotoNextInput
 | 
						|
                Pop     SkipValue
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
ELSE
 | 
						|
                Jmp     PEFunction_Down
 | 
						|
ENDIF
 | 
						|
 | 
						|
EndP            PEFunction_PlayCurrentNote
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_PlayCurrentRow Far
 | 
						|
 | 
						|
                Mov     CX, 64
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     CS:Row
 | 
						|
                Mov     SI, AX
 | 
						|
                Xor     AX, AX
 | 
						|
 | 
						|
PEFunction_PlayCurrentRow1:
 | 
						|
;                Push    CX
 | 
						|
 | 
						|
;                Dec     CX
 | 
						|
;                Mov     AX, 64
 | 
						|
;                Mul     CS:Row
 | 
						|
;                Add     AX, CX
 | 
						|
;                Mov     BX, 5
 | 
						|
;                Mul     BX
 | 
						|
;                Mov     SI, AX
 | 
						|
;                Mov     AX, CX
 | 
						|
                Xor     DH, DH
 | 
						|
                Call    Music_PlayNote
 | 
						|
 | 
						|
;                Pop     CX
 | 
						|
                Inc     AX
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PEFunction_PlayCurrentRow1
 | 
						|
 | 
						|
                Jmp     PEFunction_Down
 | 
						|
 | 
						|
EndP            PEFunction_PlayCurrentRow
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_RestoreData Far
 | 
						|
 | 
						|
;                Mov     PatternModified, 0
 | 
						|
 | 
						|
                Cmp     Byte Ptr LastKeyBoard2, 0Eh
 | 
						|
                JE      PEFunction_RestoreData1
 | 
						|
 | 
						|
                Mov     DI, 1
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
PEFunction_RestoreData1:
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Xor     BX, BX
 | 
						|
                Mov     CL, 64
 | 
						|
                Mov     CH, Byte Ptr [CS:MaxRow]
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_RestoreData
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ToggleDefaultVolume Far
 | 
						|
 | 
						|
                Xor     Flags, 1
 | 
						|
                Mov     SI, Offset DefaultVolumeOn
 | 
						|
                Test    Flags, 1
 | 
						|
                JNZ     PEFunction_ToggleDefaultVolume1
 | 
						|
 | 
						|
                Mov     SI, Offset DefaultVolumeOff
 | 
						|
 | 
						|
PEFunction_ToggleDefaultVolume1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ToggleDefaultVolume
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleTemplate Far
 | 
						|
 | 
						|
                Test    CentraliseCursor, 4
 | 
						|
                JZ      ToggleTemplate2
 | 
						|
 | 
						|
                Cmp     BlockMark, 0
 | 
						|
                JE      PEFunction_NoBlockMarkedMessage
 | 
						|
 | 
						|
                        ; Amplification = 1/(FastVolumeAmplification/100)
 | 
						|
                        ;               = 10050/FastvolumeAmplification
 | 
						|
                Mov     AX, 10050
 | 
						|
                Xor     DX, DX
 | 
						|
                Div     FastVolumeAmplification
 | 
						|
                Mov     Amplification, AX
 | 
						|
                Jmp     PEFastVolumeAmp
 | 
						|
 | 
						|
ToggleTemplate2:
 | 
						|
                Mov     AL, Template
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AL, 4
 | 
						|
                JBE     PEFunction_ToggleTemplate1
 | 
						|
 | 
						|
Proc            PEFunction_TemplateOff Far
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
 | 
						|
PEFunction_ToggleTemplate1:
 | 
						|
                Mov     Template, AL
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_TemplateOff
 | 
						|
 | 
						|
EndP            PEFunction_ToggleTemplate
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetCurrentPattern Far
 | 
						|
 | 
						|
                Mov     AX, CS:PatternNumber
 | 
						|
                Mov     BX, CS:MaxRow
 | 
						|
                Inc     BX
 | 
						|
                Mov     DS, CS:PatternDataArea
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetCurrentPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_CheckWidth
 | 
						|
 | 
						|
                Xor     DX, DX                          ; Time to work out width
 | 
						|
                Xor     CX, CX                          ; Count of channels.
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
PE_CheckWidth1:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_CheckWidth2
 | 
						|
 | 
						|
                MovZX   BX, AH
 | 
						|
                ShL     BX, 2
 | 
						|
                Add     DX, [ViewMethodInfo+BX+2]
 | 
						|
                Inc     CX
 | 
						|
                Jmp     PE_CheckWidth1
 | 
						|
 | 
						|
PE_CheckWidth2:
 | 
						|
                And     CX, CX
 | 
						|
                JZ      PE_CheckWidth3
 | 
						|
 | 
						|
                Add     DX, 2
 | 
						|
 | 
						|
                Cmp     ViewDivision, 0
 | 
						|
                JE      PE_CheckWidth3
 | 
						|
 | 
						|
                Dec     CX
 | 
						|
                Add     DX, CX
 | 
						|
 | 
						|
PE_CheckWidth3:
 | 
						|
                Cmp     DX, 76                  ; Too big to fit screen?
 | 
						|
                JAE     PE_CheckWidth5
 | 
						|
 | 
						|
                Mov     ViewWidth, DX
 | 
						|
                Xor     AX, AX
 | 
						|
                Cmp     DX, 74
 | 
						|
                JAE     PE_CheckWidth4
 | 
						|
 | 
						|
                Mov     AX, 74
 | 
						|
                Sub     AX, DX
 | 
						|
                Mov     BL, 14
 | 
						|
                Div     BL
 | 
						|
                Xor     AH, AH
 | 
						|
 | 
						|
PE_CheckWidth4:
 | 
						|
                Mov     NumChannelsEdit, AX
 | 
						|
 | 
						|
                DB      85h     ;
 | 
						|
PE_CheckWidth5:                 ;
 | 
						|
                StC             ;
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_CheckWidth
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ViewTrack Far
 | 
						|
 | 
						|
                Mov     DX, Channel
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
PEFunction_ViewTrack2:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh                        ; No more in list??
 | 
						|
                JE      PEFunction_ViewTrack1
 | 
						|
 | 
						|
                Cmp     AL, DL
 | 
						|
                JNE     PEFunction_ViewTrack2
 | 
						|
 | 
						|
PEFunction_ViewTrack1:
 | 
						|
                Sub     SI, 2
 | 
						|
 | 
						|
                Mov     CX, AX                          ; Store old value.
 | 
						|
                Mov     AL, DL
 | 
						|
                Inc     AH
 | 
						|
                Cmp     AH, 4                           ; Number of view methods
 | 
						|
                JBE     PEFunction_ViewTrack3
 | 
						|
 | 
						|
                LodsW
 | 
						|
 | 
						|
PEFunction_ViewTrack8:
 | 
						|
                LodsW
 | 
						|
                Mov     [SI-4], AX
 | 
						|
                Cmp     AX, 0FFFFh
 | 
						|
                JNE     PEFunction_ViewTrack8
 | 
						|
 | 
						|
                Jmp     PEFunction_ViewTrack9
 | 
						|
 | 
						|
PEFunction_ViewTrack3:
 | 
						|
                Mov     [SI], AX                        ; Update...
 | 
						|
 | 
						|
PEFunction_ViewTrack9:
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Call    PE_CheckWidth
 | 
						|
                JC      PEFunction_ViewTrack7
 | 
						|
 | 
						|
                Add     SP, 4
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_ViewTrack7:
 | 
						|
                Pop     SI
 | 
						|
                Pop     CX
 | 
						|
                Mov     AX, [SI]
 | 
						|
                Inc     AH
 | 
						|
                Cmp     AH, 4                   ; Number of view methods
 | 
						|
                JE      PEFunction_ViewTrack10
 | 
						|
 | 
						|
                Mov     [SI], AX
 | 
						|
 | 
						|
                Jmp     PEFunction_ViewTrack9
 | 
						|
 | 
						|
PEFunction_ViewTrack10:
 | 
						|
                Mov     [SI], CX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ViewTrack
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ClearViews Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     DI, Offset ViewChannels
 | 
						|
                Mov     CX, 100
 | 
						|
                Mov     AX, 0FFFFh
 | 
						|
                Rep     StosW
 | 
						|
 | 
						|
                Mov     ViewWidth, 0
 | 
						|
                Mov     AX, StartChannelEdit
 | 
						|
                Mov     NumChannelsEdit, AX
 | 
						|
                Mov     ViewChannelTracking, 0
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ClearViews
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SelectColour Near
 | 
						|
 | 
						|
                MovZX   AX, CL                  ; AL = row number
 | 
						|
 | 
						|
                Mov     CH, 0E6h
 | 
						|
                Cmp     CS:RowHilight2, 0
 | 
						|
                JE      PE_SelectColour4
 | 
						|
                Div     CS:RowHilight2
 | 
						|
                And     AH, AH
 | 
						|
                JZ      PE_SelectColour1
 | 
						|
 | 
						|
PE_SelectColour4:
 | 
						|
                MovZX   AX, CL
 | 
						|
                Mov     CH, 0F6h
 | 
						|
                Cmp     CS:RowHilight1, 0
 | 
						|
                JE      PE_SelectColour5
 | 
						|
                Div     CS:RowHiLight1
 | 
						|
                And     AH, AH
 | 
						|
                JZ      PE_SelectColour1
 | 
						|
 | 
						|
PE_SelectColour5:
 | 
						|
                Mov     CH, 6
 | 
						|
 | 
						|
PE_SelectColour1:                       ; Check for block, CL = rownum, BP = ch
 | 
						|
                MovZX   AX, CL          ; AX = row number
 | 
						|
                Cmp     CS:BlockMark, 0
 | 
						|
                JE      PE_SelectColour3
 | 
						|
                Cmp     BP, CS:BlockLeft
 | 
						|
                JB      PE_SelectColour3
 | 
						|
                Cmp     BP, CS:BlockRight
 | 
						|
                JA      PE_SelectColour3
 | 
						|
                Cmp     AX, CS:BlockTop
 | 
						|
                JB      PE_SelectColour3
 | 
						|
                Cmp     AX, CS:BlockBottom
 | 
						|
                JA      PE_SelectColour3
 | 
						|
 | 
						|
                Test    CH, 80h
 | 
						|
                JZ      PE_SelectColour2
 | 
						|
 | 
						|
                Mov     CH, 96h
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_SelectColour2:
 | 
						|
                Mov     CH, 86h
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_SelectColour3:
 | 
						|
                Cmp     AX, CS:Row
 | 
						|
                JNE     PE_SelectColour6
 | 
						|
 | 
						|
                Test    CS:CentraliseCursor, 2
 | 
						|
                JZ      PE_SelectColour6
 | 
						|
 | 
						|
                Mov     CH, 16h
 | 
						|
 | 
						|
PE_SelectColour6:
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SelectColour
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_HilightCursor Near
 | 
						|
 | 
						|
                Mov     AX, [ES:DI]
 | 
						|
                And     AH, 8
 | 
						|
                Or      AH, 30h
 | 
						|
                StosW
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_HilightCursor
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_HilightView Near
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Cmp     CS:Template, 0
 | 
						|
                JE      PE_HilightView1
 | 
						|
 | 
						|
                Cmp     CS:ShiftPressed, 0
 | 
						|
                JNE     PE_HilightView1
 | 
						|
 | 
						|
                Cmp     CS:PatternCursor, 0
 | 
						|
                JNE     PE_HilightView1
 | 
						|
 | 
						|
                Cmp     CS:BlockDataArea, 0
 | 
						|
                JE      PE_HilightView1
 | 
						|
 | 
						|
                Mov     FS, CS:BlockDataArea
 | 
						|
                Mov     AX, [FS:0]
 | 
						|
 | 
						|
PE_HilightView1:
 | 
						|
                Mov     CX, CS:Channel
 | 
						|
                Cmp     DX, CX
 | 
						|
                JB      PE_HilightViewEnd
 | 
						|
                Add     CX, AX
 | 
						|
                Cmp     DX, CX
 | 
						|
                JAE     PE_HilightViewEnd
 | 
						|
 | 
						|
                Sub     DI, (32*160)
 | 
						|
                Mov     AL, 160
 | 
						|
                Mov     CX, CS:Row
 | 
						|
                Sub     CX, CS:TopRow
 | 
						|
                Mul     CL
 | 
						|
                Add     DI, AX
 | 
						|
                Add     BP, CS:PatternCursor
 | 
						|
 | 
						|
                Mov     CL, Byte Ptr [CS:BP]
 | 
						|
                Mov     AX, CX
 | 
						|
                And     AX, 0Fh
 | 
						|
 | 
						|
                Add     AX, AX
 | 
						|
                Add     DI, AX
 | 
						|
 | 
						|
                Mov     DX, [ES:DI]
 | 
						|
                Test    DH, 8
 | 
						|
                JNZ     PE_HilightView4
 | 
						|
                Cmp     DL, 184
 | 
						|
                JE      PE_HilightView4
 | 
						|
                Cmp     DL, 226
 | 
						|
                JB      PE_HilightView2
 | 
						|
                Cmp     DL, 246
 | 
						|
                JAE     PE_HilightView2
 | 
						|
 | 
						|
PE_HilightView4:
 | 
						|
                Mov     AH, 0Fh         ; mask value
 | 
						|
                Cmp     CL, Byte Ptr [CS:BP+1]
 | 
						|
                JE      PE_HilightView3
 | 
						|
 | 
						|
                Mov     AH, 0F0h
 | 
						|
 | 
						|
PE_HilightView3:
 | 
						|
                Call    S_InvertCursor
 | 
						|
 | 
						|
                Mov     AX, 246+3000h
 | 
						|
                StosW
 | 
						|
 | 
						|
PE_HilightViewEnd:
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_HilightView2:
 | 
						|
                Mov     AX, [ES:DI]
 | 
						|
                Mov     AH, 30h
 | 
						|
                StosW
 | 
						|
 | 
						|
                Sub     CL, 10h
 | 
						|
                JNC     PE_HilightView2
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_HilightView
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetChannelColour             ; Puts colour in AH
 | 
						|
                                                ; Param: BP = channel
 | 
						|
 | 
						|
                Push    DS
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
 | 
						|
                Mov     AH, 13h
 | 
						|
                Test    Byte Ptr [DS:BP+40h], 80h
 | 
						|
                JZ      PE_GetChannelColour1
 | 
						|
 | 
						|
                Mov     AH, 10h
 | 
						|
 | 
						|
PE_GetChannelColour1:
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetChannelColour
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ViewCommon
 | 
						|
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     BP, DX
 | 
						|
                And     BP, 0FFh
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                MovZX   AX, DL
 | 
						|
                Inc     AX
 | 
						|
                Mov     DX, 0A0Ch
 | 
						|
                Div     DH
 | 
						|
;                Mov     DL, 10
 | 
						|
;                Div     DL
 | 
						|
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     [SI+BX], AX
 | 
						|
                Sub     DI, 160
 | 
						|
                Call    PE_GetChannelColour
 | 
						|
                Call    S_DrawString
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
;                Mov     DX, 0A0Ch               ; DH = 10, DL = 12 (for div.)
 | 
						|
 | 
						|
                Mov     CH, 32
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            ViewCommon
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
 | 
						|
Proc            ViewFull                        ; DS:SI = pattern data
 | 
						|
                                                ; ES:DI = screen pointer
 | 
						|
                                                ; CS:BX = note data
 | 
						|
                                                ; CX = row number
 | 
						|
                                                ; DL = channel number.
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     SI, Offset ChannelMsg
 | 
						|
                Mov     BX, 9
 | 
						|
                Call    ViewCommon
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Pop     SI
 | 
						|
 | 
						|
ViewFull1:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    PE_SelectColour
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Call    Draw_3Note
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                LodsB                           ; Instrument
 | 
						|
                Call    Draw_2Instrument
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                LodsB                           ; Volume
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     ViewFull8
 | 
						|
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewFull9
 | 
						|
 | 
						|
ViewFull8:
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewFullNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewFullVEffect1
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewFullVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewFull9
 | 
						|
 | 
						|
ViewFullNoVEffect:
 | 
						|
                Mov     DL, CH
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewFull12
 | 
						|
 | 
						|
                And     DL, 0F0h
 | 
						|
                Or      DL, 2
 | 
						|
                And     AL, 7Fh         ; Filter out panning stuff.
 | 
						|
 | 
						|
ViewFull12:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, DL
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
 | 
						|
ViewFull9:
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                LodsB                           ; Command
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewFull10
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
                StosW
 | 
						|
                Jmp     ViewFull11
 | 
						|
 | 
						|
ViewFull10:
 | 
						|
                Add     AL, '@'
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewFull11:
 | 
						|
                LodsB                           ; Command value
 | 
						|
 | 
						|
                AAM     16                      ; AH = High nibble, AL = low nibble
 | 
						|
                Mov     CL, AL
 | 
						|
                Mov     AL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Mov     AL, CL
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Add     SI, 315
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 160
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Inc     CX
 | 
						|
                Dec     CH
 | 
						|
                JNZ     ViewFull1
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
EndP            ViewFull
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ViewCompress                        ; DS:SI = pattern data
 | 
						|
                                                ; ES:DI = screen pointer
 | 
						|
                                                ; CS:BX = note data
 | 
						|
                                                ; CX = row number
 | 
						|
                                                ; DL = channel number.
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     SI, Offset ChannelMsg2
 | 
						|
                Mov     BX, 8
 | 
						|
                Call    ViewCommon
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Pop     SI
 | 
						|
 | 
						|
ViewCompress1:
 | 
						|
                Push    CX
 | 
						|
                Push    DX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    PE_SelectColour
 | 
						|
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Call    Draw_3Note
 | 
						|
 | 
						|
                LodsB                           ; Instrument
 | 
						|
                Sub     CH, 4
 | 
						|
                Call    Draw_2Instrument
 | 
						|
                Add     CH, 4
 | 
						|
 | 
						|
                LodsB                           ; Volume
 | 
						|
                Mov     AH, CH
 | 
						|
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     ViewCompress8
 | 
						|
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewCompress9
 | 
						|
 | 
						|
ViewCompress8:
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewCompressNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewCompressVEffect1
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewCompressVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewCompress9
 | 
						|
 | 
						|
ViewCompressNoVEffect:
 | 
						|
                Mov     DL, CH
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewCompress12
 | 
						|
 | 
						|
                And     DL, 0F0h
 | 
						|
                Or      DL, 2
 | 
						|
                And     AL, 7Fh         ; Filter out panning stuff.
 | 
						|
 | 
						|
ViewCompress12:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, DL
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
                Mov     AH, CH
 | 
						|
 | 
						|
ViewCompress9:
 | 
						|
                LodsB                           ; Command
 | 
						|
                Sub     AH, 4
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewCompress10
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
                StosW
 | 
						|
                Jmp     ViewCompress11
 | 
						|
 | 
						|
ViewCompress10:
 | 
						|
                Add     AL, '@'
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewCompress11:
 | 
						|
                LodsB                           ; Command value
 | 
						|
                AAM     16                      ; AH = High nibble, AL = low nibble
 | 
						|
                Mov     CL, AL
 | 
						|
                Mov     AL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Mov     AL, CL
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Add     SI, 315
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 160
 | 
						|
                Pop     DX
 | 
						|
                Pop     CX
 | 
						|
                Inc     CX
 | 
						|
                Dec     CH
 | 
						|
                JNZ     ViewCompress1
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+9
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
EndP            ViewCompress
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ViewAllSmall                    ; DS:SI = pattern data
 | 
						|
                                                ; ES:DI = screen pointer
 | 
						|
                                                ; CS:BX = note data
 | 
						|
                                                ; CX = row number
 | 
						|
                                                ; DL = channel number.
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     SI, Offset ChannelMsg7
 | 
						|
                Mov     BX, 5
 | 
						|
                Call    ViewCommon
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Pop     SI
 | 
						|
 | 
						|
ViewAllSmall1:
 | 
						|
                Push    CX
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    PE_SelectColour
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Call    Draw_3Note
 | 
						|
 | 
						|
                LodsB                           ; Instrument
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewAllSmall6
 | 
						|
 | 
						|
                Mov     AL, 184
 | 
						|
                Sub     AH, 4
 | 
						|
                StosW
 | 
						|
                Jmp     ViewAllSmall7
 | 
						|
 | 
						|
ViewAllSmall6:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                ShL     AL, 4
 | 
						|
                Or      AL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                Add     AH, 4
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewAllSmall7:
 | 
						|
                LodsB                           ; Volume
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JNE     ViewAllSmall8
 | 
						|
 | 
						|
                Mov     AL, 184
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewAllSmall9
 | 
						|
 | 
						|
ViewAllSmall8:
 | 
						|
                Mov     CL, CH
 | 
						|
                Add     CL, 6
 | 
						|
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewAllSmallNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewAllSmallVEffect1
 | 
						|
 | 
						|
                Mov     AL, AH
 | 
						|
                Add     AL, 226
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Jmp     ViewAllSmall9
 | 
						|
 | 
						|
ViewAllSmallVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Mov     AH, 0
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AL, 0Ah
 | 
						|
                ShL     AL, 4
 | 
						|
                Or      AL, AH
 | 
						|
                Mov     AH, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewAllSmall9
 | 
						|
 | 
						|
ViewAllSmallNoVEffect:
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewAllSmall12
 | 
						|
 | 
						|
                Sub     CL, 2
 | 
						|
                And     AL, 7Fh         ; Filter out panning stuff.
 | 
						|
 | 
						|
ViewAllSmall12:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                ShL     AL, 4
 | 
						|
                Or      AL, AH
 | 
						|
                Mov     AH, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewAllSmall9:
 | 
						|
                LodsB                           ; Command
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewAllSmall10
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
                StosW
 | 
						|
                Jmp     ViewAllSmall11
 | 
						|
 | 
						|
ViewAllSmall10:
 | 
						|
                Add     AL, '@'
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewAllSmall11:
 | 
						|
                LodsB                           ; Command value
 | 
						|
                Add     AH, 8
 | 
						|
                StosW
 | 
						|
 | 
						|
                Add     SI, 315
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 160
 | 
						|
                Pop     CX
 | 
						|
                Inc     CX
 | 
						|
                Dec     CH
 | 
						|
                JNZ     ViewAllSmall1
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+18
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
EndP            ViewAllSmall
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ViewNote                        ; DS:SI = pattern data
 | 
						|
                                                ; ES:DI = screen pointer
 | 
						|
                                                ; CS:BX = note data
 | 
						|
                                                ; CX = row number
 | 
						|
                                                ; DL = channel number.
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     SI, Offset ChannelMsg4
 | 
						|
                Mov     BX, 1
 | 
						|
                Call    ViewCommon
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Pop     SI
 | 
						|
 | 
						|
ViewNote1:
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    PE_SelectColour
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JE      ViewNote4
 | 
						|
 | 
						|
                Call    Draw_3Note
 | 
						|
                Jmp     ViewNoteEnd
 | 
						|
 | 
						|
ViewNote4:
 | 
						|
                LodsB
 | 
						|
 | 
						|
                Test    AL, AL
 | 
						|
                JZ      ViewNote5
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Call    Draw_2Instrument
 | 
						|
                Jmp     ViewNoteEnd
 | 
						|
 | 
						|
ViewNote5:                                      ; Volume
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      ViewNote6
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewNoteNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewNoteVEffect1
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewNoteVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewNoteEnd
 | 
						|
 | 
						|
ViewNoteNoVEffect:
 | 
						|
                Mov     CL, CH
 | 
						|
                Sub     CL, 4
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewNote25
 | 
						|
 | 
						|
                Dec     CX
 | 
						|
                And     AL, 7Fh
 | 
						|
 | 
						|
ViewNote25:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                XChg    CL, AH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewNoteEnd
 | 
						|
 | 
						|
ViewNote6:
 | 
						|
                LodsW
 | 
						|
                And     AX, AX
 | 
						|
                JZ      ViewNote11
 | 
						|
 | 
						|
                Mov     CL, AH
 | 
						|
                And     AL, AL
 | 
						|
                JZ      ViewNote7
 | 
						|
 | 
						|
                Add     AL, '@'
 | 
						|
                Jmp     ViewNote8
 | 
						|
 | 
						|
ViewNote7:
 | 
						|
                Mov     AL, '.'
 | 
						|
 | 
						|
ViewNote8:
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                StosW
 | 
						|
 | 
						|
                Mov     AL, CL
 | 
						|
                AAM     16                      ; AH = High nibble, AL = low nibble
 | 
						|
                Mov     CL, AL
 | 
						|
                Mov     AL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Mov     AL, CL
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Jmp     ViewNoteEnd
 | 
						|
 | 
						|
ViewNote11:                             ; Nothing to show except dots...
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewNoteEnd:
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 160
 | 
						|
                Pop     SI
 | 
						|
                Add     SI, 320
 | 
						|
                Pop     CX
 | 
						|
                Inc     CX
 | 
						|
                Dec     CH
 | 
						|
                JNZ     ViewNote1
 | 
						|
 | 
						|
                Cmp     BP, CS:Channel
 | 
						|
                JE      ViewNote12
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+27
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
ViewNote12:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Sub     SI, (320*32)
 | 
						|
                Sub     DI, (32*160)
 | 
						|
                Mov     AL, 160
 | 
						|
                Mov     DX, CS:Row
 | 
						|
                Sub     DX, CS:TopRow
 | 
						|
 | 
						|
                Mul     DL
 | 
						|
                Add     DI, AX
 | 
						|
                Add     AX, AX
 | 
						|
                Add     SI, AX
 | 
						|
 | 
						|
                Mov     CX, CS:Row
 | 
						|
                Call    PE_SelectColour         ; CH = colour.
 | 
						|
 | 
						|
                Mov     DX, CS:PatternCursor
 | 
						|
 | 
						|
ViewNote13:
 | 
						|
                LodsB
 | 
						|
                Cmp     DL, 1
 | 
						|
                JA      ViewNote16
 | 
						|
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JNE     ViewNote15
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewNote15:
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNote16:
 | 
						|
                LodsB
 | 
						|
                Cmp     DL, 3
 | 
						|
                JA      ViewNote19
 | 
						|
 | 
						|
                Mov     DH, AL
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
                And     DH, DH
 | 
						|
                JZ      ViewNote17
 | 
						|
 | 
						|
                MovZX   AX, DH
 | 
						|
                Mov     DH, 10
 | 
						|
                Div     DH
 | 
						|
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, DH
 | 
						|
                StosW
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNote17:
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNote19:
 | 
						|
                LodsB
 | 
						|
                Cmp     DL, 5
 | 
						|
                JA      ViewNote22
 | 
						|
 | 
						|
                Mov     DH, AL
 | 
						|
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                Mov     AL, 20h
 | 
						|
                StosW
 | 
						|
 | 
						|
                Cmp     DH, 0FFh
 | 
						|
                JE      ViewNote20
 | 
						|
 | 
						|
                Mov     AH, DH
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewNoteNoVEffect2
 | 
						|
 | 
						|
                Test    DH, 80h
 | 
						|
                JZ      ViewNoteVEffect2
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewNoteVEffect2:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Mov     DH, 10
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNoteNoVEffect2:
 | 
						|
                Sub     CH, 4
 | 
						|
 | 
						|
                Test    DH, 80h
 | 
						|
                JZ      ViewNote26
 | 
						|
 | 
						|
                Dec     CH
 | 
						|
                And     DH, 7Fh
 | 
						|
 | 
						|
ViewNote26:
 | 
						|
                MovZX   AX, DH
 | 
						|
                Mov     DH, 10
 | 
						|
                Div     DH
 | 
						|
 | 
						|
                Add     AX, 3030h
 | 
						|
                XChg    CH, AH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CH
 | 
						|
                StosW
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNote20:
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     ViewNoteEndHilight
 | 
						|
 | 
						|
ViewNote22:
 | 
						|
                LodsB
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewNote23
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
                Jmp     ViewNote24
 | 
						|
 | 
						|
ViewNote23:
 | 
						|
                Add     AL, '@'
 | 
						|
 | 
						|
ViewNote24:
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                StosW
 | 
						|
 | 
						|
                LodsB
 | 
						|
                AAM     16                      ; AH = High nibble, AL = low nibble
 | 
						|
                Mov     CL, AL
 | 
						|
                Mov     AL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
                Mov     AL, CL
 | 
						|
                Call    PE_ConvHexAL
 | 
						|
 | 
						|
ViewNoteEndHilight:
 | 
						|
                Pop     DI
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+27
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
 | 
						|
EndP            ViewNote
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ViewTiny                        ; DS:SI = pattern data
 | 
						|
                                                ; ES:DI = screen pointer
 | 
						|
                                                ; CS:BX = note data
 | 
						|
                                                ; CX = row number
 | 
						|
                                                ; DL = channel number.
 | 
						|
 | 
						|
                Push    SI
 | 
						|
                Push    BX
 | 
						|
 | 
						|
                Mov     SI, Offset ChannelMsg5
 | 
						|
                Mov     BX, 0
 | 
						|
                Call    ViewCommon
 | 
						|
 | 
						|
                Pop     BX
 | 
						|
                Pop     SI
 | 
						|
 | 
						|
ViewTiny1:
 | 
						|
                Push    CX
 | 
						|
                Push    SI
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Call    PE_SelectColour
 | 
						|
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JE      ViewTiny4
 | 
						|
 | 
						|
                Call    Draw_2Note
 | 
						|
                Jmp     ViewTinyEnd
 | 
						|
 | 
						|
ViewTiny4:
 | 
						|
                LodsB
 | 
						|
                Test    AL, AL
 | 
						|
                JZ      ViewTiny5
 | 
						|
 | 
						|
                Call    Draw_2Instrument
 | 
						|
                Jmp     ViewTinyEnd
 | 
						|
 | 
						|
ViewTiny5:                                      ; Volume
 | 
						|
                LodsB
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      ViewTiny6
 | 
						|
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewTinyNoVEffect
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewTinyVEffect1
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewTinyVEffect1:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewTinyEnd
 | 
						|
 | 
						|
ViewtinyNoVEffect:
 | 
						|
                Mov     CL, CH
 | 
						|
                Sub     CL, 4
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewTiny27
 | 
						|
 | 
						|
                Dec     CX
 | 
						|
                And     AL, 7Fh
 | 
						|
 | 
						|
ViewTiny27:
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                XChg    AH, CL
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewTinyEnd
 | 
						|
 | 
						|
ViewTiny6:
 | 
						|
                LodsW
 | 
						|
                And     AX, AX
 | 
						|
                JZ      ViewTiny11
 | 
						|
 | 
						|
                Mov     CL, AH
 | 
						|
                And     AL, AL
 | 
						|
                JZ      ViewTiny7
 | 
						|
 | 
						|
                Add     AL, '@'
 | 
						|
                Jmp     ViewTiny8
 | 
						|
 | 
						|
ViewTiny7:
 | 
						|
                Mov     AL, '.'
 | 
						|
 | 
						|
ViewTiny8:
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                StosW
 | 
						|
                Add     AH, 8
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewTinyEnd
 | 
						|
 | 
						|
ViewTiny11:                             ; Nothing to show except dots...
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewTinyEnd:
 | 
						|
 | 
						|
                Pop     DI
 | 
						|
                Pop     SI
 | 
						|
                Pop     CX
 | 
						|
 | 
						|
                Add     DI, 160
 | 
						|
                Inc     CX
 | 
						|
                Add     SI, 320
 | 
						|
 | 
						|
                Dec     CH
 | 
						|
                JNZ     ViewTiny1
 | 
						|
 | 
						|
                Cmp     BP, CS:Channel
 | 
						|
                JE      ViewTiny14
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+36
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
ViewTiny14:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Sub     SI, (32*320)
 | 
						|
                Sub     DI, (32*160)
 | 
						|
                Mov     AL, 160
 | 
						|
                Mov     CX, CS:Row
 | 
						|
                Sub     CX, CS:TopRow
 | 
						|
                Mul     CL
 | 
						|
                Add     DI, AX
 | 
						|
                Add     AX, AX
 | 
						|
                Add     SI, AX
 | 
						|
 | 
						|
                Mov     CX, CS:Row
 | 
						|
                Call    PE_SelectColour         ; CH = colour.
 | 
						|
 | 
						|
                Mov     DX, CS:PatternCursor
 | 
						|
                LodsB
 | 
						|
                Cmp     DL, 1
 | 
						|
                JA      ViewTiny17
 | 
						|
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JE      ViewTinyDots
 | 
						|
 | 
						|
                Jmp     ViewTinyEndHilight
 | 
						|
 | 
						|
ViewTiny17:
 | 
						|
                LodsB                           ; Instrument
 | 
						|
                Cmp     DL, 3
 | 
						|
                JA      ViewTiny20
 | 
						|
 | 
						|
                And     AL, AL
 | 
						|
                JZ      ViewTinyDots
 | 
						|
 | 
						|
                Mov     DH, 10
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                Mov     DH, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, DH
 | 
						|
                StosW
 | 
						|
                Jmp     ViewTinyEndHilight
 | 
						|
 | 
						|
ViewTiny20:
 | 
						|
                LodsB                           ; Volume
 | 
						|
                Cmp     DL, 5
 | 
						|
                JA      ViewTiny23
 | 
						|
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      ViewTiny21
 | 
						|
 | 
						|
                Mov     AH, AL
 | 
						|
                And     AH, 7Fh
 | 
						|
                Sub     AH, 65
 | 
						|
                JC      ViewTinyNoVEffect2
 | 
						|
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewTinyVEffect2
 | 
						|
 | 
						|
                Add     AH, 60
 | 
						|
 | 
						|
ViewTinyVEffect2:
 | 
						|
                Mov     AL, AH
 | 
						|
                Xor     AH, AH
 | 
						|
                Mov     DH, 10
 | 
						|
                Div     DH
 | 
						|
                                        ; AL = effect, AH = num
 | 
						|
                Add     AX, 'A'+'0'*256
 | 
						|
                Mov     CL, AH
 | 
						|
                Mov     AH, CH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CL
 | 
						|
                StosW
 | 
						|
 | 
						|
                Jmp     ViewTinyEndHilight
 | 
						|
 | 
						|
ViewTinyNoVEffect2:
 | 
						|
                Sub     CH, 4
 | 
						|
                Test    AL, 80h
 | 
						|
                JZ      ViewTiny28
 | 
						|
 | 
						|
                Dec     CH
 | 
						|
                And     AL, 7Fh
 | 
						|
 | 
						|
ViewTiny28:
 | 
						|
                Mov     DH, 10
 | 
						|
                Xor     AH, AH
 | 
						|
                Div     DH
 | 
						|
                Add     AX, 3030h
 | 
						|
                XChg    CH, AH
 | 
						|
                StosW
 | 
						|
                Mov     AL, CH
 | 
						|
                StosW
 | 
						|
                Jmp     ViewTinyEndHilight
 | 
						|
 | 
						|
ViewTiny21:
 | 
						|
                Sub     CH, 4
 | 
						|
 | 
						|
ViewTinyDots:
 | 
						|
                Mov     AH, CH
 | 
						|
                Mov     AL, 173
 | 
						|
                StosW
 | 
						|
                StosW
 | 
						|
                Jmp     ViewTinyEndHilight
 | 
						|
 | 
						|
ViewTiny23:
 | 
						|
                LodsB                           ; CommandValue.
 | 
						|
                And     AL, AL
 | 
						|
                JNZ     ViewTiny24
 | 
						|
 | 
						|
                Mov     AL, '.'
 | 
						|
                Jmp     ViewTiny25
 | 
						|
 | 
						|
ViewTiny24:
 | 
						|
                Add     AL, '@'
 | 
						|
 | 
						|
ViewTiny25:
 | 
						|
                Mov     AH, CH
 | 
						|
                Sub     AH, 4
 | 
						|
                StosW
 | 
						|
 | 
						|
                Add     AH, 8
 | 
						|
                LodsB
 | 
						|
                StosW
 | 
						|
 | 
						|
ViewTinyEndHilight:
 | 
						|
                Pop     DI
 | 
						|
 | 
						|
                Mov     DX, BP
 | 
						|
                Mov     BP, Offset CursorPositions+36
 | 
						|
                Jmp     PE_HilightView
 | 
						|
 | 
						|
EndP            ViewTiny
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleDivision Far
 | 
						|
 | 
						|
                Xor     ViewDivision, 1
 | 
						|
 | 
						|
                Call    PE_CheckWidth
 | 
						|
                JC      PEFunction_ToggleDivision1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_ToggleDivision1:
 | 
						|
                Xor     ViewDivision, 1
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleDivision
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl0 Far
 | 
						|
 | 
						|
                Mov     AX, 0
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl0
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl1 Far
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl1
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl2 Far
 | 
						|
 | 
						|
                Mov     AX, 2
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl2
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl3 Far
 | 
						|
 | 
						|
                Mov     AX, 3
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl3
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl4 Far
 | 
						|
 | 
						|
                Mov     AX, 4
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl4
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl5 Far
 | 
						|
 | 
						|
                Mov     AX, 5
 | 
						|
                Jmp     PE_FastView
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl5
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_QuickViewSetup Far           ; CX = num with div
 | 
						|
                                                        ; BX = num without div
 | 
						|
                                                        ; AH = type.
 | 
						|
                Cmp     ViewDivision, 0
 | 
						|
                JNE     PEFunction_QuickViewSetup1
 | 
						|
 | 
						|
                Mov     CX, BX
 | 
						|
                Mov     BX, 100
 | 
						|
                Sub     BX, CX
 | 
						|
 | 
						|
PEFunction_QuickViewSetup1:
 | 
						|
                Push    CS
 | 
						|
                Pop     ES
 | 
						|
                Mov     DI, Offset ViewChannels
 | 
						|
 | 
						|
PEFunction_QuickViewSetup3:
 | 
						|
                StosW
 | 
						|
 | 
						|
                Inc     AL
 | 
						|
                Loop    PEFunction_QuickViewSetup3
 | 
						|
 | 
						|
                Mov     CX, BX
 | 
						|
                Mov     AX, 0FFFFh
 | 
						|
                Rep     StosW
 | 
						|
 | 
						|
                Call    PE_CheckWidth
 | 
						|
 | 
						|
                Cmp     ViewChannelTracking, 0
 | 
						|
                JNE     PEFunction_QuickViewSetup2
 | 
						|
 | 
						|
                Call    PEFunction_ToggleTracking
 | 
						|
 | 
						|
PEFunction_QuickViewSetup2:
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_QuickViewSetup
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_Shift1 Far
 | 
						|
 | 
						|
                Mov     AX, 100h
 | 
						|
                Mov     BX, 7
 | 
						|
                Mov     CX, 6
 | 
						|
                Jmp     PEFunction_QuickViewSetup
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_Shift1
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_Shift2 Far
 | 
						|
 | 
						|
                Mov     AX, 200h
 | 
						|
                Mov     BX, 10
 | 
						|
                Mov     CX, 9
 | 
						|
                Jmp     PEFunction_QuickViewSetup
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_Shift2
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_Shift3 Far
 | 
						|
 | 
						|
                Mov     AX, 300h
 | 
						|
                Mov     BX, 24
 | 
						|
                Mov     CX, 18
 | 
						|
                Jmp     PEFunction_QuickViewSetup
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_Shift3
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_Shift4 Far
 | 
						|
 | 
						|
                Mov     AX, 400h
 | 
						|
                Mov     BX, 36
 | 
						|
                Mov     CX, 24
 | 
						|
                Jmp     PEFunction_QuickViewSetup
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_Shift4
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_FastView Far
 | 
						|
 | 
						|
                Dec     AX              ; AL = viewmethod
 | 
						|
                Mov     CL, AL
 | 
						|
                Mov     BX, Channel
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
                Cmp     CL, 0FFh
 | 
						|
                JE      PE_FastView4
 | 
						|
 | 
						|
PE_FastView1:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_FastView2
 | 
						|
 | 
						|
                Cmp     AL, BL
 | 
						|
                JE      PE_FastView2
 | 
						|
                Jmp     PE_FastView1
 | 
						|
 | 
						|
PE_FastView2:
 | 
						|
                Sub     SI, 2
 | 
						|
                Push    AX
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Mov     AL, BL
 | 
						|
                Mov     AH, CL
 | 
						|
                Mov     [SI], AX
 | 
						|
 | 
						|
                Call    PE_CheckWidth
 | 
						|
                JC      PE_FastView3
 | 
						|
 | 
						|
                Add     SP, 4
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_FastView3:
 | 
						|
                Pop     SI
 | 
						|
                Pop     AX
 | 
						|
                Mov     [SI], AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_FastView4:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_FastView6
 | 
						|
 | 
						|
                Cmp     AL, BL
 | 
						|
                JNE     PE_FastView4
 | 
						|
 | 
						|
PE_FastView5:
 | 
						|
                LodsW
 | 
						|
                Mov     [SI-4], AX
 | 
						|
                Cmp     AX, 0FFFFh
 | 
						|
                JNE     PE_FastView5
 | 
						|
 | 
						|
                Call    PE_CheckWidth
 | 
						|
 | 
						|
PE_FastView6:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_FastView
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ViewLeft Far
 | 
						|
                                                ; First find current channel.
 | 
						|
                Mov     DX, Channel
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
PEFunction_ViewLeft1:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PEFunction_ViewLeft2
 | 
						|
 | 
						|
                Cmp     AL, DL
 | 
						|
                JNE     PEFunction_ViewLeft1
 | 
						|
 | 
						|
                Cmp     SI, Offset ViewChannels+2
 | 
						|
                JE      PEFunction_ViewLeft2
 | 
						|
 | 
						|
                Mov     DL, [SI-4]
 | 
						|
                Mov     Channel, DX
 | 
						|
 | 
						|
PEFunction_ViewLeft2:                           ; Else decrease channel
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ViewLeft
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ViewRight Far
 | 
						|
 | 
						|
                Mov     DX, Channel
 | 
						|
                Mov     SI, Offset ViewChannels
 | 
						|
 | 
						|
PEFunction_ViewRight1:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PEFunction_ViewRight2
 | 
						|
 | 
						|
                Cmp     AL, DL
 | 
						|
                JNE     PEFunction_ViewRight1
 | 
						|
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PEFunction_ViewRight2
 | 
						|
 | 
						|
                Xor     AH, AH
 | 
						|
                Mov     Channel, AX
 | 
						|
 | 
						|
PEFunction_ViewRight2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ViewRight
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltRight Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, 64
 | 
						|
                JAE     PEFunction_AltRight1
 | 
						|
 | 
						|
                Mov     Channel, AX
 | 
						|
 | 
						|
PEFunction_AltRight1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltRight
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltLeft Far
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                And     AX, AX
 | 
						|
                JZ      PEFunction_AltLeft1
 | 
						|
 | 
						|
                Dec     AX
 | 
						|
                Mov     Channel, AX
 | 
						|
 | 
						|
PEFunction_AltLeft1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltLeft
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_Home Far
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Sub     AL, 1
 | 
						|
                AdC     AL, 0
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_Home
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Ctrl_End Far
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Cmp     AX, MaxRow
 | 
						|
                AdC     AX, 0
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Ctrl_End
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltUp Far
 | 
						|
 | 
						|
                Mov     AX, TopRow
 | 
						|
                Mov     BX, Row
 | 
						|
                Test    AX, AX
 | 
						|
                JZ      PEFunction_AltUp1
 | 
						|
 | 
						|
                Dec     AX
 | 
						|
                Mov     TopRow, AX
 | 
						|
                Sub     BX, AX
 | 
						|
                Cmp     BX, 32
 | 
						|
                JB      PEFunction_AltUp1
 | 
						|
 | 
						|
                Dec     Row
 | 
						|
 | 
						|
PEFunction_AltUp1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltUp
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_AltDown Far
 | 
						|
 | 
						|
                Mov     AX, TopRow
 | 
						|
                Mov     BX, MaxRow
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
                Sub     BX, AX
 | 
						|
                Cmp     BX, 31
 | 
						|
                JB      PEFunction_AltDown1
 | 
						|
 | 
						|
                Mov     TopRow, AX
 | 
						|
                Cmp     AX, Row
 | 
						|
                JBE     PEFunction_AltDown1
 | 
						|
 | 
						|
                Mov     Row, AX
 | 
						|
 | 
						|
PEFunction_AltDown1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_AltDown
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetLastInstrument Far
 | 
						|
 | 
						|
                MovZX   BX, [CS:LastInstrument]
 | 
						|
                Dec     BX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetLastInstrument
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SwapInstruments Far                   ; DH/DL = instruments
 | 
						|
                                                         ; to swap.
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     DS, AX
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     TempVariableArea2, DX
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Call    PE_GetMaxPattern
 | 
						|
                Inc     AX
 | 
						|
                Mov     TempVariableArea4, AX           ; 1=OldPattern
 | 
						|
                                                        ; 2=Instrument swap
 | 
						|
                                                        ; 3=Current pattern
 | 
						|
                                                        ; 4=Max pattern
 | 
						|
 | 
						|
                                                        ; OK...
 | 
						|
                Mov     AL, 1
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                                                        ; Draw Box first...
 | 
						|
                Call    S_DrawSmallBox
 | 
						|
 | 
						|
                Mov     TempVariableArea3, 0
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
PE_SwapInstruments1:                            ; Draw % Complete on screen first
 | 
						|
                Mov     AX, 100
 | 
						|
                Mul     TempVariableArea3
 | 
						|
                Div     TempVariableArea4       ; AX = percentage
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset CompleteMsg
 | 
						|
                Mov     DI, (34+26*80)*2
 | 
						|
                Mov     AH, 20h
 | 
						|
                Call    S_DrawString
 | 
						|
                Add     SP, 2                   ; OK message is on screen.
 | 
						|
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern           ; Next pattern should be in mem
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Inc     AX
 | 
						|
                Mov     CX, 64
 | 
						|
                Mul     CX
 | 
						|
                                                ; AX = number of "blocks"
 | 
						|
                Mov     CX, AX
 | 
						|
                Mov     DX, TempVariableArea2
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     SI, 1
 | 
						|
 | 
						|
PE_SwapInstruments3:
 | 
						|
                Mov     AL, [SI]
 | 
						|
                Cmp     AL, DL
 | 
						|
                JNE     PE_SwapInstruments4
 | 
						|
 | 
						|
                Mov     AL, DH
 | 
						|
                And     AL, 7Fh
 | 
						|
                Mov     [SI], AL
 | 
						|
                Jmp     PE_SwapInstruments5
 | 
						|
 | 
						|
PE_SwapInstruments4:
 | 
						|
                Test    DH, 80h
 | 
						|
                JNZ     PE_SwapInstruments5
 | 
						|
 | 
						|
                Cmp     AL, DH
 | 
						|
                JNE     PE_SwapInstruments5
 | 
						|
 | 
						|
                Mov     [SI], DL
 | 
						|
 | 
						|
PE_SwapInstruments5:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PE_SwapInstruments3
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
                                                ; OK.. onto next pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, TempVariableArea4
 | 
						|
                JAE     PE_SwapInstruments2
 | 
						|
 | 
						|
                Mov     TempVariableArea3, AX
 | 
						|
                Jmp     PE_SwapInstruments1
 | 
						|
 | 
						|
PE_SwapInstruments2:
 | 
						|
                Mov     AL, 0
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SwapInstruments
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_InsertInstrument Far                  ; DL = instrument
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     TempVariableArea2, DX
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Call    PE_GetMaxPattern
 | 
						|
                Inc     AX
 | 
						|
                Mov     TempVariableArea4, AX           ; 1=OldPattern
 | 
						|
                                                        ; 2=Instrument swap
 | 
						|
                                                        ; 3=Current pattern
 | 
						|
                                                        ; 4=Max pattern
 | 
						|
 | 
						|
                                                        ; OK...
 | 
						|
                Mov     AL, 1
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                                                        ; Draw Box first...
 | 
						|
                Call    S_DrawSmallBox
 | 
						|
 | 
						|
                Mov     TempVariableArea3, 0
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
PE_InsertInstrument1:                   ; Draw % Complete on screen first
 | 
						|
                Mov     AX, 100
 | 
						|
                Mul     TempVariableArea3
 | 
						|
                Div     TempVariableArea4       ; AX = percentage
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset CompleteMsg
 | 
						|
                Mov     DI, (34+26*80)*2
 | 
						|
                Mov     AH, 20h
 | 
						|
                Call    S_DrawString
 | 
						|
                Add     SP, 2                   ; OK message is on screen.
 | 
						|
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern           ; Next pattern should be in mem
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Inc     AX
 | 
						|
                Mov     CX, 64
 | 
						|
                Mul     CX
 | 
						|
                                                ; AX = number of "blocks"
 | 
						|
                Mov     CX, AX
 | 
						|
                Mov     DX, TempVariableArea2
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     SI, 1
 | 
						|
 | 
						|
PE_InsertInstrument3:
 | 
						|
                Cmp     [SI], DL
 | 
						|
                JB      PE_InsertInstrument4
 | 
						|
 | 
						|
                Cmp     Byte Ptr [SI], 99
 | 
						|
                JAE     PE_InsertInstrument4
 | 
						|
 | 
						|
                Inc     Byte Ptr [SI]
 | 
						|
 | 
						|
PE_InsertInstrument4:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PE_InsertInstrument3
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
                                                ; OK.. onto next pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, TempVariableArea4
 | 
						|
                JAE     PE_InsertInstrument2
 | 
						|
 | 
						|
                Mov     TempVariableArea3, AX
 | 
						|
                Jmp     PE_InsertInstrument1
 | 
						|
 | 
						|
PE_InsertInstrument2:
 | 
						|
                Mov     AL, 0
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_InsertInstrument
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_DeleteInstrument Far                  ; DL = instrument
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     TempVariableArea2, DX
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Call    PE_GetMaxPattern
 | 
						|
                Inc     AX
 | 
						|
                Mov     TempVariableArea4, AX           ; 1=OldPattern
 | 
						|
                                                        ; 2=Instrument swap
 | 
						|
                                                        ; 3=Current pattern
 | 
						|
                                                        ; 4=Max pattern
 | 
						|
 | 
						|
                                                        ; OK...
 | 
						|
                Mov     AL, 1
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                                                        ; Draw Box first...
 | 
						|
                Call    S_DrawSmallBox
 | 
						|
 | 
						|
                Mov     TempVariableArea3, 0
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
PE_DeleteInstrument1:                   ; Draw % Complete on screen first
 | 
						|
                Mov     AX, 100
 | 
						|
                Mul     TempVariableArea3
 | 
						|
                Div     TempVariableArea4       ; AX = percentage
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset CompleteMsg
 | 
						|
                Mov     DI, (34+26*80)*2
 | 
						|
                Mov     AH, 20h
 | 
						|
                Call    S_DrawString
 | 
						|
                Add     SP, 2                   ; OK message is on screen.
 | 
						|
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern           ; Next pattern should be in mem
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Inc     AX
 | 
						|
                Mov     CX, 64
 | 
						|
                Mul     CX
 | 
						|
                                                ; AX = number of "blocks"
 | 
						|
                Mov     CX, AX
 | 
						|
                Mov     DX, TempVariableArea2
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Mov     SI, 1
 | 
						|
 | 
						|
PE_DeleteInstrument3:
 | 
						|
                Cmp     [SI], DL
 | 
						|
                JB      PE_DeleteInstrument4
 | 
						|
 | 
						|
                Dec     Byte Ptr [SI]
 | 
						|
 | 
						|
PE_DeleteInstrument4:
 | 
						|
                Add     SI, 5
 | 
						|
                Loop    PE_DeleteInstrument3
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
                                                ; OK.. onto next pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, TempVariableArea4
 | 
						|
                JAE     PE_DeleteInstrument2
 | 
						|
 | 
						|
                Mov     TempVariableArea3, AX
 | 
						|
                Jmp     PE_DeleteInstrument1
 | 
						|
 | 
						|
PE_DeleteInstrument2:
 | 
						|
                Mov     AL, 0
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_DeleteInstrument
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_UpdateInstruments Far                 ; ES:DI = instrument table
 | 
						|
                                                         ; DL = instrument number
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     Byte Ptr TempVariableArea2, DL
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
                Mov     TempVariableArea5, ES
 | 
						|
                Mov     TempVariableArea6, DI
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Call    PE_GetMaxPattern
 | 
						|
                Inc     AX
 | 
						|
                Mov     TempVariableArea4, AX           ; 1=OldPattern
 | 
						|
                                                        ; 2=Instrument
 | 
						|
                                                        ; 3=Current pattern
 | 
						|
                                                        ; 4=Max pattern
 | 
						|
                                                        ; 5=ES
 | 
						|
                                                        ; 6=DI
 | 
						|
 | 
						|
                Mov     AL, 1
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                                                        ; Draw Box first...
 | 
						|
                Call    S_DrawSmallBox
 | 
						|
 | 
						|
                Mov     TempVariableArea3, 0
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
PE_UpdateInstruments1:                            ; Draw % Complete on screen first
 | 
						|
                Mov     AX, 100
 | 
						|
                Mul     TempVariableArea3
 | 
						|
                Div     TempVariableArea4       ; AX = percentage
 | 
						|
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset CompleteMsg
 | 
						|
                Mov     DI, (34+26*80)*2
 | 
						|
                Mov     AH, 20h
 | 
						|
                Call    S_DrawString
 | 
						|
                Pop     AX                      ; Remove AX from stack
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern           ; Next pattern should be in mem
 | 
						|
 | 
						|
                Mov     AX, MaxRow
 | 
						|
                Inc     AX
 | 
						|
                Mov     CX, 64
 | 
						|
                Mul     CX
 | 
						|
                                                ; AX = number of "blocks"
 | 
						|
                Mov     CX, AX
 | 
						|
                Mov     BL, CS:Byte Ptr TempVariableArea2
 | 
						|
                Mov     ES, CS:TempVariableArea5
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                Xor     SI, SI
 | 
						|
 | 
						|
PE_UpdateInstruments3:
 | 
						|
                LodsW
 | 
						|
                Cmp     AL, NONOTE
 | 
						|
                JAE     PE_UpdateInstrument4
 | 
						|
 | 
						|
                And     AH, AH                  ; AH = instrument
 | 
						|
                JZ      PE_UpdateInstrument4
 | 
						|
 | 
						|
                Xor     DX, DX
 | 
						|
                Mov     DI, CS:TempVariableArea6
 | 
						|
 | 
						|
PE_UpdateInstrument5:
 | 
						|
                Cmp     AX, [ES:DI]
 | 
						|
                JE      PE_UpdateInstrument7
 | 
						|
 | 
						|
;                Add     DI, 2
 | 
						|
                ScasW
 | 
						|
                Inc     DX                      ; Not it...
 | 
						|
                Cmp     DX, 120
 | 
						|
                JB      PE_UpdateInstrument5
 | 
						|
 | 
						|
                Jmp     PE_UpdateInstrument4
 | 
						|
 | 
						|
PE_UpdateInstrument7:
 | 
						|
                Mov     DH, BL
 | 
						|
                Mov     [DS:SI-2], DX
 | 
						|
 | 
						|
 | 
						|
PE_UpdateInstrument4:
 | 
						|
                Add     SI, 3
 | 
						|
                Loop    PE_UpdateInstruments3
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
                                                ; OK.. onto next pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea3
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, TempVariableArea4
 | 
						|
                JAE     PE_UpdateInstruments2
 | 
						|
 | 
						|
                Mov     TempVariableArea3, AX
 | 
						|
                Jmp     PE_UpdateInstruments1
 | 
						|
 | 
						|
PE_UpdateInstruments2:
 | 
						|
                Mov     AL, 0
 | 
						|
                Call    S_SetDirectMode
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_UpdateInstruments
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Alt_F9 Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Call    Music_ToggleChannel
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Alt_F9
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_MuteNext Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Call    PEFunction_Alt_F9
 | 
						|
                Jmp     PEFunction_Tab
 | 
						|
 | 
						|
EndP            PEFunction_MuteNext
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_MutePrevious Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Sub     Channel, 1
 | 
						|
                AdC     Channel, 0
 | 
						|
                Jmp     PEFunction_Alt_F9
 | 
						|
 | 
						|
EndP            PEFunction_MutePrevious
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Alt_F10 Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Call    Music_SoloChannel
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Alt_F10
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SoloGotoNext Far
 | 
						|
 | 
						|
                Call    PEFunction_Alt_F10
 | 
						|
                Jmp     PEFunction_Tab
 | 
						|
 | 
						|
EndP            PEFunction_SoloGotoNext
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_UnmuteAll Far
 | 
						|
 | 
						|
                Call    Music_UnmuteAll
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_UnmuteAll
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ShowOrder Far                        ; DX = order.
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Mov     CX, 32
 | 
						|
 | 
						|
                Mov     DI, (2+15*80)*2+1
 | 
						|
                Mov     BX, TopOrder
 | 
						|
 | 
						|
PE_ShowOrder1:
 | 
						|
                Mov     AL, 23h
 | 
						|
                Cmp     BX, DX
 | 
						|
                JE      PE_ShowOrder2
 | 
						|
 | 
						|
                Mov     AL, 20h
 | 
						|
 | 
						|
PE_ShowOrder2:
 | 
						|
                StosB
 | 
						|
                Inc     DI
 | 
						|
                StosB
 | 
						|
                Inc     DI
 | 
						|
                StosB
 | 
						|
 | 
						|
                Add     DI, 155
 | 
						|
                Inc     BX
 | 
						|
                Loop    PE_ShowOrder1
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ShowOrder
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_PlayCurrentPosition Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Call    I_ClearTables
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     BX, MaxRow
 | 
						|
                Inc     BX
 | 
						|
                Mov     CX, Row
 | 
						|
 | 
						|
                Call    Music_PlayPattern
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_PlayCurrentPosition
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_SetPlayMark Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     PlayMarkOn, 1     ; If on..
 | 
						|
                JNE     PEFunction_SetPlayMarkNew
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Cmp     AX, PlayMarkPattern
 | 
						|
                JNE     PEFunction_SetPlayMarkNew
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Cmp     AX, PlayMarkRow
 | 
						|
                JNe     PEFunction_SetPlayMarkNew
 | 
						|
 | 
						|
                Mov     PlayMarkOn, 0
 | 
						|
                Jmp     PEFunction_SetPlayMarkEnd
 | 
						|
 | 
						|
PEFunction_SetPlayMarkNew:
 | 
						|
                Mov     PlayMarkOn, 1
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     PlayMarkPattern, AX
 | 
						|
                Mov     AX, Row
 | 
						|
                Mov     PlayMarkRow, AX
 | 
						|
 | 
						|
PEFunction_SetPlayMarkEnd:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_SetPlayMark
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_F7 Far                       ; If no mark is set, use
 | 
						|
                                                ; current pattern & row
 | 
						|
                Call    I_ClearTables
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     CX, PatternNumber
 | 
						|
                Mov     BX, Row
 | 
						|
 | 
						|
                Cmp     PlayMarkOn, 1
 | 
						|
                JNE     PE_F7_1
 | 
						|
 | 
						|
                Mov     CX, PlayMarkPattern
 | 
						|
                Mov     BX, PlayMarkRow
 | 
						|
 | 
						|
PE_F7_1:
 | 
						|
                Mov     SI, Order
 | 
						|
 | 
						|
                Call    Music_GetSongSegment
 | 
						|
                Mov     ES, AX
 | 
						|
 | 
						|
                Cmp     CL, [ES:SI+100h]
 | 
						|
                JNE     PE_F7_3
 | 
						|
 | 
						|
                Mov     AX, SI
 | 
						|
                Jmp     PE_F7_4
 | 
						|
 | 
						|
PE_F7_3:
 | 
						|
                Mov     AL, CL                  ; AL = pattern.
 | 
						|
                Mov     DI, 100h
 | 
						|
                Mov     CX, 256
 | 
						|
 | 
						|
                RepNE   ScasB
 | 
						|
                JNE     PE_F7_2
 | 
						|
 | 
						|
                Mov     AX, DI
 | 
						|
                Sub     AX, 101h                ; AX = order.
 | 
						|
 | 
						|
PE_F7_4:
 | 
						|
                Call    Music_PlayPartSong
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_F7_2:
 | 
						|
                Mov     CX, BX
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     BX, MaxRow
 | 
						|
                Inc     BX
 | 
						|
                Call    Music_PlayPattern
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_F7
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleTracking Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset NoViewChannelTrackingMsg
 | 
						|
                Xor     ViewChannelTracking, 1
 | 
						|
                JZ      PEFunction_ToggleTracking1
 | 
						|
 | 
						|
                Mov     SI, Offset ViewChannelTrackingMsg
 | 
						|
 | 
						|
PEFunction_ToggleTracking1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleTracking
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleRowHilight Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset NoRowHilightMsg
 | 
						|
                Xor     CentraliseCursor, 2
 | 
						|
                Test    CentraliseCursor, 2
 | 
						|
                JZ      PEFunction_ToggleRowHilight1
 | 
						|
 | 
						|
                Mov     SI, Offset RowHilightMsg
 | 
						|
 | 
						|
PEFunction_ToggleRowHilight1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleRowHilight
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleCentralise Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset NoCentraliseCursorMsg
 | 
						|
                Xor     CentraliseCursor, 1
 | 
						|
                Test    CentraliseCursor, 1
 | 
						|
                JZ      PEFunction_ToggleCentralise1
 | 
						|
 | 
						|
                Mov     SI, Offset CentraliseCursorMsg
 | 
						|
 | 
						|
PEFunction_ToggleCentralise1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleCentralise
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_ToggleTrace Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset NoTraceMsg
 | 
						|
                Xor     TracePlayback, 1
 | 
						|
                JZ      PEFunction_ToggleTrace1
 | 
						|
 | 
						|
                Mov     SI, Offset TraceMsg
 | 
						|
 | 
						|
PEFunction_ToggleTrace1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AL, TracePlayback
 | 
						|
                Call    K_SetScrollLock
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_ToggleTrace
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_GetPatternConfigOffset Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     DX, Offset KeySignature
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_GetPatternConfigOffset
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ReleaseUndoMemory
 | 
						|
 | 
						|
                Test    AX, AX
 | 
						|
                JZ      ReleaseUndoMemoryEnd
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                And     AH, 0F0h
 | 
						|
                Cmp     AH, 0A0h
 | 
						|
                Pop     AX
 | 
						|
                JE      ReleaseUndoMemoryEMS
 | 
						|
 | 
						|
ReleaseUndoMemoryConventional:
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Mov     ES, AX
 | 
						|
                Mov     AH, 49h
 | 
						|
                Int     21h
 | 
						|
 | 
						|
                Pop     ES
 | 
						|
                Ret
 | 
						|
 | 
						|
ReleaseUndoMemoryEMS:
 | 
						|
                And     AX, 0FFFh
 | 
						|
                Call    E_ReleaseEMS
 | 
						|
 | 
						|
ReleaseUndoMemoryEnd:
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            ReleaseUndoMemory
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_AddToUndoBuffer Far          ; 1) Release oldest data.
 | 
						|
                                                ; 2) Shift all stuff down.
 | 
						|
                                                ; 3) Store newest data.
 | 
						|
 | 
						|
                                                ; Parameter: DI = buffer TYPE.
 | 
						|
 | 
						|
                PushA
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, DI
 | 
						|
                Cmp     AL, 22
 | 
						|
                JE      PE_NotModified
 | 
						|
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
 | 
						|
PE_NotModified:
 | 
						|
        ; Error maintenance... sorta
 | 
						|
                Push    CS
 | 
						|
                Push    Offset PE_AddToUndoBufferEnd
 | 
						|
                Push    AX                      ; Just for stack alignment
 | 
						|
 | 
						|
                Call    GetPatternLength        ; Get's pattern length in DX
 | 
						|
 | 
						|
                Add     SP, 6
 | 
						|
        ; For GetPatternLength's error stuff..
 | 
						|
 | 
						|
                Add     DX, 8
 | 
						|
                JNC     PE_AddToUndoBuffer3
 | 
						|
 | 
						|
                Mov     DI, Offset O1_PatternTooLongList
 | 
						|
                Mov     CX, 2
 | 
						|
                Call    M_Object1List
 | 
						|
                Jmp     PE_AddToUndoBufferEnd
 | 
						|
 | 
						|
PE_AddToUndoBuffer3:
 | 
						|
;               ClC             ; Carry already not set to get here - for
 | 
						|
                                ; Non essential EMS allocation
 | 
						|
                MovZX   EAX, DX
 | 
						|
                Call    E_AllocateEMS
 | 
						|
                Test    AX, AX
 | 
						|
                JZ      PE_AddToUndoBuffer1     ; No EMS allocated?
 | 
						|
 | 
						|
                Call    E_MapAvailableEMSMemory
 | 
						|
 | 
						|
                Or      AH, 0A0h                ; EMS tag
 | 
						|
                Push    AX
 | 
						|
                Call    E_GetEMSPageFrame
 | 
						|
                Push    AX
 | 
						|
                Jmp     PE_AddToUndoBuffer4
 | 
						|
 | 
						|
PE_AddToUndoBuffer1:
 | 
						|
                Mov     BX, DX          ; BX = length of pattern.
 | 
						|
                Add     BX, 15
 | 
						|
                RCR     BX, 1
 | 
						|
                ShR     BX, 3
 | 
						|
 | 
						|
                Mov     AH, 48h
 | 
						|
                Int     21h
 | 
						|
                JC      PE_AddToUndoBufferEnd
 | 
						|
 | 
						|
                Push    AX              ; Handle
 | 
						|
                Push    AX              ; Memory region
 | 
						|
 | 
						|
PE_AddToUndoBuffer4:
 | 
						|
                Mov     SI, Offset UndoBuffer+36
 | 
						|
                Mov     AX, [SI]
 | 
						|
                Call    ReleaseUndoMemory
 | 
						|
 | 
						|
                Mov     CX, 9
 | 
						|
 | 
						|
PE_AddToUndoBuffer2:
 | 
						|
                Mov     EAX, [SI-4]
 | 
						|
                Mov     [SI], EAX
 | 
						|
 | 
						|
                Sub     SI, 4
 | 
						|
                Loop    PE_AddToUndoBuffer2
 | 
						|
 | 
						|
                Pop     ES
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Mov     [SI], AX
 | 
						|
                Mov     [SI+2], DI
 | 
						|
 | 
						|
                Sub     DX, 8
 | 
						|
                Xor     DI, DI          ; ES:DI points to data, DX = length
 | 
						|
 | 
						|
                Call    EncodePattern
 | 
						|
 | 
						|
PE_AddToUndoBufferEnd:
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                PopA
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_AddToUndoBuffer
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_ClearUndoBuffer Far
 | 
						|
 | 
						|
                Push    EAX
 | 
						|
                Push    CX
 | 
						|
                Push    DS
 | 
						|
                Push    SI
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     CX, 10
 | 
						|
                Mov     SI, Offset UndoBuffer
 | 
						|
 | 
						|
PE_ClearUndoBuffer1:
 | 
						|
                Mov     AX, [SI]
 | 
						|
                Call    ReleaseUndoMemory
 | 
						|
 | 
						|
                Xor     EAX, EAX
 | 
						|
                Mov     [SI], EAX
 | 
						|
 | 
						|
                Add     SI, 4
 | 
						|
 | 
						|
                Loop    PE_ClearUndoBuffer1
 | 
						|
 | 
						|
                Pop     SI
 | 
						|
                Pop     DS
 | 
						|
                Pop     CX
 | 
						|
                Pop     EAX
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_ClearUndoBuffer
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_Undo Far
 | 
						|
 | 
						|
                Mov     SelectUndo, 0
 | 
						|
 | 
						|
                Mov     DI, Offset O1_UndoList
 | 
						|
                Mov     CX, 3
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_Undo
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_DrawUndo Far
 | 
						|
 | 
						|
                        Assume DS:Pattern
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Mov     CX, 10
 | 
						|
                Mov     DI, (21+24*80)*2
 | 
						|
                Mov     BX, Offset UndoBuffer+2
 | 
						|
 | 
						|
PEFunction_DrawUndo1:
 | 
						|
                Push    DI
 | 
						|
 | 
						|
                Mov     SI, [BX]
 | 
						|
                Mov     AX, SI
 | 
						|
                And     SI, 0FFh
 | 
						|
                Add     SI, SI
 | 
						|
 | 
						|
                MovZX   AX, AH
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Mov     SI, [UndoBufferTypes+SI]
 | 
						|
                Mov     AH, 2
 | 
						|
                Call    S_DrawString
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Add     BX, 4
 | 
						|
                Pop     DI
 | 
						|
                Add     DI, 160
 | 
						|
                Loop    PEFunction_DrawUndo1
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_DrawUndo
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_PreUndo Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Call    S_GetDestination
 | 
						|
                Mov     AX, 160
 | 
						|
                Mul     SelectUndo
 | 
						|
                Add     AX, (20+24*80)*2+1
 | 
						|
                Mov     DI, AX
 | 
						|
 | 
						|
                Mov     CX, 40
 | 
						|
                Mov     AL, 30h
 | 
						|
 | 
						|
PEFunction_PreUndo1:
 | 
						|
                StosB
 | 
						|
                Inc     DI
 | 
						|
                Loop    PEFunction_PreUndo1
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_PreUndo
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEFunction_PostUndo Far
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     BX, SelectUndo
 | 
						|
 | 
						|
                Cmp     CX, 1C8h
 | 
						|
                JE      PEFunction_PostUndoUp
 | 
						|
 | 
						|
                Cmp     CX, 1D0h
 | 
						|
                JE      PEFunction_PostUndoDown
 | 
						|
 | 
						|
                Cmp     CX, 11Ch        ; Enter
 | 
						|
                JE      PEFunction_PostUndoEnter
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_PostUndoUp:
 | 
						|
                Sub     BL, 1
 | 
						|
                AdC     BL, 0
 | 
						|
                Jmp     PEFunction_PostUndoShift
 | 
						|
 | 
						|
PEFunction_PostUndoDown:
 | 
						|
                Cmp     BX, 8
 | 
						|
                JA      PEFunction_PostUndoShift
 | 
						|
 | 
						|
                Inc     BX
 | 
						|
 | 
						|
PEFunction_PostUndoShift:
 | 
						|
                Mov     SelectUndo, BX
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PEFunction_PostUndoEnter:
 | 
						|
                ShL     BX, 2
 | 
						|
                Add     BX, Offset UndoBuffer
 | 
						|
 | 
						|
                Mov     CX, [BX+2]
 | 
						|
                JCXZ    PEFunction_PostUndoEnd
 | 
						|
 | 
						|
                Push    Word Ptr [BX]
 | 
						|
 | 
						|
                Mov     DI, 21
 | 
						|
                Call    PE_AddToUndoBuffer
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
                Mov     CH, AH
 | 
						|
                And     CH, 0F0h
 | 
						|
                Cmp     CH, 0A0h
 | 
						|
                JNE     PEFunction_PostUndoEnterEnd
 | 
						|
 | 
						|
PEFunction_PostUndoEMS:
 | 
						|
                And     AX, 0FFFh
 | 
						|
                Call    E_MapAvailableEMSMemory
 | 
						|
                Call    E_GetEMSPageFrame
 | 
						|
 | 
						|
PEFunction_PostUndoEnterEnd:
 | 
						|
                Mov     DS, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
                Xor     SI, SI
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Xor     BX, BX
 | 
						|
                Mov     CL, 64
 | 
						|
                Mov     CH, Byte Ptr [CS:MaxRow]
 | 
						|
                Inc     CH
 | 
						|
                Call    NetworkPatternBlock
 | 
						|
 | 
						|
PEFunction_PostUndoEnd:
 | 
						|
                Mov     AX, 4
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEFunction_PostUndo
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            ToggleFastVolume Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset NoFastVolumeMsg
 | 
						|
                Xor     CentraliseCursor, 4
 | 
						|
                Test    CentraliseCursor, 4
 | 
						|
                JZ      ToggleFastVolume3
 | 
						|
 | 
						|
                Push    DS
 | 
						|
 | 
						|
                Mov     DI, Offset O1_GetFastAmpList
 | 
						|
                Mov     CX, 3
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Cmp     DX, 1
 | 
						|
                JNE     ToggleFastVolume2
 | 
						|
 | 
						|
                Mov     SI, Offset FastVolumeMsg
 | 
						|
                Jmp     ToggleFastVolume3
 | 
						|
 | 
						|
ToggleFastVolume2:
 | 
						|
                And     CentraliseCursor, Not 4
 | 
						|
                Mov     SI, Offset FastVolumeNotEnabledMsg
 | 
						|
 | 
						|
ToggleFastVolume3:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            ToggleFastVolume
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PECheckModified Far
 | 
						|
 | 
						|
                Cmp     CS:Modified, 0
 | 
						|
                JE      PECheckModified1
 | 
						|
 | 
						|
                Mov     CX, 4
 | 
						|
                Mov     DI, Offset O1_ConfirmNoSave
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                And     DX, DX
 | 
						|
                JNZ     PECheckModified1
 | 
						|
 | 
						|
                Add     SP, 4
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
 | 
						|
PECheckModified1:
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PECheckModified
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PEResetModified Far
 | 
						|
 | 
						|
                Mov     CS:Modified, 0
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PEResetModified
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SetPatternLength Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
;                Mov     AX, MaxRow
 | 
						|
;                Inc     AX
 | 
						|
;                Mov     PatternSetLength, AX
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     PatternLengthStart, AX
 | 
						|
                Mov     PatternLengthEnd, AX
 | 
						|
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
                Mov     CX, 4
 | 
						|
                Mov     DI, Offset O1_SetPatternLength
 | 
						|
                Call    M_Object1List
 | 
						|
 | 
						|
                Test    DX, DX
 | 
						|
                JZ      PE_SetPatternLength2
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Mov     AX, PatternNumber
 | 
						|
                Mov     TempVariableArea, AX
 | 
						|
 | 
						|
                Mov     AX, PatternLengthStart
 | 
						|
                Mov     TempVariableArea2, AX
 | 
						|
 | 
						|
PE_SetPatternLength3:
 | 
						|
                Mov     AX, TempVariableArea2
 | 
						|
                Cmp     AX, PatternLengthEnd
 | 
						|
                JA      PE_SetPatternLength4
 | 
						|
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern           ; Next pattern should be in mem
 | 
						|
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AX, PatternSetLength
 | 
						|
                Mov     PatternModified, 1
 | 
						|
                Dec     AX
 | 
						|
                Mov     MaxRow, AX
 | 
						|
                Call    PEFunction_StorePattern
 | 
						|
 | 
						|
                Inc     TempVariableArea2
 | 
						|
                Jmp     PE_SetPatternLength3
 | 
						|
 | 
						|
PE_SetPatternLength4:                   ; Cleanup
 | 
						|
                Mov     AX, TempVariableArea
 | 
						|
                Mov     PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
PE_SetPatternLength2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SetPatternLength
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_LeftBrace Far
 | 
						|
 | 
						|
                Jmp     Glbl_LeftBrace
 | 
						|
 | 
						|
EndP            PE_LeftBrace
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_RightBrace Far
 | 
						|
 | 
						|
                Jmp     Glbl_RightBrace
 | 
						|
 | 
						|
EndP            PE_RightBrace
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_LeftSquareBracket Far
 | 
						|
 | 
						|
                Jmp     Glbl_LeftSquareBracket
 | 
						|
 | 
						|
EndP            PE_LeftSquareBracket
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_RightSquareBracket Far
 | 
						|
 | 
						|
                Jmp     Glbl_RightSquareBracket
 | 
						|
 | 
						|
EndP            PE_RightSquareBracket
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            MIDI_SetInstrument Far
 | 
						|
 | 
						|
                Test    Byte Ptr CS:CentraliseCursor, 16
 | 
						|
                JZ      MIDI_SetInstrument2
 | 
						|
 | 
						|
                Inc     DX
 | 
						|
 | 
						|
MIDI_SetInstrument2:
 | 
						|
                Cmp     DX, 99
 | 
						|
                JA      MIDI_SetInstrument1
 | 
						|
 | 
						|
                Mov     CS:LastInstrument, DL
 | 
						|
 | 
						|
                Test    DL, DL
 | 
						|
                JZ      MIDI_SetInstrument1
 | 
						|
 | 
						|
                Call    UpdateWAVEForm
 | 
						|
 | 
						|
MIDI_SetInstrument1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            MIDI_SetInstrument
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_MIDIAfterTouch Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     MIDIInputEnabled, 0
 | 
						|
                JNE     PE_MIDIAfterTouch2
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_MIDIAfterTouch2:
 | 
						|
                Test    CentraliseCursor, 128
 | 
						|
 | 
						|
                MovZX   BX, DL
 | 
						|
                Call    MIDI_GetChannel
 | 
						|
                                ; Returns AX
 | 
						|
                Sub     AL, 1
 | 
						|
                JC      PE_MIDIAfterTouch1
 | 
						|
;                Cmp     AL, 0FFh
 | 
						|
;                JE      PE_MIDIAfterTouch1
 | 
						|
 | 
						|
                Call    PE_TranslateMIDI
 | 
						|
                ;       DL = note, DH = volume
 | 
						|
 | 
						|
                Mov     AH, 5
 | 
						|
                Mul     AL
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     BL, DH
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     Row
 | 
						|
                Mov     Word Ptr [Modified], 101h
 | 
						|
                Add     SI, AX
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                        Assume DS:Nothing
 | 
						|
                Cmp     SI, 64000
 | 
						|
                JAE     PE_MIDIAfterTouch1
 | 
						|
 | 
						|
                Mov     [SI+2], BL
 | 
						|
 | 
						|
PE_MIDIAfterTouch1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_MIDIAfterTouch
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_MIDINoteOff Far
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     MIDIInputEnabled, 0
 | 
						|
                JNE     PE_MIDINoteOff1
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_MIDINoteOff1:
 | 
						|
                MovSX   BX, DL
 | 
						|
                Call    MIDI_FindChannel        ; Returns AX
 | 
						|
                Cmp     AL, 0FFh
 | 
						|
                JE      PE_MIDINoteOff2
 | 
						|
 | 
						|
                Test    CentraliseCursor, 32
 | 
						|
                JZ      PE_MIDINoteOff2         ; Dont' record note-offs
 | 
						|
 | 
						|
                Cmp     TracePlayback, 0
 | 
						|
                JE      PE_MIDINoteOff2
 | 
						|
 | 
						|
                Push    AX
 | 
						|
                Mov     AX, Row
 | 
						|
                Call    Music_GetDelay          ; DX = delay value
 | 
						|
                                                ; CX = playmode
 | 
						|
                Pop     AX
 | 
						|
 | 
						|
                Test    CX, CX
 | 
						|
                JZ      PE_MIDINoteOff2
 | 
						|
 | 
						|
                Push    DX
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Mov     AH, 5
 | 
						|
                Mul     AH
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     Row
 | 
						|
                Add     SI, AX
 | 
						|
                Cmp     SI, 64000
 | 
						|
                JAE     PE_MIDINoteOff3
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Cmp     Word Ptr [SI], NONOTE
 | 
						|
                JE      PE_MIDINoteOff4
 | 
						|
                                                ; check next spot.
 | 
						|
                Mov     AX, Row
 | 
						|
                Cmp     AX, MaxRow
 | 
						|
                JAE     PE_MIDINoteOff3         ; Already at end of pattern
 | 
						|
 | 
						|
                Add     SI, 320                 ; Try very next spot.
 | 
						|
                Cmp     SI, 64000
 | 
						|
                JAE     PE_MIDINoteOff3
 | 
						|
 | 
						|
                Xor     DX, DX                  ; Tick 0
 | 
						|
                Cmp     Word Ptr [SI], NONOTE
 | 
						|
                JNE     PE_MIDINoteOff3
 | 
						|
 | 
						|
PE_MIDINoteOff4:
 | 
						|
                Mov     BX, 0FFh
 | 
						|
 | 
						|
                Mov     [SI+2], BX
 | 
						|
                Mov     [SI+4], BH
 | 
						|
                Test    [CS:Flags], 2
 | 
						|
                JZ      PE_MIDINoteOffCut
 | 
						|
 | 
						|
                Dec     BX
 | 
						|
 | 
						|
PE_MIDINoteOffCut:
 | 
						|
                Mov     [SI], BX
 | 
						|
 | 
						|
                Mov     Word Ptr [CS:Modified], 101h
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
                Mov     DL, 32
 | 
						|
                Call    Music_PlayNote
 | 
						|
                Pop     DX
 | 
						|
 | 
						|
                Test    CS:CentraliseCursor, 8
 | 
						|
                JZ      PE_MIDINoteOff2
 | 
						|
 | 
						|
                Mov     [SI+3], DX
 | 
						|
 | 
						|
PE_MIDINoteOff2:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_MIDINoteOff3:
 | 
						|
                Pop     AX
 | 
						|
                Pop     AX
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_MIDINoteOff
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_MIDINote Far
 | 
						|
                        Assume DS:Pattern
 | 
						|
 | 
						|
                Cmp     MIDIInputEnabled, 0
 | 
						|
                JNE     PE_MIDINote6
 | 
						|
 | 
						|
                Xor     AX, AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_MIDINote6:
 | 
						|
                Push    DX
 | 
						|
                Call    Music_GetLastChannel
 | 
						|
                Mov     DI, AX
 | 
						|
                Pop     DX
 | 
						|
 | 
						|
                Call    PE_TranslateMIDI
 | 
						|
                JC      PE_MIDINote1            ; Note out of range?
 | 
						|
                JZ      PE_MIDINoteOff1         ; Note off?
 | 
						|
 | 
						|
                Mov     BL, DH
 | 
						|
                Test    CentraliseCursor, 64
 | 
						|
                JNZ     PE_MIDINote3
 | 
						|
 | 
						|
                Mov     BL, LastVolume
 | 
						|
                Test    EditMask, 2
 | 
						|
                JNZ     PE_MIDINote3
 | 
						|
 | 
						|
                Mov     BL, 0FFh
 | 
						|
 | 
						|
PE_MIDINote3:
 | 
						|
                                ; If TracePlayback = 1 *AND* Playmode > 1, then
 | 
						|
                                ; Basechannel = MIDIChannel, else
 | 
						|
                                ; Basechannel = Channel
 | 
						|
                Push    DX
 | 
						|
 | 
						|
                Mov     AX, Row
 | 
						|
                Call    Music_GetDelay          ; CX = playmode
 | 
						|
                                                ; DX = delay value
 | 
						|
                PushA
 | 
						|
 | 
						|
                Cmp     MIDIPlayTrigger, 1
 | 
						|
                JB      PE_MIDINoteTriggerEnd
 | 
						|
                JA      MIDIPlayTriggerSong
 | 
						|
 | 
						|
MIDIPlayTriggerPattern:
 | 
						|
                Mov     Row, 0
 | 
						|
 | 
						|
                Call    Glbl_F6
 | 
						|
                Jmp     PE_MIDINoteTriggerCleanup
 | 
						|
 | 
						|
MIDIPlayTriggerSong:
 | 
						|
 | 
						|
                Call    PE_F7
 | 
						|
 | 
						|
PE_MIDINoteTriggerCleanup:
 | 
						|
                Push    CS
 | 
						|
                Pop     DS
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Mov     MIDIChannel, AX
 | 
						|
 | 
						|
                Mov     TracePlayback, 1
 | 
						|
                Mov     MIDIPlayTrigger, 0
 | 
						|
 | 
						|
PE_MIDINoteTriggerEnd:
 | 
						|
                PopA
 | 
						|
 | 
						|
                Mov     AX, Channel
 | 
						|
                Test    CX, CX
 | 
						|
                JZ      PE_MIDINote2
 | 
						|
 | 
						|
                Cmp     TracePlayback, 0
 | 
						|
                JE      PE_MIDINote2
 | 
						|
 | 
						|
                Mov     AX, MIDIChannel
 | 
						|
 | 
						|
PE_MIDINote2:
 | 
						|
                Pop     CX                      ; CX = note/volume
 | 
						|
                Xor     CH, CH
 | 
						|
                Test    EditMask, 1
 | 
						|
                JZ      PE_MIDINote4
 | 
						|
 | 
						|
                Mov     CH, LastInstrument
 | 
						|
 | 
						|
PE_MIDINote4:
 | 
						|
 | 
						|
                XChg    CX, DX
 | 
						|
                        ; CX = delay
 | 
						|
                        ; DX = note/ins
 | 
						|
 | 
						|
                Push    DX
 | 
						|
                Call    PE_RestoreMIDINote
 | 
						|
                Call    MIDI_AllocateChannel    ; Returns AX = channel to use
 | 
						|
                Pop     DX
 | 
						|
 | 
						|
                XChg    CX, DX
 | 
						|
 | 
						|
                Push    DX
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AX, 63
 | 
						|
                JA      PE_MIDINote5
 | 
						|
 | 
						|
                Mov     MIDIChannel, AX
 | 
						|
PE_MIDINote5:
 | 
						|
                Dec     AX
 | 
						|
 | 
						|
                Mov     AH, 5
 | 
						|
                Mul     AH
 | 
						|
                Mov     SI, AX
 | 
						|
                Mov     AX, 320
 | 
						|
                Mul     Row
 | 
						|
                Add     SI, AX
 | 
						|
 | 
						|
                Pop     AX
 | 
						|
                Cmp     SI, 64000
 | 
						|
                JAE     PE_MIDINote1
 | 
						|
 | 
						|
                Mov     DS, PatternDataArea
 | 
						|
                        Assume DS:Nothing
 | 
						|
 | 
						|
                Mov     [SI], CX
 | 
						|
                Mov     [SI+2], BL
 | 
						|
                Mov     Word Ptr [SI+3], 0
 | 
						|
 | 
						|
                Mov     DH, 32
 | 
						|
                Call    Music_PlayNote
 | 
						|
                Pop     DX
 | 
						|
 | 
						|
                Mov     Word Ptr [CS:Modified], 101h
 | 
						|
 | 
						|
                Test    CS:CentraliseCursor, 8
 | 
						|
                JZ      PE_MIDINote1
 | 
						|
 | 
						|
                Mov     [SI+3], DX
 | 
						|
 | 
						|
PE_MIDINote1:
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_MIDINote
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_TranslateMIDI Far
 | 
						|
                                        ; Given DL = 0->127, return DL = 0->127
 | 
						|
                                        ; Given DH = 0->127, return DH=0->64
 | 
						|
 | 
						|
                                        ; Apply note swing. Return carry
 | 
						|
                                        ; if note out of range.
 | 
						|
 | 
						|
                                        ; Apply volume swing. Return zero
 | 
						|
                                        ; flag set if note off.
 | 
						|
                Push    AX
 | 
						|
 | 
						|
                Test    DH, DH
 | 
						|
                JZ      PE_TranslateMIDIVolumeEnd
 | 
						|
 | 
						|
                MovSX   BX, DL
 | 
						|
                MovSX   AX, CS:MIDICentralNote
 | 
						|
                Add     AX, BX
 | 
						|
                Sub     AX, 60
 | 
						|
                JS      PE_TranslateMIDIError1
 | 
						|
 | 
						|
PE_TranslateMIDIPitch1:
 | 
						|
                Cmp     AX, 119
 | 
						|
                JBE     PE_TranslateMIDIPitch2
 | 
						|
 | 
						|
PE_TranslateMIDIError1:
 | 
						|
                StC
 | 
						|
                Pop     AX
 | 
						|
                Ret
 | 
						|
 | 
						|
PE_TranslateMIDIPitch2:
 | 
						|
                Mov     DL, AL
 | 
						|
                                        ; OK.. pitch done.
 | 
						|
                Mov     AL, DH
 | 
						|
                Mul     CS:MIDIAmplification
 | 
						|
                                        ; AX = (Volume*VolumeAmp)
 | 
						|
                                        ;    = 0->127*200
 | 
						|
                                        ;    = 0->25400
 | 
						|
                                        ; Req AX = 0->128
 | 
						|
                                        ; ie. Div AX 198.4
 | 
						|
                                        ; or Mul AX, 331
 | 
						|
                                        ; >> 16
 | 
						|
 | 
						|
                Mov     BL, DL          ; Note
 | 
						|
                Mov     DX, 331
 | 
						|
                Mul     DX
 | 
						|
                Mov     DH, DL
 | 
						|
                Mov     DL, BL
 | 
						|
                Cmp     DH, 64
 | 
						|
                JB      PS_TranslateMIDIVolume1
 | 
						|
 | 
						|
                Mov     DH, 64
 | 
						|
 | 
						|
PS_TranslateMIDIVolume1:
 | 
						|
                Test    DL, DL          ; Clear zero flag + carry.
 | 
						|
 | 
						|
PE_TranslateMIDIVolumeEnd:
 | 
						|
                Pop     AX
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_TranslateMIDI
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_RestoreMIDINote Far
 | 
						|
 | 
						|
                Add     DL, 60
 | 
						|
                Sub     DL, CS:MIDICentralNote
 | 
						|
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_RestoreMIDINote
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_CycleMIDIPlayTrigger Far
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     AL, MIDIPlayTrigger
 | 
						|
                Inc     AX
 | 
						|
                Cmp     AL, 2
 | 
						|
                JBE     PE_CycleMIDIPlayTrigger1
 | 
						|
 | 
						|
                Xor     AL, AL
 | 
						|
                Mov     SI, Offset TriggerMsg1
 | 
						|
                Jmp     PE_CycleMIDIPlayTriggerEnd
 | 
						|
 | 
						|
PE_CycleMIDIPlayTrigger1:
 | 
						|
                Mov     SI, Offset TriggerMsg2
 | 
						|
                Cmp     AL, 1
 | 
						|
                JE      PE_CycleMIDIPlayTriggerEnd
 | 
						|
 | 
						|
                Mov     SI, Offset TriggerMsg3
 | 
						|
 | 
						|
PE_CycleMIDIPlayTriggerEnd:
 | 
						|
                Mov     MIDIPlayTrigger, AL
 | 
						|
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_CycleMIDIPlayTrigger
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            MIDIInputToggle Far                     ; Ctrl-Scroll Lock
 | 
						|
                Assume DS:Pattern
 | 
						|
 | 
						|
                Mov     SI, Offset MIDIInputEnabledMsg
 | 
						|
                Xor     MIDIInputEnabled, 1
 | 
						|
                JNZ     MIDIInputToggle1
 | 
						|
                Mov     SI, Offset MIDIInputDisabledMsg
 | 
						|
 | 
						|
MIDIInputToggle1:
 | 
						|
                Call    SetInfoLine
 | 
						|
 | 
						|
                Mov     AX, 1
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            MIDIInputToggle
 | 
						|
                Assume DS:Nothing
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SetPatternModified Far
 | 
						|
 | 
						|
                Mov     Word Ptr [CS:Modified], 101h
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SetPatternModified
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_SaveCurrentPattern Far
 | 
						|
 | 
						|
                PushAD
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
 | 
						|
                Call    PEFunction_StoreCurrentPattern
 | 
						|
 | 
						|
                Mov     AX, 0FFFFh
 | 
						|
                XChg    AX, CS:PatternNumber
 | 
						|
                Mov     Word Ptr CS:TempNumbers, AX
 | 
						|
 | 
						|
                Call    Music_UpdatePatternOffset
 | 
						|
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                PopAD
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_SaveCurrentPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_RestoreCurrentPattern Far
 | 
						|
 | 
						|
                PushAD
 | 
						|
                Push    DS
 | 
						|
                Push    ES
 | 
						|
                Mov     AX, Word Ptr CS:TempNumbers
 | 
						|
                Mov     CS:PatternNumber, AX
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
                Pop     ES
 | 
						|
                Pop     DS
 | 
						|
                PopAD
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_RestoreCurrentPattern
 | 
						|
 | 
						|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
 | 
						|
 | 
						|
Proc            PE_NewPattern Far
 | 
						|
 | 
						|
                Mov     AX, CS:PatternNumber
 | 
						|
                Call    Music_GetPattern
 | 
						|
                Call    DecodePattern
 | 
						|
 | 
						|
                Mov     CS:PatternModified, 0
 | 
						|
                Ret
 | 
						|
 | 
						|
EndP            PE_NewPattern
 | 
						|
 | 
						|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
 | 
						|
 | 
						|
EndS
 | 
						|
 | 
						|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
 | 
						|
 | 
						|
Segment                 PatternData PARA Public 'Data'
 | 
						|
                        DB      64000 Dup (?)
 | 
						|
EndS
 | 
						|
 | 
						|
 | 
						|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
 | 
						|
 | 
						|
End
 |