4311 lines
147 KiB
NASM
Executable File
4311 lines
147 KiB
NASM
Executable File
|
|
.386P
|
|
|
|
Segment DriverHeader PARA Public 'Code' Use16
|
|
Assume CS:Driver, DS:Nothing
|
|
|
|
;***** Driver Header *******
|
|
|
|
include drhead.inc
|
|
|
|
EndS
|
|
|
|
Segment Driver PARA Public 'Code' Use16
|
|
Assume CS:Driver, DS:Nothing
|
|
|
|
ORG 0
|
|
StartDriver:
|
|
|
|
include vtable.inc
|
|
|
|
;******** Required ProcedureTable *************
|
|
|
|
include reqproc.inc
|
|
|
|
Comment ~
|
|
|
|
Index = BasePort + 802h
|
|
|
|
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
|
³ .............................. ³ Register ³ Channel Number ³
|
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
|
|
|
|
|
~
|
|
|
|
OldIRQHandler DD 0
|
|
AWEMemory DD 0
|
|
AWEMemoryUsed DD 0
|
|
AWEUpdateCount DW 0
|
|
|
|
AWEUpdateTimer DW 0
|
|
|
|
LoadSampleFuncF DW 0
|
|
LoadSampleFuncB DW 0
|
|
|
|
AWEDataTable DD 5*100 Dup (0) ; Start, Startloop, Endloop, Size
|
|
MIDIPort DW 0
|
|
MIDIBuffer DB 256 Dup (0)
|
|
MIDIBufferHead DB 0
|
|
MIDIBufferTail DB 0
|
|
|
|
SB16BasePort DW 0
|
|
MixerPort DW 0
|
|
Step DW 1
|
|
AWEUpdateFlag DB 0
|
|
Compress DB 0
|
|
DB 0
|
|
|
|
SBIRQMode DB 0
|
|
BlockLength DW 100
|
|
BlockLength2 DW 100
|
|
|
|
AWE32Msg DB "Sound Blaster AWE 32 detected", 13
|
|
DB "Address ", 0FDh, "Xh, ", 0FDh, "Dk Memory", 0
|
|
|
|
AWE32Msg2 DB "Sound Blaster AWE 32 detected", 13
|
|
DB "Port ", 0FDh, "Xh, IRQ ", 0FDh, "D, ", 0FDh, "Dk RAM", 0
|
|
|
|
AWE32Status DB "FreeAWE ", 0FDh, "Dk", 0
|
|
|
|
AWE32ReinitMsg DB "Sound Blaster AWE 32 reinitialised", 0
|
|
Stereo DB 0
|
|
Forced DB 0
|
|
DriverName DB "ITAWE32B.DRV", 0
|
|
|
|
FrequencyError DB "AWE Hardware frequency limit exceeded -> Note terminated", 0
|
|
|
|
IRQFlag DB 0FFh
|
|
|
|
IRQData Label Word
|
|
DW 20h, 1111111111111110b ; IRQ 0
|
|
DW 24h, 1111111111111101b ; IRQ 1
|
|
DW 28h, 1111110111111011b ; IRQ 2
|
|
DW 2Ch, 1111111111110111b ; IRQ 3
|
|
DW 30h, 1111111111101111b ; IRQ 4
|
|
DW 34h, 1111111111011111b ; IRQ 5
|
|
DW 38h, 1111111110111111b ; IRQ 6
|
|
DW 3Ch, 1111111101111111b ; IRQ 7
|
|
DW 1C0h, 1111111011111011b ; IRQ 8
|
|
DW 1C4h, 1111110111111011b ; IRQ 9
|
|
DW 1C8h, 1111101111111011b ; IRQ 10
|
|
DW 1CCh, 1111011111111011b ; IRQ 11
|
|
DW 1D0h, 1110111111111011b ; IRQ 12
|
|
DW 1D4h, 1101111111111011b ; IRQ 13
|
|
DW 1D8h, 1011111111111011b ; IRQ 14
|
|
DW 1DCh, 0111111111111011b ; IRQ 15
|
|
|
|
IMR DW 0
|
|
|
|
CPF EQU 0
|
|
PTRX EQU 20h
|
|
CVCF EQU 40h
|
|
VTFT EQU 60h
|
|
PSST EQU 0C0h
|
|
CSL EQU 0E0h
|
|
|
|
CCCA EQU 100h
|
|
HWCF4 EQU 129h
|
|
HWCF5 EQU 12Ah
|
|
HWCF6 EQU 12Dh
|
|
SMALR EQU 134h
|
|
SMARR EQU 135h
|
|
SMALW EQU 136h
|
|
SMARW EQU 137h
|
|
SMLD EQU 43Ah
|
|
SMRD EQU 23Ah
|
|
WC EQU 23Bh
|
|
HWCF1 EQU 43Dh
|
|
HWCF2 EQU 43Eh
|
|
CFG2 EQU 43Eh
|
|
HWCF3 EQU 43Fh
|
|
INIT1 EQU 440h
|
|
INIT2 EQU 240h
|
|
INIT3 EQU 460h
|
|
INIT4 EQU 260h
|
|
ENVVOL EQU 480h
|
|
DCYSUSV EQU 4A0h
|
|
ENVVAL EQU 4C0h
|
|
DCYSUS EQU 4E0h
|
|
SUSDCY EQU 4E0h
|
|
ATKHLDV EQU 280h
|
|
LFO1VAL EQU 2A0h
|
|
ATKHLD EQU 2C0h
|
|
HLDATK EQU 2C0h
|
|
LFO2VAL EQU 2E0h
|
|
IP EQU 300h
|
|
IFATN EQU 320h
|
|
PEFE EQU 340h
|
|
FMMOD EQU 360h
|
|
TREMFRQ EQU 380h
|
|
FM2FRQ2 EQU 3A0h
|
|
|
|
ALIGN 4
|
|
|
|
InitTable1 Label
|
|
DW 003FFh, 0030h, 007FFh, 0130h, 00BFFh, 0230h, 00FFFh, 0330h
|
|
DW 013FFh, 0430h, 017FFh, 0530h, 01BFFh, 0630h, 01FFFh, 0730h
|
|
DW 023FFh, 0830h, 027FFh, 0930h, 02BFFh, 0A30h, 02FFFh, 0B30h
|
|
DW 033FFh, 0C30h, 037FFh, 0D30h, 03BFFh, 0E30h, 03FFFh, 0F30h
|
|
|
|
DW 043FFh, 0030h, 047FFh, 0130h, 04BFFh, 0230h, 04FFFh, 0330h
|
|
DW 053FFh, 0430h, 057FFh, 0530h, 05BFFh, 0630h, 05FFFh, 0730h
|
|
DW 063FFh, 0830h, 067FFh, 0930h, 06BFFh, 0A30h, 06FFFh, 0B30h
|
|
DW 073FFh, 0C30h, 077FFh, 0D30h, 07BFFh, 0E30h, 07FFFh, 0F30h
|
|
|
|
DW 083FFh, 0030h, 087FFh, 0130h, 08BFFh, 0230h, 08FFFh, 0330h
|
|
DW 093FFh, 0430h, 097FFh, 0530h, 09BFFh, 0630h, 09FFFh, 0730h
|
|
DW 0A3FFh, 0830h, 0A7FFh, 0930h, 0ABFFh, 0A30h, 0AFFFh, 0B30h
|
|
DW 0B3FFh, 0C30h, 0B7FFh, 0D30h, 0BBFFh, 0E30h, 0BFFFh, 0F30h
|
|
|
|
DW 0C3FFh, 0030h, 0C7FFh, 0130h, 0CBFFh, 0230h, 0CFFFh, 0330h
|
|
DW 0D3FFh, 0430h, 0D7FFh, 0530h, 0DBFFh, 0630h, 0DFFFh, 0730h
|
|
DW 0E3FFh, 0830h, 0E7FFh, 0930h, 0EBFFh, 0A30h, 0EFFFh, 0B30h
|
|
DW 0F3FFh, 0C30h, 0F7FFh, 0D30h, 0FBFFh, 0E30h, 0FFFFh, 0F30h
|
|
|
|
InitTable2 Label
|
|
DW 003FFh, 8030h, 007FFh, 8130h, 00BFFh, 8230h, 00FFFh, 8330h
|
|
DW 013FFh, 8430h, 017FFh, 8530h, 01BFFh, 8630h, 01FFFh, 8730h
|
|
DW 023FFh, 8830h, 027FFh, 8930h, 02BFFh, 8A30h, 02FFFh, 8B30h
|
|
DW 033FFh, 8C30h, 037FFh, 8D30h, 03BFFh, 8E30h, 03FFFh, 8F30h
|
|
|
|
DW 043FFh, 8030h, 047FFh, 8130h, 04BFFh, 8230h, 04FFFh, 8330h
|
|
DW 053FFh, 8430h, 057FFh, 8530h, 05BFFh, 8630h, 05FFFh, 8730h
|
|
DW 063FFh, 8830h, 067FFh, 8930h, 06BFFh, 8A30h, 06FFFh, 8B30h
|
|
DW 073FFh, 8C30h, 077FFh, 8D30h, 07BFFh, 8E30h, 07FFFh, 8F30h
|
|
|
|
DW 083FFh, 8030h, 087FFh, 8130h, 08BFFh, 8230h, 08FFFh, 8330h
|
|
DW 093FFh, 8430h, 097FFh, 8530h, 09BFFh, 8630h, 09FFFh, 8730h
|
|
DW 0A3FFh, 8830h, 0A7FFh, 8930h, 0ABFFh, 8A30h, 0AFFFh, 8B30h
|
|
DW 0B3FFh, 8C30h, 0B7FFh, 8D30h, 0BBFFh, 8E30h, 0BFFFh, 8F30h
|
|
|
|
DW 0C3FFh, 8030h, 0C7FFh, 8130h, 0CBFFh, 8230h, 0CFFFh, 8330h
|
|
DW 0D3FFh, 8430h, 0D7FFh, 8530h, 0DBFFh, 8630h, 0DFFFh, 8730h
|
|
DW 0E3FFh, 8830h, 0E7FFh, 8930h, 0EBFFh, 8A30h, 0EFFFh, 8B30h
|
|
DW 0F3FFh, 8C30h, 0F7FFh, 8D30h, 0FBFFh, 8E30h, 0FFFFh, 8F30h
|
|
|
|
InitTable3 Label
|
|
DW 0C10h, 8470h, 14FEh, 0B488h, 167Fh, 0A470h, 18E7h, 84B5h
|
|
DW 1B6Eh, 842Ah, 1F1Dh, 852Ah, 0DA3h, 8F7Ch, 167Eh, 7254h
|
|
DW 0, 842Ah, 1, 852Ah, 18E6h, 8BAAh, 1B6Dh, 7234h
|
|
DW 229Fh, 8429h, 2746h, 8529h, 1F1Ch, 86E7h, 229Eh, 7224h
|
|
|
|
DW 0DA4h, 8429h, 2C29h, 8529h, 2745h, 87F6h, 2C28h, 7254h
|
|
DW 383Bh, 8428h, 320Fh, 8528h, 320Eh, 8F02h, 1341h, 7264h
|
|
DW 3EB6h, 8428h, 3EB9h, 8528h, 383Ah, 8FA9h, 3EB5h, 7294h
|
|
DW 3EB7h, 8474h, 3EBAh, 8575h, 3EB8h, 0C4C3h, 3EBBh, 45C3h
|
|
|
|
DW 00000, 0A404h, 00001, 0A504h, 141Fh, 8671h, 14FDh, 8287h
|
|
DW 3EBCh, 0E610h, 3EC8h, 8C7Bh, 31Ah, 87E6h, 3EC8h, 86F7h
|
|
DW 3EC0h, 821Eh, 3EBEh, 0D208h, 3EBDh, 821Fh, 3ECAh, 8386h
|
|
DW 3EC1h, 8C03h, 3EC9h, 831Eh, 3ECAh, 8C4Ch, 3EBFh, 8C55h
|
|
|
|
DW 3EC9h, 0C208h, 3EC4h, 0BC84h, 3EC8h, 8EADh, 3EC8h, 0D308h
|
|
DW 3EC2h, 8F7Eh, 3ECBh, 821Eh, 3ECBh, 0D208h, 3EC5h, 831Fh
|
|
DW 3EC6h, 0C308h, 3EC3h, 32FFh, 3EC9h, 8265h, 3EC9h, 831Eh
|
|
DW 1342h, 0D308h, 3EC7h, 33FFh, 0, 8365h, 1420h, 9570h
|
|
|
|
InitTable4 Label
|
|
DW 0C10h, 8470h, 14FEh, 0B488h, 167Fh, 0A470h, 18E7h, 84B5h
|
|
DW 1B6Eh, 842Ah, 1F1Dh, 852Ah, 0DA3h, 0F7Ch, 167Eh, 7254h
|
|
DW 0, 842Ah, 1, 852Ah, 18E6h, 0BAAh, 1B6Dh, 7234h
|
|
DW 229Fh, 8429h, 2746h, 8529h, 1F1Ch, 6E7h, 229Eh, 7224h
|
|
|
|
DW 0DA4h, 8429h, 2C29h, 8529h, 2745h, 07F6h, 2C28h, 7254h
|
|
DW 383Bh, 8428h, 320Fh, 8528h, 320Eh, 0F02h, 1341h, 7264h
|
|
DW 3EB6h, 8428h, 3EB9h, 8528h, 383Ah, 0FA9h, 3EB5h, 7294h
|
|
DW 3EB7h, 8474h, 3EBAh, 8575h, 3EB8h, 44C3h, 3EBBh, 45C3h
|
|
|
|
DW 00000, 0A404h, 00001, 0A504h, 141Fh, 0671h, 14FDh, 287h
|
|
DW 3EBCh, 0E610h, 3EC8h, 0C7Bh, 31Ah, 7E6h, 3EC8h, 86F7h
|
|
DW 3EC0h, 821Eh, 3EBEh, 0D208h, 3EBDh, 021Fh, 3ECAh, 386h
|
|
DW 3EC1h, 0C03h, 3EC9h, 31Eh, 3ECAh, 8C4Ch, 3EBFh, 0C55h
|
|
|
|
DW 3EC9h, 0C208h, 3EC4h, 0BC84h, 3EC8h, 0EADh, 3EC8h, 0D308h
|
|
DW 3EC2h, 8F7Eh, 3ECBh, 021Eh, 3ECBh, 0D208h, 3EC5h, 31Fh
|
|
DW 3EC6h, 0C308h, 3EC3h, 32FFh, 3EC9h, 0265h, 3EC9h, 831Eh
|
|
DW 1342h, 0D308h, 3EC7h, 33FFh, 0, 8365h, 1420h, 9570h
|
|
|
|
AWEVolumeTable Label Byte ; Value = -log(vol/256)*(20/.375)
|
|
; = -log(vol/256)*(160/3)
|
|
|
|
DB 255, 128, 112, 103, 96, 91, 87, 83 ; 0->7
|
|
DB 80, 78, 75, 73, 71, 69, 67, 66 ; 8->15
|
|
DB 64, 63, 61, 60, 59, 58, 57, 56 ; 16->23
|
|
DB 55, 54, 53, 52, 51, 50, 50, 49 ; 24->31
|
|
DB 48, 47, 47, 46, 45, 45, 44, 44 ; 32->39
|
|
DB 43, 42, 42, 41, 41, 40, 40, 39 ; 40->47
|
|
DB 39, 38, 38, 37, 37, 36, 36, 36 ; 48->55
|
|
DB 35, 35, 34, 34, 34, 33, 33, 32 ; 56->63
|
|
DB 32, 32, 31, 31, 31, 30, 30, 30 ; 64->71
|
|
DB 29, 29, 29, 28, 28, 28, 28, 27 ; 72->79
|
|
DB 27, 27, 26, 26, 26, 26, 25, 25 ; 80->87
|
|
DB 25, 25, 24, 24, 24, 23, 23, 23 ; 88->95
|
|
DB 23, 22, 22, 22, 22, 22, 21, 21 ; 96->103
|
|
DB 21, 21, 20, 20, 20, 20, 20, 19 ; 104->111
|
|
DB 19, 19, 19, 19, 18, 18, 18, 18 ; 112->119
|
|
DB 18, 17, 17, 17, 17, 17, 16, 16 ; 120->127
|
|
DB 16 ; 128
|
|
|
|
Comment ~ ; Value = -log(vol/128)*(20/.375)
|
|
; = -log(vol/128)*(160/3)
|
|
; This is mathematically the correct table, but it seems too
|
|
; loud, and it overloads on playback.
|
|
|
|
DB 255, 112, 96, 87, 80, 75, 71, 67 ; 0->7
|
|
DB 64, 61, 59, 57, 55, 53, 51, 50 ; 8->15
|
|
DB 48, 47, 45, 44, 43, 42, 41, 40 ; 16->23
|
|
DB 39, 38, 37, 36, 35, 34, 34, 33 ; 24->31
|
|
DB 32, 31, 31, 30, 29, 29, 28, 28 ; 32->39
|
|
DB 27, 26, 26, 25, 25, 24, 24, 23 ; 40->47
|
|
DB 23, 22, 22, 21, 21, 20, 20, 20 ; 48->55
|
|
DB 19, 19, 18, 18, 18, 17, 17, 16 ; 56->63
|
|
DB 16, 16, 15, 15, 15, 14, 14, 14 ; 64->71
|
|
DB 13, 13, 13, 13, 12, 12, 12, 11 ; 72->79
|
|
DB 11, 11, 10, 10, 10, 9, 9, 9 ; 80->87
|
|
DB 9, 8, 8, 8, 8, 7, 7, 7 ; 88->95
|
|
DB 7, 6, 6, 6, 6, 5, 5, 5 ; 96->103
|
|
DB 5, 4, 4, 4, 4, 4, 4, 3 ; 104->111
|
|
DB 3, 3, 3, 2, 2, 2, 2, 2 ; 112->119
|
|
DB 1, 1, 1, 1, 1, 1, 1, 1 ; 120->127
|
|
DB 0
|
|
|
|
~
|
|
|
|
AWEPitchTable Label DWord ; Pitchval = 88200 * 2^(Pos / 4096)
|
|
DD 88200, 88215, 88230, 88245, 88260, 88275, 88290, 88305
|
|
DD 88320, 88335, 88350, 88365, 88380, 88395, 88410, 88425
|
|
DD 88440, 88455, 88470, 88485, 88500, 88514, 88529, 88544
|
|
DD 88559, 88574, 88589, 88604, 88619, 88634, 88649, 88664
|
|
DD 88679, 88694, 88709, 88724, 88739, 88754, 88770, 88785
|
|
DD 88800, 88815, 88830, 88845, 88860, 88875, 88890, 88905
|
|
DD 88920, 88935, 88950, 88965, 88980, 88995, 89010, 89025
|
|
DD 89040, 89055, 89070, 89086, 89101, 89116, 89131, 89146
|
|
DD 89161, 89176, 89191, 89206, 89221, 89236, 89252, 89267
|
|
DD 89282, 89297, 89312, 89327, 89342, 89357, 89372, 89388
|
|
DD 89403, 89418, 89433, 89448, 89463, 89478, 89493, 89509
|
|
DD 89524, 89539, 89554, 89569, 89584, 89600, 89615, 89630
|
|
DD 89645, 89660, 89675, 89691, 89706, 89721, 89736, 89751
|
|
DD 89767, 89782, 89797, 89812, 89827, 89842, 89858, 89873
|
|
DD 89888, 89903, 89919, 89934, 89949, 89964, 89979, 89995
|
|
DD 90010, 90025, 90040, 90056, 90071, 90086, 90101, 90117
|
|
DD 90132, 90147, 90162, 90178, 90193, 90208, 90223, 90239
|
|
DD 90254, 90269, 90284, 90300, 90315, 90330, 90346, 90361
|
|
DD 90376, 90391, 90407, 90422, 90437, 90453, 90468, 90483
|
|
DD 90499, 90514, 90529, 90545, 90560, 90575, 90591, 90606
|
|
DD 90621, 90637, 90652, 90667, 90683, 90698, 90713, 90729
|
|
DD 90744, 90759, 90775, 90790, 90805, 90821, 90836, 90852
|
|
DD 90867, 90882, 90898, 90913, 90928, 90944, 90959, 90975
|
|
DD 90990, 91005, 91021, 91036, 91052, 91067, 91082, 91098
|
|
DD 91113, 91129, 91144, 91160, 91175, 91190, 91206, 91221
|
|
DD 91237, 91252, 91268, 91283, 91299, 91314, 91329, 91345
|
|
DD 91360, 91376, 91391, 91407, 91422, 91438, 91453, 91469
|
|
DD 91484, 91500, 91515, 91531, 91546, 91562, 91577, 91593
|
|
DD 91608, 91624, 91639, 91655, 91670, 91686, 91701, 91717
|
|
DD 91732, 91748, 91763, 91779, 91794, 91810, 91825, 91841
|
|
DD 91856, 91872, 91887, 91903, 91919, 91934, 91950, 91965
|
|
DD 91981, 91996, 92012, 92028, 92043, 92059, 92074, 92090
|
|
DD 92105, 92121, 92137, 92152, 92168, 92183, 92199, 92215
|
|
DD 92230, 92246, 92261, 92277, 92293, 92308, 92324, 92340
|
|
DD 92355, 92371, 92386, 92402, 92418, 92433, 92449, 92465
|
|
DD 92480, 92496, 92512, 92527, 92543, 92559, 92574, 92590
|
|
DD 92606, 92621, 92637, 92653, 92668, 92684, 92700, 92715
|
|
DD 92731, 92747, 92762, 92778, 92794, 92810, 92825, 92841
|
|
DD 92857, 92872, 92888, 92904, 92920, 92935, 92951, 92967
|
|
DD 92982, 92998, 93014, 93030, 93045, 93061, 93077, 93093
|
|
DD 93108, 93124, 93140, 93156, 93171, 93187, 93203, 93219
|
|
DD 93235, 93250, 93266, 93282, 93298, 93313, 93329, 93345
|
|
DD 93361, 93377, 93392, 93408, 93424, 93440, 93456, 93472
|
|
DD 93487, 93503, 93519, 93535, 93551, 93566, 93582, 93598
|
|
DD 93614, 93630, 93646, 93662, 93677, 93693, 93709, 93725
|
|
DD 93741, 93757, 93773, 93788, 93804, 93820, 93836, 93852
|
|
DD 93868, 93884, 93900, 93915, 93931, 93947, 93963, 93979
|
|
DD 93995, 94011, 94027, 94043, 94059, 94075, 94090, 94106
|
|
DD 94122, 94138, 94154, 94170, 94186, 94202, 94218, 94234
|
|
DD 94250, 94266, 94282, 94298, 94314, 94330, 94346, 94362
|
|
DD 94377, 94393, 94409, 94425, 94441, 94457, 94473, 94489
|
|
DD 94505, 94521, 94537, 94553, 94569, 94585, 94601, 94617
|
|
DD 94633, 94649, 94665, 94681, 94697, 94713, 94729, 94746
|
|
DD 94762, 94778, 94794, 94810, 94826, 94842, 94858, 94874
|
|
DD 94890, 94906, 94922, 94938, 94954, 94970, 94986, 95002
|
|
DD 95018, 95035, 95051, 95067, 95083, 95099, 95115, 95131
|
|
DD 95147, 95163, 95179, 95196, 95212, 95228, 95244, 95260
|
|
DD 95276, 95292, 95308, 95324, 95341, 95357, 95373, 95389
|
|
DD 95405, 95421, 95437, 95454, 95470, 95486, 95502, 95518
|
|
DD 95534, 95551, 95567, 95583, 95599, 95615, 95631, 95648
|
|
DD 95664, 95680, 95696, 95712, 95729, 95745, 95761, 95777
|
|
DD 95793, 95810, 95826, 95842, 95858, 95875, 95891, 95907
|
|
DD 95923, 95939, 95956, 95972, 95988, 96004, 96021, 96037
|
|
DD 96053, 96069, 96086, 96102, 96118, 96134, 96151, 96167
|
|
DD 96183, 96200, 96216, 96232, 96248, 96265, 96281, 96297
|
|
DD 96314, 96330, 96346, 96362, 96379, 96395, 96411, 96428
|
|
DD 96444, 96460, 96477, 96493, 96509, 96526, 96542, 96558
|
|
DD 96575, 96591, 96607, 96624, 96640, 96656, 96673, 96689
|
|
DD 96706, 96722, 96738, 96755, 96771, 96787, 96804, 96820
|
|
DD 96837, 96853, 96869, 96886, 96902, 96919, 96935, 96951
|
|
DD 96968, 96984, 97001, 97017, 97033, 97050, 97066, 97083
|
|
DD 97099, 97116, 97132, 97148, 97165, 97181, 97198, 97214
|
|
DD 97231, 97247, 97264, 97280, 97296, 97313, 97329, 97346
|
|
DD 97362, 97379, 97395, 97412, 97428, 97445, 97461, 97478
|
|
DD 97494, 97511, 97527, 97544, 97560, 97577, 97593, 97610
|
|
DD 97626, 97643, 97659, 97676, 97692, 97709, 97726, 97742
|
|
DD 97759, 97775, 97792, 97808, 97825, 97841, 97858, 97874
|
|
DD 97891, 97908, 97924, 97941, 97957, 97974, 97990, 98007
|
|
DD 98024, 98040, 98057, 98073, 98090, 98107, 98123, 98140
|
|
DD 98156, 98173, 98190, 98206, 98223, 98240, 98256, 98273
|
|
DD 98289, 98306, 98323, 98339, 98356, 98373, 98389, 98406
|
|
DD 98423, 98439, 98456, 98473, 98489, 98506, 98523, 98539
|
|
DD 98556, 98573, 98589, 98606, 98623, 98639, 98656, 98673
|
|
DD 98689, 98706, 98723, 98740, 98756, 98773, 98790, 98806
|
|
DD 98823, 98840, 98857, 98873, 98890, 98907, 98924, 98940
|
|
DD 98957, 98974, 98990, 99007, 99024, 99041, 99058, 99074
|
|
DD 99091, 99108, 99125, 99141, 99158, 99175, 99192, 99208
|
|
DD 99225, 99242, 99259, 99276, 99292, 99309, 99326, 99343
|
|
DD 99360, 99377, 99393, 99410, 99427, 99444, 99461, 99477
|
|
DD 99494, 99511, 99528, 99545, 99562, 99579, 99595, 99612
|
|
DD 99629, 99646, 99663, 99680, 99697, 99713, 99730, 99747
|
|
DD 99764, 99781, 99798, 99815, 99832, 99849, 99865, 99882
|
|
DD 99899, 99916, 99933, 99950, 99967, 99984, 100001, 100018
|
|
DD 100035, 100051, 100068, 100085, 100102, 100119, 100136, 100153
|
|
DD 100170, 100187, 100204, 100221, 100238, 100255, 100272, 100289
|
|
DD 100306, 100323, 100340, 100357, 100374, 100391, 100408, 100425
|
|
DD 100442, 100459, 100476, 100493, 100510, 100527, 100544, 100561
|
|
DD 100578, 100595, 100612, 100629, 100646, 100663, 100680, 100697
|
|
DD 100714, 100731, 100748, 100765, 100782, 100799, 100816, 100833
|
|
DD 100850, 100867, 100885, 100902, 100919, 100936, 100953, 100970
|
|
DD 100987, 101004, 101021, 101038, 101055, 101073, 101090, 101107
|
|
DD 101124, 101141, 101158, 101175, 101192, 101209, 101227, 101244
|
|
DD 101261, 101278, 101295, 101312, 101329, 101347, 101364, 101381
|
|
DD 101398, 101415, 101432, 101450, 101467, 101484, 101501, 101518
|
|
DD 101535, 101553, 101570, 101587, 101604, 101621, 101639, 101656
|
|
DD 101673, 101690, 101707, 101725, 101742, 101759, 101776, 101793
|
|
DD 101811, 101828, 101845, 101862, 101880, 101897, 101914, 101931
|
|
DD 101949, 101966, 101983, 102000, 102018, 102035, 102052, 102069
|
|
DD 102087, 102104, 102121, 102139, 102156, 102173, 102190, 102208
|
|
DD 102225, 102242, 102260, 102277, 102294, 102312, 102329, 102346
|
|
DD 102363, 102381, 102398, 102415, 102433, 102450, 102467, 102485
|
|
DD 102502, 102520, 102537, 102554, 102572, 102589, 102606, 102624
|
|
DD 102641, 102658, 102676, 102693, 102711, 102728, 102745, 102763
|
|
DD 102780, 102797, 102815, 102832, 102850, 102867, 102884, 102902
|
|
DD 102919, 102937, 102954, 102972, 102989, 103006, 103024, 103041
|
|
DD 103059, 103076, 103094, 103111, 103129, 103146, 103163, 103181
|
|
DD 103198, 103216, 103233, 103251, 103268, 103286, 103303, 103321
|
|
DD 103338, 103356, 103373, 103391, 103408, 103426, 103443, 103461
|
|
DD 103478, 103496, 103513, 103531, 103548, 103566, 103583, 103601
|
|
DD 103618, 103636, 103653, 103671, 103689, 103706, 103724, 103741
|
|
DD 103759, 103776, 103794, 103811, 103829, 103847, 103864, 103882
|
|
DD 103899, 103917, 103934, 103952, 103970, 103987, 104005, 104022
|
|
DD 104040, 104058, 104075, 104093, 104110, 104128, 104146, 104163
|
|
DD 104181, 104199, 104216, 104234, 104252, 104269, 104287, 104304
|
|
DD 104322, 104340, 104357, 104375, 104393, 104410, 104428, 104446
|
|
DD 104463, 104481, 104499, 104516, 104534, 104552, 104570, 104587
|
|
DD 104605, 104623, 104640, 104658, 104676, 104694, 104711, 104729
|
|
DD 104747, 104764, 104782, 104800, 104818, 104835, 104853, 104871
|
|
DD 104889, 104906, 104924, 104942, 104960, 104977, 104995, 105013
|
|
DD 105031, 105048, 105066, 105084, 105102, 105120, 105137, 105155
|
|
DD 105173, 105191, 105209, 105226, 105244, 105262, 105280, 105298
|
|
DD 105315, 105333, 105351, 105369, 105387, 105405, 105422, 105440
|
|
DD 105458, 105476, 105494, 105512, 105530, 105547, 105565, 105583
|
|
DD 105601, 105619, 105637, 105655, 105672, 105690, 105708, 105726
|
|
DD 105744, 105762, 105780, 105798, 105816, 105834, 105851, 105869
|
|
DD 105887, 105905, 105923, 105941, 105959, 105977, 105995, 106013
|
|
DD 106031, 106049, 106067, 106085, 106103, 106120, 106138, 106156
|
|
DD 106174, 106192, 106210, 106228, 106246, 106264, 106282, 106300
|
|
DD 106318, 106336, 106354, 106372, 106390, 106408, 106426, 106444
|
|
DD 106462, 106480, 106498, 106516, 106534, 106552, 106570, 106588
|
|
DD 106606, 106624, 106643, 106661, 106679, 106697, 106715, 106733
|
|
DD 106751, 106769, 106787, 106805, 106823, 106841, 106859, 106877
|
|
DD 106895, 106914, 106932, 106950, 106968, 106986, 107004, 107022
|
|
DD 107040, 107058, 107077, 107095, 107113, 107131, 107149, 107167
|
|
DD 107185, 107203, 107222, 107240, 107258, 107276, 107294, 107312
|
|
DD 107331, 107349, 107367, 107385, 107403, 107421, 107440, 107458
|
|
DD 107476, 107494, 107512, 107531, 107549, 107567, 107585, 107603
|
|
DD 107622, 107640, 107658, 107676, 107694, 107713, 107731, 107749
|
|
DD 107767, 107786, 107804, 107822, 107840, 107859, 107877, 107895
|
|
DD 107913, 107932, 107950, 107968, 107986, 108005, 108023, 108041
|
|
DD 108060, 108078, 108096, 108114, 108133, 108151, 108169, 108188
|
|
DD 108206, 108224, 108243, 108261, 108279, 108297, 108316, 108334
|
|
DD 108352, 108371, 108389, 108408, 108426, 108444, 108463, 108481
|
|
DD 108499, 108518, 108536, 108554, 108573, 108591, 108609, 108628
|
|
DD 108646, 108665, 108683, 108701, 108720, 108738, 108757, 108775
|
|
DD 108793, 108812, 108830, 108849, 108867, 108886, 108904, 108922
|
|
DD 108941, 108959, 108978, 108996, 109015, 109033, 109051, 109070
|
|
DD 109088, 109107, 109125, 109144, 109162, 109181, 109199, 109218
|
|
DD 109236, 109255, 109273, 109292, 109310, 109329, 109347, 109366
|
|
DD 109384, 109403, 109421, 109440, 109458, 109477, 109495, 109514
|
|
DD 109532, 109551, 109569, 109588, 109607, 109625, 109644, 109662
|
|
DD 109681, 109699, 109718, 109736, 109755, 109774, 109792, 109811
|
|
DD 109829, 109848, 109867, 109885, 109904, 109922, 109941, 109960
|
|
DD 109978, 109997, 110015, 110034, 110053, 110071, 110090, 110108
|
|
DD 110127, 110146, 110164, 110183, 110202, 110220, 110239, 110258
|
|
DD 110276, 110295, 110314, 110332, 110351, 110370, 110388, 110407
|
|
DD 110426, 110444, 110463, 110482, 110500, 110519, 110538, 110557
|
|
DD 110575, 110594, 110613, 110631, 110650, 110669, 110688, 110706
|
|
DD 110725, 110744, 110763, 110781, 110800, 110819, 110838, 110856
|
|
DD 110875, 110894, 110913, 110931, 110950, 110969, 110988, 111007
|
|
DD 111025, 111044, 111063, 111082, 111100, 111119, 111138, 111157
|
|
DD 111176, 111195, 111213, 111232, 111251, 111270, 111289, 111307
|
|
DD 111326, 111345, 111364, 111383, 111402, 111421, 111439, 111458
|
|
DD 111477, 111496, 111515, 111534, 111553, 111571, 111590, 111609
|
|
DD 111628, 111647, 111666, 111685, 111704, 111723, 111742, 111760
|
|
DD 111779, 111798, 111817, 111836, 111855, 111874, 111893, 111912
|
|
DD 111931, 111950, 111969, 111988, 112007, 112026, 112045, 112063
|
|
DD 112082, 112101, 112120, 112139, 112158, 112177, 112196, 112215
|
|
DD 112234, 112253, 112272, 112291, 112310, 112329, 112348, 112367
|
|
DD 112386, 112405, 112424, 112443, 112462, 112481, 112500, 112520
|
|
DD 112539, 112558, 112577, 112596, 112615, 112634, 112653, 112672
|
|
DD 112691, 112710, 112729, 112748, 112767, 112786, 112806, 112825
|
|
DD 112844, 112863, 112882, 112901, 112920, 112939, 112958, 112977
|
|
DD 112997, 113016, 113035, 113054, 113073, 113092, 113111, 113130
|
|
DD 113150, 113169, 113188, 113207, 113226, 113245, 113265, 113284
|
|
DD 113303, 113322, 113341, 113360, 113380, 113399, 113418, 113437
|
|
DD 113456, 113476, 113495, 113514, 113533, 113552, 113572, 113591
|
|
DD 113610, 113629, 113649, 113668, 113687, 113706, 113726, 113745
|
|
DD 113764, 113783, 113803, 113822, 113841, 113860, 113880, 113899
|
|
DD 113918, 113937, 113957, 113976, 113995, 114015, 114034, 114053
|
|
DD 114072, 114092, 114111, 114130, 114150, 114169, 114188, 114208
|
|
DD 114227, 114246, 114266, 114285, 114304, 114324, 114343, 114362
|
|
DD 114382, 114401, 114420, 114440, 114459, 114479, 114498, 114517
|
|
DD 114537, 114556, 114575, 114595, 114614, 114634, 114653, 114672
|
|
DD 114692, 114711, 114731, 114750, 114770, 114789, 114808, 114828
|
|
DD 114847, 114867, 114886, 114906, 114925, 114944, 114964, 114983
|
|
DD 115003, 115022, 115042, 115061, 115081, 115100, 115120, 115139
|
|
DD 115159, 115178, 115198, 115217, 115237, 115256, 115276, 115295
|
|
DD 115315, 115334, 115354, 115373, 115393, 115412, 115432, 115451
|
|
DD 115471, 115490, 115510, 115529, 115549, 115569, 115588, 115608
|
|
DD 115627, 115647, 115666, 115686, 115706, 115725, 115745, 115764
|
|
DD 115784, 115804, 115823, 115843, 115862, 115882, 115902, 115921
|
|
DD 115941, 115960, 115980, 116000, 116019, 116039, 116059, 116078
|
|
DD 116098, 116117, 116137, 116157, 116176, 116196, 116216, 116235
|
|
DD 116255, 116275, 116294, 116314, 116334, 116354, 116373, 116393
|
|
DD 116413, 116432, 116452, 116472, 116491, 116511, 116531, 116551
|
|
DD 116570, 116590, 116610, 116630, 116649, 116669, 116689, 116708
|
|
DD 116728, 116748, 116768, 116788, 116807, 116827, 116847, 116867
|
|
DD 116886, 116906, 116926, 116946, 116966, 116985, 117005, 117025
|
|
DD 117045, 117065, 117084, 117104, 117124, 117144, 117164, 117183
|
|
DD 117203, 117223, 117243, 117263, 117283, 117302, 117322, 117342
|
|
DD 117362, 117382, 117402, 117422, 117442, 117461, 117481, 117501
|
|
DD 117521, 117541, 117561, 117581, 117601, 117621, 117640, 117660
|
|
DD 117680, 117700, 117720, 117740, 117760, 117780, 117800, 117820
|
|
DD 117840, 117860, 117880, 117900, 117919, 117939, 117959, 117979
|
|
DD 117999, 118019, 118039, 118059, 118079, 118099, 118119, 118139
|
|
DD 118159, 118179, 118199, 118219, 118239, 118259, 118279, 118299
|
|
DD 118319, 118339, 118359, 118379, 118399, 118419, 118439, 118459
|
|
DD 118480, 118500, 118520, 118540, 118560, 118580, 118600, 118620
|
|
DD 118640, 118660, 118680, 118700, 118720, 118740, 118761, 118781
|
|
DD 118801, 118821, 118841, 118861, 118881, 118901, 118921, 118942
|
|
DD 118962, 118982, 119002, 119022, 119042, 119062, 119083, 119103
|
|
DD 119123, 119143, 119163, 119183, 119204, 119224, 119244, 119264
|
|
DD 119284, 119304, 119325, 119345, 119365, 119385, 119405, 119426
|
|
DD 119446, 119466, 119486, 119506, 119527, 119547, 119567, 119587
|
|
DD 119608, 119628, 119648, 119668, 119689, 119709, 119729, 119749
|
|
DD 119770, 119790, 119810, 119831, 119851, 119871, 119891, 119912
|
|
DD 119932, 119952, 119973, 119993, 120013, 120033, 120054, 120074
|
|
DD 120094, 120115, 120135, 120155, 120176, 120196, 120216, 120237
|
|
DD 120257, 120277, 120298, 120318, 120339, 120359, 120379, 120400
|
|
DD 120420, 120440, 120461, 120481, 120502, 120522, 120542, 120563
|
|
DD 120583, 120604, 120624, 120644, 120665, 120685, 120706, 120726
|
|
DD 120747, 120767, 120787, 120808, 120828, 120849, 120869, 120890
|
|
DD 120910, 120931, 120951, 120971, 120992, 121012, 121033, 121053
|
|
DD 121074, 121094, 121115, 121135, 121156, 121176, 121197, 121217
|
|
DD 121238, 121258, 121279, 121299, 121320, 121341, 121361, 121382
|
|
DD 121402, 121423, 121443, 121464, 121484, 121505, 121525, 121546
|
|
DD 121567, 121587, 121608, 121628, 121649, 121670, 121690, 121711
|
|
DD 121731, 121752, 121773, 121793, 121814, 121834, 121855, 121876
|
|
DD 121896, 121917, 121937, 121958, 121979, 121999, 122020, 122041
|
|
DD 122061, 122082, 122103, 122123, 122144, 122165, 122185, 122206
|
|
DD 122227, 122247, 122268, 122289, 122309, 122330, 122351, 122372
|
|
DD 122392, 122413, 122434, 122454, 122475, 122496, 122517, 122537
|
|
DD 122558, 122579, 122600, 122620, 122641, 122662, 122683, 122703
|
|
DD 122724, 122745, 122766, 122786, 122807, 122828, 122849, 122870
|
|
DD 122890, 122911, 122932, 122953, 122974, 122994, 123015, 123036
|
|
DD 123057, 123078, 123099, 123119, 123140, 123161, 123182, 123203
|
|
DD 123224, 123244, 123265, 123286, 123307, 123328, 123349, 123370
|
|
DD 123391, 123411, 123432, 123453, 123474, 123495, 123516, 123537
|
|
DD 123558, 123579, 123599, 123620, 123641, 123662, 123683, 123704
|
|
DD 123725, 123746, 123767, 123788, 123809, 123830, 123851, 123872
|
|
DD 123893, 123914, 123935, 123956, 123977, 123998, 124019, 124040
|
|
DD 124061, 124081, 124102, 124124, 124145, 124166, 124187, 124208
|
|
DD 124229, 124250, 124271, 124292, 124313, 124334, 124355, 124376
|
|
DD 124397, 124418, 124439, 124460, 124481, 124502, 124523, 124544
|
|
DD 124565, 124586, 124608, 124629, 124650, 124671, 124692, 124713
|
|
DD 124734, 124755, 124776, 124797, 124819, 124840, 124861, 124882
|
|
DD 124903, 124924, 124945, 124967, 124988, 125009, 125030, 125051
|
|
DD 125072, 125093, 125115, 125136, 125157, 125178, 125199, 125221
|
|
DD 125242, 125263, 125284, 125305, 125327, 125348, 125369, 125390
|
|
DD 125411, 125433, 125454, 125475, 125496, 125518, 125539, 125560
|
|
DD 125581, 125603, 125624, 125645, 125666, 125688, 125709, 125730
|
|
DD 125751, 125773, 125794, 125815, 125837, 125858, 125879, 125901
|
|
DD 125922, 125943, 125964, 125986, 126007, 126028, 126050, 126071
|
|
DD 126092, 126114, 126135, 126156, 126178, 126199, 126220, 126242
|
|
DD 126263, 126285, 126306, 126327, 126349, 126370, 126391, 126413
|
|
DD 126434, 126456, 126477, 126498, 126520, 126541, 126563, 126584
|
|
DD 126606, 126627, 126648, 126670, 126691, 126713, 126734, 126756
|
|
DD 126777, 126799, 126820, 126841, 126863, 126884, 126906, 126927
|
|
DD 126949, 126970, 126992, 127013, 127035, 127056, 127078, 127099
|
|
DD 127121, 127142, 127164, 127185, 127207, 127228, 127250, 127271
|
|
DD 127293, 127315, 127336, 127358, 127379, 127401, 127422, 127444
|
|
DD 127465, 127487, 127509, 127530, 127552, 127573, 127595, 127617
|
|
DD 127638, 127660, 127681, 127703, 127725, 127746, 127768, 127789
|
|
DD 127811, 127833, 127854, 127876, 127898, 127919, 127941, 127963
|
|
DD 127984, 128006, 128028, 128049, 128071, 128093, 128114, 128136
|
|
DD 128158, 128179, 128201, 128223, 128244, 128266, 128288, 128309
|
|
DD 128331, 128353, 128375, 128396, 128418, 128440, 128462, 128483
|
|
DD 128505, 128527, 128549, 128570, 128592, 128614, 128636, 128657
|
|
DD 128679, 128701, 128723, 128744, 128766, 128788, 128810, 128832
|
|
DD 128853, 128875, 128897, 128919, 128941, 128963, 128984, 129006
|
|
DD 129028, 129050, 129072, 129094, 129115, 129137, 129159, 129181
|
|
DD 129203, 129225, 129247, 129268, 129290, 129312, 129334, 129356
|
|
DD 129378, 129400, 129422, 129444, 129465, 129487, 129509, 129531
|
|
DD 129553, 129575, 129597, 129619, 129641, 129663, 129685, 129707
|
|
DD 129729, 129751, 129773, 129794, 129816, 129838, 129860, 129882
|
|
DD 129904, 129926, 129948, 129970, 129992, 130014, 130036, 130058
|
|
DD 130080, 130102, 130124, 130146, 130168, 130190, 130212, 130235
|
|
DD 130257, 130279, 130301, 130323, 130345, 130367, 130389, 130411
|
|
DD 130433, 130455, 130477, 130499, 130521, 130543, 130566, 130588
|
|
DD 130610, 130632, 130654, 130676, 130698, 130720, 130742, 130765
|
|
DD 130787, 130809, 130831, 130853, 130875, 130897, 130920, 130942
|
|
DD 130964, 130986, 131008, 131030, 131053, 131075, 131097, 131119
|
|
DD 131141, 131163, 131186, 131208, 131230, 131252, 131274, 131297
|
|
DD 131319, 131341, 131363, 131386, 131408, 131430, 131452, 131475
|
|
DD 131497, 131519, 131541, 131564, 131586, 131608, 131630, 131653
|
|
DD 131675, 131697, 131720, 131742, 131764, 131786, 131809, 131831
|
|
DD 131853, 131876, 131898, 131920, 131943, 131965, 131987, 132010
|
|
DD 132032, 132054, 132077, 132099, 132121, 132144, 132166, 132188
|
|
DD 132211, 132233, 132256, 132278, 132300, 132323, 132345, 132368
|
|
DD 132390, 132412, 132435, 132457, 132480, 132502, 132524, 132547
|
|
DD 132569, 132592, 132614, 132637, 132659, 132682, 132704, 132726
|
|
DD 132749, 132771, 132794, 132816, 132839, 132861, 132884, 132906
|
|
DD 132929, 132951, 132974, 132996, 133019, 133041, 133064, 133086
|
|
DD 133109, 133131, 133154, 133176, 133199, 133221, 133244, 133267
|
|
DD 133289, 133312, 133334, 133357, 133379, 133402, 133425, 133447
|
|
DD 133470, 133492, 133515, 133537, 133560, 133583, 133605, 133628
|
|
DD 133651, 133673, 133696, 133718, 133741, 133764, 133786, 133809
|
|
DD 133832, 133854, 133877, 133900, 133922, 133945, 133968, 133990
|
|
DD 134013, 134036, 134058, 134081, 134104, 134126, 134149, 134172
|
|
DD 134194, 134217, 134240, 134263, 134285, 134308, 134331, 134353
|
|
DD 134376, 134399, 134422, 134444, 134467, 134490, 134513, 134535
|
|
DD 134558, 134581, 134604, 134627, 134649, 134672, 134695, 134718
|
|
DD 134741, 134763, 134786, 134809, 134832, 134855, 134877, 134900
|
|
DD 134923, 134946, 134969, 134992, 135014, 135037, 135060, 135083
|
|
DD 135106, 135129, 135152, 135174, 135197, 135220, 135243, 135266
|
|
DD 135289, 135312, 135335, 135358, 135381, 135403, 135426, 135449
|
|
DD 135472, 135495, 135518, 135541, 135564, 135587, 135610, 135633
|
|
DD 135656, 135679, 135702, 135725, 135748, 135771, 135794, 135816
|
|
DD 135839, 135862, 135885, 135908, 135931, 135954, 135977, 136000
|
|
DD 136023, 136047, 136070, 136093, 136116, 136139, 136162, 136185
|
|
DD 136208, 136231, 136254, 136277, 136300, 136323, 136346, 136369
|
|
DD 136392, 136415, 136438, 136462, 136485, 136508, 136531, 136554
|
|
DD 136577, 136600, 136623, 136646, 136670, 136693, 136716, 136739
|
|
DD 136762, 136785, 136808, 136832, 136855, 136878, 136901, 136924
|
|
DD 136947, 136971, 136994, 137017, 137040, 137063, 137086, 137110
|
|
DD 137133, 137156, 137179, 137203, 137226, 137249, 137272, 137295
|
|
DD 137319, 137342, 137365, 137388, 137412, 137435, 137458, 137481
|
|
DD 137505, 137528, 137551, 137575, 137598, 137621, 137644, 137668
|
|
DD 137691, 137714, 137738, 137761, 137784, 137808, 137831, 137854
|
|
DD 137877, 137901, 137924, 137948, 137971, 137994, 138018, 138041
|
|
DD 138064, 138088, 138111, 138134, 138158, 138181, 138205, 138228
|
|
DD 138251, 138275, 138298, 138322, 138345, 138368, 138392, 138415
|
|
DD 138439, 138462, 138485, 138509, 138532, 138556, 138579, 138603
|
|
DD 138626, 138650, 138673, 138697, 138720, 138744, 138767, 138790
|
|
DD 138814, 138837, 138861, 138884, 138908, 138931, 138955, 138978
|
|
DD 139002, 139026, 139049, 139073, 139096, 139120, 139143, 139167
|
|
DD 139190, 139214, 139237, 139261, 139285, 139308, 139332, 139355
|
|
DD 139379, 139402, 139426, 139450, 139473, 139497, 139520, 139544
|
|
DD 139568, 139591, 139615, 139639, 139662, 139686, 139709, 139733
|
|
DD 139757, 139780, 139804, 139828, 139851, 139875, 139899, 139922
|
|
DD 139946, 139970, 139993, 140017, 140041, 140065, 140088, 140112
|
|
DD 140136, 140159, 140183, 140207, 140231, 140254, 140278, 140302
|
|
DD 140326, 140349, 140373, 140397, 140421, 140444, 140468, 140492
|
|
DD 140516, 140539, 140563, 140587, 140611, 140635, 140658, 140682
|
|
DD 140706, 140730, 140754, 140777, 140801, 140825, 140849, 140873
|
|
DD 140897, 140920, 140944, 140968, 140992, 141016, 141040, 141064
|
|
DD 141087, 141111, 141135, 141159, 141183, 141207, 141231, 141255
|
|
DD 141279, 141303, 141326, 141350, 141374, 141398, 141422, 141446
|
|
DD 141470, 141494, 141518, 141542, 141566, 141590, 141614, 141638
|
|
DD 141662, 141686, 141710, 141734, 141758, 141782, 141806, 141830
|
|
DD 141854, 141878, 141902, 141926, 141950, 141974, 141998, 142022
|
|
DD 142046, 142070, 142094, 142118, 142142, 142166, 142190, 142214
|
|
DD 142238, 142262, 142286, 142310, 142334, 142359, 142383, 142407
|
|
DD 142431, 142455, 142479, 142503, 142527, 142551, 142576, 142600
|
|
DD 142624, 142648, 142672, 142696, 142720, 142745, 142769, 142793
|
|
DD 142817, 142841, 142865, 142890, 142914, 142938, 142962, 142986
|
|
DD 143011, 143035, 143059, 143083, 143107, 143132, 143156, 143180
|
|
DD 143204, 143228, 143253, 143277, 143301, 143325, 143350, 143374
|
|
DD 143398, 143423, 143447, 143471, 143495, 143520, 143544, 143568
|
|
DD 143593, 143617, 143641, 143665, 143690, 143714, 143738, 143763
|
|
DD 143787, 143811, 143836, 143860, 143884, 143909, 143933, 143957
|
|
DD 143982, 144006, 144031, 144055, 144079, 144104, 144128, 144152
|
|
DD 144177, 144201, 144226, 144250, 144275, 144299, 144323, 144348
|
|
DD 144372, 144397, 144421, 144446, 144470, 144494, 144519, 144543
|
|
DD 144568, 144592, 144617, 144641, 144666, 144690, 144715, 144739
|
|
DD 144764, 144788, 144813, 144837, 144862, 144886, 144911, 144935
|
|
DD 144960, 144984, 145009, 145033, 145058, 145082, 145107, 145132
|
|
DD 145156, 145181, 145205, 145230, 145254, 145279, 145304, 145328
|
|
DD 145353, 145377, 145402, 145427, 145451, 145476, 145500, 145525
|
|
DD 145550, 145574, 145599, 145624, 145648, 145673, 145698, 145722
|
|
DD 145747, 145772, 145796, 145821, 145846, 145870, 145895, 145920
|
|
DD 145944, 145969, 145994, 146018, 146043, 146068, 146093, 146117
|
|
DD 146142, 146167, 146191, 146216, 146241, 146266, 146290, 146315
|
|
DD 146340, 146365, 146390, 146414, 146439, 146464, 146489, 146513
|
|
DD 146538, 146563, 146588, 146613, 146637, 146662, 146687, 146712
|
|
DD 146737, 146762, 146786, 146811, 146836, 146861, 146886, 146911
|
|
DD 146936, 146960, 146985, 147010, 147035, 147060, 147085, 147110
|
|
DD 147135, 147160, 147184, 147209, 147234, 147259, 147284, 147309
|
|
DD 147334, 147359, 147384, 147409, 147434, 147459, 147484, 147509
|
|
DD 147534, 147559, 147583, 147608, 147633, 147658, 147683, 147708
|
|
DD 147733, 147758, 147783, 147808, 147833, 147858, 147883, 147909
|
|
DD 147934, 147959, 147984, 148009, 148034, 148059, 148084, 148109
|
|
DD 148134, 148159, 148184, 148209, 148234, 148259, 148284, 148310
|
|
DD 148335, 148360, 148385, 148410, 148435, 148460, 148485, 148510
|
|
DD 148536, 148561, 148586, 148611, 148636, 148661, 148686, 148712
|
|
DD 148737, 148762, 148787, 148812, 148838, 148863, 148888, 148913
|
|
DD 148938, 148964, 148989, 149014, 149039, 149064, 149090, 149115
|
|
DD 149140, 149165, 149191, 149216, 149241, 149266, 149292, 149317
|
|
DD 149342, 149367, 149393, 149418, 149443, 149469, 149494, 149519
|
|
DD 149544, 149570, 149595, 149620, 149646, 149671, 149696, 149722
|
|
DD 149747, 149772, 149798, 149823, 149848, 149874, 149899, 149925
|
|
DD 149950, 149975, 150001, 150026, 150051, 150077, 150102, 150128
|
|
DD 150153, 150178, 150204, 150229, 150255, 150280, 150306, 150331
|
|
DD 150356, 150382, 150407, 150433, 150458, 150484, 150509, 150535
|
|
DD 150560, 150586, 150611, 150637, 150662, 150688, 150713, 150739
|
|
DD 150764, 150790, 150815, 150841, 150866, 150892, 150917, 150943
|
|
DD 150968, 150994, 151019, 151045, 151071, 151096, 151122, 151147
|
|
DD 151173, 151198, 151224, 151250, 151275, 151301, 151326, 151352
|
|
DD 151378, 151403, 151429, 151455, 151480, 151506, 151531, 151557
|
|
DD 151583, 151608, 151634, 151660, 151685, 151711, 151737, 151762
|
|
DD 151788, 151814, 151839, 151865, 151891, 151917, 151942, 151968
|
|
DD 151994, 152019, 152045, 152071, 152097, 152122, 152148, 152174
|
|
DD 152200, 152225, 152251, 152277, 152303, 152328, 152354, 152380
|
|
DD 152406, 152432, 152457, 152483, 152509, 152535, 152561, 152586
|
|
DD 152612, 152638, 152664, 152690, 152716, 152741, 152767, 152793
|
|
DD 152819, 152845, 152871, 152897, 152922, 152948, 152974, 153000
|
|
DD 153026, 153052, 153078, 153104, 153130, 153156, 153181, 153207
|
|
DD 153233, 153259, 153285, 153311, 153337, 153363, 153389, 153415
|
|
DD 153441, 153467, 153493, 153519, 153545, 153571, 153597, 153623
|
|
DD 153649, 153675, 153701, 153727, 153753, 153779, 153805, 153831
|
|
DD 153857, 153883, 153909, 153935, 153961, 153987, 154013, 154039
|
|
DD 154065, 154091, 154118, 154144, 154170, 154196, 154222, 154248
|
|
DD 154274, 154300, 154326, 154352, 154379, 154405, 154431, 154457
|
|
DD 154483, 154509, 154535, 154562, 154588, 154614, 154640, 154666
|
|
DD 154692, 154719, 154745, 154771, 154797, 154823, 154850, 154876
|
|
DD 154902, 154928, 154954, 154981, 155007, 155033, 155059, 155086
|
|
DD 155112, 155138, 155164, 155191, 155217, 155243, 155269, 155296
|
|
DD 155322, 155348, 155374, 155401, 155427, 155453, 155480, 155506
|
|
DD 155532, 155559, 155585, 155611, 155638, 155664, 155690, 155717
|
|
DD 155743, 155769, 155796, 155822, 155848, 155875, 155901, 155928
|
|
DD 155954, 155980, 156007, 156033, 156060, 156086, 156112, 156139
|
|
DD 156165, 156192, 156218, 156245, 156271, 156297, 156324, 156350
|
|
DD 156377, 156403, 156430, 156456, 156483, 156509, 156536, 156562
|
|
DD 156589, 156615, 156642, 156668, 156695, 156721, 156748, 156774
|
|
DD 156801, 156827, 156854, 156880, 156907, 156934, 156960, 156987
|
|
DD 157013, 157040, 157066, 157093, 157120, 157146, 157173, 157199
|
|
DD 157226, 157253, 157279, 157306, 157332, 157359, 157386, 157412
|
|
DD 157439, 157466, 157492, 157519, 157546, 157572, 157599, 157626
|
|
DD 157652, 157679, 157706, 157732, 157759, 157786, 157812, 157839
|
|
DD 157866, 157893, 157919, 157946, 157973, 157999, 158026, 158053
|
|
DD 158080, 158106, 158133, 158160, 158187, 158213, 158240, 158267
|
|
DD 158294, 158321, 158347, 158374, 158401, 158428, 158455, 158481
|
|
DD 158508, 158535, 158562, 158589, 158616, 158642, 158669, 158696
|
|
DD 158723, 158750, 158777, 158804, 158830, 158857, 158884, 158911
|
|
DD 158938, 158965, 158992, 159019, 159046, 159073, 159100, 159126
|
|
DD 159153, 159180, 159207, 159234, 159261, 159288, 159315, 159342
|
|
DD 159369, 159396, 159423, 159450, 159477, 159504, 159531, 159558
|
|
DD 159585, 159612, 159639, 159666, 159693, 159720, 159747, 159774
|
|
DD 159801, 159828, 159855, 159882, 159909, 159936, 159963, 159990
|
|
DD 160018, 160045, 160072, 160099, 160126, 160153, 160180, 160207
|
|
DD 160234, 160261, 160289, 160316, 160343, 160370, 160397, 160424
|
|
DD 160451, 160479, 160506, 160533, 160560, 160587, 160614, 160642
|
|
DD 160669, 160696, 160723, 160750, 160778, 160805, 160832, 160859
|
|
DD 160886, 160914, 160941, 160968, 160995, 161023, 161050, 161077
|
|
DD 161104, 161132, 161159, 161186, 161213, 161241, 161268, 161295
|
|
DD 161323, 161350, 161377, 161405, 161432, 161459, 161487, 161514
|
|
DD 161541, 161569, 161596, 161623, 161651, 161678, 161705, 161733
|
|
DD 161760, 161787, 161815, 161842, 161870, 161897, 161924, 161952
|
|
DD 161979, 162007, 162034, 162061, 162089, 162116, 162144, 162171
|
|
DD 162199, 162226, 162253, 162281, 162308, 162336, 162363, 162391
|
|
DD 162418, 162446, 162473, 162501, 162528, 162556, 162583, 162611
|
|
DD 162638, 162666, 162693, 162721, 162748, 162776, 162804, 162831
|
|
DD 162859, 162886, 162914, 162941, 162969, 162997, 163024, 163052
|
|
DD 163079, 163107, 163135, 163162, 163190, 163217, 163245, 163273
|
|
DD 163300, 163328, 163356, 163383, 163411, 163438, 163466, 163494
|
|
DD 163521, 163549, 163577, 163604, 163632, 163660, 163688, 163715
|
|
DD 163743, 163771, 163798, 163826, 163854, 163882, 163909, 163937
|
|
DD 163965, 163993, 164020, 164048, 164076, 164104, 164131, 164159
|
|
DD 164187, 164215, 164243, 164270, 164298, 164326, 164354, 164382
|
|
DD 164409, 164437, 164465, 164493, 164521, 164549, 164576, 164604
|
|
DD 164632, 164660, 164688, 164716, 164744, 164771, 164799, 164827
|
|
DD 164855, 164883, 164911, 164939, 164967, 164995, 165023, 165051
|
|
DD 165078, 165106, 165134, 165162, 165190, 165218, 165246, 165274
|
|
DD 165302, 165330, 165358, 165386, 165414, 165442, 165470, 165498
|
|
DD 165526, 165554, 165582, 165610, 165638, 165666, 165694, 165722
|
|
DD 165750, 165778, 165806, 165834, 165862, 165891, 165919, 165947
|
|
DD 165975, 166003, 166031, 166059, 166087, 166115, 166143, 166172
|
|
DD 166200, 166228, 166256, 166284, 166312, 166340, 166368, 166397
|
|
DD 166425, 166453, 166481, 166509, 166538, 166566, 166594, 166622
|
|
DD 166650, 166678, 166707, 166735, 166763, 166791, 166820, 166848
|
|
DD 166876, 166904, 166933, 166961, 166989, 167017, 167046, 167074
|
|
DD 167102, 167130, 167159, 167187, 167215, 167244, 167272, 167300
|
|
DD 167328, 167357, 167385, 167413, 167442, 167470, 167498, 167527
|
|
DD 167555, 167584, 167612, 167640, 167669, 167697, 167725, 167754
|
|
DD 167782, 167811, 167839, 167867, 167896, 167924, 167953, 167981
|
|
DD 168009, 168038, 168066, 168095, 168123, 168152, 168180, 168209
|
|
DD 168237, 168266, 168294, 168322, 168351, 168379, 168408, 168436
|
|
DD 168465, 168493, 168522, 168551, 168579, 168608, 168636, 168665
|
|
DD 168693, 168722, 168750, 168779, 168807, 168836, 168865, 168893
|
|
DD 168922, 168950, 168979, 169007, 169036, 169065, 169093, 169122
|
|
DD 169151, 169179, 169208, 169236, 169265, 169294, 169322, 169351
|
|
DD 169380, 169408, 169437, 169466, 169494, 169523, 169552, 169580
|
|
DD 169609, 169638, 169667, 169695, 169724, 169753, 169781, 169810
|
|
DD 169839, 169868, 169896, 169925, 169954, 169983, 170011, 170040
|
|
DD 170069, 170098, 170127, 170155, 170184, 170213, 170242, 170271
|
|
DD 170299, 170328, 170357, 170386, 170415, 170444, 170472, 170501
|
|
DD 170530, 170559, 170588, 170617, 170646, 170674, 170703, 170732
|
|
DD 170761, 170790, 170819, 170848, 170877, 170906, 170935, 170964
|
|
DD 170992, 171021, 171050, 171079, 171108, 171137, 171166, 171195
|
|
DD 171224, 171253, 171282, 171311, 171340, 171369, 171398, 171427
|
|
DD 171456, 171485, 171514, 171543, 171572, 171601, 171630, 171659
|
|
DD 171688, 171717, 171746, 171776, 171805, 171834, 171863, 171892
|
|
DD 171921, 171950, 171979, 172008, 172037, 172066, 172096, 172125
|
|
DD 172154, 172183, 172212, 172241, 172270, 172300, 172329, 172358
|
|
DD 172387, 172416, 172445, 172475, 172504, 172533, 172562, 172591
|
|
DD 172621, 172650, 172679, 172708, 172737, 172767, 172796, 172825
|
|
DD 172854, 172884, 172913, 172942, 172972, 173001, 173030, 173059
|
|
DD 173089, 173118, 173147, 173177, 173206, 173235, 173264, 173294
|
|
DD 173323, 173352, 173382, 173411, 173440, 173470, 173499, 173529
|
|
DD 173558, 173587, 173617, 173646, 173675, 173705, 173734, 173764
|
|
DD 173793, 173822, 173852, 173881, 173911, 173940, 173970, 173999
|
|
DD 174028, 174058, 174087, 174117, 174146, 174176, 174205, 174235
|
|
DD 174264, 174294, 174323, 174353, 174382, 174412, 174441, 174471
|
|
DD 174500, 174530, 174559, 174589, 174618, 174648, 174678, 174707
|
|
DD 174737, 174766, 174796, 174825, 174855, 174885, 174914, 174944
|
|
DD 174973, 175003, 175033, 175062, 175092, 175122, 175151, 175181
|
|
DD 175210, 175240, 175270, 175299, 175329, 175359, 175388, 175418
|
|
DD 175448, 175478, 175507, 175537, 175567, 175596, 175626, 175656
|
|
DD 175686, 175715, 175745, 175775, 175804, 175834, 175864, 175894
|
|
DD 175924, 175953, 175983, 176013, 176043, 176072, 176102, 176132
|
|
DD 176162, 176192, 176221, 176251, 176281, 176311, 176341, 176371
|
|
|
|
GUSScreenList Label
|
|
DW 7
|
|
DW Near Ptr IdleFunctionList
|
|
DW Near Ptr GlobalKeyLink
|
|
|
|
DW Near Ptr FullScreenBox ; 0
|
|
DW Near Ptr ScreenHeader
|
|
DW Near Ptr FillHeader
|
|
DW Near Ptr GravisHeaderLine
|
|
|
|
DW Near Ptr MixerText
|
|
DW Near Ptr VolumeBox1
|
|
DW Near Ptr VolumeBox2
|
|
|
|
DW Near Ptr MasterVolumeLeft ; 7
|
|
DW Near Ptr MasterVolumeRight
|
|
DW Near Ptr TrebleVolumeLeft
|
|
DW Near Ptr TrebleVolumeRight
|
|
DW Near Ptr BassVolumeLeft
|
|
DW Near Ptr BassVolumeRight ; 12
|
|
|
|
DW Near Ptr SampleText
|
|
|
|
DW Near Ptr SampleSize0Button ; 14
|
|
DW Near Ptr SampleSize1Button
|
|
DW Near Ptr SampleSize2Button
|
|
DW Near Ptr SampleSize3Button ; 17
|
|
|
|
DW Near Ptr EffectText
|
|
DW Near Ptr EffectBox
|
|
|
|
DW Near Ptr ChorusThumbBar ; 20
|
|
DW Near Ptr ReverbThumbBar
|
|
|
|
DW DriverText
|
|
|
|
DW 0
|
|
|
|
GravisHeaderLine DW 10
|
|
DB "Sound Blaster AWE 32 Driver", 0
|
|
|
|
DriverText DW 1
|
|
DB 27, 48
|
|
DB 21h
|
|
DB "Sound Blaster AWE 32 Driver 1.5 for Impulse Tracker", 0
|
|
|
|
MixerText DW 1
|
|
DB 3, 13
|
|
DB 20h
|
|
DB "Mixer options", 13
|
|
DB 13
|
|
DB " Master Volume Left", 13
|
|
DB " Master Volume Right", 13
|
|
DB 13
|
|
DB 13
|
|
DB " Treble Left", 13
|
|
DB " Treble Right", 13
|
|
DB " Bass Left", 13
|
|
DB " Bass Right", 13
|
|
DB 0
|
|
|
|
VolumeBox1 DW 0
|
|
DB 24, 14, 30, 17
|
|
DB 25
|
|
|
|
VolumeBox2 DW 0
|
|
DB 17, 18, 21, 23
|
|
DB 25
|
|
|
|
MasterVolumeLeft DW 9
|
|
DB 25, 15
|
|
DW 0, 31
|
|
DW 9, 0
|
|
DW 0FFFFh, 8, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
MasterVolumeRight DW 9
|
|
DB 25, 16
|
|
DW 0, 31
|
|
DW 9, 1
|
|
DW 7, 9, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
TrebleVolumeLeft DW 9
|
|
DB 18, 19
|
|
DW 0, 15
|
|
DW 9, 2
|
|
DW 8, 10, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
TrebleVolumeRight DW 9
|
|
DB 18, 20
|
|
DW 0, 15
|
|
DW 9, 3
|
|
DW 9, 11, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
BassVolumeLeft DW 9
|
|
DB 18, 21
|
|
DW 0, 15
|
|
DW 9, 4
|
|
DW 10, 12, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
BassVolumeRight DW 9
|
|
DB 18, 22
|
|
DW 0, 15
|
|
DW 9, 5
|
|
DW 11, 14, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
SampleText DW 1
|
|
DB 3, 25
|
|
DB 20h
|
|
DB "Sample resizing options", 0
|
|
|
|
SampleSize0Button DW 2
|
|
DW 12, 15, 0FFFFh, 0FFFFh
|
|
DW 0
|
|
DW 0, 0
|
|
DW 6
|
|
DW Offset GetCompress
|
|
DriverSegment1 DW 0
|
|
DW 0
|
|
DW Offset SetCompress
|
|
DriverSegment2 DW 0
|
|
DB 7, 27, 20, 29, 8
|
|
DB 0
|
|
DB " Original", 0
|
|
|
|
SampleSize1Button DW 2
|
|
DW 14, 16, 0FFFFh, 0FFFFh
|
|
DW 0
|
|
DW 0, 0
|
|
DW 6
|
|
DW Offset GetCompress
|
|
DriverSegment3 DW 0
|
|
DW 1
|
|
DW Offset SetCompress
|
|
DriverSegment4 DW 0
|
|
DB 7, 30, 20, 32, 8
|
|
DB 0
|
|
DB " Half", 0
|
|
|
|
SampleSize2Button DW 2
|
|
DW 15, 17, 0FFFFh, 0FFFFh
|
|
DW 0
|
|
DW 0, 0
|
|
DW 6
|
|
DW Offset GetCompress
|
|
DriverSegment5 DW 0
|
|
DW 2
|
|
DW Offset SetCompress
|
|
DriverSegment6 DW 0
|
|
DB 7, 33, 20, 35, 8
|
|
DB 0
|
|
DB " Quarter", 0
|
|
|
|
SampleSize3Button DW 2
|
|
DW 16, 20, 0FFFFh, 0FFFFh
|
|
DW 0
|
|
DW 0, 0
|
|
DW 6
|
|
DW Offset GetCompress
|
|
DriverSegment7 DW 0
|
|
DW 3
|
|
DW Offset SetCompress
|
|
DriverSegment8 DW 0
|
|
DB 7, 36, 20, 38, 8
|
|
DB 0
|
|
DB " Eighth", 0
|
|
|
|
EffectText DW 1
|
|
DB 3, 40
|
|
DB 20h
|
|
DB "Effect options", 13
|
|
DB 13
|
|
DB " Chorus", 13
|
|
DB " Reverb", 0
|
|
|
|
|
|
EffectBox DW 0
|
|
DB 12, 41, 30, 44
|
|
DB 25
|
|
|
|
ChorusThumbBar DW 9
|
|
DB 13, 42
|
|
DW 0, 127
|
|
DW 9, 6
|
|
DW 17, 21, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
ReverbThumbBar DW 9
|
|
DB 13, 43
|
|
DW 0, 127
|
|
DW 9, 7
|
|
DW 20, 0FFFFh, 0FFFFh, 0FFFFh
|
|
DW 0FFFFh, 0FFFFh
|
|
|
|
|
|
|
|
VolumeTable DB 6 Dup (0)
|
|
CONFIGURATIONOFFSET EQU $+128
|
|
CONFIGSIZE EQU 2
|
|
Chorus DB 10, 64
|
|
|
|
GlobalKeyLink DB 7
|
|
GlobalKeyLink2 DD 0
|
|
|
|
IdleFunctionList DD 0
|
|
DD 0
|
|
|
|
FillHeader DW 8
|
|
FillHeader2 DD 0
|
|
|
|
FullScreenBox DW 0
|
|
DB 0, 0, 79, 49
|
|
DB 4
|
|
|
|
ScreenHeader DW 8
|
|
ScreenHeader2 DD 0
|
|
|
|
AWEParameters DB 64 Dup (0FFh), 64 Dup (0)
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SBOut ; AL = data
|
|
; DX = 2xCh
|
|
|
|
Push AX
|
|
|
|
SBOut1:
|
|
In AL, DX
|
|
Test AL, AL
|
|
JS SBOut1
|
|
|
|
Pop AX
|
|
Out DX, AL
|
|
|
|
Ret
|
|
|
|
EndP SBOut
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc DetectUART ; Given DX = Port
|
|
|
|
; From SB-DevKit
|
|
|
|
ClI
|
|
|
|
Inc DX
|
|
Xor CX, CX
|
|
|
|
DetectUART1:
|
|
In AL, DX
|
|
Test AL, 40h ; Ready for output
|
|
LoopNZ DetectUART1
|
|
JNZ DetectUARTError
|
|
|
|
Mov AL, 0FFh ; Reset!
|
|
Out DX, AL
|
|
|
|
Xor CX, CX
|
|
|
|
DetectUART2:
|
|
In AL, DX
|
|
Test AL, 80h
|
|
JNZ DetectUART3
|
|
|
|
Dec DX
|
|
In AL, DX
|
|
Inc DX
|
|
Cmp AL, 0FEh
|
|
JE DetectUART4
|
|
|
|
DetectUART3:
|
|
Loop DetectUART2
|
|
|
|
DetectUARTError:
|
|
StI
|
|
StC
|
|
Ret
|
|
|
|
DetectUART4: ; Now to shove it into 'intelligent' mode.
|
|
Xor CX, CX
|
|
|
|
DetectUART5:
|
|
In AL, DX
|
|
Test AL, 40h
|
|
LoopNZ DetectUART5
|
|
JNZ DetectUARTError
|
|
|
|
Mov AL, 3Fh ; Intelligent mode!
|
|
Out DX, AL
|
|
|
|
DetectUART6:
|
|
Xor CX, CX
|
|
|
|
DetectUART7:
|
|
In AL, DX
|
|
Test AL, 80h
|
|
JNZ DetectUART8
|
|
|
|
Dec DX
|
|
In AL, DX
|
|
Inc DX
|
|
Cmp AL, 0FEh
|
|
JE DetectUART9
|
|
|
|
DetectUART8:
|
|
Loop DetectUART7
|
|
|
|
Jmp DetectUARTError
|
|
|
|
DetectUART9:
|
|
StI
|
|
ClC
|
|
Ret
|
|
|
|
EndP DetectUART
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ReinitUART
|
|
|
|
Mov DX, MIDIPort
|
|
Test DX, DX
|
|
JZ ReinitUART1
|
|
|
|
Call DetectUART
|
|
|
|
ReinitUART1:
|
|
Ret
|
|
|
|
EndP ReinitUART
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ResetUART
|
|
|
|
Mov DX, MIDIPort
|
|
Test DX, DX
|
|
JZ ResetUART1
|
|
|
|
Inc DX
|
|
|
|
Mov AL, 0FFh
|
|
Out DX, AL
|
|
|
|
ResetUART1:
|
|
Ret
|
|
|
|
EndP ResetUART
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetCompress Far
|
|
|
|
Mov CX, [SI+22]
|
|
Mov CS:Compress, CL
|
|
|
|
Mov AX, 1
|
|
ShL AX, CL
|
|
Mov CS:Step, AX
|
|
|
|
Call Music_LoadAllSamples
|
|
|
|
Mov AX, 1
|
|
Ret
|
|
|
|
EndP SetCompress
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc GetCompress Far
|
|
|
|
Push CS
|
|
Pop ES
|
|
Mov DI, Offset Compress
|
|
|
|
Ret
|
|
|
|
EndP GetCompress
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc Load8BitSamplesForwards ; Given DS:SI, ECX = count
|
|
|
|
Push BX
|
|
|
|
Mov BX, CS:Step
|
|
Mov DX, CS:BasePort
|
|
Add DX, 400h
|
|
Xor AL, AL
|
|
|
|
Load8BitSamplesForwards2:
|
|
Mov AH, [SI]
|
|
Add SI, BX
|
|
JC Load8BitSamplesForwards4
|
|
|
|
Load8BitSamplesForwards3:
|
|
Out DX, AX
|
|
|
|
Dec ECX
|
|
JNZ Load8BitSamplesForwards2
|
|
|
|
Pop BX
|
|
Ret
|
|
|
|
Load8BitSamplesForwards4:
|
|
Add ESI, 10000h
|
|
Int 3
|
|
Jmp Load8BitSamplesForwards3
|
|
|
|
EndP Load8BitSamplesForwards
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc Load16BitSamplesForwards ; Given DS:SI, ECX = count
|
|
|
|
Push BX
|
|
|
|
Mov BX, CS:Step
|
|
Mov DX, CS:BasePort
|
|
Add DX, 400h
|
|
Add BX, BX
|
|
|
|
Load16BitSamplesForwards2:
|
|
Mov AX, [SI]
|
|
Add SI, BX
|
|
JC Load16BitSamplesForwards4
|
|
|
|
Load16BitSamplesForwards3:
|
|
Out DX, AX
|
|
|
|
Dec ECX
|
|
JNZ Load16BitSamplesForwards2
|
|
|
|
Pop BX
|
|
Ret
|
|
|
|
Load16BitSamplesForwards4:
|
|
Add ESI, 10000h
|
|
Int 3
|
|
Jmp Load16BitSamplesForwards3
|
|
|
|
EndP Load16BitSamplesForwards
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc Load8BitSamplesBackwards ; Given DS:SI, ECX = count
|
|
|
|
Push BX
|
|
|
|
Mov BX, CS:Step
|
|
Mov DX, CS:BasePort
|
|
Add DX, 400h
|
|
Xor AL, AL
|
|
|
|
Sub SI, BX
|
|
JC Load8BitSamplesBackwards6
|
|
|
|
Load8BitSamplesBackwards2:
|
|
Sub SI, BX
|
|
JC Load8BitSamplesBackwards4
|
|
|
|
Load8BitSamplesBackwards3:
|
|
Mov AH, [SI]
|
|
Out DX, AX
|
|
|
|
Dec ECX
|
|
JNZ Load8BitSamplesBackwards2
|
|
|
|
|
|
Pop BX
|
|
Ret
|
|
|
|
Load8BitSamplesBackwards4:
|
|
Sub ESI, 10000h
|
|
JC Load8BitSamplesBackwards5
|
|
Int 3
|
|
Jmp Load8BitSamplesBackwards3
|
|
|
|
Load8BitSamplesBackwards5:
|
|
Xor ESI, ESI
|
|
Jmp Load8BitSamplesBackwards3
|
|
|
|
Load8BitSamplesBackwards6:
|
|
Sub ESI, 10000h
|
|
Int 3
|
|
Jmp Load8BitSamplesBackwards2
|
|
|
|
|
|
EndP Load8BitSamplesBackwards
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc Load16BitSamplesBackwards ; Given DS:SI, ECX = count
|
|
|
|
Push BX
|
|
|
|
Mov BX, CS:Step
|
|
Mov DX, CS:BasePort
|
|
Add DX, 400h
|
|
Add BX, BX
|
|
|
|
Sub SI, BX
|
|
JC Load16BitSamplesBackwards6
|
|
|
|
Load16BitSamplesBackwards2:
|
|
Sub SI, BX
|
|
JC Load16BitSamplesBackwards4
|
|
|
|
Load16BitSamplesBackwards3:
|
|
Mov AX, [SI]
|
|
Out DX, AX
|
|
|
|
Dec ECX
|
|
JNZ Load16BitSamplesBackwards2
|
|
|
|
Pop BX
|
|
Ret
|
|
|
|
Load16BitSamplesBackwards4:
|
|
Sub ESI, 10000h
|
|
JC Load16BitSamplesBackwards5
|
|
Int 3
|
|
Jmp Load16BitSamplesBackwards3
|
|
|
|
Load16BitSamplesBackwards5:
|
|
Xor ESI, ESI
|
|
Jmp Load16BitSamplesBackwards3
|
|
|
|
Load16BitSamplesBackwards6:
|
|
Sub ESI, 10000h
|
|
Int 3
|
|
Jmp Load16BitSamplesBackwards2
|
|
|
|
|
|
EndP Load16BitSamplesBackwards
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc WriteDataChannel
|
|
|
|
Or AX, DX
|
|
|
|
Proc WriteData ; Have BX/EBX = value
|
|
; AX = xxyyh
|
|
; ^ ^
|
|
; | |
|
|
; | \-- value to send to pointer register
|
|
; \---- 0, 1, 2 or 3, 4
|
|
; 0 = data reg 0
|
|
; 1 = data reg 1, dword
|
|
; 2 = data reg 2
|
|
; 3 = data reg 3
|
|
; 4 = data reg 4, word
|
|
|
|
Push DX
|
|
Push AX
|
|
|
|
Mov DX, BasePort
|
|
Add DX, 802h
|
|
And AX, 0FFh
|
|
Out DX, AX
|
|
Pop AX
|
|
|
|
Cmp AH, 1
|
|
JB WriteDataReg0
|
|
JE WriteDataReg1DWord
|
|
Cmp AH, 3
|
|
JB WriteDataReg2
|
|
JE WriteDataReg3
|
|
Jmp WriteDataReg1Word
|
|
|
|
WriteDataReg0:
|
|
Sub DX, 802h
|
|
Mov EAX, EBX
|
|
Out DX, EAX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
WriteDataReg1DWord:
|
|
Sub DX, 402h
|
|
Mov EAX, EBX
|
|
Out DX, EAX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
WriteDataReg1Word:
|
|
Sub DX, 402h
|
|
Mov AX, BX
|
|
Out DX, AX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
WriteDataReg2:
|
|
Sub DX, 400h
|
|
Mov AX, BX
|
|
Out DX, AX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
WriteDataReg3:
|
|
Sub DL, 2
|
|
Mov AX, BX
|
|
Out DX, AX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
EndP WriteData
|
|
|
|
EndP WriteDataChannel
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ReadDataChannel
|
|
|
|
Or AX, DX
|
|
|
|
Proc ReadData ; AX = xxyyh
|
|
; ^ ^
|
|
; | |
|
|
; | \-- value to send to pointer register
|
|
; \---- 0, 1, 2 or 3, 4
|
|
; 0 = data reg 0
|
|
; 1 = data reg 1, dword
|
|
; 2 = data reg 2
|
|
; 3 = data reg 3
|
|
; 4 = data reg 4, word
|
|
|
|
Push DX
|
|
Push AX
|
|
|
|
Mov DX, BasePort
|
|
Add DX, 802h
|
|
And AX, 0FFh
|
|
Out DX, AX
|
|
Pop AX
|
|
|
|
Cmp AH, 1
|
|
JB ReadDataReg0
|
|
JE ReadDataReg1DWord
|
|
Cmp AH, 3
|
|
JB ReadDataReg2
|
|
JE ReadDataReg3
|
|
Jmp ReadDataReg1Word
|
|
|
|
ReadDataReg0:
|
|
Sub DX, 802h
|
|
In EAX, DX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
ReadDataReg1DWord:
|
|
Sub DX, 402h
|
|
In EAX, DX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
ReadDataReg1Word:
|
|
Sub DX, 402h
|
|
In AX, DX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
ReadDataReg2:
|
|
Sub DX, 400h
|
|
In AX, DX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
ReadDataReg3:
|
|
Sub DL, 2
|
|
In AX, DX
|
|
|
|
Pop DX
|
|
Ret
|
|
|
|
EndP ReadData
|
|
|
|
EndP ReadDataChannel
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetAWEFrequency
|
|
|
|
Push DS
|
|
Push SI
|
|
Push CX
|
|
Push DX
|
|
|
|
Mov EAX, [SI+10h] ; Final freq
|
|
|
|
Mov CL, Compress
|
|
ShR EAX, CL
|
|
|
|
Test EAX, EAX
|
|
JZ SetAWEFrequencyError
|
|
Cmp EAX, 88200*2
|
|
JAE SetAWEFrequencyError
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
And ESI, 0FFFFh
|
|
|
|
Mov BX, 0F000h
|
|
Mov CX, 0FFFh ; Use binary search
|
|
Xor DX, DX ; CX = upper, DX = lower
|
|
|
|
SetAWEFrequency1:
|
|
Cmp EAX, 88200
|
|
JAE SetAWEFrequency2
|
|
|
|
Sub BX, 1000h
|
|
JC SetAWEFrequencyError
|
|
Add EAX, EAX
|
|
Jmp SetAWEFrequency1
|
|
|
|
SetAWEFrequency2:
|
|
Cmp CX, DX
|
|
JBE SetAWEFrequency5
|
|
|
|
Mov SI, CX
|
|
Add SI, DX
|
|
ShR SI, 1
|
|
|
|
Cmp EAX, [AWEPitchTable+ESI*4]
|
|
JE SetAWEFrequency3
|
|
JB SetAWEFrequency4 ; In lower half
|
|
|
|
; In upper half
|
|
Inc SI
|
|
Mov DX, SI
|
|
Jmp SetAWEFrequency2
|
|
|
|
SetAWEFrequency4: ; In lower half
|
|
Dec SI
|
|
Mov CX, SI
|
|
Jmp SetAWEFrequency2
|
|
|
|
SetAWEFrequency5:
|
|
Mov SI, CX
|
|
|
|
SetAWEFrequency3:
|
|
Add BX, SI
|
|
|
|
Pop DX
|
|
Pop CX
|
|
Pop SI
|
|
Pop DS
|
|
|
|
Mov AX, IP
|
|
Call WriteDataChannel
|
|
|
|
Ret
|
|
Assume DS:Nothing
|
|
|
|
SetAWEFrequencyError:
|
|
Call StopAWENote
|
|
|
|
Mov Word Ptr [SI], 200h
|
|
Test Byte Ptr [SI+3Ah], 80h
|
|
JNZ SetAWEFrequencyError1
|
|
|
|
Mov BX, [SI+38h]
|
|
And Byte Ptr [BX], Not 4 ; Signify channel off
|
|
|
|
SetAWEFrequencyError1:
|
|
Mov AX, IP
|
|
Xor EBX, EBX
|
|
Call WriteDataChannel
|
|
|
|
Push CS
|
|
Pop DS
|
|
Mov SI, Offset FrequencyError
|
|
Mov BX, 40
|
|
Call SetInfoLine
|
|
|
|
Pop DX
|
|
Pop CX
|
|
Pop SI
|
|
Pop DS
|
|
|
|
Ret
|
|
|
|
EndP SetAWEFrequency
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetAWEPan
|
|
|
|
Mov AX, PSST
|
|
Call ReadDataChannel ; Get starting offset
|
|
|
|
Cmp CS:Stereo, 0
|
|
JE SetPan2
|
|
|
|
Test CL, 128
|
|
JNZ SetPan2
|
|
|
|
Mov BL, [SI+37h] ; Final pan
|
|
Cmp BL, 100 ; Surround -> central
|
|
JNE SetPan1
|
|
|
|
SetPan2:
|
|
Mov BL, 32
|
|
|
|
SetPan1: ; BL = 0->64, need to extend to 0->255
|
|
Add BL, BL
|
|
Add BL, BL
|
|
SBB BL, 0 ; BL = 0->255
|
|
Not BL
|
|
|
|
ShL EAX, 8
|
|
SHLD EBX, EAX, 24
|
|
Mov AX, PSST
|
|
Call WriteDataChannel
|
|
|
|
Ret
|
|
|
|
EndP SetAWEPan
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetAWEVolume
|
|
|
|
Test CH, 8
|
|
JZ SetAWEVolume1
|
|
|
|
Test CH, 1
|
|
JNZ SetAWEVolume5
|
|
|
|
Cmp Byte Ptr [SI+8], 0FFh
|
|
JE SetAWEVolume4
|
|
|
|
SetAWEVolume5:
|
|
Mov Byte Ptr [SI+8], 0FFh
|
|
|
|
Mov AX, IFATN
|
|
Call ReadDataChannel
|
|
Mov BX, AX
|
|
Mov AX, IFATN
|
|
Mov BL, 0FFh
|
|
Call WriteDataChannel
|
|
|
|
SetAWEVolume4:
|
|
Ret
|
|
|
|
SetAWEVolume1:
|
|
; First check if channel has been disowned
|
|
Xor BX, BX
|
|
Mov BL, [SI+3Ah] ; BL = host channel
|
|
|
|
Test BL, BL
|
|
JS SetAWEVolume3
|
|
|
|
SetAWEVolume2:
|
|
Mov AH, [CS:AWEParameters+BX] ; AH = filter
|
|
Mov AL, [CS:AWEParameters+BX+64] ; AL = Q.
|
|
|
|
ShR AL, 3
|
|
Mov [SI+5Bh], AH
|
|
|
|
Cmp AL, [SI+3Fh]
|
|
JE SetAWEVolume3
|
|
|
|
Mov [SI+3Fh], AL
|
|
|
|
; Set Q
|
|
Mov BL, AL
|
|
ShL EBX, 28
|
|
|
|
Mov AX, CCCA
|
|
Call ReadDataChannel
|
|
And EAX, 0FFFFFFFh
|
|
Or EBX, EAX
|
|
Mov AX, CCCA
|
|
Call WriteDataChannel
|
|
|
|
SetAWEVolume3:
|
|
Mov AL, [SI+3Eh]
|
|
Mul Byte Ptr [SI+5Bh]
|
|
ShL AX, 1
|
|
Xor BX, BX
|
|
Add AH, 1
|
|
Mov BL, [SI+20h] ; Final volume
|
|
Mov [SI+8], BL
|
|
Mov BL, [CS:AWEVolumeTable+BX]
|
|
Mov BH, AH
|
|
Mov AX, IFATN
|
|
Call WriteDataChannel
|
|
|
|
Ret
|
|
|
|
EndP SetAWEVolume
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc StopAWENote
|
|
|
|
Mov AX, DCYSUSV
|
|
Mov BX, 80h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, VTFT
|
|
Mov EBX, 0FFFFh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CVCF
|
|
Call WriteDataChannel
|
|
|
|
Mov BX, 80h
|
|
Mov AX, DCYSUSV
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, VTFT
|
|
Mov EBX, 0FFFFh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CVCF
|
|
Call WriteDataChannel
|
|
|
|
Xor EBX, EBX
|
|
Mov AX, ENVVOL
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, ENVVAL
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, SUSDCY
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, ATKHLDV
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, LFO1VAL
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, HLDATK
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, LFO2VAL
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, IP
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, IFATN
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, PEFE
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, FMMOD
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, TREMFRQ
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, FM2FRQ2
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, PTRX
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, VTFT
|
|
Call WriteDataChannel
|
|
|
|
; Mov AX, PSST
|
|
; Call WriteDataChannel
|
|
|
|
Mov BL, 8
|
|
Mov AX, CSL
|
|
Call WriteDataChannel
|
|
|
|
Xor BX, BX
|
|
Mov AX, CCCA
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CPF
|
|
Call WriteDataChannel
|
|
|
|
Ret
|
|
|
|
EndP StopAWENote
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetAWERegisters ; DS:SI = channel info table
|
|
; CX = number of channels...
|
|
|
|
Push CX
|
|
Push SI
|
|
|
|
; Stage 1.
|
|
; Turn off any channel which has
|
|
; a new note to play
|
|
; If no new note to play and channel
|
|
; is on, then get current position
|
|
|
|
Xor DX, DX ; DX = oscillator number
|
|
|
|
GetAWERegisters1:
|
|
Mov BX, [SI]
|
|
Test BH, 2 ; Note cut command
|
|
JZ GetAWERegisters2
|
|
|
|
Mov BX, 200h
|
|
Mov [SI], BX
|
|
|
|
Call StopAWENote
|
|
Jmp GetAWERegisters4
|
|
|
|
GetAWERegisters2:
|
|
Test BL, 1 ; Channel on?
|
|
JZ GetAWERegisters4
|
|
|
|
Test BH, 1 ; New note?
|
|
JZ GetAWERegisters3
|
|
|
|
; Fade out volume
|
|
Mov AX, DCYSUSV
|
|
Mov BX, 807Fh
|
|
Call WriteDataChannel
|
|
|
|
; Call StopAWENote
|
|
|
|
Jmp GetAWERegisters4
|
|
|
|
GetAWERegisters3: ; Get offset
|
|
Mov AX, CCCA
|
|
Call ReadDataChannel
|
|
|
|
Xor BX, BX
|
|
And EAX, 00000000111111111111111111111111b
|
|
Inc EAX ; Interpolator correction
|
|
; EAX = address in sound memory
|
|
Mov BL, [SI+36h] ; BL = sample number
|
|
LEA BX, [EBX*4+EBX]
|
|
ShL BX, 2
|
|
Add BX, Offset AWEDataTable
|
|
|
|
Cmp Byte Ptr [SI+0Ah], 8
|
|
JB GetAddressNoLoop
|
|
JE GetAddressForwardsLoop
|
|
|
|
GetAddressPingPongLoop:
|
|
Cmp EAX, [CS:BX+16]
|
|
JB SetOldAddress
|
|
|
|
Neg EAX
|
|
Add EAX, [CS:BX+8]
|
|
Jmp SetOldAddress1
|
|
|
|
GetAddressNoLoop:
|
|
Cmp EAX, [CS:BX+4] ; Start loop
|
|
JB SetOldAddress
|
|
|
|
Call StopAWENote
|
|
|
|
; OK.. gotta turn off channel
|
|
Mov Word Ptr [SI], 0
|
|
Test Byte Ptr [SI+3Ah], 80h
|
|
JNZ GetAWERegisters4
|
|
|
|
Mov BX, [SI+38h]
|
|
And Byte Ptr [BX], Not 4 ; Signify channel off
|
|
|
|
Jmp GetAWERegisters4
|
|
|
|
GetAddressForwardsLoop:
|
|
SetOldAddress:
|
|
Sub EAX, [CS:BX] ; EAX = address in sample
|
|
JNS SetOldAddress1
|
|
|
|
Xor EAX, EAX
|
|
|
|
SetOldAddress1:
|
|
Push CX
|
|
Mov CL, Compress
|
|
ShL EAX, CL
|
|
Pop CX
|
|
|
|
XChg [SI+4Ch], EAX
|
|
Mov [SI+2Ch], EAX
|
|
|
|
GetAWERegisters4:
|
|
Add SI, 128
|
|
|
|
Inc DX
|
|
Dec CX
|
|
JNZ GetAWERegisters1
|
|
|
|
Pop SI
|
|
Pop CX
|
|
|
|
Xor DX, DX ; DX = oscillator number
|
|
|
|
SetAWERegisters1:
|
|
; Stage 2.
|
|
; If new frequency, play new frequency
|
|
; If new volume, play new volume
|
|
; If new pan, play new pan
|
|
; If new note, set ENVVOL, ENVVAL, SUSDCY, ATKHLDV, LFO1VAL, HLDATK
|
|
; LFO2VAL, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2
|
|
; PSST, CSL, CCCA
|
|
; VTFT, CVCF, DCYSUSV, PTRX, CPF
|
|
|
|
Push CX
|
|
Mov CX, [SI]
|
|
Test CL, 1 ; Channel on?
|
|
JZ SetAWERegistersEnd
|
|
|
|
Test CH, 1 ; New note?
|
|
JZ SetAWERegisters2
|
|
|
|
Xor BX, BX
|
|
Mov BL, [SI+36h]
|
|
LEA DI, [EBX*4+EBX]
|
|
ShL DI, 2
|
|
Add DI, Offset AWEDataTable
|
|
|
|
Mov AX, DCYSUSV
|
|
Mov BX, 80h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, VTFT
|
|
Xor EBX, EBX
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CVCF
|
|
Call WriteDataChannel
|
|
|
|
Cmp DWord Ptr [CS:DI], 0FFFFFFFFh
|
|
JE SetAWERegistersError
|
|
|
|
Mov AX, PTRX
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CPF
|
|
Call WriteDataChannel
|
|
|
|
|
|
Mov AX, ENVVOL
|
|
Mov BX, 8000h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, ENVVAL
|
|
Mov BX, 8000h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, SUSDCY
|
|
Mov BX, 7F7Fh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, ATKHLDV
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, LFO1VAL
|
|
Mov BX, 8000h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, HLDATK
|
|
Mov BX, 7F7Fh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, LFO2VAL
|
|
Mov BX, 8000h
|
|
Call WriteDataChannel
|
|
|
|
Call SetAWEFrequency
|
|
Call SetAWEVolume
|
|
|
|
Mov AX, PEFE
|
|
Xor BX, BX
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, FMMOD
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, TREMFRQ
|
|
Mov BX, 10h
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, FM2FRQ2
|
|
Call WriteDataChannel
|
|
|
|
|
|
Mov EBX, [CS:DI+4]
|
|
Dec EBX ; Interpolator offset
|
|
Mov AX, PSST
|
|
Call WriteDataChannel
|
|
|
|
Call SetAWEPan
|
|
|
|
Mov AL, [CS:VolumeTable+6] ; Chorus
|
|
ShL EAX, 24
|
|
Mov EBX, [CS:DI+8]
|
|
Dec EBX ; Interpolator offset
|
|
Or EBX, EAX
|
|
Mov AX, CSL
|
|
Call WriteDataChannel
|
|
|
|
Mov AL, [SI+3Fh]
|
|
ShL EAX, 28
|
|
|
|
Push CX
|
|
Mov CL, Compress
|
|
Mov EBX, [SI+4Ch]
|
|
ShR EBX, CL
|
|
Pop CX
|
|
Add EBX, [CS:DI]
|
|
Dec EBX ; Interpolator offset
|
|
Or EBX, EAX
|
|
|
|
Mov AX, CCCA ; Current address.
|
|
Call WriteDataChannel
|
|
|
|
|
|
Mov AX, VTFT
|
|
Mov EBX, 0FFFFh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CVCF
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, DCYSUSV
|
|
Mov BX, 7F7Fh
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, PTRX
|
|
Mov EBX, 40000000h ; 25% reverb
|
|
Or BH, [CS:VolumeTable+7]
|
|
Call WriteDataChannel
|
|
|
|
Mov AX, CPF
|
|
Call WriteDataChannel
|
|
Jmp SetAWERegistersEnd
|
|
|
|
SetAWERegisters2:
|
|
Test CL, 32 ; Frequency change?
|
|
JZ SetAWERegisters3
|
|
|
|
Call SetAWEFrequency
|
|
|
|
SetAWERegisters3:
|
|
Test CL, 64 ; Volume change?
|
|
JZ SetAWERegisters4
|
|
|
|
Call SetAWEVolume
|
|
|
|
SetAWERegisters4:
|
|
Test CH, 80h ; New pan?
|
|
JZ SetAWERegistersEnd
|
|
|
|
Call SetAWEPan
|
|
|
|
SetAWERegistersEnd:
|
|
Pop CX
|
|
And Word Ptr [SI], 0111100010011111b
|
|
|
|
Add SI, 128
|
|
|
|
Inc DX
|
|
Dec CX
|
|
JNZ SetAWERegisters1
|
|
|
|
Ret
|
|
|
|
SetAWERegistersError:
|
|
Call StopAWENote
|
|
|
|
Mov Word Ptr [SI], 0
|
|
Test Byte Ptr [SI+3Ah], 80h
|
|
JNZ SetAWERegistersEnd
|
|
|
|
Mov BX, [SI+38h]
|
|
And Byte Ptr [BX], Not 4 ; Signify channel off
|
|
|
|
Jmp SetAWERegistersEnd
|
|
|
|
EndP SetAWERegisters
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ACKIRQ
|
|
|
|
Mov AL, 20h
|
|
Cmp CS:IRQ, 7
|
|
JBE ACKIRQ1
|
|
|
|
Out 0A0h, AL
|
|
|
|
ACKIRQ1:
|
|
Out 20h, AL
|
|
Ret
|
|
|
|
EndP ACKIRQ
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc CheckMIDI
|
|
|
|
Push DS
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Xor BX, BX
|
|
Mov DX, MIDIPort
|
|
|
|
Mov BL, [MIDIBufferTail]
|
|
Test DX, DX
|
|
JZ CheckMIDIEnd
|
|
|
|
Inc DX
|
|
|
|
CheckMIDIAgain:
|
|
In AL, DX
|
|
|
|
Test AL, AL
|
|
JS CheckMIDIAgain
|
|
|
|
Dec DX
|
|
In AL, DX
|
|
|
|
Cmp AL, 0F0h
|
|
JAE CheckMIDIEnd
|
|
|
|
Inc BL
|
|
Cmp BL, MIDIBufferHead
|
|
JE CheckMIDIEnd
|
|
|
|
Mov [MIDIBuffer+BX], AL
|
|
Mov [MIDIBufferTail], BL
|
|
|
|
CheckMIDIEnd:
|
|
Pop DS
|
|
Ret
|
|
|
|
EndP CheckMIDI
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc MIDIIRQHandler
|
|
|
|
Push AX BX DX
|
|
|
|
Mov DX, CS:MixerPort
|
|
Mov AL, 82h
|
|
Out DX, AL
|
|
Inc DL
|
|
In AL, DX
|
|
|
|
Test AL, 4
|
|
JZ MIDIIRQHandlerEnd
|
|
|
|
Call CheckMIDI
|
|
|
|
MIDIIRQHandlerEnd:
|
|
Call AckIRQ
|
|
|
|
Pop DX BX AX
|
|
IRet
|
|
|
|
|
|
EndP MIDIIRQHandler
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SBIRQHandler
|
|
|
|
PushAD
|
|
Push DS
|
|
Push ES
|
|
|
|
StI
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
SBIRQHandlerAgain:
|
|
Mov DX, MixerPort
|
|
Mov AL, 82h
|
|
Out DX, AL
|
|
Inc DL
|
|
In AL, DX
|
|
|
|
Test AL, 4
|
|
JZ NoMIDIIRQ
|
|
|
|
Push AX
|
|
Call CheckMIDI
|
|
Pop AX
|
|
|
|
NoMIDIIRQ:
|
|
; Test AL, 2
|
|
; JZ No16BitIRQ
|
|
;
|
|
; Push AX
|
|
; Mov DX, MixerPort
|
|
; Add DL, 0Fh-4
|
|
; In AL, DX
|
|
; Pop AX
|
|
;
|
|
; No16BitIRQ:
|
|
Test AL, 1
|
|
JNZ SB8BitIRQ
|
|
|
|
SBNo8BitIRQ:
|
|
Call AckIRQ
|
|
Jmp SBEndIRQ
|
|
|
|
SB8BitIRQ:
|
|
Mov DX, MixerPort
|
|
Add DL, 0Eh-4
|
|
In AL, DX ; 8-bit IRQ ack.
|
|
|
|
Add DL, 0Ch-0Eh
|
|
|
|
Mov AL, 80h ; Output block of silence
|
|
Call SBOut
|
|
Mov AX, BlockLength2
|
|
Call SBOut
|
|
Mov AL, AH
|
|
Call SBOut
|
|
|
|
Mov AL, 0D3h
|
|
Call SBOut
|
|
|
|
ClD
|
|
Call ACKIRQ
|
|
|
|
Inc IRQFlag
|
|
JNZ SBEndIRQ
|
|
|
|
Call SaveEMSPageFrame
|
|
Assume DS:Nothing
|
|
|
|
SB8BitIRQAgain:
|
|
Call Update ; Returns DS:SI, CX
|
|
|
|
Mov BX, BlockLength
|
|
Cmp BX, BlockLength2
|
|
JE SBIRQHandler2
|
|
Mov BlockLength2, BX
|
|
|
|
Mov DX, SB16BasePort
|
|
Add DL, 0Ch
|
|
|
|
Mov AL, 0D0h
|
|
Call SBOut
|
|
|
|
Mov AL, 80h ; Output block of silence
|
|
Call SBOut
|
|
Mov AL, BL
|
|
Call SBOut
|
|
Mov AL, BH
|
|
Call SBOut
|
|
|
|
SBIRQHandler2:
|
|
Call SetAWERegisters
|
|
Sub CS:IRQFlag, 1
|
|
JNC SB8BitIRQAgain
|
|
|
|
Call RestoreEMSPageFrame
|
|
|
|
SBEndIRQ:
|
|
Pop ES
|
|
Pop DS
|
|
PopAD
|
|
|
|
IRet
|
|
|
|
EndP SBIRQHandler
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc AWEIRQHandler ; IRQ Handler has to
|
|
; 1) Update AWE registers
|
|
; 2) Update song position
|
|
Push AX
|
|
Push DS
|
|
|
|
Mov AX, AWEUpdateTimer
|
|
Add AWEUpdateCount, AX
|
|
JC AWEIRQHandler1
|
|
|
|
Mov AL, 20h
|
|
Out 20h, AL
|
|
Jmp AWEIRQHandler2
|
|
|
|
AWEIRQHandler1:
|
|
PushF
|
|
Call [OldIRQHandler]
|
|
|
|
AWEIRQHandler2:
|
|
Xor AWEUpdateFlag, 1
|
|
JZ AWEIRQHandlerEnd
|
|
|
|
PushAD
|
|
Push ES
|
|
|
|
ClD
|
|
|
|
Call SaveEMSPageFrame
|
|
Call Update ; Returns DS:SI, CX
|
|
Call SetAWERegisters
|
|
Call RestoreEMSPageFrame
|
|
|
|
Pop ES
|
|
PopAD
|
|
|
|
AWEIRQHandlerEnd:
|
|
Pop DS
|
|
Pop AX
|
|
IRet
|
|
|
|
EndP AWEIRQHandler
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc EnableRAM
|
|
|
|
Mov DX, BasePort
|
|
Mov CX, 29
|
|
|
|
EnableRAM1:
|
|
Mov AX, DCYSUSV
|
|
Or AX, CX
|
|
Mov BX, 80h
|
|
Call WriteData
|
|
|
|
Mov AX, VTFT
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CVCF
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, PTRX
|
|
Or AX, CX
|
|
Mov EBX, 40000000h
|
|
Call WriteData
|
|
|
|
Mov AX, CPF
|
|
Or AX, CX
|
|
Mov EBX, 40000000h
|
|
Call WriteData
|
|
|
|
Mov AX, PSST
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CSL
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CCCA
|
|
Or AX, CX
|
|
Mov EBX, 6000000h ; Left write
|
|
Call WriteData
|
|
|
|
Dec CX
|
|
JNS EnableRAM1
|
|
|
|
Ret
|
|
|
|
EndP EnableRAM
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc TestAWE ; Given DX = baseport.
|
|
|
|
Push DX
|
|
|
|
Add DX, 802h
|
|
In AL, DX
|
|
In AL, DX
|
|
Not AL
|
|
Mov BL, AL
|
|
Out DX, AL
|
|
In AL, DX
|
|
Cmp AL, BL
|
|
JNE TestAWE1 ; Register changed
|
|
|
|
In AX, DX ; Is upper part of pointer
|
|
Mov BX, AX ; changing?
|
|
Mov CX, 128
|
|
|
|
TestAWE2:
|
|
In AX, DX
|
|
Cmp AL, BL
|
|
JNE TestAWE1
|
|
Cmp AH, BH
|
|
JNE TestAWE3
|
|
|
|
Dec CX
|
|
JNZ TestAWE2
|
|
Jmp TestAWE1
|
|
|
|
TestAWE3:
|
|
Pop DX
|
|
|
|
ClC
|
|
Ret
|
|
|
|
TestAWE1:
|
|
Pop DX
|
|
StC
|
|
Ret
|
|
|
|
EndP TestAWE
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc InitSetAWE
|
|
|
|
Mov CX, 31
|
|
|
|
InitSetAWE1:
|
|
Mov AX, 31
|
|
Sub AX, CX
|
|
Mov BX, [SI]
|
|
Or AX, INIT1
|
|
Call WriteData
|
|
|
|
Add SI, 2
|
|
|
|
Dec CX
|
|
JNS InitSetAWE1
|
|
|
|
Mov CX, 31
|
|
|
|
InitSetAWE2:
|
|
Mov AX, 31
|
|
Sub AX, CX
|
|
Mov BX, [SI]
|
|
Or AX, INIT2
|
|
Call WriteData
|
|
|
|
Add SI, 2
|
|
|
|
Dec CX
|
|
JNS InitSetAWE2
|
|
|
|
Mov CX, 31
|
|
|
|
InitSetAWE3:
|
|
Mov AX, 31
|
|
Sub AX, CX
|
|
Mov BX, [SI]
|
|
Or AX, INIT3
|
|
Call WriteData
|
|
|
|
Add SI, 2
|
|
|
|
Dec CX
|
|
JNS InitSetAWE3
|
|
|
|
Mov CX, 31
|
|
|
|
InitSetAWE4:
|
|
Mov AX, 31
|
|
Sub AX, CX
|
|
Mov BX, [SI]
|
|
Or AX, INIT4
|
|
Call WriteData
|
|
|
|
Add SI, 2
|
|
|
|
Dec CX
|
|
JNS InitSetAWE4
|
|
|
|
Ret
|
|
|
|
EndP InitSetAWE
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc InitAWE
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov DX, BasePort
|
|
|
|
Mov AX, HWCF1
|
|
Mov BX, 59h
|
|
Call WriteData
|
|
|
|
Mov AX, CFG2
|
|
Mov BX, 20h
|
|
Call WriteData
|
|
|
|
Mov CX, 31
|
|
|
|
InitAwe1:
|
|
Mov BX, 80h
|
|
Mov AX, DCYSUSV
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Xor EBX, EBX
|
|
Mov AX, ENVVOL
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, ENVVAL
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, SUSDCY
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, ATKHLDV
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, LFO1VAL
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, HLDATK
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, LFO2VAL
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, IP
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, IFATN
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, PEFE
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, FMMOD
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, TREMFRQ
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, FM2FRQ2
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, PTRX
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, VTFT
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, PSST
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, CSL
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, CCCA
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Dec CX
|
|
JNS InitAWE1
|
|
|
|
Mov CX, 31
|
|
|
|
InitAWE8:
|
|
Mov AX, CPF
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Mov AX, CVCF
|
|
Or AX, CX
|
|
Call WriteData
|
|
|
|
Dec CX
|
|
JNS InitAWE8
|
|
; Initialise still...
|
|
Mov AX, SMALR
|
|
Call WriteData
|
|
|
|
Mov AX, SMARR
|
|
Call WriteData
|
|
|
|
Mov AX, SMALW
|
|
Call WriteData
|
|
|
|
Mov AX, SMARW
|
|
Call WriteData
|
|
|
|
Mov SI, Offset InitTable1
|
|
Call InitSetAWE
|
|
|
|
; Wait for 1024 sample periods
|
|
Mov AX, WC
|
|
Call ReadData
|
|
|
|
Mov BX, AX
|
|
Mov CX, AX
|
|
Add CX, 400h ; 1024
|
|
Cmp BX, CX
|
|
JB InitAWE3
|
|
|
|
InitAWE4:
|
|
Mov AX, WC
|
|
Call ReadData
|
|
Cmp AX, CX
|
|
JA InitAWE4
|
|
|
|
InitAWE3:
|
|
Mov AX, WC
|
|
Call ReadData
|
|
Cmp AX, CX
|
|
JB InitAWE3
|
|
|
|
Mov SI, Offset InitTable2
|
|
Call InitSetAWE
|
|
|
|
Mov SI, Offset InitTable3
|
|
Call InitSetAWE
|
|
|
|
Mov AX, HWCF4
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, HWCF5
|
|
Mov EBX, 83h
|
|
Call WriteData
|
|
|
|
Mov AX, HWCF6
|
|
Mov EBX, 8000h
|
|
Call WriteData
|
|
|
|
Mov SI, Offset InitTable4
|
|
Call InitSetAWE
|
|
|
|
Mov AX, HWCF3
|
|
Mov BX, 4
|
|
Call WriteData
|
|
|
|
Ret
|
|
|
|
EndP InitAWE
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc InitDRAMRefresh
|
|
|
|
Mov AX, DCYSUSV+1Eh
|
|
Mov BX, 80h
|
|
Call WriteData
|
|
|
|
Mov AX, DCYSUSV+1Fh
|
|
Call WriteData
|
|
|
|
;
|
|
|
|
Mov AX, VTFT+1Eh
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CVCF+1Eh
|
|
Call WriteData
|
|
|
|
Mov AX, VTFT+1Fh
|
|
Call WriteData
|
|
|
|
Mov AX, CVCF+1Fh
|
|
Call WriteData
|
|
|
|
;
|
|
|
|
Mov AX, PTRX+1Eh
|
|
Call WriteData
|
|
|
|
Mov AX, CPF+1Eh
|
|
Call WriteData
|
|
|
|
Mov AX, PTRX+1Fh
|
|
Call WriteData
|
|
|
|
Mov AX, CPF+1Fh
|
|
Call WriteData
|
|
|
|
;
|
|
|
|
Mov AX, PSST+1Eh
|
|
Call WriteData
|
|
Mov AX, PSST+1Fh
|
|
Call WriteData
|
|
|
|
Mov BX, 0FFFFh
|
|
Mov AX, CSL+1Eh
|
|
Call WriteData
|
|
Mov AX, CSL+1Fh
|
|
Call WriteData
|
|
|
|
Xor BX, BX
|
|
Mov AX, CCCA+1Eh
|
|
Call WriteData
|
|
Mov AX, CCCA+1Fh
|
|
Call WriteData
|
|
|
|
Ret
|
|
|
|
EndP InitDRAMRefresh
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ResetDSP Far ; AX = Port
|
|
|
|
Push AX
|
|
Push CX
|
|
Push DX
|
|
|
|
Mov DX, AX
|
|
Add DL, 6
|
|
Mov AL, 1
|
|
Out DX, AL
|
|
|
|
In AL, DX
|
|
In AL, DX
|
|
In AL, DX
|
|
In AL, DX
|
|
|
|
Xor AL, AL
|
|
Out DX, AL
|
|
|
|
Add DL, 8
|
|
Mov CX, 200
|
|
|
|
ResetDSP1:
|
|
In AL, DX
|
|
Test AL, AL
|
|
JS ResetDSP2
|
|
Loop ResetDSP1
|
|
Jmp ResetDSP3
|
|
|
|
ResetDSP2:
|
|
Sub DL, 4
|
|
In AL, DX
|
|
Cmp AL, 0AAh
|
|
JE ResetDSP4
|
|
Add DL, 4
|
|
Loop ResetDSP1
|
|
|
|
ResetDSP3:
|
|
StC
|
|
|
|
ResetDSP4:
|
|
Pop DX
|
|
Pop CX
|
|
Pop AX
|
|
Ret
|
|
|
|
EndP ResetDSP
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SBGetRegister
|
|
|
|
Out DX, AL
|
|
Inc DX
|
|
In AL, DX
|
|
Dec DX
|
|
|
|
Ret
|
|
|
|
EndP SBGetRegister
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SBIn ; DX = 2xEh, returns AL
|
|
|
|
SBIn1:
|
|
In AL, DX
|
|
|
|
ShR AL, 7
|
|
LoopZ SBIn
|
|
|
|
; Test AL, AL
|
|
; JNS SBIn1
|
|
|
|
Add DL, 0Ah-0Eh ; DX = 2xAh -> Data read port
|
|
In AL, DX
|
|
Add DL, 0Eh-0Ah
|
|
|
|
Ret
|
|
|
|
EndP SBIn
|
|
|
|
; ÄÄ DetectCard ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Returns carry set if error, else carry clear. Has to setup internal vars
|
|
; (eg. appropriate IRQ/DMA whatever).
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc DetectCard Far
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov Forced, AL
|
|
|
|
Mov DX, BasePort
|
|
Cmp DX, 0FFFFh
|
|
JE DetectCard1
|
|
|
|
Cmp DX, 620h
|
|
JB DetectCard3
|
|
Cmp DX, 680h
|
|
JA DetectCard3
|
|
|
|
Call TestAWE
|
|
JNC DetectCardFound
|
|
Ret
|
|
|
|
DetectCard1:
|
|
Mov DX, 620h
|
|
|
|
DetectCard2:
|
|
Call TestAWE
|
|
JNC DetectCardFound
|
|
|
|
Add DL, 20h
|
|
Cmp DL, 80h
|
|
JBE DetectCard2
|
|
|
|
DetectCard3:
|
|
StC
|
|
Ret
|
|
|
|
DetectCardFound:
|
|
Mov BasePort, DX
|
|
|
|
; Initialise AWE 32
|
|
Call InitAWE
|
|
Call InitDRAMRefresh
|
|
|
|
; Detect amount of RAM.
|
|
|
|
Mov DX, BasePort
|
|
Mov CX, 29
|
|
|
|
DetectCardMemory1:
|
|
Mov AX, DCYSUSV
|
|
Or AX, CX
|
|
Mov BX, 80h
|
|
Call WriteData
|
|
|
|
Mov AX, VTFT
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CVCF
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, PTRX
|
|
Or AX, CX
|
|
Mov EBX, 40000000h
|
|
Call WriteData
|
|
|
|
Mov AX, CPF
|
|
Or AX, CX
|
|
Mov EBX, 40000000h
|
|
Call WriteData
|
|
|
|
Mov AX, PSST
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CSL
|
|
Or AX, CX
|
|
Xor EBX, EBX
|
|
Call WriteData
|
|
|
|
Mov AX, CCCA
|
|
Or AX, CX
|
|
Mov EBX, 4000000h ; Left read
|
|
|
|
Test CL, 2
|
|
JZ DetectCardMemory2
|
|
|
|
Mov EBX, 6000000h ; Left write
|
|
|
|
DetectCardMemory2:
|
|
Call WriteData
|
|
|
|
Dec CX
|
|
JNS DetectCardMemory1
|
|
|
|
Xor EDI, EDI ; Amount of memory stored in
|
|
; EDI
|
|
|
|
Mov AX, SMALW
|
|
Mov EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Mov BX, 0FFFFh
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Mov BX, 5555h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Mov BX, 0AAAAh
|
|
Call WriteData
|
|
|
|
Mov AX, SMALR
|
|
Mov EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 0FFFFh
|
|
JNE DetectCardMemory6
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 5555h
|
|
JNE DetectCardMemory6
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 0AAAAh
|
|
JNE DetectCardMemory6
|
|
|
|
Mov EDI, 20000h
|
|
|
|
DetectCardMemory3: ; Set read/write addresses..
|
|
Mov AX, SMALW
|
|
Mov EBX, EDI
|
|
Add EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Mov BX, 5555h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Mov BX, 0AAAAh
|
|
Call WriteData
|
|
|
|
Mov AX, SMALR
|
|
Mov EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 0FFFFh
|
|
JNE DetectCardMemory5
|
|
|
|
Mov AX, SMALR
|
|
Mov EBX, EDI
|
|
Add EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 5555h
|
|
JNE DetectCardMemory5
|
|
|
|
Mov AX, SMLD
|
|
Call ReadData
|
|
Cmp AX, 0AAAAh
|
|
JNE DetectCardMemory5
|
|
|
|
DetectCardMemory4:
|
|
Add EDI, 20000h
|
|
Cmp EDI, 0E00000h
|
|
JB DetectCardMemory3
|
|
|
|
DetectCardMemory5:
|
|
Cmp EDI, 0DFFFE0h
|
|
JB DetectCardMemory7
|
|
|
|
Mov EDI, 0DFFFE0h
|
|
|
|
DetectCardMemory7:
|
|
Test EDI, EDI
|
|
JZ DetectCardMemory6
|
|
|
|
Mov AWEMemory, EDI
|
|
|
|
Mov MixerPort, 210h
|
|
Mov AX, BasePort
|
|
Sub AX, 400h
|
|
Call ResetDSP
|
|
JNC DetectMixer2
|
|
|
|
DetectMixer1:
|
|
Mov AX, MixerPort
|
|
Call ResetDSP
|
|
JNC DetectMixer2
|
|
|
|
DetectMixer3:
|
|
Add MixerPort, 10h
|
|
Cmp MixerPort, 280h
|
|
JBE DetectMixer1
|
|
|
|
Mov DX, BasePort
|
|
Sub DX, 400h
|
|
Mov MixerPort, DX
|
|
|
|
Jmp DetectCard4
|
|
|
|
DetectMixer2: ; OK... DSP found.
|
|
; Get DSP version
|
|
Mov DX, AX
|
|
Add DL, 0Ch ; 2xCh -> Data ready to send...
|
|
|
|
Mov CX, 200
|
|
|
|
DetectMixerLoop1:
|
|
In AL, DX
|
|
; Test AL, AL
|
|
; JS DetectMixerLoop1
|
|
ShR AL, 7
|
|
LoopNZ DetectMixerLoop1
|
|
|
|
Mov AL, 0E1h ; Get DSP version command
|
|
Out DX, AL
|
|
|
|
Add DL, 0Eh-0Ch ; DX = 2xEh -> Data available status
|
|
|
|
Call SBIn
|
|
Mov AH, AL ; AH = Major version number
|
|
Call SBIn ; AL = Minor version number
|
|
|
|
Cmp AX, 40Ch ; SB DSP = 4.12+
|
|
JB DetectMixer3
|
|
|
|
Sub DL, 0Eh
|
|
Mov MixerPort, DX
|
|
|
|
DetectCard4:
|
|
Mov SB16BasePort, DX
|
|
Add MixerPort, 4 ; Mixerport
|
|
|
|
Add DL, 4
|
|
|
|
Mov AL, 30h
|
|
Call SBGetRegister
|
|
ShR AL, 3
|
|
Mov VolumeTable, AL
|
|
|
|
Mov AL, 31h
|
|
Call SBGetRegister
|
|
ShR AL, 3
|
|
Mov [VolumeTable+1], AL
|
|
|
|
Mov AL, 44h
|
|
Call SBGetRegister
|
|
ShR AL, 4
|
|
Mov [VolumeTable+2], AL
|
|
|
|
Mov AL, 45h
|
|
Call SBGetRegister
|
|
ShR AL, 4
|
|
Mov [VolumeTable+3], AL
|
|
|
|
Mov AL, 46h
|
|
Call SBGetRegister
|
|
ShR AL, 4
|
|
Mov [VolumeTable+4], AL
|
|
|
|
Mov AL, 47h
|
|
Call SBGetRegister
|
|
ShR AL, 4
|
|
Mov [VolumeTable+5], AL
|
|
|
|
Mov DX, MixerPort
|
|
Mov AX, 0C034h
|
|
Out DX, AX
|
|
|
|
Mov AL, 35h
|
|
Out DX, AX
|
|
|
|
Mov DX, MixerPort
|
|
Mov AL, 80h ; IRQ select
|
|
Out DX, AL
|
|
Inc DL ; 2x5h = Mixer data port
|
|
|
|
In AL, DX
|
|
|
|
Dec DL
|
|
|
|
Mov BX, IRQ
|
|
Cmp BX, 0FFFFh
|
|
JE DetectCardIRQ1
|
|
Cmp Forced, 0
|
|
JE DetectCardIRQ1
|
|
|
|
Mov AH, 11h
|
|
Cmp BL, 2
|
|
JE SetCardIRQ1
|
|
Cmp BL, 9
|
|
JE SetCardIRQ1
|
|
|
|
Mov AH, 12h
|
|
Cmp BL, 5
|
|
JE SetCardIRQ1
|
|
|
|
Mov AH, 14h
|
|
Cmp BL, 7
|
|
JE SetCardIRQ1
|
|
|
|
Mov AH, 18h
|
|
Cmp BL, 10
|
|
JE SetCardIRQ1
|
|
|
|
Jmp NoWindows
|
|
|
|
SetCardIRQ1:
|
|
Mov AL, 80h
|
|
Out DX, AL
|
|
Inc DL
|
|
Mov AL, AH
|
|
Out DX, AL
|
|
Dec DL
|
|
Jmp DetectCard6
|
|
|
|
DetectCardIRQ1:
|
|
Mov BX, 2
|
|
Test AL, 1
|
|
JNZ DetectCardIRQ2
|
|
|
|
Mov BL, 5
|
|
Test AL, 2
|
|
JNZ DetectCardIRQ2
|
|
|
|
Mov BL, 7
|
|
Test AL, 4
|
|
JNZ DetectCardIRQ2
|
|
|
|
Mov BL, 10
|
|
Test AL, 8
|
|
JNZ DetectCardIRQ2
|
|
|
|
StC
|
|
Ret
|
|
|
|
DetectCardIRQ2:
|
|
Cmp IRQ, 0FFFFh
|
|
JE DetectCardIRQ3
|
|
|
|
Cmp BX, IRQ
|
|
JE DetectCard6
|
|
|
|
StC
|
|
Ret
|
|
|
|
DetectCardIRQ3:
|
|
Mov IRQ, BX
|
|
|
|
DetectCard6:
|
|
Mov AX, 1600h ; Windows detection.
|
|
Int 2Fh
|
|
Test AL, 7Fh
|
|
JZ NoWindows
|
|
|
|
Mov SBIRQMode, 1
|
|
|
|
NoWindows:
|
|
Mov EAX, 'Jeff'
|
|
ClC
|
|
Ret
|
|
|
|
DetectCardMemory6:
|
|
StC
|
|
Ret
|
|
|
|
EndP DetectCard
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetSamplingRate
|
|
|
|
PushA
|
|
|
|
Mov AX, CS:SB16BasePort
|
|
Mov DX, AX
|
|
Call ResetDSP
|
|
Add DL, 0Ch
|
|
; Set mixing frequency
|
|
Mov AL, 40h
|
|
Call SBOut
|
|
Mov AL, 211
|
|
Call SBOut ; 22222 Hz.
|
|
|
|
Mov AL, 80h
|
|
Call SBOut
|
|
Mov AX, BlockLength
|
|
Dec AX
|
|
Call SBOut
|
|
Mov AL, AH
|
|
Call SBOut
|
|
|
|
PopA
|
|
Ret
|
|
|
|
EndP SetSamplingRate
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetMIDIIRQ
|
|
|
|
PushAD
|
|
Push DS
|
|
Push ES
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Xor AX, AX
|
|
Mov ES, AX
|
|
|
|
Mov DI, IRQ
|
|
ShL DI, 2
|
|
Add DI, Offset IRQData
|
|
Mov BX, [DI]
|
|
|
|
Mov AX, CS
|
|
ShL EAX, 16
|
|
Mov AX, Offset MIDIIRQHandler
|
|
|
|
XChg [ES:BX], EAX
|
|
Mov OldIRQHandler, EAX
|
|
|
|
Mov AX, IMR
|
|
And AX, [DI+2]
|
|
|
|
Out 21h, AL
|
|
Mov AL, AH
|
|
Out 0A1h, AL
|
|
|
|
Pop ES
|
|
Pop DS
|
|
PopAD
|
|
|
|
Ret
|
|
|
|
EndP SetMIDIIRQ
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetIRQ
|
|
|
|
PushAD
|
|
Push DS
|
|
Push ES
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Xor AX, AX
|
|
Mov ES, AX
|
|
|
|
Mov DI, IRQ
|
|
ShL DI, 2
|
|
Add DI, Offset IRQData
|
|
Mov BX, [DI]
|
|
|
|
Mov AX, CS
|
|
ShL EAX, 16
|
|
Mov AX, Offset SBIRQHandler
|
|
|
|
XChg [ES:BX], EAX
|
|
Mov OldIRQHandler, EAX
|
|
|
|
Mov AX, IMR
|
|
And AX, [DI+2]
|
|
|
|
Out 21h, AL
|
|
Mov AL, AH
|
|
Out 0A1h, AL
|
|
|
|
Pop ES
|
|
Pop DS
|
|
PopAD
|
|
|
|
Ret
|
|
|
|
EndP SetIRQ
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ResetIRQ
|
|
|
|
PushAD
|
|
Push DS
|
|
Push ES
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Xor AX, AX
|
|
Mov ES, AX
|
|
|
|
Mov DI, IRQ
|
|
ShL DI, 2
|
|
Mov BX, [IRQData+DI]
|
|
|
|
Mov EAX, OldIRQHandler
|
|
Mov [ES:BX], EAX
|
|
|
|
Mov AX, IMR
|
|
Out 21h, AL
|
|
Mov AL, AH
|
|
Out 0A1h, AL
|
|
|
|
Pop ES
|
|
Pop DS
|
|
PopAD
|
|
|
|
Ret
|
|
|
|
EndP ResetIRQ
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc InitMIDI
|
|
|
|
Mov DX, 330h
|
|
Call DetectUART
|
|
JC DetectMIDI1
|
|
|
|
Mov MIDIPort, 330h
|
|
Jmp DetectMIDIEnd
|
|
|
|
DetectMIDI1:
|
|
Mov DX, 300h
|
|
Call DetectUART
|
|
JC DetectMIDIEnd
|
|
|
|
Mov MIDIPort, 300h
|
|
|
|
DetectMIDIEnd:
|
|
Ret
|
|
|
|
EndP InitMIDI
|
|
|
|
;ÄÄ InitSound ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Sets up any memory required for output
|
|
; Initiates output
|
|
;
|
|
; Parameters: AX = Number of Channels
|
|
;
|
|
; If sucessful, returns:
|
|
; Carry flag clear
|
|
; DS:SI = pointer to text to display
|
|
; AX = parameter 1 in text
|
|
; BX = parameter 2 in text
|
|
; CX = parameter 3 in text
|
|
; DX = parameter 4 in text
|
|
; DI = parameter 5 in text
|
|
;
|
|
; If unsucessful, returns:
|
|
; Carry flag set
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc InitSound Far
|
|
|
|
Push CS
|
|
Pop DS
|
|
|
|
Mov ECX, IdleUpdateInfoLine
|
|
Mov EDX, GlobalKeyList
|
|
Mov IdleFunctionList, ECX
|
|
Mov GlobalKeyLink2, EDX
|
|
|
|
Mov ECX, FillHeaderFunction
|
|
Mov EDX, DrawHeaderFunction
|
|
Mov FillHeader2, ECX
|
|
Mov ScreenHeader2, EDX
|
|
|
|
Mov AX, CS
|
|
Mov DriverSegment1, AX
|
|
Mov DriverSegment2, AX
|
|
Mov DriverSegment3, AX
|
|
Mov DriverSegment4, AX
|
|
Mov DriverSegment5, AX
|
|
Mov DriverSegment6, AX
|
|
Mov DriverSegment7, AX
|
|
Mov DriverSegment8, AX
|
|
|
|
In AL, 0A1h
|
|
Mov AH, AL
|
|
In AL, 21h
|
|
Mov IMR, AX
|
|
|
|
Cmp SBIRQMode, 0
|
|
JE InitSound1
|
|
|
|
Call SetIRQ
|
|
Call GetTempo
|
|
Call SetTempo
|
|
Call ResetMemory
|
|
Call SetSamplingRate
|
|
|
|
Call InitMIDI
|
|
|
|
Mov SI, Offset AWE32Msg2
|
|
Mov AX, BasePort
|
|
|
|
Mov BX, IRQ
|
|
|
|
Mov ECX, AWEMemory
|
|
SHR ECX, 9
|
|
|
|
Ret
|
|
|
|
InitSound1:
|
|
Call SetMIDIIRQ
|
|
Call GetTempo
|
|
Call SetTempo
|
|
Call ResetMemory
|
|
|
|
Xor AX, AX
|
|
Mov ES, AX ; ES = 0
|
|
|
|
Mov AX, CS
|
|
ShL EAX, 16
|
|
Mov AX, Offset AWEIRQHandler
|
|
|
|
ClI
|
|
|
|
XChg DWord Ptr [ES:20h], EAX ; Clock tick
|
|
Mov OldIRQHandler, EAX
|
|
|
|
StI
|
|
|
|
InitSound2:
|
|
Call InitMIDI
|
|
|
|
Mov SI, Offset AWE32Msg
|
|
Mov AX, BasePort
|
|
|
|
Mov EBX, AWEMemory
|
|
SHR EBX, 9
|
|
|
|
Ret
|
|
|
|
EndP InitSound
|
|
|
|
;ÄÄ ReInitSound ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Reinitialises sound output
|
|
; Initiates sound output
|
|
;
|
|
; Parameters: AX = number of channels.
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ReInitSound Far
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov SI, Offset AWE32ReinitMsg
|
|
Mov BX, 40
|
|
Call SetInfoLine
|
|
|
|
Call ResetUART
|
|
Call InitAWE
|
|
Call InitDRAMRefresh
|
|
|
|
Cmp SBIRQMode, 0
|
|
JE ReInitSound1
|
|
|
|
Call ResetIRQ
|
|
Call SetIRQ
|
|
Call SetSamplingRate
|
|
Call ReinitUART
|
|
Ret
|
|
|
|
ReInitSound1:
|
|
Xor AX, AX
|
|
Mov ES, AX ; ES = 0
|
|
|
|
Mov AX, CS
|
|
ShL EAX, 16
|
|
Mov AX, Offset AWEIRQHandler
|
|
|
|
Mov DWord Ptr [ES:20h], EAX ; Clock tick
|
|
|
|
Call ResetIRQ
|
|
Call SetMIDIIRQ
|
|
Call ReinitUART
|
|
|
|
Ret
|
|
|
|
EndP ReInitSound
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄ UnInitSound ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Stops sound output, releases any memory used by driver
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc UnInitSound Far
|
|
|
|
|
|
Call GotoHomeDirectory
|
|
|
|
; Now to save config into driver file.
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov AX, 3D02h ; Read write access
|
|
Mov DX, Offset DriverName
|
|
Int 21h
|
|
JC SaveConfig2
|
|
|
|
Mov BX, AX
|
|
|
|
Mov AX, 4200h
|
|
Xor CX, CX
|
|
Mov DX, Offset CONFIGURATIONOFFSET
|
|
Int 21h
|
|
JC SaveConfig1
|
|
|
|
Mov AH, 40h
|
|
Mov CX, CONFIGSIZE
|
|
Mov DX, Offset Chorus
|
|
Int 21h
|
|
|
|
SaveConfig1:
|
|
PushF
|
|
Mov AH, 3Eh
|
|
Int 21h
|
|
PopF
|
|
|
|
SaveConfig2:
|
|
Call ResetIRQ
|
|
|
|
Cmp SBIRQMode, 0
|
|
JE UnInitSound1
|
|
|
|
Mov DX, SB16BasePort
|
|
Add DL, 0Ch
|
|
|
|
Mov AL, 0D0h
|
|
Call SBOut
|
|
|
|
Call ResetUART
|
|
|
|
; Mov AX, SB16BasePort
|
|
; Call ResetDSP
|
|
|
|
Call InitAWE
|
|
Ret
|
|
|
|
UnInitSound1:
|
|
Mov AL, 34h
|
|
Out 43h, AL
|
|
|
|
Xor AX, AX
|
|
Out 40h, AL
|
|
Out 40h, AL
|
|
|
|
Mov ES, AX
|
|
Mov EAX, OldIRQHandler
|
|
Mov [ES:20h], EAX
|
|
|
|
Mov AX, SB16BasePort
|
|
Call ResetDSP
|
|
Call ResetUART
|
|
Call InitAWE
|
|
Call ResetIRQ
|
|
Ret
|
|
|
|
EndP UnInitSound
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄ Poll ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; This procedure is called as often as possible by IT.EXE
|
|
; AX = Playmode (0 for nothing in particular, 1 = pattern, 2 = song)
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc Poll Far
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Poll1:
|
|
Call [UARTBufferEmpty]
|
|
JNC PollEnd
|
|
|
|
Xor BX, BX
|
|
|
|
ClI
|
|
|
|
Mov BL, MIDIBufferHead
|
|
Cmp BL, MIDIBufferTail
|
|
JZ PollEnd ; Nothing in queue
|
|
|
|
Inc BL
|
|
Mov AL, [MIDIBuffer+BX]
|
|
Mov MIDIBufferHead, BL
|
|
|
|
Call [UARTSend]
|
|
Jmp Poll1
|
|
|
|
PollEnd:
|
|
StI
|
|
Ret
|
|
|
|
EndP Poll
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄ SetTempo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Parameters: BX = tempo
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetTempo Far
|
|
|
|
Push AX
|
|
Push BX
|
|
Push DX
|
|
|
|
Cmp CS:SBIRQMode, 0
|
|
JE SetTempo1
|
|
; BlockLength = 55555/BPM
|
|
|
|
Mov AX, 55555
|
|
Xor DX, DX
|
|
Div BX
|
|
Dec AX
|
|
Mov BlockLength, AX
|
|
|
|
; Mov DX, SB16BasePort
|
|
; Add DL, 0Ch
|
|
|
|
Jmp SetTempo2
|
|
|
|
SetTempo1:
|
|
; Frames per second = 2 * (0.4*Tempo)
|
|
Mov AX, 0C214h
|
|
Mov DX, 16h ; Ticks = (1193181/(2*0.4))/Tempo
|
|
Div BX
|
|
|
|
; AX contains counter.
|
|
Mov AWEUpdateTimer, AX
|
|
|
|
Out 40h, AL ; Timer IRQ.
|
|
Mov AL, AH
|
|
Out 40h, AL
|
|
|
|
SetTempo2:
|
|
Pop DX
|
|
Pop BX
|
|
Pop AX
|
|
Ret
|
|
|
|
EndP SetTempo
|
|
|
|
;ÄÄ SetMixVolume ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Parameters: AX = MixVolume
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetMixVolume Far
|
|
|
|
Ret
|
|
|
|
EndP SetMixVolume
|
|
|
|
;ÄÄ SetStereo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Parameters: AL = Stereo on/off, 0 = off.
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetStereo Far
|
|
|
|
Mov CS:Stereo, AL
|
|
|
|
Ret
|
|
|
|
EndP SetStereo
|
|
|
|
;ÄÄ LoadSample ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Parameters: AX = sample to load
|
|
; DS:SI points to sample header
|
|
; ES:0 points to first sample
|
|
;
|
|
; Returns: **Carry set if NO error**
|
|
; **Carry clear if error**
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc LoadSample Far
|
|
; if no sample, then do nothing
|
|
; MemoryUsed = length of sample
|
|
; if sustain loop, then use sustain
|
|
; loop information
|
|
; if no sustain loop, then use loop
|
|
; information
|
|
; if no loop or sustain loop,
|
|
; memoryused += 16; (16 zero samples
|
|
; at the end)
|
|
;
|
|
PushAD
|
|
Push DS
|
|
Push ES
|
|
Push FS
|
|
|
|
Push AX
|
|
|
|
ClI
|
|
|
|
Call EnableRAM ; Enable access to DRAM.
|
|
|
|
; Set destination address
|
|
Mov AX, SMALW
|
|
Mov EBX, CS:AWEMemoryUsed
|
|
Add EBX, 200000h
|
|
Call WriteData
|
|
|
|
Mov DX, CS:BasePort
|
|
Add DX, 802h ; Index
|
|
Mov AX, 32+26
|
|
Out DX, AX
|
|
|
|
Pop AX
|
|
|
|
Mov FS, CS:SongDataArea
|
|
LEA DI, [EAX*4+EAX]
|
|
ShL DI, 2
|
|
Add DI, Offset AWEDataTable-20
|
|
|
|
Mov ECX, -1
|
|
|
|
Mov DWord Ptr [CS:DI], ECX ; Start
|
|
Mov DWord Ptr [CS:DI+4], ECX ; Loop start
|
|
Mov DWord Ptr [CS:DI+8], ECX ; Loop end
|
|
Mov DWord Ptr [CS:DI+12], ECX ; Size occupied
|
|
Mov DWord Ptr [CS:DI+16], ECX ; Size occupied
|
|
|
|
Mov BP, AX
|
|
Add BP, BP
|
|
Mov BP, [FS:64910+BP]
|
|
|
|
Xor CX, CX ; From the start of the sample..
|
|
Call GetSampleLocation ; Returns DS:ESI, ECX = length
|
|
JC LoadSampleNoError
|
|
|
|
JZ LoadSample1
|
|
|
|
; 16 bit
|
|
|
|
Mov CS:LoadSampleFuncF, Offset Load16BitSamplesForwards
|
|
Mov CS:LoadSampleFuncB, Offset Load16BitSamplesBackwards
|
|
|
|
Jmp LoadSample2
|
|
|
|
LoadSample1: ; 8 bit
|
|
Mov CS:LoadSampleFuncF, Offset Load8BitSamplesForwards
|
|
Mov CS:LoadSampleFuncB, Offset Load8BitSamplesBackwards
|
|
|
|
LoadSample2:
|
|
Mov AL, [FS:BP+12h]
|
|
Test AL, 30h ; Loop or sustain loop?
|
|
JZ LoadSampleNoLoop
|
|
|
|
Mov EBX, [FS:BP+34h] ; Loop begin
|
|
Mov EDX, [FS:BP+38h] ; Loop end
|
|
Test AL, 20h ; Sustain loop?
|
|
JZ LoadSample3
|
|
|
|
ShR AL, 1
|
|
Mov EBX, [FS:BP+40h]
|
|
Mov EDX, [FS:BP+44h]
|
|
Jmp LoadSample3
|
|
|
|
LoadSampleError:
|
|
ClC
|
|
Jmp LoadSampleEnd
|
|
|
|
LoadSampleNoError:
|
|
StC
|
|
|
|
LoadSampleEnd:
|
|
StI
|
|
Pop FS
|
|
Pop ES
|
|
Pop DS
|
|
PopAD
|
|
|
|
Ret
|
|
|
|
LoadSampleNoLoop: ; ECX contains length of sample
|
|
Mov EAX, ECX
|
|
Mov EDX, AWEMemoryUsed
|
|
Mov EBX, AWEMemory
|
|
Sub EBX, EDX ; EBX = AWEMemory remaining
|
|
|
|
Mov CL, Compress
|
|
ShR EAX, CL ; Compress sample
|
|
Add EAX, 16 ; zeroes at end of sample
|
|
|
|
Cmp EAX, EBX
|
|
JA LoadSampleError
|
|
|
|
Mov ECX, EAX
|
|
Add AWEMemoryUsed, EAX ; Record memory as used
|
|
Mov [CS:DI+12], EAX
|
|
|
|
Add EDX, 200000h
|
|
|
|
Sub ECX, 16 ; Number of samples to transfer
|
|
Mov [CS:DI], EDX
|
|
Add EDX, ECX
|
|
Mov [CS:DI+4], EDX ; Loop start
|
|
Add EDX, 14
|
|
Mov [CS:DI+8], EDX ; Loop end
|
|
|
|
; Now to transfer samples to AWE32
|
|
Call [CS:LoadSampleFuncF]
|
|
; Now to shove a whole lot of zeroes
|
|
Xor AX, AX
|
|
Mov CX, 16
|
|
|
|
LoadSampleNoLoop2:
|
|
Out DX, AX
|
|
Loop LoadsampleNoLoop2
|
|
|
|
Jmp LoadSampleNoError
|
|
|
|
LoadSample3: ; OK... EBX = loop start
|
|
; EDX = loop end
|
|
; AL&40h = ping pong
|
|
Test AL, 40h
|
|
JNZ LoadSamplePingPong
|
|
|
|
Mov CL, Compress
|
|
|
|
Push EBX
|
|
|
|
ShR EDX, CL
|
|
ShR EBX, CL
|
|
Mov EAX, EDX
|
|
Add EAX, 2 ; For loop fixing
|
|
|
|
Mov ECX, AWEMemory
|
|
Sub ECX, AWEMemoryUsed ; ECX = AWEMemoryRemaining
|
|
|
|
Cmp EAX, ECX
|
|
Pop ECX
|
|
JA LoadSampleError ; Sufficient memory?
|
|
Push ECX
|
|
|
|
Mov ECX, EAX
|
|
Mov EAX, AWEMemoryUsed
|
|
Add AWEMemoryUsed, ECX
|
|
Mov [CS:DI+12], ECX
|
|
|
|
Sub ECX, 2
|
|
|
|
Add EAX, 200000h
|
|
Mov [CS:DI], EAX
|
|
|
|
Add EDX, EAX
|
|
Add EAX, EBX
|
|
|
|
Mov [CS:DI+4], EAX
|
|
Mov [CS:DI+8], EDX
|
|
|
|
Call [CS:LoadSampleFuncF]
|
|
; Now to fix loop.. 1 extra
|
|
; sample.
|
|
|
|
Pop ESI ; Loop start
|
|
Test Byte Ptr [FS:BP+12h], 2
|
|
JZ LoadSampleForwards1
|
|
|
|
Add ESI, ESI
|
|
|
|
LoadSampleForwards1:
|
|
Int 3
|
|
|
|
Mov ECX, 2
|
|
Call [CS:LoadSampleFuncF]
|
|
|
|
Jmp LoadSampleNoError
|
|
|
|
LoadSamplePingPong:
|
|
Mov CL, Compress
|
|
ShR EDX, CL
|
|
ShR EBX, CL
|
|
|
|
Mov EAX, EDX
|
|
Add EAX, EDX
|
|
Sub EAX, EBX
|
|
Inc EAX
|
|
|
|
Mov ECX, AWEMemory
|
|
Sub ECX, AWEMemoryUsed
|
|
|
|
Cmp EAX, ECX
|
|
JA LoadSampleError
|
|
|
|
Mov [CS:DI+12], EAX
|
|
Mov ECX, AWEMemoryUsed
|
|
Add AWEMemoryUsed, EAX
|
|
|
|
Add ECX, 200000h
|
|
Add EAX, ECX
|
|
Dec EAX
|
|
|
|
Mov [CS:DI], ECX
|
|
Add ECX, EBX
|
|
Mov [CS:DI+4], ECX
|
|
Mov [CS:DI+8], EAX
|
|
|
|
Mov EAX, [CS:DI]
|
|
Add EAX, EDX
|
|
Mov [CS:DI+16], EAX
|
|
|
|
Mov ECX, EDX
|
|
Sub EDX, EBX
|
|
Push EDX
|
|
|
|
Call [CS:LoadSampleFuncF]
|
|
|
|
Pop ECX
|
|
Inc ECX
|
|
|
|
Call [CS:LoadSampleFuncB]
|
|
|
|
Jmp LoadSampleNoError
|
|
|
|
EndP LoadSample
|
|
|
|
;ÄÄ ReleaseSample ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Parameters: AX = sample to release
|
|
; DS:SI points to sample header
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ReleaseSample Far
|
|
|
|
PushAD
|
|
|
|
LEA DI, [EAX*4+EAX] ; DI = AX * 5
|
|
ShL DI, 2
|
|
Add DI, Offset AWEDataTable
|
|
|
|
Mov EBX, [CS:DI+12]
|
|
Mov EAX, CS:AWEMemoryUsed
|
|
Sub EAX, EBX
|
|
Add EAX, 200000h
|
|
Cmp EAX, [CS:DI]
|
|
JNE ReleaseSample1
|
|
|
|
Sub AWEMemoryUsed, EBX
|
|
ReleaseSample1:
|
|
Mov EAX, -1
|
|
Mov [CS:DI], EAX
|
|
Mov [CS:DI+4], EAX
|
|
Mov [CS:DI+8], EAX
|
|
Mov [CS:DI+12], EAX
|
|
|
|
PopAD
|
|
Ret
|
|
|
|
EndP ReleaseSample
|
|
|
|
;ÄÄ ResetMemory ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Frees all on-board memory
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc ResetMemory Far
|
|
|
|
Push CS
|
|
Pop ES
|
|
|
|
Xor EAX, EAX
|
|
Mov CS:AWEMemoryUsed, EAX
|
|
|
|
Mov DI, Offset AWEDataTable
|
|
Mov CX, 1000
|
|
Mov AX, 0FFFFh
|
|
Rep StosW
|
|
|
|
Ret
|
|
|
|
EndP ResetMemory
|
|
|
|
;ÄÄ GetStatus ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Returns text to show on status line, AX = display parameter
|
|
; Carry set if not to show anything.
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc GetStatus Far
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov SI, Offset AWE32Status
|
|
|
|
Mov EAX, AWEMemory
|
|
Sub EAX, AWEMemoryUsed
|
|
SHR EAX, 9
|
|
|
|
ClC
|
|
Ret
|
|
|
|
EndP GetStatus
|
|
|
|
;ÄÄ SoundCardScreen ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
;
|
|
; Function to have driver interactive part of program
|
|
;
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SoundCardScreen Far
|
|
|
|
Mov AX, 5
|
|
Mov SI, 1
|
|
Mov CX, CS
|
|
Mov DX, Offset GUSScreenList
|
|
|
|
ClC
|
|
Ret
|
|
|
|
EndP SoundCardScreen
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc GetVariable Far ; Returns AX, given DI
|
|
|
|
Xor AH, AH
|
|
Mov AL, [CS:VolumeTable+DI]
|
|
Ret
|
|
|
|
EndP GetVariable
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc SetVariable Far ; Given AX, DI
|
|
|
|
Push DS
|
|
Push DX
|
|
|
|
Push CS
|
|
Pop DS
|
|
Assume DS:Driver
|
|
|
|
Mov [VolumeTable+DI], AL
|
|
|
|
Mov DX, MixerPort
|
|
Mov AL, 30h
|
|
Mov AH, [VolumeTable]
|
|
ShL AH, 3
|
|
Out DX, AX
|
|
|
|
Mov AL, 31h
|
|
Mov AH, [VolumeTable+1]
|
|
ShL AH, 3
|
|
Out DX, AX
|
|
|
|
Mov AL, 44h
|
|
Mov AH, [VolumeTable+2]
|
|
ShL AH, 4
|
|
Out DX, AX
|
|
|
|
Mov AL, 45h
|
|
Mov AH, [VolumeTable+3]
|
|
ShL AH, 4
|
|
Out DX, AX
|
|
|
|
Mov AL, 46h
|
|
Mov AH, [VolumeTable+4]
|
|
ShL AH, 4
|
|
Out DX, AX
|
|
|
|
Mov AL, 47h
|
|
Mov AH, [VolumeTable+5]
|
|
ShL AH, 4
|
|
Out DX, AX
|
|
|
|
Pop DX
|
|
Pop DS
|
|
Ret
|
|
|
|
EndP SetVariable
|
|
Assume DS:Nothing
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
Proc UARTOut
|
|
|
|
Ret
|
|
|
|
EndP UARTOut
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
|
|
InterpretState DB 0
|
|
InterpretType DB 0
|
|
|
|
Proc SendUARTOut Far ; Local interpreter activated with 0F0h 0F0h.
|
|
|
|
Mov AH, CS:InterpretState
|
|
Cmp AH, 2
|
|
JB SendUARTOut1
|
|
|
|
; In interpreter.
|
|
JE SendUARTOut3
|
|
|
|
; Have InterpretType, now get parameter, then return to normal.
|
|
|
|
Push BX
|
|
|
|
Mov BL, CS:InterpretType ; Want BX = InterpretType*64+Channel
|
|
;
|
|
ShL BX, 6
|
|
Add BL, [DI+20h]
|
|
And BX, 127
|
|
Mov [CS:AWEParameters+BX], AL
|
|
|
|
Pop BX
|
|
|
|
Mov CS:InterpretState, 0
|
|
|
|
Test SI, SI
|
|
JZ SendUARTOut4
|
|
|
|
Or Byte Ptr [SI], 64
|
|
|
|
SendUARTOut4:
|
|
Ret
|
|
|
|
SendUARTOut3:
|
|
Mov InterpretType, AL
|
|
Jmp SendUARTOutStateInc
|
|
|
|
SendUARTOut1:
|
|
Cmp AL, 0F0h
|
|
JNE SendUARTOut2
|
|
|
|
SendUARTOutStateInc:
|
|
Inc CS:InterpretState
|
|
Ret
|
|
|
|
SendUARTOut2:
|
|
Test AH, AH
|
|
JZ SendUARTOutEnd
|
|
|
|
Push AX
|
|
Mov AL, 0F0h
|
|
Call UARTOut
|
|
Pop AX
|
|
Mov CS:InterpretState, 0
|
|
|
|
SendUARTOutEnd:
|
|
Cmp AL, 0FCh
|
|
JE ResetFilters
|
|
Cmp AL, 0FAh
|
|
JE ResetFilters
|
|
|
|
Cmp AL, 0FFh
|
|
JNE SendUARTOutNoClear
|
|
|
|
ResetFilters:
|
|
PushA
|
|
Push ES
|
|
|
|
Push CS
|
|
Pop ES
|
|
|
|
Mov DI, Offset AWEParameters
|
|
Mov CX, 32
|
|
Or AX, -1
|
|
Rep StosW
|
|
Mov CX, 32
|
|
Inc AX
|
|
Rep StosW
|
|
|
|
Pop ES
|
|
PopA
|
|
|
|
SendUARTOutNoClear:
|
|
Call UARTOut
|
|
Ret
|
|
|
|
EndP SendUARTOut
|
|
|
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
|
|
EndDriver:
|
|
|
|
;******** Provided Variable Table *************
|
|
|
|
MaxNumberOfChannels DW 30 ; Maximum number of channels the
|
|
; driver can handle.
|
|
StopAfterPlay DW 0
|
|
DefaultChannels DW 30
|
|
DriverFlags DW 1 ; MIDI Out supported
|
|
|
|
DW 4 Dup (0)
|
|
|
|
;******** Provided Procedure Table *************
|
|
|
|
ProvidedTableStart:
|
|
|
|
DW Offset DetectCard
|
|
|
|
DW Offset InitSound ; Playing related
|
|
DW Offset ReinitSound
|
|
DW Offset UninitSound
|
|
|
|
DW Offset Poll
|
|
|
|
DW Offset SetTempo ; Sound variable related
|
|
DW Offset SetMixVolume
|
|
DW Offset SetStereo
|
|
|
|
DW Offset LoadSample ; Sample related
|
|
DW Offset ReleaseSample
|
|
DW Offset ResetMemory
|
|
DW Offset GetStatus ; Returns string to show on status line
|
|
|
|
DW Offset SoundCardScreen ; Sound card 'screen'
|
|
|
|
DW Offset GetVariable ; For interface
|
|
DW Offset SetVariable
|
|
|
|
DW Offset SendUARTOut ; For MIDI Out
|
|
|
|
ProvidedTableEnd:
|
|
DW 32-(ProvidedTableEnd-ProvidedTableStart)/2 Dup (0)
|
|
|
|
EndS
|
|
|
|
End
|