forked from herrnst/impulsetracker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
IT_I.ASM
9023 lines (6381 loc) · 248 KB
/
IT_I.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Instrument List module ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Jumps
.386
include switch.inc
include network.inc
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Externals ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Segment Object1 BYTE Public 'Data'
Extrn SampleFrequency:Word
EndS
Segment DiskData PARA Public 'Data'
EndS
Segment Pattern BYTE Public 'Code'
Extrn BaseOctave:Byte
Extrn LastInstrument:Byte
EndS
Extrn F_Reset5NumInputPos:Far
Extrn Glbl_F4_2:Far
Extrn Glbl_GetCurrentMode:Far
Extrn S_GetDestination:Far
Extrn S_SaveScreen:Far
Extrn S_RestoreScreen:Far
Extrn S_DrawString:Far
Extrn M_FunctionDivider:Far
Extrn M_Object1List:Far
Extrn M_Object1ListDefault:Far
Extrn Music_GetSongSegment:Far
Extrn Music_ReleaseSample:Far
Extrn Music_ClearSampleName:Far
Extrn Music_PlaySample:Far
Extrn Music_GetInstrumentMode:Far
; Extrn Music_UpdateSampleLocation:Far
Extrn S_GetGenerationTableOffset:Far
Extrn S_GenerateCharacters:Far
Extrn S_SetDirectMode:Far
Extrn S_DrawBox:Far
Extrn S_DrawSmallBox:Far
Extrn O1_ConfirmDeleteSample:Far
Extrn O1_ConfirmConvertList:Far
Extrn O1_ConfirmConvert2List:Far
Extrn O1_ConfirmCutSample:Far
Extrn O1_ExchangeSampleList:Far
Extrn O1_ExchangeInstrumentList:Far
Extrn O1_SwapSampleList:Far
Extrn O1_SwapInstrumentList:Far
Extrn O1_ReplaceSampleList:Far
Extrn O1_ReplaceInstrumentList:Far
Extrn O1_ResizeSampleList:Far
Extrn O1_ShowSampleFrequencyList:Far
Extrn O1_FrequencyIndeterminedList:Far
Extrn O1_ConfirmDeleteInstrument:Far
Extrn O1_SampleAmplificationList:Far
Extrn O1_CopyInstrumentList:Far
Extrn O1_SampleCenterList:Far
Extrn O1_InstrumentListGeneral:Far
Extrn O1_InstrumentListVolume:Far
Extrn O1_InstrumentListPanning:Far
Extrn O1_InstrumentListPitch:Far
Extrn O1_C5FrequencyList:Far
Extrn O1_GetInstrumentAmpList:Far
Extrn PE_GetLastInstrument:Far
Extrn PE_SwapInstruments:Far
Extrn PE_UpdateInstruments:Far
Extrn PEFunction_OutOfMemoryMessage:Far
Extrn PE_TranslateMIDI:Far, PE_RestoreMIDINote:Far
Extrn PE_InsertInstrument:Far
Extrn PE_DeleteInstrument:Far
Extrn Music_PlayPattern:Far
Extrn Music_Stop:Far
Extrn Music_PlaySong:Far
Extrn Music_PlayNote:Far
Extrn Music_ToggleChannel:Far
Extrn Music_SoloChannel:Far
Extrn Music_GetSampleLocation:Far
Extrn Music_ClearInstrument:Far
Extrn Music_GetInstrumentMode:Far
Extrn Music_AllocateSample:Far
Extrn Music_GetSlaveChannelInformationTable:Far
Extrn Music_SoundCardLoadAllSamples:Far
Extrn Music_GetNumChannels:Far
Extrn Music_RegetLoopInformation:Far
Extrn SetInfoLine:Far
Extrn MouseAddEvent:Far, AddMouseQueue:Far, MouseClearEvents:Far
Extrn SetKeyboardLock:Far, MouseSetXY:Far
Extrn MouseRemoveEvents:Far, MouseGetStatus:Far
Extrn SetMouseCursorType:Far
Extrn Fourier_Transform:Far, Fourier_CreateTable:Far
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Globals ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Global I_DrawPitchPanCenter:Far
Global I_PrePitchPanCenter:Far
Global I_PostPitchPanCenter:Far
Global I_ClearTables:Far
Global I_TagInstrument:Far
Global I_TagSample:Far
Global I_DrawEnvelope:Far
Global I_PreEnvelope:Far
Global I_PostEnvelope:Far
Global I_ConvertSample:Far
Global I_DeleteSample:Far
Global I_CutSample:Far
Global I_ClearSampleName:Far
Global I_ExchangeSamples:Far
Global I_ReplaceInstrument:Far
Global I_ToggleSampleQuality:Far
Global I_CenterSample:Far
Global I_InstrumentListSpace:Far
Global I_InstrumentListNoteOff:Far
Global I_IncreasePlayChannel:Far
Global I_DecreasePlayChannel:Far
Global I_ToggleMultiChannel:Far
Global I_ScaleInstrumentVolumes:Far
Global I_ScaleSampleVolumes:Far
Global I_CopyInstrument:Far
Global I_DeleteInstrument:Far
Global I_DrawSampleList:Far
Global I_PreSampleList:Far
Global I_PostSampleList:Far
Global I_ShowSampleInfo:Far
Global I_SampleUp:Far
Global I_SampleDown:Far
Global I_CheckLoopValues:Far
Global I_CheckSusLoopValues:Far
Global I_MapEnvelope:Far
Global I_DrawWaveForm:Far
Global I_SampleButtonHandler:Far
Global I_DrawInstrumentWindow:Far
Global I_PreInstrumentWindow:Far
Global I_PostInstrumentWindow:Far
Global I_DrawNoteWindow:Far
Global I_PreNoteWindow:Far
Global I_PostNoteWindow:Far
Global I_AmplifySample:Far
Global I_ExchangeInstruments:Far
Global I_ReverseSample:Far
Global I_SwapSamples:Far
Global I_SwapInstruments:Far
Global I_ReplaceSample:Far
Global I_UpdateInstrument:Far
Global I_ResizeSample:Far
Global I_ResizeSampleNoInt:Far
Global I_InvertSample:Far
Global I_GetInstrumentOffset:Far
Global I_GetSampleOffset:Far
Global I_CutSampleBeforeLoop:Far
Global I_CalculateC5Speed:Far
Global I_PrintC5Frequency:Far
Global I_DoubleSampleSpeed:Far
Global I_HalveSampleSpeed:Far
Global I_SampleSpeedSemiUp:Far
Global I_SampleSpeedSemiDown:Far
Global I_ShowSamplePlay:Far
Global I_ShowInstrumentPlay:Far
Global I_PlaySample:Far
Global I_SelectScreen:Far
Global I_GetInstrumentScreen:Far
Global I_IdleUpdateEnvelope:Far
Global I_PlayNote:Far
Global SampleNumberInput:Byte
Global SampleNumber:Byte
Global MaxNode:Word
Global NewSampleSize:DWord
Global SampleAmplification:Word
Global InstrumentEdit:Byte
Global NodeHeld:Byte
Global InstrumentScreen:Word
Global I_GetPresetEnvelopeOffset:Far
Public UpdateWAVEForm
Public MIDI_PlayNote, MIDI_NoteOff, MIDI_ClearTable
Public MIDI_PlaySample, MIDI_FindChannel, MIDI_AllocateChannel
Public MIDI_GetChannel
Global InstrumentAmplification
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Segment Inst WORD Public 'Code' USE16
Assume CS:Inst, DS:Nothing
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Variables ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SLAVECHANNELSIZE EQU 128
HOSTCHANNELSIZE EQU 80
ENVELOPEGRANULARITY EQU 50
MAXENVELOPETICK EQU 9999
InstrumentAmplification DW 50
InstrumentScreen DW 0
LastPlaySample DB 5*12
SampleNumber DB 1 ; For instrument-sample
; editing
NoteReleased DB 1
TopInstrument DW 1
InstrumentPos DW 0
SamplePlayTable DB 128 Dup (0)
InstrumentPlayTable DB 128 Dup (0)
TopNote DW 0
CurrentNote DW 0
NotePos DW 0 ; 0->4
SampleNumberInput DB 0
DB 3 Dup(0)
NewSampleSize DD 0
CurrentNode DW 0 ; Volume envelope
MaxNode DW 0
AmplitudeCompensate DB 0
DB 0 ; Filler
CurrentAmplitude DW 0
CurrentTick DW 0
LastAmplitude DW 0
LastTick DW 0
UpperLimit DW 0
NodeHeld DB 0
DB 0
WaveLength DW 0
SearchDirection DW 0
EndPoint DW 0
InstrumentEdit DB 0
LastKey DW 0
Interpolate DB 0 ; For resizing routines
Quality DB 0
MultiChannel DB 0
PlayChannel DW 0
SampleAmplification DW 0 ; Percentage
MIDITable DB 128 Dup (0) ; Contains channel of each note
NoteData DB 0, 0, 0FFh, 0, 0 ; For noteplay in notelist
PlayNote DB 5*12
NotePosTable DB 4, 6, 8, 9
SamplePos DW 25
Resolution DB 0
UpdateInstrumentScreen DB 1
CompleteMsg DB 0FDh, "D% Complete", 0
TopSample DW 1
NoSampleMsg DB "No sample", 0
Quality8Msg DB "8 bits", 0
Quality16Msg DB "16 bits", 0
LengthMsg DB 0FDh, 'L', 0
EnvelopeSetMsg DB "Envelope copied into slot ", 0FDh, "D", 0
EnvelopeMsg DB "Node ", 0FDh, "D/", 0FDh, "D", 13, 13
DB "Tick ", 0FDh, "D", 13, 13
DB "Value ", 0FDh, "S", 0
PlayChannelMsg DB "Using channel ", 0FDh, "D for playback", 0
MultiChannelEnabledMsg DB "Multichannel playback enabled", 0
MultiChannelDisabledMsg DB "Multichannel playback disabled", 0
C5FrequencyText DB "Calculated C5Speed: ", 0FDh, "L", 0
LastWaveformValues DW 0
EnvelopeHeaderTable Label
DW Offset VolEnv, Offset VolEnvEdit
DW Offset PanEnv, Offset PanEnvEdit
DW Offset PitchEnv, Offset PitchEnvEdit
VolEnv DB "Volume Envelope", 0
VolEnvEdit DB "Volume Envelope (Edit)", 0
PanEnv DB "Panning Envelope", 0
PanEnvEdit DB "Panning Envelope (Edit)", 0
PitchEnv DB "Frequency Envelope", 0
PitchEnvEdit DB "Frequency Envelope (Edit)", 0
EnvelopeOffsets Label Word
DW 130h, 182h, 1D4h
NoteTable DB "C-C#D-D#E-F-F#G-G#A-A#B-"
KeyBoardTable DW 12Ch, 0, 11Fh, 1, 12Dh, 2, 120h, 3, 12Eh, 4
DW 12Fh, 5, 122h, 6, 130h, 7, 123h, 8, 131h, 9
DW 124h, 10, 132h, 11, 110h, 12, 103h, 13, 111h, 14
DW 104h, 15, 112h, 16, 113h, 17, 106h, 18, 114h, 19
DW 107h, 20, 115h, 21, 108h, 22, 116h, 23, 117h, 24
DW 10Ah, 25, 118h, 26, 10Bh, 27, 119h, 28, 0FFFFh
SampleMouseEvent DW 5*8, 13*8, 35*8-1, 48*8-1
SampleMouseCondition DW 102h, 28, Offset MouseSelectInst, Inst
SampleMouseOffEvent DW 0, 0, 0, 0, 1108h, 28, MouseSelectOff, Inst
NoteMouseEvent DW 32*8, 16*8, 42*8-1, 48*8-1
NoteMouseCondition DW 102h, 10, Offset MouseSelectNote, Inst
NoteMouseOffEvent DW 0, 0, 0, 0, 1108h, 10, MouseSelectNoteOff, Inst
ENVELOPELEFT EQU 32
ENVELOPETOP EQU 18
MouseNodeHeld DB 0
MouseX DW 0
MouseY DW 0
LowerTickLimit DW 0
UpperTickLimit DW 0
EnvelopeEvent1 DW ENVELOPELEFT*8, ENVELOPETOP*8
DW (ENVELOPELEFT+32)*8-1, (ENVELOPETOP+8)*8-1
DW 102h, 10, Offset MouseEnvelopeEvent1, Inst
EnvelopeEvent4 DW ENVELOPELEFT*8, ENVELOPETOP*8
DW (ENVELOPELEFT+32)*8-1, (ENVELOPETOP+8)*8-1
DW 110h, 10, Offset MouseEnvelopeEvent4, Inst
EnvelopeEvent2 DW 0, 0, 0, 0, 1005h, 10, Offset MouseEnvelopeEvent2, Inst
EnvelopeEvent3 DW 0, 0, 0, 0, 1108h, 10, Offset MouseEnvelopeEvent3, Inst
; Release
PresetEnvelopes Label Byte
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
DB 0, 2, 0, 0, 0, 0, 32, 0, 0, 32, 100, 0, 69 Dup (0)
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
InstrumentScreenTable Label
DW Offset O1_InstrumentListGeneral
DW Offset O1_InstrumentListVolume
DW Offset O1_InstrumentListPanning
DW Offset O1_InstrumentListPitch
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
SampleListKeys Label
DB 0 ; Mouse left button
DW 8010h
DW Offset I_SelectInstrument
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
DW 1C8h
DW Offset I_SampleUp
DB 0
DW 1D0h
DW Offset I_SampleDown
DB 0
DW 1C9h
DW Offset I_SamplePgUp
DB 0
DW 1D1h
DW Offset I_SamplePgDn
DB 3
DW 1C9h
DW Offset I_SampleCtrlPgUp
DB 3
DW 1D1h
DW Offset I_SampleCtrlPgDn
DB 2
DW 1D2h ; Alt Ins
DW Offset I_InsertSample
DB 2
DW 1D3h ; Alt Del
DW Offset I_RemoveSample
DB 0
DW 1CBh
DW Offset I_SampleLeft
DB 0
DW 1CDh
DW Offset I_SampleRight
DB 0
DW 1C7h
DW Offset I_SampleHome
DB 0
DW 1CFh
DW Offset I_SampleEnd
DB 0
DW 10Fh
DW Offset I_SampleTab
DB 1 ; Alt...
DW 2E00h ; 'C'
DW Offset I_ClearSampleName
DB 0FFh
InstrumentListKeys Label
DB 0 ; Mouse left button
DW 8010h
DW Offset I_SelectInstrument2
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
DW 1C8h
DW Offset I_SampleUp
DB 0
DW 1D0h
DW Offset I_SampleDown
DB 0
DW 1C9h
DW Offset I_SamplePgUp
DB 0
DW 1D1h
DW Offset I_SamplePgDn
DB 2
DW 1D2h ; Alt Ins
DW Offset I_InsertInstrument
DB 2
DW 1D3h ; Alt Del
DW Offset I_RemoveInstrument
DB 3
DW 1C9h
DW Offset I_SampleCtrlPgUp
DB 3
DW 1D1h
DW Offset I_SampleCtrlPgDn
DB 0
DW 1CBh
DW Offset I_InstrumentLeft
DB 0
DW 1CDh
DW Offset I_InstrumentRight
DB 0
DW 1C7h
DW Offset I_InstrumentHome
DB 0
DW 1CFh
DW Offset I_InstrumentEnd
DB 0
DW 10Fh
DW Offset I_InstrumentTab
DB 4
DW 10Fh
DW Offset I_InstrumentShiftTab
DB 1 ; Alt
DW 2E00h ; 'C'
DW Offset I_InstrumentNameClear
DB 1 ; Alt...
DW 1100h ; 'W'
DW Offset I_InstrumentClear
DB 0FFh
NoteListKeys Label
DB 0
DW 8010h
DW Offset I_SelectNoteMouse
DB 0 ; 0 = CX, 1 = DX, 2 = Alt CX, 3 = Ctrl
DW 1C8h
DW Offset I_NoteUp
DB 0
DW 1D0h
DW Offset I_NoteDown
DB 0
DW 1C9h
DW Offset I_NotePgUp
DB 0
DW 1D1h
DW Offset I_NotePgDn
DB 0
DW 1C7h
DW Offset I_NoteHome
DB 0
DW 1CFh
DW Offset I_NoteEnd
DB 0
DW 1CBh
DW Offset I_NoteLeft
DB 0
DW 1CDh
DW Offset I_NoteRight
DB 0
DW 10Fh
DW Offset I_NoteTab
DB 4
DW 10Fh ; Shift-Tab
DW Offset I_NoteShiftTab
DB 1
DW '>'
DW Offset I_NoteSampleIncrease
DB 1
DW "'"
DW Offset I_NoteSampleIncrease
DB 1
DW '<'
DW Offset I_NoteSampleDecrease
DB 1
DW ';'
DW Offset I_NoteSampleDecrease
DB 1 ; Alt...
DW 1E00h ; 'A'
DW Offset I_NoteAll
DB 1 ; Alt...
DW 3100h ; 'N'
DW Offset I_NoteNext
DB 1 ; Alt...
DW 1900h ; 'P'
DW Offset I_NotePrevious
DB 2 ; Alt up
DW 1C8h
DW Offset I_NoteTransposeUp
DB 2 ; Alt down
DW 1D0h
DW Offset I_NoteTransposeDown
DB 2
DW 1D2h ; Alt Ins
DW Offset I_NoteInsert
DB 2
DW 1D3h ; Alt Del
DW Offset I_NoteDelete
DB 1
DW ' '
DW Offset I_NoteSpace
DB 0
DW 11Ch ; Enter
DW Offset I_NoteSamplePickup
DB 0FFh
VolumeEnvelopeKeys Label
DB 0
DW 8010h
DW Offset I_MouseEnvelopePress
DB 0
DW 8001h
DW Offset I_MouseEnvelopeDrag
DB 0
DW 8002h
DW Offset I_MouseEnvelopeReleased
DB 0
DW 8003h
DW Offset I_MouseEnvelopeDelete
DB 0
DW 10Fh ; Tab
DW Offset I_NoteShiftTab
DB 4 ; Shifttab
DW 10Fh
DW Offset I_NoteShiftTab
DB 0
DW 1CBh
DW Offset I_VolumeEnvelopeLeft
DB 0
DW 1CDh
DW Offset I_VolumeEnvelopeRight
DB 0 ; Enter
DW 11Ch
DW Offset I_VolumeEnvelopeEnter
DB 0 ; Up arrow
DW 1C8h
DW Offset I_VolumeEnvelopeUp
DB 0 ; Up arrow
DW 1D0h
DW Offset I_VolumeEnvelopeDown
DB 0
DW 1D2h
DW Offset I_VolumeEnvelopeInsert
DB 0
DW 1D3h
DW Offset I_VolumeEnvelopeDelete
DB 0FFh
VolumeEnvelopeNodeKeys Label
DB 0
DW 8010h
DW Offset I_MouseEnvelopePress
DB 0
DW 8001h
DW Offset I_MouseEnvelopeDrag
DB 0
DW 8002h
DW Offset I_MouseEnvelopeReleased
DB 0
DW 8003h
DW Offset I_MouseEnvelopeDelete
DB 0 ; Enter
DW 11Ch
DW Offset I_VolumeEnvelopeEnter
DB 0
DW 1C8h ; Up arrow
DW Offset I_VolumeEnvelopeHeldUp
DB 0
DW 1D0h ; Down arrow
DW Offset I_VolumeEnvelopeHeldDown
DB 2
DW 1C8h
DW Offset I_VolumeEnvelopeHeldPgUp
DB 2
DW 1D0h
DW Offset I_VolumeEnvelopeHeldPgDn
DB 0
DW 1CBh
DW Offset I_VolumeEnvelopeHeldLeft
DB 0
DW 1CDh
DW Offset I_VolumeEnvelopeHeldRight
DB 0
DW 10Fh
DW Offset I_VolumeEnvelopeHeldRightFast
DB 4
DW 10Fh
DW Offset I_VolumeEnvelopeHeldLeftFast
DB 2
DW 1CBh
DW Offset I_VolumeEnvelopeHeldLeftFast
DB 2
DW 1CDh
DW Offset I_VolumeEnvelopeHeldRightFast
DB 0
DW 1C9h
DW Offset I_VolumeEnvelopeHeldPgUp
DB 0
DW 1D1h
DW Offset I_VolumeEnvelopeHeldPgDn
DB 0
DW 1C7h
DW Offset I_VolumeEnvelopeHeldHome
DB 0
DW 1CFh
DW Offset I_VolumeEnvelopeHeldEnd
DB 0
DW 1D2h
DW Offset I_VolumeEnvelopeInsert
DB 0
DW 1D3h
DW Offset I_VolumeEnvelopeDelete
DB 3
DW 1CBh
DW Offset I_VolumeEnvelopeLeft
DB 3
DW 1CDh
DW Offset I_VolumeEnvelopeRight
DB 0FFh
PitchPanCenterKeys Label
DB 0
DW 10Fh ; Tab
DW Offset I_NoteShiftTab
DB 4 ; Shifttab
DW 10Fh
DW Offset I_NoteShiftTab
DB 0
DW 1C8h ; Up arrow
DW Offset I_PitchPanCenterUp
DB 0
DW 1D0h ; Down arrow
DW Offset I_PitchPanCenterDown
DB 1
DW '+'
DW Offset I_PitchPanCenterSemiUp
DB 1
DW '-'
DW Offset I_PitchPanCenterSemiDown
DB 0
DW 1CBh
DW Offset I_PitchPanCenterSemiDown
DB 0
DW 1CDh
DW Offset I_PitchPanCenterSemiUp
DB 0FFh
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Functions ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_GetInstrumentScreen Far
Push CS
Pop ES
Mov DI, Offset InstrumentScreen
Ret
EndP I_GetInstrumentScreen
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_GetInstrumentOffset Far
Call PE_GetLastInstrument
Add BX, BX
Call Music_GetSongSegment
Mov DS, AX
Mov BX, [DS:64712+BX]
Ret
EndP I_GetInstrumentOffset
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_GetSampleOffset Far
Call PE_GetLastInstrument
Add BX, BX
Call Music_GetSongSegment
Mov DS, AX
Mov BX, [DS:64912+BX]
Ret
EndP I_GetSampleOffset
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_GetEnvelopeOffset ; Returns DS:SI
Push AX
Call I_GetInstrumentOffset ; Returns DS:BX
Mov SI, CS:InstrumentScreen
Add SI, SI
Mov SI, [SI+EnvelopeOffsets-2]
Add SI, BX
Pop AX
Ret
EndP I_GetEnvelopeOffset
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_SelectScreen Far
Mov BX, [SI+22]
Push CS
Pop DS
Assume DS:Inst
Mov InstrumentScreen, BX
Mov AX, [ES:DI]
Add BX, BX
Mov BX, [CS:InstrumentScreenTable+BX]
Mov [ES:BX], AX
Jmp Glbl_F4_2
EndP I_SelectScreen
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MouseSelectOff Far
Mov Word Ptr [SI-16+8], 102h
Mov CS:SampleMouseCondition, 102h
Mov AX, 1
Ret
EndP MouseSelectOff
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MouseSelectNoteOff Far
Mov Word Ptr [SI-16+8], 102h
Mov CS:NoteMouseCondition, 102h
Mov AX, 1
Ret
EndP MouseSelectNoteOff
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MouseSelectNote Far
Mov CS:NoteMouseCondition, 1107h
Push CX
Mov CX, 8010h
Call AddMouseQueue
Pop CX
Cmp DX, 16*8
JA MouseSelectNote1
Mov DX, 16*8
MouseSelectNote1:
Cmp DX, 48*8-1
JB MouseSelectNote2
Mov DX, 48*8-1
MouseSelectNote2:
Call MouseSetXY
Xor AX, AX
Ret
EndP MouseSelectNote
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MouseSelectInst Far
Mov CS:MouseX, CX
Mov CS:SampleMouseCondition, 1107h
Push CX
Mov CX, 8010h
ShR DX, 3
Sub DX, 13
Call AddMouseQueue
Pop CX
And DX, DX
JNS MouseSelectInst1
Mov DX, 13*8
Jmp MouseSelectInst2
MouseSelectInst1:
Cmp DX, 35
JB MouseSelectInst3
Mov DX, 48*8-1
MouseSelectInst2:
Call MouseSetXY
MouseSelectInst3:
Xor AX, AX
Ret
EndP MouseSelectInst
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc AddSelectEvent
Call MouseGetStatus
Test AL, 6
JNZ AddSelectEvent1
Mov Word Ptr [SI+8], 102h
AddSelectEvent1:
Call MouseAddEvent
Ret
EndP AddSelectEvent
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc I_DrawSampleList Far
Call S_GetDestination