impulsetracker/IT_DISPL.ASM

4486 lines
125 KiB
NASM
Raw Normal View History

2014-10-19 04:00:17 -07:00
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
;<3B> Display Module!! <20>
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Jumps
.386
include switch.inc
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
;<3B> Externals <20>
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Segment Pattern WORD Public 'Code' USE16
Extrn Order:Word
EndS
Segment Object1 BYTE Public 'Data' USE16
EndS
Segment Glbl BYTE Public 'Code' USE16
Extrn CurrentMode:Byte
EndS
IF SPECTRUMANALYSER
Extrn Fourier_Start:Far
ENDIF
Extrn S_GetDestination:Far
Extrn S_DrawBox:Far
Extrn S_DrawString:Far
Extrn Music_GetOutputWaveform:Far
Extrn Music_GetInstrumentMode:Far
Extrn Music_GetSongSegment:Far
Extrn Music_GetSampleLocation:Far
Extrn Music_GetHostChannelInformationTable:Far
Extrn Music_GetSlaveChannelInformationTable:Far
Extrn Music_NextOrder:Far
Extrn Music_LastOrder:Far
Extrn Music_GetPlayMode:Far
Extrn Music_GetPlayMode2:Far
Extrn Music_GetPattern:Far
Extrn Music_ToggleChannel:Far
Extrn Music_SoloChannel:Far
Extrn Music_GetDisplayVariables:Far
Extrn Music_InitStereo:Far
; Extrn Music_UpdateSampleLocation:Far
Extrn Music_Poll:Far
Extrn Music_ToggleReverse:Far
Extrn Music_GetLastChannel:far
Extrn Music_GetPatternLength:Far
Extrn M_FunctionDivider:Far
IF NETWORKENABLED
Extrn Network_Poll:Far
ENDIF
Extrn O1_DisplayList, O1_FullDisplayList
Extrn PE_GetCurrentPattern:Far
Extrn PE_ConvAX2Num:Far
Extrn PE_GotoPattern:Far
Extrn SetInfoLine:Far
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
;<3B> Globals <20>
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Global DisplayPlus:Far
Global DisplayMinus:Far
Global DrawDisplayData:Far
Global PostDisplayData:Far
Global DisplayUpdateScreen:Far
Global Display_GetDisplayWindowData:Far
Global Display_SelectDisplayList:Far
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Segment InfoPage BYTE Public 'Code' USE16
Assume CS:InfoPage, DS:InfoPage
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
;<3B> Variables <20>
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SLAVECHANNELSIZE EQU 128
HOSTCHANNELSIZE EQU 80
PLAYMETHODS EQU 11
DOTSDISPLAY EQU 9
CurrentChannel DW 0
;CurrentSample DW 0
;CurrentInstrument DW 0
DisplayMode DW 0
DrawTrackData DW 0 ; Function to call to draw track
DataArray DB 320 Dup (0)
DataDecode DB 384 Dup (0)
DecodeOffset DW ? ; Offset is -1 if no pat
DecodeSegment DW ?
DecodePattern DW ?
DecodeRow DW ?
DecodeMaxRow DW ?
PatternArrayNumber DW ?
PatternMaxRow DW ?
PatternSegment DW ?
Channel5Msg DB " Channel xx ", 0
Channel8Msg DB " xx ", 0
Channel18Msg DB "xx", 0
NoteTable DB "C-C#D-D#E-F-F#G-G#A-A#B-"
Note2Table DB "cCdDefFgGaAb"
LeftMsg DB "Left "
RightMsg DB " Right"
SurroundMsg DB "Surround "
NNAMsg DB "Cut", 0
DB "Con", 0
DB "Off", 0
DB "Fde", 0
VirtualMsg DB "NNA", 0FEh, 21h, 148, 0FEh, 12h, "Tot", 0
DetailsMsg DB "Frequency", 0FEh, 21h, 148, 148, 0FEh, 12h
DB "Position", 0FEh, 21h, 148, 148, 0FEh, 12h
DB "Smp", 0FEh, 21h, 152, 153, 0FEh, 12h
DB "FVl", 0FEh, 21h, 148, 0FEh, 12h
DB "Vl", 0FEh, 21h, 148, 0FEh, 12h
DB "CV", 0FEh, 21h, 148, 0FEh, 12h
DB "SV", 0FEh, 21h, 148, 0FEh, 12h
DB "VE", 0FEh, 21h, 148, 0FEh, 12h
DB "Fde", 0FEh, 21h, 148, 0FEh, 12h
DB "Pn", 0FEh, 21h, 148, 0FEh, 12h
DB "PE", 0
RestoreData DB 0
DisplayWindows Label ; Structure is 1 word
DW 0 ; 1 word, method
DB 0 ; 1 byte, top channel (+2)
; DB 1
; DW 31
; DW 160
DB 12 ; 1 byte, top line (+3)
DW 20 ; 1 word length of window (+4)
DW 12*80*2 ; 1 word offset to top left (+6)
DW 8
DB 0
DB 32
DW 3
DW 32*80*2
DW 5
DB 0
DB 35
DW 15
DW 35*80*2
DW 11 Dup (0)
DB 0
FullScreen DB 0
NumWindows DW 3 ; This cannot be moved!!!
CurrentWindow DW 0
ProcessWindow DW 0
PlayMode DW 0
CurrentRow DW 0
CurrentPattern DW 0
CurrentOrder DW 0
LastRow DW 0
LastPattern DW 0
LastOrder DW 0
WaveformLength DW 0
Velocity DB 0
Instrument DB 0
Comment ~
Correlation Label Byte
DB 255, 254, 252, 249, 245, 240, 234, 227
DB 219, 210, 210, 199, 187, 174, 160, 145
DB 129, 112, 94, 75, 55, 34, 12, 0
DB 0, 0, 0, 0, 0, 0, 0, 0
~
Destination DW 0
VariablesMsg DB "Active Channels: ", 0FDh, "D (", 0FDh, "D)", 13
DB " Global Volume: ", 0FDh, "D", 0
StereoEnabledMsg DB "Stereo Enabled", 0
StereoDisabledMsg DB "Stereo Disabled", 0
VelocityMsg DB "Using velocity bars", 0
VolumeMsg DB "Using volume bars", 0
InstrumentMsg DB "Using Instrument names", 0
SampleMsg DB "Using Sample names", 0
DisplayDataModes Label
DW Offset Display_HostChannel
DW Offset Display_5Channel
DW Offset Display_8Channel
DW Offset Display_10Channel
DW Offset Display_18Channel
DW Offset Display_24Channel
DW Offset Display_36Channel
DW Offset Display_64Channel
DW Offset Display_Variables
DW Offset Display_NoteDots
; DW Offset Display_SampleDots
DW Offset Display_Details
DisplayListKeys Label
DB 0 ; Up arrow
DW 1C8h
DW Offset DisplayUp
DB 0
DW 1CBh ; Left arrow
DW Offset DisplayUp
DB 0
DW 1D0h ; Down arrow
DW Offset DisplayDown
DB 0
DW 1CDh ; Right arrow
DW Offset DisplayDown
DB 2
DW 1C8h
DW Offset DisplayAltUp
DB 2
DW 1D0h
DW Offset DisplayAltDown
DB 0
DW 1C7h
DW Offset DisplayHome
DB 0
DW 1CFh
DW Offset DisplayEnd
; DB 0
; DW 14Ah ; Grey minus
DB 1
DW '-'
DW Offset DisplayMinus
; DB 0
; DW 14Eh ; Grey Plus
DB 1
DW '+'
DW Offset DisplayPlus
DB 0
DW 1D2h ; Insert
DW Offset DisplayInsert
DB 0
DW 1D3h ; Delete
DW Offset DisplayDelete
DB 0 ; PgUp
DW 1C9h
DW Offset DisplayPageUp
DB 0 ; PgDn
DW 1D1h
DW Offset DisplayPageDown
DB 0 ; Tab
DW 10Fh
DW Offset DisplayNext
DB 1 ; Shifttab
DW 0F00h
DW Offset DisplayPrevious
DB 2 ; Alt
DW 143h ; F9
DW Offset DisplayToggleChannel
DB 5
DW 'Q'
DW Offset DisplayToggleChannel
DB 2 ; Alt
DW 144h ; F10
DW Offset DisplaySoloChannel
DB 1 ; Alt 'R'
DW 1300h
DW Offset DisplayToggleReverse
DB 1 ; Alt...
DW 1F00h ; 'S'
DW Offset DisplayToggleStereo
DB 5
DW 'S'
DW Offset DisplaySoloChannel
DB 5
DW 'G'
DW Offset Display_GotoPattern
DB 5
DW 'V'
DW Offset DisplayToggleVelocity
DB 5
DW 'I'
DW Offset DisplayToggleInstrument
DB 1
DW ' '
DW Offset Display_SpaceBar
DB 1
DW 6 ; Ctrl F
DW Offset Display_FullScreen
IF SPECTRUMANALYSER
DB 2 ; Alt..
DW 158h ; F12
DW Offset Display_FourierStart
ENDIF
DB 0FFh ; End of list
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
;<3B> Functions <20>
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc GetChannelColour ; Gets AH
Push DS
Push BX
Call Music_GetSongSegment
Mov DS, AX
And BX, 0FFh
Test Byte Ptr [DS:BX+40h], 80h
Pop BX
Pop DS
JNZ GetChannelColour1
; Non-muted colours.
Mov AH, 13h
Cmp BL, DL
JE GetChannelColourEnd
Mov AH, 12h
Mov BH, Byte Ptr ProcessWindow
Cmp BH, Byte Ptr CurrentWindow
JE GetChannelColourEnd
Mov AH, 10h
Ret
GetChannelColour1: ; Muted colours
Mov AH, 16h
Cmp BL, DL
JE GetChannelColourEnd
Mov AH, 11h
GetChannelColourEnd:
Ret
EndP GetChannelColour
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DrawChannelNumbers
Mov CH, 0Ah
Mov CL, [CS:BP+4]
Sub CL, 2
Mov DI, [CS:BP+6]
Add DI, (2+1*80)*2
Call Music_GetSongSegment
Mov DS, AX
Assume DS:Nothing
Display_HostChannel3:
Push CX
Push DI
Mov AX, BX
Inc AX
Div CH
Add AX, 3030h
Mov DH, AH
Mov AH, 23h
Cmp DL, BL
JE Display_HostChannel4
Test Byte Ptr [BX+40h], 80h
JNZ Display_HostChannel21
Mov AH, 21h
Mov CX, ProcessWindow
Cmp CX, CurrentWindow
JE Display_HostChannel4
Mov AH, 20h
Jmp Display_HostChannel32
Display_HostChannel4:
Test Byte Ptr [BX+40h], 80h
JZ Display_HostChannel32
Mov AH, 26h
Display_HostChannel32:
StosW
Mov AL, DH
StosW
Display_HostChannel21:
Inc BX
Pop DI
Pop CX
Add DI, 160
Dec CL
JNZ Display_HostChannel3
Ret
EndP DrawChannelNumbers
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DrawHexAL
Cmp AL, 10
SBB AL, 69h
DAS
StosW
Ret
EndP DrawHexAL
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_HostChannel
; Draw boxes first.
Assume DS:InfoPage
Mov ES, Destination
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Push AX
Push 29
Add AX, [CS:BP+4]
Dec AX
Push AX
Push 27
Call S_DrawBox
Mov SI, SP
Mov Byte Ptr [SS:SI+4], 62
Mov Byte Ptr [SS:SI+8], 30
Call S_DrawBox
Push DS
Call Music_GetSongSegment
Mov DS, AX
Test Byte Ptr [DS:2Ch], 1
Pop DS
JZ Display_HostChannel27
Mov Byte Ptr [SS:SI+4], 73
Mov Byte Ptr [SS:SI+8], 63
Call S_DrawBox
Display_HostChannel27:
Add SP, 10
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_HostChannel1
Mov BX, DX
Display_HostChannel1:
LEA CX, [EDX+3]
Sub CX, [CS:BP+4]
Cmp BX, CX
JGE Display_HostChannel2
Mov BX, CX
Display_HostChannel2:
Mov CX, 66
Sub CX, [CS:BP+4]
Cmp BX, CX
JLE Display_HostChannel22
Mov BX, 65
Sub BX, [CS:BP+4]
Display_HostChannel22:
Mov [CS:BP+2], BL ; BL = top channel
Call DrawChannelNumbers
Mov AL, 80 ; HostChannelSize
Mul Byte Ptr [CS:BP+2]
Call Music_GetHostChannelInformationTable
Assume DS:Nothing
Add SI, AX
Mov DI, [CS:BP+6]
Add DI, (31+1*80)*2
Mov CX, [CS:BP+4]
Sub CX, 2
Display_HostChannel5: ; Show vol and sample.
Push CX
Push DI
Test Byte Ptr [SI], 4
JZ Display_HostChannel6
Mov BX, [SI+24h] ; DS:BX = slave channel
; OK get sample number
; Mov AL, [SI+20h]
Push DI
Push SI
Push DS
Push DI
MovZX AX, Byte Ptr [BX+36h]
Inc AX
Mov DH, 10
Div DH
Add AX, 3030h ; '0'+'0'
Cmp AL, '9'
JBE SampleNumRange1
Mov AX, '--'
SampleNumRange1:
Mov DL, AH
Mov AH, 6
StosW
Mov AL, DL
StosW
Call Music_GetInstrumentMode
JZ Display_HostChannel23
MovZX AX, Byte Ptr [BX+33h] ; Instrument number
Cmp AL, 0FFh
JE Display_HostChannel23
Div DH
Add AX, 3030h
Mov DX, AX
Mov AX, 6*256+'/'
StosW
Mov AL, DL
StosW
Mov AL, DH
StosW
Display_HostChannel23:
Mov AX, 7*256+':'
Test Byte Ptr [BX], 4 ; Note off???
JNZ Display_HostChannel31
Mov AH, 6
Display_HostChannel31:
Cmp Byte Ptr [BX+20h], 0
JNE Display_HostChannel7
Mov AH, 4
Display_HostChannel7:
StosW
MovZX AX, Byte Ptr [BX+36h]
Add AX, AX
Mov SI, AX
Mov DX, [BX+30h]
Call Music_GetSongSegment
Mov DS, AX
Mov SI, [DS:SI+64912]
Add SI, 14h
Mov AH, 6
Mov CX, 25
Test Byte Ptr [DS:2Ch], 4 ; Instrument mode?
JZ Display_HostChannel8
Cmp CS:Instrument, 0
JE Display_HostChannel8
LEA SI, [EDX+20h]
Display_HostChannel8:
LodsB
Cmp AL, 226
JB AvoidMouse1
Mov AL, ' '
AvoidMouse1:
StosW
Loop Display_HostChannel8
; Show string...
; Now show panning if applic
Pop DI
Test Byte Ptr [DS:2Ch], 1 ; Stereo
JZ Display_HostChannel24
Pop DS
Pop SI
Push SI
Push DS
Add DI, 33*2
; Show panning.
MovZX AX, Byte Ptr [BX+25h]
; Mov AL, [DS:SI+2Eh]
Cmp AL, 100
JE Display_HostChannel25
; Test AL, 80h ; Should never occur
; JNZ Display_HostChannel24
And AL, AL
JZ Display_HostChannel29
Cmp AL, 64
JE Display_HostChannel30
; Show thumb bar sorta thing.
Inc AX
Mov DX, AX
ShR DX, 3
Add DX, DX
Add DI, DX
And AX, 7
Add AX, 155
Mov AH, 2
StosW
Cmp AL, 157
JBE Display_HostChannel24
Add AL, 5
StosW
Jmp Display_HostChannel24
Display_HostChannel29:
Mov SI, Offset LeftMsg
Jmp Display_HostChannel28
Display_HostChannel30:
Mov SI, Offset RightMsg
Jmp Display_HostChannel28
Display_HostChannel25:
Mov SI, Offset SurroundMsg
Display_HostChannel28:
Push CS
Pop DS
Mov CX, 9
Mov AH, 2
Display_HostChannel26:
LodsB
StosW
Loop Display_HostChannel26
Display_HostChannel24:
Pop DS
Push DS
Mov AL, 255
Cmp CS:Velocity, 0
JNZ Display_HostChannel10
Cmp Byte Ptr [BX+36h], 100
JE Display_HostChannel10
; Test Byte Ptr [BX+1], 8
; JNZ Display_HostChannel18 ; Don't display volume
Mov EDX, [BX+2Ch] ; Initial offset.
Mov ECX, [BX+4Ch] ; Final offset
And EDX, EDX
JNS Display_HostChannelPP1
Xor EDX, EDX
Display_HostChannelPP1:
And ECX, ECX
JNS Display_HostChannelPP2
Xor ECX, ECX
Display_HostChannelPP2:
Cmp Byte Ptr [BX+0Ah], 8
JB Display_HostChannel9 ; No loop
Comment ~
Mov AL, [BX+0Bh]
And AL, 7Fh
Cmp AL, 2
JB NoSampleLoop
Mov ECX, [BX+40h]
Mov EDX, [BX+44h]
Jmp Display_HostChannel20
NoSampleLoop:
Cmp Byte Ptr [BX+0Ah], 8
~
JE Display_HostChannel19 ; Normal loop
; Ping pong!
Cmp ECX, EDX
JA Display_HostChannel9
XChg ECX, EDX
Jmp Display_HostChannel9
Display_HostChannel19: ; Forwards loop!
Cmp ECX, EDX
JAE Display_HostChannel9
Mov ECX, [BX+44h]
Display_HostChannel9:
Sub ECX, EDX
JBE Display_HostChannel18
Display_HostChannel20:
Test Byte Ptr [BX+18h], 2
PushF
JZ Display_HCNoDouble
Add ECX, ECX
Add EDX, EDX
Display_HCNoDouble:
MovZX AX, Byte Ptr [BX+36h]
Inc AX
Push ECX
Xor CX, CX
Call Music_GetSampleLocation
Pop ECX
Add ESI, EDX
PopF
Push BX
Mov BX, 1
JZ Display_HostChannel8Bit
Xor DX, DX
ShR ECX, 1
JZ Display_HostChannelError
Or ESI, 1
Inc BX
Display_HostChannel8Bit:
Int 3
Mov DL, [SI]
Mov DH, DL ; DL = min, DH = max.
Display_HostChannel11:
Mov AL, [SI]
Add SI, BX
JC Display_HostChannelNewSegment
Display_HostChannelResume:
Cmp DH, AL
JL Display_HostChannel12
Cmp DL, AL
JG Display_HostChannel13
Display_HostChannel14:
Loop Display_HostChannel11
Pop BX
Mov AL, DH
Sub AL, DL
Jmp Display_HostChannel10
Display_HostChannel13:
Mov DL, AL
Jmp Display_HostChannel14
Display_HostChannel12:
Mov DH, AL
Jmp Display_HostChannel14
Display_HostChannelNewSegment:
Add ESI, 10000h
Int 3
Jmp Display_HostChannelResume
Display_HostChannelError:
Pop BX
Display_HostChannel18: ; AL = volume.
Mov AL, 0
Display_HostChannel10: ; AL = volume.
Pop DS
Pop SI
Mul Byte Ptr [BX+20h] ; Final volume!
ShR AH, 1
AdC AH, 0 ; AH = volume to show.
Pop DI
Sub DI, 26*2 ; ES:DI points to vol deposit
Mov DH, AH
And DH, 7
ShR AH, 3
Mov CL, AH
Mov AH, 5
Test Word Ptr [BX], 800h
JZ Display_HostChannelNotMuted
Mov AH, 1
Display_HostChannelNotMuted:
And CL, CL
JZ Display_HostChannel16
Display_HostChannel15:
Mov AL, 176
StosW
Mov AL, 179
StosW
Mov AL, 182
StosW
Dec CL
JNZ Display_HostChannel15
Display_HostChannel16: ; DH contains remainder.
And DH, DH
JZ Display_HostChannel6
Cmp DH, 3
JBE Display_HostChannel17
Mov AL, 176
StosW
Cmp DH, 5
JBE Display_HostChannel17
Mov AL, 179
Inc DH
StosW
Display_HostChannel17:
Mov AL, 173
Add AL, DH
StosW
Display_HostChannel6:
Pop DI
Pop CX
Add DI, 160
Add SI, HOSTCHANNELSIZE
Loop Display_HostChannel5
Ret
EndP Display_HostChannel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Draw10Num
Mov CX, 10
Mov EBP, 10
Draw10Num1:
Xor EDX, EDX
Div EBP
Add DX, '0'+2*256
Sub DI, 2
Mov [ES:DI], DX
And EAX, EAX
LoopNZ Draw10Num1
Add CX, CX
Sub DI, CX
Ret
EndP Draw10Num
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Draw2Num
Xor AH, AH
Mov DL, 10
Div DL
Add AX, 3030h
Mov DL, AH
Mov AH, 2
StosW
Mov AL, DL
StosW
ScasW
; Add DI, 2
Ret
EndP Draw2Num
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Draw3Num
Cmp AH, 10
JB Draw3Num1
Xor AX, AX
Draw3Num1:
Mov DL, 10
Div DL
Mov DH, AH
Xor AH, AH
Div DL
Add AX, 3030h
Mov DL, AH
Mov AH, 2
StosW
Mov AL, DL
StosW
Mov AL, DH
Add AL, 30h
StosW
ScasW
; Add DI, 2
Ret
EndP Draw3Num
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_Details
; Draw boxes first.
Assume DS:InfoPage
Mov ES, Destination
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 30
Add AX, [CS:BP+4]
Sub AX, 2
Push AX
Push 27
Call S_DrawBox
Mov SI, SP
Mov Byte Ptr [SS:SI+4], 57
Mov Byte Ptr [SS:SI+8], 31
Call S_DrawBox
Push DS
Call Music_GetSongSegment
Mov DS, AX
Test Byte Ptr [DS:2Ch], 4
Pop DS
JZ Display_Details27
Mov Byte Ptr [SS:SI+4], 66
Mov Byte Ptr [SS:SI+8], 58
Call S_DrawBox
Mov DI, [CS:BP+6]
Add DI, 118+160
Mov SI, Offset VirtualMsg
Mov AH, 12h
Call S_DrawString
Display_Details27:
Mov DI, [CS:BP+6]
Add DI, 12+160
Mov SI, Offset DetailsMsg
Mov AH, 12h
Call S_DrawString
Add SP, 10
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_Details1
Mov BX, DX
Display_Details1:
LEA CX, [EDX+4]
Sub CX, [CS:BP+4]
Cmp BX, CX
JGE Display_Details2
Mov BX, CX
Display_Details2:
Mov CX, 67
Sub CX, [CS:BP+4]
Cmp BX, CX
JL Display_Details22
Mov BX, 67
Sub BX, [CS:BP+4]
Display_Details22:
Mov [CS:BP+2], BL ; BL = top channel
Mov CH, 0Ah
Mov CL, [CS:BP+4]
Sub CL, 3
Mov DI, [CS:BP+6]
Add DI, (2+2*80)*2
Call Music_GetSongSegment
Mov DS, AX
Assume DS:Nothing
Display_Details3:
Push CX
Push DI
Mov AX, BX
Inc AX
Div CH
Add AX, '00'
Mov DH, AH
Mov AH, 23h
Cmp DL, BL
JE Display_Details4
Test Byte Ptr [BX+40h], 80h
JNZ Display_Details21
Mov AH, 21h
Mov CX, ProcessWindow
Cmp CX, CurrentWindow
JE Display_Details4
Mov AH, 20h
Jmp Display_Details32
Display_Details4:
Test Byte Ptr [BX+40h], 80h
JZ Display_Details32
Mov AH, 26h
Display_Details32:
StosW
Mov AL, DH
StosW
Display_Details21:
Inc BX
Pop DI
Pop CX
Add DI, 160
Dec CL
JNZ Display_Details3
Mov AL, 80 ; HostChannelSize
Mul Byte Ptr [CS:BP+2]
Call Music_GetHostChannelInformationTable
Assume DS:Nothing
Add SI, AX
Mov DI, [CS:BP+6]
Add DI, (15+2*80)*2
Mov CX, [CS:BP+4]
Sub CX, 3
Display_Details5: ; Show vol and sample.
Push CX
Push SI
Push DI
; Draw in divisions.
Mov AX, 2A8h
Mov Word Ptr [ES:DI], AX
Mov Word Ptr [ES:DI+22], AX
Mov Word Ptr [ES:DI+40], AX
Mov Word Ptr [ES:DI+46], AX
Mov Word Ptr [ES:DI+52], AX
Mov Word Ptr [ES:DI+58], AX
Mov Word Ptr [ES:DI+64], AX
Mov Word Ptr [ES:DI+72], AX
Mov Word Ptr [ES:DI+78], AX
ClI
Test Byte Ptr [SI], 4
JNZ Display_Details6
Add DI, 88
Jmp Display_Details72
Display_Details6:
Mov BX, [SI+24h] ; DS:BX points to virtual channel.
Mov EAX, [BX+10h]
Call Draw10Num
Add DI, 42
Mov EAX, [BX+4Ch]
Call Draw10Num
Add DI, 22
Xor AH, AH
Mov AL, [BX+36h]
Inc AX ; Sample..
Call Draw3Num
; Add DI, 2
ScasW
Xor AH, AH
Mov AL, [BX+20h] ; Final vol
Call Draw3Num
Mov AL, [BX+21h] ; Vol
Call Draw2Num
Mov AL, [BX+23h] ; CV
Call Draw2Num
Mov AL, [BX+24h] ; SV
ShR AL, 1
Call Draw2Num
Mov AL, [BX+52h] ; VE
Call Draw2Num
Mov AX, [BX+26h] ; Fade
ShR AX, 1
Call Draw3Num
Mov AL, [BX+25h] ; Pan
Cmp AL, 100
JE Display_Details13
Call Draw2Num
Jmp Display_Details7
Display_Details13:
Mov AX, 'S'+2*256
StosW
Mov AL, 'u'
StosW
; Add DI, 2
ScasW
Display_Details7:
Mov AL, [BX+62h] ; PE
Add AL, 32
Call Draw2Num
; Add DI, 2
ScasW
Display_Details72:
Push DS
Call Music_GetSongSegment
Mov DS, AX
Test Byte Ptr [DS:2Ch], 4
Pop DS
JZ Display_Details8
Mov Word Ptr [ES:DI+6], 2A8h
Test Byte Ptr [SI], 4
JNZ Display_Details9
Mov AX, '-'+2*256
StosW
StosW
StosW
Jmp Display_Details10
Display_Details9:
Push SI
Mov SI, [BX+3Bh] ; NNA
And SI, 0FFh
ShL SI, 2
Mov AH, 2
Mov AL, [CS:NNAMsg+SI]
StosW
Mov AL, [CS:NNAMsg+SI+1]
StosW
Mov AL, [CS:NNAMsg+SI+2]
StosW
Pop SI
Display_Details10: ; Time to count channels.
Mov AH, [SI+20h]
; Add DI, 2
ScasW
Call Music_GetSlaveChannelInformationTable
Xor AL, AL ; AL = count.
Display_Details11:
Mov DL, [SI+3Ah]
And DL, 7Fh
Cmp AH, DL
JNE Display_Details12
Test Byte Ptr [SI], 1
JZ Display_Details12
Inc AX
Display_Details12:
Add SI, SLAVECHANNELSIZE
Loop Display_Details11
Xor AH, AH
Call Draw3Num
Display_Details8:
StI
Pop DI
Pop SI
Pop CX
Add DI, 160
Add SI, HOSTCHANNELSIZE
Loop Display_Details5
Ret
EndP Display_Details
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc LoadNextData ; Returns DS:SI to data. (unpacked)
Assume DS:InfoPage
Mov BX, DecodePattern
Cmp BX, PatternArrayNumber
JE LoadNextData1
Push DI
Push CS
Pop ES
Mov DI, Offset DataArray
Mov CX, 64
LoadNextData3:
Mov AX, 0FDh
StosW
Mov AL, 0FFh
StosB
Xor AL, AL
StosW
Loop LoadNextData3
Cmp BX, 0FFFFh
JNE LoadNextData2
Pop DI
Mov SI, Offset DataArray
Ret
LoadNextData2:
; OK... time to decode.
Mov SI, DecodeOffset
Mov DS, DecodeSegment
Assume DS:Nothing
LoadNextData4:
LodsB
And AL, AL
JZ LoadNextData5
Mov DL, AL
And AL, 7Fh
Dec AX
Mov DH, AL
Mov AH, 6
Mul AH
Mov BX, AX
Add BX, Offset DataDecode
Mov AL, 5
Mul DH
Mov DI, AX
Add DI, Offset DataArray
Mov AH, [CS:BX]
Test DL, 80h
JZ LoadNextData6
LodsB
Mov AH, AL
Mov [CS:BX], AL
LoadNextData6:
Test AH, 1
JZ LoadNextData7
LodsB
Mov [CS:BX+1], AL
Jmp LoadNextData8
LoadNextData7:
Test AH, 10h
JZ LoadNextData9
Mov AL, [CS:BX+1]
LoadNextData8:
Mov [CS:DI], AL ; Note
LoadNextData9:
Test AH, 2
JZ LoadNextData10
LodsB
Mov [CS:BX+2], AL
Jmp LoadNextData11
LoadNextData10:
Test AH, 20h
JZ LoadNextData12
Mov AL, [CS:BX+2]
LoadNextData11:
Mov [CS:DI+1], AL ; Instrument
LoadNextData12:
Test AH, 4
JZ LoadNextData13
LodsB
Mov [CS:BX+3], AL
Jmp LoadNextData14
LoadNextData13:
Test AH, 40h
JZ LoadNextData15
Mov AL, [CS:BX+3]
LoadNextData14:
Mov [CS:DI+2], AL ; Volume
LoadNextData15:
Test AH, 8
JZ LoadNextData16
LodsW
Mov [CS:BX+4], AX
Mov [CS:DI+3], AX
Jmp LoadNextData4
LoadNextData16:
Test AH, 80h
JZ LoadNextData4
Mov AX, [CS:BX+4]
Mov [CS:DI+3], AX
Jmp LoadNextData4
LoadNextData5:
Push CS
Pop DS
Assume DS:InfoPage
Mov DecodeOffset, SI
Mov SI, Offset DataArray
Pop DI
Ret
LoadNextData1:
Mov SI, DecodeOffset
Add DecodeOffset, 320
Mov DS, PatternSegment
Assume DS:Nothing
Ret
EndP LoadNextData
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc GotoRow ; DS:SI points to data.
Push CX
Mov CX, CS:DecodeRow
Inc CX
GotoRow1:
Dec CX
JZ GotoRow2
GotoRow3:
LodsB
And AL, AL
JZ GotoRow1
Mov DL, AL
And AL, 7Fh
Dec AX
Mov AH, 6
Mul AH
Mov BX, AX
Add BX, Offset DataDecode
Mov DH, [CS:BX] ; Mask.
Test DL, 80h
JZ GotoRow4
LodsB
Mov DH, AL
Mov [CS:BX], AL ; Mask
GotoRow4:
Test DH, 1
JZ GotoRow5
LodsB
Mov [CS:BX+1], AL ; Note
GotoRow5:
Test DH, 2
JZ GotoRow6
LodsB
Mov [CS:BX+2], AL ; Instrument
GotoRow6:
Test DH, 4
JZ GotoRow7 ; Volume
LodsB
Mov [CS:BX+3], AL
GotoRow7:
Test DH, 8
JZ GotoRow3
LodsW
Mov [CS:BX+4], AX
Jmp GotoRow3
GotoRow2:
Mov CS:DecodeSegment, DS
Mov CS:DecodeOffset, SI
Pop CX
Ret
EndP GotoRow
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc GetBeforeRows ; Returns
; CX = number of rows to show.
; the row numbers are handled.
; Initialises DataSegment,
; DataOffset and Array.
Assume DS:InfoPage
Xor CX, CX
Mov BX, CurrentRow
Mov AX, [CS:BP+4]
Sub AX, 4
ShR AX, 1
Sub BX, AX
JC GetBeforeRows2
Ret ; No rows to show!
GetBeforeRows2:
Mov CX, BX
Neg CX ; CX = num of rows to show
Cmp PlayMode, 1
JE GetBeforeRows1
; Song..
Mov BX, CurrentOrder
Test BX, BX
JZ GetBeforeRows3
Call Music_GetSongSegment
Mov ES, AX
MovZX AX, Byte Ptr [ES:BX+100h-1]
Cmp AL, 199
JBE GetBeforeRows4
GetBeforeRows3:
Mov DecodePattern, 0FFFFh
Ret
GetBeforeRows1: ; Pattern...
Mov AX, CurrentPattern
GetBeforeRows4:
Mov DecodePattern, AX ; Now find offset.
Cmp AX, PatternArrayNumber ; CX = num rows to show
JNE GetBeforeRows5
Mov BX, PatternMaxRow
Sub BX, CX
Mov DecodeRow, BX
Mov AX, 320
Mul BX
Mov DecodeOffset, AX
Jmp GetBeforeRows6
GetBeforeRows5:
Call Music_GetPattern
Assume DS:Nothing
LodsW
LodsW
; AX = rows.
Sub AX, CX
Mov CS:DecodeRow, AX
Add SI, 4
Call GotoRow
GetBeforeRows6: ; Put numbers on screen.
Push CS
Pop DS
JCXZ GetBeforeRows9
Push CX
Push DI
GetBeforeRows7:
Mov AX, DecodeRow
Mov ES, Destination
GetBeforeRows8:
Push CX
Mov CH, 20h
Call PE_ConvAX2Num
Pop CX
Inc AX
Add DI, 160
Loop GetBeforeRows8
Pop DI
Pop CX
GetBeforeRows9:
Ret
EndP GetBeforeRows
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc GetAfterRows ; Returns
Assume DS:InfoPage
Xor CX, CX
Mov BX, DecodeMaxRow
Mov AX, [CS:BP+4]
Sub AX, 3
Mov DX, AX
Dec AX
ShR AX, 1
Sub DX, AX
Add DX, CurrentRow
Sub BX, DX
JC GetAfterRows2
Ret ; No rows to show!
GetAfterRows2:
Mov CX, BX
Neg CX
Cmp PlayMode, 1
JE GetAfterRows1
; Song..
Mov BX, CurrentOrder
Cmp BX, 255
JAE GetAfterRows3
Call Music_GetSongSegment
Mov ES, AX
MovZX AX, Byte Ptr [ES:BX+101h]
Cmp AL, 199
JBE GetAfterRows4
GetAfterRows3:
Mov DecodePattern, 0FFFFh
Ret
GetAfterRows1: ; Pattern...
Mov AX, CurrentPattern
GetAfterRows4:
Mov DecodePattern, AX ; Now find offset.
Mov DecodeRow, 0
Cmp AX, PatternArrayNumber ; CX = num rows to show
JNE GetAfterRows5
Mov DecodeOffset, 0
Jmp GetAfterRows6
GetAfterRows5:
Call Music_GetPattern
Assume DS:Nothing
Add SI, 8
Mov CS:DecodeSegment, DS
Push CS
Pop DS
Assume DS:InfoPage
Mov DecodeOffset, SI
GetAfterRows6: ; Put numbers on screen.
JCXZ GetAfterRows9
Push CX
Push DI
GetAfterRows7:
Mov AX, DecodeRow
Mov ES, Destination
GetAfterRows8:
Push CX
Mov CH, 20h
Call PE_ConvAX2Num
Pop CX
Inc AX
Add DI, 160
Loop GetAfterRows8
Pop DI
Pop CX
GetAfterRows9:
Ret
EndP GetAfterRows
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc GetCurrentPatternRows ; Returns CX = number of rows to show.
Assume DS:InfoPage
Mov BX, CurrentRow
Mov AX, [CS:BP+4]
Sub AX, 3
Mov CX, AX
Dec AX
ShR AX, 1
Sub CX, AX
Add CX, BX ; CX = final row.
Sub BX, AX
JNC GetCurrentPatternRows2
Xor BX, BX
; BX = starting row.
GetCurrentPatternRows2:
Mov AX, CurrentPattern
Mov DecodeRow, BX
Mov DecodePattern, AX ; Now find offset.
Cmp AX, PatternArrayNumber ; BX = starting row, CX = final row.
JNE GetCurrentPatternRows5
Mov AX, PatternMaxRow
Mov DecodeMaxRow, AX
Cmp CX, AX
JBE GetCurrentPatternRows1
Mov CX, AX
GetCurrentPatternRows1:
Mov AX, 320
Mul BX
Mov DecodeOffset, AX
Sub CX, BX ; CX = number of rows.
Jmp GetCurrentPatternRows6
GetCurrentPatternRows5:
Call Music_GetPattern
Assume DS:Nothing
LodsW
LodsW
; AX = number of rows.
Mov DecodeMaxRow, AX
Cmp CX, AX
JBE GetCurrentPatternRows3
Mov CX, AX
GetCurrentPatternRows3:
Sub CX, BX
Add SI, 4
Call GotoRow
GetCurrentPatternRows6: ; Put numbers on screen.
Push CS
Pop DS
Push CX
Push DI
GetCurrentPatternRows7:
Mov AX, DecodeRow
Mov ES, Destination
GetCurrentPatternRows8:
Push CX
Mov CH, 20h
Call PE_ConvAX2Num
Pop CX
Inc AX
Add DI, 160
Loop GetCurrentPatternRows8
Pop DI
Pop CX
Ret
EndP GetCurrentPatternRows
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DrawHilightBar
Mov DI, [CS:BP+6]
Mov AX, [CS:BP+4]
ShR AX, 1
Mov AH, 160
Mul AH
Add DI, AX
Add DI, 11
DrawHilightBar1:
Or Byte Ptr [ES:DI], 0E0h
; Add DI, 2
ScasW
Dec CX
JNZ DrawHilightBar1
Ret
EndP DrawHilightBar
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayTrackData
Cmp PlayMode, 0
JNE DisplayTrackData1
Pop AX ; Pull off return address
Ret
DisplayTrackData1:
; Check if row is OK.
; Now check for early block
Mov DI, [CS:BP+6]
Add DI, (1+2*80)*2
Call GetBeforeRows
JCXZ DisplayTrackData3
DisplayTrackData2:
Push CX
Push DI
Push DS
Call LoadNextData ; Gets DS:SI
Call [CS:DrawTrackData]
Pop DS
Pop DI
Pop CX
Add DI, 160
Dec CX
JNZ DisplayTrackData2
DisplayTrackData3:
Call GetCurrentPatternRows
DisplayTrackData4:
Push CX
Push DI
Push DS
Call LoadNextData ; Gets DS:SI
Call [CS:DrawTrackData]
Pop DS
Pop DI
Pop CX
Add DI, 160
Dec CX
JNZ DisplayTrackData4
Call GetAfterRows
JCXZ DisplayTrackData6
DisplayTrackData5:
Push CX
Push DI
Push DS
Call LoadNextData ; Gets DS:SI
Call [CS:DrawTrackData]
Pop DS
Pop DI
Pop CX
Add DI, 160
Dec CX
JNZ DisplayTrackData5
DisplayTrackData6:
Ret
EndP DisplayTrackData
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show5Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A05h
Mov ES, Destination
Add DI, 8
Show5Channel1:
LodsB
Cmp AL, 119
JBE Show5Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show5Channel3
Mov AL, '^'
Cmp AH, 0FEh
JE Show5Channel3
Mov AL, 173 ; '.'
Show5Channel3:
Mov AH, 6
StosW
StosW
StosW
Jmp Show5Channel4
Show5Channel2: ; Show note.
AAM 12
; AL = octave
; AH = note.
Mov DX, AX
MovZX BX, AL
Add BX, BX
Mov AH, 6
Mov AL, [CS:BX+NoteTable]
StosW
Mov AL, [CS:BX+NoteTable+1]
StosW
Mov AL, DH
Add AL, 30h
StosW
Show5Channel4: ; Show ins.
; Add DI, 2
ScasW
LodsB
Test AL, AL
JZ Show5Channel5
Xor AH, AH
Div CH
Add AX, 3030h
Mov DL, AH
Mov AH, 6
StosW
Mov AL, DL
StosW
Jmp Show5Channel6
Show5Channel5:
Mov AL, 173
StosW
StosW
Show5Channel6: ; show vol
; Add DI, 2
ScasW
LodsB
Cmp AL, 0FFh
JE Show5Channel7
Mov AH, AL
And AH, 7Fh
Sub AH, 65
JC Show5ChannelNoVEffect
Test AL, 80h
JZ Show5ChannelVEffect
Add AH, 60
Show5ChannelVEffect:
Mov AL, AH
Xor AH, AH
Div CH
; AL = effect, AH = num
Add AX, 'A'+'0'*256
Mov DL, AH
Mov AH, 6
StosW
Mov AL, DL
StosW
Jmp Show5Channel8
Show5ChannelNoVEffect:
Mov DL, 6
Test AL, 80h
JZ Show5Channel10
Mov DL, 2
And AL, 7Fh
Show5Channel10:
Xor AH, AH
Div CH
Add AX, 3030h
XChg DL, AH
StosW
Mov AL, DL
StosW
Mov AH, 6
Jmp Show5Channel8
Show5Channel7:
Mov AL, 173
StosW
StosW
Show5Channel8:
; Add DI, 2
ScasW
LodsB
And AL, AL
JNZ Show5Channel9
Mov AL, '.'-'@'
Show5Channel9:
Add AL, '@'
StosW ; Command
LodsB ; Commandvalue.
Mov AH, AL
And AX, 0FF0h
Mov DL, AH
ShR AL, 4
Mov AH, 6
Call DrawHexAL
Mov AL, DL
Call DrawHexAL
Dec CL
JZ Show5ChannelEnd
Mov AX, 2A8h
StosW
Jmp Show5Channel1
Show5ChannelEnd:
Ret
EndP Show5Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_5Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 74
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_5Channel2
Mov BX, DX
Display_5Channel2:
Mov CX, DX
Sub CX, 4
Cmp BX, CX
JGE Display_5Channel3
Mov BX, CX
Display_5Channel3:
Cmp BX, 59
JB Display_5Channel11
Mov BX, 59
Display_5Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A05h
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Mov SI, Offset Channel5Msg
Display_5Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI+9], AX
Call GetChannelColour
Call S_DrawString
Add DI, 4
Inc BX
Dec CL
JNZ Display_5Channel4
Mov [CS:DrawTrackData], Offset Show5Channel
Call DisplayTrackData
Mov CX, 69
Call DrawHilightBar
Ret
EndP Display_5Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show8Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A08h
Mov ES, Destination
Add DI, 8
Show8Channel1:
LodsW
Cmp AL, 119
JBE Show8Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show8Channel3
Mov AL, '^'
Cmp AH, 0FEh
JE Show8Channel3
Mov AL, 173 ; '.'
Show8Channel3:
Mov AH, 6
StosW
StosW
StosW
Jmp Show8Channel4
Show8Channel2: ; Show note.
AAM 12
Mov DX, AX
MovZX BX, AL
Add BX, BX
Mov AH, 6
Mov AL, [CS:BX+NoteTable]
StosW
Mov AL, [CS:BX+NoteTable+1]
StosW
Mov AL, DH
Add AL, 30h
StosW
Show8Channel4: ; Show vol.
LodsB
Cmp AL, 0FFh
JE Show8Channel5
Mov AH, AL
And AH, 7Fh
Sub AH, 65
JC Show8ChannelNoVEffect
Test AL, 80h
JZ Show8ChannelVEffect
Add AH, 60
Show8ChannelVEffect:
Mov AL, AH
Xor AH, AH
Div CH
; AL = effect, AH = num
Add AX, 'A'+'0'*256
Mov DL, AH
Mov AH, 2
StosW
Mov AL, DL
StosW
Jmp Show8Channel6
Show8ChannelNoVEffect:
Mov DL, 2
Test AL, 80h
JZ Show8Channel10
Dec DL
And AL, 7Fh
Show8Channel10:
Xor AH, AH
Div CH
Add AX, 3030h
XChg DL, AH
StosW
Mov AL, DL
StosW
Jmp Show8Channel6
Show8Channel5:
Add DI, 4
Show8Channel6:
LodsB
And AL, AL
JNZ Show8Channel9
Mov AL, '.'-'@'
Show8Channel9:
Add AL, '@'
Mov AH, 6
StosW ; Command
LodsB ; Commandvalue.
Mov AH, AL
And AX, 0FF0h
Mov DL, AH
ShR AL, 4
Mov AH, 6
Call DrawHexAL
Mov AL, DL
Call DrawHexAL
Dec CL
JZ Show8ChannelEnd
Mov AX, 2A8h
StosW
Jmp Show8Channel1
Show8ChannelEnd:
Ret
EndP Show8Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_8Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 76
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_8Channel2
Mov BX, DX
Display_8Channel2:
Mov CX, DX
Sub CX, 7
Cmp BX, CX
JGE Display_8Channel3
Mov BX, CX
Display_8Channel3:
Cmp BX, 56
JB Display_8Channel11
Mov BX, 56
Display_8Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A08h
Mov DI, [CS:BP+6]
Add DI, (6+1*80)*2
Mov SI, Offset Channel8Msg
Display_8Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI+2], AX
Call GetChannelColour
Call S_DrawString
Add DI, 6
Inc BX
Dec CL
JNZ Display_8Channel4
Mov [CS:DrawTrackData], Offset Show8Channel
Call DisplayTrackData
Mov CX, 71
Call DrawHilightBar
Ret
EndP Display_8Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show10Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A0Ah
Mov ES, Destination
Add DI, 8
Show10Channel1:
LodsB
Cmp AL, 119
JBE Show10Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show10Channel3
Mov AL, '^'
Cmp AH, 0FEh
JE Show10Channel3
Mov AL, 173 ; '.'
Show10Channel3:
Mov AH, 6
StosW
StosW
StosW
Jmp Show10Channel4
Show10Channel2: ; Show note.
AAM 12
; AL = octave
; AH = note.
Mov DX, AX
MovZX BX, AL
Add BX, BX
Mov AH, 6
Mov AL, [CS:BX+NoteTable]
StosW
Mov AL, [CS:BX+NoteTable+1]
StosW
Mov AL, DH
Add AL, 30h
StosW
Show10Channel4: ; Show Instrument
LodsB ; AL = instrument
And AX, 0FFh
JZ Show10Channel5 ; No instrument?
Div CH
; AL = tens, AH = units
ShL AL, 4
Or AL, AH
Mov AH, 0Ah
StosW ; Instrument done.
Jmp Show10Channel6
Show10Channel5:
Mov AX, 184+200h
StosW
Show10Channel6: ; Show volume
LodsB ; AL = volume
Cmp AL, 0FFh
JE Show10Channel7
Mov AH, AL
And AH, 7Fh
Sub AH, 65
JC ViewAllSmallNoVEffect
Test AL, 80h
JZ ViewAllSmallVEffect1
Mov AL, AH
Add AL, 226
Mov AH, 6
StosW
Jmp Show10Channel8
ViewAllSmallVEffect1:
Mov AL, AH
AAM
Add AH, 0Ah
ShL AH, 4
Or AL, AH
Mov AH, 12
StosW
Comment ~
Mov AL, AH
Mov AH, 0
Div CH
; AL = effect, AH = num
Add AL, 0Ah
ShL AL, 4
Or AL, AH
Mov AH, 12
StosW
~
Jmp Show10Channel8
ViewAllSmallNoVEffect:
; Xor AH, AH
Mov DL, 12 ; Volume
Test AL, AL
JNS Show10Channel9
Mov DL, 9
And AL, 7Fh
Show10Channel9:
; Div CH
AAM
; AL = tens, AH = units
ShL AH, 4
Or AL, AH
Mov AH, DL
StosW
Jmp Show10Channel8
Show10Channel7: ; No volume
Mov AX, 184+600h
StosW
Show10Channel8: ; Show volume
LodsB
Test AL, AL
JNZ Show10Channel10
Add AL, '.'-'@'
Show10Channel10:
Add AL, '@'
Mov AH, 2
StosW ; Command
Mov AH, 0Ah
LodsB ; Commandvalue.
StosW
Dec CL
JNZ Show10Channel1
Ret
EndP Show10Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_10Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 75
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_10Channel2
Mov BX, DX
Display_10Channel2:
Mov CX, DX
Sub CX, 9
Cmp BX, CX
JGE Display_10Channel3
Mov BX, CX
Display_10Channel3:
Cmp BX, 54
JB Display_10Channel11
Mov BX, 54
Display_10Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A0Ah
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Mov SI, Offset Channel8Msg
Display_10Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI+2], AX
Call GetChannelColour
Call S_DrawString
; Add DI, 2
ScasW
Inc BX
Dec CL
JNZ Display_10Channel4
Mov [CS:DrawTrackData], Offset Show10Channel
Call DisplayTrackData
Mov CX, 70
Call DrawHilightBar
Ret
EndP Display_10Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Process3CharacterRow
Push SI
LodsW
Cmp AX, 0FDh
JE Show18Channel4
Cmp AL, 0FDh
JE Show18Channel3
JB Show18Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show18Channel8
Mov AL, '^'
Cmp AH, 0FEh
JE Show18Channel8
Mov AL, 173 ; '.'
Show18Channel8:
Mov AH, 6
StosW
StosW
StosW
Jmp Show18Channel7
Show18Channel2:
AAM 12
Mov DX, AX
MovZX BX, AL
Add BX, BX
Mov AH, 6
Mov AL, [CS:BX+NoteTable]
StosW
Mov AL, [CS:BX+NoteTable+1]
StosW
Mov AL, DH
Add AL, 30h
StosW
Jmp Show18Channel7
Show18Channel3:
MovZX AX, AH
Div CH
Add AX, 3030h
Mov DL, AH
Mov AH, 6
; Add DI, 2
ScasW
StosW
Mov AL, DL
StosW
Jmp Show18Channel7
Show18Channel4:
LodsW
Cmp AX, 0FFh
JE Show18Channel6
Cmp AL, 0FFh
JE Show18Channel5
; Add DI, 2
ScasW
Mov AH, AL
And AH, 7Fh
Sub AH, 65
JC Show18ChannelNoVEffect
Test AL, 80h
JZ Show18ChannelVEffect
Add AH, 60
Show18ChannelVEffect:
Mov AL, AH
Xor AH, AH
Div CH
; AL = effect, AH = num
Add AX, 'A'+'0'*256
Mov DL, AH
Mov AH, 2
StosW
Mov AL, DL
StosW
Jmp Show18Channel7
Show18ChannelNoVEffect:
Mov DL, 2
Test AL, 80h
JZ Show18Channel9
Dec DX
And AL, 7Fh
Show18Channel9:
Xor AH, AH ; Volume
Div CH
Add AX, 3030h
XChg DL, AH
StosW
Mov AL, DL
StosW
Jmp Show18Channel7
Show18Channel5:
Mov AL, AH
Add AL, '@'
Mov AH, 2
StosW
LodsB ; Commandvalue.
Mov AH, AL
And AX, 0FF0h
Mov DL, AH
ShR AL, 4
Mov AH, 2
Call DrawHexAL
Mov AL, DL
Call DrawHexAL
Jmp Show18Channel7
Show18Channel6:
Mov AX, 173+256*6
StosW
StosW
StosW
Show18Channel7:
Pop SI
Add SI, 5
Ret
EndP Process3CharacterRow
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show18Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A12h
Mov ES, Destination
Add DI, 8
Show18Channel1:
Call Process3CharacterRow
Dec CL
JZ Show18ChannelEnd
Mov AX, 2A8h
StosW
Jmp Show18Channel1
Show18ChannelEnd:
Ret
EndP Show18Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_18Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 76
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_18Channel2
Mov BX, DX
Display_18Channel2:
Mov CX, DX
Sub CX, 17
Cmp BX, CX
JGE Display_18Channel3
Mov BX, CX
Display_18Channel3:
Cmp BX, 46
JB Display_18Channel11
Mov BX, 46
Display_18Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A12h
Mov DI, [CS:BP+6]
Add DI, (6+1*80)*2
Mov SI, Offset Channel18Msg
Display_18Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI], AX
Call GetChannelColour
Call S_DrawString
Add DI, 4
Inc BX
Dec CL
JNZ Display_18Channel4
Mov [CS:DrawTrackData], Offset Show18Channel
Call DisplayTrackData
Mov CX, 71
Call DrawHilightBar
Ret
EndP Display_18Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show24Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A18h
Mov ES, Destination
Add DI, 8
Show24Channel1:
Call Process3CharacterRow
Dec CL
JNZ Show24Channel1
Ret
EndP Show24Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_24Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 77
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_24Channel2
Mov BX, DX
Display_24Channel2:
Mov CX, DX
Sub CX, 23
Cmp BX, CX
JGE Display_24Channel3
Mov BX, CX
Display_24Channel3:
Cmp BX, 40
JB Display_24Channel11
Mov BX, 40
Display_24Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A18h
Mov DI, [CS:BP+6]
Add DI, (6+1*80)*2
Mov SI, Offset Channel18Msg
Display_24Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI], AX
Call GetChannelColour
Call S_DrawString
; Add DI, 2
ScasW
Inc BX
Dec CL
JNZ Display_24Channel4
Mov [CS:DrawTrackData], Offset Show24Channel
Call DisplayTrackData
Mov CX, 72
Call DrawHilightBar
Ret
EndP Display_24Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show36Channel
Mov AL, [CS:BP+2]
Mov AH, 5
Mul AH
Add SI, AX ; DS:SI points to stuff.
Mov CX, 0A24h
Mov ES, Destination
Add DI, 8
Show36Channel1:
LodsW
Cmp AX, 0FDh
JE Show36Channel4
Add SI, 3
Cmp AL, 0FDh
JE Show36Channel3
JB Show36Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show36Channel8
Mov AL, '^'
Cmp AH, 0FEh
JE Show36Channel8
Mov AL, 173 ; '.'
Show36Channel8:
Mov AH, 6
StosW
StosW
Jmp Show36Channel7
Show36Channel2:
AAM 12
Mov BX, Offset Note2Table
SegCS XLatB
Mov DL, AH
Mov AH, 6
StosW
Mov AL, DL
Add AL, 30h
StosW
Jmp Show36Channel7
Show36Channel3:
MovZX AX, AH
Div CH
Add AX, 3030h
Mov DL, AH
Mov AH, 6
StosW
Mov AL, DL
StosW
Jmp Show36Channel7
Show36Channel4:
LodsW
Cmp AX, 0FFh
JE Show36Channel6
Cmp AL, 0FFh
JE Show36Channel5
Mov AH, AL
And AH, 7Fh
Sub AH, 65
JC Show36ChannelNoVEffect
Test AL, 80h
JZ Show36ChannelVEffect
Add AH, 60
Show36ChannelVEffect:
Mov AL, AH
Xor AH, AH
Div CH
; AL = effect, AH = num
Add AX, 'A'+'0'*256
Mov DL, AH
Mov AH, 2
StosW
Mov AL, DL
StosW
Jmp Show36ChannelEndVolume
Show36ChannelNoVEffect:
Mov DL, 2
Test AL, 80h
JZ Show36Channel10
And AL, 7Fh
Dec DX
Show36Channel10:
Xor AH, AH ; Volume
Div CH
Add AX, 3030h
XChg DL, AH
StosW
Mov AL, DL
StosW
Show36ChannelEndVolume:
Inc SI
Jmp Show36Channel7
Show36Channel5:
Mov AL, AH
Add AL, '@'
Mov AH, 2
StosW
LodsB
Mov AH, 0Ah
StosW
Jmp Show36Channel7
Show36Channel6:
Mov AX, 173+256*6
StosW
StosW
Inc SI
Show36Channel7:
Dec CL
JNZ Show36Channel9
Ret
Show36Channel9:
Jmp Show36Channel1
EndP Show36Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_36Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 77
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Fill in text.
; check boundaries.
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_36Channel2
Mov BX, DX
Display_36Channel2:
Mov CX, DX
Sub CX, 35
Cmp BX, CX
JGE Display_36Channel3
Mov BX, CX
Display_36Channel3:
Cmp BX, 28
JB Display_36Channel11
Mov BX, 28
Display_36Channel11:
Mov [CS:BP+2], BL ; top channel.
; Now do channel msgs.
Mov CX, 0A24h
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Mov SI, Offset Channel18Msg
Display_36Channel4:
MovZX AX, BL
Inc AX
Div CH
Add AX, 3030h
Mov [SI], AX
Call GetChannelColour
Call S_DrawString
Inc BX
Dec CL
JNZ Display_36Channel4
Mov [CS:DrawTrackData], Offset Show36Channel
Call DisplayTrackData
Mov CX, 72
Call DrawHilightBar
Ret
EndP Display_36Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Show64Channel
; DS:SI points to stuff.
Mov CX, 64
Mov ES, Destination
Add DI, 8
Show64Channel1:
LodsW
Cmp AX, 0FDh
JE Show64Channel4
Add SI, 3
Cmp AL, 0FDh
JE Show64Channel3
JB Show64Channel2
Mov AH, AL
Mov AL, 205
Cmp AH, 0FFh
JE Show64Channel8
Mov AL, '^'
Cmp AH, 0FEh
JE Show64Channel8
Mov AL, 173 ; '.'
Show64Channel8:
Mov AH, 6
StosW
Jmp Show64Channel7
Show64Channel2:
AAM 12
Mov BX, Offset Note2Table
SegCS XLatB
Mov AH, 6
StosW
Jmp Show64Channel7
Show64Channel3:
Mov AL, AH
AAM
ShL AH, 4
Or AL, AH
Mov AH, 10
StosW
Jmp Show64Channel7
Show64Channel4:
LodsW
Inc SI
Cmp AL, 0FFh
JE Show64Channel6
Mov DL, AL
And AX, 07Fh
Cmp AL, 64
JA Show64Channel6
AAM
ShL AH, 4
Or AL, AH
Mov AH, 12
Test DL, 80h
JZ Show64ChannelVolumePan
Mov AH, 9
Show64ChannelVolumePan:
StosW
Jmp Show64Channel7
Show64Channel6:
Mov AX, 173+256*6
StosW
Show64Channel7:
Dec CX
JNZ Show64Channel9
Mov CX, 9
Mov AX, 173+256*6
Rep StosW
Ret
Show64Channel9:
Jmp Show64Channel1
EndP Show64Channel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_64Channel
Assume DS:InfoPage
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Inc AX
Push AX
Push 78
Add AX, [CS:BP+4]
Sub AL, 2
Push AX
Push 27
Call S_DrawBox
Add SP, 10
; Now do channel msgs.
Mov CX, 0A40h
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Mov SI, Offset Channel18Msg
Xor BX, BX
Mov DL, Byte Ptr CurrentChannel
Display_64Channel4:
MovZX AX, BL
Inc AX
Div CH
ShL AL, 4
Or AL, AH
Mov DH, AL
Call GetChannelColour
Or AH, 8
Mov AL, DH
StosW
Inc BX
Dec CL
JNZ Display_64Channel4
Mov AX, 1000h
Mov CX, 9
Rep StosW
Mov Byte Ptr [CS:BP+2], 0
Mov [CS:DrawTrackData], Offset Show64Channel
Call DisplayTrackData
Mov CX, 73
Call DrawHilightBar
Ret
EndP Display_64Channel
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_Variables
Mov DI, [CS:BP+6]
Add DI, (2+1*80)*2
Call Music_GetSlaveChannelInformationTable
; DS:SI points to tables
; CX = numchannels.
Xor DX, DX ; DX = counter of
; currently act.
; channels.
Xor BX, BX
Display_Variables1:
Cmp Word Ptr [SI+38h], 0
JE Display_Variables2
Inc BX
Display_Variables2:
Mov AX, [SI]
; Test AH, 8
; JNZ Display_Variables4
And AX, 1
Add DX, AX
Display_Variables4:
Add SI, SLAVECHANNELSIZE
Loop Display_Variables1
Push BX
Call Music_GetDisplayVariables ; AX = Current Speed
; BX = current tempo
; CX = global volume
; DX = active channels
Pop BX
Push CX
Push BX
Push DX
Push CS
Pop DS
Mov AH, 20h
Mov AL, Byte Ptr CurrentWindow
Cmp AL, Byte Ptr ProcessWindow
JNE Display_Variables3
Mov AH, 23h
Display_Variables3:
Mov SI, Offset VariablesMsg
Call S_DrawString
Add SP, 6
Ret
EndP Display_Variables
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_NoteDots ; Draw boxes first.
Assume DS:InfoPage
Mov ES, Destination
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Push AX
Push 78
Add AX, [CS:BP+4]
Dec AX
Push AX
Push 27
Call S_DrawBox
Add SP, 10
Mov DX, CurrentChannel
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_Dots1
Mov BX, DX
Display_Dots1:
LEA CX, [EDX+3]
Sub CX, [CS:BP+4]
Cmp BX, CX
JGE Display_Dots2
Mov BX, CX
Display_Dots2:
Mov CX, 66
Sub CX, [CS:BP+4]
Cmp BX, CX
JLE Display_Dots3
Mov BX, 65
Sub BX, [CS:BP+4]
Display_Dots3:
Mov [CS:BP+2], BL ; BL = top channel
Call DrawChannelNumbers
Mov DX, [CS:BP+4]
Sub DX, 2
Mov BL, [CS:BP+2] ; BL = channel
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Display_Dots4:
Push DI
Push CS
Pop ES
Mov DI, Offset DataArray
Mov AX, 600h + 193
Mov CX, 73
Rep StosW ; DataArray cleared.
; OK.. loop to find channel usage.
Call Music_GetSlaveChannelInformationTable
; Return DS:SI, CX
Display_Dots5:
; Cmp Word Ptr [SI+38h], 0
; JE Display_Dots8
Test Byte Ptr [SI], 1
JZ Display_Dots6
Mov AL, [SI+3Ah]
And AX, 7Fh
Cmp AL, BL
JNE Display_Dots6 ; Nope.. not the same channel
Mov AL, [SI+32h]
Sub AL, 30
JC Display_Dots6
Cmp AL, 73
JAE Display_Dots6
LEA DI, [DataArray+EAX+EAX]
Mov AL, [SI+20h]
Mov AH, [SI+36h]
Cmp AH, 100
JNE Display_DotsNOMIDI
Mov AH, [SI+33h]
Display_DotsNoMIDI:
And AH, 3
Add AL, 7
ShR AL, 4
AdC AX, 200h+193
Test Word Ptr [SI], 800h
JZ Display_Dots7
Mov AH, 1 ; 6
Display_Dots7:
Test Byte Ptr [SI+3Ah], 80h
JZ Display_Dots9
Cmp Byte Ptr [CS:DI], AL
JA Display_Dots6
Display_Dots9:
Mov [CS:DI], AX
Display_Dots6:
Add SI, SLAVECHANNELSIZE
Dec CX
JNZ Display_Dots5
Display_Dots8:
; Dump to screen buffer.
Pop DI
Push CS
Pop DS
Mov SI, Offset DataArray
Mov ES, Destination
Mov CX, 73
Rep MovsW
Add DI, 160-146
Inc BL
Dec DX
JNZ Display_Dots4
Ret
EndP Display_NoteDots
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Comment ~
Proc Display_SampleDots ; Draw boxes first.
Assume DS:InfoPage
Mov ES, Destination
Mov AX, 4 ; left
Push AX
Mov AL, [CS:BP+3]
Push AX
Push 78
Add AX, [CS:BP+4]
Dec AX
Push AX
Push 27
Call S_DrawBox
Add SP, 10
Mov DX, CurrentSample
MovZX BX, Byte Ptr [CS:BP+2]
Cmp DX, BX
JAE Display_SampleDots1
Mov BX, DX
Display_SampleDots1:
LEA CX, [EDX+3]
Sub CX, [CS:BP+4]
Cmp BX, CX
JGE Display_SampleDots2
Mov BX, CX
Display_SampleDots2:
Mov CX, 66
Sub CX, [CS:BP+4]
Cmp BX, CX
JLE Display_SampleDots3
Mov BX, 65
Sub BX, [CS:BP+4]
Display_SampleDots3:
Mov [CS:BP+2], BL ; BL = top channel
Mov CL, [CS:BP+4]
Mov CH, 0Ah
Sub CL, 2
Mov DI, [CS:BP+6]
Add DI, (2+1*80)*2
Display_SampleDotsNumbers1: ; BX = top number, CL = count
Inc BX
Mov AX, BX
Div CH
Add AX, 3030h
Mov DH, AH
Mov AH, 21h
StosW
Mov AL, DH
StosW
Add DI, 160-4
Dec CL
JNZ Display_SampleDotsNumbers1
Mov DX, [CS:BP+4]
Sub DX, 2
Mov BL, [CS:BP+2] ; BL = sample
Mov DI, [CS:BP+6]
Add DI, (5+1*80)*2
Display_SampleDots4:
Push DI
Push CS
Pop ES
Mov DI, Offset DataArray
Mov AX, 600h + 193
Mov CX, 73
Rep StosW ; DataArray cleared.
; OK.. loop to find channel usage.
Call Music_GetSlaveChannelInformationTable
; Return DS:SI, CX
Display_SampleDots5:
Test Byte Ptr [SI], 1
JZ Display_SampleDots6
Mov AL, [SI+36h]
Cmp AL, BL
JNE Display_SampleDots6 ; Nope.. not the same channel
MovZX AX, Byte Ptr [SI+32h]
Sub AL, 30
JC Display_SampleDots6
Cmp AL, 73
JAE Display_SampleDots6
LEA DI, [DataArray+EAX+EAX]
Mov AL, [SI+20h] ; Volume
Mov AH, [SI+33h] ; Instrument
And AH, 3
Add AL, 7
ShR AL, 4
AdC AX, 200h+193
Test Word Ptr [SI], 800h
JZ Display_SampleDots7
Mov AH, 1 ; 6 ; Muted
Display_SampleDots7:
Cmp Byte Ptr [CS:DI], AL
JA Display_SampleDots6
Display_SampleDots9:
Mov [CS:DI], AX
Display_SampleDots6:
Add SI, SLAVECHANNELSIZE
Dec CX
JNZ Display_SampleDots5
Display_SampleDots8:
; Dump to screen buffer.
Pop DI
Push CS
Pop DS
Mov SI, Offset DataArray
Mov ES, Destination
Mov CX, 73
Rep MovsW
Add DI, 160-146
Inc BL
Dec DX
JNZ Display_SampleDots4
Ret
EndP Display_SampleDots
~
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DrawDisplayData Far
Call PE_GetCurrentPattern
Mov CS:PatternSegment, DS
Push CS
Pop DS
Assume DS:InfoPage
Call S_GetDestination
Mov Destination, ES
Mov PatternArrayNumber, AX
Mov PatternMaxRow, BX
Call Music_GetPlayMode
Mov PlayMode, AX
Mov CurrentRow, BX
Mov CurrentPattern, CX
Mov CurrentOrder, DX
Xor BP, BP
Cmp CX, PatternArrayNumber
JNE DrawDisplayData1
Call Music_GetPatternLength
Mov PatternMaxRow, AX
DrawDisplayData1:
Push CS
Pop DS
Assume DS:InfoPage
Push BP
Mov ProcessWindow, BP
ShL BP, 3
Add BP, Offset DisplayWindows
Mov SI, [CS:BP]
Xor AL, AL
Cmp FullScreen, 0
JNE DisplayDataFull
Cmp BP, Offset DisplayWindows
JE DisplayData2
DisplayDataFull:
Test SI, SI
JZ DisplayData2
Cmp SI, DOTSDISPLAY
JE DisplayData2
Inc AX
Dec Byte Ptr [CS:BP+3] ; Starting row
Inc Word Ptr [CS:BP+4] ; Length of window
Sub Word Ptr [CS:BP+6], 160 ; Offset
DisplayData2:
Mov [RestoreData], AL
Add SI, SI
Call [DisplayDataModes+SI]
Push CS
Pop DS
Cmp [RestoreData], 0
JE DisplayData3
Pop BX
Push BX
ShL BX, 3
Add BX, Offset DisplayWindows
Inc Byte Ptr [BX+3]
Dec Word Ptr [BX+4]
Add Word Ptr [BX+6], 160
DisplayData3:
Pop BP
Inc BP
Cmp BP, NumWindows
JB DrawDisplayData1
Mov AX, 1
Ret
EndP DrawDisplayData
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc PostDisplayData Far
Push CS
Pop DS
Assume DS:InfoPage
Mov SI, Offset DisplayListKeys
Call M_FunctionDivider
JC PostDisplayData1
Jmp [SI]
PostDisplayData1:
Xor AX, AX
Ret
EndP PostDisplayData
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayUp Far
Assume DS:InfoPage
Mov AX, 1
Sub CurrentChannel, AX
AdC CurrentChannel, 0
Ret
EndP DisplayUp
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayDown Far
Assume DS:InfoPage
Mov AX, CurrentChannel
Inc AX
Cmp AX, 64
JAE DisplayDown1
Mov CurrentChannel, AX
DisplayDown1:
Mov AX, 1
Ret
EndP DisplayDown
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayPlus Far
Call Music_NextOrder
Mov AX, 1
Ret
EndP DisplayPlus
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayMinus Far
Call Music_LastOrder
Mov AX, 1
Ret
EndP DisplayMinus
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayInsert Far
Assume DS:InfoPage
Cmp NumWindows, 5
JAE DisplayInsert1
Push DS
Pop ES
Mov AX, 8
Mul Byte Ptr CurrentWindow ; AX = offset
Mov SI, Offset DisplayWindows
Add SI, AX
Cmp Word Ptr [SI+4], 6 ; Length of window
JBE DisplayInsert1
Push SI
Mov AX, 8
Mul Byte Ptr NumWindows
Mov SI, Offset DisplayWindows
Add SI, AX
Mov DI, SI
Sub SI, 8
Mov DX, NumWindows
Sub DX, CurrentWindow
DisplayInsert2:
Mov CX, 4
Rep MovsW
Sub SI, 16
Sub DI, 16
Dec DX
JNZ DisplayInsert2
Pop SI ; SI points to cur win
; now to resize..
Mov AX, [SI+4] ; AX = length of win
ShR AX, 1
AdC AX, 0
Mov [SI+4], AX ; halve length.
Sub [SI+8+4], AX ; second one also
Add AL, [SI+3] ; Add top line
Mov [SI+8+3], AL
Mov AH, 160
Mul AH
Mov [SI+8+6], AX
Inc NumWindows
DisplayInsert1:
Mov AX, 1
Ret
EndP DisplayInsert
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayDelete Far
Assume DS:InfoPage
Cmp NumWindows, 1
JBE DisplayDelete1
Mov AX, 8
Mul Byte Ptr CurrentWindow ; AX = offset
Mov SI, Offset DisplayWindows
Add SI, AX
Mov DI, SI
Mov BX, [SI+4] ; Length of deleted win
Push SI
Add SI, 8
Push DS
Pop ES
Mov DX, NumWindows
Sub DX, CurrentWindow
DisplayDelete2:
Mov CX, 4
Rep MovsW
Dec DX
JNZ DisplayDelete2
Pop SI
; Now to recombine.
Dec NumWindows
Mov AX, CurrentWindow
Cmp AX, NumWindows
JB DisplayDelete3
Dec CurrentWindow ; Combine with earlier.
Add [SI-8+4], BX
Jmp DisplayDelete1
DisplayDelete3: ; Combine with next
Add [SI+4], BX
Mov AL, [SI+3]
Sub AL, BL
Mov [SI+3], AL
Mov AH, 160
Mul AH
Mov [SI+6], AX
DisplayDelete1:
Mov AX, 1
Ret
EndP DisplayDelete
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayNext Far
Assume DS:InfoPage
Mov AX, CurrentWindow
Inc AX
Cmp AX, NumWindows
JB DisplayNext1
Xor AX, AX
DisplayNext1:
Mov CurrentWindow, AX
Mov AX, 1
Ret
EndP DisplayNext
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayPrevious Far
Mov AX, CurrentWindow
And AX, AX
JZ DisplayPrevious1
Dec AX
Mov CurrentWindow, AX
DisplayPrevious1:
Mov AX, 1
Ret
EndP DisplayPrevious
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayAltUp Far
Assume DS:InfoPage
Mov BX, 3
Mov AX, CurrentWindow
Sub AX, 1
AdC BX, 0
Add AX, 2
Cmp AX, NumWindows
JAE DisplayAltUp1
Mov AH, 8
Mul AH
Mov SI, Offset DisplayWindows
Add SI, AX
Cmp Word Ptr [SI-8+4], BX
JBE DisplayAltUp1
Inc Word Ptr [SI+4]
Dec Word Ptr [SI-8+4]
Dec Byte Ptr [SI+3]
Sub Word Ptr [SI+6], 160
DisplayAltUp1:
Mov AX, 1
Ret
EndP DisplayAltUp
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayAltDown Far
Assume DS:InfoPage
Mov AX, CurrentWindow
Inc AX
Cmp AX, NumWindows
JAE DisplayAltDown1
Mov AH, 8
Mul AH
Mov SI, Offset DisplayWindows
Add SI, AX
Cmp Word Ptr [SI+4], 3
JBE DisplayAltDown1
Inc Word Ptr [SI-8+4]
Dec Word Ptr [SI+4]
Inc Byte Ptr [SI+3]
Add Word Ptr [SI+6], 160
DisplayAltDown1:
Mov AX, 1
Ret
EndP DisplayAltDown
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayPageUp Far
Assume DS:InfoPage
Mov AX, CurrentWindow
Mov AH, 8
Mul AH
Mov SI, Offset DisplayWindows
Add SI, AX
Mov AX, [SI]
And AX, AX
JNZ DisplayPageUp1
Mov AX, PLAYMETHODS
DisplayPageUp1:
Dec AX
Mov [SI], AX
Mov AX, 1
Ret
EndP DisplayPageUp
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayPageDown Far
Assume DS:InfoPage
Mov AX, CurrentWindow
Mov AH, 8
Mul AH
Mov SI, Offset DisplayWindows
Add SI, AX
Mov AX, [SI]
Inc AX
Cmp AX, PLAYMETHODS
JB DisplayPageDown1
Xor AX, AX
DisplayPageDown1:
Mov [SI], AX
Mov AX, 1
Ret
EndP DisplayPageDown
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayHome Far
Assume DS:InfoPage
Mov CurrentChannel, 0
Mov AX, 1
Ret
EndP DisplayHome
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayEnd Far
Assume DS:InfoPage
Call Music_GetLastChannel
Mov CurrentChannel, AX
Mov AX, 1
Ret
EndP DisplayEnd
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayToggleChannel Far
Mov AX, CurrentChannel
Call Music_ToggleChannel
Mov AX, 1
Ret
EndP DisplayToggleChannel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplaySoloChannel Far
Mov AX, CurrentChannel
Call Music_SoloChannel
Mov AX, 1
Ret
EndP DisplaySoloChannel
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OldEBX DD 0
OldECX DD 0
Proc DisplayUpdateScreen Far
IF NETWORKENABLED
Call Network_Poll
Test AX, AX
JNZ DisplayUpdateScreen1
ENDIF
Call Music_Poll
Call Music_GetPlayMode2
Test AX, AX
JZ DisplayUpdateScreen3 ; Play mode 0 - update screen
Cmp CS:OldEBX, EBX
JNE DisplayUpdateScreen2
Cmp CS:OldECX, ECX
JNE DisplayUpdateScreen2
Xor AX, AX
Ret
DisplayUpdateScreen3:
Mov EBX, -1
Mov ECX, EBX
DisplayUpdateScreen2:
Mov CS:OldEBX, EBX
Mov CS:OldECX, ECX
DisplayUpdateScreen1:
Mov AX, 1
Ret
EndP DisplayUpdateScreen
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayToggleStereo Far
Assume DS:InfoPage
Call Music_GetSongSegment
Mov ES, AX
Mov AL, [ES:2Ch]
Xor AL, 1
Mov [ES:2Ch], AL
Mov SI, Offset StereoEnabledMsg
Test AL, 1
JNZ DisplayToggleStereo1
Mov SI, Offset StereoDisabledMsg
DisplayToggleStereo1:
Call SetInfoLine
Call Music_InitStereo
Mov AX, 1
Ret
EndP DisplayToggleStereo
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_GetDisplayWindowData Far
Push CS
Pop DS
Assume DS:InfoPage
Mov DX, Offset DisplayWindows
Ret
EndP DIsplay_GetDisplayWindowData
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_GotoPattern Far
Call Music_GetPlayMode
Cmp AX, 1
JB Display_GotoPattern1
JE Display_GotoPattern2
Push Pattern
Pop DS
Assume DS:Pattern
Mov Order, DX
Display_GotoPattern2:
Mov AX, CX
; BX = current row
Mov CX, CS:CurrentChannel
Jmp PE_GotoPattern
Display_GotoPattern1:
Xor AX, AX
Ret
EndP Display_GotoPattern
Assume DS:Nothing
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_SpaceBar Far
Assume DS:InfoPage
Call DisplayToggleChannel
Jmp DisplayDown
EndP Display_SpaceBar
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayToggleVelocity Far
Mov SI, Offset VolumeMsg
Xor Byte Ptr Velocity, 1
JZ DisplayToggleVelocity1
Mov SI, Offset VelocityMsg
DisplayToggleVelocity1:
Call SetInfoLine
Mov AX, 1
Ret
EndP DisplayToggleVelocity
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayToggleInstrument Far
Mov SI, Offset SampleMsg
Xor Byte Ptr Instrument, 1
JZ DisplayToggleInstrument1
Mov SI, Offset InstrumentMsg
DisplayToggleInstrument1:
Call SetInfoLine
Mov AX, 1
Ret
EndP DisplayToggleInstrument
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc DisplayToggleReverse Far
Call Music_ToggleReverse
Mov AX, 1
Ret
EndP DisplayToggleReverse
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_SelectDisplayList Far
Cmp CS:FullScreen, 1
JZ Display_FullScreen3
Jmp Display_FullScreen4
EndP Display_SelectDisplayList
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Proc Display_FullScreen Far
Cmp NumWindows, 1
JE Display_FullScreen1
Mov AX, 1
Ret
Display_FullScreen1:
Push Glbl
Pop ES
Assume ES:Glbl
Mov ES:CurrentMode, 5
Assume ES:Nothing
Xor FullScreen, 1
JZ Display_FullScreen2
Mov Byte Ptr [DisplayWindows+3], 1
Mov DWord Ptr [DisplayWindows+4], 160*10000h+49
Display_FullScreen3:
Push Glbl
Pop ES
Assume ES:Glbl
Mov ES:CurrentMode, 200
Assume ES:Nothing
Mov AX, 5
Mov SI, 1
Mov CX, Object1
Mov DX, Offset O1_FullDisplayList
Ret
Display_FullScreen2:
Mov Byte Ptr [DisplayWindows+3], 12
Mov DWord Ptr [DisplayWindows+4], 12*80*2*65536+38
Display_FullScreen4:
Push Glbl
Pop ES
Assume ES:Glbl
Mov ES:CurrentMode, 5
Assume ES:Nothing
Mov AX, 5
Mov SI, 1
Mov CX, Object1
Mov DX, Offset O1_DisplayList
Ret
EndP Display_FullScreen
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IF SPECTRUMANALYSER
Proc Display_FourierStart Far
Jmp Fourier_Start
EndP Display_FourierStart
ENDIF
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EndS
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
End