initial commit
This commit is contained in:
commit
ed75530a63
|
@ -0,0 +1,4 @@
|
||||||
|
it/*.OBJ
|
||||||
|
it/*.DRV
|
||||||
|
it/*/*.OBJ
|
||||||
|
it/*/*.DRV
|
|
@ -0,0 +1,8 @@
|
||||||
|
# dos porting vm
|
||||||
|
|
||||||
|
### le contenu
|
||||||
|
|
||||||
|
- `*.c` - main source
|
||||||
|
- `r.bat` - configures dosbox path for building impulse tracker
|
||||||
|
- `it` - impulse tracker source. bsd license, cloned from https://github.com/herrnst/impulsetracker
|
||||||
|
- `tasm` - assembler required to build impulse tracker
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
syntax:glob
|
||||||
|
*.EXE
|
||||||
|
*.OBJ
|
||||||
|
*.MAP
|
|
@ -0,0 +1,107 @@
|
||||||
|
;
|
||||||
|
; Debug macro. To write to the file, use "Trace <logmessage>"
|
||||||
|
;
|
||||||
|
|
||||||
|
IF TRACEENABLED
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
FirstTime DB 0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
LogFileName DB "Logfile.Txt", 0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc WriteDebugFile
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Push CX
|
||||||
|
Mov DX, Offset LogFileName
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
|
||||||
|
Cmp DS:FirstTime, 0
|
||||||
|
JNE WriteDebugFile1
|
||||||
|
|
||||||
|
Mov AH, 3Ch
|
||||||
|
Xor CX, CX
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
Mov DS:FirstTime, 1
|
||||||
|
XChg AX, BX
|
||||||
|
Jmp WriteDebugFile2
|
||||||
|
|
||||||
|
WriteDebugFile1:
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
Mov AX, 3D02h
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
XChg AX, BX
|
||||||
|
|
||||||
|
Mov AX, 4202h
|
||||||
|
Xor CX, CX
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h ; Move to end of file
|
||||||
|
|
||||||
|
WriteDebugFile2:
|
||||||
|
Mov AH, 40h
|
||||||
|
Pop CX
|
||||||
|
Push CX
|
||||||
|
Mov DX, SI
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Eh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
WriteDebugFileEnd:
|
||||||
|
Pop CX
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP WriteDebugFile
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
Local X, Y
|
||||||
|
|
||||||
|
PushF
|
||||||
|
Push CX
|
||||||
|
Push SI
|
||||||
|
Jmp Y
|
||||||
|
X:
|
||||||
|
DB LogMessage
|
||||||
|
DB 0Dh, 0Ah
|
||||||
|
Y:
|
||||||
|
Mov CX, Offset Y - Offset X
|
||||||
|
Mov SI, Offset X
|
||||||
|
Call WriteDebugFile
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
Pop CX
|
||||||
|
PopF
|
||||||
|
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,771 @@
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
;
|
||||||
|
; Load Instrument module
|
||||||
|
;
|
||||||
|
; Instrument in .ITI format has to be placed at DS:64000
|
||||||
|
; Sample headers have to be placed at DS:0
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc LoadITInstrument
|
||||||
|
|
||||||
|
Mov DX, 64000
|
||||||
|
Mov CX, 554 ; Length of instrument header
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Cmp Word Ptr [DS:64000+1Ch], 200h
|
||||||
|
JAE LoadITInstrument1
|
||||||
|
|
||||||
|
Mov SI, DX
|
||||||
|
Call ConvertOldInstrument
|
||||||
|
|
||||||
|
LoadITInstrument1:
|
||||||
|
Mov AX, [DS:64000+1Eh] ; AX = number of samples
|
||||||
|
Mov DX, 80
|
||||||
|
Mul DX ; Clears DX, AX = size in bytes
|
||||||
|
Mov CX, AX
|
||||||
|
|
||||||
|
; Xor DX, DX
|
||||||
|
; Mov CX, DI
|
||||||
|
JCXZ LoadITInstrument2
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Int 21h ; All sample headers are loaded too.
|
||||||
|
; Step 2 done.
|
||||||
|
|
||||||
|
LoadITInstrument2:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP LoadITInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
InstrumentNameOffset DW 0
|
||||||
|
XISampleOffset DD 0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc LoadXIInstrument ; Must preserve DS, BX
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
Mov DX, 63000
|
||||||
|
Mov CX, 298 ; Length of instrument header
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AX, [DS:63000+296] ; NoS
|
||||||
|
Mov CS:NumInstrumentSamples, AX
|
||||||
|
Mov CS:InstrumentNameOffset, 63000+21
|
||||||
|
Mov CS:XISampleOffset, 298
|
||||||
|
|
||||||
|
; Now to transfer data across
|
||||||
|
; to 64000 in ITI format
|
||||||
|
LoadXIChain:
|
||||||
|
Mov DI, 64000
|
||||||
|
Mov EAX, 'IPMI' ; Header
|
||||||
|
StosD
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov CX, 8
|
||||||
|
Rep StosW ; Filename, NNA, DCA, DCT
|
||||||
|
|
||||||
|
Mov AX, [DS:63000+272]
|
||||||
|
Add AX, 15
|
||||||
|
ShR AX, 5
|
||||||
|
Cmp AX, 256
|
||||||
|
JB LoadXIInstrumentFdOut
|
||||||
|
|
||||||
|
Mov AX, 256
|
||||||
|
|
||||||
|
LoadXIInstrumentFdOut:
|
||||||
|
StosW ; Fadeout
|
||||||
|
|
||||||
|
Mov AX, 60*256
|
||||||
|
StosW ; PPC and PPS
|
||||||
|
Mov AX, 128+32*256
|
||||||
|
StosW ; GBV and DfP
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
Mov AX, CS:NumInstrumentSamples
|
||||||
|
StosW
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
Mov SI, CS:InstrumentNameOffset
|
||||||
|
Mov CX, 22/2
|
||||||
|
Rep MovsW
|
||||||
|
Mov CX, 5
|
||||||
|
Rep StosW ; Clear up end of inst name
|
||||||
|
|
||||||
|
; Translation table
|
||||||
|
Mov CX, 12 ; First 12 entries empty
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
LoadXIInstrument1:
|
||||||
|
StosW
|
||||||
|
Inc AX
|
||||||
|
Loop LoadXIInstrument1
|
||||||
|
|
||||||
|
Mov SI, 63000+66
|
||||||
|
Mov CX, 96
|
||||||
|
|
||||||
|
LoadXIInstrument2:
|
||||||
|
Mov AH, [SI]
|
||||||
|
Inc AH
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Inc AX
|
||||||
|
Inc SI
|
||||||
|
Loop LoadXIInstrument2
|
||||||
|
|
||||||
|
Mov CX, 12 ; Last 12 entries empty
|
||||||
|
Xor AH, AH
|
||||||
|
|
||||||
|
LoadXIInstrument3:
|
||||||
|
StosW
|
||||||
|
Inc AX
|
||||||
|
Loop LoadXIInstrument3
|
||||||
|
|
||||||
|
; Now for volume envelope
|
||||||
|
Mov AL, [DS:63000+266] ; Flags
|
||||||
|
Mov CL, AL
|
||||||
|
Mov AH, AL
|
||||||
|
And AX, 402h
|
||||||
|
ShR AH, 1
|
||||||
|
ShL AL, 1
|
||||||
|
Or AL, AH
|
||||||
|
And CL, 1
|
||||||
|
Or AL, CL
|
||||||
|
|
||||||
|
Mov AH, [DS:63000+258] ; No of vol env nodes
|
||||||
|
Cmp AH, 12
|
||||||
|
JB NumXIVolNodes1
|
||||||
|
|
||||||
|
Mov AH, 12
|
||||||
|
|
||||||
|
NumXIVolNodes1:
|
||||||
|
StosW
|
||||||
|
Mov AX, [DS:63000+261] ; Vol loop start+end
|
||||||
|
StosW
|
||||||
|
Mov AL, [DS:63000+260] ; Vol Sustain point
|
||||||
|
Mov AH, AL
|
||||||
|
StosW
|
||||||
|
|
||||||
|
; OK. now process volume env points
|
||||||
|
Mov CX, 12
|
||||||
|
|
||||||
|
LoadXIInstrument4:
|
||||||
|
Mov AL, [SI+2]
|
||||||
|
Cmp AL, 64
|
||||||
|
JB LoadXICheckVolBound1
|
||||||
|
|
||||||
|
Mov AL, 64
|
||||||
|
|
||||||
|
LoadXICheckVolBound1:
|
||||||
|
StosB
|
||||||
|
MovsW
|
||||||
|
LodsW
|
||||||
|
Loop LoadXIInstrument4
|
||||||
|
|
||||||
|
Mov CX, 13*3+1
|
||||||
|
Xor AX, AX
|
||||||
|
Rep StosB
|
||||||
|
|
||||||
|
; Now for panning envelope
|
||||||
|
|
||||||
|
LoadXIInstrument5:
|
||||||
|
Mov AL, [DS:63000+267] ; Flags
|
||||||
|
Mov CL, AL
|
||||||
|
Mov AH, AL
|
||||||
|
And AX, 402h
|
||||||
|
ShR AH, 1
|
||||||
|
ShL AL, 1
|
||||||
|
Or AL, AH
|
||||||
|
And CL, 1
|
||||||
|
Or AL, CL
|
||||||
|
|
||||||
|
Mov AH, [DS:63000+259] ; No of pan env nodes
|
||||||
|
Cmp AH, 12
|
||||||
|
JB NumXIPanNodes1
|
||||||
|
|
||||||
|
Mov AH, 12
|
||||||
|
|
||||||
|
NumXIPanNodes1:
|
||||||
|
StosW
|
||||||
|
Mov AX, [DS:63000+264] ; Pan loop start+end
|
||||||
|
StosW
|
||||||
|
Mov AL, [DS:63000+263] ; Pan Sustain point
|
||||||
|
Mov AH, AL
|
||||||
|
StosW
|
||||||
|
|
||||||
|
; OK. now process panning env points
|
||||||
|
Mov CX, 12
|
||||||
|
Xor AH, AH
|
||||||
|
|
||||||
|
LoadXIInstrument6:
|
||||||
|
Mov AL, [SI+2]
|
||||||
|
Cmp AL, 64
|
||||||
|
JB LoadXICheckPanBound
|
||||||
|
|
||||||
|
Mov AL, 64
|
||||||
|
|
||||||
|
LoadXICheckPanBound:
|
||||||
|
Sub AL, 32
|
||||||
|
StosB
|
||||||
|
MovsW
|
||||||
|
LodsW ; Add SI, 2
|
||||||
|
Loop LoadXIInstrument6
|
||||||
|
|
||||||
|
Mov CX, 13*3+1
|
||||||
|
Xor AX, AX
|
||||||
|
Rep StosB
|
||||||
|
|
||||||
|
; Now for pitch envelope
|
||||||
|
Mov AX, 2*256 ; 2 node points
|
||||||
|
StosW
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
; First node is 0, 0, second node is 0, 99
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
Mov AX, 99
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov CX, 75-6
|
||||||
|
Xor AX, AX
|
||||||
|
Rep StosB
|
||||||
|
|
||||||
|
Cmp Byte Ptr [DS:64000+131h], 2
|
||||||
|
JAE LoadXIInstrumentVolEnvelopeCheck1
|
||||||
|
|
||||||
|
Mov Byte Ptr [DS:64000+131h], 2
|
||||||
|
Mov Word Ptr [DS:64000+136h], 64
|
||||||
|
Mov Word Ptr [DS:64000+138h], 64*256
|
||||||
|
Mov Word Ptr [DS:64000+13Ah], 100
|
||||||
|
|
||||||
|
LoadXIInstrumentVolEnvelopeCheck1:
|
||||||
|
|
||||||
|
Cmp Byte Ptr [DS:64000+183h], 2
|
||||||
|
JAE LoadXIInstrumentPanEnvelopeCheck1
|
||||||
|
|
||||||
|
Mov Byte Ptr [DS:64000+183h], 2
|
||||||
|
Xor AX, AX
|
||||||
|
Mov [DS:64000+188h], AX
|
||||||
|
Mov [DS:64000+18Ah], AX
|
||||||
|
Mov Word Ptr [DS:64000+18Ch], 100
|
||||||
|
|
||||||
|
LoadXIInstrumentPanEnvelopeCheck1:
|
||||||
|
|
||||||
|
; OK. instrument done.
|
||||||
|
; Now have to load samples
|
||||||
|
; Bytes to load = 40*NoS
|
||||||
|
Mov AX, 40
|
||||||
|
Mul Word Ptr [DS:64000+1Eh]
|
||||||
|
Mov CX, AX
|
||||||
|
|
||||||
|
Mov DX, 62000
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov EDX, CS:XISampleOffset ; EDX = offset in file
|
||||||
|
Add DX, CX
|
||||||
|
|
||||||
|
Xor DI, DI
|
||||||
|
Mov SI, 62000
|
||||||
|
Mov CX, [DS:64000+1Eh]
|
||||||
|
|
||||||
|
LoadXISample1:
|
||||||
|
Push CX
|
||||||
|
|
||||||
|
Mov EAX, 'SPMI'
|
||||||
|
StosD
|
||||||
|
Xor AX, AX
|
||||||
|
Mov CX, 6
|
||||||
|
Rep StosW
|
||||||
|
Mov AX, 64*256
|
||||||
|
StosW
|
||||||
|
; Flg
|
||||||
|
LoadXISample2:
|
||||||
|
Mov AH, [SI+12] ; Default volume
|
||||||
|
Mov AL, 0
|
||||||
|
Cmp DWord Ptr [SI], 0 ; Length = 0?
|
||||||
|
JE LoadXISample4
|
||||||
|
|
||||||
|
Mov AL, 1
|
||||||
|
|
||||||
|
Mov CL, [SI+14]
|
||||||
|
Test CL, 10h
|
||||||
|
JZ LoadXISample3
|
||||||
|
|
||||||
|
Or AL, 2 ; 16-bit sample
|
||||||
|
|
||||||
|
LoadXISample3:
|
||||||
|
And CL, 3
|
||||||
|
JZ LoadXISample4 ; No loop
|
||||||
|
; CL = 1 or 2
|
||||||
|
Cmp DWord Ptr [SI+8], 1
|
||||||
|
JBE LoadXISample4
|
||||||
|
|
||||||
|
Or AL, 10h ; Loop
|
||||||
|
Dec CX
|
||||||
|
ShL CL, 6
|
||||||
|
Or AL, CL
|
||||||
|
|
||||||
|
LoadXISample4:
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Push SI
|
||||||
|
; Copy sample name
|
||||||
|
Add SI, 18
|
||||||
|
Mov CX, 22/2
|
||||||
|
Rep MovsW
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
; Conversion flags, default pan
|
||||||
|
Mov AL, 5
|
||||||
|
Mov AH, [SI+15] ; Pan
|
||||||
|
ShR AH, 2
|
||||||
|
AdC AH, 80h
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov EAX, [SI]
|
||||||
|
Call LoadXISample5
|
||||||
|
Mov EAX, [SI+4]
|
||||||
|
Call LoadXISample5
|
||||||
|
Mov EAX, [SI+4]
|
||||||
|
Add EAX, [SI+8]
|
||||||
|
Call LoadXISample5
|
||||||
|
|
||||||
|
; C5speed..
|
||||||
|
Push ES
|
||||||
|
Push DI
|
||||||
|
|
||||||
|
Call Music_GetPitchTable ; Returns ES:DI
|
||||||
|
Mov AL, [SI+16] ; Relative note number
|
||||||
|
Add AL, 60 ; AL = note multiplier
|
||||||
|
And AX, 0FFh
|
||||||
|
ShL AX, 2
|
||||||
|
Add DI, AX
|
||||||
|
Mov ECX, [ES:DI]
|
||||||
|
|
||||||
|
Mov AL, [SI+13] ; Finetune, -128->+127
|
||||||
|
SAR AL, 4 ; Finetune = -8->+7
|
||||||
|
And AX, 0Fh
|
||||||
|
Add AX, AX
|
||||||
|
Mov DI, AX
|
||||||
|
MovZX EAX, [CS:FineTuneTable+DI]
|
||||||
|
|
||||||
|
Pop DI
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
Push EDX
|
||||||
|
|
||||||
|
Mul ECX
|
||||||
|
ShRD EAX, EDX, 16
|
||||||
|
Pop EDX
|
||||||
|
StosD ; C5freq
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov EAX, EDX
|
||||||
|
Add EDX, [SI]
|
||||||
|
StosD
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Pop CX
|
||||||
|
Add SI, 40
|
||||||
|
Loop LoadXISample1
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
LoadXISample5:
|
||||||
|
Cmp EAX, 4177910
|
||||||
|
JB LoadXISample6
|
||||||
|
|
||||||
|
Mov EAX, 4177910
|
||||||
|
LoadXISample6:
|
||||||
|
Test Byte Ptr [SI+14], 10h
|
||||||
|
JZ LoadXISample7
|
||||||
|
|
||||||
|
ShR EAX, 1
|
||||||
|
|
||||||
|
LoadXISample7:
|
||||||
|
StosD
|
||||||
|
RetN
|
||||||
|
|
||||||
|
EndP LoadXIInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc LoadInITInstrument
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, 2000
|
||||||
|
Mov DX, 62000
|
||||||
|
Int 21h ; Read header into 62000
|
||||||
|
|
||||||
|
Mov AX, 4200h
|
||||||
|
Mov CX, Word Ptr [CS:LoadInstrumentOffset+2]
|
||||||
|
Mov DX, Word Ptr [CS:LoadInstrumentOffset]
|
||||||
|
Int 21h ; Goto location
|
||||||
|
|
||||||
|
Mov AH, 3Fh ; Load instrument data
|
||||||
|
Mov CX, 554
|
||||||
|
Mov DX, 64000
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Cmp Word Ptr [DS:62000+2Ah], 200h
|
||||||
|
JAE LoadInITInstrument1
|
||||||
|
|
||||||
|
Mov SI, 64000
|
||||||
|
Call ConvertOldInstrument
|
||||||
|
|
||||||
|
LoadInITInstrument1: ; Convert Note table and load
|
||||||
|
; Sample headers.
|
||||||
|
Mov SI, 64000+41h
|
||||||
|
Xor CX, CX
|
||||||
|
|
||||||
|
LoadInITInstrument2:
|
||||||
|
Mov DI, [SI]
|
||||||
|
And DI, 0FFh ; DI = sample number
|
||||||
|
JZ LoadInITInstrument3
|
||||||
|
Cmp DI, [DS:62000+24h] ; Sample exists?
|
||||||
|
JA LoadInITInstrument3
|
||||||
|
Cmp Byte Ptr [CS:InstrumentTable+DI], 0
|
||||||
|
JNE LoadInITInstrument3
|
||||||
|
|
||||||
|
Inc CX ; CL = sample number
|
||||||
|
Mov [CS:InstrumentTable+DI], CL
|
||||||
|
|
||||||
|
Push SI
|
||||||
|
Push CX
|
||||||
|
|
||||||
|
Add DI, [DS:62000+22h]
|
||||||
|
ShL DI, 2
|
||||||
|
Add DI, [DS:62000+20h]
|
||||||
|
Add DI, 62000+0C0h-4 ; Samples are 0 based, not 1
|
||||||
|
|
||||||
|
Mov AX, 4200h ; Move to offset of sample
|
||||||
|
Mov CX, [DI+2]
|
||||||
|
Mov DX, [DI]
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Dec AX
|
||||||
|
Mov CX, 80
|
||||||
|
Mul CX
|
||||||
|
Mov DX, AX
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Int 21h ; Load sample header.
|
||||||
|
|
||||||
|
Pop CX
|
||||||
|
Pop SI
|
||||||
|
|
||||||
|
LoadInITInstrument3:
|
||||||
|
Add SI, 2
|
||||||
|
Cmp SI, 64000+41h+120*2
|
||||||
|
JB LoadInITInstrument2
|
||||||
|
|
||||||
|
Mov [DS:64000+1Eh], CX
|
||||||
|
|
||||||
|
; Process translation table
|
||||||
|
Mov SI, 64000+41h
|
||||||
|
|
||||||
|
LoadInITInstrument4:
|
||||||
|
Mov DI, [SI]
|
||||||
|
And DI, 0FFh
|
||||||
|
Mov AL, [CS:InstrumentTable+DI]
|
||||||
|
Mov [SI], AL
|
||||||
|
|
||||||
|
Add SI, 2
|
||||||
|
Cmp SI, 64000+41h+120*2
|
||||||
|
JB LoadInITInstrument4
|
||||||
|
|
||||||
|
Mov DI, Offset InstrumentTable
|
||||||
|
Xor AX, AX
|
||||||
|
Mov CX, 50
|
||||||
|
Rep StosW
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP LoadInITInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc LoadInXMInstrument
|
||||||
|
|
||||||
|
Mov AX, 4200h
|
||||||
|
Mov CX, Word Ptr [CS:LoadInstrumentOffset+2]
|
||||||
|
Mov DX, Word Ptr [CS:LoadInstrumentOffset]
|
||||||
|
Int 21h ; Goto location
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, 4
|
||||||
|
Mov DX, 63000
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, [DS:63000]
|
||||||
|
Sub CX, 4
|
||||||
|
Mov DX, 63033+4
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AX, [DS:63033+27]
|
||||||
|
Mov CS:NumInstrumentSamples, AX
|
||||||
|
Mov CS:InstrumentNameOffset, 63033+4
|
||||||
|
|
||||||
|
Mov AX, 4201h
|
||||||
|
Xor CX, CX
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h ; DX:AX = fileoffset
|
||||||
|
|
||||||
|
Mov Word Ptr [CS:XISampleOffset], AX
|
||||||
|
Mov Word Ptr [CS:XISampleOffset+2], DX
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
Jmp LoadXIChain
|
||||||
|
|
||||||
|
EndP LoadInXMInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc TransferInstrumentName
|
||||||
|
|
||||||
|
Mov AX, 48
|
||||||
|
Mul CS:NumInstruments
|
||||||
|
Inc CS:NumInstruments
|
||||||
|
|
||||||
|
Mov DI, AX
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov AL, CL
|
||||||
|
StosB
|
||||||
|
Mov SI, Offset InInstrumentFileName
|
||||||
|
Mov CX, 14
|
||||||
|
Rep MovsB
|
||||||
|
Mov EAX, LoadInstrumentOffset
|
||||||
|
Mov [ES:DI+44-15], EAX
|
||||||
|
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP TransferInstrumentName
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
; 'InstrumentTable' scratchpad
|
||||||
|
|
||||||
|
LoadInstrumentOffset DD 0
|
||||||
|
NumInstrumentSamples DW 0
|
||||||
|
|
||||||
|
Proc LoadITInModuleInstrument
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, 2000
|
||||||
|
Mov DX, 63000
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Xor BP, BP
|
||||||
|
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Push CS ; Clear InstrumentTable
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
Mov DI, Offset InstrumentTable
|
||||||
|
Mov CX, 100
|
||||||
|
Xor AL, AL
|
||||||
|
Rep StosB
|
||||||
|
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
LoadITInModuleInstrument1:
|
||||||
|
Cmp BP, [DS:63000+22h] ; InsNum
|
||||||
|
JB LoadITInmoduleInstrument2
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
LoadITInModuleInstrument2:
|
||||||
|
Mov SI, BP
|
||||||
|
ShL SI, 2
|
||||||
|
|
||||||
|
Inc BP
|
||||||
|
|
||||||
|
Add SI, [DS:63000+20h]
|
||||||
|
Add SI, 63000+0C0h
|
||||||
|
|
||||||
|
Mov AX, 4200h ; Move file pointer.
|
||||||
|
Mov CX, [SI+2]
|
||||||
|
Mov DX, [SI]
|
||||||
|
|
||||||
|
Mov Word Ptr [CS:LoadInstrumentOffset], DX
|
||||||
|
Mov Word Ptr [CS:LoadInstrumentOffset+2], CX
|
||||||
|
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, 554
|
||||||
|
Mov DX, 62000
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov SI, 62000+41h
|
||||||
|
|
||||||
|
LoadITInModuleInstrument3:
|
||||||
|
LodsW
|
||||||
|
And AX, 0FFh
|
||||||
|
Mov DI, AX
|
||||||
|
|
||||||
|
Cmp AL, 100
|
||||||
|
JAE LoadITInModuleInstrument5
|
||||||
|
|
||||||
|
Mov [CS:InstrumentTable+DI], 1
|
||||||
|
|
||||||
|
LoadITInModuleInstrument5:
|
||||||
|
Cmp SI, 62000+41h+120*2
|
||||||
|
JB LoadITInModuleInstrument3
|
||||||
|
|
||||||
|
; Now to count samples
|
||||||
|
; and clear table.
|
||||||
|
Mov DI, 99
|
||||||
|
Xor DX, DX ; DX = number of samples.
|
||||||
|
|
||||||
|
LoadITInModuleInstrument4:
|
||||||
|
Cmp Byte Ptr [CS:InstrumentTable+DI], 1
|
||||||
|
JNE LoadITInModuleInstrument6
|
||||||
|
|
||||||
|
Inc DX
|
||||||
|
Mov Byte Ptr [CS:InstrumentTable+DI], 0
|
||||||
|
|
||||||
|
LoadITInModuleInstrument6:
|
||||||
|
Dec DI
|
||||||
|
JNZ LoadITInModuleInstrument4
|
||||||
|
|
||||||
|
Test DX, DX
|
||||||
|
JZ LoadITInModuleInstrument1
|
||||||
|
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov CL, 5 ; In-Module .IT Instrument
|
||||||
|
Call TransferInstrumentName
|
||||||
|
|
||||||
|
Mov SI, 62000+20h
|
||||||
|
Mov CX, 25
|
||||||
|
Rep MovsB
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
StosW
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Jmp LoadITInModuleInstrument1
|
||||||
|
|
||||||
|
EndP LoadITInModuleInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc LoadXMInModuleInstrument
|
||||||
|
|
||||||
|
Call LoadXMHeader ; Reads to first instrument
|
||||||
|
|
||||||
|
Xor BP, BP
|
||||||
|
|
||||||
|
LoadXMInModuleInstrument1:
|
||||||
|
Cmp BP, [DS:64000+72]
|
||||||
|
JB LoadXMInModuleInstrument2
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
LoadXMInModuleInstrument2:
|
||||||
|
Inc BP
|
||||||
|
|
||||||
|
Mov AX, 4201h
|
||||||
|
Xor CX, CX
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h ; Get current file location
|
||||||
|
|
||||||
|
Mov Word Ptr [CS:LoadInstrumentOffset], AX
|
||||||
|
Mov Word Ptr [CS:LoadInstrumentOffset+2], DX
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, 4
|
||||||
|
Mov DX, 63000
|
||||||
|
Int 21h ; Read instrument size field
|
||||||
|
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov CX, [DS:63000]
|
||||||
|
Sub CX, 4
|
||||||
|
Mov DX, 63004
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AX, [DS:63000+27] ; Number of samples
|
||||||
|
Test AX, AX
|
||||||
|
JZ LoadXMInModuleInstrument1
|
||||||
|
|
||||||
|
Mov CX, 40
|
||||||
|
Mul CX
|
||||||
|
Mov CX, AX
|
||||||
|
Mov AH, 3Fh
|
||||||
|
Mov DX, 62000
|
||||||
|
Int 21h ; OK sample headers read
|
||||||
|
; into DS:62000
|
||||||
|
|
||||||
|
Mov CL, 6 ; In-Module .XM Instrument
|
||||||
|
Call TransferInstrumentName
|
||||||
|
|
||||||
|
Mov SI, 63004
|
||||||
|
Mov CX, 22
|
||||||
|
Rep MovsB
|
||||||
|
Xor AX, AX
|
||||||
|
StosB
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov AX, [DS:63000+27]
|
||||||
|
Mov CX, AX
|
||||||
|
StosW
|
||||||
|
Xor AX, AX
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Xor EDX, EDX
|
||||||
|
Mov SI, 62000
|
||||||
|
|
||||||
|
LoadXMInModuleInstrument3:
|
||||||
|
Add EDX, [SI]
|
||||||
|
Add SI, 40
|
||||||
|
|
||||||
|
Dec CX
|
||||||
|
JNZ LoadXMInModuleInstrument3
|
||||||
|
|
||||||
|
SHLD ECX, EDX, 16
|
||||||
|
Mov AX, 4201h
|
||||||
|
Int 21h
|
||||||
|
; Advance file pointers..
|
||||||
|
Jmp LoadXMInModuleInstrument1
|
||||||
|
|
||||||
|
EndP LoadXMInModuleInstrument
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,973 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ EMS Module ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
; Memory structure for patterns:
|
||||||
|
; Memory Block Header
|
||||||
|
; Memory data
|
||||||
|
;
|
||||||
|
; Block Header
|
||||||
|
; Offset 0: DWord - Number of bytes in block (not including header)
|
||||||
|
; Offset 4: Word - Segment of last block, 0 if first
|
||||||
|
; Offset 6: Word - Segment of next block, 0 if last
|
||||||
|
; Offset 8: Byte - 0 = Unused, 1 = Used
|
||||||
|
; Offset 9-0Fh: Not used
|
||||||
|
; Offset 10h Data
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Segment Object1 BYTE Public 'Data'
|
||||||
|
Extrn EMSErrorValue:Word
|
||||||
|
Extrn EMSErrorValue2:Word
|
||||||
|
Extrn EMSErrorValue3:Word
|
||||||
|
Extrn EMSErrorValue4:Word
|
||||||
|
Extrn EMSErrorValue5:Word
|
||||||
|
Extrn EMSErrorValue6:Word
|
||||||
|
Extrn EMSErrorValue7:Word
|
||||||
|
Extrn EMSErrorValue8:Word
|
||||||
|
EndS
|
||||||
|
|
||||||
|
Extrn M_Object1List:Far
|
||||||
|
|
||||||
|
Extrn O1_EMSWarningMessage
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Globals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Global E_AllocateEMS:Far
|
||||||
|
Global E_InitEMS:Far
|
||||||
|
Global E_UnInitEMS:Far
|
||||||
|
Global E_GetFreeEMS:Far
|
||||||
|
Global E_ReleaseEMS:Far
|
||||||
|
Global E_MapEMSMemory:Far, E_MapAvailableEMSMemory:Far
|
||||||
|
Global E_GetEMSPageFrame:Far
|
||||||
|
Global E_EMSAvailable:Far
|
||||||
|
Global E_SaveEMSPageFrame:Far
|
||||||
|
Global E_RestoreEMSPageFrame:Far
|
||||||
|
Global E_AllocateBlockEMS:Far, E_ReleaseBlockEMS:Far
|
||||||
|
Global E_MapAlignedBlockEMS:Far
|
||||||
|
Global E_GetEMSVersion:Far
|
||||||
|
Global E_GetInternalEMSHandle:Far
|
||||||
|
|
||||||
|
IF EMSDEBUG
|
||||||
|
|
||||||
|
Global E_DumpEMSMemory:Far
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Segment EMS WORD Public 'Code' USE16
|
||||||
|
Assume CS:EMS, DS:Nothing
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
CREATENEWLOGFILE EQU 0
|
||||||
|
include debug.inc
|
||||||
|
|
||||||
|
EMSDetectString DB "EMMXXXX0" ; Identification string
|
||||||
|
EMSHandlesRemaining DW 0
|
||||||
|
EMSAvailable DW 0 ; Assume that it's not avail.
|
||||||
|
EMSPageFrame DW 0
|
||||||
|
EMSHandle DW 0
|
||||||
|
EMSVersion DB 0
|
||||||
|
DB 0
|
||||||
|
|
||||||
|
IF EMSDEBUG
|
||||||
|
|
||||||
|
EMSDumpName DB "EMSDump", 0
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
EMSCorrespondenceList Label Word
|
||||||
|
Page0 DB 0, 0
|
||||||
|
DW 0
|
||||||
|
Page1 DB 0, 0
|
||||||
|
DW 1
|
||||||
|
Page2 DB 0, 0
|
||||||
|
DW 2
|
||||||
|
Page3 DB 0, 0
|
||||||
|
DW 3
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Proc E_InitEMS Far
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Trace " - Determining EMS presence"
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov DS, AX
|
||||||
|
|
||||||
|
Mov AX, [DS:019Eh] ; Get interrupt vector for Int 67h
|
||||||
|
And AX, AX ; Is Segment = 0?
|
||||||
|
JZ E_InitEMS1
|
||||||
|
|
||||||
|
Mov ES, AX
|
||||||
|
Mov DI, 0Ah ; Offset into driver of identification string
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:EMS
|
||||||
|
|
||||||
|
Mov SI, Offset EMSDetectString
|
||||||
|
|
||||||
|
Mov CX, 8/2
|
||||||
|
|
||||||
|
RepE CmpsW
|
||||||
|
JNE E_InitEMS1
|
||||||
|
; EMM driver is present
|
||||||
|
|
||||||
|
Mov AH, 40h ; Get manager status
|
||||||
|
Int 67h ; Returns AH=0 -> no error
|
||||||
|
And AH, AH
|
||||||
|
JNZ E_InitEMS1
|
||||||
|
|
||||||
|
Trace " - Determining EMS Page Frame"
|
||||||
|
|
||||||
|
Mov AH, 41h ; Get page frame segment
|
||||||
|
Int 67h ; AH if successful, with BX=segment
|
||||||
|
And AH, AH
|
||||||
|
JNZ E_InitEMS1
|
||||||
|
|
||||||
|
Mov EMSPageFrame, BX
|
||||||
|
|
||||||
|
Trace " - Determining EMS Version"
|
||||||
|
|
||||||
|
Mov AH, 46h ; Get EMS version
|
||||||
|
Int 67h
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_InitEMS1
|
||||||
|
|
||||||
|
Mov EMSVersion, AL
|
||||||
|
|
||||||
|
Trace " - Allocating EMS block"
|
||||||
|
|
||||||
|
Mov AH, 43h
|
||||||
|
Mov BX, 8
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_InitEMS1
|
||||||
|
|
||||||
|
Mov EMSHandle, DX
|
||||||
|
|
||||||
|
Mov AX, 4400h
|
||||||
|
Xor BX, BX
|
||||||
|
Int 67h ; Map first page
|
||||||
|
|
||||||
|
Mov ES, EMSPageFrame
|
||||||
|
Xor DI, DI
|
||||||
|
Mov EAX, 8*16*1024-16
|
||||||
|
StosD ; Amount of memory free
|
||||||
|
Xor EAX, EAX ; No previous block, no next block
|
||||||
|
StosD
|
||||||
|
Xor AX, AX ; Unused block
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov EMSAvailable, 1
|
||||||
|
|
||||||
|
; OK.. now to get number of EMS
|
||||||
|
; handles available..
|
||||||
|
|
||||||
|
Trace " - Determining number of free EMS handles"
|
||||||
|
|
||||||
|
Cmp EMSVersion, 40h
|
||||||
|
JB E_InitEMSBelow4
|
||||||
|
|
||||||
|
Mov AX, 5402h
|
||||||
|
Int 67h ; BX = total number of pages.
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_InitEMSBelow4
|
||||||
|
|
||||||
|
Mov DX, BX
|
||||||
|
|
||||||
|
Mov AH, 4Bh
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_InitEMSBelow4
|
||||||
|
|
||||||
|
Sub DX, BX
|
||||||
|
Mov EMSHandlesRemaining, DX
|
||||||
|
|
||||||
|
Jmp E_InitEMS1
|
||||||
|
|
||||||
|
E_InitEMSBelow4:
|
||||||
|
|
||||||
|
Mov CX, 256 ; Allocate 256 MAX
|
||||||
|
|
||||||
|
E_InitEMS2:
|
||||||
|
Mov AH, 43h
|
||||||
|
Mov BX, 1
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_InitEMS3
|
||||||
|
|
||||||
|
Inc EMSHandlesRemaining
|
||||||
|
Push DX
|
||||||
|
Loop E_InitEMS2
|
||||||
|
|
||||||
|
E_InitEMS3:
|
||||||
|
Mov CX, EMSHandlesRemaining ; Now to dealloc them
|
||||||
|
|
||||||
|
Test CX, CX
|
||||||
|
E_InitEMS4:
|
||||||
|
JZ E_InitEMS1
|
||||||
|
|
||||||
|
Mov AH, 45h
|
||||||
|
Pop DX
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
Dec CX
|
||||||
|
Jmp E_InitEMS4
|
||||||
|
|
||||||
|
E_InitEMS1:
|
||||||
|
Pop ES
|
||||||
|
Pop DS
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_InitEMS
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_GetFreeEMS Far ; Returns kb free..
|
||||||
|
|
||||||
|
Push BX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Cmp EMSAvailable, 0
|
||||||
|
JE E_GetFreeEMS2 ; No EMM driver?
|
||||||
|
|
||||||
|
Mov AH, 42h ; Get page counts
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
And AH, AH ; AH=0 -> no error
|
||||||
|
JNZ E_GetFreeEMS2 ; BX = free pages
|
||||||
|
|
||||||
|
Mov AX, BX
|
||||||
|
ShL AX, 4
|
||||||
|
|
||||||
|
Jmp E_GetFreeEMS1
|
||||||
|
|
||||||
|
E_GetFreeEMS2:
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
E_GetFreeEMS1:
|
||||||
|
Pop DX
|
||||||
|
Pop BX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_GetFreeEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_ReleaseEMS Far ; AX = handle.
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov DX, AX
|
||||||
|
Mov AH, 45h ; Deallocate memory.
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
And AH, AH ; AH = 0 -> no error
|
||||||
|
JZ E_ReleaseEMS1
|
||||||
|
|
||||||
|
Call EMSWarning
|
||||||
|
|
||||||
|
E_ReleaseEMS1:
|
||||||
|
Inc CS:EMSHandlesRemaining
|
||||||
|
|
||||||
|
Pop DX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_ReleaseEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc EMSWarning
|
||||||
|
|
||||||
|
PushAD
|
||||||
|
Push DS
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Mov BX, Object1
|
||||||
|
Mov DS, BX
|
||||||
|
Assume DS:Object1
|
||||||
|
|
||||||
|
Mov Byte Ptr EMSErrorValue, AH
|
||||||
|
Mov EMSErrorValue2, CX
|
||||||
|
Mov EMSErrorValue3, DX
|
||||||
|
|
||||||
|
Mov AX, Word Ptr CS:EMSVersion
|
||||||
|
Mov EMSErrorValue8, AX
|
||||||
|
|
||||||
|
Mov AL, CS:Page0
|
||||||
|
Mov Byte Ptr EMSErrorValue4, AL
|
||||||
|
|
||||||
|
Mov AL, CS:Page1
|
||||||
|
Mov Byte Ptr EMSErrorValue5, AL
|
||||||
|
|
||||||
|
Mov AL, CS:Page2
|
||||||
|
Mov Byte Ptr EMSErrorValue6, AL
|
||||||
|
|
||||||
|
Mov AL, CS:Page3
|
||||||
|
Mov Byte Ptr EMSErrorValue7, AL
|
||||||
|
|
||||||
|
Mov DI, Offset O1_EMSWarningMessage
|
||||||
|
Mov CX, 2
|
||||||
|
Call M_Object1List
|
||||||
|
|
||||||
|
Pop ES
|
||||||
|
Pop DS
|
||||||
|
PopAD
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP EMSWarning
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_MapAvailableEMSMemory Far
|
||||||
|
; AX = handle.
|
||||||
|
|
||||||
|
Push AX BX DX
|
||||||
|
|
||||||
|
Mov DX, AX
|
||||||
|
|
||||||
|
Xor AL, AL
|
||||||
|
Xor BX, BX
|
||||||
|
|
||||||
|
E_MapAvailableEMSMemory1:
|
||||||
|
Mov AH, 44h
|
||||||
|
Int 67h
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_MapAvailableEMSMemory2
|
||||||
|
|
||||||
|
Inc AX
|
||||||
|
Inc BX
|
||||||
|
|
||||||
|
Cmp AL, 3
|
||||||
|
JBE E_MapAvailableEMSMemory1
|
||||||
|
|
||||||
|
E_MapAvailableEMSMemory2:
|
||||||
|
Pop DX BX AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_MapAvailableEMSMemory
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_MapEMSMemory Far ; CL = total pages in handle
|
||||||
|
; CH = starting (base) page.
|
||||||
|
; DX = handle
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push BX
|
||||||
|
Push CX
|
||||||
|
|
||||||
|
Sub CL, CH
|
||||||
|
JBE E_MapEMSMemory002
|
||||||
|
|
||||||
|
Cmp CL, 4
|
||||||
|
JB E_MapEMSMemory003
|
||||||
|
|
||||||
|
Mov CL, 4
|
||||||
|
|
||||||
|
E_MapEMSMemory003:
|
||||||
|
|
||||||
|
IF EMSUSE41
|
||||||
|
Cmp CS:EMSVersion, 40h
|
||||||
|
JAE E_MapEMSMemoryV4_1
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
Xor BX, BX
|
||||||
|
|
||||||
|
E_MapEMSMemory001:
|
||||||
|
Mov AL, CL
|
||||||
|
Dec AX
|
||||||
|
Mov BL, AL
|
||||||
|
Add BL, CH
|
||||||
|
Mov AH, 44h
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
And AH, AH
|
||||||
|
JNZ E_MapEMSMemory004
|
||||||
|
|
||||||
|
Dec CL
|
||||||
|
JNZ E_MapEMSMemory001
|
||||||
|
Jmp E_MapEMSMemory002
|
||||||
|
|
||||||
|
IF EMSUSE41
|
||||||
|
|
||||||
|
E_MapEMSMemoryV4_1:
|
||||||
|
Push DS
|
||||||
|
Push SI
|
||||||
|
PushF
|
||||||
|
|
||||||
|
CLI
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:EMS
|
||||||
|
|
||||||
|
Mov Page0, CH
|
||||||
|
Inc CH
|
||||||
|
Mov Page1, CH
|
||||||
|
Inc CH
|
||||||
|
Mov Page2, CH
|
||||||
|
Inc CH
|
||||||
|
Mov Page3, CH
|
||||||
|
|
||||||
|
Mov AX, 5000h
|
||||||
|
Xor CH, CH
|
||||||
|
Mov SI, Offset EMSCorrespondenceList
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
PopF
|
||||||
|
Pop SI
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
Test AH, AH
|
||||||
|
JZ E_MapEMSMemory002
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
E_MapEMSMemory004:
|
||||||
|
; Call EMSWarning
|
||||||
|
|
||||||
|
E_MapEMSMemory002:
|
||||||
|
Pop CX
|
||||||
|
Pop BX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
E_MapEMSMemoryExit:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_MapEMSMemory
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_UnInitEMS Far
|
||||||
|
|
||||||
|
Cmp EMSAvailable, 0
|
||||||
|
JE E_UnInitEMS1
|
||||||
|
|
||||||
|
Mov AX, EMSHandle
|
||||||
|
Call E_ReleaseEMS
|
||||||
|
|
||||||
|
E_UnInitEMS1:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_UnInitEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_GetEMSPageFrame Far
|
||||||
|
|
||||||
|
Mov AX, CS:EMSPageFrame
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_GetEMSPageFrame
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_MapAlignedBlockEMS Far ; Given AX, Return DS:SI
|
||||||
|
|
||||||
|
Push CX DX
|
||||||
|
|
||||||
|
Mov SI, AX
|
||||||
|
Mov CX, AX
|
||||||
|
ShL SI, 4
|
||||||
|
Mov CL, 8
|
||||||
|
ShR CH, 2
|
||||||
|
And SI, 03FFFh
|
||||||
|
|
||||||
|
Mov DX, CS:EMSHandle
|
||||||
|
Call E_MapEMSMemory
|
||||||
|
|
||||||
|
Mov DS, CS:EMSPageFrame
|
||||||
|
|
||||||
|
Pop DX CX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_MapAlignedBlockEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_AllocateBlockEMS Far ; EAX = number of bytes
|
||||||
|
; Destroys EMS page frame
|
||||||
|
; Returns AX = segment address
|
||||||
|
; Carry set if fail, clear if
|
||||||
|
; successful
|
||||||
|
|
||||||
|
ClI
|
||||||
|
Push EBX ECX EDX ESI EDI DS ES
|
||||||
|
|
||||||
|
Cmp CS:EMSAvailable, 0
|
||||||
|
JE AllocateBlockQuitError
|
||||||
|
|
||||||
|
Mov ESI, EAX
|
||||||
|
Add ESI, 0Fh
|
||||||
|
And ESI, Not 0Fh
|
||||||
|
|
||||||
|
Mov DS, CS:EMSPageFrame
|
||||||
|
Xor EDI, EDI ; EDI = current offset
|
||||||
|
|
||||||
|
Mov CX, 0008h ; Starting page = 0, Max page = 8
|
||||||
|
|
||||||
|
AllocateBlockEMS2:
|
||||||
|
Mov DX, CS:EMSHandle
|
||||||
|
Call E_MapEMSMemory
|
||||||
|
|
||||||
|
AllocateBlockEMS1:
|
||||||
|
Cmp Byte Ptr [DI+8], 0 ; Used?
|
||||||
|
JNE AllocateBlockEMSNext
|
||||||
|
|
||||||
|
Cmp ESI, [DI]
|
||||||
|
JA AllocateBlockEMSNext
|
||||||
|
|
||||||
|
Mov AX, DI
|
||||||
|
And AX, 3FFFh
|
||||||
|
Add AX, SI
|
||||||
|
JC AllocateBlockQuitError ; Can't fit it in!
|
||||||
|
|
||||||
|
; OK. this block will do
|
||||||
|
Mov Byte Ptr [DI+8], 1 ; This block used
|
||||||
|
|
||||||
|
Mov EBX, [DI] ; Size of block
|
||||||
|
Mov [DI], ESI ; New size of this block
|
||||||
|
|
||||||
|
Mov EAX, [DI+4] ; To get next in HEAX
|
||||||
|
Mov ECX, EDI ; ECX = Current offset
|
||||||
|
ShR ECX, 4 ; ECX = Segment reference
|
||||||
|
Mov AX, CX ; AX = segment, HEAX = next seg
|
||||||
|
|
||||||
|
Sub EBX, ESI ; Bytes in next block
|
||||||
|
JZ AllocateBlockPerfectEnd
|
||||||
|
Sub EBX, 16
|
||||||
|
|
||||||
|
LEA ESI, [ESI+EDI+16] ; ESI = position of split block
|
||||||
|
Push ESI
|
||||||
|
ShR ESI, 4 ; SI = segment of split block
|
||||||
|
Mov [DI+6], SI ; Store pointer to next block
|
||||||
|
Pop EDI ; EDI = position of split block
|
||||||
|
|
||||||
|
Mov ECX, EDI ; ECX = position of split block
|
||||||
|
ShR ECX, 6
|
||||||
|
And CH, Not 3
|
||||||
|
Mov CL, 8
|
||||||
|
Call E_MapEMSMemory
|
||||||
|
|
||||||
|
Mov [DI], EBX ; bytes in block
|
||||||
|
Mov [DI+4], EAX ; Last block & Next block
|
||||||
|
Mov Byte Ptr [DI+8], 0 ; Unused block
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Mov AX, [DI+6]
|
||||||
|
|
||||||
|
Test AX, AX
|
||||||
|
JZ NoNextBlockSplit
|
||||||
|
|
||||||
|
Call E_MapAlignedBlockEMS ; DS:SI Pointing to next
|
||||||
|
ShR EDI, 4
|
||||||
|
Mov [SI+4], DI
|
||||||
|
|
||||||
|
NoNextBlockSplit:
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
ClC
|
||||||
|
Jmp AllocateBlockQuit
|
||||||
|
|
||||||
|
AllocateBlockPerfectEnd:
|
||||||
|
; Mov Word Ptr [DI+6], 0 ; Last block.
|
||||||
|
ClC
|
||||||
|
Jmp AllocateBlockQuit
|
||||||
|
|
||||||
|
AllocateBlockEMSNext:
|
||||||
|
Mov CX, [DI+6] ; Next segment
|
||||||
|
And ECX, 0FFFFh
|
||||||
|
JZ AllocateBlockQuitError
|
||||||
|
|
||||||
|
; Check EDI and ECX for the same frame.. if the same, then skip updating (E)DI
|
||||||
|
; and only update DI
|
||||||
|
|
||||||
|
ShLD EAX, EDI, 16 ; AL = 64k frame
|
||||||
|
Mov EDI, ECX
|
||||||
|
ShR CH, 4
|
||||||
|
ShL EDI, 4
|
||||||
|
|
||||||
|
Cmp AL, CH
|
||||||
|
JE AllocateBlockEMS1
|
||||||
|
|
||||||
|
ShL CH, 2
|
||||||
|
Mov CL, 8
|
||||||
|
Jmp AllocateBlockEMS2
|
||||||
|
|
||||||
|
AllocateBlockQuitError:
|
||||||
|
StC
|
||||||
|
|
||||||
|
AllocateBlockQuit:
|
||||||
|
Pop ES DS EDI ESI EDX ECX EBX
|
||||||
|
StI
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_AllocateBlockEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_ReleaseBlockEMS Far ; Given AX = 'segment'.
|
||||||
|
|
||||||
|
ClI
|
||||||
|
Push EAX EBX DS SI
|
||||||
|
|
||||||
|
Mov BX, AX ; BX = current segment
|
||||||
|
Call E_MapAlignedBlockEMS
|
||||||
|
; DS:SI points to structure.
|
||||||
|
|
||||||
|
Mov Byte Ptr [DS:SI+8], 0 ; This block unused.
|
||||||
|
|
||||||
|
; Release later block first, if possible
|
||||||
|
|
||||||
|
Mov AX, [DS:SI+6]
|
||||||
|
Test AX, AX
|
||||||
|
JZ E_ReleaseBlockEMSNoneAfter ; Nope, this is the
|
||||||
|
; last block.
|
||||||
|
Call E_MapAlignedBlockEMS ; OK, DS:0 points to next block
|
||||||
|
Mov EAX, [DS:SI+4] ; HEAX = next block, AX = last block
|
||||||
|
Mov EBX, [DS:SI] ; Free memory
|
||||||
|
Cmp Byte Ptr [DS:SI+8], 0 ; Used?
|
||||||
|
JNE E_ReleaseBlockAfterEnd
|
||||||
|
|
||||||
|
Call E_MapAlignedBlockEMS
|
||||||
|
Add EBX, 16
|
||||||
|
Add [DS:SI], EBX
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Mov AX, [DS:SI+4]
|
||||||
|
Mov [DS:SI+4], EAX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Jmp E_ReleaseBlockEMSBefore
|
||||||
|
|
||||||
|
E_ReleaseBlockAfterEnd:
|
||||||
|
Call E_MapAlignedBlockEMS
|
||||||
|
Jmp E_ReleaseBlockEMSBefore
|
||||||
|
|
||||||
|
E_ReleaseBlockEMSNoneAfter:
|
||||||
|
Mov AX, BX
|
||||||
|
|
||||||
|
E_ReleaseBlockEMSBefore:
|
||||||
|
Test AX, AX
|
||||||
|
JZ E_ReleaseBlockFinished
|
||||||
|
|
||||||
|
Mov EAX, [DS:SI+4]
|
||||||
|
Mov EBX, [DS:SI]
|
||||||
|
Call E_MapAlignedBlockEMS
|
||||||
|
|
||||||
|
Cmp Byte Ptr [DS:SI+8], 0
|
||||||
|
JNE E_ReleaseBlockPreviousFailed
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Mov AX, [DS:SI+4] ; Last field
|
||||||
|
Mov [DS:SI+4], EAX ; Next field written
|
||||||
|
Add EBX, 16
|
||||||
|
Add [DS:SI], EBX
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
Jmp E_ReleaseBlockFinished
|
||||||
|
|
||||||
|
E_ReleaseBlockPreviousFailed:
|
||||||
|
Mov AX, [DS:SI+6]
|
||||||
|
|
||||||
|
E_ReleaseBlockFinished:
|
||||||
|
Mov BX, AX
|
||||||
|
Call E_MapAlignedBlockEMS ; DS:SI points to 'base' block
|
||||||
|
Mov AX, [SI+6] ; Next
|
||||||
|
|
||||||
|
Test AX, AX
|
||||||
|
JZ E_ReleaseBlockCleanup
|
||||||
|
|
||||||
|
Call E_MapAlignedblockEMS
|
||||||
|
Mov [SI+4], BX
|
||||||
|
|
||||||
|
E_ReleaseBlockCleanup:
|
||||||
|
|
||||||
|
Pop SI DS EBX EAX
|
||||||
|
StI
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_ReleaseBlockEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_AllocateEMS Far ; EAX = number of bytes
|
||||||
|
; Returns AX with handle
|
||||||
|
; 0 if no handle allocated
|
||||||
|
; given carry = essential
|
||||||
|
; no carry = spare EMS
|
||||||
|
|
||||||
|
Push EBX
|
||||||
|
Push ECX
|
||||||
|
Push EDX
|
||||||
|
|
||||||
|
Mov DX, CS:EMSHandlesRemaining
|
||||||
|
JC E_AllocateEMS3
|
||||||
|
|
||||||
|
Cmp DX, 10
|
||||||
|
JB E_AllocateEMS2
|
||||||
|
|
||||||
|
E_AllocateEMS3:
|
||||||
|
Test DX, DX
|
||||||
|
JZ E_AllocateEMS1
|
||||||
|
|
||||||
|
Cmp CS:EMSAvailable, 0
|
||||||
|
JE E_AllocateEMS2
|
||||||
|
|
||||||
|
Mov EBX, EAX
|
||||||
|
Add EBX, 16*1024-1
|
||||||
|
SHR EBX, 14
|
||||||
|
|
||||||
|
Mov AH, 43h
|
||||||
|
Int 67h
|
||||||
|
Test AH, AH
|
||||||
|
JNZ E_AllocateEMS2
|
||||||
|
|
||||||
|
Dec CS:EMSHandlesRemaining
|
||||||
|
Jmp E_AllocateEMS1
|
||||||
|
|
||||||
|
E_AllocateEMS2:
|
||||||
|
Xor DX, DX
|
||||||
|
|
||||||
|
E_AllocateEMS1:
|
||||||
|
Mov AX, DX
|
||||||
|
|
||||||
|
Pop EDX
|
||||||
|
Pop ECX
|
||||||
|
Pop EBX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_AllocateEMS
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_EMSAvailable Far ; Returns Zero flag set if no EMS
|
||||||
|
|
||||||
|
Cmp CS:EMSAvailable, 0
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_EMSAvailable
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Comment ~
|
||||||
|
|
||||||
|
Proc E_SavePageFrame Far ; Given DX = Handle
|
||||||
|
Public E_SavePageFrame
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov AH, 47h
|
||||||
|
Int 67h
|
||||||
|
Test AH, AH
|
||||||
|
JZ E_SavePageFrame1
|
||||||
|
|
||||||
|
Call EMSWarning
|
||||||
|
|
||||||
|
E_SavePageFrame1:
|
||||||
|
Pop DX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_SavePageFrame
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_RestorePageFrame Far ; Given DX = Handle
|
||||||
|
Public E_RestorePageFrame
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov AH, 48h
|
||||||
|
Int 67h
|
||||||
|
Test AH, AH
|
||||||
|
JZ E_RestorePageFrame1
|
||||||
|
|
||||||
|
Call EMSWarning
|
||||||
|
|
||||||
|
E_RestorePageFrame1:
|
||||||
|
Pop DX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_RestorePageFrame
|
||||||
|
|
||||||
|
~
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_SaveEMSPageFrame Far
|
||||||
|
|
||||||
|
Cmp CS:EMSAvailable, 0
|
||||||
|
JE E_SaveEMSPageFrame1
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov DX, CS:EMSHandle
|
||||||
|
Mov AH, 47h
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
; Cmp AH, 1
|
||||||
|
|
||||||
|
; Test AH, AH
|
||||||
|
; JZ E_SaveEMSPageFrame2
|
||||||
|
|
||||||
|
; Call EMSWarning
|
||||||
|
|
||||||
|
And AH, AH
|
||||||
|
JZ E_SaveEMSPageFrame2
|
||||||
|
|
||||||
|
StC
|
||||||
|
|
||||||
|
E_SaveEMSPageFrame2:
|
||||||
|
Pop DX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
E_SaveEMSPageFrame1:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_SaveEMSPageFrame
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_RestoreEMSPageFrame Far
|
||||||
|
|
||||||
|
Cmp CS:EMSAvailable, 0
|
||||||
|
JE E_RestoreEMSPageFrame1
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov DX, EMSHandle
|
||||||
|
Mov AH, 48h
|
||||||
|
Int 67h
|
||||||
|
|
||||||
|
Pop DX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
E_RestoreEMSPageFrame1:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_RestoreEMSPageFrame
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_GetEMSVersion Far
|
||||||
|
|
||||||
|
Mov AL, CS:EMSVersion
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_GetEMSVersion
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc E_GetInternalEMSHandle Far
|
||||||
|
|
||||||
|
Mov AX, CS:EMSHandle
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_GetInternalEMSHandle
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
IF EMSDEBUG
|
||||||
|
|
||||||
|
Proc E_DumpEMSMemory Far
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:EMS
|
||||||
|
|
||||||
|
Mov AH, 3Ch
|
||||||
|
Xor CX, CX
|
||||||
|
Mov DX, Offset EMSDumpName
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov BX, AX
|
||||||
|
|
||||||
|
Mov CX, 8
|
||||||
|
Mov DX, EMSHandle
|
||||||
|
Call E_MapEMSMemory
|
||||||
|
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov CX, 32768
|
||||||
|
Mov DS, EMSPageFrame
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov DX, 32768
|
||||||
|
Mov CX, DX
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov CX, 408h
|
||||||
|
Mov DX, CS:EMSHandle
|
||||||
|
Call E_MapEMSMemory
|
||||||
|
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov CX, 32768
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov DX, 32768
|
||||||
|
Mov CX, DX
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Eh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP E_DumpEMSMemory
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
End
|
|
@ -0,0 +1,168 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Critical Error handler. ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Globals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Global Error_InitHandler:Far
|
||||||
|
Global Error_UnInitHandler:Far
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Segment Error BYTE Public 'Code' USE16
|
||||||
|
Assume CS:Error
|
||||||
|
|
||||||
|
CREATENEWLOGFILE EQU 0
|
||||||
|
include debug.inc
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
OldHandlerOffset DW ?
|
||||||
|
OldHandlerSegment DW ?
|
||||||
|
|
||||||
|
ErrorMsgs Label Word
|
||||||
|
DW Offset Error0
|
||||||
|
DW Offset Error1
|
||||||
|
DW Offset Error2
|
||||||
|
DW Offset Error3
|
||||||
|
DW Offset Error4
|
||||||
|
DW Offset Error5
|
||||||
|
DW Offset Error6
|
||||||
|
DW Offset Error7
|
||||||
|
DW Offset Error8
|
||||||
|
DW Offset Error9
|
||||||
|
DW Offset ErrorA
|
||||||
|
DW Offset ErrorB
|
||||||
|
DW Offset UnknownError
|
||||||
|
DW Offset UnknownError
|
||||||
|
DW Offset UnknownError
|
||||||
|
DW Offset ErrorF
|
||||||
|
|
||||||
|
Error0 DB "Write protect error", 0
|
||||||
|
Error1 DB "Unknown unit error", 0
|
||||||
|
Error2 DB "Drive not ready error", 0
|
||||||
|
Error3 DB "Unknown command error", 0
|
||||||
|
Error4 DB "Data integrity error", 0
|
||||||
|
Error5 DB "Bad request structure length error", 0
|
||||||
|
Error6 DB "Seek error", 0
|
||||||
|
Error7 DB "Unknown media type error", 0
|
||||||
|
Error8 DB "Sector not found error", 0
|
||||||
|
Error9 DB "Printer error", 0
|
||||||
|
ErrorA DB "Read fault error", 0
|
||||||
|
ErrorB DB "General failure error", 0
|
||||||
|
ErrorF DB "Invalid disk change error", 0
|
||||||
|
UnknownError DB "Unknown critical error", 0
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Proc ErrorHandler Far
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Error
|
||||||
|
|
||||||
|
Mov BX, DI
|
||||||
|
And BX, 0FFh
|
||||||
|
Cmp BX, 0Fh
|
||||||
|
JBE ErrorHandler1
|
||||||
|
|
||||||
|
Mov SI, Offset UnknownError
|
||||||
|
Jmp ErrorHandler2
|
||||||
|
|
||||||
|
ErrorHandler1:
|
||||||
|
Add BX, BX
|
||||||
|
Mov SI, [ErrorMsgs+BX]
|
||||||
|
|
||||||
|
ErrorHandler2:
|
||||||
|
Mov AH, 20h
|
||||||
|
Mov DI, 0B800h
|
||||||
|
Mov ES, DI
|
||||||
|
Mov DI, (2+49*80)*2
|
||||||
|
|
||||||
|
ErrorHandler3:
|
||||||
|
LodsB
|
||||||
|
And AL, AL
|
||||||
|
JZ ErrorHandler4
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Jmp ErrorHandler3
|
||||||
|
|
||||||
|
ErrorHandler4:
|
||||||
|
Pop ES
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
IRet
|
||||||
|
|
||||||
|
EndP ErrorHandler
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Error_InitHandler Far
|
||||||
|
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Trace " - Installing error handler"
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov ES, AX
|
||||||
|
|
||||||
|
Mov AX, CS
|
||||||
|
ShL EAX, 16
|
||||||
|
Mov AX, Offset ErrorHandler
|
||||||
|
|
||||||
|
XChg [ES:90h], EAX
|
||||||
|
Mov DWord Ptr CS:OldHandlerOffset, EAX
|
||||||
|
|
||||||
|
Pop ES
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Error_InitHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Error_UnInitHandler Far
|
||||||
|
|
||||||
|
Push ES
|
||||||
|
Xor AX, AX
|
||||||
|
Mov ES, AX
|
||||||
|
|
||||||
|
Mov EAX, DWord Ptr CS:OldHandlerOffset
|
||||||
|
Mov [ES:90h], EAX
|
||||||
|
|
||||||
|
Pop ES
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Error_UnInitHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
End
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,612 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Fast Fourier Transform Module ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386P
|
||||||
|
.387
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
IF SPECTRUMANALYSER
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Segment Object1 BYTE Public 'Data'
|
||||||
|
EndS
|
||||||
|
Segment DiskData PARA Public 'Data'
|
||||||
|
EndS
|
||||||
|
|
||||||
|
Extrn O1_FourierDisplay:Far
|
||||||
|
|
||||||
|
Extrn M_Object1List:Far
|
||||||
|
|
||||||
|
Extrn Music_GetWaveForm:Far
|
||||||
|
|
||||||
|
Extrn S_InitScreen:Far
|
||||||
|
Extrn S_SetDirectMode:Far
|
||||||
|
|
||||||
|
Global MouseUpdateEnable:Far, MouseUpdateDisable:Far
|
||||||
|
Extrn VESA_Detect:Far
|
||||||
|
Extrn VESA_SetMode:Far
|
||||||
|
Extrn VESA_SetBlock:Far
|
||||||
|
Extrn InitMouse:Far, UnInitMouse:Far
|
||||||
|
Extrn S_DefineSmallNumbers:Far
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
|
||||||
|
Segment Infopage BYTE Public 'Code' USE16
|
||||||
|
Assume CS:Infopage, DS:Nothing, ES:Nothing
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Fourier_CreateTable Far ; Fills in ES:16384
|
||||||
|
Public Fourier_CreateTable
|
||||||
|
|
||||||
|
Mov DI, 20480
|
||||||
|
Xor CX, CX
|
||||||
|
|
||||||
|
Fourier_CreateTable1:
|
||||||
|
Mov DX, 11
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov BX, CX
|
||||||
|
|
||||||
|
Fourier_CreateTable2:
|
||||||
|
ShR BX, 1
|
||||||
|
AdC AX, AX
|
||||||
|
|
||||||
|
Dec DX
|
||||||
|
JNZ Fourier_CreateTable2
|
||||||
|
|
||||||
|
ShL AX, 3
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Inc CX
|
||||||
|
Cmp CX, 2048
|
||||||
|
JB Fourier_CreateTable1
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_CreateTable
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Const1_2048 DD 3C000000h
|
||||||
|
ConstHalf DD 3F000000h
|
||||||
|
Steps DW 0
|
||||||
|
CurrentOffset DW 0
|
||||||
|
|
||||||
|
Proc Fourier_Transform Far
|
||||||
|
Public Fourier_Transform
|
||||||
|
; Given DS:16384->DS:20480 = 2048 16-bit signed int samples
|
||||||
|
; Given DS:20480->24576 = relocation table
|
||||||
|
; Given DS:0->DS:16384 = working area
|
||||||
|
|
||||||
|
; Returns: DS:24576 -> 16-bit table of frequencies. (first 1024)
|
||||||
|
|
||||||
|
Push DiskData
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
Mov CX, 2048 ; Prepare 2048 samples
|
||||||
|
Mov SI, 16384
|
||||||
|
Xor EDX, EDX
|
||||||
|
|
||||||
|
Fourier_TransformRelocate1:
|
||||||
|
FILd Word Ptr [SI]
|
||||||
|
Mov DI, [SI+4096]
|
||||||
|
LodsW ; Add SI, 2
|
||||||
|
Mov [DI+4], EDX
|
||||||
|
FStP DWord Ptr [DI]
|
||||||
|
Dec CX
|
||||||
|
JNZ Fourier_TransformRelocate1
|
||||||
|
|
||||||
|
; Samples relocated - now for transform
|
||||||
|
Mov CX, 1
|
||||||
|
|
||||||
|
Fourier_Transform1:
|
||||||
|
Mov [DS:24576], CX ; Store count
|
||||||
|
|
||||||
|
FLdZ
|
||||||
|
FLd1 ; CurrentPhase.r, CurrentPhase.i
|
||||||
|
|
||||||
|
FLdPi
|
||||||
|
FChs
|
||||||
|
FIDiv Word Ptr [DS:24576] ; -Pi/Step
|
||||||
|
FSinCos ; deltaphase.r, deltaphase.i, currentphase.r, currentphase.i
|
||||||
|
|
||||||
|
Xor DX, DX
|
||||||
|
|
||||||
|
Fourier_Transform2:
|
||||||
|
Mov SI, DX ; SI = k
|
||||||
|
Mov DI, CX ; DI = k+i
|
||||||
|
Mov BX, CX ; BX = i*2
|
||||||
|
Add DI, DX
|
||||||
|
ShL SI, 3 ; SI = k*8
|
||||||
|
ShL DI, 3 ; DI = (k+i)*8
|
||||||
|
ShL BX, 4 ; BX = i*8*2
|
||||||
|
|
||||||
|
Fourier_Transform3:
|
||||||
|
FLd DWord Ptr [DI]
|
||||||
|
FMul ST, ST(3) ; cr*sr
|
||||||
|
FLd DWord Ptr [DI+4]
|
||||||
|
FMul ST, ST(4) ; cr*si, cr*sr, dr, di, cr, ci
|
||||||
|
FLd DWord Ptr [DI]
|
||||||
|
FMul ST, ST(6)
|
||||||
|
FLd DWord Ptr [DI+4]
|
||||||
|
FMul ST, ST(7) ; ci*si, ci*sr, cr*si, cr*sr, dr, di, cr, ci
|
||||||
|
FXCh
|
||||||
|
FAddP ST(2), ST
|
||||||
|
FSubP ST(2), ST ; tempi, tempr, dr, di, cr, ci
|
||||||
|
FLd DWord Ptr [SI+4] ; ri, tempi, tempr, dr, di, cr, ci
|
||||||
|
FAdd ST, ST(1)
|
||||||
|
FLd DWord Ptr [SI]
|
||||||
|
FAdd ST, ST(3) ; rr, ri, tempi, tempr, dr, di, cr, ci
|
||||||
|
FXCh ST(3) ; tempr, ri, tempi, rr, dr, di, cr, ci
|
||||||
|
FSubR DWord Ptr [SI] ; kr, ri, tempi, rr, dr, di, cr, ci
|
||||||
|
FXCh ST(2)
|
||||||
|
FSubR DWord Ptr [SI+4] ; ki, ri, kr, rr, dr, di, cr, ci
|
||||||
|
FXCh ST(3) ; rr, ri, kr, ki, dr, di, cr, ci
|
||||||
|
FStP DWord Ptr [SI]
|
||||||
|
FStP DWord Ptr [SI+4]
|
||||||
|
FStP DWord Ptr [DI]
|
||||||
|
FStP DWord Ptr [DI+4]
|
||||||
|
|
||||||
|
Add SI, BX
|
||||||
|
Add DI, BX
|
||||||
|
|
||||||
|
Cmp SI, 16384
|
||||||
|
JB Fourier_Transform3
|
||||||
|
|
||||||
|
; Left with deltaphase.r, deltaphase.i, currentphase.r, currentphase.i
|
||||||
|
FLd ST ; d.r, d.r, d.i, c.r, c.i
|
||||||
|
FMul ST, ST(3) ; d.r*c.r, d.r, d.i, c.r, c.i
|
||||||
|
FXCh ST(3) ; c.r, d.r, d.i, d.r*c.r, c.i
|
||||||
|
FMul ST, ST(2) ; c.r*d.i, d.r, d.i, d.r*c.r, c.i
|
||||||
|
FLd ST(2) ; d.i, c.r*d.i, d.r, d.i, d.r*c.r, c.i
|
||||||
|
FMul ST, ST(5) ; d.i*c.i, c.r*d.i, d.r, d.i, d.r*c.r, c.i
|
||||||
|
FSubP ST(4), ST ; c.r*d.i, d.r, d.i, newr, c.i
|
||||||
|
FXCh ST(4) ; c.i, d.r, d.i, newr, c.r*d.i
|
||||||
|
FMul ST, ST(1) ; c.i*d.r, d.r, d.i, newr, c.r*d.i
|
||||||
|
FAddP ST(4), ST ; d.r, d.i, newr, newi
|
||||||
|
|
||||||
|
Inc DX
|
||||||
|
Cmp DX, CX
|
||||||
|
JB Fourier_Transform2
|
||||||
|
|
||||||
|
FComPP
|
||||||
|
FComPP
|
||||||
|
|
||||||
|
ShL CX, 1
|
||||||
|
Cmp CX, 2048
|
||||||
|
JB Fourier_Transform1
|
||||||
|
|
||||||
|
; Cleanup code.
|
||||||
|
Mov CX, 1024
|
||||||
|
Xor SI, SI
|
||||||
|
Mov DI, 24576
|
||||||
|
|
||||||
|
FLd CS:Const1_2048
|
||||||
|
; FMul ST, ST ; Include if no sqrt
|
||||||
|
; FMul ST, ST
|
||||||
|
|
||||||
|
Fourier_CalculateMagnitudes1: ; Could be interleaved, but speed isn't
|
||||||
|
; *really* a problem.
|
||||||
|
FLd DWord Ptr [SI]
|
||||||
|
FMul ST, ST
|
||||||
|
FLd DWord Ptr [SI+4]
|
||||||
|
FMul ST, ST
|
||||||
|
FAdd
|
||||||
|
FSqrt
|
||||||
|
FMul ST, ST(1)
|
||||||
|
|
||||||
|
FStP DWord Ptr [DI]
|
||||||
|
|
||||||
|
Add SI, 8
|
||||||
|
Add DI, 4
|
||||||
|
|
||||||
|
Dec CX
|
||||||
|
JNZ Fourier_CalculateMagnitudes1
|
||||||
|
|
||||||
|
FStP ST
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_Transform
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
FourierPalette DB 0
|
||||||
|
|
||||||
|
Proc Fourier_ChangePalette Far
|
||||||
|
Public Fourier_ChangePalette
|
||||||
|
|
||||||
|
Xor [CS:FourierPalette], 1
|
||||||
|
Call Fourier_SetPalette
|
||||||
|
|
||||||
|
Mov AX, 1
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_ChangePalette
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Fourier_SetPalette
|
||||||
|
|
||||||
|
Mov DX, 3C8h
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Inc DX
|
||||||
|
|
||||||
|
Cmp [CS:FourierPalette], 0
|
||||||
|
JE Fourier_PaletteB
|
||||||
|
|
||||||
|
Mov CX, 64
|
||||||
|
|
||||||
|
Fourier_PaletteA1:
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, 64
|
||||||
|
Sub AL, CL
|
||||||
|
ShR AL, 1
|
||||||
|
Out DX, AL
|
||||||
|
Loop Fourier_PaletteA1
|
||||||
|
|
||||||
|
Mov CX, 64
|
||||||
|
|
||||||
|
Fourier_PaletteA2:
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov BL, 64
|
||||||
|
Sub BL, CL
|
||||||
|
ShR BL, 1
|
||||||
|
Mov AL, BL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, BL
|
||||||
|
Add AL, 32
|
||||||
|
Out DX, AL
|
||||||
|
Loop Fourier_PaletteA2
|
||||||
|
|
||||||
|
Mov CX, 128
|
||||||
|
|
||||||
|
Fourier_PaletteA3:
|
||||||
|
Mov AL, 128
|
||||||
|
Sub AL, CL
|
||||||
|
ShR AL, 1
|
||||||
|
Out DX, AL
|
||||||
|
ShR AL, 1
|
||||||
|
Add AL, 32
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, 63
|
||||||
|
Out DX, AL
|
||||||
|
Loop Fourier_PaletteA3
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
Fourier_PaletteB:
|
||||||
|
Mov CX, 32
|
||||||
|
Xor BX, BX
|
||||||
|
|
||||||
|
Fourier_PaletteB1:
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, BL
|
||||||
|
Out DX, AL
|
||||||
|
Add BX, 2
|
||||||
|
Loop Fourier_PaletteB1
|
||||||
|
|
||||||
|
Mov CX, 32
|
||||||
|
Xor BL, BL
|
||||||
|
|
||||||
|
Fourier_PaletteB2:
|
||||||
|
Mov AL, BL
|
||||||
|
Out DX, AL
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, 63
|
||||||
|
Out DX, AL
|
||||||
|
Add BX, 2
|
||||||
|
|
||||||
|
Loop Fourier_PaletteB2
|
||||||
|
|
||||||
|
Mov CX, 32
|
||||||
|
|
||||||
|
Fourier_PaletteB3:
|
||||||
|
Mov AL, 63
|
||||||
|
Out DX, AL
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, CL
|
||||||
|
Add AL, AL
|
||||||
|
Dec AL
|
||||||
|
Out DX, AL
|
||||||
|
Loop Fourier_PaletteB3
|
||||||
|
|
||||||
|
Mov CX, 32
|
||||||
|
Xor BX, BX
|
||||||
|
|
||||||
|
Fourier_PaletteB4:
|
||||||
|
Mov AL, 63
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, BL
|
||||||
|
Out DX, AL
|
||||||
|
Xor AL, AL
|
||||||
|
Out DX, AL
|
||||||
|
Add BX, 2
|
||||||
|
Loop Fourier_PaletteB4
|
||||||
|
|
||||||
|
Mov CX, 128
|
||||||
|
Xor BX, BX
|
||||||
|
|
||||||
|
Fourier_PaletteB5:
|
||||||
|
Mov AL, 63
|
||||||
|
Out DX, AL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, BL
|
||||||
|
ShR AL, 1
|
||||||
|
Out DX, AL
|
||||||
|
Inc BX
|
||||||
|
Loop Fourier_PaletteB5
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_SetPalette
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ScreenWidth DW 0
|
||||||
|
ScreenHeight DW 0
|
||||||
|
|
||||||
|
Proc Fourier_Start Far
|
||||||
|
Public Fourier_Start
|
||||||
|
|
||||||
|
Push DiskData
|
||||||
|
Pop ES
|
||||||
|
Xor DI, DI
|
||||||
|
Mov CX, 32768
|
||||||
|
Xor AX, AX
|
||||||
|
Rep StosW ; Clear data area first.
|
||||||
|
|
||||||
|
Call Fourier_CreateTable
|
||||||
|
|
||||||
|
Mov AL, 1 ; Prevent S_Update calls.
|
||||||
|
Call S_SetDirectMode
|
||||||
|
|
||||||
|
Call VESA_Detect
|
||||||
|
JC Fourier_End
|
||||||
|
|
||||||
|
Mov AX, 107h
|
||||||
|
|
||||||
|
Fourier_NextMode:
|
||||||
|
Call VESA_SetMode ; Returns CX = width, DX = height
|
||||||
|
JNC Fourier_ModeOK
|
||||||
|
|
||||||
|
Sub AL, 2
|
||||||
|
JC Fourier_End
|
||||||
|
Jmp Fourier_NextMode
|
||||||
|
|
||||||
|
Fourier_ModeOK:
|
||||||
|
Mov ScreenWidth, CX
|
||||||
|
Mov ScreenHeight, DX
|
||||||
|
|
||||||
|
Call Fourier_SetPalette
|
||||||
|
|
||||||
|
Mov CurrentOffset, 0
|
||||||
|
|
||||||
|
Call UnInitMouse
|
||||||
|
Mov DI, Offset O1_FourierDisplay
|
||||||
|
Xor CX, CX
|
||||||
|
Call M_Object1List
|
||||||
|
|
||||||
|
Fourier_End:
|
||||||
|
Call S_InitScreen
|
||||||
|
Call InitMouse
|
||||||
|
Call S_DefineSmallNumbers
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_Start
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Fourier_PreDrawScreen Far
|
||||||
|
Public Fourier_PreDrawScreen
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_PreDrawScreen
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ControlWord DW 003Fh
|
||||||
|
|
||||||
|
Proc Fourier_DrawScreen Far
|
||||||
|
Public Fourier_DrawScreen
|
||||||
|
|
||||||
|
FLdCW [CS:ControlWord]
|
||||||
|
|
||||||
|
Push DiskData
|
||||||
|
Pop ES
|
||||||
|
Mov DI, 16384
|
||||||
|
Call Music_GetWaveForm
|
||||||
|
JC Fourier_DrawScreen1
|
||||||
|
|
||||||
|
Push ES
|
||||||
|
Pop DS
|
||||||
|
Call Fourier_Transform ; Have table at DS:0
|
||||||
|
|
||||||
|
Mov CX, 1024
|
||||||
|
Mov SI, 24576
|
||||||
|
|
||||||
|
Fourier_ConvertToInteger:
|
||||||
|
FLd DWord Ptr [SI]
|
||||||
|
FIStP DWord Ptr [SI]
|
||||||
|
Mov EDX, [SI]
|
||||||
|
ShR EDX, 6
|
||||||
|
Cmp EDX, 255
|
||||||
|
JB Fourier_DrawScreen3
|
||||||
|
|
||||||
|
Mov DL, 255
|
||||||
|
|
||||||
|
Fourier_DrawScreen3:
|
||||||
|
Mov [SI], DL
|
||||||
|
Add SI, 4
|
||||||
|
Loop Fourier_ConvertToInteger
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Call VESA_SetBlock
|
||||||
|
|
||||||
|
Push 0A000h
|
||||||
|
Pop ES
|
||||||
|
Mov DI, CurrentOffset
|
||||||
|
Mov CX, ScreenHeight
|
||||||
|
Sub CX, 64
|
||||||
|
Mov BX, ScreenWidth
|
||||||
|
LEA SI, [24576+ECX*4]
|
||||||
|
|
||||||
|
Fourier_DrawScreen2:
|
||||||
|
Mov DL, [SI]
|
||||||
|
Mov [ES:DI], DL
|
||||||
|
|
||||||
|
Sub SI, 4
|
||||||
|
Add DI, BX
|
||||||
|
JNC Fourier_DrawScreen4
|
||||||
|
|
||||||
|
Inc AX
|
||||||
|
Call VESA_SetBlock
|
||||||
|
|
||||||
|
Fourier_DrawScreen4:
|
||||||
|
Dec CX
|
||||||
|
JNZ Fourier_DrawScreen2
|
||||||
|
|
||||||
|
Mov AX, CurrentOffset
|
||||||
|
Inc AX
|
||||||
|
Xor DX, DX
|
||||||
|
Div BX
|
||||||
|
Mov CurrentOffset, DX
|
||||||
|
|
||||||
|
; Now to draw volume bars.
|
||||||
|
|
||||||
|
Mov CX, 64
|
||||||
|
And EBX, 0FFFFh
|
||||||
|
|
||||||
|
Mov BP, BX
|
||||||
|
Xor EDI, EDI
|
||||||
|
Cmp BP, 1024
|
||||||
|
JB Fourier_DrawBars2
|
||||||
|
|
||||||
|
Mov DI, BX
|
||||||
|
Mov BP, 1024
|
||||||
|
Sub DI, BP
|
||||||
|
ShR DI, 1
|
||||||
|
|
||||||
|
Fourier_DrawBars2:
|
||||||
|
|
||||||
|
Fourier_DrawBars1:
|
||||||
|
Push BX
|
||||||
|
Push CX
|
||||||
|
Push EDI
|
||||||
|
|
||||||
|
Xor EAX, EAX
|
||||||
|
|
||||||
|
Mov AX, ScreenHeight
|
||||||
|
Sub AX, CX
|
||||||
|
Mul EBX ; EAX = offset.
|
||||||
|
Add EAX, EDI
|
||||||
|
|
||||||
|
Mov DI, AX
|
||||||
|
ShR EAX, 16
|
||||||
|
Call VESA_SetBlock
|
||||||
|
|
||||||
|
Mov DX, BP
|
||||||
|
Mov BL, CL
|
||||||
|
Dec BL
|
||||||
|
ShL BL, 2 ; BL = 0->256
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Mov SI, 24580
|
||||||
|
|
||||||
|
Fourier_DrawBars3:
|
||||||
|
Cmp BL, Byte Ptr [SI]
|
||||||
|
SBB AL, AL
|
||||||
|
|
||||||
|
Mov [ES:DI], AL
|
||||||
|
|
||||||
|
Add DI, 1
|
||||||
|
JNC Fourier_DrawBars4
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
Inc AX
|
||||||
|
Call VESA_SetBlock
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Fourier_DrawBars4:
|
||||||
|
Add SI, 4
|
||||||
|
Dec DX
|
||||||
|
JNZ Fourier_DrawBars3
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Pop EDI
|
||||||
|
Pop CX
|
||||||
|
Pop BX
|
||||||
|
Loop Fourier_DrawBars1
|
||||||
|
|
||||||
|
Fourier_DrawScreen1:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_DrawScreen
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Fourier_IdleList Far
|
||||||
|
Public Fourier_IdleList
|
||||||
|
|
||||||
|
Mov AX, 1
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_IdleList
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Fourier_PostFunction Far
|
||||||
|
Public Fourier_PostFunction
|
||||||
|
|
||||||
|
Cmp CX, 101h
|
||||||
|
JE Fourier_PostFunction2
|
||||||
|
|
||||||
|
Fourier_PostFunction1:
|
||||||
|
Xor AX, AX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
Fourier_PostFunction2:
|
||||||
|
Mov AX, 4
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Fourier_PostFunction
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
End
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,559 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Info Line Module - Playing info updates / other messages ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Segment Glbl BYTE Public 'Code'
|
||||||
|
Extrn CurrentMode:Byte
|
||||||
|
EndS
|
||||||
|
|
||||||
|
Extrn I_ShowSamplePlay:Far
|
||||||
|
Extrn I_ShowInstrumentPlay:Far
|
||||||
|
|
||||||
|
Extrn S_UpdateScreen:Far
|
||||||
|
Extrn S_DrawString:Far
|
||||||
|
Extrn S_SetDirectMode:Far
|
||||||
|
Extrn S_GetDestination:Far
|
||||||
|
|
||||||
|
Extrn Music_GetPlayMode:Far
|
||||||
|
Extrn Music_Poll:Far
|
||||||
|
Extrn Music_GetSlaveChannelInformationTable:Far
|
||||||
|
|
||||||
|
IF NETWORKENABLED
|
||||||
|
Extrn Network_Poll:Far
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
Extrn PE_ShowOrder:Far
|
||||||
|
Extrn PE_FillSpeedTempo:Far
|
||||||
|
Extrn PE_GetMaxOrder:Far
|
||||||
|
Extrn Glbl_TutorialHandler:Far
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Globals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Global UpdateInfoLine:Far
|
||||||
|
Global IdleUpdateInfoLine:Far
|
||||||
|
Global ClearInfoLine:Far
|
||||||
|
Global SetInfoLine:Far, SetInfoLine2:Far
|
||||||
|
Global StartClock:Far
|
||||||
|
Global GlobalStartTime:Far
|
||||||
|
Public ShowUsageTime
|
||||||
|
Public InitTimerHandler
|
||||||
|
Public UnInitTimerHandler
|
||||||
|
Public GetTimerCounter
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Segment InfoLine DWORD Public 'Code' USE16
|
||||||
|
Assume CS:InfoLine, DS:InfoLine
|
||||||
|
|
||||||
|
CREATENEWLOGFILE EQU 0
|
||||||
|
include debug.inc
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
SLAVECHANNELSIZE = 128
|
||||||
|
|
||||||
|
OldTimerHandler DD 0
|
||||||
|
TimerCounter DD 0
|
||||||
|
PlaybackTimer DD 0
|
||||||
|
|
||||||
|
InfoLineText DD 0
|
||||||
|
InfoLineDelay DW 0
|
||||||
|
InfoLineVariable DW 0
|
||||||
|
|
||||||
|
; Colouring for ZaStaR
|
||||||
|
; PatternPlayMsg DB "Playing, Pattern: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", Row: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FDh, "D", 0FFh, 13, " ", 0
|
||||||
|
; SongPlayMsg DB "Playing, Order: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FDh, "D, Pattern: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", Row: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FDh, "D", 0FFh, 6, " ", 0
|
||||||
|
|
||||||
|
NoSoundDriverMsg DB "Error: No sound driver loaded.", 0
|
||||||
|
PatternPlayMsg DB "Playing, Pattern: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", Row: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, " Channels", 0FFh, 10, " ", 0
|
||||||
|
SongPlayMsg DB "Playing, Order: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", Pattern: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", Row: ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, "/", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, ", ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, " Channels", 0FFh, 10, " ", 0
|
||||||
|
ChannelMsg DB "Playing, ", 0FEh, 23h, 0FDh, "D", 0FEh, 20h, " Channels", 0
|
||||||
|
EmptyMsg DB 0
|
||||||
|
TimeMsg DB " Time ", 0FDh, "D:"
|
||||||
|
Minutes DB "00:"
|
||||||
|
Seconds DB "00", 0
|
||||||
|
DisplayChannelMsg DB 0
|
||||||
|
ShowUsageTime DB 1
|
||||||
|
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Proc TimerInterruptHandler
|
||||||
|
|
||||||
|
Sub CS:InfoLineDelay, 1
|
||||||
|
AdC CS:InfoLineDelay, 0
|
||||||
|
|
||||||
|
Inc CS:TimerCounter
|
||||||
|
Jmp [CS:OldTimerHandler]
|
||||||
|
|
||||||
|
EndP TimerInterruptHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc InitTimerHandler Far
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Trace " - Installing new timer interrupt"
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov DS, AX
|
||||||
|
|
||||||
|
Mov AX, CS
|
||||||
|
ShL EAX, 16
|
||||||
|
Mov AX, Offset TimerInterruptHandler
|
||||||
|
|
||||||
|
ClI
|
||||||
|
XChg EAX, [DS:20h]
|
||||||
|
Mov [CS:OldTimerHandler], EAX
|
||||||
|
StI
|
||||||
|
|
||||||
|
Pop DS
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP InitTimerHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc UninitTimerHandler Far
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
Mov DS, AX
|
||||||
|
|
||||||
|
Mov EAX, [CS:OldTimerHandler]
|
||||||
|
ClI
|
||||||
|
Mov [DS:20h], EAX
|
||||||
|
StI
|
||||||
|
|
||||||
|
Pop DS
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP UninitTimerHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc FillToEOL
|
||||||
|
|
||||||
|
Push ES
|
||||||
|
Mov AX, ' ' + 2000h
|
||||||
|
Call S_GetDestination
|
||||||
|
|
||||||
|
UpdateInfoLineEOL:
|
||||||
|
Cmp DI, (61+9*80)*2
|
||||||
|
JAE UpdateInfoLineEOL2
|
||||||
|
|
||||||
|
StosW
|
||||||
|
Jmp UpdateInfoLineEOL
|
||||||
|
|
||||||
|
UpdateInfoLineEOL2:
|
||||||
|
Pop ES
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP FillToEOL
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc UpdateInfoLine Far
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Push SI
|
||||||
|
|
||||||
|
Push Glbl
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Glbl
|
||||||
|
|
||||||
|
Cmp CurrentMode, 200
|
||||||
|
JAE UpdateInfoLineEnd2
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov DI, (2+9*80)*2
|
||||||
|
|
||||||
|
Cmp InfoLineDelay, 0
|
||||||
|
JE UpdateInfoLine1
|
||||||
|
; Mov CX, InfoLineDelay
|
||||||
|
; JCXZ UpdateInfoLine1
|
||||||
|
;
|
||||||
|
; Dec InfoLineDelay
|
||||||
|
|
||||||
|
UpdateInfoLine2:
|
||||||
|
LDS SI, InfoLineText
|
||||||
|
Mov CX, DS
|
||||||
|
JCXZ UpdateInfoLineEnd
|
||||||
|
|
||||||
|
Mov AX, CS:InfoLineVariable
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Mov AH, 20h
|
||||||
|
Call S_DrawString
|
||||||
|
Call FillToEOL
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Call Music_GetPlayMode
|
||||||
|
; Call ShowTime
|
||||||
|
Jmp UpdateInfoLine6
|
||||||
|
|
||||||
|
UpdateInfoLine1:
|
||||||
|
; ******
|
||||||
|
Call Music_GetSlaveChannelInformationTable
|
||||||
|
; DS:SI points to tables
|
||||||
|
; CX = numchannels.
|
||||||
|
Xor DI, DI ; DI = counter of
|
||||||
|
; currently act.
|
||||||
|
; channels.
|
||||||
|
CountChannels1:
|
||||||
|
Mov AX, [SI]
|
||||||
|
Test AH, 8
|
||||||
|
JNZ CountChannels2
|
||||||
|
|
||||||
|
And AX, 1
|
||||||
|
Add DI, AX
|
||||||
|
|
||||||
|
CountChannels2:
|
||||||
|
Add SI, SLAVECHANNELSIZE
|
||||||
|
Loop CountChannels1
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
; ******
|
||||||
|
Call Music_GetPlayMode
|
||||||
|
; AX = playmode
|
||||||
|
; BX = row
|
||||||
|
; CX = pattern
|
||||||
|
; DX = order
|
||||||
|
; SI = max row.
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DI
|
||||||
|
Cmp AX, 1
|
||||||
|
JB UpdateInfoLineChanMsg
|
||||||
|
Push SI
|
||||||
|
Push BX ; BX = row
|
||||||
|
Push CX ; CX = pattern
|
||||||
|
JE UpdateInfoLine3
|
||||||
|
JA UpdateInfoLine4
|
||||||
|
|
||||||
|
UpdateInfoLineChanMsg:
|
||||||
|
Mov SI, Offset ChannelMsg
|
||||||
|
Cmp DI, 1
|
||||||
|
JA UpdateInfoLineChanMsg2
|
||||||
|
|
||||||
|
Mov SI, Offset EmptyMsg
|
||||||
|
|
||||||
|
UpdateInfoLineChanMsg2:
|
||||||
|
Mov DI, (2+9*80)*2
|
||||||
|
Mov AH, 20h
|
||||||
|
Call S_DrawString
|
||||||
|
Call FillToEOL
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Pop AX
|
||||||
|
Mov DisplayChannelMsg, 1
|
||||||
|
Jmp UpdateInfoLine7
|
||||||
|
|
||||||
|
UpdateInfoLineEnd:
|
||||||
|
Call ShowTime
|
||||||
|
|
||||||
|
UpdateInfoLineEnd2:
|
||||||
|
Pop SI
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov AX, 1
|
||||||
|
Ret
|
||||||
|
|
||||||
|
UpdateInfoLine3:
|
||||||
|
Mov DI, (2+9*80)*2
|
||||||
|
Mov SI, Offset PatternPlayMsg
|
||||||
|
Mov AH, 20h
|
||||||
|
Call S_DrawString
|
||||||
|
Call FillToEOL
|
||||||
|
|
||||||
|
Add SP, 8
|
||||||
|
Jmp UpdateInfoLine5
|
||||||
|
|
||||||
|
UpdateInfoLine4:
|
||||||
|
Call PE_GetMaxOrder
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push DX
|
||||||
|
|
||||||
|
Mov DI, (2+9*80)*2
|
||||||
|
Mov SI, Offset SongPlayMsg
|
||||||
|
Mov AH, 20h
|
||||||
|
Call S_DrawString
|
||||||
|
Call FillToEOL
|
||||||
|
|
||||||
|
Add SP, 12
|
||||||
|
|
||||||
|
UpdateInfoLine5:
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
UpdateInfoLine6:
|
||||||
|
; Cmp AX, 2
|
||||||
|
; JNE UpdateInfoLine7
|
||||||
|
|
||||||
|
|
||||||
|
UpdateInfoLine7:
|
||||||
|
Call ShowTime
|
||||||
|
Call UpdatePointers
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov AX, 1
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP UpdateInfoLine
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc IdleUpdateInfoLine Far
|
||||||
|
|
||||||
|
Call Music_Poll
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
ELSE
|
||||||
|
Mov AL, 1
|
||||||
|
Call S_SetDirectMode
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
Call UpdateInfoLine
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
Call Glbl_TutorialHandler
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
Call S_UpdateScreen
|
||||||
|
ELSE
|
||||||
|
Mov AL, 0
|
||||||
|
Call S_SetDirectMode
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF NETWORKENABLED
|
||||||
|
Jmp Network_Poll
|
||||||
|
ELSE
|
||||||
|
Xor AX, AX
|
||||||
|
Ret
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
EndP IdleUpdateInfoLine
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc ClearInfoLine Far
|
||||||
|
|
||||||
|
Mov DWord Ptr [CS:InfoLineText], 0
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP ClearInfoLine
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc SetInfoLine Far ; DS:SI points to msg.
|
||||||
|
|
||||||
|
Mov CS:InfoLineDelay, 20
|
||||||
|
|
||||||
|
SetInfoLineChain:
|
||||||
|
Mov Word Ptr [CS:InfoLineText], SI
|
||||||
|
Mov Word Ptr [CS:InfoLineText+2], DS
|
||||||
|
Mov Word Ptr [CS:InfoLineVariable], AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP SetInfoLine
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc SetInfoLine2 Far ; DS:SI points to msg.
|
||||||
|
|
||||||
|
Mov CS:InfoLineDelay, BX
|
||||||
|
Jmp SetInfoLineChain
|
||||||
|
|
||||||
|
EndP SetInfoLine2
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc UpdatePointers ; BX = row, CX = pattern
|
||||||
|
|
||||||
|
Mov SI, Glbl
|
||||||
|
Mov DS, SI
|
||||||
|
Assume DS:Glbl
|
||||||
|
|
||||||
|
Mov AH, CurrentMode
|
||||||
|
|
||||||
|
; And AH, AH
|
||||||
|
; JZ UpdatePointers6
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push BX
|
||||||
|
Push CX
|
||||||
|
|
||||||
|
; Call S_GetDestination ; Get ES.
|
||||||
|
Call PE_FillSpeedTempo
|
||||||
|
|
||||||
|
Pop CX
|
||||||
|
Pop BX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
UpdatePointers6:
|
||||||
|
; Cmp AH, 2
|
||||||
|
; JNE UpdatePointers1
|
||||||
|
;
|
||||||
|
; Cmp AL, 1
|
||||||
|
; JB UpdatePointersEnd
|
||||||
|
;
|
||||||
|
; Call PE_ShowPatternRow
|
||||||
|
; Ret
|
||||||
|
;
|
||||||
|
; UpdatePointers1:
|
||||||
|
Cmp AL, 2 ; Playmode.
|
||||||
|
JNE UpdatePointers3
|
||||||
|
|
||||||
|
Cmp AH, 11
|
||||||
|
JE UpdatePointers2
|
||||||
|
Cmp AH, 21
|
||||||
|
JNE UpdatePointers3
|
||||||
|
|
||||||
|
UpdatePointers2:
|
||||||
|
Call PE_ShowOrder
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
UpdatePointers3:
|
||||||
|
Cmp AH, 3
|
||||||
|
JNE UpdatePointers4
|
||||||
|
|
||||||
|
Call I_ShowSamplePlay
|
||||||
|
Ret
|
||||||
|
|
||||||
|
UpdatePointers4:
|
||||||
|
Cmp AH, 4
|
||||||
|
JNE UpdatePointers5
|
||||||
|
|
||||||
|
Call I_ShowInstrumentPlay
|
||||||
|
Ret
|
||||||
|
|
||||||
|
UpdatePointers5:
|
||||||
|
UpdatePointersEnd:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP UpdatePointers
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc ShowTime
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:InfoLine
|
||||||
|
|
||||||
|
Cmp AX, 2
|
||||||
|
Mov EAX, [TimerCounter]
|
||||||
|
JE ShowTime3
|
||||||
|
|
||||||
|
Cmp ShowUsageTime, 0
|
||||||
|
JE ShowTime2
|
||||||
|
|
||||||
|
Jmp ShowTime4
|
||||||
|
|
||||||
|
ShowTime3:
|
||||||
|
Sub EAX, [PlaybackTimer]
|
||||||
|
|
||||||
|
ShowTime4:
|
||||||
|
Mov EDX, 3600
|
||||||
|
Mul EDX
|
||||||
|
ShRD EAX, EDX, 16
|
||||||
|
ShR EDX, 16
|
||||||
|
JNZ ShowTime2
|
||||||
|
; EAX = number of seconds
|
||||||
|
Mov EBX, 60
|
||||||
|
Div EBX ; EAX = minutes, EDX = seconds
|
||||||
|
|
||||||
|
Push EDX
|
||||||
|
Xor EDX, EDX
|
||||||
|
Div EBX ; EAX = hours, EDX = minutes
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Push AX ; Hours on stack, CX = seconds, DX = min
|
||||||
|
Mov BL, 10
|
||||||
|
|
||||||
|
Mov AX, DX
|
||||||
|
Div BL
|
||||||
|
Add AX, 3030h
|
||||||
|
Mov [Word Ptr Minutes], AX
|
||||||
|
|
||||||
|
Mov AX, CX
|
||||||
|
Div BL
|
||||||
|
Add AX, 3030h
|
||||||
|
Mov [Word Ptr Seconds], AX
|
||||||
|
|
||||||
|
Mov SI, Offset TimeMsg
|
||||||
|
Mov DI, (62+9*80)*2
|
||||||
|
Mov AH, 20h
|
||||||
|
Call S_DrawString
|
||||||
|
Pop AX ; To clear stack
|
||||||
|
|
||||||
|
ShowTime2:
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP ShowTime
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc StartClock Far
|
||||||
|
|
||||||
|
Push EAX
|
||||||
|
Mov EAX, CS:TimerCounter
|
||||||
|
Mov [CS:PlaybackTimer], EAX
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP StartClock
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc GetTimerCounter Far
|
||||||
|
|
||||||
|
Mov EAX, [CS:TimerCounter]
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP GetTimerCounter
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
End
|
|
@ -0,0 +1,664 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Main Module ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Segment Object1 BYTE Public 'Data' USE16
|
||||||
|
EndS
|
||||||
|
|
||||||
|
|
||||||
|
Extrn F_DrawStringInput:Far
|
||||||
|
Extrn F_PreStringInput:Far
|
||||||
|
Extrn F_PostStringInput:Far
|
||||||
|
Extrn F_Nothing:Far
|
||||||
|
Extrn F_DrawBoxObject:Far
|
||||||
|
Extrn F_DrawTextObject:Far
|
||||||
|
Extrn F_PostExitObject:Far
|
||||||
|
Extrn F_SetDirectMode:Far
|
||||||
|
Extrn F_CharacterDefinitions:Far
|
||||||
|
Extrn F_DrawButtonObject:Far
|
||||||
|
Extrn F_PreButtonObject:Far
|
||||||
|
Extrn F_PostButtonObject:Far
|
||||||
|
Extrn F_CallFarFunction:Far
|
||||||
|
Extrn F_DrawThumbBar:Far
|
||||||
|
Extrn F_DrawScalableThumbBar:Far
|
||||||
|
Extrn F_PreThumbBar:Far
|
||||||
|
Extrn F_PreScalableThumbBar:Far
|
||||||
|
Extrn F_PostThumbBar:Far
|
||||||
|
Extrn F_PostScalableThumbBar:Far
|
||||||
|
Extrn F_DrawInfoLine:Far
|
||||||
|
Extrn F_CallFarPreFunction:Far
|
||||||
|
Extrn F_CallFarPostFunction:Far
|
||||||
|
Extrn F_DrawToggle:Far
|
||||||
|
Extrn F_PreToggle:Far
|
||||||
|
Extrn F_PostToggle:Far
|
||||||
|
|
||||||
|
Extrn F_Draw5Num:Far
|
||||||
|
Extrn F_Pre5Num:Far
|
||||||
|
Extrn F_Post5Num:Far
|
||||||
|
|
||||||
|
Extrn F_Draw3Num:Far
|
||||||
|
Extrn F_Pre3Num:Far
|
||||||
|
Extrn F_Post3Num:Far
|
||||||
|
|
||||||
|
Extrn Glbl_TutorialHandler:Far
|
||||||
|
|
||||||
|
Extrn H_SetHelpContext:Far
|
||||||
|
|
||||||
|
Extrn K_GetKey:Far
|
||||||
|
Extrn K_InitKeyBoard:Far
|
||||||
|
Extrn K_UnInitKeyBoard:Far
|
||||||
|
Extrn K_IsKeyWaiting:Far
|
||||||
|
Extrn K_IsAnyKeyDown:Far
|
||||||
|
|
||||||
|
Extrn PE_DrawOrderList:Far
|
||||||
|
Extrn PE_PreOrderList:Far
|
||||||
|
Extrn PE_PostOrderList:Far
|
||||||
|
|
||||||
|
Extrn S_Set80x25Mode:Far
|
||||||
|
Extrn S_SetPalette:Far
|
||||||
|
Extrn S_RedefineCharacters:Far
|
||||||
|
Extrn S_DrawBox:Far
|
||||||
|
Extrn S_ClearScreen:Far
|
||||||
|
Extrn S_UpdateScreen:Far
|
||||||
|
|
||||||
|
; Extrn MouseDirectEnable:Far, MouseDirectDisable:Far
|
||||||
|
Extrn MouseSaveEvents:Far, MouseRestoreEvents:Far
|
||||||
|
Extrn MouseInput:Far, MouseClearEvents:Far
|
||||||
|
Extrn GetKeyboardLock:Far, MIDIBufferEmpty:Far
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Globals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Global M_FunctionDivider:Far
|
||||||
|
Global M_FunctionHandler:Far
|
||||||
|
Global M_Object1List:Far
|
||||||
|
Global M_Object1ListDefault:Far
|
||||||
|
Public ReleaseTimeSlice
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Segment Main DWORD Public 'Code' USE16
|
||||||
|
Assume CS:Main, DS:Nothing
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
DrawObjectList Label DWord
|
||||||
|
DD DWord Ptr F_DrawBoxObject ; 0
|
||||||
|
DD DWord Ptr F_DrawTextObject ; 1
|
||||||
|
DD DWord Ptr F_DrawButtonObject ; 2
|
||||||
|
DD DWord Ptr F_Nothing ; Empty obj number, 3
|
||||||
|
DD DWord Ptr F_Nothing ; 4
|
||||||
|
DD DWord Ptr F_SetDirectMode ; 5
|
||||||
|
DD DWord Ptr F_CharacterDefinitions ; 6
|
||||||
|
DD DWord Ptr F_Nothing ; Empty obj number 7
|
||||||
|
DD DWord Ptr F_CallFarFunction ; 8
|
||||||
|
DD DWord Ptr F_DrawThumbBar ; 9
|
||||||
|
DD DWord Ptr F_DrawInfoLine ; 10
|
||||||
|
DD DWord Ptr H_SetHelpContext ; 11
|
||||||
|
DD DWord Ptr PE_DrawOrderList ; 12
|
||||||
|
DD DWord Ptr F_Draw3Num ; 13
|
||||||
|
DD DWord Ptr F_DrawScalableThumbBar ; 14
|
||||||
|
DD DWord Ptr F_CallFarFunction ; 15
|
||||||
|
DD DWord Ptr F_DrawStringInput ; 16
|
||||||
|
DD DWord Ptr F_DrawToggle ; 17
|
||||||
|
DD DWord Ptr F_Draw5Num ; 18
|
||||||
|
|
||||||
|
|
||||||
|
PreFunctionList Label DWord
|
||||||
|
DD DWord Ptr F_Nothing ; 0
|
||||||
|
DD DWord Ptr F_Nothing ; 1
|
||||||
|
DD DWord Ptr F_PreButtonObject ; 2
|
||||||
|
DD DWord Ptr F_Nothing ; 3
|
||||||
|
DD DWord Ptr F_Nothing ; 4
|
||||||
|
DD DWord Ptr F_Nothing ; 5
|
||||||
|
DD DWord Ptr F_Nothing ; 6
|
||||||
|
DD DWord Ptr F_Nothing ; 7
|
||||||
|
DD DWord Ptr F_Nothing ; 8
|
||||||
|
DD DWord Ptr F_PreThumbBar ; 9
|
||||||
|
DD DWord Ptr F_Nothing ; 10
|
||||||
|
DD DWord Ptr F_Nothing ; 11
|
||||||
|
DD DWord Ptr PE_PreOrderList ; 12
|
||||||
|
DD DWord Ptr F_Pre3Num ; 13
|
||||||
|
DD DWord Ptr F_PreScalableThumbBar ; 14
|
||||||
|
DD DWord Ptr F_CallFarPreFunction ; 15
|
||||||
|
DD DWord Ptr F_PreStringInput ; 16
|
||||||
|
DD DWord Ptr F_PreToggle ; 17
|
||||||
|
DD DWord Ptr F_Pre5Num ; 18
|
||||||
|
|
||||||
|
PostFunctionList Label DWord
|
||||||
|
DD DWord Ptr F_Nothing ; 0
|
||||||
|
DD DWord Ptr F_Nothing ; 1
|
||||||
|
DD DWord Ptr F_PostButtonObject ; 2
|
||||||
|
DD DWord Ptr F_Nothing ; 3
|
||||||
|
DD DWord Ptr F_PostExitObject ; 4
|
||||||
|
DD DWord Ptr F_Nothing ; 5
|
||||||
|
DD DWord Ptr F_Nothing ; 6
|
||||||
|
DD DWord Ptr F_Nothing ; 7
|
||||||
|
DD DWord Ptr F_Nothing ; 8
|
||||||
|
DD DWord Ptr F_PostThumbBar ; 9
|
||||||
|
DD DWord Ptr F_Nothing ; 10
|
||||||
|
DD DWord Ptr F_Nothing ; 11
|
||||||
|
DD DWord Ptr PE_PostOrderList ; 12
|
||||||
|
DD DWord Ptr F_Post3Num ; 13
|
||||||
|
DD DWord Ptr F_PostScalableThumbBar ; 14
|
||||||
|
DD DWord Ptr F_CallFarPostFunction ; 15
|
||||||
|
DD DWord Ptr F_PostStringInput ; 16
|
||||||
|
DD DWord Ptr F_PostToggle ; 17
|
||||||
|
DD DWord Ptr F_Post5Num ; 18
|
||||||
|
|
||||||
|
GlobalKeyList DD ?
|
||||||
|
ReleaseTimeSlice DB 0
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Proc M_FunctionDivider Far ; Given DS:SI points to list
|
||||||
|
; Carry set if none found
|
||||||
|
Push BX
|
||||||
|
|
||||||
|
M_FunctionDivider1: ; 0 = Direct comparison
|
||||||
|
; 1 = Key comparison
|
||||||
|
; 2 = Alt, 3 = Ctrl, 4 = Shift
|
||||||
|
; 5 = capital key comparison
|
||||||
|
; 6 = MIDI message
|
||||||
|
LodsB
|
||||||
|
Test AL, AL
|
||||||
|
JS M_FunctionDivider4 ; End of list
|
||||||
|
|
||||||
|
Mov BX, CX
|
||||||
|
JZ M_FunctionDivider2 ; If AL = 0
|
||||||
|
|
||||||
|
Cmp AL, 2
|
||||||
|
JE M_FunctionDivider8
|
||||||
|
JB M_FunctionDivider5
|
||||||
|
|
||||||
|
Cmp AL, 4
|
||||||
|
JB M_FunctionDivider18
|
||||||
|
JE M_FunctionDivider10 ; If AL = 4
|
||||||
|
|
||||||
|
Cmp AL, 6
|
||||||
|
JB M_FunctionDividerCAPS
|
||||||
|
|
||||||
|
M_FunctionDividerMIDI:
|
||||||
|
Test CL, CL
|
||||||
|
JNZ M_FunctionDivider9
|
||||||
|
Mov BX, CX
|
||||||
|
And BX, 0F000h
|
||||||
|
Jmp M_FunctionDividerCheck
|
||||||
|
|
||||||
|
M_FunctionDividerCAPS:
|
||||||
|
Mov BX, DX
|
||||||
|
Cmp BX, 'a'
|
||||||
|
JB M_FunctionDivider6
|
||||||
|
Cmp BX, 'z'
|
||||||
|
JA M_FunctionDivider9
|
||||||
|
|
||||||
|
Sub BL, 32
|
||||||
|
|
||||||
|
M_FunctionDivider6:
|
||||||
|
Cmp BX, 'A'
|
||||||
|
JB M_FunctionDivider9
|
||||||
|
Cmp BX, 'Z'
|
||||||
|
JA M_FunctionDivider9
|
||||||
|
Jmp M_FunctionDivider2
|
||||||
|
|
||||||
|
M_FunctionDivider5:
|
||||||
|
Mov BX, DX ; If al = 1...
|
||||||
|
Jmp M_FunctionDivider2
|
||||||
|
|
||||||
|
M_FunctionDivider8:
|
||||||
|
Test CH, 60h
|
||||||
|
JZ M_FunctionDivider9
|
||||||
|
|
||||||
|
And BX, 1FFh
|
||||||
|
Jmp M_FunctionDivider2
|
||||||
|
|
||||||
|
M_FunctionDivider18:
|
||||||
|
Test CH, 18h ; Ctrl
|
||||||
|
JZ M_FunctionDivider9
|
||||||
|
And BX, 1FFh
|
||||||
|
|
||||||
|
Jmp M_FunctionDivider2
|
||||||
|
|
||||||
|
M_FunctionDivider10:
|
||||||
|
Test CH, 6
|
||||||
|
JZ M_FunctionDivider9
|
||||||
|
And BX, 1FFh
|
||||||
|
|
||||||
|
M_FunctionDivider2:
|
||||||
|
Test CL, CL
|
||||||
|
JZ M_FunctionDivider9
|
||||||
|
|
||||||
|
M_FunctionDividerCheck:
|
||||||
|
LodsW
|
||||||
|
Cmp AX, BX
|
||||||
|
JE M_FunctionDivider3
|
||||||
|
|
||||||
|
LodsW
|
||||||
|
Jmp M_FunctionDivider1
|
||||||
|
|
||||||
|
M_FunctionDivider9:
|
||||||
|
LodsW
|
||||||
|
LodsW
|
||||||
|
Jmp M_FunctionDivider1
|
||||||
|
|
||||||
|
M_FunctionDivider3:
|
||||||
|
DB 85h ; ClC
|
||||||
|
M_FunctionDivider4: ;
|
||||||
|
StC ;
|
||||||
|
|
||||||
|
Pop BX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP M_FunctionDivider
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc M_FunctionHandler Far
|
||||||
|
ARG ObjectList:DWord
|
||||||
|
|
||||||
|
Push BP
|
||||||
|
Mov BP, SP
|
||||||
|
|
||||||
|
Call MouseSaveEvents
|
||||||
|
|
||||||
|
M_FunctionHandler1: ; Draw all objects in list
|
||||||
|
Call GetKeyboardLock
|
||||||
|
Cmp AL, 2
|
||||||
|
JE MouseInput1
|
||||||
|
|
||||||
|
Call MouseClearEvents
|
||||||
|
|
||||||
|
LDS SI, ObjectList ; DS:SI points to object list
|
||||||
|
Add SI, 6 ; Skip pass list header
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
M_FunctionHandler2:
|
||||||
|
Cmp Word Ptr [SI], 0 ; DS:SI points to an offset of
|
||||||
|
JE M_FunctionHandler4 ; an object
|
||||||
|
|
||||||
|
M_FunctionHandler3:
|
||||||
|
Push AX ; AX = object number
|
||||||
|
Push DS
|
||||||
|
Push SI
|
||||||
|
Push BP
|
||||||
|
|
||||||
|
LES DI, ObjectList ; ES:DI points to object list
|
||||||
|
Mov SI, [SI] ; DS:SI points to object
|
||||||
|
Mov BX, [SI] ; BX = object type
|
||||||
|
Mov CL, 2
|
||||||
|
ShL BX, CL
|
||||||
|
|
||||||
|
Call DWord Ptr [DrawObjectList+BX]
|
||||||
|
|
||||||
|
Pop BP
|
||||||
|
Pop SI ; DS:SI Points to an offset of
|
||||||
|
Pop DS ; an object
|
||||||
|
Pop AX
|
||||||
|
Inc AX
|
||||||
|
Add SI, 2 ; Advance Pointer
|
||||||
|
Jmp M_FunctionHandler2 ; Next Object
|
||||||
|
|
||||||
|
M_FunctionHandler4: ; Call Prefunction for object
|
||||||
|
LDS SI, ObjectList ; DS:SI points to object list
|
||||||
|
Mov AX, [SI] ; AX = Active object number
|
||||||
|
LEA SI, [ESI+EAX*2+6] ; Skip pas list header (+6)
|
||||||
|
; AX = object number
|
||||||
|
|
||||||
|
Cmp Word Ptr [SI], 0 ; if list doesn't point to
|
||||||
|
JE M_FunctionHandler21 ; anything, don't call prefunc
|
||||||
|
|
||||||
|
M_FunctionHandler20:
|
||||||
|
Mov SI, [SI] ; DS:SI points to object
|
||||||
|
Mov BX, [SI] ; BX = object type
|
||||||
|
ShL BX, 2
|
||||||
|
|
||||||
|
Push BP
|
||||||
|
Call DWord Ptr [PreFunctionList+BX]
|
||||||
|
Pop BP
|
||||||
|
|
||||||
|
M_FunctionHandler21:
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
Call Glbl_TutorialHandler
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
Call S_UpdateScreen
|
||||||
|
|
||||||
|
M_FunctionHandler5: ; Input...
|
||||||
|
; Call K_IsAnyKeyDown
|
||||||
|
; And AL, AL
|
||||||
|
; JNZ M_KeyBoardInput1
|
||||||
|
|
||||||
|
MouseInput1:
|
||||||
|
Call MouseInput ; returns 0 if nothing
|
||||||
|
; 1 if input (BX, CX, DX set)
|
||||||
|
; 2 if no input, but keyboard
|
||||||
|
; locked
|
||||||
|
Cmp AX, 1
|
||||||
|
JB M_KeyBoardInput1
|
||||||
|
JA M_FunctionHandler6 ; IdleList
|
||||||
|
; Handle postobject, of
|
||||||
|
; object BX
|
||||||
|
|
||||||
|
Mov AX, DI
|
||||||
|
Cmp BX, 0FFFFh
|
||||||
|
JE M_FunctionHandler23
|
||||||
|
|
||||||
|
LES DI, ObjectList ; ES:DI points to object list
|
||||||
|
Push ES
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov [DI], BX ; Object number in BX.
|
||||||
|
LEA BX, [EBX*2+EDI+6] ; ES:BX points to offset of
|
||||||
|
; active object.
|
||||||
|
|
||||||
|
Mov SI, [BX] ; DS:SI points to object
|
||||||
|
|
||||||
|
Mov SI, [SI] ; SI = object type of active obj
|
||||||
|
ShL SI, 2
|
||||||
|
|
||||||
|
Push BP
|
||||||
|
Call DWord Ptr [PostFunctionList+SI]
|
||||||
|
Pop BP
|
||||||
|
Jmp M_FunctionHandler23
|
||||||
|
|
||||||
|
M_KeyBoardInput1:
|
||||||
|
Call MIDIBufferEmpty
|
||||||
|
JAE M_FunctionHandler8
|
||||||
|
|
||||||
|
Call K_IsKeyWaiting
|
||||||
|
|
||||||
|
Test AX, AX
|
||||||
|
JNZ M_FunctionHandler8
|
||||||
|
; Check for mouse info...
|
||||||
|
|
||||||
|
M_FunctionHandler6: ; IdleList
|
||||||
|
Cmp CS:ReleaseTimeSlice, 0
|
||||||
|
JE NoReleaseTimeSlice
|
||||||
|
|
||||||
|
Mov AX, 1680h
|
||||||
|
Int 2Fh
|
||||||
|
|
||||||
|
NoReleaseTimeSlice:
|
||||||
|
; StI
|
||||||
|
|
||||||
|
LDS SI, ObjectList ; DS:SI points to object list
|
||||||
|
Add SI, 2 ; DS:SI points to idle list
|
||||||
|
|
||||||
|
Cmp Word Ptr [SI], 0
|
||||||
|
JE M_FunctionHandler5 ; If Offset of IdleList = 0,
|
||||||
|
; check for another key
|
||||||
|
|
||||||
|
M_FunctionHandler7:
|
||||||
|
Mov SI, [SI]
|
||||||
|
Xor BX, BX ; Clear flag.
|
||||||
|
|
||||||
|
M_FunctionHandler19:
|
||||||
|
Cmp Word Ptr [SI], 0
|
||||||
|
JNE M_FunctionHandler18
|
||||||
|
|
||||||
|
Cmp Word Ptr [SI+2], 0
|
||||||
|
JE M_FunctionHandler29
|
||||||
|
|
||||||
|
M_FunctionHandler18:
|
||||||
|
Push SI
|
||||||
|
Push BX
|
||||||
|
Push DS
|
||||||
|
Push BP
|
||||||
|
|
||||||
|
Call DWord Ptr [SI]
|
||||||
|
|
||||||
|
Pop BP
|
||||||
|
Pop DS
|
||||||
|
Pop BX
|
||||||
|
|
||||||
|
Cmp AX, 5
|
||||||
|
JE M_FunctionHandlerIdleCommand
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
|
||||||
|
Add SI, 4
|
||||||
|
|
||||||
|
Or BX, AX
|
||||||
|
Jmp M_FunctionHandler19
|
||||||
|
|
||||||
|
M_FunctionHandlerIdleCommand:
|
||||||
|
Pop AX ; Pull off SI from the stack
|
||||||
|
Mov AX, DI
|
||||||
|
Jmp M_FunctionHandler10
|
||||||
|
; Mov SI, 1
|
||||||
|
; Jmp M_FunctionHandler16
|
||||||
|
|
||||||
|
M_FunctionHandler29:
|
||||||
|
Test BX, BX
|
||||||
|
JZ M_FunctionHandler5
|
||||||
|
|
||||||
|
Jmp M_FunctionHandler1
|
||||||
|
|
||||||
|
M_FunctionHandler8:
|
||||||
|
Call K_GetKey ; CX = Keyboard Input Data
|
||||||
|
; DX = Translated Input Data
|
||||||
|
; else MIDI input if CL = 0
|
||||||
|
|
||||||
|
M_FunctionHandler9:
|
||||||
|
LES DI, ObjectList ; ES:DI points to object list
|
||||||
|
Push ES
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov BX, [DI] ; BX = active object number
|
||||||
|
LEA BX, [EDI+EBX*2+6] ; ES:BX points to offset of
|
||||||
|
; active object.
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
Cmp Word Ptr [BX], 0
|
||||||
|
JE M_FunctionHandler23
|
||||||
|
|
||||||
|
M_FunctionHandler22:
|
||||||
|
Mov SI, [BX] ; DS:SI points to object
|
||||||
|
|
||||||
|
Mov SI, [SI] ; SI = object type of active obj
|
||||||
|
ShL SI, 2
|
||||||
|
|
||||||
|
Push BP
|
||||||
|
Call DWord Ptr [PostFunctionList+SI]
|
||||||
|
Pop BP
|
||||||
|
|
||||||
|
M_FunctionHandler23:
|
||||||
|
Push DS
|
||||||
|
Push SI
|
||||||
|
|
||||||
|
LDS SI, ObjectList
|
||||||
|
Add SI, 4
|
||||||
|
Mov SI, [SI]
|
||||||
|
Mov Word Ptr CS:GlobalKeyList+2, DS
|
||||||
|
Mov Word Ptr CS:GlobalKeyList, SI
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
; Xor BX, BX ; Extra key list starts at 0
|
||||||
|
|
||||||
|
M_FunctionHandler10:
|
||||||
|
Cmp AX, 1
|
||||||
|
JB M_FunctionHandler11 ; If AX = 0
|
||||||
|
JE M_FunctionHandler1 ; Redraw screen if AX = 1
|
||||||
|
|
||||||
|
Cmp AX, 3
|
||||||
|
JB M_FunctionHandler4 ; Goto preobject if AX = 2
|
||||||
|
JE M_FunctionHandler5 ; Get next input
|
||||||
|
|
||||||
|
Cmp AX, 5 ; New list
|
||||||
|
JE M_FunctionHandler16
|
||||||
|
JA M_FunctionHandler11 ; If > 5
|
||||||
|
|
||||||
|
Call MouseRestoreEvents
|
||||||
|
|
||||||
|
Pop BP
|
||||||
|
Ret 4
|
||||||
|
|
||||||
|
M_FunctionHandler16:
|
||||||
|
Mov Word Ptr Offset ObjectList, DX
|
||||||
|
Mov Word Ptr Offset ObjectList+2, CX
|
||||||
|
Mov AX, SI
|
||||||
|
|
||||||
|
Jmp M_FunctionHandler10
|
||||||
|
|
||||||
|
M_FunctionHandler11:
|
||||||
|
LDS SI, CS:GlobalKeyList
|
||||||
|
|
||||||
|
Cmp Word Ptr [SI], 0
|
||||||
|
JE M_FunctionHandler4
|
||||||
|
|
||||||
|
M_FunctionHandler12:
|
||||||
|
LodsB
|
||||||
|
Mov BX, DX
|
||||||
|
Cmp AL, 1
|
||||||
|
JE M_FunctionHandler13 ; Keycode compare (1)
|
||||||
|
Mov BX, CX
|
||||||
|
JB M_FunctionHandler13 ; Scancode compare (0)
|
||||||
|
|
||||||
|
And BX, 1FFh
|
||||||
|
|
||||||
|
Cmp AL, 3
|
||||||
|
JB M_FunctionHandlerAlt ; Alt-keycode compare (2)
|
||||||
|
JE M_FunctionHandlerCtrl ; Ctrl-keycode compare (3)
|
||||||
|
|
||||||
|
Cmp AL, 5
|
||||||
|
JB M_FunctionHandlerForced ; Always call function (4)
|
||||||
|
JE M_FunctionHandlerNewListNear ; Chain to new list (5)
|
||||||
|
|
||||||
|
Cmp AL, 7
|
||||||
|
JB M_FunctionHandlerShift ; Shift-keycode compare (6)
|
||||||
|
JE M_FunctionHandlerNewListFar ; Chain to far list (7)
|
||||||
|
|
||||||
|
Cmp AL, 9
|
||||||
|
JB M_FunctionHandlerCapCheck ; Capitalised keycode (8)
|
||||||
|
JE M_FunctionHandlerMIDI ; MIDI message (9)
|
||||||
|
|
||||||
|
; Jmp M_FunctionHandler1
|
||||||
|
Jmp M_FunctionHandler4 ; Undefined compare..
|
||||||
|
; ; -> end of list
|
||||||
|
|
||||||
|
M_FunctionHandlerAlt:
|
||||||
|
Test CH, 60h
|
||||||
|
JZ M_FunctionHandler14
|
||||||
|
Jmp M_FunctionHandler13
|
||||||
|
|
||||||
|
M_FunctionHandlerCtrl:
|
||||||
|
Test CH, 18h
|
||||||
|
JZ M_FunctionHandler14
|
||||||
|
Jmp M_FunctionHandler13
|
||||||
|
|
||||||
|
M_FunctionHandlerShift:
|
||||||
|
Test CH, 6h
|
||||||
|
JZ M_FunctionHandler14
|
||||||
|
Jmp M_FunctionHandler13
|
||||||
|
|
||||||
|
M_FunctionHandlerNewListNear:
|
||||||
|
LodsW
|
||||||
|
Mov Word Ptr CS:GlobalKeyList, AX
|
||||||
|
Jmp M_FunctionHandler11
|
||||||
|
|
||||||
|
M_FunctionHandlerNewListFar:
|
||||||
|
LodsD
|
||||||
|
Mov CS:GlobalKeyList, EAX
|
||||||
|
Jmp M_FunctionHandler11
|
||||||
|
|
||||||
|
M_FunctionHandlerForced:
|
||||||
|
LodsW
|
||||||
|
Jmp M_FunctionHandler26
|
||||||
|
|
||||||
|
M_FunctionHandlerCapCheck: ; Capital OK? (8)
|
||||||
|
Mov BX, DX
|
||||||
|
Cmp BX, 'A'
|
||||||
|
JB M_FunctionHandler14
|
||||||
|
Cmp BX, 'z'
|
||||||
|
JA M_FunctionHandler14
|
||||||
|
Cmp BX, 'a'
|
||||||
|
JB M_FunctionHandlerCapCheck1
|
||||||
|
|
||||||
|
Sub BL, 32
|
||||||
|
|
||||||
|
M_FunctionHandlerCapCheck1:
|
||||||
|
Jmp M_FunctionHandler13
|
||||||
|
|
||||||
|
M_FunctionHandlerMIDI:
|
||||||
|
Test CL, CL
|
||||||
|
JNZ M_FunctionHandler14
|
||||||
|
Mov BX, CX
|
||||||
|
And BX, 0F000h
|
||||||
|
Jmp M_FunctionHandlerCheck
|
||||||
|
|
||||||
|
M_FunctionHandler13:
|
||||||
|
Test CL, CL
|
||||||
|
JZ M_FunctionHandler14
|
||||||
|
|
||||||
|
M_FunctionHandlerCheck:
|
||||||
|
LodsW
|
||||||
|
Cmp BX, AX
|
||||||
|
JNE M_FunctionHandler14
|
||||||
|
|
||||||
|
M_FunctionHandler26:
|
||||||
|
LES DI, ObjectList ; ES:DI points to object list
|
||||||
|
Push BP
|
||||||
|
Call DWord Ptr [SI]
|
||||||
|
Pop BP
|
||||||
|
Jmp M_FunctionHandler15
|
||||||
|
|
||||||
|
M_FunctionHandler14:
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
M_FunctionHandler15:
|
||||||
|
Add Word Ptr CS:GlobalKeyList, 7
|
||||||
|
Jmp M_FunctionHandler10
|
||||||
|
|
||||||
|
EndP M_FunctionHandler
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc M_Object1ListDefault Far ; Reqs: DI = offset of list
|
||||||
|
|
||||||
|
Mov CX, 0FFFFh
|
||||||
|
|
||||||
|
Proc M_Object1List Far ; Reqs.. CX = inital object.
|
||||||
|
; Reqs.. DI = offset of list
|
||||||
|
|
||||||
|
Mov AX, Object1
|
||||||
|
Push AX
|
||||||
|
Mov ES, AX
|
||||||
|
Push DI
|
||||||
|
Cmp CX, 0FFFFh
|
||||||
|
JE M_Object1List1
|
||||||
|
|
||||||
|
Mov Word Ptr [ES:DI], CX
|
||||||
|
|
||||||
|
M_Object1List1:
|
||||||
|
Call M_FunctionHandler
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP M_Object1List
|
||||||
|
EndP M_Object1ListDefault
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
End
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,140 @@
|
||||||
|
;
|
||||||
|
; Pattern edit view functions
|
||||||
|
;
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Draw_3Note Near ; Given AL = note.
|
||||||
|
|
||||||
|
Cmp AL, NONOTE
|
||||||
|
JB Draw_3Note2
|
||||||
|
|
||||||
|
Mov CL, AL
|
||||||
|
Mov AL, 173 ; '.'
|
||||||
|
JE Draw_3Note1
|
||||||
|
|
||||||
|
Mov AL, '^'
|
||||||
|
Cmp CL, 0FEh
|
||||||
|
JE Draw_3Note1
|
||||||
|
|
||||||
|
Mov AL, 'Í'
|
||||||
|
Cmp CL, 0FFh
|
||||||
|
JE Draw_3Note1
|
||||||
|
|
||||||
|
Mov AL, '!'
|
||||||
|
|
||||||
|
Draw_3Note1:
|
||||||
|
Mov AH, CH
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
Draw_3Note2:
|
||||||
|
Push SI
|
||||||
|
|
||||||
|
AAM 12 ; AH = octave, AL = note
|
||||||
|
Mov CL, AH
|
||||||
|
And AX, 0FFh
|
||||||
|
LEA SI, [EBX+EAX*2]
|
||||||
|
|
||||||
|
Mov AH, CH
|
||||||
|
SegCS LodsB
|
||||||
|
StosW
|
||||||
|
SegCS LodsB
|
||||||
|
StosW
|
||||||
|
Mov AL, CL
|
||||||
|
Add AL, 30h
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Draw_3Note
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Draw_2Note Near ; Given AL = note.
|
||||||
|
|
||||||
|
Cmp AL, NONOTE
|
||||||
|
JB Draw_2Note2
|
||||||
|
|
||||||
|
Mov DL, AL
|
||||||
|
Mov AL, 173 ; '.'
|
||||||
|
JE Draw_2Note1
|
||||||
|
|
||||||
|
Mov AL, '^'
|
||||||
|
Cmp DL, 0FEh
|
||||||
|
JE Draw_2Note1
|
||||||
|
|
||||||
|
Mov AL, 'Í'
|
||||||
|
Cmp DL, 0FFh
|
||||||
|
JE Draw_2Note1
|
||||||
|
|
||||||
|
Mov AL, '!'
|
||||||
|
|
||||||
|
Draw_2Note1:
|
||||||
|
Mov AH, CH
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
Draw_2Note2:
|
||||||
|
Push SI
|
||||||
|
|
||||||
|
AAM 12 ; AH = octave, AL = note
|
||||||
|
Mov CL, AH
|
||||||
|
And AX, 0FFh
|
||||||
|
LEA SI, [EBX+EAX*2]
|
||||||
|
|
||||||
|
SegCS LodsW
|
||||||
|
Cmp AH, '-'
|
||||||
|
JNE Draw_2Note3
|
||||||
|
|
||||||
|
Add AL, 'a'-'A'
|
||||||
|
|
||||||
|
Draw_2Note3:
|
||||||
|
Mov AH, CH
|
||||||
|
StosW
|
||||||
|
Mov AL, CL
|
||||||
|
Add AL, 30h
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Pop SI
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Draw_2Note
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Draw_2Instrument
|
||||||
|
|
||||||
|
Test AL, AL
|
||||||
|
JNZ Draw_2Instrument1
|
||||||
|
|
||||||
|
Mov AL, 173 ; '.'
|
||||||
|
Mov AH, CH
|
||||||
|
|
||||||
|
StosW
|
||||||
|
StosW
|
||||||
|
Ret
|
||||||
|
|
||||||
|
Draw_2Instrument1:
|
||||||
|
AAM 10
|
||||||
|
Add AX, '00'
|
||||||
|
|
||||||
|
Mov CL, AL
|
||||||
|
Mov AL, AH
|
||||||
|
Mov AH, CH
|
||||||
|
StosW
|
||||||
|
Mov AL, CL
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Draw_2Instrument
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,90 @@
|
||||||
|
|
||||||
|
Proc GetCurrentTime
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Disk
|
||||||
|
|
||||||
|
Cmp TimerData, 0
|
||||||
|
JE GetCurrentTimeEnd
|
||||||
|
|
||||||
|
Mov ES, TimerData
|
||||||
|
Mov DI, NumTimerData
|
||||||
|
ShL DI, 3
|
||||||
|
|
||||||
|
Mov AH, 2Ah
|
||||||
|
Int 21h ; Get Date
|
||||||
|
Mov AX, CX ; Now to get date in yyyyyyym mmmddddd
|
||||||
|
Sub AX, 1980
|
||||||
|
ShL AX, 9 ; Year
|
||||||
|
Or AL, DL ; Day
|
||||||
|
Xor DL, DL
|
||||||
|
ShR DX, 3
|
||||||
|
Or AX, DX ; Month
|
||||||
|
StosW
|
||||||
|
|
||||||
|
Mov AH, 2Ch
|
||||||
|
Int 21h ; Get time
|
||||||
|
Mov AX, CX ; Now to get time in hhhhhmmm mmmsssss
|
||||||
|
ShL AL, 2 ; AX = ...hhhhh mmmmmm..
|
||||||
|
ShL AX, 3 ; AX = hhhhhmmm mmm.....
|
||||||
|
ShR DH, 1 ; DH = ...sssss
|
||||||
|
Or AL, DH
|
||||||
|
StosW
|
||||||
|
|
||||||
|
GetCurrentTimeEnd:
|
||||||
|
Pop ES
|
||||||
|
Pop DS
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP GetCurrentTime
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc CheckTimerData
|
||||||
|
Assume DS:Disk
|
||||||
|
|
||||||
|
Cmp TimerData, 0
|
||||||
|
JNE CheckTimerData1
|
||||||
|
|
||||||
|
Mov NumTimerData, 0
|
||||||
|
Mov AH, 48h
|
||||||
|
Mov BX, 1
|
||||||
|
Int 21h
|
||||||
|
JC CheckTimerData1
|
||||||
|
|
||||||
|
Mov TimerData, AX
|
||||||
|
Call GetCurrentTime
|
||||||
|
|
||||||
|
CheckTimerData1:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP CheckTimerData
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc ReleaseTimerData
|
||||||
|
|
||||||
|
Mov AX, CS:TimerData
|
||||||
|
Test AX, AX
|
||||||
|
JZ ReleaseTimerData1
|
||||||
|
|
||||||
|
Mov ES, AX
|
||||||
|
Mov AH, 49h
|
||||||
|
Int 21h
|
||||||
|
Xor AX, AX
|
||||||
|
|
||||||
|
ReleaseTimerData1:
|
||||||
|
Mov CS:TimerData, AX
|
||||||
|
Mov CS:NumTimerData, AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP ReleaseTimerData
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
@ -0,0 +1,519 @@
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
|
||||||
|
Extrn S_DrawBox:Far
|
||||||
|
Extrn S_DrawString:Far
|
||||||
|
Extrn Music_GetSongSegment:Far
|
||||||
|
Extrn Music_GetPlayMode:Far
|
||||||
|
Extrn PE_GetLastInstrument:Far ; Returns BX = LastInst-1
|
||||||
|
|
||||||
|
Segment Pattern BYTE Public 'Code'
|
||||||
|
Extrn PatternDataArea:Word
|
||||||
|
Extrn LastKeyBoard1:Word
|
||||||
|
Extrn LastKeyBoard2:Word
|
||||||
|
EndS
|
||||||
|
|
||||||
|
Segment Disk Byte Public 'Code' USE16
|
||||||
|
Extrn SamplesInModule:Byte
|
||||||
|
Extrn InSampleFileName:Byte
|
||||||
|
EndS
|
||||||
|
|
||||||
|
Public Glbl_TutorialHandler
|
||||||
|
|
||||||
|
Segment Glbl BYTE Public 'Code' USE16
|
||||||
|
Assume CS:Glbl, DS:Nothing, GS:Pattern
|
||||||
|
|
||||||
|
Extrn CurrentMode:Byte
|
||||||
|
|
||||||
|
TutorialState DW 0
|
||||||
|
|
||||||
|
|
||||||
|
; TutorialInfo structure:
|
||||||
|
; DW Offset function
|
||||||
|
; DB x, y (top left)
|
||||||
|
; DB x, y (bottom right)
|
||||||
|
; DB colour
|
||||||
|
; DB Message, 0
|
||||||
|
|
||||||
|
TutorialFunctionArray Label Word
|
||||||
|
DW Offset Tute_State0
|
||||||
|
DW Offset Tute_State1
|
||||||
|
DW Offset Tute_State2
|
||||||
|
DW Offset Tute_State3
|
||||||
|
DW Offset Tute_State4
|
||||||
|
DW Offset Tute_State5
|
||||||
|
DW Offset Tute_State6
|
||||||
|
DW Offset Tute_State7
|
||||||
|
DW Offset Tute_State8
|
||||||
|
DW Offset Tute_State9
|
||||||
|
DW Offset Tute_State10
|
||||||
|
DW Offset Tute_State1
|
||||||
|
DW Offset Tute_State12
|
||||||
|
DW Offset Tute_State2
|
||||||
|
DW Offset Tute_State14
|
||||||
|
DW Offset Tute_State5
|
||||||
|
DW Offset Tute_State16
|
||||||
|
DW Offset Tute_State9
|
||||||
|
DW Offset Tute_State18
|
||||||
|
DW Offset Tute_State19
|
||||||
|
DW Offset Tute_StateEnd
|
||||||
|
|
||||||
|
MAXTUTESTATE = ($-Offset TutorialFunctionArray)/2
|
||||||
|
|
||||||
|
|
||||||
|
TutorialInfoArray Label Word
|
||||||
|
DW Offset TutorialDisplayState0
|
||||||
|
DW Offset TutorialDisplayState1
|
||||||
|
DW Offset TutorialDisplayState2
|
||||||
|
DW Offset TutorialDisplayState3
|
||||||
|
DW Offset TutorialDisplayState4
|
||||||
|
DW Offset TutorialDisplayState5
|
||||||
|
DW Offset TutorialDisplayState6
|
||||||
|
DW Offset TutorialDisplayState7
|
||||||
|
DW Offset TutorialDisplayState8
|
||||||
|
DW Offset TutorialDisplayState9
|
||||||
|
DW Offset TutorialDisplayState10
|
||||||
|
DW Offset TutorialDisplayState11
|
||||||
|
DW Offset TutorialDisplayState12
|
||||||
|
DW Offset TutorialDisplayState13
|
||||||
|
DW Offset TutorialDisplayState14
|
||||||
|
DW Offset TutorialDisplayState15
|
||||||
|
DW Offset TutorialDisplayState16
|
||||||
|
DW Offset TutorialDisplayState17
|
||||||
|
DW Offset TutorialDisplayState18
|
||||||
|
DW Offset TutorialDisplayState19
|
||||||
|
DW Offset TutorialDisplayState20
|
||||||
|
DW Offset TutorialDisplayStatexx
|
||||||
|
|
||||||
|
TutorialDisplayState0 DB 0, 40, 79, 49
|
||||||
|
DB 0FFh, 20, " Welcome to the Impulse Tracker Tutorial!", 13, 13
|
||||||
|
DB "This tutorial was designed to provide you with a basic understanding of how", 13
|
||||||
|
DB "this program works. Everything that you learn here is exactly the same as in", 13
|
||||||
|
DB "the main program. By the end of this tutorial, you should be able to compose", 13
|
||||||
|
DB "your own modules!", 13, 13
|
||||||
|
DB "Good luck! (Press Enter to continue)", 0
|
||||||
|
|
||||||
|
TutorialDisplayState1 DB 0, 0, 79, 4
|
||||||
|
DB "This is the load-module screen that Impulse Tracker will normally begin with.", 13
|
||||||
|
DB "As we will start a song afresh, switch to the sample list screen by pressing", 13
|
||||||
|
DB "F3.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState2 DB 36, 1, 78, 13
|
||||||
|
DB "There are two basic elements to an", 13
|
||||||
|
DB "Impulse Tracker module: patterns and", 13
|
||||||
|
DB "samples. Samples provide all the 'real'", 13
|
||||||
|
DB "sound information to the program. These", 13
|
||||||
|
DB "sounds can be instruments, voices, WAV", 13
|
||||||
|
DB "files - anything you like! IT understands", 13
|
||||||
|
DB "a wide variety of sound files and even", 13
|
||||||
|
DB "allows you to take sounds directly from", 13
|
||||||
|
DB "other modules. Since there are no samples", 13
|
||||||
|
DB "currently loaded, press Enter to switch", 13
|
||||||
|
DB "to the load sample screen.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState3 DB 0, 0, 79, 5
|
||||||
|
DB "A file called TUTE.IT was included with this tutorial. You should be able to", 13
|
||||||
|
DB "see it highlighted in the listing below. IT will hilight any file that it", 13
|
||||||
|
DB "recognises as a sound file. You can also navigate through your directories", 13
|
||||||
|
DB "from this menu. Select TUTE.IT and step into it by pressing Enter.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState4 DB 2, 28, 45, 39
|
||||||
|
DB "Here you can see a list of all the samples", 13
|
||||||
|
DB "that are contained within TUTE.IT. To have", 13
|
||||||
|
DB "a listen to how they sound, press the down", 13
|
||||||
|
DB "arrow once to hilight the first sample and", 13
|
||||||
|
DB "press 'Q'. Try moving to the other samples", 13
|
||||||
|
DB "and playing them. Try pressing 'W', 'E',", 13
|
||||||
|
DB "'R'. You will notice that the samples are", 13
|
||||||
|
DB "played at a different pitch. Once you've", 13
|
||||||
|
DB "heard all of the samples, select the Bass", 13
|
||||||
|
DB "Drum and press Enter.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState5 DB 36, 14, 78, 20
|
||||||
|
DB "OK! You have now loaded the Bass Drum", 13
|
||||||
|
DB "into memory. This means that you can use", 13
|
||||||
|
DB "it in your songs. Lets do that now!", 13, 13
|
||||||
|
DB "Press F2 to go to the pattern editor.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState6 DB 33, 16, 78, 19
|
||||||
|
DB "The pattern editor is where you set out the", 13
|
||||||
|
DB "notes that you want to play. Press 'Q'", 0
|
||||||
|
|
||||||
|
TutorialDisplayState7 DB 33, 16, 78, 35
|
||||||
|
DB "So what does this mean?", 13, 13
|
||||||
|
DB "C-5 01 ", 173, 173, " .00", 13, 13
|
||||||
|
DB "C-5 means to play the note C at octave 5.", 13
|
||||||
|
DB "01 means to use sample number 1.", 13, 13
|
||||||
|
DB "If this doesn't make sense now, don't worry!", 13
|
||||||
|
DB "All of this will be explained later in this", 13
|
||||||
|
DB "tutorial.", 13, 13
|
||||||
|
DB "For now, try to enter a Bass Drum every four", 13
|
||||||
|
DB "rows in Channel 1 (ie. on row 4, 8, 12, ...)", 13, 13
|
||||||
|
DB "Continue to use 'Q' to enter the notes. The", 13
|
||||||
|
DB "arrow keys may be of assistance. If you make", 13
|
||||||
|
DB "a mistake, use the '.' key to blank out the", 13
|
||||||
|
DB "entry.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState8 DB 33, 16, 78, 21
|
||||||
|
DB "OK, that's enough!", 13, 13
|
||||||
|
DB "Lets take a listen to what you've done.", 13
|
||||||
|
DB "Press F6 to play what you've entered.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState9 DB 33, 16, 78, 23
|
||||||
|
DB "As the pattern is played to you, you will", 13
|
||||||
|
DB "notice that a cursor on the left hand side", 13
|
||||||
|
DB "of the screen indicates the current playback", 13
|
||||||
|
DB "position. Press F6 to watch that again.", 13, 13
|
||||||
|
DB "When you're ready, press F8 to stop playback", 0
|
||||||
|
|
||||||
|
TutorialDisplayState10 DB 33, 16, 78, 25
|
||||||
|
DB "To finish off the task of entering the Bass", 13
|
||||||
|
DB "Drum, move up one row to row 16 and press", 13
|
||||||
|
DB "Alt-4. This will cause the cursor to step", 13
|
||||||
|
DB "4 rows after every note that you enter", 13
|
||||||
|
DB "instead of 1.", 13, 13
|
||||||
|
DB "Hold down 'Q' until Channel 1 has a Bass", 13
|
||||||
|
DB "Drum every 4 rows until row 60.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState11 DB 33, 16, 78, 21
|
||||||
|
DB "Now we'll add in a snare drum. Before we do", 13
|
||||||
|
DB "that though, set the cursor step back to", 13
|
||||||
|
DB "a single row at a time. Press Alt-1, then", 13
|
||||||
|
DB "F3 to go back to the sample list.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState12 DB 36, 14, 78, 18
|
||||||
|
DB "To load a sample into the second sample", 13
|
||||||
|
DB "slot, first press the down arrow a single", 13
|
||||||
|
DB "time so that sample two is hilighted.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState13 DB 36, 14, 72, 17
|
||||||
|
DB "Now press Enter to call up the Load", 13
|
||||||
|
DB "Sample screen.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState14 DB 7, 25, 42, 28
|
||||||
|
DB "Select the Snare Drum and load it", 13
|
||||||
|
DB "(by pressing Enter).", 0
|
||||||
|
|
||||||
|
TutorialDisplayState15 DB 36, 14, 74, 17
|
||||||
|
DB "And now return to the Pattern Editor", 13
|
||||||
|
DB "(F2)", 0
|
||||||
|
|
||||||
|
TutorialDisplayState16 DB 36, 16, 78, 24
|
||||||
|
DB "Press Ctrl-PgUp to move to the top of", 13
|
||||||
|
DB "the pattern and enter a snare drum in", 13
|
||||||
|
DB "every 4th row starting at line 2.", 13
|
||||||
|
DB 13
|
||||||
|
DB "Use C-5 again, and to make it easier, you", 13
|
||||||
|
DB "can set the skip to 4 once you've moved", 13
|
||||||
|
DB "to line 2.", 0
|
||||||
|
|
||||||
|
TutorialDisplayState17 DB 34, 16, 78, 19
|
||||||
|
DB "Have a listen to what you've just created!", 13
|
||||||
|
DB "(Press F6)", 0
|
||||||
|
|
||||||
|
TutorialDisplayState18 DB 36, 16, 78, 28
|
||||||
|
DB "As part of this tutorial, we'll try out", 13
|
||||||
|
DB "one of the block functions that IT", 13
|
||||||
|
DB "offers. Our goal is to halve the speed", 13
|
||||||
|
DB "at which this plays just by modifying", 13
|
||||||
|
DB "the pattern data. IT has two functions", 13
|
||||||
|
DB "that will automatically halve or double", 13
|
||||||
|
DB "the length of a hilighted block.", 13, 13
|
||||||
|
DB "First, hilight channel 1.", 13
|
||||||
|
DB "Move to the top of the channel first", 13
|
||||||
|
DB "by pressing Ctrl-PgUp, then press Alt-L", 0
|
||||||
|
|
||||||
|
TutorialDisplayState19 DB 36, 16, 78, 26
|
||||||
|
DB "Alt-L is a function which will mark the", 13
|
||||||
|
DB "entire channel that your cursor is", 13
|
||||||
|
DB "currently on. Pressing it twice will", 13
|
||||||
|
DB "mark the entire pattern. For now, we", 13
|
||||||
|
DB "only need the first channel so you do", 13
|
||||||
|
DB "not need to press it a second time.", 13
|
||||||
|
DB 13
|
||||||
|
DB "Now that the block is marked, press", 13
|
||||||
|
DB "Alt-G to actually double the block size!", 0
|
||||||
|
|
||||||
|
TutorialDisplayState20 DB 36, 16, 78, 33
|
||||||
|
DB "Uhhh. Ooops!! That was supposed to be", 13
|
||||||
|
DB "Alt-F. No matter - the automatic undo", 13
|
||||||
|
DB "in IT will be able to recover our data.", 13
|
||||||
|
DB "(Yes, we could just double it twice and", 13
|
||||||
|
DB "everything would be perfectly fine, but", 13
|
||||||
|
DB "this is meant to teach you about IT,", 13
|
||||||
|
DB "right? [smile])", 13
|
||||||
|
DB 13
|
||||||
|
DB "Whenever you do a block function in IT", 13
|
||||||
|
DB "the contents of the entire pattern is", 13
|
||||||
|
DB "saved first. IT will store up to 10 of", 13
|
||||||
|
DB "these in memory so that you can recover", 13
|
||||||
|
DB "from any mistakes that you make.", 13
|
||||||
|
DB 13
|
||||||
|
DB "Press Ctrl-Backspace to pull up the", 13
|
||||||
|
DB "undo menu.", 0
|
||||||
|
|
||||||
|
TutorialDisplayStatexx DB 33, 16, 78, 21
|
||||||
|
DB "Incomplete...", 0
|
||||||
|
|
||||||
|
TuteFileName DB "TUTE.IT"
|
||||||
|
BassDrumText DB "Bass Drum"
|
||||||
|
SnareDrumText DB "Snare Drum"
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State0
|
||||||
|
|
||||||
|
Cmp AL, 9
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State1
|
||||||
|
|
||||||
|
Cmp AL, 3
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State1
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State2
|
||||||
|
|
||||||
|
Cmp AL, 13
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State2
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State3
|
||||||
|
|
||||||
|
Push Disk
|
||||||
|
Pop ES
|
||||||
|
Assume ES:Disk
|
||||||
|
|
||||||
|
Cmp ES:SamplesInModule, 1
|
||||||
|
JNE Tute_State3a
|
||||||
|
|
||||||
|
Mov DI, Offset InSampleFileName
|
||||||
|
Mov SI, Offset TuteFileName
|
||||||
|
Mov CX, 7
|
||||||
|
RepE CmpsB
|
||||||
|
|
||||||
|
Tute_State3a:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State3
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State4
|
||||||
|
|
||||||
|
Call Music_GetSongSegment
|
||||||
|
Mov ES, AX
|
||||||
|
Mov DI, [ES:64912]
|
||||||
|
Mov SI, Offset BassDrumText
|
||||||
|
Add DI, 14h
|
||||||
|
Mov CX, 9
|
||||||
|
RepE CmpSB
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State4
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State5
|
||||||
|
|
||||||
|
Cmp AL, 2
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State5
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State6
|
||||||
|
|
||||||
|
Cmp Word Ptr [FS:0], 13Ch
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State6
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State7
|
||||||
|
|
||||||
|
Cmp Word Ptr [FS:320*16], 13Ch
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State7
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State8
|
||||||
|
|
||||||
|
Call Music_GetPlayMode
|
||||||
|
Cmp AX, 1
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State8
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State9
|
||||||
|
|
||||||
|
Call Music_GetPlayMode
|
||||||
|
Test AX, AX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State9
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State10
|
||||||
|
|
||||||
|
Cmp Word Ptr [FS:60*320], 13Ch
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State10
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State12
|
||||||
|
|
||||||
|
Call PE_GetLastInstrument
|
||||||
|
Cmp BX, 1
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State12
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State14
|
||||||
|
|
||||||
|
Call Music_GetSongSegment
|
||||||
|
Mov ES, AX
|
||||||
|
Mov DI, [ES:64914]
|
||||||
|
Mov SI, Offset SnareDrumText
|
||||||
|
Add DI, 14h
|
||||||
|
Mov CX, 10
|
||||||
|
RepE CmpSB
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State14
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_StateEnd
|
||||||
|
|
||||||
|
Inc AX ; Ensure zero flag is not set.
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_StateEnd
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State16
|
||||||
|
|
||||||
|
Cmp Word Ptr [FS:62*320], 23Ch
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State16
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State18
|
||||||
|
|
||||||
|
Cmp [Word Ptr GS:LastKeyboard1+2], 2600h
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State18
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Tute_State19
|
||||||
|
|
||||||
|
Cmp [Word Ptr GS:LastKeyboard1+2], 2200h
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Tute_State19
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc Glbl_TutorialHandler Far
|
||||||
|
|
||||||
|
PushAD
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Glbl
|
||||||
|
|
||||||
|
Push Pattern
|
||||||
|
Pop GS
|
||||||
|
|
||||||
|
Mov FS, [GS:PatternDataArea]
|
||||||
|
Assume FS:Nothing
|
||||||
|
|
||||||
|
Mov BX, [TutorialState]
|
||||||
|
Mov AL, CurrentMode
|
||||||
|
LEA SI, [EBX+EBX]
|
||||||
|
|
||||||
|
Push BX
|
||||||
|
Call [TutorialFunctionArray+SI]
|
||||||
|
Pop BX
|
||||||
|
JNE Glbl_TutorialHandler1
|
||||||
|
|
||||||
|
Inc BX
|
||||||
|
|
||||||
|
Glbl_TutorialHandler1:
|
||||||
|
Mov [TutorialState], BX
|
||||||
|
|
||||||
|
Cmp BX, MAXTUTESTATE
|
||||||
|
JAE Tute_TuteFinished
|
||||||
|
|
||||||
|
Xor AX, AX
|
||||||
|
LEA SI, [EBX+EBX]
|
||||||
|
Mov SI, [TutorialInfoArray+SI]
|
||||||
|
LodsB
|
||||||
|
Push AX
|
||||||
|
LodsB
|
||||||
|
Push AX
|
||||||
|
LodsB
|
||||||
|
Push AX
|
||||||
|
LodsB
|
||||||
|
Push AX
|
||||||
|
Mov AL, 30
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Call S_DrawBox
|
||||||
|
Add SP, 10
|
||||||
|
Mov AL, 80
|
||||||
|
Mul Byte Ptr [SI-3] ; y*80
|
||||||
|
Add AL, Byte Ptr [SI-4]
|
||||||
|
AdC AH, 0
|
||||||
|
LEA DI, [EAX+EAX]
|
||||||
|
Add DI, (80+1)*2
|
||||||
|
Mov AH, 13h
|
||||||
|
Call S_DrawString
|
||||||
|
|
||||||
|
Tute_TuteFinished:
|
||||||
|
Pop DS
|
||||||
|
PopAD
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP Glbl_TutorialHandler
|
||||||
|
Assume DS:Nothing, FS:Nothing
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
End
|
|
@ -0,0 +1,226 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Vesa Module ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ Functions provided: ³
|
||||||
|
;³ DetectVESA ³
|
||||||
|
;³ SetVESAMode ³
|
||||||
|
;³ ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ DetectVESA ³
|
||||||
|
;³ - No parameters required ³
|
||||||
|
;³ - Detects the presence of a VESA driver ³
|
||||||
|
;³ - Returns carry SET if no VESA driver found ³
|
||||||
|
;³ - Returns carry CLEAR if VESA driver found ³
|
||||||
|
;³ - All registers preserved ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ SetVESAMode ³
|
||||||
|
;³ - Requires AX = VESA Mode ³
|
||||||
|
;³ - Returns carry SET if VESA Mode isn't supported ³
|
||||||
|
;³ - Returns carry CLEAR if VESA mode change OK ³
|
||||||
|
;³ - All registers preserved ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ VESAGetInfo ³
|
||||||
|
;³ - Requires AX = VESA Mode to get information on ³
|
||||||
|
;³ - Returns carry SET if VESA Mode isn't supported ³
|
||||||
|
;³ - Returns carry clear if information is OK ³
|
||||||
|
;³ - Returns ES:DI to Table, all other registers preserved ³
|
||||||
|
;³ ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Jumps
|
||||||
|
.386P
|
||||||
|
|
||||||
|
include switch.inc
|
||||||
|
|
||||||
|
IF SPECTRUMANALYSER
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Externals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Globals ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Segment Vesa BYTE Public 'Code' USE16
|
||||||
|
Assume CS:Vesa, DS:Nothing
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Variables ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
VESAInformationTable Label
|
||||||
|
VESASignature DB 4 Dup (0)
|
||||||
|
VESAVersion DW 0
|
||||||
|
VESAOEMStringPrt DD 0
|
||||||
|
VESACapabilities DD 0
|
||||||
|
VESAVideoModePtr DD 0
|
||||||
|
VESATotalMemory DW 0
|
||||||
|
DB 256-($-VESAInformationTable) Dup(0)
|
||||||
|
|
||||||
|
VESAModeInformationTable Label
|
||||||
|
DB 256-($-VESAModeInformationTable) Dup (0)
|
||||||
|
|
||||||
|
ModeInformationStructure Struc
|
||||||
|
ModeAtributes DW ?
|
||||||
|
WindowAAtributes DB ?
|
||||||
|
WindowBAttributes DB ?
|
||||||
|
WindowGranularity DW ?
|
||||||
|
WindowSize DW ?
|
||||||
|
WindowASegment DW ?
|
||||||
|
WindowBSegment DW ?
|
||||||
|
WindowFunction DD ?
|
||||||
|
BytesPerScanLine DW ?
|
||||||
|
|
||||||
|
XResolution DW ?
|
||||||
|
YResolution DW ?
|
||||||
|
XCharacterSize DB ?
|
||||||
|
YCharacterSize DB ?
|
||||||
|
NumberOfPlanes DB ?
|
||||||
|
BitsPerPixel DB ?
|
||||||
|
NumberOfBanks DB ?
|
||||||
|
MemoryModel DB ?
|
||||||
|
BankSize DB ?
|
||||||
|
NumberOfImagePages DB ?
|
||||||
|
Reserved DB ?
|
||||||
|
|
||||||
|
RedMaskSize DB ?
|
||||||
|
RedFieldPosition DB ?
|
||||||
|
GreenMaskSize DB ?
|
||||||
|
GreenFieldPosition DB ?
|
||||||
|
BlueMaskSize DB ?
|
||||||
|
BlueFieldPosition DB ?
|
||||||
|
RSVDMaskSize DB ?
|
||||||
|
DirectColourModeInfo DB ?
|
||||||
|
|
||||||
|
ModeInformationStructure EndS
|
||||||
|
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ Functions ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Proc VESA_Detect Far
|
||||||
|
Public VESA_Detect
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Mov AX, 4F00h
|
||||||
|
Push CS
|
||||||
|
Pop ES
|
||||||
|
Mov DI, Offset VESAInformationTable
|
||||||
|
Int 10h
|
||||||
|
|
||||||
|
Cmp AX, 4Fh
|
||||||
|
JNE DetectVESA1
|
||||||
|
Cmp [DWord Ptr ES:DI], "ASEV" ; 'VESA' identification
|
||||||
|
JNE DetectVESA1
|
||||||
|
|
||||||
|
DB 85h
|
||||||
|
|
||||||
|
DetectVESA1:
|
||||||
|
StC
|
||||||
|
|
||||||
|
Pop ES
|
||||||
|
PopA
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP VESA_Detect
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc VESA_SetMode Far
|
||||||
|
Public VESA_SetMode
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
Push ES
|
||||||
|
|
||||||
|
Call VESA_GetInfo
|
||||||
|
JC VESA_SetMode3
|
||||||
|
|
||||||
|
Mov BX, AX
|
||||||
|
Mov AX, 4F02h ; Set Mode
|
||||||
|
Int 10h
|
||||||
|
Cmp AX, 4Fh
|
||||||
|
JE VESA_SetMode3
|
||||||
|
|
||||||
|
StC
|
||||||
|
|
||||||
|
VESA_SetMode3:
|
||||||
|
Pop ES
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
|
||||||
|
Mov CX, [VESAModeInformationTable.XResolution]
|
||||||
|
Mov DX, [VESAModeInformationTable.YResolution]
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP VESA_SetMode
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc VESA_GetInfo
|
||||||
|
Public VESA_GetInfo
|
||||||
|
|
||||||
|
Push AX
|
||||||
|
Push CX
|
||||||
|
|
||||||
|
Mov CX, AX
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop ES
|
||||||
|
Mov DI, Offset VESAModeInformationTable
|
||||||
|
Mov AX, 4F01h
|
||||||
|
Int 10h
|
||||||
|
|
||||||
|
Cmp AX, 4Fh
|
||||||
|
JE VESA_GetInfo1
|
||||||
|
|
||||||
|
StC
|
||||||
|
|
||||||
|
VESA_GetInfo1:
|
||||||
|
Pop CX
|
||||||
|
Pop AX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP VESA_GetInfo
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc VESA_SetBlock Far ; Gives access to a 64kb block
|
||||||
|
Public VESA_SetBlock ; Given AX = block number.
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push AX
|
||||||
|
|
||||||
|
Mov AX, 64
|
||||||
|
Xor DX, DX
|
||||||
|
Div Word Ptr [VESAModeInformationTable.WindowGranularity]
|
||||||
|
Mov DX, AX
|
||||||
|
Pop AX
|
||||||
|
Mul DX
|
||||||
|
Mov DX, AX
|
||||||
|
Xor BX, BX
|
||||||
|
Call DWord Ptr [VESAModeInformationTable.WindowFunction]
|
||||||
|
|
||||||
|
PopA
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP VESA_SetBlock
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
End
|
|
@ -0,0 +1,279 @@
|
||||||
|
Host Channel Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
|
||||||
|
0000:³ Flags ³Msk³Nte³Ins³Vol³Cmd&Val³OCm&Val³VCm&Val³MCh³MPr³Nt2³Smp³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´
|
||||||
|
0010:³DKL³EFG³O00³I00³J00³M00³N00³P00³Q00³T00³S00³OxH³W00³VCE³GOE³SFx³ GOE = Gxx
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ with old
|
||||||
|
0020:³HCN³CUC³VSe³LTr³SCOffst³PLR³PLC³PWF³PPo³PDp³PSp³LPn³LVi³CP ³CV ³ effects
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´
|
||||||
|
0030:³VCh³TCD³Too³RTC³Porta Frequency³VWF³VPo³VDp³VSp³TWF³TPo³TDp³TSp³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0040:³ Misc Effect Data............................................. ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
þ Update Mode
|
||||||
|
ù 2 Bits (0-3)
|
||||||
|
ú 0: Don't update effect
|
||||||
|
ú 1: Update effect if channel is on
|
||||||
|
ú 2: Always update effect
|
||||||
|
|
||||||
|
þ Channel On
|
||||||
|
ù 1 Bit (4)
|
||||||
|
ú 0: Channel is off
|
||||||
|
ú 1: Channel is on
|
||||||
|
|
||||||
|
þ Channel Cut ; No longer implemented
|
||||||
|
ù 1 Bit (8)
|
||||||
|
ú 0: No Channel Cut command
|
||||||
|
ú 1: Channel Cut command issued
|
||||||
|
|
||||||
|
þ Slide in progress (Commands G/L)
|
||||||
|
ù 1 Bit (16)
|
||||||
|
ú 0: No slide in progress
|
||||||
|
ú 1: Slide in progress
|
||||||
|
|
||||||
|
þ Freeplay note (ie. Don't check channel on/off)
|
||||||
|
ù 1 Bit (32)
|
||||||
|
ú 0: Not freeplay -> Check channel
|
||||||
|
ú 1: Freeplay -> Don't check channel
|
||||||
|
|
||||||
|
+64 = row updated.
|
||||||
|
|
||||||
|
+ 128 = Apply random volume
|
||||||
|
|
||||||
|
+256 Volume column effect requires updating if channel on
|
||||||
|
+512 Volume column effect requires updating always.
|
||||||
|
+32768 = Dont' touch in interrupt!
|
||||||
|
|
||||||
|
þ Decoding Data
|
||||||
|
ù Msk, Nte, Ins, Vol, Cmd&Val, ONt, OIn, OVl, OCm&Val
|
||||||
|
Msk = Read mask: Bit 0 or 4 = Note read
|
||||||
|
Bit 1 or 5 = Instrument read
|
||||||
|
Bit 2 or 6 = Volume read
|
||||||
|
Bit 3 or 7 = Command/Command Value read
|
||||||
|
|
||||||
|
þ Smp & Nt2
|
||||||
|
ù Sample Number (zero based) and Note (after translation if using inst.)
|
||||||
|
|
||||||
|
þ CP. = Channel Pan
|
||||||
|
þ CV. = Channel Volume
|
||||||
|
|
||||||
|
þ SCN = Slave Channel Number
|
||||||
|
þ CUC = Command Update Count. For playmode 0
|
||||||
|
þ SCOffst = Slave channel number offset
|
||||||
|
|
||||||
|
þ VWF = Vibrato wave form
|
||||||
|
þ TWF = Tremelo wave form
|
||||||
|
þ PWF = Panning wave form
|
||||||
|
|
||||||
|
PLR = Pattern loop row
|
||||||
|
PLC = pattern loop count.
|
||||||
|
|
||||||
|
VSe = Volume set
|
||||||
|
|
||||||
|
LVi = Last vibrato.
|
||||||
|
LTr = Last tremelo.
|
||||||
|
Dir = Porta direction
|
||||||
|
RTC = Retrig count
|
||||||
|
Too = tremor on/off ; on = 1
|
||||||
|
TCD = tremor count down
|
||||||
|
|
||||||
|
OxH = High order Offset for yxx00h
|
||||||
|
|
||||||
|
VCh = Volume change (For Command D)
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Slave Channel Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000:³ Flags ³ Device specific...............³LpM³LpD³ Left Volume ³
|
||||||
|
ÃÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
0010:³ Frequency ³ Frequency Set ³Bit³ViP³ViDepth³ RVol/MIDIFSet ³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
0020:³FV ³Vol³VS ³CVl³SVl³FP ³FadeOut³DCT³DCA³Pan³PS ³OldSampleOffset³
|
||||||
|
ÃÄÄÄÁÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄ´
|
||||||
|
0030:³InsOffs³Nte³Ins³SmpOffs³Smp³FPP³HCOffst³HCN³NNA³MCh³MPr³ MBank ³
|
||||||
|
ÃÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÅÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÁÄÄÄÅÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄ´
|
||||||
|
0040:³ Loop Beginning³ Loop End ³SmpErr.³16bVol ³ Sample Offset ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´
|
||||||
|
0050:³VEnvelopeValue ³VEnvelopeDelta ³VEnvPos³CurVEnN³NextVET³filtera³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´
|
||||||
|
0060:³PEnvelopeValue ³PEnvelopeDelta ³PEnvPos³CurVEnN³NextPET³filterb³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´
|
||||||
|
0070:³PtEnvelopeValue³PtEnvelopeDelta³PtEvPos³CurPtEN³NxtPtET³filterc³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
For MIDI, [SI+0Bh] = Pattern note
|
||||||
|
|
||||||
|
Reqd values: VEnvValue (DWord), VEnvDelta (DWord), VEnvPos (Word), NextVEnvNode
|
||||||
|
PEnvValue (DWord), PEnvDelta (DWord), PEnvPos (Word), NextPEnvNode
|
||||||
|
PtEnvValue (DWord), PtEnvDelta (DWord), PtEnvPos (Word), NextPtEnv
|
||||||
|
|
||||||
|
Reqd flags: VolEnvOn, PEnvOn, PtEnvOn
|
||||||
|
|
||||||
|
FP = final pan.
|
||||||
|
FPP = final playing pan, taking into account reverse.
|
||||||
|
|
||||||
|
MBank also doubled as Filter freq, resonance
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
þ Channel On
|
||||||
|
ù 1 Bit (1)
|
||||||
|
ú 0: Channel is off
|
||||||
|
ú 1: Channel is on
|
||||||
|
þ Recalculate panning (2)
|
||||||
|
|
||||||
|
þ Note Off (ie. Sustain)
|
||||||
|
ù 1 Bit (4)
|
||||||
|
ú 0: No Note Off command (ie. Sustain on)
|
||||||
|
ú 1: Note Off command issued (ie. Sustain off)
|
||||||
|
þ FadeOut
|
||||||
|
ù 1 Bit (8)
|
||||||
|
ú 0: No FadeOut command
|
||||||
|
ú 1: Apply FadeOut
|
||||||
|
þ Recalculate volume
|
||||||
|
ù 1 Bit (16)
|
||||||
|
ú 0: Volume doesn't need to be calculated
|
||||||
|
ú 1: Volume needs to be recalculated
|
||||||
|
þ Frequency change
|
||||||
|
ù 1 Bit (32)
|
||||||
|
ú 0: Frequency has NOT changed
|
||||||
|
ú 1: Frequency HAS changed
|
||||||
|
þ Recalculate Final volume...
|
||||||
|
ù 1 Bit (64)
|
||||||
|
ú 0: Final volume does not need to be calculated
|
||||||
|
ú 1: Final volume DOES need to be calculated.
|
||||||
|
|
||||||
|
þ Central pan...
|
||||||
|
ù 1 Bit (128)
|
||||||
|
ú 0: Use whatever is given.
|
||||||
|
ú 1: Always use central pan (for sample list/instrument list)
|
||||||
|
|
||||||
|
þ New note!
|
||||||
|
ù 1 Bit (256)
|
||||||
|
ú 0: No new note
|
||||||
|
ú 1: New note to play.
|
||||||
|
|
||||||
|
þ Note stop (cut) ; IMPORTANT FOR GUS!!!
|
||||||
|
ù 1 Bit (512)
|
||||||
|
ú 0: note NOT cut
|
||||||
|
ú 1: Note CUT
|
||||||
|
|
||||||
|
þ Loop changed. (1024)
|
||||||
|
|
||||||
|
þ Channel muted (2048) ; 2^11
|
||||||
|
|
||||||
|
þ Vol Envelope on (4096) ; 1000h
|
||||||
|
þ Pan Envelope on (8192) ; 2000h
|
||||||
|
þ Pitch Envelope on (16384) ; 4000h
|
||||||
|
|
||||||
|
þ Pan value changed ; 8000h
|
||||||
|
Recalculate final pan
|
||||||
|
|
||||||
|
LpM
|
||||||
|
þ LoopMode
|
||||||
|
ù 0: No Loop
|
||||||
|
ù 8: Forwards Loop
|
||||||
|
ù 24: Ping Pong Loop ; Values are just for GUS convenience
|
||||||
|
|
||||||
|
LpD
|
||||||
|
þ LoopDirection (for ping pong), ; 0 = forwards, 1 = backwards.
|
||||||
|
|
||||||
|
þ FadeOut = Fadeout Count (0-255)
|
||||||
|
þ CVl = Channel Volume
|
||||||
|
þ HCN = Host Channel Number. +128 if "disowned"
|
||||||
|
þ Smp = Sample number
|
||||||
|
þ Pan: 0->64, 100 = Surround, >= 128 = muted.
|
||||||
|
þ FnV: Final Volume
|
||||||
|
|
||||||
|
þ Bit: 2 = 16, 0 = 8.
|
||||||
|
|
||||||
|
þ ViD: Vibrato Depth
|
||||||
|
þ ViS: Vibrato Speed
|
||||||
|
|
||||||
|
þ VEP: Volume Envelope position
|
||||||
|
þ VEV: Volume Envelope value
|
||||||
|
|
||||||
|
þ Ins: Instrument number (0 based, 0FFh if none)
|
||||||
|
þ Smp: Sample number (0 based)
|
||||||
|
|
||||||
|
þ Frequency = Final note frequency. Incorportes vibrato
|
||||||
|
þ Frequency Set = Calculated Frequency of note. Calculated once when played
|
||||||
|
Altered by effects E,F,G,L
|
||||||
|
|
||||||
|
þ VS = Volume Set. Similar to Frequency Set. Affected by D,K,L
|
||||||
|
þ Vol = Volume. Altered by effects R,I
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Sound Blaster Output Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂ
|
||||||
|
0000:³(Flags)³ Skip Value ³Vol³ x ³MixMode³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÅ
|
||||||
|
|
||||||
|
For non-looped samples, 44h is LENGTH.
|
||||||
|
|
||||||
|
Sound Blaster Pro Output Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂ
|
||||||
|
0000:³(Flags)³ Skip Value ³LVl³RVl³MixMode³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÅ
|
||||||
|
|
||||||
|
Skip Value
|
||||||
|
þ 16.16 bit fixed point
|
||||||
|
|
||||||
|
Vol/LVl/RVl
|
||||||
|
þ Output Volume / Left Volume / Right Volume
|
||||||
|
ù Accounts for:
|
||||||
|
ú Channel Volume
|
||||||
|
ú Global Volume
|
||||||
|
ú Sample Global Volume
|
||||||
|
ú Fade Out
|
||||||
|
|
||||||
|
MMd: 0 If Left only
|
||||||
|
1 If right only
|
||||||
|
2 if Left = Right
|
||||||
|
3 if Panned
|
||||||
|
4 if Surround
|
||||||
|
5 if position update.
|
||||||
|
|
||||||
|
|
||||||
|
+32 for 16 bit samples
|
||||||
|
+8 for looped
|
||||||
|
+24 for ping pong.
|
||||||
|
|
||||||
|
UltraSound Output Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂ
|
||||||
|
0000:³(Flags)³LastVol³Freqval³ ³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅ
|
||||||
|
|
||||||
|
Frequency Value used in dynamic GUS drivers
|
||||||
|
|
||||||
|
AWE32 Output Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂ
|
||||||
|
0000:³(Flags)³ x ³ x ³ Freqvalue ³ ³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅ
|
||||||
|
|
||||||
|
Frequency Value used in floating point AWE32 drivers
|
||||||
|
|
||||||
|
SAM Output Structure
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂ
|
||||||
|
0000:³(Flags)³opn³ x ³ ³ ³ ³ ³ ³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÅ
|
||||||
|
|
||||||
|
opn = 1 if voice is opened, 0 if not.
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
Configuration file for IT.EXE
|
||||||
|
|
||||||
|
Offset Length Meaning
|
||||||
|
0 70 Module directory
|
||||||
|
70 70 Sample directory
|
||||||
|
140 70 Instrument directory
|
||||||
|
210 1 Keyboard style <not used any more!>
|
||||||
|
|
||||||
|
211 3*16 Palette information
|
||||||
|
|
||||||
|
259 50 Display window setup
|
||||||
|
Structure is 6*8 bytes, followed by 1 word = number of windows
|
||||||
|
Structure of each 8 byte record is:
|
||||||
|
Word: Method. (0 = volume bars, 1 = 5 track view, etc)
|
||||||
|
Byte: Top channel
|
||||||
|
Byte: Top line on screen
|
||||||
|
Word: Length of window
|
||||||
|
Word: Display memory offset of top left of window.
|
||||||
|
|
||||||
|
309 217 bytes so far Pattern edit setup.
|
||||||
|
|
||||||
|
Offset (W = word, B = byte)
|
||||||
|
|
||||||
|
309 W - MUST be 0 (key signatures not defined)
|
||||||
|
311 W - number of channels to edit (5, but recalculated
|
||||||
|
whenever the screen changes)
|
||||||
|
313 B - Row hilight minor (eg. every 4)
|
||||||
|
314 B - Row hilight major (eg. every 16)
|
||||||
|
315 B - Edit mask. Bit 0 = edit ins, 1 = edit vol, 2 = edit FX
|
||||||
|
316 B - View division (1= show divisions)
|
||||||
|
317 W - Number of 'viewed' channels
|
||||||
|
319 100W - Channel viewmethods. First word = channel
|
||||||
|
Second word = method
|
||||||
|
Methods: 0 = full edit
|
||||||
|
1 = compressed edit
|
||||||
|
2 = extra compressed edit
|
||||||
|
3 = 3-character selective edit
|
||||||
|
4 = 2 character selective edit
|
||||||
|
|
||||||
|
0FFFFh indicates end of list
|
||||||
|
|
||||||
|
519 B - View-channel cursor tracking (1 = on)
|
||||||
|
520 B - Effect/Effectvalue link (1 = on)
|
||||||
|
521 B - Flags. Bit 0 = centralise cursor
|
||||||
|
Bit 1 = hilight current row
|
||||||
|
Bit 2 = fast volume changes
|
||||||
|
Bit 3 = MIDI Quantize to tick
|
||||||
|
Bit 4 = MIDI program base 1
|
||||||
|
Bit 5 = MIDI record note-offs
|
||||||
|
Bit 6 = MIDI record velocity
|
||||||
|
Bit 7 = MIDI Record aftertouch
|
||||||
|
522 B - MIDIAmplification
|
||||||
|
523 B - MIDICentral note
|
||||||
|
524 W - Fast volume amplification
|
|
@ -0,0 +1,143 @@
|
||||||
|
|
||||||
|
Here's something that might help you... I wrote it quite fast but it should
|
||||||
|
be accurate ;) However, there's probably a lot of stuff here that you don't
|
||||||
|
need/understant for now... but keep all this, you'll need it soon ;)
|
||||||
|
|
||||||
|
--> This is NOT the "official" Tehcnical stuff....
|
||||||
|
|
||||||
|
File Header:
|
||||||
|
|
||||||
|
offset type/size comment
|
||||||
|
------ --------- ---------------------------------
|
||||||
|
0 char[8] Signature: 'ziRCONia'
|
||||||
|
|
||||||
|
8 word file header size (from offset 10, not counting this
|
||||||
|
word)
|
||||||
|
10 word version 0xyyzh (x.yy) (displayed in hex. no conversion)
|
||||||
|
z: 0 nothing
|
||||||
|
1-0eh revision a to n (-may- be useful...)
|
||||||
|
0fh Beta
|
||||||
|
12 word number of blocks within file
|
||||||
|
14 dword total length of unpacked file
|
||||||
|
18 dword file offset where is located the "block offset table"
|
||||||
|
22 word dummy... must currently be 0ffffH
|
||||||
|
|
||||||
|
|
||||||
|
The block offset table is simply N_of_Block dwords which are the
|
||||||
|
absolute position of each block in the file. Each of those blocks have
|
||||||
|
the following header:
|
||||||
|
|
||||||
|
0 dword unpacked size
|
||||||
|
4 dword compressed size
|
||||||
|
8 dword XOR check (see note below)
|
||||||
|
12 word number of "sub-blocks" (nblk)
|
||||||
|
14 word flags (see below)
|
||||||
|
16 word number of translation table entry } for compression
|
||||||
|
18 word start number of bit } don't mind them
|
||||||
|
for now...
|
||||||
|
20 sub-block[nblk] Sub-blocks of data info.
|
||||||
|
|
||||||
|
each sub-block has the following info:
|
||||||
|
0 dword absolute position in uncompressed file
|
||||||
|
4 dword size of uncompressed block
|
||||||
|
all "nblk" sub-block info are stored right after the block header.
|
||||||
|
|
||||||
|
Those small blocks are only non-contiguous blocks of the "same type"
|
||||||
|
grouped together within one bigger block for better compression.
|
||||||
|
|
||||||
|
- XOR check: instead of implementing a CRC, I coded a XOR check.
|
||||||
|
How it works: a dword variable is set to 0, and XORed
|
||||||
|
with every complete 4 bytes of the original data of the
|
||||||
|
"bigblock". Remaining bytes (i.e, size of bigblock is
|
||||||
|
not a multiple of 4) are simply ignored. This is only
|
||||||
|
to implement a minimal check of destination when
|
||||||
|
decompressing.
|
||||||
|
|
||||||
|
- Flags: this is a 16 bits field:
|
||||||
|
|
||||||
|
15 14 13 12 11 10 9 8
|
||||||
|
ÚÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ¿
|
||||||
|
³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³Abs16³ M/S ³
|
||||||
|
ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ
|
||||||
|
7 6 5 4 3 2 1 0
|
||||||
|
ÚÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄÂÄÄÄÄÄ¿
|
||||||
|
³ R ³ T y p e ³ R ³ 8/16³Delta³Comp.³
|
||||||
|
ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ
|
||||||
|
bits marked as "0" MUST be 0 (they are reserved for future
|
||||||
|
extensions...) Every "1" must be considered as invalid or
|
||||||
|
unsupported feature (compressed by a newer version of MMCMP)
|
||||||
|
bits marked as "R" are reserved (used during compression processing
|
||||||
|
and they don't mean much within the file...) No check should be
|
||||||
|
performed on those bits.
|
||||||
|
|
||||||
|
- Comp.: 0: not compressed
|
||||||
|
1: compressed
|
||||||
|
- Delta: 0: data is not changed
|
||||||
|
1: data is Delta (every byte or word is the difference
|
||||||
|
between itself and the previous one. First byte or word
|
||||||
|
is compared to 0.
|
||||||
|
- 8/16: 0: 8 bits compression scheme
|
||||||
|
1: 16 bits compression scheme
|
||||||
|
- M/S: 0: mono
|
||||||
|
1: stereo (not implemented yet) MUST BE 0
|
||||||
|
|
||||||
|
- Abs16 Whithin compression algorithm, 16 bits samples are
|
||||||
|
converted to deltas and transformed a bit so there's
|
||||||
|
no negative numbers. However, some trackers already
|
||||||
|
convert data to deltas, but there's still the little
|
||||||
|
transformation to do.
|
||||||
|
0: don't do it
|
||||||
|
1: do it
|
||||||
|
Note: This bit IS NOT checked if Delta bit is 1, but
|
||||||
|
should be 0 in this case. May only be set if
|
||||||
|
Delta bit is 0.
|
||||||
|
|
||||||
|
- Type: This field doesn't really serve any purpose ;) but
|
||||||
|
helping identify type of data in this block. There's
|
||||||
|
no strict identifier but the following block types are
|
||||||
|
used by MMCMP (warning: do not expect the following to
|
||||||
|
always be true... data of different types for us (e.g
|
||||||
|
instrument header and sample header) may be interpreted
|
||||||
|
as the same type of block (they are contiguous, or
|
||||||
|
similar, etc...) for better compression.) The three
|
||||||
|
bits are stored in the order you would expect (MSB at
|
||||||
|
left, LSB at right)
|
||||||
|
|
||||||
|
0: Module identifier: the firsts bytes of a module
|
||||||
|
(this type must NOT be used for anything else...)
|
||||||
|
1: Module header: anything useful in the header, which
|
||||||
|
is not in block-type 0 (actually not used by MMCMP)
|
||||||
|
2: instrument header
|
||||||
|
3: sample header
|
||||||
|
4: patterns
|
||||||
|
5: sample
|
||||||
|
6: no definition yet...
|
||||||
|
7: remaining (every part of the module that hasn't
|
||||||
|
been thrown into the "block list" (i.e probably
|
||||||
|
don't fit under any block types...)
|
||||||
|
|
||||||
|
Note that MMCMP sorting scheme puts block of type 0
|
||||||
|
first and type 7 last. This is also some sort of
|
||||||
|
priority. As for now, know that block of type 0 is
|
||||||
|
UNIQUE and is the FIRST.
|
||||||
|
|
||||||
|
|
||||||
|
Scanning files:
|
||||||
|
|
||||||
|
1. Check if installed and disable MMTSR
|
||||||
|
2. Open module
|
||||||
|
3. Check signature. If not 'ziRCONia' jump to 11
|
||||||
|
4. read "block offset table" offset field (dword at offset 18)
|
||||||
|
(and any other info you would like to read)
|
||||||
|
5. jump to this position within the file
|
||||||
|
6. read the first entry of the table (position of block 0)
|
||||||
|
7. jump to this position within the file
|
||||||
|
8. read the block header.
|
||||||
|
9. If block-type field is not 0, jump to 6 and read the next entry
|
||||||
|
instead. (the first block should be of type 0. If not, there's
|
||||||
|
probably no block of this type...)
|
||||||
|
10.Read the uncompressed data (it should not have the compressed flag
|
||||||
|
set)
|
||||||
|
11.reenable MMTSR if installed
|
||||||
|
12.Do what you would do with the header info and close module if you
|
||||||
|
wish...
|
|
@ -0,0 +1,126 @@
|
||||||
|
|
||||||
|
Network protocol for Impulse Tracker
|
||||||
|
|
||||||
|
Impulse Tracker will only interface with similar versions of IT.
|
||||||
|
|
||||||
|
Block format
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Word Block type
|
||||||
|
2 Word Block length
|
||||||
|
4 Data Basic data, depending on block type.
|
||||||
|
x+[2] Word CRC Check
|
||||||
|
|
||||||
|
Block types
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 0 - Acknowledge receipt - targeted
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Word Block type received
|
||||||
|
2 Word Status
|
||||||
|
|
||||||
|
Status: Bit 0 = Off = OK, On = resend
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 1 - Ping
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 String "Impulse Tracker 2.?? Ping Packet"
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 2 - Pattern data packet - global
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Byte Pattern number
|
||||||
|
1 Byte Row
|
||||||
|
2 Byte Column
|
||||||
|
3 Byte Data mask
|
||||||
|
4 Varies Data
|
||||||
|
|
||||||
|
Data mask
|
||||||
|
Bit 0: Note
|
||||||
|
Bit 1: Instrument
|
||||||
|
Bit 2: Volume
|
||||||
|
Bit 3: Effect
|
||||||
|
Bit 4: Effect data
|
||||||
|
|
||||||
|
Absence of information does NOT imply clearing.
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 3 - Pattern data block packet - global
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Byte Pattern number
|
||||||
|
1 Byte Block width
|
||||||
|
2 Byte Block height
|
||||||
|
3 Varies Data
|
||||||
|
|
||||||
|
Data is a block_width * block_height array as structured:
|
||||||
|
|
||||||
|
Data mask:
|
||||||
|
Bit 0: Note
|
||||||
|
Bit 1: Instrument
|
||||||
|
Bit 2: Volume
|
||||||
|
Bit 3: Effect
|
||||||
|
Bit 4: Effect data
|
||||||
|
|
||||||
|
Absence of information DOES imply clearing.
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 4 - "Song Segment variable" modification - global
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Word Offset in SongSegment
|
||||||
|
2 Word Length of data
|
||||||
|
4 Varies Data
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 5 - Sample data - global
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Word Sample number
|
||||||
|
4 DWord Offset in sample
|
||||||
|
8 Varies Data
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Block type 6 - Chat packet - targeted/global
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Offset Size Meaning
|
||||||
|
0 Word Length of data
|
||||||
|
2 Varies Data
|
||||||
|
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Functions required of the drivers
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
Initialise - basic setup code. Return error if driver unavailable in current
|
||||||
|
environment.
|
||||||
|
Connect Interface - provides connection interface, sets up a tracking
|
||||||
|
connection, returns a handle
|
||||||
|
Management Interface - provides management interface for connection,
|
||||||
|
status information etc.
|
||||||
|
Disconnect - shut down a tracking connection to a particular handle
|
||||||
|
MaximumPacketSize - returns the maximum size in bytes that the driver can
|
||||||
|
process at any time.
|
||||||
|
Send data - given handle (0 = send to all), data packet (a maximum size as
|
||||||
|
returned by MaximumPacketsize)
|
||||||
|
Receive data poll - called frequently by the main program to check for
|
||||||
|
incoming data. Approx. 2nd highest priority (after
|
||||||
|
sound driver IRQ)
|
||||||
|
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
Functions provided to the drivers
|
||||||
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
||||||
|
|
||||||
|
ProcessDataReveived - called when any data is received.
|
||||||
|
UnloadDriver - remove driver from memory (when no connections exist any longer)
|
||||||
|
Alert - when data is not being transferred.
|
|
@ -0,0 +1,233 @@
|
||||||
|
Object Types
|
||||||
|
|
||||||
|
Type 0: Box
|
||||||
|
Offset 0: DW 0
|
||||||
|
Offset 2-5: DB Left/Top/Right/Bottom coordinates
|
||||||
|
Offset 6: DB Style.
|
||||||
|
|
||||||
|
Style Variables
|
||||||
|
0: Thin box, dark all around
|
||||||
|
1: Thin box, light all around
|
||||||
|
2: Thick box, dark all around
|
||||||
|
3: Thick box, light all around
|
||||||
|
4: Thin box, 'Up'
|
||||||
|
5: Thin box, 'Down'
|
||||||
|
6: Thick box, 'Up'
|
||||||
|
7: Thick box, 'Down'
|
||||||
|
8: Within thin box, 'Up'
|
||||||
|
9: Within thin box, 'Down'
|
||||||
|
10: Within thick box, 'Up'
|
||||||
|
11: Within thick box, 'Down'
|
||||||
|
12: Within thin box, dark }
|
||||||
|
13: Within thin box, light } Empty boxes.
|
||||||
|
14: Within thick box, dark }
|
||||||
|
15: Within thick box, light }
|
||||||
|
+16 = empty within.
|
||||||
|
|
||||||
|
Type 1: Text
|
||||||
|
Offset 0: DW 1
|
||||||
|
Offset 2,3: DB X/Y coordinates
|
||||||
|
Offset 4: DB Colour
|
||||||
|
Offset 5: [Text]
|
||||||
|
|
||||||
|
Type 2: Button
|
||||||
|
Offset 0: DW 2
|
||||||
|
Offset 2-9: DW Up/Down/Left/Right associations
|
||||||
|
Offset 10: DW ButtonUsageType
|
||||||
|
Offset 12-15: [UsageType Data]
|
||||||
|
Offset 16: DW ButtonEffectType
|
||||||
|
Offset 18-27: [ButtonEffectType Data]
|
||||||
|
Offset 28-31: DB Left/Top/Right/Bottom coordinates
|
||||||
|
Offset 32: DB Button Style (refer to box style)
|
||||||
|
Offset 33: DB Button flags
|
||||||
|
Bit 0: Up/Down flag (0=up, 1=down)
|
||||||
|
Bit 1:
|
||||||
|
Offset 34: [Button Text]
|
||||||
|
|
||||||
|
ButtonUsageType Variable
|
||||||
|
0: Normal press-release buttons
|
||||||
|
Data: None
|
||||||
|
1: Toggle press/release buttons
|
||||||
|
Data: None
|
||||||
|
2: Radio button effect (one of selection)
|
||||||
|
Data: DW Min list range, Max list range
|
||||||
|
|
||||||
|
ButtonEffectType
|
||||||
|
0: Return Value
|
||||||
|
Data: DW Return Value
|
||||||
|
1: New Object List
|
||||||
|
Data: DD DWord Ptr ObjectList
|
||||||
|
2: Call Function
|
||||||
|
Data: DD DWord Ptr Function
|
||||||
|
3: Set Button variable
|
||||||
|
Data: DW VariableOffset
|
||||||
|
DW Value
|
||||||
|
4: Jump to Function
|
||||||
|
Data DD DWord Ptr Function
|
||||||
|
5: Set variable
|
||||||
|
Data DD DWord Ptr Function, returning ES:DI with mem location
|
||||||
|
DW Value to set it to/check for
|
||||||
|
DW 2 * Value to pass to function
|
||||||
|
6: Check variable, and jump to function
|
||||||
|
Data DD DWord Ptr Function, returning ES:DI with mem location
|
||||||
|
DW Value to set it to/check for
|
||||||
|
DD Function to jump to
|
||||||
|
|
||||||
|
Type 3: Empty
|
||||||
|
Type 4: Empty
|
||||||
|
|
||||||
|
Type 5: Select Direct Screen
|
||||||
|
Offset 0: DW 5
|
||||||
|
Offset 2: DB Mode (0=Buffered, 1=Direct)
|
||||||
|
|
||||||
|
Type 6: Redefine Characters
|
||||||
|
Offset 0: DW 6
|
||||||
|
Offset 2: DW FirstCharacterToDefine
|
||||||
|
Offset 4: DW NumberOfCharactersToDefine
|
||||||
|
Offset 6: [CharacterDefinitionTable]
|
||||||
|
|
||||||
|
Type 7: Empty
|
||||||
|
|
||||||
|
Type 8: Call Far Function
|
||||||
|
Offset 0: DW 8
|
||||||
|
Offset 2: DD DWord Ptr (Pre)Function
|
||||||
|
|
||||||
|
Type 9: Thumb bar
|
||||||
|
Offset 0: DW 9
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW MinRange, MaxRange
|
||||||
|
Offset 8: DW WriteData1, WriteData2
|
||||||
|
Offset 12: DW Up/Down/Tab/Shift-Tab associations
|
||||||
|
DW PgUp/PgDn
|
||||||
|
|
||||||
|
WriteData1:
|
||||||
|
0:Panning
|
||||||
|
1:GetPEVariables
|
||||||
|
2:Sample Variables
|
||||||
|
3:GetMusicVariables (Song)
|
||||||
|
4:Channel Volume settings
|
||||||
|
5:LoadSampleVariables
|
||||||
|
6:InstrumentVariables
|
||||||
|
7:Screen Variables (eg. palette)
|
||||||
|
8:Inst (segment) variable
|
||||||
|
9:Driver segment, WriteData2 = offset
|
||||||
|
|
||||||
|
Type 10: Infoline
|
||||||
|
Offset 0: DW 10
|
||||||
|
Offset 2: [Text]
|
||||||
|
|
||||||
|
Type 11: Set help context
|
||||||
|
Offset 0: DW 11
|
||||||
|
Offset 2: DW HelpContextNumber
|
||||||
|
|
||||||
|
Type 12: OrderListData
|
||||||
|
Offset 0: DW 12
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW Length of list (vertical)
|
||||||
|
Offset 6-9: DW Left/Right associations
|
||||||
|
|
||||||
|
Type 13: 3 Num Entry
|
||||||
|
Offset 0: DW 13
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW Ptr Info 1
|
||||||
|
Offset 6: DW Ptr Info 2
|
||||||
|
Offset 8: DD DWord Ptr CheckFunction (0=none)
|
||||||
|
Offset 12: DW Up/Down/Right/Left associations
|
||||||
|
|
||||||
|
Ptr Info 1:
|
||||||
|
0: Instrument header. Ptr Info 2 = offset
|
||||||
|
|
||||||
|
|
||||||
|
Type 14: Scalable Thumb bar
|
||||||
|
Offset 0: DW 14
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW MinRange, MaxRange
|
||||||
|
Offset 8: DW WriteData1, WriteData2
|
||||||
|
Offset 12: DW Up/Down/Tab/Shift-Tab associations
|
||||||
|
DW PgUp/PgDn
|
||||||
|
Offset 24 DW DisplayLength
|
||||||
|
|
||||||
|
WriteData1:
|
||||||
|
0:Panning
|
||||||
|
1:GetPEVariables
|
||||||
|
2:Sample Variables
|
||||||
|
3:GetMusicVariables (Song)
|
||||||
|
4:Channel Volume settings
|
||||||
|
5:LoadSampleVariables
|
||||||
|
6:InstrumentVariables
|
||||||
|
7:Screen Variables (eg. palette)
|
||||||
|
8:Inst (segment) variable
|
||||||
|
9:Driver segment, WriteData2 = offset
|
||||||
|
|
||||||
|
Type 15: Call Far Function 2
|
||||||
|
Offset 0: DW 15
|
||||||
|
Offset 2: DD DWord Ptr PreFunction
|
||||||
|
Offset 6: DD DWord Ptr DrawFunction
|
||||||
|
Offset 10: DD DWord Ptr Postfunction
|
||||||
|
|
||||||
|
Type 16: String Input
|
||||||
|
Offset 0: DW 16
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW LocationFunctionNumber1, LocationFunctionNumber2
|
||||||
|
Offset 8: DW Size (Length, including terminating null)
|
||||||
|
Offset 10: DD DWord Ptr FunctionOnEnter (0 = no function)
|
||||||
|
Offset 14: DW Up/Down/Tab/Shift-Tab associations
|
||||||
|
|
||||||
|
LocationFunctionNumber1
|
||||||
|
0: Disk segment, LFN2 = Offset
|
||||||
|
1: SamplePtr.
|
||||||
|
2: Instrument segment, LFN2 = Offset
|
||||||
|
3: Load Sample Ptr.
|
||||||
|
4: Music (song) segment, LFN2 = offset
|
||||||
|
5: Function segment, LFN2 = offset
|
||||||
|
6: Instrument Ptr.
|
||||||
|
|
||||||
|
Type 17: Toggle
|
||||||
|
Offset 0: DW 17
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW Ptr Info 1
|
||||||
|
Offset 6: DW Ptr Info 2
|
||||||
|
Offset 8: DB Bit Toggle
|
||||||
|
Offset 9: DW Up/Down/Right/Left associations
|
||||||
|
|
||||||
|
Ptr Info 1:
|
||||||
|
0: Sample header. Ptr Info 2 = offset in header.
|
||||||
|
1: Pattern segment (code). Ptr Info 2 = offset.
|
||||||
|
2: Music (song) segment. Ptr Info 2 = offset
|
||||||
|
3: Load sample header. Ptr info 2 = offset in header.
|
||||||
|
4: Instrument header. Ptr Info 2 = offset in header.
|
||||||
|
|
||||||
|
Type 18: 5NumEntry
|
||||||
|
Offset 0: DW 18
|
||||||
|
Offset 2: DB X/Y coordinates
|
||||||
|
Offset 4: DW Ptr Info 1
|
||||||
|
Offset 6: DW Ptr Info 2
|
||||||
|
Offset 8: DD DWord Ptr CheckFunction (0=none)
|
||||||
|
Offset 12: DW Up/Down/Right/Left associations
|
||||||
|
|
||||||
|
Ptr Info 1:
|
||||||
|
0: Sample header. Ptr Info 2 = offset.
|
||||||
|
1: Sample load header. Ptr Info 2 = offset.
|
||||||
|
2: Inst Segment (for sample resize).
|
||||||
|
|
||||||
|
|
||||||
|
Main menu return values.
|
||||||
|
0: Function not handled
|
||||||
|
1: Redraw screen
|
||||||
|
2: Goto prefunction
|
||||||
|
3: Goto keyboard input
|
||||||
|
4: Handled, return value.
|
||||||
|
5: New list in CX:DX, SI contains new action
|
||||||
|
|
||||||
|
;------------
|
||||||
|
|
||||||
|
Special string data:
|
||||||
|
; 0 = End of string
|
||||||
|
; 13 = Next line
|
||||||
|
; 10 = Toggle character sets
|
||||||
|
; 0FFh, x, n = repeat character n 'x' times
|
||||||
|
; 0FEh, x = set colour to x
|
||||||
|
; 0FDh, 'D' = show decimal number
|
||||||
|
; 0FDh, 'X' = show hex number
|
||||||
|
; 0FDh, 'S' = show signed number
|
||||||
|
; 0FDh, 'L' = show long number
|
|
@ -0,0 +1,637 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
;ÄÄ Copyrights ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
; Impulse Tracker v2.14 *BELGIAN* Keyboard Definition File
|
||||||
|
; Copyright (C) 1998, SiDEWiNDER / DiMENSiON X
|
||||||
|
;
|
||||||
|
; You can use this source code as a base for your own keyboard driver, if you
|
||||||
|
; want to. (BUT NOT FOR A BELGIAN ONE OFCOURSE!!!!!)
|
||||||
|
;
|
||||||
|
; Read BE.TXT for more details!!
|
||||||
|
;
|
||||||
|
;ÄÄ Contact ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
; My Email: sidewind@mail.dma.be
|
||||||
|
; My Homepage: http://fly.to/SiDEWiNDER
|
||||||
|
; DiMENSiON X WHQ: http://travel.to/DiMENSiON.X
|
||||||
|
;
|
||||||
|
;ÄÄ Assembling ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; &
|
||||||
|
DB 0
|
||||||
|
DW '&'
|
||||||
|
DB 3 ; 1
|
||||||
|
DW '1'
|
||||||
|
DB 7 ; |
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; ‚
|
||||||
|
DB 0
|
||||||
|
DW '‚'
|
||||||
|
DB 3 ; 2
|
||||||
|
DW '2'
|
||||||
|
DB 7 ; @
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; "
|
||||||
|
DB 0
|
||||||
|
DW '"'
|
||||||
|
DB 3 ; 3
|
||||||
|
DW '3'
|
||||||
|
DB 7 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; '
|
||||||
|
DB 0
|
||||||
|
DW ''''
|
||||||
|
DB 3 ; 4
|
||||||
|
DW '4'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; (
|
||||||
|
DB 0
|
||||||
|
DW '('
|
||||||
|
DB 3 ; 5
|
||||||
|
DW '5'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; paragraph, translated into $, should be OK...
|
||||||
|
DB 0
|
||||||
|
DW '$'
|
||||||
|
DB 3 ; 6
|
||||||
|
DW '6'
|
||||||
|
DB 7 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; Š
|
||||||
|
DB 0
|
||||||
|
DW 'Š'
|
||||||
|
DB 3 ; 7
|
||||||
|
DW '7'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; !
|
||||||
|
DB 0
|
||||||
|
DW '!'
|
||||||
|
DB 3 ; 8
|
||||||
|
DW '8'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; ‡
|
||||||
|
DB 0
|
||||||
|
DW '‡'
|
||||||
|
DB 3 ; 9
|
||||||
|
DW '9'
|
||||||
|
DB 7 ; {
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; …
|
||||||
|
DB 0
|
||||||
|
DW '…'
|
||||||
|
DB 3 ; 0
|
||||||
|
DW '0'
|
||||||
|
DB 7 ; }
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; )
|
||||||
|
DB 0
|
||||||
|
DW ')'
|
||||||
|
DB 3 ; ø
|
||||||
|
DW 'ø'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; Z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; (sirconflexe)-dead-key...
|
||||||
|
DB 0
|
||||||
|
DW '^'
|
||||||
|
DB 3 ; (trema)-dead-key...
|
||||||
|
DW 'ù'
|
||||||
|
DB 7 ; [
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; $
|
||||||
|
DB 0
|
||||||
|
DW '$'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 7 ; ]
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2 ; m
|
||||||
|
DW 'm'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; —
|
||||||
|
DB 0
|
||||||
|
DW '—'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 7 ; `
|
||||||
|
DW '`'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; ý
|
||||||
|
DB 0
|
||||||
|
DW 'ý'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; æ
|
||||||
|
DB 0
|
||||||
|
DW 'æ'
|
||||||
|
DB 3 ; œ
|
||||||
|
DW 'œ'
|
||||||
|
DB 7 ; '
|
||||||
|
DW ''''
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 1
|
||||||
|
DW '?'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ;
|
||||||
|
DB 0
|
||||||
|
DW ';'
|
||||||
|
DB 3 ; .
|
||||||
|
DW '.'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; :
|
||||||
|
DB 0
|
||||||
|
DW ':'
|
||||||
|
DB 3 ; /
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; =
|
||||||
|
DB 0
|
||||||
|
DW '='
|
||||||
|
DB 3 ; +
|
||||||
|
DW '+'
|
||||||
|
DB 7 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7 ; \
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,609 @@
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
;
|
||||||
|
; Canadian french keyboard layout for IT by Delta X
|
||||||
|
; En passant: Salut … tous les fran‡ais dans le monde!! :)
|
||||||
|
;
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; @
|
||||||
|
DW '"'
|
||||||
|
DB 7
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; =
|
||||||
|
DB 0
|
||||||
|
DW '='
|
||||||
|
DB 3 ; +
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; [
|
||||||
|
DB 0
|
||||||
|
DW '['
|
||||||
|
DB 3 ; {
|
||||||
|
DW '{'
|
||||||
|
DB 7
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; ]
|
||||||
|
DB 0
|
||||||
|
DW ']'
|
||||||
|
DB 3 ; }
|
||||||
|
DW '}'
|
||||||
|
DB 7
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ;
|
||||||
|
DB 0
|
||||||
|
DW ';'
|
||||||
|
DB 3 ; :
|
||||||
|
DW ':'
|
||||||
|
DB 7
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; '
|
||||||
|
DB 0
|
||||||
|
DW "`"
|
||||||
|
DB 3 ; "
|
||||||
|
DW "'"
|
||||||
|
DB 7
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; `
|
||||||
|
DB 0
|
||||||
|
DW '#'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '|'
|
||||||
|
DB 7
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; \
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; |
|
||||||
|
DW '>'
|
||||||
|
DB 7
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW "'"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; /
|
||||||
|
DB 0
|
||||||
|
DW '‚'
|
||||||
|
DB 3
|
||||||
|
DW '<27>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,620 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; +
|
||||||
|
DW '+'
|
||||||
|
DB 7 ;|
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 7 ;@
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 7
|
||||||
|
DW '#' ;#
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; ‡
|
||||||
|
DW '‡'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 7
|
||||||
|
DW 'ª' ;ª
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; /
|
||||||
|
DW '/'
|
||||||
|
DB 7 ;Ý
|
||||||
|
DW 'Ý'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7 ;½
|
||||||
|
DW '½'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 7 ;ï
|
||||||
|
DW 'ï'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; ^
|
||||||
|
DB 0
|
||||||
|
DW '^'
|
||||||
|
DB 3 ; `
|
||||||
|
DW '`'
|
||||||
|
DB 7 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; Š
|
||||||
|
DB 0
|
||||||
|
DW 'Š'
|
||||||
|
DB 3 ; <20>
|
||||||
|
DW '<27>'
|
||||||
|
DB 7 ;[
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; ù
|
||||||
|
DB 0
|
||||||
|
DW 'ù'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 7 ; ]
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ‚
|
||||||
|
DB 0
|
||||||
|
DW '‚'
|
||||||
|
DB 3 ; ”
|
||||||
|
DW '”'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; …
|
||||||
|
DB 0
|
||||||
|
DW "…"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '„'
|
||||||
|
DB 7 ;{
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
|
||||||
|
DB 41 ; $
|
||||||
|
DB 0
|
||||||
|
DW '$'
|
||||||
|
DB 3 ; œ
|
||||||
|
DW 'œ'
|
||||||
|
DB 7 ;}
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7 ; \
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; /
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,616 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '/'
|
||||||
|
DB 7
|
||||||
|
DW '{' ; {
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7
|
||||||
|
DW '[' ; [
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 7
|
||||||
|
DW ']' ; ]
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 7
|
||||||
|
DW '}' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; á
|
||||||
|
DB 0
|
||||||
|
DW 'á'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 7
|
||||||
|
DW '\' ; \
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; `
|
||||||
|
DW "`"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 7 ; Alt-Gr-Q (Alt-Ctrl-Q)
|
||||||
|
DW '@'
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2c00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; š
|
||||||
|
DB 0
|
||||||
|
DW 'š'
|
||||||
|
DB 3 ; <20>
|
||||||
|
DW '<27>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 7
|
||||||
|
DW '~' ; ~
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ™
|
||||||
|
DB 0
|
||||||
|
DW '™'
|
||||||
|
DB 3 ; ”
|
||||||
|
DW '”'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Ž
|
||||||
|
DB 0
|
||||||
|
DW "Ž"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '„'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "^"
|
||||||
|
DB 3
|
||||||
|
DW "ø"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; #
|
||||||
|
DB 0
|
||||||
|
DW '#'
|
||||||
|
DB 3 ; '
|
||||||
|
DW "'"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,616 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 7
|
||||||
|
DW "@" ; @
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 7
|
||||||
|
DW 'œ'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW 'Ï'
|
||||||
|
DB 7
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '/'
|
||||||
|
DB 7
|
||||||
|
DW '{' ; {
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7
|
||||||
|
DW '[' ; [
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 7
|
||||||
|
DW ']' ; ]
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 7
|
||||||
|
DW '}' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "ï"
|
||||||
|
DB 3 ; `
|
||||||
|
DW "`"
|
||||||
|
DB 7
|
||||||
|
DW '|' ; |
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; <20>
|
||||||
|
DB 0
|
||||||
|
DW '<27>'
|
||||||
|
DB 3 ; †
|
||||||
|
DW '†'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; .
|
||||||
|
DB 0
|
||||||
|
DW 'ù'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ™
|
||||||
|
DB 0
|
||||||
|
DW '™'
|
||||||
|
DB 3 ; ”
|
||||||
|
DW '”'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Ž
|
||||||
|
DB 0
|
||||||
|
DW "Ž"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '„'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "«"
|
||||||
|
DB 3
|
||||||
|
DW "õ"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; *
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; '
|
||||||
|
DW "*"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 1ah
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,620 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 5 ; |
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 5 ; @
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; ú
|
||||||
|
DW 'ú'
|
||||||
|
DB 5 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 5 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 5 ; ª
|
||||||
|
DW 'ª'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; /
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ;
|
||||||
|
DB 0
|
||||||
|
DW ''
|
||||||
|
DB 3 ; ¨
|
||||||
|
DW '¨'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; `
|
||||||
|
DB 0
|
||||||
|
DW '`'
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 5 ; [
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 5 ; ]
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ¤
|
||||||
|
DB 0
|
||||||
|
DW '¤'
|
||||||
|
DB 3 ; ¥
|
||||||
|
DW '¥'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; ù
|
||||||
|
DW 'ù'
|
||||||
|
DB 5 ; {
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; §
|
||||||
|
DB 0
|
||||||
|
DW '§'
|
||||||
|
DB 3 ; ¦
|
||||||
|
DW '¦'
|
||||||
|
DB 5 ; \
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; ‡
|
||||||
|
DB 0
|
||||||
|
DW '‡'
|
||||||
|
DB 3 ; €
|
||||||
|
DW '€'
|
||||||
|
DB 5 ; }
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3 ; ;
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3 ; :
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,618 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 7
|
||||||
|
DW "@" ; @
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 7
|
||||||
|
DW 'œ'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW 'Ï'
|
||||||
|
DB 7
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; /
|
||||||
|
DW '/'
|
||||||
|
DB 7
|
||||||
|
DW '{' ; {
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7
|
||||||
|
DW '[' ; [
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 7
|
||||||
|
DW ']' ; ]
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 7
|
||||||
|
DW '}' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 7 ; \
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "ï"
|
||||||
|
DB 3 ; `
|
||||||
|
DW "`"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; <20>
|
||||||
|
DB 0
|
||||||
|
DW '<27>'
|
||||||
|
DB 3 ; †
|
||||||
|
DW '†'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; .
|
||||||
|
DB 0
|
||||||
|
DW 'ù'
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 7 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ™
|
||||||
|
DB 0
|
||||||
|
DW '™'
|
||||||
|
DB 3 ; ”
|
||||||
|
DW '”'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Ž
|
||||||
|
DB 0
|
||||||
|
DW "Ž"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '„'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "`"
|
||||||
|
DB 3
|
||||||
|
DW "«"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; *
|
||||||
|
DW "*"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2 ; m
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3 ; ;
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3 ; :
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,613 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '&'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '1'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '‚'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '2'
|
||||||
|
DB 7
|
||||||
|
DW "~" ; @
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '"'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '3'
|
||||||
|
DB 7
|
||||||
|
DW "#"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; $
|
||||||
|
DW '4'
|
||||||
|
DB 7
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '('
|
||||||
|
DB 3 ; %
|
||||||
|
DW '5'
|
||||||
|
DB 7
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '6'
|
||||||
|
DB 7
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW 'Š'
|
||||||
|
DB 3 ;
|
||||||
|
DW '7'
|
||||||
|
DB 7
|
||||||
|
DW '`' ;
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '_'
|
||||||
|
DB 3 ;
|
||||||
|
DW '8'
|
||||||
|
DB 7
|
||||||
|
DW '\' ;
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '‡'
|
||||||
|
DB 3 ;
|
||||||
|
DW '9'
|
||||||
|
DB 7
|
||||||
|
DW '^' ;
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '…'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '0'
|
||||||
|
DB 7
|
||||||
|
DW '@' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; +
|
||||||
|
DB 0
|
||||||
|
DW ')'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW 'ø'
|
||||||
|
DB 7
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "="
|
||||||
|
DB 3 ; `
|
||||||
|
DW "+"
|
||||||
|
DB 7
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 1h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; <20>
|
||||||
|
DB 0
|
||||||
|
DW '^'
|
||||||
|
DB 3 ; †
|
||||||
|
DW 'ù'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; .
|
||||||
|
DB 0
|
||||||
|
DW '$'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW 'œ'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ™
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2 ; ”
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Ž
|
||||||
|
DB 0
|
||||||
|
DW "—"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; '
|
||||||
|
DB 0
|
||||||
|
DW "*"
|
||||||
|
DB 3 ; *
|
||||||
|
DW "æ"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ';'
|
||||||
|
DB 3
|
||||||
|
DW '.'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW ':'
|
||||||
|
DB 3
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '!'
|
||||||
|
DB 3
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,588 @@
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; FIXED Italian keyboard configuration file for Impulse Tracker 2
|
||||||
|
; fixed by DjM of Digital Things (DiT)
|
||||||
|
; why: Italian keyboard has no '`' key; with this configuration file
|
||||||
|
; note off command can be entered with '\' key (like in FastTracker 2)
|
||||||
|
; or with the similar ' (apostrophe) key
|
||||||
|
; to type \ and ' in message editor, use Right Alt + key
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; Chr(156)
|
||||||
|
DW 9Ch
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; /
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; ' used as `
|
||||||
|
DB 0
|
||||||
|
DW '`'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 7 ; to type ' in message editor
|
||||||
|
DW 27h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; Chr(141)
|
||||||
|
DB 0
|
||||||
|
DW 8Dh
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; Chr(138)
|
||||||
|
DB 0
|
||||||
|
DW 8Ah
|
||||||
|
DB 3 ; Chr(130)
|
||||||
|
DW 82h
|
||||||
|
DB 7 ; [
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 7 ; ]
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; Chr(149)
|
||||||
|
DB 0
|
||||||
|
DW 95h
|
||||||
|
DB 3 ; Chr(135)
|
||||||
|
DW 87h
|
||||||
|
DB 7 ; @
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Chr(133)
|
||||||
|
DB 0
|
||||||
|
DW 85h
|
||||||
|
DB 3 ; Chr(248)
|
||||||
|
DW 0F8h
|
||||||
|
DB 7 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; \ used as `
|
||||||
|
DB 0
|
||||||
|
DW "`"
|
||||||
|
DB 3 ; |
|
||||||
|
DW "|"
|
||||||
|
DB 7 ; to type \ in message editor
|
||||||
|
DW '\'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; Chr(151)
|
||||||
|
DB 0
|
||||||
|
DW 97h
|
||||||
|
DB 3 ; Chr(21)
|
||||||
|
DW 15h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 83 ; keypad .
|
||||||
|
DB 8
|
||||||
|
DW '.'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
This ZIP contains several different keyboard configurations for Impulse
|
||||||
|
Tracker. To use a particular configuration file, copy the appropriate file
|
||||||
|
to KEYBOARD.CFG
|
||||||
|
|
||||||
|
eg. to use a German keyboard configuration (DE.KBD), do
|
||||||
|
COPY DE.KBD KEYBOARD.CFG
|
||||||
|
|
||||||
|
Make sure that KEYBOARD.CFG is in the same directory as IT.EXE
|
||||||
|
|
||||||
|
An example of how to create your own keyboard file is included in the form
|
||||||
|
of US.ASM
|
|
@ -0,0 +1,614 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; This keyboard configuration created by Benjamin Bruheim
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 7
|
||||||
|
DW "@" ; @
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 7
|
||||||
|
DW 'œ'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW 'Ï'
|
||||||
|
DB 7
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '/'
|
||||||
|
DB 7
|
||||||
|
DW '{' ; {
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7
|
||||||
|
DW '[' ; [
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 7
|
||||||
|
DW ']' ; ]
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 7
|
||||||
|
DW '}' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "\"
|
||||||
|
DB 3 ; `
|
||||||
|
DW "`"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; †
|
||||||
|
DB 0
|
||||||
|
DW '†'
|
||||||
|
DB 3 ; <20>
|
||||||
|
DW '<27>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; .
|
||||||
|
DB 0
|
||||||
|
DW 'ù'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ›
|
||||||
|
DB 0
|
||||||
|
DW "›"
|
||||||
|
DB 3 ; <20>
|
||||||
|
DW "<22>"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; ‘
|
||||||
|
DB 0
|
||||||
|
DW "‘"
|
||||||
|
DB 3 ; ’
|
||||||
|
DW "’"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "|"
|
||||||
|
DB 3
|
||||||
|
DW "õ"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; *
|
||||||
|
DW "*"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-z
|
||||||
|
DW 1ah
|
||||||
|
DB 5 ; Alt-z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,610 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3
|
||||||
|
DW '"'
|
||||||
|
DB 5
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3
|
||||||
|
DW '/'
|
||||||
|
DB 5
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3
|
||||||
|
DW '('
|
||||||
|
DB 5
|
||||||
|
DW '['
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3
|
||||||
|
DW ')'
|
||||||
|
DB 5
|
||||||
|
DW ']'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3
|
||||||
|
DW '='
|
||||||
|
DB 5
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12
|
||||||
|
DB 0
|
||||||
|
DW ''''
|
||||||
|
DB 3
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27
|
||||||
|
DB 0
|
||||||
|
DW ''''
|
||||||
|
DB 3
|
||||||
|
DW '`'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39
|
||||||
|
DB 0
|
||||||
|
DW 'c' ; porque o ‡ nao funciona no IT
|
||||||
|
DB 3
|
||||||
|
DW 'C' ; porque o € nao funciona no IT
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40
|
||||||
|
DB 0
|
||||||
|
DW "o" ; porque o § nao funciona no IT
|
||||||
|
DB 3
|
||||||
|
DW 'a' ; porque o ¦ nao funciona no IT
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW '\'
|
||||||
|
DB 3
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43
|
||||||
|
DB 0
|
||||||
|
DW '~'
|
||||||
|
DB 3
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; a new key generated by me, for
|
||||||
|
DB 0 ; the Portuguese keyboard.
|
||||||
|
DW '<' ; It's located between the
|
||||||
|
DB 3 ; LShift and the Z key...
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,612 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 7
|
||||||
|
DW "@" ; @
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 7
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '/'
|
||||||
|
DB 7
|
||||||
|
DW '{' ; {
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 7
|
||||||
|
DW '[' ; [
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 7
|
||||||
|
DW ']' ; ]
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; =
|
||||||
|
DW '='
|
||||||
|
DB 7
|
||||||
|
DW '}' ; }
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 3 ; ?
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; `
|
||||||
|
DW "`"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; <20>
|
||||||
|
DB 0
|
||||||
|
DW '<27>'
|
||||||
|
DB 3 ; †
|
||||||
|
DW '†'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ™
|
||||||
|
DB 0
|
||||||
|
DW '™'
|
||||||
|
DB 3 ; ”
|
||||||
|
DW '”'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; Ž
|
||||||
|
DB 0
|
||||||
|
DW "Ž"
|
||||||
|
DB 3 ; „
|
||||||
|
DW '„'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "^"
|
||||||
|
DB 3
|
||||||
|
DW "+"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 3 ; '
|
||||||
|
DW "'"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 1ah
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW ';'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; <
|
||||||
|
DB 0
|
||||||
|
DW '<'
|
||||||
|
DB 3 ; >
|
||||||
|
DW '>'
|
||||||
|
DB 7
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,596 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; œ
|
||||||
|
DW 'œ'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; =
|
||||||
|
DB 0
|
||||||
|
DW '='
|
||||||
|
DB 3 ; +
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; [
|
||||||
|
DB 0
|
||||||
|
DW '['
|
||||||
|
DB 3 ; {
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; ]
|
||||||
|
DB 0
|
||||||
|
DW ']'
|
||||||
|
DB 3 ; }
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ;
|
||||||
|
DB 0
|
||||||
|
DW ';'
|
||||||
|
DB 3 ; :
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; @
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41
|
||||||
|
DB 0
|
||||||
|
DW "`"
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; #
|
||||||
|
DB 0
|
||||||
|
DW '#'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW '<'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 3
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 86 ; \
|
||||||
|
DB 0
|
||||||
|
DW '\'
|
||||||
|
DB 3 ; |
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,598 @@
|
||||||
|
|
||||||
|
.model tiny
|
||||||
|
.code
|
||||||
|
|
||||||
|
; to create the file:
|
||||||
|
; TASM <filename>
|
||||||
|
; TLINK /TDC <filename>
|
||||||
|
; REN <filename>.COM KEYBOARD.CFG
|
||||||
|
;
|
||||||
|
; Structure is:
|
||||||
|
; Keycode (1 byte)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; Condition (1 byte)
|
||||||
|
; Return value (1 word)
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; .
|
||||||
|
; 0FFh <-- end of condition/return value list
|
||||||
|
;
|
||||||
|
; Keycode is the value in the keypress table in IT on Ctrl-F1 (remember the
|
||||||
|
; values on the keypress table are in HEX..)
|
||||||
|
;
|
||||||
|
; Condition is one of the following
|
||||||
|
; 0 = requires NO Shift/Ctrl/Alt/...,
|
||||||
|
; 1 = if Shift and key while caps lock OFF *OR* CAPS lock ON, no ctrl/alt
|
||||||
|
; 2 = if Shift and key while caps lock ON *OR* CAPS lock OFF, no ctrl/alt
|
||||||
|
; 3 = if Shift
|
||||||
|
; 4 = if Ctrl
|
||||||
|
; 5 = if left/right Alt
|
||||||
|
; 6 = if Left Alt
|
||||||
|
; 7 = if Right Alt
|
||||||
|
; 8 = if Numlock on, no ctrl/alt
|
||||||
|
; 9 = if Numlock off, no ctrl/alt
|
||||||
|
; 0FFh = end of list.
|
||||||
|
;
|
||||||
|
; Return value is the character, or a DOS character value
|
||||||
|
|
||||||
|
ORG 100h
|
||||||
|
|
||||||
|
FileStart:
|
||||||
|
|
||||||
|
FileLength DW Offset EndKeyboardTable - Offset StartKeyboardTable
|
||||||
|
|
||||||
|
StartKeyboardTable:
|
||||||
|
|
||||||
|
DB 2 ; 1
|
||||||
|
DB 0
|
||||||
|
DW '1'
|
||||||
|
DB 3 ; !
|
||||||
|
DW '!'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 3 ; 2
|
||||||
|
DB 0
|
||||||
|
DW '2'
|
||||||
|
DB 3 ; @
|
||||||
|
DW '@'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 4 ; 3
|
||||||
|
DB 0
|
||||||
|
DW '3'
|
||||||
|
DB 3 ; #
|
||||||
|
DW '#'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 5 ; 4
|
||||||
|
DB 0
|
||||||
|
DW '4'
|
||||||
|
DB 3 ; $
|
||||||
|
DW '$'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 6 ; 5
|
||||||
|
DB 0
|
||||||
|
DW '5'
|
||||||
|
DB 3 ; %
|
||||||
|
DW '%'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 7 ; 6
|
||||||
|
DB 0
|
||||||
|
DW '6'
|
||||||
|
DB 3 ; ^
|
||||||
|
DW '^'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 8 ; 7
|
||||||
|
DB 0
|
||||||
|
DW '7'
|
||||||
|
DB 3 ; &
|
||||||
|
DW '&'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 9 ; 8
|
||||||
|
DB 0
|
||||||
|
DW '8'
|
||||||
|
DB 3 ; *
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 10 ; 9
|
||||||
|
DB 0
|
||||||
|
DW '9'
|
||||||
|
DB 3 ; (
|
||||||
|
DW '('
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 11 ; 0
|
||||||
|
DB 0
|
||||||
|
DW '0'
|
||||||
|
DB 3 ; )
|
||||||
|
DW ')'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 12 ; -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 3 ; _
|
||||||
|
DW '_'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 13 ; =
|
||||||
|
DB 0
|
||||||
|
DW '='
|
||||||
|
DB 3 ; +
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 14 ; Backspace
|
||||||
|
DB 4 ; Ctrl-Backspace
|
||||||
|
DW 127
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 15 ; Tab
|
||||||
|
DB 3 ; ShiftTab
|
||||||
|
DW 0F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 16 ; Q
|
||||||
|
DB 1
|
||||||
|
DW 'Q'
|
||||||
|
DB 2 ; q
|
||||||
|
DW 'q'
|
||||||
|
DB 4 ; Ctrl-Q
|
||||||
|
DW 11h
|
||||||
|
DB 5 ; Alt-Q
|
||||||
|
DW 1000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 17 ; W
|
||||||
|
DB 1
|
||||||
|
DW 'W'
|
||||||
|
DB 2 ; w
|
||||||
|
DW 'w'
|
||||||
|
DB 4 ; Ctrl-W
|
||||||
|
DW 17h
|
||||||
|
DB 5 ; Alt-W
|
||||||
|
DW 1100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 18 ; E
|
||||||
|
DB 1
|
||||||
|
DW 'E'
|
||||||
|
DB 2 ;e
|
||||||
|
DW 'e'
|
||||||
|
DB 4 ; Ctrl-E
|
||||||
|
DW 5
|
||||||
|
DB 5 ; Alt-E
|
||||||
|
DW 1200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 19 ; R
|
||||||
|
DB 1
|
||||||
|
DW 'R'
|
||||||
|
DB 2 ; r
|
||||||
|
DW 'r'
|
||||||
|
DB 4 ; Ctrl-R
|
||||||
|
DW 12h
|
||||||
|
DB 5 ; Alt-R
|
||||||
|
DW 1300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 20 ; T
|
||||||
|
DB 1
|
||||||
|
DW 'T'
|
||||||
|
DB 2 ; t
|
||||||
|
DW 't'
|
||||||
|
DB 4 ; Ctrl-T
|
||||||
|
DW 14h
|
||||||
|
DB 5 ; Alt-T
|
||||||
|
DW 1400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 21 ; Y
|
||||||
|
DB 1
|
||||||
|
DW 'Y'
|
||||||
|
DB 2 ; y
|
||||||
|
DW 'y'
|
||||||
|
DB 4 ; Ctrl-Y
|
||||||
|
DW 19h
|
||||||
|
DB 5 ; Alt-Y
|
||||||
|
DW 1500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 22 ; U
|
||||||
|
DB 1
|
||||||
|
DW 'U'
|
||||||
|
DB 2 ; u
|
||||||
|
DW 'u'
|
||||||
|
DB 4 ; Ctrl-U
|
||||||
|
DW 15h
|
||||||
|
DB 5 ; Alt-U
|
||||||
|
DW 1600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 23 ; I
|
||||||
|
DB 1
|
||||||
|
DW 'I'
|
||||||
|
DB 2 ; i
|
||||||
|
DW 'i'
|
||||||
|
DB 4 ; Ctrl-I
|
||||||
|
DW 9
|
||||||
|
DB 5 ; Alt-I
|
||||||
|
DW 1700h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 24 ; O
|
||||||
|
DB 1
|
||||||
|
DW 'O'
|
||||||
|
DB 2 ; o
|
||||||
|
DW 'o'
|
||||||
|
DB 4 ; Ctrl-O
|
||||||
|
DW 0Fh
|
||||||
|
DB 5 ; Alt-O
|
||||||
|
DW 1800h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 25 ; P
|
||||||
|
DB 1
|
||||||
|
DW 'P'
|
||||||
|
DB 2 ; p
|
||||||
|
DW 'p'
|
||||||
|
DB 4 ; Ctrl-P
|
||||||
|
DW 10h
|
||||||
|
DB 5 ; Alt-P
|
||||||
|
DW 1900h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 26 ; [
|
||||||
|
DB 0
|
||||||
|
DW '['
|
||||||
|
DB 3 ; {
|
||||||
|
DW '{'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 27 ; ]
|
||||||
|
DB 0
|
||||||
|
DW ']'
|
||||||
|
DB 3 ; }
|
||||||
|
DW '}'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 30 ; A
|
||||||
|
DB 1
|
||||||
|
DW 'A'
|
||||||
|
DB 2 ; a
|
||||||
|
DW 'a'
|
||||||
|
DB 4 ; Ctrl-A
|
||||||
|
DW 1
|
||||||
|
DB 5 ; Alt-A
|
||||||
|
DW 1E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 31 ; S
|
||||||
|
DB 1
|
||||||
|
DW 'S'
|
||||||
|
DB 2 ; s
|
||||||
|
DW 's'
|
||||||
|
DB 4 ; Ctrl-S
|
||||||
|
DW 13h
|
||||||
|
DB 5 ; Alt-S
|
||||||
|
DW 1F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 32 ; D
|
||||||
|
DB 1
|
||||||
|
DW 'D'
|
||||||
|
DB 2 ; d
|
||||||
|
DW 'd'
|
||||||
|
DB 4 ; Ctrl-D
|
||||||
|
DW 4
|
||||||
|
DB 5 ; Alt-D
|
||||||
|
DW 2000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 33 ; F
|
||||||
|
DB 1
|
||||||
|
DW 'F'
|
||||||
|
DB 2 ; f
|
||||||
|
DW 'f'
|
||||||
|
DB 4 ; Ctrl-F
|
||||||
|
DW 6
|
||||||
|
DB 5 ; Alt-F
|
||||||
|
DW 2100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 34 ; G
|
||||||
|
DB 1
|
||||||
|
DW 'G'
|
||||||
|
DB 2 ; g
|
||||||
|
DW 'g'
|
||||||
|
DB 4 ; Ctrl-G
|
||||||
|
DW 7
|
||||||
|
DB 5 ; Alt-G
|
||||||
|
DW 2200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 35 ; H
|
||||||
|
DB 1
|
||||||
|
DW 'H'
|
||||||
|
DB 2 ; h
|
||||||
|
DW 'h'
|
||||||
|
DB 4 ; Ctrl-H
|
||||||
|
DW 8
|
||||||
|
DB 5 ; Alt-H
|
||||||
|
DW 2300h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 36 ; J
|
||||||
|
DB 1
|
||||||
|
DW 'J'
|
||||||
|
DB 2 ; j
|
||||||
|
DW 'j'
|
||||||
|
DB 4 ; Ctrl-J
|
||||||
|
DW 0Ah
|
||||||
|
DB 5 ; Alt-J
|
||||||
|
DW 2400h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 37 ; K
|
||||||
|
DB 1
|
||||||
|
DW 'K'
|
||||||
|
DB 2 ; k
|
||||||
|
DW 'k'
|
||||||
|
DB 4 ; Ctrl-K
|
||||||
|
DW 0Bh
|
||||||
|
DB 5 ; Alt-K
|
||||||
|
DW 2500h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 38 ; L
|
||||||
|
DB 1
|
||||||
|
DW 'L'
|
||||||
|
DB 2 ; l
|
||||||
|
DW 'l'
|
||||||
|
DB 4 ; Ctrl-L
|
||||||
|
DW 0Ch
|
||||||
|
DB 5 ; Alt-L
|
||||||
|
DW 2600h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 39 ; ;
|
||||||
|
DB 0
|
||||||
|
DW ';'
|
||||||
|
DB 3 ; :
|
||||||
|
DW ':'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 40 ; '
|
||||||
|
DB 0
|
||||||
|
DW "'"
|
||||||
|
DB 3 ; "
|
||||||
|
DW '"'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 41 ; `
|
||||||
|
DB 0
|
||||||
|
DW '`'
|
||||||
|
DB 3 ; ~
|
||||||
|
DW '~'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 43 ; \
|
||||||
|
DB 0
|
||||||
|
DW '\'
|
||||||
|
DB 3 ; |
|
||||||
|
DW '|'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 44 ; z
|
||||||
|
DB 1
|
||||||
|
DW 'Z'
|
||||||
|
DB 2 ; z
|
||||||
|
DW 'z'
|
||||||
|
DB 4 ; Ctrl-Z
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-Z
|
||||||
|
DW 2C00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 45 ; X
|
||||||
|
DB 1
|
||||||
|
DW 'X'
|
||||||
|
DB 2 ; x
|
||||||
|
DW 'x'
|
||||||
|
DB 4 ; Ctrl-X
|
||||||
|
DW 1Ah
|
||||||
|
DB 5 ; Alt-X
|
||||||
|
DW 2D00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 46 ; C
|
||||||
|
DB 1
|
||||||
|
DW 'C'
|
||||||
|
DB 2 ; c
|
||||||
|
DW 'c'
|
||||||
|
DB 4 ; Ctrl-C
|
||||||
|
DW 3
|
||||||
|
DB 5 ; Alt-C
|
||||||
|
DW 2E00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 47 ; V
|
||||||
|
DB 1
|
||||||
|
DW 'V'
|
||||||
|
DB 2 ; v
|
||||||
|
DW 'v'
|
||||||
|
DB 4 ; Ctrl-V
|
||||||
|
DW 16h
|
||||||
|
DB 5 ; Alt-V
|
||||||
|
DW 2F00h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 48 ; B
|
||||||
|
DB 1
|
||||||
|
DW 'B'
|
||||||
|
DB 2 ; b
|
||||||
|
DW 'b'
|
||||||
|
DB 4 ; Ctrl-B
|
||||||
|
DW 2
|
||||||
|
DB 5 ; Alt-B
|
||||||
|
DW 3000h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 49 ; N
|
||||||
|
DB 1
|
||||||
|
DW 'N'
|
||||||
|
DB 2 ; n
|
||||||
|
DW 'n'
|
||||||
|
DB 4 ; Ctrl-N
|
||||||
|
DW 0Eh
|
||||||
|
DB 5 ; Alt-N
|
||||||
|
DW 3100h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 50 ; M
|
||||||
|
DB 1
|
||||||
|
DW 'M'
|
||||||
|
DB 2
|
||||||
|
DW 'm'
|
||||||
|
DB 4 ; Ctrl-M
|
||||||
|
DW 0Dh
|
||||||
|
DB 5 ; Alt-M
|
||||||
|
DW 3200h
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 51 ; ,
|
||||||
|
DB 0
|
||||||
|
DW ','
|
||||||
|
DB 3
|
||||||
|
DW '<'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 52 ; .
|
||||||
|
DB 0
|
||||||
|
DW '.'
|
||||||
|
DB 3
|
||||||
|
DW '>'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 53 ; /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 3
|
||||||
|
DW '?'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 55 ; XT/AT printscreen, Enhanced keyboard *
|
||||||
|
DB 0
|
||||||
|
DW '*'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 57 ; Spacebar
|
||||||
|
DB 0
|
||||||
|
DW ' '
|
||||||
|
DB 3
|
||||||
|
DW ' '
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 71 ; Keypad 7
|
||||||
|
DB 8
|
||||||
|
DW '7'
|
||||||
|
DB 10
|
||||||
|
DW 7
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 72 ; Keypad 8
|
||||||
|
DB 8
|
||||||
|
DW '8'
|
||||||
|
DB 10
|
||||||
|
DW 8
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 73 ; Keypad 9
|
||||||
|
DB 8
|
||||||
|
DW '9'
|
||||||
|
DB 10
|
||||||
|
DW 9
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 74 ; Grey -
|
||||||
|
DB 0
|
||||||
|
DW '-'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 75 ; Keypad 4
|
||||||
|
DB 8
|
||||||
|
DW '4'
|
||||||
|
DB 10
|
||||||
|
DW 4
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 76 ; Keypad 5
|
||||||
|
DB 8
|
||||||
|
DW '5'
|
||||||
|
DB 10
|
||||||
|
DW 5
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 77 ; Keypad 6
|
||||||
|
DB 8
|
||||||
|
DW '6'
|
||||||
|
DB 10
|
||||||
|
DW 6
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 78 ; Grey +
|
||||||
|
DB 0
|
||||||
|
DW '+'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 79 ; Keypad 1
|
||||||
|
DB 8
|
||||||
|
DW '1'
|
||||||
|
DB 10
|
||||||
|
DW 1
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 80 ; Keypad 2
|
||||||
|
DB 8
|
||||||
|
DW '2'
|
||||||
|
DB 10
|
||||||
|
DW 2
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 81 ; Keypad 3
|
||||||
|
DB 8
|
||||||
|
DW '3'
|
||||||
|
DB 10
|
||||||
|
DW 3
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 82 ; Keypad 0
|
||||||
|
DB 8
|
||||||
|
DW '0'
|
||||||
|
DB 10
|
||||||
|
DW 0
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 83
|
||||||
|
DB 8
|
||||||
|
DW '.'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 128+35h ; Grey /
|
||||||
|
DB 0
|
||||||
|
DW '/'
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
DB 0FFh
|
||||||
|
|
||||||
|
EndKeyboardTable:
|
||||||
|
|
||||||
|
End FileStart
|
|
@ -0,0 +1,25 @@
|
||||||
|
Copyright © 2014, Jeffrey Lim. All Rights Reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of the author may not be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,9 @@
|
||||||
|
IT.EXE: IT.OBJ IT_DISK.OBJ IT_DISPL.OBJ IT_EMS.OBJ IT_ERR.OBJ IT_F.OBJ IT_G.OBJ IT_H.OBJ \
|
||||||
|
IT_I.OBJ IT_K.OBJ IT_L.OBJ IT_M.OBJ IT_NET.OBJ IT_MSG.OBJ IT_MUSIC.OBJ IT_NET.OBJ IT_OBJ1.OBJ IT_PE.OBJ IT_S.OBJ \
|
||||||
|
IT_TUTE.OBJ IT_MMTSR.OBJ IT_MOUSE.OBJ IT_MDATA.OBJ IT_FOUR.OBJ IT_VESA.OBJ
|
||||||
|
tlink /3 /s /v @source.lst
|
||||||
|
|
||||||
|
.ASM.OBJ:
|
||||||
|
# TASM /Zi /m /uT310 /jSMART $*.asm
|
||||||
|
TASM /m /uT310 /jSMART $*.asm
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
IF NETWORKENABLED
|
||||||
|
Extrn Network_GetSendQueue:Far
|
||||||
|
Extrn Network_FinishedSendQueue:Far
|
||||||
|
Extrn Network_AddWordToQueue:Far
|
||||||
|
Extrn Network_EnsureNoNetwork:Far
|
||||||
|
Extrn Network_SendSampleHeader:Far
|
||||||
|
Extrn Network_SendInstrumentHeader:Far
|
||||||
|
Extrn Network_QueueSampleData:Far
|
||||||
|
Extrn Network_SendSongDataInformation:Far
|
||||||
|
|
||||||
|
NETWORK_PARTIALPATTERNOBJECT EQU 0
|
||||||
|
NETWORK_ENTIREPATTERNOBJECT EQU 1
|
||||||
|
NETWORK_REQUESTPATTERNOBJECT EQU 2
|
||||||
|
NETWORK_SONGDATAOBJECT EQU 3
|
||||||
|
NETWORK_INSTRUMENTHEADEROBJECT EQU 4
|
||||||
|
NETWORK_SAMPLEHEADEROBJECT EQU 5
|
||||||
|
NETWORK_SETPATTERNLENGTH EQU 6
|
||||||
|
NETWORK_DELETESAMPLEOBJECT EQU 7
|
||||||
|
|
||||||
|
EnsureNoNetwork EQU Call Network_EnsureNoNetwork
|
||||||
|
NetworkSendSample EQU Call Network_SendSampleHeader
|
||||||
|
NetworkSendInstrument EQU Call Network_SendInstrumentHeader
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
EnsureNoNetwork EQU ;
|
||||||
|
NetworkSendSample EQU ;
|
||||||
|
NetworkSendInstrument EQU ;
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
;
|
||||||
|
; Debug macro. To write to the file, use "Trace <logmessage>"
|
||||||
|
;
|
||||||
|
|
||||||
|
IF TRACEENABLED
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
FirstTime DB 0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
LogFileName DB "Logfile.Txt", 0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc WriteDebugFile
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov DX, Offset LogFileName
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
|
||||||
|
Cmp DS:FirstTime, 0
|
||||||
|
JNE WriteDebugFile1
|
||||||
|
|
||||||
|
Mov AH, 3Ch
|
||||||
|
Xor CX, CX
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
Mov DS:FirstTime, 1
|
||||||
|
XChg AX, BX
|
||||||
|
Jmp WriteDebugFile2
|
||||||
|
|
||||||
|
WriteDebugFile1:
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
Mov AX, 3D02h
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
XChg AX, BX
|
||||||
|
|
||||||
|
Mov AX, 4202h
|
||||||
|
Xor CX, CX
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h ; Move to end of file
|
||||||
|
|
||||||
|
WriteDebugFile2:
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov CX, 82
|
||||||
|
Mov DX, SI
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Eh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
WriteDebugFileEnd:
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP WriteDebugFile
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
Local X, Y
|
||||||
|
|
||||||
|
PushF
|
||||||
|
Push SI
|
||||||
|
Jmp Y
|
||||||
|
X:
|
||||||
|
DB LogMessage
|
||||||
|
DB 80-($-Offset X) Dup (0)
|
||||||
|
DB 0Dh, 0Ah
|
||||||
|
Y:
|
||||||
|
Mov SI, Offset X
|
||||||
|
Call WriteDebugFile
|
||||||
|
Pop SI
|
||||||
|
PopF
|
||||||
|
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF SCREENTRACEENABLED
|
||||||
|
|
||||||
|
ScreenTrace Macro Value
|
||||||
|
Mov Byte Ptr [FS:0], Value
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ScreenTraceStart Macro
|
||||||
|
Push FS
|
||||||
|
Push 0B800h
|
||||||
|
Pop FS
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ScreenTraceEnd Macro
|
||||||
|
Pop FS
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
ScreenTrace Macro Value
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ScreenTraceStart Macro
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ScreenTraceEnd Macro
|
||||||
|
EndM
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
NUMREQUIREDVARIABLES EQU 16 ; Number of bytes required from IT.EXE by Driver
|
||||||
|
NUMREQUIREDFUNCTIONS EQU 32 ; Number of functions (DD Offsets) required by
|
||||||
|
; Network driver
|
||||||
|
NUMPROVIDEDVARIABLES EQU 16 ; Number of bytes provided from driver to IT.EXE
|
||||||
|
NUMPROVIDEDFUNCTIONS EQU 16 ; Number of functions (DW Offsets) provided by
|
||||||
|
; Network driver
|
||||||
|
|
||||||
|
ID DB "Impulse Tracker Network Driver"
|
||||||
|
DB 26
|
||||||
|
DB (62 - ($-Offset ID)) Dup (0)
|
||||||
|
DB 13, 10
|
||||||
|
|
||||||
|
DriverID DB DRIVERIDSTRING
|
||||||
|
DB (62 - ($ - Offset DriverID)) Dup (0)
|
||||||
|
|
||||||
|
LengthOfDriver DW Offset EndDriver - Offset StartDriver
|
||||||
|
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,5 @@
|
||||||
|
tasm /m /la /ut310 ipx
|
||||||
|
tlink /3 ipx
|
||||||
|
execom ipx itipx.net
|
||||||
|
copy itipx.net ..
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
|
||||||
|
.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
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
EndDriver:
|
||||||
|
|
||||||
|
;******** Provided Variable Table *************
|
||||||
|
|
||||||
|
ProvidedVariableStart:
|
||||||
|
DB NUMPROVIDEDVARIABLES-($-ProvidedVariableStart) Dup (0)
|
||||||
|
|
||||||
|
;******** Provided Procedure Table *************
|
||||||
|
|
||||||
|
ProvidedTableStart:
|
||||||
|
DW Offset Initialise
|
||||||
|
DW Offset Shutdown
|
||||||
|
DW Offset DriverScreen
|
||||||
|
DW Offset Update
|
||||||
|
DW Offset ConnectionStatus
|
||||||
|
ProvidedTableEnd:
|
||||||
|
DW NUMPROVIDEDFUNCTIONS-(ProvidedTableEnd-ProvidedTableStart)/2 Dup (0)
|
||||||
|
|
||||||
|
EndS
|
||||||
|
|
||||||
|
End
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
ProcedureTableStart Label
|
||||||
|
|
||||||
|
IT_UnloadDriver DD ?
|
||||||
|
IT_FunctionHandler DD ?
|
||||||
|
IT_FunctionDivider DD ?
|
||||||
|
|
||||||
|
IT_ReceiveData DD ?
|
||||||
|
IT_SendData DD ?
|
||||||
|
IT_EstablishConnection DD ?
|
||||||
|
|
||||||
|
IT_GotoHomeDirectory DD ?
|
||||||
|
IT_GetTime DD ?
|
||||||
|
IT_SetInfoLine DD ?
|
||||||
|
|
||||||
|
IT_DrawHeader DD ?
|
||||||
|
IT_FillHeader DD ?
|
||||||
|
|
||||||
|
IT_S_GetDestination DD ?
|
||||||
|
IT_S_DrawString DD ?
|
||||||
|
IT_S_SaveScreen DD ?
|
||||||
|
IT_S_RestoreScreen DD ?
|
||||||
|
|
||||||
|
IT_GetCurrentMode DD ?
|
||||||
|
|
||||||
|
IT_NewConnection DD ?
|
||||||
|
|
||||||
|
IT_DecodeUserName DD ?
|
||||||
|
|
||||||
|
DD NUMREQUIREDFUNCTIONS - ($-ProcedureTableStart)/4 Dup (0)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
UserName DB 0FFh, 014h, 04Fh, 0F0h, 047h, 0C8h, 09Fh, 0DCh, 063h, 000h, 03Fh, 0FCh, 0AEh, 0FCh, 0AEh, 0FCh
|
||||||
|
IPXLocalAddress Label
|
||||||
|
UserKey DW 0141Eh
|
||||||
|
IPXNetworkAddress DW 0 ; Combines with previous line
|
||||||
|
IPXNodeAddress DW 0, 0, 0
|
||||||
|
IPXSocket DW 0
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
VariableTableStart Label
|
||||||
|
|
||||||
|
GlobalKeyList DD ?
|
||||||
|
IdleUpdateInfoLine DD ?
|
||||||
|
DiskDataArea DW ? ; Segment
|
||||||
|
|
||||||
|
DB NUMREQUIREDVARIABLES-($-VariableTableStart) Dup (0)
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,138 @@
|
||||||
|
Impulse Tracker
|
||||||
|
===============
|
||||||
|
|
||||||
|
Full source code for Impulse Tracker, including sound drivers, network drivers,
|
||||||
|
and some supporting documentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pre-Requisite Software
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
To build Impulse Tracker, you will need:
|
||||||
|
|
||||||
|
- Turbo Assembler v4.1
|
||||||
|
|
||||||
|
- Turbo Link v3.01
|
||||||
|
|
||||||
|
- Borland MAKE v4.0
|
||||||
|
|
||||||
|
- A DOS environment
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Once you have these, building IT.EXE should be just a single call to `MAKE`
|
||||||
|
|
||||||
|
|
||||||
|
Sound drivers are build individually via M\*.BAT files inside the SoundDrivers
|
||||||
|
subdirectory
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Quick File Overview
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
- IT.ASM:
|
||||||
|
Startup routines
|
||||||
|
|
||||||
|
- IT\_DISK.ASM:
|
||||||
|
Disk IO Routines. Uses IT\_D\_\*.INC files
|
||||||
|
|
||||||
|
- IT\_DISPL.ASM:
|
||||||
|
Display routines for the Playback Screen (F5)
|
||||||
|
|
||||||
|
- IT\_EMS.ASM:
|
||||||
|
EMS memory handling routines
|
||||||
|
|
||||||
|
- IT\_F.ASM:
|
||||||
|
Collection of functions used by the object model
|
||||||
|
|
||||||
|
- IT\_FOUR.ASM:
|
||||||
|
Fast Fourier routines. Used by the graphic equalizer (Alt-F12).
|
||||||
|
Not available on all all sound cards
|
||||||
|
|
||||||
|
- IT\_G.ASM:
|
||||||
|
Global key handler functions
|
||||||
|
|
||||||
|
- IT\_H.ASM:
|
||||||
|
Help Module (F1)
|
||||||
|
|
||||||
|
- IT\_I.ASM:
|
||||||
|
Sample list (F3) and Instrument list (F4) module
|
||||||
|
|
||||||
|
- IT\_K.ASM:
|
||||||
|
Keyboard module
|
||||||
|
|
||||||
|
- IT\_L.ASM:
|
||||||
|
Information line code
|
||||||
|
|
||||||
|
- IT\_M.ASM:
|
||||||
|
Main message loop/dispatcher
|
||||||
|
|
||||||
|
- IT\_MDATA.ASM:
|
||||||
|
Global music variable data
|
||||||
|
|
||||||
|
- IT\_MMTSR.ASM:
|
||||||
|
Sample compression/decompression routines
|
||||||
|
|
||||||
|
- IT\_MOUSE.ASM:
|
||||||
|
Mouse handling code
|
||||||
|
|
||||||
|
- IT\_MSG.ASM:
|
||||||
|
Message editor module (Shift-F9)
|
||||||
|
|
||||||
|
- IT\_MUSIC.ASM:
|
||||||
|
Module playback code. Also uses IT\_M\_EFF.INC
|
||||||
|
|
||||||
|
- IT\_NET.ASM:
|
||||||
|
Network code
|
||||||
|
|
||||||
|
- IT\_OBJ1.ASM:
|
||||||
|
UI object definitions
|
||||||
|
|
||||||
|
- IT\_PE.ASM:
|
||||||
|
Pattern Editor module (F2)
|
||||||
|
|
||||||
|
- IT\_S.ASM:
|
||||||
|
Screen functions, including character generation
|
||||||
|
|
||||||
|
- IT\_TUTE.ASM:
|
||||||
|
Interactive Tutorial module
|
||||||
|
|
||||||
|
- IT\_VESA.ASM:
|
||||||
|
VESA code for graphic equalizer
|
||||||
|
|
||||||
|
- SWITCH.INC:
|
||||||
|
High level switches for the program
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Frequently Asked Questions
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Q: "What are all those funny characters in the source code?"
|
||||||
|
|
||||||
|
A: I wrote the original source code using DOS characters, with characters drawing borders/boxes in
|
||||||
|
comments in the source code. In the interests of posterity, I have left the code intact as it was.
|
||||||
|
|
||||||
|
|
||||||
|
Q: "Why didn't you use STRUCs or ENUMs" in your ASM source?
|
||||||
|
|
||||||
|
A: Simply because I didn't know about them at the time. I wish I did. There's a InternalDocumentation
|
||||||
|
folder that I've included in the repository that details what some of the magic numbers appearing
|
||||||
|
through the code might mean.
|
||||||
|
|
||||||
|
|
||||||
|
Q: "Flow in some functions seems to jump all over the place. Why?"
|
||||||
|
|
||||||
|
A: The original code was compatible all the way back to an 8086 machine. 8086 would allow you to do
|
||||||
|
conditional jumps only within +/-128 bytes, so I spent too much time shuffling code around to meet
|
||||||
|
this restriction. When I shifted away from this 8086 restriction, I never went back to update the
|
||||||
|
code that was mutilated by it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
License for this source code is pending.
|
|
@ -0,0 +1,39 @@
|
||||||
|
|
||||||
|
OK.. here's a list of the known problems - please don't write to me about them!
|
||||||
|
|
||||||
|
1) Apparently, many problems have been encountered with QEMM... I really
|
||||||
|
don't know what's going wrong here at the moment (I haven't had any
|
||||||
|
experience with QEMM myself), but try using the following line in your
|
||||||
|
CONFIG.SYS file. If this still doesnt' work, I would recommend that you
|
||||||
|
steer clear of QEMM if possible for the meantime.
|
||||||
|
|
||||||
|
DEVICE=<path>\QEMM.SYS DMA=64, HANDLES=255
|
||||||
|
|
||||||
|
2) With the GUS, 16-bit samples > 256k will *NOT* be played correctly. This is
|
||||||
|
due to a 'quirk' of the GUS - something that I don't know how to easily fix.
|
||||||
|
This does *NOT* occur with 8-bit samples. (This is the same problem that
|
||||||
|
you'll find in FastTracker II also)
|
||||||
|
|
||||||
|
3) The "Active Channels" indication is *NOT* always 100% accurate (it's
|
||||||
|
even affected by stuff played in muted channels.....) Also, on a GUS or
|
||||||
|
AWE32, the program requires the hardware to provide the 'end of note
|
||||||
|
indication', whereas the mixing routines are calculated internally...
|
||||||
|
hence, if the hardware provides the indication a little later than expected,
|
||||||
|
another channel is allocated - what this means is that the value as played
|
||||||
|
on wavetable cards *MAY* differ from the value played on software-mixed
|
||||||
|
cards. This difference is minor (ie. 2 channels at most, unless you *TRY*
|
||||||
|
to setup a special situation)
|
||||||
|
|
||||||
|
4) There is no 'enforce Amiga limits' option in IT (Which was in ST3) so
|
||||||
|
pitches of notes exceeding the Amiga limit will not be suitably played.
|
||||||
|
|
||||||
|
5) If your system behaves unexpectedly in IT, it *MAY* be necessary to
|
||||||
|
specify the complete parameter list on the command line. This should NOT
|
||||||
|
be a problem in most cases, but it has been known to occur.
|
||||||
|
|
||||||
|
6) In Windows '95, if you shell to DOS when using SB on a high IRQ, then
|
||||||
|
playback may stop! I've got no idea as to why this happens, but it seems
|
||||||
|
to restore itself after loading another module (on a SB16)
|
||||||
|
|
||||||
|
7) If you Shell to DOS with insufficient memory available, WEIRD things may
|
||||||
|
occur...
|
|
@ -0,0 +1,595 @@
|
||||||
|
|
||||||
|
To all of the following people listed, I offer my heartfelt thanks.
|
||||||
|
Impulse Tracker would not be the same without them.
|
||||||
|
|
||||||
|
---------------------------------
|
||||||
|
Demosongs for Impulse Tracker
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
IT1.00 - "Firestorm" - Chris Jarvis
|
||||||
|
IT1.01 - "Pale Dreams" - Chris Jarvis
|
||||||
|
IT1.03 - "Firepower" - Chris Jarvis
|
||||||
|
IT1.05 - "Sidewalk" - Chris Jarvis
|
||||||
|
IT1.06 - "Creation of Gaia" - Sherman Wu (ZaStaR)
|
||||||
|
IT2.00 - "Fallen World" - Chris Jarvis
|
||||||
|
IT2.01 - "A Hidden Fate" - Chris Jarvis
|
||||||
|
IT2.04 - "Winter's Dream" - Andy Sega (Necros)
|
||||||
|
IT2.08 - "Acid Dreams" - Liam Widdowson (Legend)
|
||||||
|
IT2.14 - "Blue Flame" - Chris Jarvis
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
Additional Coding for Impulse Tracker
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
Impulse Tracker Font Customiser - Sherman Wu (ZaStaR)
|
||||||
|
Impulse Tracker Text Importer - Sherman Wu (ZaStaR)
|
||||||
|
Music Module Compression - Emmanual Giasson (Zirconia)
|
||||||
|
Keyboard Configuration files - Stefan Kucharik (Eliot)
|
||||||
|
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
Website Management
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
USA Site - Shawn Mativetsky (Shawn202)
|
||||||
|
http://www.noisemusic.org/it
|
||||||
|
UK Site - Andi Simpson (Imminent)
|
||||||
|
http://www.mixbbs.demon.co.uk
|
||||||
|
European Site - Joost Baaij (CH:ilm)
|
||||||
|
(no longer operational)
|
||||||
|
Spanish Site - Javier Gutierrez
|
||||||
|
http://www.musica.org/impulse
|
||||||
|
Music and Tracking Site - Matthias Ziegs (MAZ)
|
||||||
|
http://www.maz-sound.com
|
||||||
|
IT Resource Central - Matthew Gardner
|
||||||
|
http://www.unidev.com/~logic/music/it
|
||||||
|
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
Documentation Help
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
ASCII Logos - Ze`ev Nissan (Cruel Creator)
|
||||||
|
FILE_ID.DIZ - Ze`ev Nissan (Cruel Creator)
|
||||||
|
MIDI Output documentation - Andre Pang (Ozone)
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Hardware Thanks
|
||||||
|
|
||||||
|
(Sorted alphabetically by company name)
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Company: Advanced Micro Devices (AMD)
|
||||||
|
Received: Interwave Board
|
||||||
|
Website: http://www.amd.com
|
||||||
|
Notes: AMD has discontinued the production of the Interwave chips.
|
||||||
|
Nonetheless, thank-you to Christopher Cox for his excellent service.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Company: Creative Laboratories
|
||||||
|
Received: Sound Blaster AWE32
|
||||||
|
Website: http://www.creaf.com
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Company: Hanmesoft / Hoontech, Korea
|
||||||
|
Received: Sound Track '97
|
||||||
|
Sound Track '97 PCI
|
||||||
|
Website: http://www.hoontech.com
|
||||||
|
Notes: The Sound Track '97 PCI is the worlds first fully SBPro and WSS
|
||||||
|
compatible PCI card and has some of the best features ever seen
|
||||||
|
on a soundcard! For bangs per buck, it's hard to beat one of these!
|
||||||
|
|
||||||
|
Thanks go to Haejin Park and to Seungho Pak!
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Company: Synergy Advanced Technology (Taiwan)
|
||||||
|
Received: ViperMAX
|
||||||
|
Website: http://www.synergy.ca/pctoybox
|
||||||
|
Notes: For a fully compatible Gravis UltraSound card with perfect Sound
|
||||||
|
Blaster compatibility, check out the ViperMAX cards - providing
|
||||||
|
the best of two worlds without the troubles of PnP.
|
||||||
|
|
||||||
|
Special thanks go to James Hsu, Synergy Advanced Technology.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Company: TerraTec International
|
||||||
|
Received: AudioSystem EWS64XL
|
||||||
|
SoundSystem Maestro 32/96
|
||||||
|
SoundSystem Maestro 16/96
|
||||||
|
SoundSystem Gold 16/96
|
||||||
|
SoundSystem Base1
|
||||||
|
Website: http://www.terratec.de
|
||||||
|
Notes: Terratec produces extremely high quality soundcards to cover
|
||||||
|
everyone's needs - check out their high end EWS64XL cards!
|
||||||
|
|
||||||
|
Thanks go to the entire Terratec Team, especially Kay Bruns,
|
||||||
|
Wim Roegels and Sascha Kamps - 3 of the team that I've had
|
||||||
|
the pleasure to come in contact with!
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Contributions
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
(sorted in alphabetical order, listing is Full Name / Alias / Country + notes)
|
||||||
|
|
||||||
|
Name Alias Country Notes
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
<Withheld> Dire Portugal
|
||||||
|
<Withheld> KjWise Iceland
|
||||||
|
Egor Abramov Russia
|
||||||
|
Habib Al-Assaad
|
||||||
|
Tony Allen UK MEGA HUGE contribution, thanks!
|
||||||
|
Simon Altman P'Wolverine Australia
|
||||||
|
Tal Amir Israel
|
||||||
|
Asbjoern Andersen Mystical Denmark
|
||||||
|
Steven Anderson USA Big contribution, thanks!
|
||||||
|
Mikael Andersson Sweden
|
||||||
|
Thomas Andersson Divion Sweden
|
||||||
|
Peter Andries Belgium
|
||||||
|
Jose Angel Spain
|
||||||
|
Tor Erik Arntzen Norway
|
||||||
|
Nicolas Arrouet Onix4MAN France
|
||||||
|
Patrick Arzul Sth Africa Big contribution, thanks!
|
||||||
|
Tal Asa
|
||||||
|
Peter Askel”f Sweden
|
||||||
|
Hans-Joachim Backe Germany
|
||||||
|
Martin Bahner Norway
|
||||||
|
Erick Baker USA Big contribution, thanks!
|
||||||
|
Rodger Ballard Saqquara USA
|
||||||
|
Brandon Bannerman Catspaw USA
|
||||||
|
John Barger USA MEGA HUGE contribution, thanks!!
|
||||||
|
Alex Barnell England
|
||||||
|
Matthew Barnes USA
|
||||||
|
Jayson Barrons USA
|
||||||
|
Claus Bartels Germany
|
||||||
|
Jonathan Bartlett
|
||||||
|
Michael Baumann Germany
|
||||||
|
David Benjamin USA
|
||||||
|
Brian Bennetts Daedalus USA
|
||||||
|
Vaughan Bentley South Africa
|
||||||
|
John Bergman USA Big contribution, thanks!
|
||||||
|
Jeff Best Australia
|
||||||
|
Allen Bettilyon Tremlo USA
|
||||||
|
Bastiaan Bijl Thanatos Netherlands
|
||||||
|
Mike Blaine
|
||||||
|
Christian Bode Germany
|
||||||
|
Lembrecht Bodo Germany
|
||||||
|
Fabian Boes Germany
|
||||||
|
Vicente Beltran Boil Razz Spain
|
||||||
|
Zozo Bogyo Hungary Big contribution, thanks!
|
||||||
|
Nathan Bonfiglio Ash Please contact me!
|
||||||
|
Eman Borg Malta
|
||||||
|
Gianluca Bove Yello '73 Italy
|
||||||
|
Martin Boverhof Netherlands
|
||||||
|
Alexander Brandon Siren USA
|
||||||
|
Yannis Brown Yannis Australia
|
||||||
|
Remko Brugman Digistorm Netherlands
|
||||||
|
Michael Buchholtz Germany Big contribution, thanks!
|
||||||
|
J”rg Burbach Germany
|
||||||
|
Mike Burrell MikPos Canada
|
||||||
|
Clay Busker USA Big contribution, thanks!
|
||||||
|
Jeremy Butcher Netherlands
|
||||||
|
Robert Buecker III USA
|
||||||
|
Gunnar Buettner Germany
|
||||||
|
Jim Cairns Canada
|
||||||
|
Rimas Campe USA
|
||||||
|
Mike Cantelon Foolish Bird Canada
|
||||||
|
Isaac Carrasco Spain Big contribution, thanks!
|
||||||
|
Edward Cashin USA
|
||||||
|
Zach Cappelletti Shams Kitz USA
|
||||||
|
Michael Carlsson Silverstance Sweden
|
||||||
|
Christopher Castiglione USA
|
||||||
|
Nilton Catsillo Chile
|
||||||
|
Hector Chang ZoneSeek Canada Big contribution, thanks!
|
||||||
|
Eric Charlent Spher-X France
|
||||||
|
Eric Chavanon France
|
||||||
|
Andy Chen USA
|
||||||
|
Charles Cho Deadsoul USA Big contribution, thanks!
|
||||||
|
Kenny Chou USA
|
||||||
|
Rick Christy GrymmJack USA
|
||||||
|
Rogier Claessens Netherlands Big contribution, thanks!
|
||||||
|
Jeff Clement Canada
|
||||||
|
David Clipperton Canada
|
||||||
|
Mike Cody USA
|
||||||
|
Shoshi Cohen Israel
|
||||||
|
Caleb Coppock USA Big contribution, thanks!
|
||||||
|
Ben Cormier Canada
|
||||||
|
David Cornish Australia Big contribution, thanks!
|
||||||
|
Martin Cosgrave UK
|
||||||
|
Antony Cowderoy UK
|
||||||
|
David Cox-Espenlaub USA
|
||||||
|
Matt Cramer USA
|
||||||
|
Jim Crawford Pfister USA
|
||||||
|
Dan Cunningham Pentatonic USA Big contribution, thanks!
|
||||||
|
Daniel Cunningham Ireland
|
||||||
|
David Cuny USA
|
||||||
|
Nicholas Dahlin Denmark
|
||||||
|
Chad Dahlquist
|
||||||
|
Christopher Daniel USA
|
||||||
|
Tristan Daniel Jesus2099 France
|
||||||
|
Thomas Daniels III USA MEGA HUGE contribution, thanks!
|
||||||
|
Ben Dany
|
||||||
|
Tulio Guimaraes da Silva Brazil HUGE contribution, thanks!
|
||||||
|
Dave Davis USA
|
||||||
|
Tomer Dayan Israel
|
||||||
|
Fabio De Araujo Neves Brazil
|
||||||
|
Benoit De Greift Eagle Belgium
|
||||||
|
David Dean Sector4 Australia
|
||||||
|
Pierre Decourcelles France Big contribution, thanks!
|
||||||
|
Barthelemy Defossez France
|
||||||
|
Guy Detienne Belgium
|
||||||
|
John Dietzel USA
|
||||||
|
John Di Giacomo USA
|
||||||
|
Luciano Di Lucrezia Spectrum Big contribution, thanks!
|
||||||
|
Nick Dinges Germany
|
||||||
|
Robin Dittwald Satixu Germany
|
||||||
|
Siem Doodeman Netherlands
|
||||||
|
Asaf Dor
|
||||||
|
Stephen Dredge Australia
|
||||||
|
Andrew Dun Australia
|
||||||
|
Dave Dunger Australia
|
||||||
|
Andrew Durk USA
|
||||||
|
Florian Dvorski Thunk Germany
|
||||||
|
Brendan Ebel USA
|
||||||
|
Adam Ebringer Australia
|
||||||
|
Michael Edwards UK
|
||||||
|
John Ehmann Canada
|
||||||
|
Richard Eijkenbroek Netherlands
|
||||||
|
Michael Elis Isreal
|
||||||
|
Garrett Ellis USA
|
||||||
|
Irad Eshel Israel
|
||||||
|
Scott Esposto USA
|
||||||
|
Alexander Ewering Internal Germany
|
||||||
|
Gary Feinmesser England
|
||||||
|
Nick Feldman UK
|
||||||
|
Jim Fergusson USA
|
||||||
|
Robin Fernandes France
|
||||||
|
Dan Fetherstonhaugh England
|
||||||
|
Reuben Firmin Rubz Scotland Big contribution, thanks!
|
||||||
|
Kyle Fischer USA
|
||||||
|
Edward Flick USA
|
||||||
|
Brad Folkens USA
|
||||||
|
Adam Frank USA
|
||||||
|
Andrew Franks Derelict USA
|
||||||
|
Graham Freeman Australia
|
||||||
|
Calvin French Canada
|
||||||
|
Joseph Freund Australia
|
||||||
|
David Friberg USA
|
||||||
|
Matt Friedly Subliminal USA
|
||||||
|
Richard Funke Norway
|
||||||
|
James Furness UK
|
||||||
|
Robert Gage Australia
|
||||||
|
Miles Gannett USA
|
||||||
|
Peter Gaywood UK
|
||||||
|
Christopher General Canada
|
||||||
|
Giovanni Giampieri Italy Big contribution, thanks!
|
||||||
|
Slavko Glamocanin Slovenia
|
||||||
|
Owen Godwin USA
|
||||||
|
Markus Goetz Cookie Jar Germany Big contribution, thanks!
|
||||||
|
John Goforth USA
|
||||||
|
David Goodale Canada
|
||||||
|
Ferdinand Gozum DJ USA
|
||||||
|
Jeff Graham USA HUGE contribution, thanks!
|
||||||
|
Joseph Graham BrianXavier USA
|
||||||
|
Micah Greenlay USA
|
||||||
|
Lorenzo Grifi Italy
|
||||||
|
Sebastian Grillmaier Wayfinder Germany
|
||||||
|
Moritz Grimm Maxx Germany
|
||||||
|
Karsten Grombach Germany Big contribution, thanks!
|
||||||
|
Ariel Gross Stalker USA HUGE contribution, thanks!
|
||||||
|
Sylvian Guiraud France Big contribution, thanks!
|
||||||
|
Joe Hahn USA
|
||||||
|
Peter Hajba Skaven Finland
|
||||||
|
Doris Hamburger USA
|
||||||
|
Tim Hamers Netherlands
|
||||||
|
David Hamilton England
|
||||||
|
Eric Hamilton Dilvish USA Big contribution, thanks!
|
||||||
|
John Harris USA
|
||||||
|
Todd Hartley Tronster USA
|
||||||
|
Ian Haskin SiN Canada
|
||||||
|
John Hastie USA
|
||||||
|
Joshua Hastey Ith USA
|
||||||
|
Thomas Havelka USA
|
||||||
|
David Hays D-Range USA
|
||||||
|
Axel Hedfors Sweden
|
||||||
|
Brett Helgeson Australia Big contribution, thanks!
|
||||||
|
Greg Heo Canada Big contribution, thanks!
|
||||||
|
Liam Hesse Lemm England
|
||||||
|
Anthony Hicks USA
|
||||||
|
Robert Hilpert Germany MEGA HUGE contribution, thanks!
|
||||||
|
Erik Hjelmvik Tweety Sweden
|
||||||
|
Jason Hlisic isotone Australia Big contribution, thanks!
|
||||||
|
John Hobson USA
|
||||||
|
Rune Holm TitanStar Norway
|
||||||
|
Krystal Holstein USA Big contribution, thanks!
|
||||||
|
Alexandre Holzhey Brazil
|
||||||
|
Aake Honkaniemi PAH Finland Big contribution, thanks!
|
||||||
|
Raymon Hoving Finland
|
||||||
|
Troy Howard USA Big contribution, thanks!
|
||||||
|
Ben Howell Rhythm USA
|
||||||
|
Shu Hung Canada Big contribution, thanks!
|
||||||
|
Ryan Hunt Pinion USA
|
||||||
|
David Hunter USA
|
||||||
|
Steve Hunter UK Big contribution, thanks!
|
||||||
|
Samuel Hurst Australia
|
||||||
|
Kohan Ikin Australia
|
||||||
|
Sam Izzo Jestyr Australia
|
||||||
|
Shane Jackson MetaMan Canada
|
||||||
|
Keith Jagielski USA
|
||||||
|
Daniel Janiak Redrick Slovakia Big contribution, thanks!
|
||||||
|
Marko Janssen Netherlands
|
||||||
|
Simon Jarosch Vivid Germany
|
||||||
|
Chris Jarvis Australia
|
||||||
|
Dave Jeavons Realclean Australia HUGE contribution, thanks!
|
||||||
|
James Jeen Australia
|
||||||
|
Joshua Jersild USA
|
||||||
|
Jan Jirak Czechoslovakia
|
||||||
|
Robert Johnson Xenopraxis
|
||||||
|
Mischa Jonker Netherlands
|
||||||
|
Ben Just Australia Big contribution, thanks!
|
||||||
|
Jaakko Kaivosoja Finland
|
||||||
|
Steffen Kamprath Germany
|
||||||
|
Frank Kane USA
|
||||||
|
Ben Kapper Netherlands
|
||||||
|
Ilpo Karkkainen Griffin Finland
|
||||||
|
Tero Karkinen Finland
|
||||||
|
Thomas Karolczak Mindflyer XS
|
||||||
|
Cole Kelley USA
|
||||||
|
Keith Kelly Syrinx USA
|
||||||
|
Mehran Khalili Screamager Luxembourg
|
||||||
|
Leonard Khiroug USA
|
||||||
|
Richard Kidwell USA
|
||||||
|
Thomas Kim USA
|
||||||
|
David Klande Germany
|
||||||
|
Martin Kleinman Brain Netherlands
|
||||||
|
Martin Klossek Germany
|
||||||
|
Bart Knol Armadon Netherlands
|
||||||
|
Stephen Knowles USA
|
||||||
|
Odd Henry Knutsen Netherlands
|
||||||
|
Henning Koch Germany
|
||||||
|
Alexander Koenig Germany
|
||||||
|
David Kondrad USA
|
||||||
|
Zaf Korbetis Australia Big contribution, thanks!
|
||||||
|
Evan Korzon USA
|
||||||
|
Christopher Kowalski USA
|
||||||
|
Kristof Kowalski Cyntax Australia
|
||||||
|
Kevin Krebs Canada
|
||||||
|
Bert Kroes Netherlands
|
||||||
|
Peter Kunath Germany MEGA HUGE contribution, thanks!
|
||||||
|
Rich La Bonte Flatrich USA
|
||||||
|
Michael Ladanyi Canada
|
||||||
|
Brian J LaMattina USA
|
||||||
|
Perttu Lamminm„ki Finland
|
||||||
|
William Lamy willbe France
|
||||||
|
Adam Langdon-Thomas UK
|
||||||
|
Janet Lankester USA
|
||||||
|
Patrick Lea Australia
|
||||||
|
Jon Leahy UK HUGE contribution, thanks!
|
||||||
|
Steven LeBeau USA
|
||||||
|
Eliot Lee PrOtoCoL USA Big contribution, thanks!
|
||||||
|
Nicolas Leveille Knos France
|
||||||
|
Buzz Libre USA
|
||||||
|
Rik Ling USA
|
||||||
|
Randy Locklair USA MEGA HUGE contribution, thanks!
|
||||||
|
Michael Loftus USA MEGA HUGE contribution, thanks!
|
||||||
|
Kris Long USA
|
||||||
|
Jerome Majewski USA HUGE contribution, thanks!
|
||||||
|
Sami M„kinen Finland
|
||||||
|
Don Manton Canada
|
||||||
|
Peter Mares South Africa
|
||||||
|
Anthony Marin Verminator USA
|
||||||
|
Norman Mark Nothing More Canada
|
||||||
|
Alexander Martin Germany
|
||||||
|
Mike Ma'rton Hungary
|
||||||
|
Akos Matte Bat & Cyborg Hungary
|
||||||
|
Lucas Higa Mattsson Sweden
|
||||||
|
Nicola McAleer Ireland
|
||||||
|
Brad McKinnon EtherWizard USA Big contribution, thanks!
|
||||||
|
Ray McManus USA
|
||||||
|
Keith McNally Canada
|
||||||
|
Glen McNiece Australia
|
||||||
|
Vincent Meijer Netherlands
|
||||||
|
Mitchell Menghi Australia
|
||||||
|
David Menkes Behemoth USA
|
||||||
|
Mike Merker Canada
|
||||||
|
Jonathan Mesiano-Crookston Canada
|
||||||
|
Christopher Micali Zephyr USA
|
||||||
|
John Michael-Lloyd USA Big contribution, thanks!
|
||||||
|
Chris Michetti Canada
|
||||||
|
Pekka Mikkola Finland
|
||||||
|
Alex Milla Spain
|
||||||
|
Matthew Miller Australia HUGE contribution, thanks!
|
||||||
|
Tracey Miller Australia Big contribution, thanks!
|
||||||
|
Matthew Mitchell USA Big contribution, thanks!
|
||||||
|
Chun-Yan Miu Hong Kong
|
||||||
|
Mauro Molinari DjM Italy
|
||||||
|
Lutz M”ller Germany
|
||||||
|
Jo Moore USA
|
||||||
|
Freddy Mousseau France
|
||||||
|
Marten Mons Netherlands
|
||||||
|
F. Edmund Mueller USA
|
||||||
|
Markus Mueller G42 Germany Big contribution, thanks!
|
||||||
|
Paul Munson Canada
|
||||||
|
Aaron Murray USA
|
||||||
|
Eric Nadeau Canada
|
||||||
|
Riley Nagler USA
|
||||||
|
Tirone Nel South Africa
|
||||||
|
Frank Nentwich Germany
|
||||||
|
Mikkel Nordberg Denmark HUGE contribution, thanks!
|
||||||
|
Gary Norris USA
|
||||||
|
Fumihiro Odaki Japan
|
||||||
|
Michiyasu Odaki Japan
|
||||||
|
John O'Laughlin USA
|
||||||
|
Anthony Oetzmann AiRON Germany
|
||||||
|
Xavier Orengo USA
|
||||||
|
Frido Otten Cybertron Netherlands Big contribution, thanks!
|
||||||
|
Olli Paasovaara Finland
|
||||||
|
Robert Pain UK
|
||||||
|
Jonathan Pak Maelstrom Australia
|
||||||
|
Andre Pang Ozone Australia
|
||||||
|
Adam Parker USA
|
||||||
|
Jourden Parks AllenKray USA
|
||||||
|
Kiran Patil USA Big contribution, thanks!
|
||||||
|
Stefan Pavlov
|
||||||
|
Christian Pfaff Germany Big contribution, thanks!
|
||||||
|
Jean-Luc Pedneault Canada
|
||||||
|
Nick Pelling UK
|
||||||
|
P-J Perrussel-Morin CyberNitrox France Big contribution, thanks!
|
||||||
|
Chaim Peter-Chester USA
|
||||||
|
Claus Peterson Denmark Big contribution, thanks!
|
||||||
|
Felix Petrescu Waka X Romania
|
||||||
|
Henri Pihkala Estonia
|
||||||
|
Jason Phelps USA Big contribution, thanks!
|
||||||
|
Miklavz Pirnat
|
||||||
|
Eddie Plaskur Mexican Beans Australia
|
||||||
|
Harout Pogossian HP
|
||||||
|
Eric Pomerleau O'Realitea Canada
|
||||||
|
Pascal Q. Porcupine Spikey USA Big contribution, thanks!
|
||||||
|
William Price USA
|
||||||
|
Alexander Rahm Germany HUGE contribution, thanks!
|
||||||
|
Hazhir Ranjram Balk USA
|
||||||
|
Alessandro Rascazzo Antitesi Italy
|
||||||
|
Pasi Rastas Finland
|
||||||
|
Justin Ray Zinc Canada
|
||||||
|
Tobias Reckhard Jester Germany
|
||||||
|
Jimmy Redfern Jimmy Ireland
|
||||||
|
Justin Reid Stein USA
|
||||||
|
Viktor Rez Hungary
|
||||||
|
Owyn Richen
|
||||||
|
Dan Richters USA Big contribution, thanks!
|
||||||
|
Jay Ridley Australia
|
||||||
|
Michael Riegel USA
|
||||||
|
Todd Rieger USA Big contribution, thanks!
|
||||||
|
James Rimmer USA
|
||||||
|
Brendan Robert USA
|
||||||
|
Jeff Robinson USA
|
||||||
|
Josh Rodman K8to USA MEGA HUGE contribution, thanks!
|
||||||
|
Jens Roeben Germany
|
||||||
|
Nick Rose Phantasm Canada
|
||||||
|
Ryan Ross Canada
|
||||||
|
Benjamin Rumbaugh USA
|
||||||
|
Keijo Ruonamaa Gze Finland
|
||||||
|
Geert Rutten Loonatic Netherlands
|
||||||
|
Hannu Salonen Salomon Finland
|
||||||
|
Kevin Salt Netherlands
|
||||||
|
Mark Sanders USA
|
||||||
|
Denis dos Santos Brazil
|
||||||
|
Adi Sapir Doc Israel
|
||||||
|
Janne Savolainen Finland
|
||||||
|
Ben Saylor USA Big contribution, thanks!
|
||||||
|
Konrad Schandera iCEWiND GERMANY
|
||||||
|
H.R. Scheper-Keuter Josuf Netherlands
|
||||||
|
Gerben Schmidt Netherlands
|
||||||
|
Martin Schmidt Germany
|
||||||
|
Daniel Schwab Germany
|
||||||
|
Wolfgang Schwarz Germany Big contribution, thanks!
|
||||||
|
Matthew Scott USA
|
||||||
|
Kristian Sergiejew Poland
|
||||||
|
Saurin Shah Nebula USA
|
||||||
|
Jarrod Sharp Australia
|
||||||
|
Dan Shaw USA
|
||||||
|
Ryan Shaw USA
|
||||||
|
Shaul Shentai Israel HUGE contribution, thanks!
|
||||||
|
Philip Shipley USA
|
||||||
|
Oren Shomron Isreal
|
||||||
|
Josh Silvey USA
|
||||||
|
Morten Skarstad Norway
|
||||||
|
Peter Skeide Norway MEGA HUGE contribution, thanks!
|
||||||
|
Steven Slater Canada
|
||||||
|
Martijn Sneijder Netherlands
|
||||||
|
Trond Smevik Poke Norway
|
||||||
|
Greg Smith Canada
|
||||||
|
Zachary Smith Dr. Zachary USA
|
||||||
|
Christoph S”llner AGENT S Germany
|
||||||
|
Scott Sorenson USA
|
||||||
|
Nicolas Soudee Zoner USA Big contribution, thanks!
|
||||||
|
Michael Soutar MSoutar Australia
|
||||||
|
Kasper Souren Netherlands
|
||||||
|
Patrick Stacey Australia
|
||||||
|
Nick Stanfield UK
|
||||||
|
Andrew Ryan Stinnett USA
|
||||||
|
Ian Stocker RabiteMan USA Big contribution, thanks!
|
||||||
|
Mark Straver Moonchild Netherlands
|
||||||
|
Jer Sypult USA
|
||||||
|
Charles Tabourot France
|
||||||
|
Ravon Tamar RavEon Israel
|
||||||
|
Patrice Tarabbia Mercure France
|
||||||
|
Jason Le Sueur Tatum USA Big contribution, thanks!
|
||||||
|
Thor Teague USA
|
||||||
|
Michael Teehan USA Big contribution, thanks!
|
||||||
|
Michel ten Voorde Netherlands
|
||||||
|
Franck Theuex France Big contribution, thanks!
|
||||||
|
Michael Thomas USA
|
||||||
|
Sebastian Thomas Scotland
|
||||||
|
Jaymz Thompson
|
||||||
|
Philip Thompson UK
|
||||||
|
Franz Thues Germany
|
||||||
|
Gabriele Tittarelli T.S.P. Italy
|
||||||
|
Jason Tracer Electric Keet USA
|
||||||
|
Nash Trajkowski Australia
|
||||||
|
Eric Tremblay DeltaX Canada
|
||||||
|
Brad Turcotte Canada
|
||||||
|
Michael Twarkowsky Germany
|
||||||
|
Asbjorn Ulsberg Norway
|
||||||
|
Martin Underwood UK
|
||||||
|
Jani V„is„nen Finland
|
||||||
|
Mathew Valente TSSF Canada
|
||||||
|
David Van Dromme Stormlord Belgium
|
||||||
|
Ryan Van Eerdewijk Canada
|
||||||
|
Marti Van Lin
|
||||||
|
Erik Van Hengstum Netherlands
|
||||||
|
Ernst Van Rossum Netherlands
|
||||||
|
Filip Van Schoor Cantaloup Belgium
|
||||||
|
Jan Van Stiphout
|
||||||
|
Maarten Van Strien Crystal Score Netherlands
|
||||||
|
Jos vd Geest Netherlands
|
||||||
|
Oscar Vela Spain
|
||||||
|
Markus Visti Finland
|
||||||
|
Ganesh Viswanathan Genosha India
|
||||||
|
Benjamin Vogt Australia
|
||||||
|
Edwin Volkmer Netherlands
|
||||||
|
Vincent Voois Vv Netherlands MEGA HUGE contribution, thanks!
|
||||||
|
Fredrik Von Braun Sweden
|
||||||
|
Arno Vryman Netherlands
|
||||||
|
Petri Vuorio Finland
|
||||||
|
Ben Waddington Australia Big contribution, thanks!
|
||||||
|
Gerd Wagner Germany
|
||||||
|
Chris Wallace CTS USA
|
||||||
|
Thomas Walter Subsonic Australia
|
||||||
|
Adrian Ward England HUGE contribution, thanks!
|
||||||
|
Timothy Weller Flukey USA
|
||||||
|
Bill Wells USA
|
||||||
|
Mike Wells USA
|
||||||
|
Inyoung Whang USA
|
||||||
|
Jemi White Australia
|
||||||
|
Brian Wickman CD USA
|
||||||
|
Liam Widdowson Legend Australia
|
||||||
|
Gene Wie Psibelius USA Big contribution, thanks!
|
||||||
|
David Wiernicki Perisoft USA Big contribution, thanks!
|
||||||
|
John Williams Jackal USA
|
||||||
|
John Wilson USA
|
||||||
|
Tobias Wilton Sweden Big contribution, thanks!
|
||||||
|
Mathias Wintzer
|
||||||
|
Marco Wotschadlo Germany
|
||||||
|
Doug Wright Netriangle USA
|
||||||
|
Fuming Wu Adi Taiwan
|
||||||
|
Takeshi Yamamoto Japan Huge contribution, thanks!
|
||||||
|
Shane Yates AlphaRISC Australia
|
||||||
|
David Zearing USA
|
||||||
|
Daniel Zegiel USA
|
||||||
|
Matthias Ziegs MAZ Germany
|
||||||
|
|
||||||
|
... where's your name? :)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,577 @@
|
||||||
|
|
||||||
|
Notes about the sound drivers
|
||||||
|
|
||||||
|
Be sure to check the driver screen (Shift-F5) of your soundcard!
|
||||||
|
|
||||||
|
I often get asked what soundcard I believe is the best.
|
||||||
|
|
||||||
|
My favourite soundcard is the SBLive! produced by Creative Labs.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Driver Summary
|
||||||
|
|
||||||
|
Driver Def/Max Quick- Stereo Bits Mixing Rate/Resolution
|
||||||
|
Channels select MIDI In/Out available?
|
||||||
|
|
||||||
|
VSound Driver 64/256 Auto Yes 16 8kHz to 64kHz
|
||||||
|
VSound Driver MMX 128/256 Auto Yes 16 8kHz to 64kHz
|
||||||
|
For more details on the VSound drivers, check ITVSOUND.TXT
|
||||||
|
|
||||||
|
PC Speaker 64/256 /S1 No 5-7 12->44kHz
|
||||||
|
DAC on LPT 64/256 No 8 12->44kHz
|
||||||
|
GUS, Hardware * 32/32 /S7 Yes 16 19->44kHz (A)
|
||||||
|
GUSMAX, Software * 64/256 Yes 16 8->64kHz
|
||||||
|
Interwave, Hardware * 32/32 /S8 Yes 16 44kHz, MIDI In + Out
|
||||||
|
Sound Blaster 1.0 * 64/256 /S2 No 8 12kHz->22kHz
|
||||||
|
Sound Blaster 2.0 * 64/256 /S3 No 8 12kHz->44kHz
|
||||||
|
Sound Blaster Pro * 64/256 /S4 Yes 8 6kHz->22kHz (B)
|
||||||
|
No 8 12kHz->44kHz (B)
|
||||||
|
Sound Blaster 16 * 64/256 /S5 Yes 16 12kHz->44kHz, MIDI In
|
||||||
|
Sound Blaster AWE 32* 30/30 Yes 16 44kHz, MIDI In + Out
|
||||||
|
Pro Audio Spectrum 64/256 /S9 Yes 8 12->44kHz
|
||||||
|
Pro Audio Spectrum 16 64/256 /S10 Yes 16 12->44kHz
|
||||||
|
Windows Sound System * 64/256 /S11 Yes 16 8->64kHz
|
||||||
|
ESS 1868 AudioDrive * 64/256 /S12 Yes 16 22->56.8kHz, MIDI In
|
||||||
|
ESS 1688 AudioDrive 64/256 Yes 16 8->48kHz
|
||||||
|
EWS64 Codec * 64/256 /S13 Yes 16 8->48kHz
|
||||||
|
Ensoniq SoundscapeVIVO* 64/256 /S14 Yes 16 8->48kHz
|
||||||
|
SoundTrack PCI * 64/256 Yes 16 8->48kHz
|
||||||
|
|
||||||
|
MPU401 MIDI Driver - /S19 - - MIDI In + Out
|
||||||
|
|
||||||
|
Disk Writer * 256/256 /S20 Yes 16 8->64kHz
|
||||||
|
|
||||||
|
* = Driver will play in the background of Windows '95
|
||||||
|
|
||||||
|
Notes
|
||||||
|
A) Depends on number of channels used. The hiquality GUS driver reinitialises
|
||||||
|
the GUS continually to use as few channels as necessary. Some GUS cards
|
||||||
|
cannot cope with this and you will need to use the alternative ITGUSLO.DRV
|
||||||
|
instead.
|
||||||
|
B) The mixing rate of the SBPro depends on whether playback is stereo or mono
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
PC Speaker (ITPCSPKR.DRV)
|
||||||
|
|
||||||
|
Nothing much else to say here, except... GET A SOUND CARD! :)
|
||||||
|
|
||||||
|
Note: On the info page, using the 'variables' display WILL distort
|
||||||
|
PC Speaker output. Also, it has been found that the Info Page
|
||||||
|
screens and the Pattern Editor cause a noticeably higher amount
|
||||||
|
of hiss through the speaker.
|
||||||
|
|
||||||
|
Note: This driver *MAY NOT* work on laptop's piezo-electric speakers.
|
||||||
|
|
||||||
|
Note: No driver screen available.
|
||||||
|
|
||||||
|
Note: Not for use with Win95
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
DAC on LPT 1/2 Drivers
|
||||||
|
|
||||||
|
These drivers are almost exactly the same as the PC speaker drivers,
|
||||||
|
with only minor modifications.
|
||||||
|
|
||||||
|
To use these, run IT /sITLPT1.DRV or IT /sITLPT2.DRV - depending on
|
||||||
|
which LPT you have your DAC plugged into.
|
||||||
|
|
||||||
|
Note: If you're interested in building your own parallel port DAC,
|
||||||
|
check out: http://www.dnc.net/users/collver/dac.htm
|
||||||
|
or: ftp://ftp.informatik.hu-berlin.de/pub/os/linux/hu-sound/
|
||||||
|
|
||||||
|
Note: No driver screen available.
|
||||||
|
|
||||||
|
Note: On the info page, using the 'variables' display WILL distort
|
||||||
|
PC Speaker output. Also, it has been found that the Info Page
|
||||||
|
screens and the Pattern Editor cause a noticeably higher amount
|
||||||
|
of hiss through the speaker.
|
||||||
|
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Gravis UltraSound, Hardware mixing (ITGUS.DRV)
|
||||||
|
|
||||||
|
This file actually contains two drivers in one file. The first is
|
||||||
|
accessed just by using IT (with no command line parameters, or with
|
||||||
|
/s7 for Gravis UltraSound). This is equivalent to the original
|
||||||
|
internal driver that came with previous versions of Impulse Tracker.
|
||||||
|
|
||||||
|
The second driver is selected by providing the correct IRQ for the
|
||||||
|
GF1 chip. (The second-to-last number of your ULTRASND environment
|
||||||
|
variable). This is an IRQ driven routine, which means that it'll
|
||||||
|
work in the background of Windows '95. But note that the timing for
|
||||||
|
this is NOT as accurate as the timing in the first driver. There is
|
||||||
|
also a possibility that multitasking OSs can sometimes (although
|
||||||
|
rarely) cause some settings to the GUS to be missed (which will cause
|
||||||
|
a note to play unexpectedly). This can be fixed just by restarting
|
||||||
|
playback. There is NO check for the correctness of the IRQ provided.
|
||||||
|
Note that the IRQ driven routine doesn't seem to work on all
|
||||||
|
computers either.. :(
|
||||||
|
|
||||||
|
The Gravis UltraSound *CANNOT* cope with 16-bit samples greater than
|
||||||
|
256k-bytes. This is equivalent to 128k-length samples. Also, 16-bit
|
||||||
|
samples cannot cross 256k boundaries on the GUS, meaning that the
|
||||||
|
amount of memory you have on the card may decrease by more than you
|
||||||
|
expect when you load a 16-bit sample.
|
||||||
|
|
||||||
|
You cannot choose the mixing rate for the GUS - the mixing rate is
|
||||||
|
dependent on the number of channels playing. This driver continuously
|
||||||
|
reinitialises the GUS to use as few channels as possible. You can
|
||||||
|
further restrict the number of channels used with /Lxx on the command
|
||||||
|
line of Impulse Tracker.
|
||||||
|
|
||||||
|
Gravis UltraSound 2, Hardware mixing (ITGUS2.DRV)
|
||||||
|
|
||||||
|
If the first Gravis UltraSound driver clicks continuously when nothing
|
||||||
|
is supposed to be playing, use this driver ("IT /sITGUS2.DRV").
|
||||||
|
|
||||||
|
This driver file also contains two drivers - check above on how to
|
||||||
|
access the second driver.
|
||||||
|
|
||||||
|
Gravis UltraSound Lo-freq, Hardware mixing (ITGUSLO.DRV)
|
||||||
|
|
||||||
|
Only use this driver if notes do *NOT* finish playing off correctly
|
||||||
|
on your GUS. ("IT /sITGUSLO.DRV" or copy ITGUSLO.DRV over ITGUS.DRV)
|
||||||
|
This driver does not try to continuously reinitialise the card to use
|
||||||
|
a minimum number of channels like the above two drivers do.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Gravis Ultrasound MAX - Software mixing (ITGUSMAX.DRV)
|
||||||
|
|
||||||
|
This device has ONLY been included because it works for SOME people.
|
||||||
|
It has NEVER worked under Win95 with GUS drivers installed as far as
|
||||||
|
I know. If it doesn't work for you - I'm sorry, you'll have to use
|
||||||
|
the hardware drivers. Don't write to me and complain if they don't
|
||||||
|
work for you - you probably won't get a reply.
|
||||||
|
|
||||||
|
To use this driver, you MUST specify your GUSMAX's Codec IRQ *AND*
|
||||||
|
DMA on the command line as:
|
||||||
|
|
||||||
|
IT /sITGUSMAX.DRV /i<irq> /d<dma>
|
||||||
|
|
||||||
|
If you want to specify a port (which should be auto-detected OK),
|
||||||
|
the port is of the Codec, NOT the GUS's Base Address.
|
||||||
|
(ie. 32Ch NOT 220h)
|
||||||
|
|
||||||
|
Note: After some testing, it *seems* that you'll need an ULTRINIT
|
||||||
|
of version 2.28a or above to use this driver...
|
||||||
|
|
||||||
|
Here's part of an EMail that I received from Jarkko Seppanen on how he got
|
||||||
|
ITGUSMAX.DRV working:
|
||||||
|
|
||||||
|
I just found a weird way to make the GUS MAX software mixer to work (for me,
|
||||||
|
at least). I normally use DMA 6 for playback and DMA 7 for recording. I was
|
||||||
|
playing around with IT and trying to get the driver to work and changed
|
||||||
|
both DMAs to 1. And for my surprise it started to work. Next I tried it
|
||||||
|
with both DMAs 6, with the same result. But the funny thing is, when I
|
||||||
|
first play a song with both DMAs the same and then change them back to the
|
||||||
|
original (6 and 7), it still works. I'm using IT v2.11 with ultrinit v2.31.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
InterWave Driver - Hardware mixing (ITIW.DRV)
|
||||||
|
(This includes GUS PnP, GUS PnP Pro, WavExtreme 32 Pro + more)
|
||||||
|
|
||||||
|
You *NEED* to have RAM onboard your soundcard to use this driver,
|
||||||
|
otherwise your Interwave card will NOT be detected.
|
||||||
|
|
||||||
|
This file actually contains two drivers in one file. The first is
|
||||||
|
accessed just by using IT (with no command line parameters, or with
|
||||||
|
/s8 for AMD Interwave IC). This is similar to the original internal
|
||||||
|
GUS driver that came with previous versions of Impulse Tracker.
|
||||||
|
|
||||||
|
The second driver is selected by providing the correct IRQ for the
|
||||||
|
Interwave chip. (This is the value given in Windows'95/settings/
|
||||||
|
control panel/system/Interwave SYNTH/IRQ). This is an IRQ driven
|
||||||
|
routine, which means that it'll work in the background of Windows '95.
|
||||||
|
But note that the timing for this is NOT as accurate as the timing in
|
||||||
|
the first driver. There is also a possibility that multitasking OSs
|
||||||
|
can sometimes (although rarely) cause some settings to the GUS to be
|
||||||
|
missed (which will cause a note to play unexpectedly). This can be
|
||||||
|
fixed just by restarting playback (or reinitialising in severe cases).
|
||||||
|
|
||||||
|
There is NO check for the correctness of the IRQ provided.
|
||||||
|
|
||||||
|
The Interwave driver contains handlers for two different memory modes
|
||||||
|
on the Interwave - the more memory efficient mode is where the amount
|
||||||
|
of ram is directly compatible with the interwave, the second is where
|
||||||
|
the DRAM configuration is NOT directly compatible with the interwave
|
||||||
|
and the driver has to handle the RAM slightly more explicitly, which
|
||||||
|
causes the loss of memory-usage efficiency.
|
||||||
|
|
||||||
|
Here are the modes directly compatible with the interwave:
|
||||||
|
|
||||||
|
Bank 0 Bank 1 Bank 2 Bank 3 Total
|
||||||
|
256Kb 0 0 0 256Kb
|
||||||
|
256Kb 256Kb 0 0 512Kb
|
||||||
|
256Kb 256Kb 256Kb 256Kb 1MB
|
||||||
|
256Kb 1MB 0 0 1.25MB
|
||||||
|
256Kb 1MB 1MB 1MB 3.25MB
|
||||||
|
256Kb 256Kb 1MB 0 1.5MB
|
||||||
|
256Kb 256Kb 1MB 1MB 2.5MB
|
||||||
|
1MB 0 0 0 1MB
|
||||||
|
1MB 1MB 0 0 2MB
|
||||||
|
1MB 1MB 1MB 1MB 4MB
|
||||||
|
4MB 0 0 0 4MB
|
||||||
|
* 4MB 4MB 0 0 8MB
|
||||||
|
* 4MB 4MB 4MB 4MB 16MB
|
||||||
|
|
||||||
|
* These modes cannot be handled by the first driver, so are actually
|
||||||
|
handled in the second mode.
|
||||||
|
|
||||||
|
The mixing rate for the Interwave driver is fixed at 44100Hz
|
||||||
|
(CD quality)
|
||||||
|
|
||||||
|
Bug warning: If the sound does NOT play properly, you may need to
|
||||||
|
run IWINIT before running Impulse Tracker
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Sound Blaster 1.0 driver (ITSB.DRV)
|
||||||
|
|
||||||
|
The Sound Blaster has a mixing range of 12000->21739 Hz. You CANNOT
|
||||||
|
hear any stereo (or surround) effects with this driver, because the
|
||||||
|
Sound Blaster does NOT support stereo.
|
||||||
|
|
||||||
|
Hardware detection routines are used for Address (eg. 220h),
|
||||||
|
environment is checked for IRQ and DMA.
|
||||||
|
|
||||||
|
Command line arguments for IRQ and DMA are NOT checked but assumed
|
||||||
|
correct IF this driver is explicitly selected
|
||||||
|
(IT /s2 or IT /sITSB.DRV).
|
||||||
|
|
||||||
|
Sound Blaster 2.0 driver (ITSB2.DRV)
|
||||||
|
|
||||||
|
The Sound Blaster 2 driver is basically the same as the Pro driver
|
||||||
|
with stereo options removed... (ie SB2 cannot do stereo). The
|
||||||
|
mixing range is from 12000 to 43478 Hz.
|
||||||
|
|
||||||
|
Hardware detection routines are used for Address (eg. 220h),
|
||||||
|
environment is checked for IRQ and DMA.
|
||||||
|
|
||||||
|
Command line arguments for IRQ and DMA are NOT checked but assumed
|
||||||
|
correct IF this driver is explicitly selected (IT /s3 or
|
||||||
|
IT /sITSB2.DRV).
|
||||||
|
|
||||||
|
Sound Blaster Pro driver (ITSBPRO.DRV)
|
||||||
|
|
||||||
|
The Sound Blaster Pro has a mixing range of 12000->43478 in mono mode,
|
||||||
|
or 6000->21739 in stereo mode.
|
||||||
|
|
||||||
|
Hardware detection routines are used for Address (eg. 220h),
|
||||||
|
environment is checked for IRQ and DMA.
|
||||||
|
|
||||||
|
Command line arguments for IRQ and DMA are NOT checked but assumed
|
||||||
|
correct IF this driver is explicitly selected
|
||||||
|
(IT /s4 or IT /sITSBPRO.DRV).
|
||||||
|
|
||||||
|
Sound Blaster 16 driver (ITSB16.DRV, ITSB16B.DRV, ITSB16C.DRV)
|
||||||
|
|
||||||
|
The Sound Blaster 16 has a mixing range of 12000->45454 in either mono
|
||||||
|
or stereo modes.
|
||||||
|
|
||||||
|
If you specify this driver ( IT /s5 or IT /sITSB16.DRV ) AND an IRQ
|
||||||
|
or DMA, IT will try to *FORCE* the SB16 to use the IRQ/DMA.
|
||||||
|
|
||||||
|
eg. On my system, I have my SB16 configured to IRQ 2, DMA 5, but I
|
||||||
|
can force it to use IRQ 7, DMA 0 with IT /s5 /i7 /d0
|
||||||
|
|
||||||
|
Hardware detection routines are used for all Address, IRQ and DMA.
|
||||||
|
|
||||||
|
Note: If you select either of the 32-bit mixing modes, then volumes
|
||||||
|
between 0->32768 are used internally instead of 0->128.
|
||||||
|
|
||||||
|
The second driver, ITSB16B.DRV is a cut down version of the main
|
||||||
|
driver which does NOT have the advanced mixing options - the only
|
||||||
|
benefit of this is that it requires less memory. To use this, type:
|
||||||
|
"IT /sITSB16B.DRV". If you want to have this file automatically used
|
||||||
|
just copy it over ITSB16.DRV.
|
||||||
|
|
||||||
|
To get MIDI input, I had to do this in Win95:
|
||||||
|
|
||||||
|
Goto "My Computer", right click -> properties -> device manager ->
|
||||||
|
sound, video and multimedia -> SB16/AWE32 DSP
|
||||||
|
|
||||||
|
Now go to the "resources" tab, and unclick "Use automatic settings"
|
||||||
|
|
||||||
|
Either:
|
||||||
|
1) Change your MIDI port from 300h to 330h or
|
||||||
|
2) Select a 'basic configuration' which doesn't include the MIDI port
|
||||||
|
|
||||||
|
( 3) Get an updated driver from Creative Labs, if they've fixed it )
|
||||||
|
|
||||||
|
Click OK, then click OK on the warning message.
|
||||||
|
|
||||||
|
There is a good chance that it should work now. I believe this is a
|
||||||
|
bug in the older Win95 SB16 drivers. (I *know* that the SB16 driver
|
||||||
|
I have prevents MIDI in DOS boxes and is the cause of these problems
|
||||||
|
because if I remove it, MIDI works flawlessly in DOS boxes in in Win95)
|
||||||
|
|
||||||
|
;---------- ITSB16C.DRV --------
|
||||||
|
|
||||||
|
I finally managed to encounter a computer which wouldn't accept IT's
|
||||||
|
old SB16 drivers - and hence I created ITSB16C.DRV.
|
||||||
|
If you run ITSB16.DRV and the playback cursor does NOT move, then
|
||||||
|
you MUST close your Win95 box (or restart your computer), *then* run:
|
||||||
|
|
||||||
|
IT /sITSB16C.DRV
|
||||||
|
|
||||||
|
This driver is similar to ITSB16B.DRV in that it is a cut down
|
||||||
|
version of the full SB16 driver, but this one also has the MIDI
|
||||||
|
input disabled (which seems to be causing all the problems on the
|
||||||
|
cards which just won't 'play')
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Sound Blaster AWE 32 drivers (ITAWE32.DRV, ITAWE32B.DRV)
|
||||||
|
|
||||||
|
The Sound Blaster AWE 32 driver directly uses the EMU8000 synth chip.
|
||||||
|
This synth chip has several limitations which you should be aware of:
|
||||||
|
|
||||||
|
ù It can only use 16-bit samples.
|
||||||
|
8 bit samples are automatically converted by IT (so that's not a
|
||||||
|
problem), but your free memory may decrease by double of what you
|
||||||
|
expect. (eg. you will need at least 1MB of memory to load 512k
|
||||||
|
of 8 bit samples)
|
||||||
|
|
||||||
|
ù It doesn't support ping pong loops or no loops.
|
||||||
|
IT will automatically expand ping pong loops and will pad non-looped
|
||||||
|
samples with silence, but this makes sample sustain loops impossible
|
||||||
|
to implement fully. It also means that ping pong looped samples
|
||||||
|
could take up to double the memory of forwards looped samples.
|
||||||
|
|
||||||
|
Sustain loops will NOT operate on the AWE32 driver. Instead, they
|
||||||
|
will be treated as NORMAL loops.
|
||||||
|
|
||||||
|
If you change the loop type from none->forwards or
|
||||||
|
forwards->ping pong or ping pong->none, you WILL need to reload
|
||||||
|
the samples each time (Ctrl-G). If you change the loop points on
|
||||||
|
a sample, you *will* have to reload the samples (Ctrl-G)
|
||||||
|
|
||||||
|
ù Has a limited frequency range - from the programming information,
|
||||||
|
it seems that it is impossible to play a note at above 176kHz.
|
||||||
|
This equates to any notes 2 octaves above middle C (or higher) for
|
||||||
|
a sample at 44kHz. If a note is not played because of this
|
||||||
|
frequency limitation, a message will show at the top of the screen
|
||||||
|
indicating that the frequency range has been exceeded.
|
||||||
|
|
||||||
|
Note: The Address used for the SB AWE 32 is the address of the EMU8000,
|
||||||
|
NOT the address of your SB. (for command line params, eg A660)
|
||||||
|
|
||||||
|
Note: This driver is NOT used as a default, as many users would benefit
|
||||||
|
more from the SB16 driver. (I recommend having at least 2MB
|
||||||
|
of memory if you want to use this driver). Run "IT /s6" if you
|
||||||
|
do want to use this driver.
|
||||||
|
|
||||||
|
Note: This driver can operate in Win95. In this mode, it uses a
|
||||||
|
different mechanism which allows the playing of music in the
|
||||||
|
background, but timing is *NOT* as accurate here (accurate to
|
||||||
|
around 100 milli seconds as opposed to 800 nano seconds per
|
||||||
|
frame)
|
||||||
|
|
||||||
|
Note: The second driver, ITAWE32B.DRV, is for people who do *NOT* have
|
||||||
|
a floating point unit (ie. 386, 486SX computers). ITAWE32.DRV
|
||||||
|
is preferred as it requires less memory.
|
||||||
|
|
||||||
|
To access ITAWE32B.DRV, run "IT /sITAWE32B.DRV"
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Pro Audio Spectrum (ITPAS.DRV)
|
||||||
|
Pro Audio Spectrum 16 (ITPAS16.DRV)
|
||||||
|
|
||||||
|
BIG thanks to Pelusa for VITAL programming information for this!!
|
||||||
|
BIG thanks to MZ/PoP for lending me a PAS16 to stuff around with!!
|
||||||
|
|
||||||
|
Note: These drivers will *NOT* work in the background of Win95,
|
||||||
|
although they will work fine in the foreground.
|
||||||
|
|
||||||
|
Note: You NEED to have the MVSOUND.SYS driver installed for these
|
||||||
|
to operate or a Window's system driver.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Windows Sound System (ITWSS.DRV, ITWSS2.DRV)
|
||||||
|
|
||||||
|
Again, BIG thanks to Pelusa for VITAL programming information for this!
|
||||||
|
|
||||||
|
ITWSS is a 16-bit driver, with output frequencies ranging from 8kHz to
|
||||||
|
64kHz (!). Mixing speeds above 48kHz *MAY* not work on all Windows
|
||||||
|
Sound System Cards.
|
||||||
|
|
||||||
|
ITWSS.DRV is a completely IRQ driven routine. Although this may not be
|
||||||
|
compatible with *ALL* soundcards, it permits background playback in
|
||||||
|
Windows'95 and is FAR MORE EFFICIENT than ITWSS2.DRV. ITWSS2.DRV should
|
||||||
|
be used if ITWSS doesn't operate properly.
|
||||||
|
|
||||||
|
Note: There is *NO* autodetection on IRQ/DMA. You *will* need to set
|
||||||
|
these on the command line if they are not IRQ7/DMA1.
|
||||||
|
|
||||||
|
If you *DO* specify IRQ and/or DMA, then it must be DMA 0, 1 or 3,
|
||||||
|
and IRQ 7, 9 10 or 11. Impulse Tracker will attempt to SET the DMA/IRQ
|
||||||
|
of your WSS card to these values, in a similar manner to how the SB16
|
||||||
|
driver operates.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ESS ES1868 AudioDrive (ITES1868.DRV)
|
||||||
|
|
||||||
|
The drivers for the ESS ES1868 AudioDrive use the PnP registers to
|
||||||
|
detect/configure this soundcard. If you have disabled the PnP on the
|
||||||
|
card the driver may not work...
|
||||||
|
|
||||||
|
The default mixing rate is 44kHz, although the card can handle up to 56kHz
|
||||||
|
|
||||||
|
Thanks go out to Diablo for pointing me in the right direction to find
|
||||||
|
the programming information and Andrew Lee for lending me a card to
|
||||||
|
program with!
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ESS ES1688 AudioDrive (ITES1688.DRV)
|
||||||
|
|
||||||
|
This driver was written for Synergy ViperMAX / GUS Extreme soundcards,
|
||||||
|
so that the codec may be used to write songs > 1MB large.
|
||||||
|
|
||||||
|
Thanks go to James Hsu / Synergy for providing me with a card to work on.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
EWS64 XL Codec (ITEWSCOD.DRV)
|
||||||
|
|
||||||
|
Like the ESS ES1868 Audiodrive, this card uses the PnP registers to
|
||||||
|
detect/configure the soundcard. The default mixing rate is set at 48kHz
|
||||||
|
|
||||||
|
Big thanks go out to the entire TerraTec team for providing me with a
|
||||||
|
card to use - especially Kay "Mod4Win" Bruns.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
þ The settings within the EWS64 Codec driver are saved upon exiting.
|
||||||
|
|
||||||
|
þ The "Reverb Types" are:
|
||||||
|
0: Room1
|
||||||
|
1: Room2
|
||||||
|
2: Room3
|
||||||
|
3: Hall1
|
||||||
|
4: Hall2
|
||||||
|
5: Plate
|
||||||
|
6: Delay
|
||||||
|
7: Pan Delay
|
||||||
|
|
||||||
|
The parameter "Reverb Feedback" only has meaning for Reverb Types Delay
|
||||||
|
and Pan Delay (6 and 7)
|
||||||
|
|
||||||
|
þ The "Chorus Types" are:
|
||||||
|
0: Chorus1
|
||||||
|
1: Chorus2
|
||||||
|
2: Chorus3
|
||||||
|
4: Feedback Chorus
|
||||||
|
5: Flanger
|
||||||
|
6: Short Delay
|
||||||
|
7: Feedback Delay
|
||||||
|
|
||||||
|
Note: Chorus will only work with EWS64 XL rev 1.1 or greater
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Ensoniq SoundscapeVIVO (ITVIVO.DRV)
|
||||||
|
|
||||||
|
The drivers for the Ensoniq SoundscapeVIVO use the PnP registers to
|
||||||
|
detect/configure this soundcard. If you have disabled the PnP on the
|
||||||
|
card the driver may not work...
|
||||||
|
|
||||||
|
The default mixing rate is 48kHz.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Sound Track PCI Codec (ITSTCODE.DRV)
|
||||||
|
|
||||||
|
This driver uses the PCI registers to autodetect the card. Unfortunately
|
||||||
|
this does not always seem to be the correct value, hence you may have to
|
||||||
|
override the parameters on the command line. (The computer *MAY* hang if
|
||||||
|
the correct values are not available!)
|
||||||
|
|
||||||
|
Sound Track 97 PCI and Sound Track 42 PCI cards are handled by this driver.
|
||||||
|
|
||||||
|
The 'extra' settings of reverb, chorus, echo, equalizer and surround are
|
||||||
|
not available on the ST42 cards. SRS settings are available.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
þ The settings within the ST97 PCI Codec driver are saved upon exiting.
|
||||||
|
|
||||||
|
þ The "Reverb Types" are:
|
||||||
|
0: Room1
|
||||||
|
1: Room2
|
||||||
|
2: Room3
|
||||||
|
3: Hall1
|
||||||
|
4: Hall2
|
||||||
|
5: Plate
|
||||||
|
6: Delay
|
||||||
|
7: Pan Delay
|
||||||
|
|
||||||
|
The parameter "Reverb Feedback" only has meaning for Reverb Types Delay
|
||||||
|
and Pan Delay (6 and 7)
|
||||||
|
|
||||||
|
þ The "Chorus Types" are:
|
||||||
|
0: Chorus1
|
||||||
|
1: Chorus2
|
||||||
|
2: Chorus3
|
||||||
|
4: Feedback Chorus
|
||||||
|
5: Flanger
|
||||||
|
6: Short Delay
|
||||||
|
7: Feedback Delay
|
||||||
|
|
||||||
|
Huge thanks go to Hanmesoft Corporation for providing me with this awesome
|
||||||
|
card to work on! (check out http://www.hoontech.com)
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
MPU401 MIDI Driver
|
||||||
|
|
||||||
|
The MPU401 MIDI driver provides a MIDI Driver to support MIDI Input and
|
||||||
|
MIDI Output on general soundcards. It does NOT support sample playback
|
||||||
|
at all. Trying to play a sample will result in the note being 'terminated'
|
||||||
|
immediately.
|
||||||
|
|
||||||
|
To use this driver, you may need to provide the MIDI port on the command
|
||||||
|
line;
|
||||||
|
|
||||||
|
eg. "IT /s19 /a360"
|
||||||
|
|
||||||
|
Addresses 330h and 300h are checked if a port is NOT specified.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Disk Writer
|
||||||
|
|
||||||
|
The ITWAV.DRV included with distribution IT is a mono-only
|
||||||
|
example device. To use it, run IT /sITWAV.DRV or IT /s20
|
||||||
|
|
||||||
|
The full ITWAV.DRV file which *IS* capable of stereo output
|
||||||
|
is NOT available for public distribution. Contact me if you
|
||||||
|
wish to obtain this - it will NOT be made available without
|
||||||
|
some sort of (monetary) agreement (US$30 for non-profit use)
|
||||||
|
|
||||||
|
Details
|
||||||
|
þ 16 bit Stereo/Mono output
|
||||||
|
þ 22kHz to 64kHz output frequency
|
||||||
|
þ 16 bit quadratic spline interpolation (65536x 'oversampling')
|
||||||
|
þ 32 bit mixing
|
||||||
|
þ Logarithmic volume ramping with 32768 internal volumes levels.
|
||||||
|
þ Sample cut click removal techniques
|
||||||
|
þ Resonant filtering
|
||||||
|
|
||||||
|
To use the disk writer, run: "IT /sITWAV.DRV" or "IT /s20".
|
||||||
|
The files will be created in the same directory as IT.EXE,
|
||||||
|
and will be of .WAV format. You can change the destination
|
||||||
|
directory on the diskwriter's driver screen (Shift-F5.)
|
||||||
|
|
||||||
|
It is greatly suggested to use a disk cache to improve the
|
||||||
|
writing speed.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
Impulse Tracker Version 2.14
|
||||||
|
|
||||||
|
In the Impulse Tracker ZIP, you should find the following files:
|
||||||
|
|
||||||
|
IT.EXE - The whole program!
|
||||||
|
IT.TXT - User's manual to Impulse Tracker
|
||||||
|
IT.DOC - User's manual in Microsoft Word format
|
||||||
|
CONTRIB.TXT - List of contributions - where's your name??
|
||||||
|
DRIVERS.TXT - List of sound drivers for Impulse Tracker + various notes.
|
||||||
|
If you have a question related to sound quality, sound cards
|
||||||
|
or sound card specific questions, check this DOC first.
|
||||||
|
UPDATE.TXT - History of Impulse Tracker.
|
||||||
|
HINTS.TXT - Just a little compilation of hints for new composers.
|
||||||
|
FILE_ID.DIZ - Compulsory description file :)
|
||||||
|
FILES.TXT - You should know what this is by now!
|
||||||
|
BUGS.TXT - A list of a few known things that are wrong.
|
||||||
|
SUMMARY.TXT - A convenient, small reference that I recommend ANYONE to
|
||||||
|
print out.
|
||||||
|
MIDI.TXT - MIDI Out information written by Andre Pang
|
||||||
|
(Ozone/Vault)
|
||||||
|
IMPULSE.FAQ - Frequently Asked Questions file.
|
||||||
|
ITMIDI.CFG - Basic configuration file for MIDI Output
|
||||||
|
KEYBOARD.ZIP - Alternative keyboard definition files + source to create
|
||||||
|
your own
|
||||||
|
|
||||||
|
*.DRV - Sound driver files for Impulse Tracker
|
||||||
|
|
||||||
|
If you do distribute this program (and please do!), then I would be most
|
||||||
|
grateful if you keep ALL of the files intact.
|
||||||
|
|
||||||
|
- Jeffrey Lim
|
||||||
|
(Pulse)
|
|
@ -0,0 +1,12 @@
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ Impulse Tracker v2.14 ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
³þ MOD, 669, S3M, MTM, XM, IT supported ³
|
||||||
|
³þ 8/16 bit samples, ping pong loops ³
|
||||||
|
³þ 64 Channel/256 Tracks, Full panning ³
|
||||||
|
³þ Volume/Pan/Frequency envelopes ³
|
||||||
|
³þ Huge variety of soundcards supported ³
|
||||||
|
³þ Huge variety of sample formats supported³
|
||||||
|
³þ 10 Stage pattern editing undo buffer ³
|
||||||
|
³þ Internal message editor ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
|
@ -0,0 +1,143 @@
|
||||||
|
|
||||||
|
Impulse Tracker and Resonant Filters
|
||||||
|
|
||||||
|
Wanna know how to get resonant filters working in IT? Read on.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
--------------
|
||||||
|
So far, resonant filters have only been coded into the MMX drivers - so any
|
||||||
|
soundcard which has an MMX driver for IT will support resonant filters. Of
|
||||||
|
course, this means that your computer has to have MMX before you can run them.
|
||||||
|
To hear resonant filtering, you'll first need to select "Filtered" mixing on
|
||||||
|
Shift-F5.
|
||||||
|
|
||||||
|
Do NOT write to me about non MMX resonant filtering.
|
||||||
|
|
||||||
|
Resonant filters CANNOT be included with hardware GUS / Interwave drivers. The
|
||||||
|
reason is because these chips do not support resonant filtering in their mixing
|
||||||
|
algorithms.
|
||||||
|
|
||||||
|
The AWE 32 driver has *approximate* support to IT's software resonant
|
||||||
|
filtering. Songs written using resonant filters on the AWE32 will not sound
|
||||||
|
exactly the same with other drivers.
|
||||||
|
|
||||||
|
The diskwriter has all resonant filtering code, of course. (No MMX required)
|
||||||
|
|
||||||
|
Note that the only external player to have resonant filtering implemented is
|
||||||
|
MikIT. If you use any other player to play your songs that use resonant
|
||||||
|
filtering (including earlier versions of IT), they will not be played
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
First note
|
||||||
|
----------
|
||||||
|
If you do use filtering in your songs, you probably should embed your MIDI
|
||||||
|
Output configuration into the .IT file. This makes the file slightly bigger,
|
||||||
|
but it ensures that your song will be played correctly on any filter-capable
|
||||||
|
driver on any computer. This is selected by turning the "Embed MIDI Data"
|
||||||
|
on the MIDI screen (Shift-F1) to "on".
|
||||||
|
|
||||||
|
Simple filters
|
||||||
|
--------------
|
||||||
|
For most users, this is all that you will need to know.
|
||||||
|
|
||||||
|
The default configuration for IT (copy ITMIDI.CFG to your IT directory) will
|
||||||
|
recognise Z00->Z7F as set filter cutoff frequency and Z80->Z8F as set filter
|
||||||
|
resonance.
|
||||||
|
Z00 is the lowest filter cutoff, Z7F is the highest filter cutoff
|
||||||
|
Z80 is the least resonance, Z8F is the highest resonance
|
||||||
|
|
||||||
|
If you wish to reconfigure the resonant filters or perhaps create some extra
|
||||||
|
shortcuts, then read below!
|
||||||
|
|
||||||
|
How the drivers recognise filters
|
||||||
|
---------------------------------
|
||||||
|
The drivers know what to filter by intercepting MIDI messages. This does NOT
|
||||||
|
mean that filters will require any sort of MIDI equipment, just that the
|
||||||
|
mechanism to instruct the driver to filter a particular note within IT itself
|
||||||
|
is made via the MIDI interface.
|
||||||
|
|
||||||
|
The instructions that the drivers understand so far are:
|
||||||
|
F0 F0 00 <value> - Set filter cutoff frequency to <value>
|
||||||
|
F0 F0 01 <value> - Set Q factor (resonance) of filter to <value>
|
||||||
|
|
||||||
|
In each of these cases, <value> is between 00 and 7Fh. Values above 7Fh are
|
||||||
|
ignored. Note that if filter cutoff is set to 7F and Q is set to 0, then no
|
||||||
|
filters are applied.
|
||||||
|
|
||||||
|
How to tell the drivers these Instructions
|
||||||
|
------------------------------------------
|
||||||
|
OK.. so how can we tell the drivers these instructions?
|
||||||
|
|
||||||
|
For a full explanation, check MIDI.TXT - a short explanation is provided here.
|
||||||
|
|
||||||
|
First of all, go to the MIDI Output configuration screen in IT. Do this by
|
||||||
|
pressing Shift-F1, then clicking on the "MIDI Output Configuration" button.
|
||||||
|
|
||||||
|
You will see several MIDI configurations, then SF0->SFF then Z80-ZFF (that
|
||||||
|
bottom window is scrollable).
|
||||||
|
|
||||||
|
Using Z80 to ZFF
|
||||||
|
----------------
|
||||||
|
Z80->ZFF are the easiest to explain.. so I'll explain them first.
|
||||||
|
|
||||||
|
If you type in "F0 F0 01 3F" next to Z80 (make sure that you have the letters
|
||||||
|
in upper case), then whenever you use Z80 in a pattern, "F0 F0 01 3F" will be
|
||||||
|
sent to the driver. If you refer back to what instructions the driver
|
||||||
|
understands, you'll see that this means "Set filter resonance to 3F".
|
||||||
|
|
||||||
|
A few more examples:
|
||||||
|
Z81 = F0 F0 00 40 - set filter cutoff frequency to 40h
|
||||||
|
Z82 = F0 F0 01 20 - set filter resonance to 20h
|
||||||
|
Z83 = F0 F0 00 10 - set filter cutoff frequency to 10h
|
||||||
|
|
||||||
|
Using SF0->SFF
|
||||||
|
--------------
|
||||||
|
SF0->SFF are slightly more difficult to explain.. but hopefully a few examples
|
||||||
|
will make their usage clear.
|
||||||
|
|
||||||
|
When you use Z00 to Z7F in a pattern, they do not directly translate in the
|
||||||
|
same way as the Z80->ZFF do. Instead, they set a variable internally called
|
||||||
|
'z' that gets substituted into one of the SFx commands.
|
||||||
|
|
||||||
|
Example 1 - If you set SF0 = F0 F0 00 z (on the MIDI Output configuration)
|
||||||
|
|
||||||
|
Then using Z01 will cause "F0 F0 00 01" to be sent.
|
||||||
|
Z01 = F0 F0 00 01 - Set filter cutoff frequency to 1, as above.
|
||||||
|
Z10 = F0 F0 00 10 - Set filter cutoff frequency to 10h
|
||||||
|
Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h
|
||||||
|
Z50 = F0 F0 00 50 - Set filter cutoff frequency to 50h
|
||||||
|
|
||||||
|
Example 2 - If you define:
|
||||||
|
SF0 = F0 F0 00 z
|
||||||
|
SF1 = F0 F0 01 z
|
||||||
|
|
||||||
|
Then:
|
||||||
|
SF0 - Set Zxx to use SF0
|
||||||
|
Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h
|
||||||
|
Z50 = F0 F0 00 50 - Set filter cutoff frequency to 50h
|
||||||
|
SF1 - Set Zxx to use SF1
|
||||||
|
Z20 = F0 F0 01 20 - Set filter resonance to 20h
|
||||||
|
Z3F = F0 F0 01 3F - Set filter resonance to 3Fh
|
||||||
|
Z50 = F0 F0 01 50 - Set filter resonance to 50h
|
||||||
|
SF0 - Set Zxx to use SF0
|
||||||
|
Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h
|
||||||
|
Z10 = F0 F0 00 10 - Set filter cutoff frequency to 10h
|
||||||
|
SF1 - Set Zxx to use SF1
|
||||||
|
Z20 = F0 F0 01 20 - Set filter resonance to 20h
|
||||||
|
Z30 = F0 F0 01 30 - Set filter resonance to 30h
|
||||||
|
|
||||||
|
Note that the default startup configuration for each channel is SF0, so the
|
||||||
|
first SF0 in example 2 is unnecessary.
|
||||||
|
|
||||||
|
Resetting the Filters
|
||||||
|
---------------------
|
||||||
|
Since the filters are driver related (and IT.EXE really doesn't know about
|
||||||
|
their existance), they are not reset automatically when you stop/play a song.
|
||||||
|
If a MIDI Reset (FFh), MIDI Start (FAh) or MIDI Stop (FCh) message is
|
||||||
|
received, then the driver will reset all of it's internal tables. The default
|
||||||
|
configuration will send both MIDI Reset and MIDI Stop commands.
|
||||||
|
|
||||||
|
Final Notes
|
||||||
|
-----------
|
||||||
|
Umm.. Enjoy :)
|
||||||
|
- Jeffrey Lim
|
|
@ -0,0 +1,572 @@
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for Composers
|
||||||
|
-- Pulse
|
||||||
|
|
||||||
|
Well, I'm not the best person to ask for hints, but here are a few anyway.
|
||||||
|
|
||||||
|
1) Never release your first song. There are very few people who are gifted
|
||||||
|
enough to really make a quality song the first time - it's all practice
|
||||||
|
and experience! Once you *HAVE* finished a song, listen to it a couple
|
||||||
|
of days after... see whether you can view it from another point of view.
|
||||||
|
|
||||||
|
2) For channel echoes, use the Mxx command in a second column - this will
|
||||||
|
save you from adjusting volume related effects (ie. you can leave all the
|
||||||
|
Dxx commands alone, and it'll sound right)
|
||||||
|
|
||||||
|
3) Don't be afraid to create multiple instruments from the same sample! The
|
||||||
|
reason for why I created instruments the way I did was so that you could
|
||||||
|
have different *articulations* of the same sample. You can achieve this
|
||||||
|
by playing around with the envelopes, fadeout, NNA - whatever.
|
||||||
|
|
||||||
|
4) Listen to other tracked music. Try and learn how other composers have
|
||||||
|
achieved the sound they did. Experiment yourself.
|
||||||
|
|
||||||
|
5) Start by writing music that *YOU* really like listening to - don't try and
|
||||||
|
write am orchestral piece if you don't listen to it - it'll show.
|
||||||
|
|
||||||
|
6) Take the time to tune all your samples as accurately as possible! To do
|
||||||
|
this, play a long, clear, looped sample, then move to another channel
|
||||||
|
(using '.') and tune ALL your other samples to this one sample (so they
|
||||||
|
all have the same reference). Many potentially excellent modules have
|
||||||
|
been spoilt because they were poorly tuned. Of course, this doesn't
|
||||||
|
count the cases where samples are intentionally slightly sharp or flat
|
||||||
|
for effect (which should be the rarity instead of a rule).
|
||||||
|
|
||||||
|
7) Try to avoid having too many samples at central panning - if you modify
|
||||||
|
the initial panning - you should be able to 'fill' out the sound with
|
||||||
|
very little extra effort. Or perhaps if you use instruments, you may
|
||||||
|
want to play around with instrument's default panning...
|
||||||
|
Pitch pan separation also provides a very convenient way to achieve a
|
||||||
|
nice pan.
|
||||||
|
|
||||||
|
8) To find the 'perfect' loop:
|
||||||
|
|
||||||
|
a) If you have a GUS/IW, first turn the loop off, then reload all GUS
|
||||||
|
samples (so that their entire waveform is loaded).
|
||||||
|
b) Now, select either a forwards or ping pong loop. Only select forwards
|
||||||
|
if you have a sample which has the same amplitude at both ends. If
|
||||||
|
you have a sample which has vibrato incorporated into the sample, then
|
||||||
|
you'll probably find ping pong loops inappropriate. If the sample has
|
||||||
|
an obvious reoccuring shape to it's waveform, try to account for that
|
||||||
|
when you select your initial guess at a loop.
|
||||||
|
c) Play a note at a MUCH higher pitch than you'd normally play it at.
|
||||||
|
Then, hold down '+' (or '-') on on of the loop boundaries to find a
|
||||||
|
region of lowest clicking. Then adjust it carefully (one byte at a
|
||||||
|
time) until you find the best loop location. You will normally need
|
||||||
|
to change both beginning and end points of a ping pong loop to find
|
||||||
|
a nice loop, whereas forwards loops usually only require either loop
|
||||||
|
end or beginning to be modified.
|
||||||
|
d) Now that you have a decent loop at this pitch, decrease the pitch
|
||||||
|
(typically by an octave)
|
||||||
|
e) Repeat steps (c) and (d) until you have a nice loop at the pitch that
|
||||||
|
that sample is played at.
|
||||||
|
f) Once you've finished and if you're using a GUS, press Ctrl-G (to
|
||||||
|
reload the Gravis' samples) and do a final check that you have an
|
||||||
|
appropriate loop.
|
||||||
|
|
||||||
|
This method works very well MOST of the time - don't forget that the '+'
|
||||||
|
and '-' keys can be used to easily modify the loop - and the changed loop
|
||||||
|
is taken into account when you change it (ie. you don't need to replay the
|
||||||
|
sample).
|
||||||
|
|
||||||
|
9) If you want to make a song realistic, try to imagine how the instrument
|
||||||
|
would be played. Pretend you are a musician when you write a part..
|
||||||
|
Also, if you use an instrument such as a piano, try to use more than a
|
||||||
|
single piano note - a real piano will ALWAYS have more than one note
|
||||||
|
playing at a time - use some chords, etc.
|
||||||
|
|
||||||
|
10) For a nice fill to the sound, try to balance the usage of low and high
|
||||||
|
frequencies. Songs with too much bass and too little treble sound rough,
|
||||||
|
songs with too much treble and too little bass sound insubstantial.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for New Composers
|
||||||
|
-- John Hawksley (a.k.a. Greebo)
|
||||||
|
|
||||||
|
1) Listen!
|
||||||
|
|
||||||
|
2) Spend a day figuring out every feature of the tracker.
|
||||||
|
Yes, I'm talking about all the effects and all the keys.
|
||||||
|
ST3 is widely acknowledged to be a bitch to learn, but is (sorry,
|
||||||
|
*was*) the most powerful tracker out. Once you have all the
|
||||||
|
keys and functions sorted, you'll be ripping around IT's in
|
||||||
|
no time. You can leave the advanced instrument stuff for now.
|
||||||
|
|
||||||
|
3) Listen to other tracks, find out how the nice-sounding bits are
|
||||||
|
done. (ie look at the effects and volume/pan column).
|
||||||
|
|
||||||
|
4) Be different. A lot of .MODs are in the same style. Sure, if you
|
||||||
|
like this and feel comfortable with it, then go for it! But if you
|
||||||
|
want to create a new feel -- do that too. People are always ready
|
||||||
|
to try new styles. I personaly enjoy arranging (that covers
|
||||||
|
a lot of styles) but you might like composing rock tracks, for
|
||||||
|
instance. So do it!
|
||||||
|
|
||||||
|
5) Samples. Be selective. Sort all your samples into directories.
|
||||||
|
If you have an editor, the trim thein sample; try to remove the
|
||||||
|
noise or click at the start. Remember -- samples are the building
|
||||||
|
blocks from which we craft music. If the samples are bad,
|
||||||
|
the music will be too.
|
||||||
|
|
||||||
|
6) Tune the samples! When you rip a sample or create one yourself
|
||||||
|
try to do it at the same pitch, or tune it (using the speed value)
|
||||||
|
so that everything is uniform. This will save much hair-pulling
|
||||||
|
later as you try to figure out why half the piece seems to be
|
||||||
|
in G# major and half is in Dflat minor.
|
||||||
|
|
||||||
|
6) Chords. Originaly, people used to sample whole chords to save
|
||||||
|
sample space. Now we've got this wonderful IT with it's gazillions
|
||||||
|
of channels. From ST3 onwards, I have been contructing chords
|
||||||
|
from notes because I had the space to do so. The sound is better
|
||||||
|
and is more of a professional approach.
|
||||||
|
However (there's always a 'but'): be very careful! If you decide
|
||||||
|
to construct a chord rather than use a single sample, some
|
||||||
|
musicianship is required. Simple major chords are easy, but
|
||||||
|
inversions really add to a piece. If you are able to do it this
|
||||||
|
way (look at some piano parts to any of my stuff, for instance),
|
||||||
|
you'll get s professional, crafted sound. But it does take
|
||||||
|
a long time before you'll get a smooth flowing part.
|
||||||
|
|
||||||
|
7) Saving. Okay, so IT hasn't crashed on me yet, but when (if) it
|
||||||
|
does, I'm not going to loose an hours work. Save regularly.
|
||||||
|
Never use IT or ST3 under the GUI in 95 and under Windows 3.1;
|
||||||
|
I found that occaisionaly, windows would do some swapping while
|
||||||
|
ST3 was saving and the module would be corrupt; but ST3 said
|
||||||
|
it was saved ok. Lesson learnt.
|
||||||
|
|
||||||
|
8) Releasing. FTP sites are hard to come by these days. Probably
|
||||||
|
the best method of release is to uuencode your work and
|
||||||
|
post it to alt.binaries.sounds.mods newsgroup.
|
||||||
|
|
||||||
|
|
||||||
|
Hope these are of some help. Remember to visit the Mod Resource Web
|
||||||
|
at http://www.armory.com/~greebo/mod.html
|
||||||
|
|
||||||
|
I can be contacted at greebo@armory.com.
|
||||||
|
|
||||||
|
Good luck!
|
||||||
|
|
||||||
|
John H.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for Composers
|
||||||
|
-- ToalNkor / Realtech
|
||||||
|
|
||||||
|
TIP FOR LOADING EITHER LEFT OR RIGHT CHANNEL OF A STEREO SAMPLE :
|
||||||
|
|
||||||
|
Load the sample as usual and then follow these steps :
|
||||||
|
|
||||||
|
If you want the LEFT channel : Just divide the length by 2
|
||||||
|
by using Ctrl-F. This will delete one byte out of two, and therefore
|
||||||
|
only the "first" sample (the left one) will remain !
|
||||||
|
|
||||||
|
If you want the RIGHT channel : Cut the first and last byte of the
|
||||||
|
sample (By looping it and using Ctrl-B and Ctrl-L). If the original
|
||||||
|
sample sise was X, then the actual size should be X-2. From now on,
|
||||||
|
just follow the same indications as for the left channel and tadaa...
|
||||||
|
your Right channel sample is ready for use !
|
||||||
|
|
||||||
|
After all these operations, dont't forget to multiply the mixfrequency
|
||||||
|
by two to get the original samplingfrequency back !
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for New Composers
|
||||||
|
-- StereoMan
|
||||||
|
|
||||||
|
1) The easiest way to produce flanging like effect is to play same sample in
|
||||||
|
two channels (they must have exactly the same pan-position) and lower or
|
||||||
|
higher the playing frequency of one of the samples - ie:
|
||||||
|
|
||||||
|
1 2 2 (1 is same)
|
||||||
|
³... .. .. Xpp³... .. .. Xpp³ ³... .. .. Xpp³
|
||||||
|
³xxx ii xx ...³xxx ii xx EE1³ or ³xxx ii xx u11³
|
||||||
|
³... .. .. ...³... .. .. ...³ ³... .. .. u00³
|
||||||
|
u00 and so on.
|
||||||
|
<pp> has the same value in the two channels.
|
||||||
|
<ii> is your instrument number.
|
||||||
|
<xxx> is the note you play the sample in.
|
||||||
|
|
||||||
|
2) You can use the above mentioned effect, but instead of having the channels
|
||||||
|
with the same pan position you can put them as Left and Right (full) ie:
|
||||||
|
|
||||||
|
³... .. .. X00³... .. .. XFF|
|
||||||
|
. . .
|
||||||
|
|
||||||
|
this will give you a smooth three dimensional sound.
|
||||||
|
|
||||||
|
Note: This effect has not been tested on SurrounD equipment - the results
|
||||||
|
are li'l unpredictable.
|
||||||
|
|
||||||
|
|
||||||
|
3) Quite a good way to make reverb-like-echos is shown below:
|
||||||
|
|
||||||
|
Let's say You have some sequence playing in one channel. Put the same into
|
||||||
|
another channel and insert one or two (or more) rows before the beginning.
|
||||||
|
Now set all volumes to zero (alt-v) and clear volumes which are not
|
||||||
|
associated with notes (alt-w). Then apply a Dx0 effect (x=1..4 or more)
|
||||||
|
for example:
|
||||||
|
|
||||||
|
³n1. i. .. ...³... .. .. ...³ The results are very good.
|
||||||
|
³n2. i. .. ...³n1. i. 00 D20³ Once you get used to this you can
|
||||||
|
³... .. .. ...³n2. i. 00 D..³ achieve !very! smooth sound.
|
||||||
|
³n3. i. .. ...³... .. .. D..³
|
||||||
|
³... .. .. ...³n3. i. 00 D..³ The samples must not be too short
|
||||||
|
³n4 i. .. ...³... .. .. D..³ so Dx0 can take effect.
|
||||||
|
³... .. .. ...³n4. i. 00 D..³
|
||||||
|
|
||||||
|
|
||||||
|
4) If you make the above channels with different pan positions (x22 and xDD)
|
||||||
|
or (x80, s91) - the results are stunning :)
|
||||||
|
|
||||||
|
|
||||||
|
5) Take your time to read the whole help (yes, the whole of it) - you'll
|
||||||
|
be surprised to find what hides under your keyboard :)
|
||||||
|
|
||||||
|
|
||||||
|
6) Make your tunes as small as possible. People are not quite happy to find
|
||||||
|
they have a 3 or 4 Megs of crap on their already full HD drives.
|
||||||
|
Remember: the smaller = the easiest to spread.
|
||||||
|
|
||||||
|
|
||||||
|
7) NEVER start tracking if you're not into the right mood to track. You'll
|
||||||
|
only loose time and perhaps make another crappy tune.
|
||||||
|
|
||||||
|
|
||||||
|
8) Funny, but I've found that making your own color scheme truly inspires!
|
||||||
|
|
||||||
|
|
||||||
|
9) Experiment! Play around with the effects, envelopes and NNAs. They all
|
||||||
|
make music sound more realistic!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
George Marinov a.k.a. StereoMan - <georgehm@bse.bg>
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for composers
|
||||||
|
-- Ilpo Karkkainen
|
||||||
|
|
||||||
|
- If you listen only one kind of music, it will shut your mind from others. Be
|
||||||
|
versatile. When you listen lots of different kinds of music styles, it also
|
||||||
|
makes your composing a lot more wider and colorful.
|
||||||
|
|
||||||
|
- When listening to music generally, try to sometimes consentrate to something
|
||||||
|
specific, for example backing vocals or drums. It helps you realize the whole.
|
||||||
|
It's also good to try listen what different notes there are in a chord that
|
||||||
|
you hear. At least to me, it has been very helful in chord progression.
|
||||||
|
|
||||||
|
- Details make the whole. Use them wisely, though. Too much details make the
|
||||||
|
song sound bad. I've noticed that in some of my songs.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Onix4MAN's hints
|
||||||
|
|
||||||
|
|
||||||
|
1) CLEANING A WAV FILE UNDER IT.
|
||||||
|
2) CREATING NEW SAMPLES WITH IT.
|
||||||
|
3) 3 (4?) METHODS TO MAKE YOUR MODS SOUND MORE SPACIAL..
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1) CLEANING A BAD SAMPLE UNDER IT:
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
To clean up samples that click at their start (or end) because the waveform
|
||||||
|
has an error at its start (still or end), without going under a wav-editor:
|
||||||
|
|
||||||
|
-turn on Loop
|
||||||
|
-start the loop at 100 bytes for samples > 10000 kb
|
||||||
|
50 bytes for samples < 10000 kb
|
||||||
|
-then do 'ALT-B': Pre-Loop Cut Sample
|
||||||
|
-then turn off the loop
|
||||||
|
-do the same at the end of the sample with 'ALT-L' if the wav clicks
|
||||||
|
at its end
|
||||||
|
|
||||||
|
The numbers of bytes given is OK for often met clicks, if your
|
||||||
|
sample is really bad, just increase it... ;)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2) CREATING NEW SAMPLES WITH IT:
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
-You simply have to edit one pattern composed of several samples.
|
||||||
|
(eg. Compose a Break-Beat on that pattern)
|
||||||
|
-Put this pattern at order 000.
|
||||||
|
-Save this module.
|
||||||
|
-Restart IT in Disk-Writer mode.
|
||||||
|
-Load your module.
|
||||||
|
-Play it: it is now being written as a wav file on your disk.
|
||||||
|
-Restart IT normally.
|
||||||
|
-Load that new sample and use hint 1) if it has a blank at its end to
|
||||||
|
shorten it.
|
||||||
|
|
||||||
|
|
||||||
|
3) 3 (4?) METHODS TO MAKE YOUR MODS SOUND MORE SPACIAL..:
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
-Let's start with the 4th method: it's the Surround.. :)
|
||||||
|
But if your card can't afford surround.. Use one of the 3 following
|
||||||
|
methods:
|
||||||
|
|
||||||
|
These methods are in fact three times the same but with 3 different way.
|
||||||
|
I'm sure you knew at least the first (and probably the 2nd too) ;)
|
||||||
|
These 3 methods require 2 channels.
|
||||||
|
|
||||||
|
For the 2 firsts, you have to set the panning of the Sample/Instrument
|
||||||
|
somewhere (in 'Order list and panning' or on the Sample List [F3], but
|
||||||
|
you'll have to load twice the sample, or on the Instrument List [F4],
|
||||||
|
or on the Pattern Editor itself [F2], but you busy the volume column or
|
||||||
|
the command column..)
|
||||||
|
In the following examples, I've set the Panning in the Volume column
|
||||||
|
(press the key below Escape to do this)
|
||||||
|
|
||||||
|
a) row CHANNEL 1 CHANNEL 2
|
||||||
|
000 C-5 01 00 .00 ... .. .. .00
|
||||||
|
001 ... .. .. .00 C-5 01 64 .00
|
||||||
|
002 ... .. .. .00 ... .. .. .00
|
||||||
|
|
||||||
|
|
||||||
|
b) row CHANNEL 1 CHANNEL 2
|
||||||
|
000 C-5 01 00 .00 C-5 01 64 SDx
|
||||||
|
001 ... .. .. .00 ... .. .. .00
|
||||||
|
|
||||||
|
With 'x < Speed Value' This second method is more precise!
|
||||||
|
You can even write SD0 (ie. 0 as x)
|
||||||
|
|
||||||
|
|
||||||
|
c) The last method is the more interesting if you knew the others,
|
||||||
|
because it does waste your volume column neither the command
|
||||||
|
column! So they remain free for other effects! :)
|
||||||
|
|
||||||
|
* This time, you have to be controlled by Instruments (F12 to select
|
||||||
|
this).
|
||||||
|
* Then you will need exactly the too same instruments:
|
||||||
|
- On F4 Screen, select a blank lign and type 'Alt-P'
|
||||||
|
- Type the lign where your instrument is... Validate!..
|
||||||
|
* Then push the panning button:
|
||||||
|
-set the pan to 00 for your first instrument
|
||||||
|
-set the pan to 64 for your second instrument
|
||||||
|
* Then FOR ONLY ONE of those 2 instruments:
|
||||||
|
Press the Pitch Button and go to edit the envelop:
|
||||||
|
|
||||||
|
-First node: tick 00 ;)
|
||||||
|
value 00
|
||||||
|
|
||||||
|
-Second node: tick 01
|
||||||
|
value 'Whatever_you_want', (-)1 or (-)2 suggested
|
||||||
|
|
||||||
|
-Last (3rd) node: tick 02
|
||||||
|
value 00
|
||||||
|
|
||||||
|
Doing this, you've created a delay between your 2 instruments.
|
||||||
|
To end, place them on the same row on the pattern editor (F2):
|
||||||
|
|
||||||
|
row CHANNEL 1 CHANNEL 2
|
||||||
|
000 C-5 01 .. .00 C-5 02 .. .00
|
||||||
|
001 ... .. .. .00 ... .. .. .00
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
======
|
||||||
|
*) You don't have to set the pan to its maximum (00 and 64/FF).
|
||||||
|
You had better do it for one of your smp/inst. And then, for another
|
||||||
|
choose 16 and 48 (decimal), or...
|
||||||
|
|
||||||
|
*) The third method works because we do not hear the pitch change
|
||||||
|
in most cases since it is quite quick, but I suggest you do not
|
||||||
|
use this method for a piano because it's an example where you'll
|
||||||
|
hear the pitch change and it will sound very ugly: BAAaah! ;)
|
||||||
|
But it work with Violin and many others.
|
||||||
|
It may also depend on the speed of your song (time between ticks)..
|
||||||
|
|
||||||
|
|
||||||
|
- Nicolas ARROUET (Onix4MAN) o4m@mail.cpod.fr
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for new composers.
|
||||||
|
- Nacho Segura
|
||||||
|
|
||||||
|
About quality of sound, cognitive science, a more convenient composing, sound
|
||||||
|
experiments and degrees of freedom.
|
||||||
|
|
||||||
|
1) Some composers (trackers) recommend to work with 128 rows and half the
|
||||||
|
speed (the less the faster). It's supposed that this gives you more control over
|
||||||
|
the tracks, but that's not totally true.
|
||||||
|
|
||||||
|
- The track doubles its length, so you see the half. You have to move
|
||||||
|
more times and jump more lines every time. Is it important? Register in a
|
||||||
|
sheet (or two) how many times do you jump through the pattern.
|
||||||
|
|
||||||
|
- I've examined several songs that use this technique, and this is my
|
||||||
|
conclusion: THEY DON'T NEED IT!!! Even lines are empty or have
|
||||||
|
effects.
|
||||||
|
|
||||||
|
The small amount of control gained doesn't compensate the ergonomical
|
||||||
|
problems. The easiest the best, less interferences between you and the music.
|
||||||
|
Rookies could think that it only makes you be slower. This is a problem, but
|
||||||
|
it's not THE PROBLEM. When you forget twelve times what the hell did you write
|
||||||
|
in top of the pattern and in which track you'll understand...
|
||||||
|
|
||||||
|
|
||||||
|
2) Work. Lots of trackers are proud to say that they are very fast. That's not a
|
||||||
|
virtue, it means less work, less variety, a shorter melody, much less chords, no
|
||||||
|
harmony, sounds not perfectly adjusted, and the most important thing:
|
||||||
|
Repetitions until the Eternity. You haved lasted two months writing this four
|
||||||
|
minutes long song? Show me what you did, I'm really interested!
|
||||||
|
|
||||||
|
|
||||||
|
3) Discover Scroll-Lock. Load a song, press play, see what happens with the
|
||||||
|
cursor... and press some notes.
|
||||||
|
Cool!!! Isn't it?
|
||||||
|
|
||||||
|
|
||||||
|
4) Never use 8-bits or low-quality samples if you can avoid it. The quality of a
|
||||||
|
song depends on the quality of sounds. "More memory than expected" is better
|
||||||
|
than "crappier than expected".
|
||||||
|
|
||||||
|
|
||||||
|
5) Analogic synthetised instruments can produce strange interactions. An
|
||||||
|
example: WARMPAD.PAT (a Gravis Patch) sounds really nice, but this chord
|
||||||
|
produces a strange noise that doesn't exists when we play the same notes
|
||||||
|
separately: C-3, D#-3 and F-3. Upper octaves don t provocate this phenomenon.
|
||||||
|
NOTE: There are several versions of Gravis patches.
|
||||||
|
|
||||||
|
|
||||||
|
6) Use a global volume as high as possible. It not only gives you a better
|
||||||
|
signal-to-noise relation. It also gives to IT more degrees of freedom for
|
||||||
|
volume fades.
|
||||||
|
Make an experiment: Plug the headphones directly to your soundcard, set the
|
||||||
|
global volume to 5-8 and make a fade out from 64 to 0 (don't use envelopes,
|
||||||
|
make it in the volume comlumn of the pattern). You should listen the volume
|
||||||
|
JUMPING (not sliding, jumping!). In Scream Tracker is even worse.
|
||||||
|
|
||||||
|
|
||||||
|
7) Don't be messy allocating tracks (channels, columns... you know). All the
|
||||||
|
percussion grouped in adjacent tracks, the chord grouped, an empty column (or
|
||||||
|
more) separating every group of instruments, so you can write fastly this new
|
||||||
|
idea appeared two seconds ago, without having to go to "Track 21". It also
|
||||||
|
allows you to write and remix fastly. Everything has its own place and you can
|
||||||
|
disorder and reallocate patterns without knowing if that loop has been cut, or
|
||||||
|
where do I have to put a NoteCut command (^^^) to shutdown the analogic
|
||||||
|
looped bass. It seems more complex when you begin (pattern is wider), but it's
|
||||||
|
much better, easier to use.
|
||||||
|
|
||||||
|
|
||||||
|
8) Print the manual and bind it. And when you have done this, RTFM (you
|
||||||
|
know, READ THE #%&@$# MANUAL!!). You'll be surprised.
|
||||||
|
|
||||||
|
|
||||||
|
9) Make an economic contribution. I think he has worked hardly and Impulse
|
||||||
|
Tracker is the only tracker that gives tracker songs a proffesional sound and
|
||||||
|
accoustic. Don't be apologized for sending eight dollars. Is better than zero.
|
||||||
|
Even if you don't want the ITWAV.DRV you should contribute, at least with a
|
||||||
|
simbolic quantity. He has won it.
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for composers
|
||||||
|
-- Joakim "Acoustic" Back
|
||||||
|
|
||||||
|
1) Dont use the same bassline, piano chords or whatever the whole song.
|
||||||
|
Remember that a real drummer wont just sit there like a drummachine,
|
||||||
|
nature will make him tap sometimes and he realy wants to make
|
||||||
|
some fills sometimes.
|
||||||
|
|
||||||
|
2) Feel the music. You dont use hammering industrial drums in a soft,
|
||||||
|
smooth gentle song. And dont place a soft panflute in a blasting
|
||||||
|
hardcore song.
|
||||||
|
|
||||||
|
3) Use the right volume. Keeping the volume low on an instrument and then
|
||||||
|
suddenly higher creates a feel of power and rush. Use it.
|
||||||
|
|
||||||
|
4) There are different ways to make a solo stand out.
|
||||||
|
a) high volume. Having a high volume will instantly keep it in the
|
||||||
|
focus. Be aware that to high volume will make it stand out to much
|
||||||
|
and maybe not fit in the picture anymore.
|
||||||
|
|
||||||
|
b) high or low pitch. If you have a lot low and middle note instruments
|
||||||
|
the solo will be clear and bright as high pitched. As said in other
|
||||||
|
hints, keeping the others too low or too high will sound terrible.
|
||||||
|
|
||||||
|
5) If you play the piano and have a midi keyboard - use the midi support!
|
||||||
|
This will make you see that you play the piano with a lot more feeling
|
||||||
|
than when you track a song with the computer-keyboard.
|
||||||
|
|
||||||
|
6) Accept failure. Dont get all angry just because your song went totaly
|
||||||
|
nuts. This happends all the time. Your songs will be better and better
|
||||||
|
the more you use IT.
|
||||||
|
|
||||||
|
7) Use IT alot! Play around with IT, make crazy songs. This will make you
|
||||||
|
learn ITs features and ways to make nice effects. You wont understand IT
|
||||||
|
by reading the effects from Axx to Zxx, or reading hints like these, but
|
||||||
|
mostly by using the effects and using IT, only training will get you to
|
||||||
|
the top. IT is like a sport, people that dont use it, dont get a thing
|
||||||
|
about it, but when you get the hang of it, its going to flow.
|
||||||
|
|
||||||
|
8) Learn IT in steps. Begin with some simple samples and a few patterns,
|
||||||
|
then learn a few simple effects like Exx and Fxx. When you have learned
|
||||||
|
them, go to a new step. Wait with the instruments (F4).
|
||||||
|
|
||||||
|
9) Make a keychart. Write down some of the keys on a piece of paper, after
|
||||||
|
a few days you will probably know most of them. When you know almost
|
||||||
|
all you will understand that using only the keyboard is MUCH faster than
|
||||||
|
the mouse.
|
||||||
|
|
||||||
|
Thanks for reading, I hope it will help you somehow.
|
||||||
|
/ Acoustic
|
||||||
|
n98joab@tycho.helsingborg.se
|
||||||
|
|
||||||
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Hints for Composers
|
||||||
|
- Maarten Van Stien
|
||||||
|
- Crystal Score / The Black Lotus
|
||||||
|
|
||||||
|
He! ye like simple solutions? Here's one!
|
||||||
|
|
||||||
|
You might have used the diskwriter for simple drumloops! You also might have
|
||||||
|
loaded the wav in programs like Soundforge (the king!) to add nice nice stuff
|
||||||
|
like reverb, eq, dynamics etc...
|
||||||
|
|
||||||
|
As you might guess when you write one period containing a drumloop and you
|
||||||
|
add reverb, then the start of the sample doesn't have reverb at all, while the
|
||||||
|
end of the drumloop as tons of reverb. Apart from the fact that it sounds lame
|
||||||
|
in most cases, LOOPING the sample sounds like hell! So what you do is
|
||||||
|
diskwriting the same loop twice or more. Then add reverb in your sample editor
|
||||||
|
and you'll notice that the second period contains the 'reverb' of the first
|
||||||
|
period. This second period can be looped perfectly. As long as you know where
|
||||||
|
to find the looping-points!
|
||||||
|
|
||||||
|
Now, for simple drumloops with a little bit of reverb it's dead simple.
|
||||||
|
But for complex loops with TONS of reverb/delay/crap&more it might be quit
|
||||||
|
difficult!
|
||||||
|
|
||||||
|
Solution:
|
||||||
|
* make an extra .IT with the same BPM/frames as your drumloop .IT
|
||||||
|
* add a simple, short and immediatly-starting sample at the beginning of each
|
||||||
|
period (in most cases: on pos 000, 016, 032, 048 etc.). These are some sorta
|
||||||
|
metronome instruments I guess..
|
||||||
|
* diskwrite
|
||||||
|
* find the first sample of the 'metronome-instruments' in a sample editor.
|
||||||
|
* add markers at that place.
|
||||||
|
* Mute/Silence the samples so that your metronome-wav ONLY contains markers
|
||||||
|
* copy your complex drumloops or whatever-loops in mem. like ctrl-c
|
||||||
|
* MIX to the metronome wav.
|
||||||
|
|
||||||
|
Now you have markers in your complex drumloops! And if you did the above stuff
|
||||||
|
right, you have perfect loops!
|
||||||
|
|
||||||
|
Make sure the metronome-samples start immediatly! Otherwise use the offset
|
||||||
|
command (C-4 10 63 O10) or something..
|
||||||
|
|
||||||
|
ok.. have a nice diskwrite!
|
||||||
|
|
||||||
|
Crystal Score/The Black Lotus
|
||||||
|
Maarten.Vanstrien@student-kmt.hku.nl
|
|
@ -0,0 +1,261 @@
|
||||||
|
|
||||||
|
|
||||||
|
*** PLEASE take the time to check quickly through this document BEFORE ***
|
||||||
|
*** you write to me. If the answer to your questions lies within here, ***
|
||||||
|
*** do NOT expect a reply at all. ***
|
||||||
|
|
||||||
|
This document is currently incomplete.
|
||||||
|
|
||||||
|
1. Getting Impulse Tracker working.
|
||||||
|
1.1 Requirements to run IT
|
||||||
|
1.2 Insufficient memory messages
|
||||||
|
1.3 "Mix data not allocated"
|
||||||
|
1.4 Video characters scrambled
|
||||||
|
1.5 Impulse Tracker often hangs
|
||||||
|
1.6 Files won't load/take a long time to load!
|
||||||
|
1.7 Impulse Tracker doesn't support my soundcard!
|
||||||
|
1.8 The sound breaks up/computer slows down when playing songs!
|
||||||
|
1.9 Microsoft Windows and Impulse Tracker
|
||||||
|
|
||||||
|
2. Using Impulse Tracker
|
||||||
|
2.1 Loading external samples
|
||||||
|
|
||||||
|
3. Miscellaneous
|
||||||
|
3.1 What are these CACHE.ITS and CACHE.ITI files??
|
||||||
|
3.2 Distribution sites.
|
||||||
|
|
||||||
|
4. Future versions of Impulse Tracker - Not written yet
|
||||||
|
|
||||||
|
1.1 Requirements of IT
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
NOTE WIN95 USERS -> READ LATER
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Impulse Tracker requires a 386+ PC and > 500k of memory. Impulse
|
||||||
|
Tracker uses EMS memory. To setup EMS memory, use the following lines
|
||||||
|
in your CONFIG.SYS file:
|
||||||
|
|
||||||
|
DEVICE=<path>\HIMEM.SYS
|
||||||
|
DEVICE=<path>\EMM386.EXE RAM H=255
|
||||||
|
|
||||||
|
Do *NOT* have "NOEMS" or "FRAME=NONE" on the same line as EMM386.EXE
|
||||||
|
|
||||||
|
Also shove these lines in, if they're not already there:
|
||||||
|
|
||||||
|
DOS=HIGH,UMB <--- just to get yourself a little more memory
|
||||||
|
STACKS=0,0 <--- Some computers require this to prevent crashing
|
||||||
|
|
||||||
|
I cannot guarantee that IT will work with QEMM, but Leszek Clapinski
|
||||||
|
wrote to me with this advice (thanks!):
|
||||||
|
In your config.sys, use:
|
||||||
|
DEVICE=<path>\QEMM386.SYS DMA=64 HANDLES=255 FORCEEMS
|
||||||
|
Then use "IT -P2"
|
||||||
|
|
||||||
|
I recommend that you also devicehigh and Load-high (LH) as many
|
||||||
|
possible drivers, so that you have more conventional memory to play
|
||||||
|
around with.
|
||||||
|
|
||||||
|
-----------
|
||||||
|
Win95 Users
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If you are a Win95 user, you're probably best off not having HIMEM.SYS
|
||||||
|
*OR* EMM386.EXE in your CONFIG.SYS file. If you *do* have EMM386,
|
||||||
|
make sure you do NOT have "noems" as a parameter.
|
||||||
|
|
||||||
|
Win95's internal EMS handling routines *DO* automatically provide
|
||||||
|
the optimum environment for IT, so you should be able to ignore the
|
||||||
|
settings given above.
|
||||||
|
|
||||||
|
1.2 Insufficient memory messages
|
||||||
|
|
||||||
|
If you get Insufficient Memory messages at the soundcard
|
||||||
|
initialisation, read section 1.3
|
||||||
|
|
||||||
|
If you do not have enough conventional memory, the program will
|
||||||
|
exit to DOS almost immediately. If you *JUST* have enough conventional
|
||||||
|
memory, then there may not be enough memory left over to load the
|
||||||
|
sound driver(s) ( -> No sound card detected )
|
||||||
|
|
||||||
|
1.3 "Mix Data not allocated" messages
|
||||||
|
|
||||||
|
All non-wavetable cards require extra *conventional* memory to be
|
||||||
|
allocated in order for them to run appropriately. The amount requires
|
||||||
|
differs between the drivers and depends also on the mixing speed (the
|
||||||
|
higher the mix speed, the more memory required). If you get this
|
||||||
|
message, try to free up some conventional memory.
|
||||||
|
|
||||||
|
1.4 Video character's scrambled
|
||||||
|
|
||||||
|
Some video cards (esp Matrox cards) did not follow the VGA register
|
||||||
|
standard correctly. Impulse Tracker tries to detecting whether
|
||||||
|
you have such a card, but if this is not successful, run IT /v2
|
||||||
|
for Matrox compatibility mode.
|
||||||
|
|
||||||
|
1.5 Impulse Tracker often hangs
|
||||||
|
|
||||||
|
Impulse Tracker may not operate securely in anything other than
|
||||||
|
DOS and Windows 95 (these are the two systems that IT has been
|
||||||
|
extensively tested on) - QEMM/Command shells (eg 4DOS/NDOS) have
|
||||||
|
been known to cause errors in many situations.
|
||||||
|
|
||||||
|
Aside from these, if Impulse Tracker hangs on you, please write to
|
||||||
|
me immediately, with a full description of what happens/how you can
|
||||||
|
make it happen. (Including the version of IT that you use!)
|
||||||
|
|
||||||
|
If you get a blank screen when you run Impulse Tracker, try using
|
||||||
|
command line parameters to specify your soundcard and port/irq/dma.
|
||||||
|
The autodetect procedures seem pretty reliable, but there's a chance
|
||||||
|
that they may be interfering/interacting with unexpected hardware.
|
||||||
|
|
||||||
|
1.6 Files won't load/take a long time to load!
|
||||||
|
|
||||||
|
Some music modules are actually compressed with a program called
|
||||||
|
MMCMP. Under normal conditions, these files can be decompressed
|
||||||
|
automatically, under the following situations, they _cannot_:
|
||||||
|
|
||||||
|
1) You do NOT have EMM386 loaded - the decompression routines
|
||||||
|
require EMS memory, so if you do not have EMS, you cannot
|
||||||
|
load these files.
|
||||||
|
2) You are running Impulse Tracker through Windows 3.xx -
|
||||||
|
Windows 3.xx prevents programs from doing certain things...
|
||||||
|
including the setup routines that the decompressor requires
|
||||||
|
to run - so these files cannot be loaded under Windows 3.xx
|
||||||
|
|
||||||
|
These files will take longer to load, as they are compressed and are
|
||||||
|
decompressed to disk first.
|
||||||
|
|
||||||
|
1.7 Impulse Tracker doesn't support my soundcard!
|
||||||
|
|
||||||
|
There may be two reasons for this:
|
||||||
|
1) Impulse Tracker really doesn't support your soundcard.
|
||||||
|
2) Impulse Tracker supposedly does support your soundcard but
|
||||||
|
you can't get it to work.
|
||||||
|
|
||||||
|
1) Solution: Convince your soundcard manufacturer to send me a sound
|
||||||
|
card to play with AS WELL AS all the programming information.
|
||||||
|
Alternatively, find a soundcard that Impulse Tracker *DOES*
|
||||||
|
support - you can pick up some decent soundcards really cheaply.
|
||||||
|
|
||||||
|
2) First of all, check that you have enough memory. If you have
|
||||||
|
a low amount of FreeMem once you load Impulse Tracker, it probably
|
||||||
|
means that there wasn't enough memory to load the sound driver file
|
||||||
|
which will automatically cause a detect failure.
|
||||||
|
|
||||||
|
Unfortunately, not all 100% compatible (esp "100% SBPro compatible")
|
||||||
|
soundcards are REALLY 100% compatible. If the drivers do not detect
|
||||||
|
your soundcard, then try specifying full command line parameters.
|
||||||
|
If it still doesn't work, then I'm sorry - there's nothing I can do
|
||||||
|
about this. Hassle your sound card manufacturer to make decent
|
||||||
|
eqiupment.
|
||||||
|
|
||||||
|
Impulse Tracker uses SB cards in a different *MODE* of playback
|
||||||
|
from most programs so that they are more efficient and also so
|
||||||
|
that they can operate in the background of Windows 95. So just
|
||||||
|
because your soundcard works in another program, it doesn't mean
|
||||||
|
that it's 100% compatible. (this is for all of you who may think
|
||||||
|
"But this card works in other programs, why doesn't it work in IT?")
|
||||||
|
|
||||||
|
For Sound Blaster cards, make sure you have the BLASTER environment
|
||||||
|
variable set in order for IT to detect your card reliably
|
||||||
|
(SB16/AWE32 excluded, as these use hardware routines).
|
||||||
|
|
||||||
|
1.8 The sound breaks up/computer slows down when playing songs!
|
||||||
|
|
||||||
|
(This section only deals with software mixed cards, ie. almost
|
||||||
|
every soundcard except native GUS, Interwave and EMU8000)
|
||||||
|
|
||||||
|
Sound output from the computer requires HEAVY computation - up to
|
||||||
|
64 thousand calculations per second PER NOTE playing. If your computer
|
||||||
|
is unable to keep up with this, the sound will have very obvious
|
||||||
|
chunks in it and your computer will slow down noticeably.
|
||||||
|
|
||||||
|
Solutions:
|
||||||
|
1) If you're running Impulse Tracker under windows, you may find
|
||||||
|
that running it from a DOS bootup provides a SIGNIFICANT increase
|
||||||
|
the capabilities of your computer in this respect (3x faster
|
||||||
|
in DOS than Win95 for me)
|
||||||
|
2) Limit the number of notes you can have simultaneously via the
|
||||||
|
command line (/Lxx) - eg. "IT /L32" will limit playback to
|
||||||
|
32 simultaneous notes maximum.
|
||||||
|
3) Lower the number of calculations required per second per note.
|
||||||
|
This is done by changing the "mixing speed" via the command line:
|
||||||
|
eg: "IT /m32000" will cause 32000 calculations per second per note
|
||||||
|
to be made. "IT /m22000" will cause 22000 calculations per second
|
||||||
|
per note to be made. Check drivers.txt to find the range of
|
||||||
|
mixing speed values that your soundcard can manage.
|
||||||
|
4) Get a faster computer :)
|
||||||
|
|
||||||
|
1.9 Microsoft Windows and Impulse Tracker
|
||||||
|
|
||||||
|
Microsoft Windows 3.xx and Impulse Tracker is a definite no-no.
|
||||||
|
I do NOT guarantee ANYTHING under this configuration. I probably
|
||||||
|
also will not fixup any problems that occur in Impulse Tracker
|
||||||
|
that only occur under Windows 3.xx
|
||||||
|
|
||||||
|
Microsft Windows '95 and Impulse Tracker *SHOULD* work fine.
|
||||||
|
If no sound card can be detected under Windows '95, check first that
|
||||||
|
you have no other program using your soundcard (or another DOS window
|
||||||
|
still open that used your soundcard).
|
||||||
|
|
||||||
|
Only certain soundcards can play in the background of Windows '95 for
|
||||||
|
technical reasons. Please read the relevant section of DRIVERS.DOC
|
||||||
|
for your soundcard.
|
||||||
|
|
||||||
|
Some people have found that Impulse Tracker will hang after a few
|
||||||
|
minutes under Windows '95. Disabling virtual memory may solve this
|
||||||
|
problem. To disable Virtual Memory, right click on My Computer,
|
||||||
|
Properties, Performance, Virtual Memory and check the "disable" box.
|
||||||
|
|
||||||
|
2.1 Loading external samples
|
||||||
|
|
||||||
|
To load in another sample so that you can use it in your composition,
|
||||||
|
go to the sample-list page (F3), then press "Enter". You will be
|
||||||
|
taken to the "load sample" screen, where you can test out and select
|
||||||
|
samples from a wide variety of formats. This includes:
|
||||||
|
.IFF, .WAV, .S3I, .ITS, .RAW, and TX Wave .Wxx formats.
|
||||||
|
|
||||||
|
You can even load samples DIRECTLY OUT of other modules. In the sample
|
||||||
|
loader, navigate to a drive/directory which contains modules, and you
|
||||||
|
will see that they can opened as 'libraries.' So far, support for
|
||||||
|
external sample loading from modules is available for:
|
||||||
|
.MOD, .MTM, .S3M, .XM, .669, .PTM, .FAR and of course, .IT
|
||||||
|
|
||||||
|
.PAT and .KRZ instruments can also be loaded as sample libraries at
|
||||||
|
the moment.
|
||||||
|
|
||||||
|
3.1 What are these CACHE.ITS and CACHE.ITI files?
|
||||||
|
|
||||||
|
Whenever you load a sample or instrument, Impulse Tracker has to
|
||||||
|
load all the files to find out their contents, to determine
|
||||||
|
parameters such as sample format, bit fields, etc. CACHE.ITS and
|
||||||
|
CACHE.ITI are files created by Impulse Tracker so that on subsequent
|
||||||
|
usage, this information can be loaded almost instantaneously from
|
||||||
|
a single file, rather than having to reload all the information
|
||||||
|
again.
|
||||||
|
|
||||||
|
These may be deleted without disrupting program usage, but they will
|
||||||
|
be recreated when you attempt to load samples/instruments from the
|
||||||
|
directory.
|
||||||
|
|
||||||
|
3.2 Distribution Sites
|
||||||
|
|
||||||
|
To get the latest versions of IT on the web, check out:
|
||||||
|
|
||||||
|
USA Site - Shawn Mativetsky (Shawn202)
|
||||||
|
http://www.noisemusic.org/it
|
||||||
|
UK Site - Andi Simpson (Imminent)
|
||||||
|
http://www.mixbbs.demon.co.uk
|
||||||
|
Spanish Site - Javier Gutierrez
|
||||||
|
http://www.musica.org/impulse
|
||||||
|
Music and Tracking Site - Matthias Ziegs (MAZ)
|
||||||
|
http://www.maz-sound.com
|
||||||
|
IT Resource Central - Matthew Gardner
|
||||||
|
http://www.unidev.com/~logic/music/it
|
||||||
|
|
||||||
|
Please don't write to me to become a distribution site - the sites
|
||||||
|
above should be sufficient, and I don't think it is necessary to
|
||||||
|
have BBS distributions since the use of the internet has become
|
||||||
|
so widespread.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1,901 @@
|
||||||
|
|
||||||
|
Impulse Header Layout
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000: ³'I'³'M'³'P'³'M'³ Song Name, max 26 characters, includes NULL ³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´
|
||||||
|
0010: ³.......................................................³PHiligt³
|
||||||
|
ÃÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´
|
||||||
|
0020: ³OrdNum ³InsNum ³SmpNum ³PatNum ³ Cwt/v ³ Cmwt ³ Flags ³Special³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄ´
|
||||||
|
0030: ³GV ³MV ³IS ³IT ³Sep³PWD³MsgLgth³Message Offset ³ Reserved ³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
0040: ³ Chnl Pan (64 bytes)...........................................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0080: ³ Chnl Vol (64 bytes)...........................................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
00C0: ³ Orders, Length = OrdNum ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
xxxx: ³ 'Long' Offset of instruments, Length = InsNum*4 (1) ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
xxxx: ³ 'Long' Offset of samples headers, Length = SmpNum*4 (2) ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
xxxx: ³ 'Long' Offset of patterns, Length = PatNum*4 (3) ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
(1) Offset = 00C0h+OrdNum
|
||||||
|
(2) Offset = 00C0h+OrdNum+InsNum*4
|
||||||
|
(3) Offset = 00C0h+OrdNum+InsNum*4+SmpNum*4
|
||||||
|
|
||||||
|
Note that if the (long) offset to a pattern = 0, then the
|
||||||
|
pattern is assumed to be a 64 row empty pattern.
|
||||||
|
|
||||||
|
PHiliht = Pattern row hilight information. Only relevant for pattern
|
||||||
|
editing situations.
|
||||||
|
|
||||||
|
Cwt: Created with tracker.
|
||||||
|
Impulse Tracker y.xx = 0yxxh
|
||||||
|
Cmwt: Compatible with tracker with version greater than value.
|
||||||
|
(ie. format version)
|
||||||
|
OrdNum: Number of orders in song.
|
||||||
|
InsNum: Number of instruments in song
|
||||||
|
SmpNum: Number of samples in song
|
||||||
|
PatNum: Number of patterns in song
|
||||||
|
Flags: Bit 0: On = Stereo, Off = Mono
|
||||||
|
Bit 1: Vol0MixOptimizations - If on, no mixing occurs if
|
||||||
|
the volume at mixing time is 0 (redundant v1.04+)
|
||||||
|
Bit 2: On = Use instruments, Off = Use samples.
|
||||||
|
Bit 3: On = Linear slides, Off = Amiga slides.
|
||||||
|
Bit 4: On = Old Effects, Off = IT Effects
|
||||||
|
Differences:
|
||||||
|
- Vibrato is updated EVERY frame in IT mode, whereas
|
||||||
|
it is updated every non-row frame in other formats.
|
||||||
|
Also, it is two times deeper with Old Effects ON
|
||||||
|
- Command Oxx will set the sample offset to the END
|
||||||
|
of a sample instead of ignoring the command under
|
||||||
|
old effects mode.
|
||||||
|
- (More to come, probably)
|
||||||
|
Bit 5: On = Link Effect G's memory with Effect E/F. Also
|
||||||
|
Gxx with an instrument present will cause the
|
||||||
|
envelopes to be retriggered. If you change a
|
||||||
|
sample on a row with Gxx, it'll adjust the
|
||||||
|
frequency of the current note according to:
|
||||||
|
|
||||||
|
NewFrequency = OldFrequency * NewC5 / OldC5;
|
||||||
|
Bit 6: Use MIDI pitch controller, Pitch depth given by PWD
|
||||||
|
Bit 7: Request embedded MIDI configuration
|
||||||
|
(Coded this way to permit cross-version saving)
|
||||||
|
|
||||||
|
Special: Bit 0: On = song message attached.
|
||||||
|
Song message:
|
||||||
|
Stored at offset given by "Message Offset" field.
|
||||||
|
Length = MsgLgth.
|
||||||
|
NewLine = 0Dh (13 dec)
|
||||||
|
EndOfMsg = 0
|
||||||
|
|
||||||
|
Note: v1.04+ of IT may have song messages of up to
|
||||||
|
8000 bytes included.
|
||||||
|
Bit 1: Reserved
|
||||||
|
Bit 2: Reserved
|
||||||
|
Bit 3: MIDI configuration embedded
|
||||||
|
Bit 4-15: Reserved
|
||||||
|
|
||||||
|
GV: Global volume. (0->128) All volumes are adjusted by this
|
||||||
|
MV: Mix volume (0->128) During mixing, this value controls
|
||||||
|
the magnitude of the wave being mixed.
|
||||||
|
IS: Initial Speed of song.
|
||||||
|
IT: Initial Tempo of song
|
||||||
|
Sep: Panning separation between channels (0->128, 128 is max sep.)
|
||||||
|
PWD: Pitch wheel depth for MIDI controllers
|
||||||
|
Chnl Vol: Volume for each channel. Ranges from 0->64
|
||||||
|
Chnl Pan: Each byte contains a panning value for a channel. Ranges from
|
||||||
|
0 (absolute left) to 64 (absolute right). 32 = central pan,
|
||||||
|
100 = Surround sound.
|
||||||
|
+128 = disabled channel (notes will not be played, but note
|
||||||
|
that effects in muted channels are
|
||||||
|
still processed)
|
||||||
|
Orders: This is the order in which the patterns are played.
|
||||||
|
Valid values are from 0->199.
|
||||||
|
255 = "---", End of song marker
|
||||||
|
254 = "+++", Skip to next order
|
||||||
|
|
||||||
|
|
||||||
|
Old Impulse Instrument Format (cmwt < 200h)
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000: ³'I'³'M'³'P'³'I'³ DOS FileName (12345678.123) ³
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
0010: ³00h³Flg³VLS³VLE³SLS³SLE³ x ³ x ³FadeOut³NNA³DNC³TrkVers³NoS³ x ³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0020: ³ Instrument Name, max 26 bytes, includes NUL...................³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
0030: ³.......................................³ x ³ x ³ x ³ x ³ x ³ x ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0040: ³ Note-Sample/Keyboard Table, Length = 240 bytes................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0130: ³ Volume envelope (200 bytes)...................................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
01F8: ³ Node points (25x2 bytes)......³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Total length of old instrument header is 554 bytes.
|
||||||
|
|
||||||
|
Flg: Bit 0. On = Use volume envelope
|
||||||
|
Bit 1. On = Use volume loop
|
||||||
|
Bit 2. On = Use sustain volume loop
|
||||||
|
VLS: Volume loop start (node number)
|
||||||
|
VLE: Volume loop end (node number)
|
||||||
|
SLS: Sustain loop start (node number)
|
||||||
|
SLE: Sustain loop end (node number)
|
||||||
|
FadeOut: Ranges between 0 and 64, but the fadeout "Count" is 512.
|
||||||
|
Fade applied when:
|
||||||
|
1) Note fade NNA is selected and triggered (by another note)
|
||||||
|
2) Note off NNA is selected with no volume envelope
|
||||||
|
or volume envelope loop
|
||||||
|
3) Volume envelope end is reached
|
||||||
|
|
||||||
|
DNC: Duplicate note check (0 = Off, 1 = On)
|
||||||
|
NNA: New note action:
|
||||||
|
0 = Note cut
|
||||||
|
1 = Note continue
|
||||||
|
2 = Note off
|
||||||
|
3 = Note fade
|
||||||
|
|
||||||
|
TrkVers: Tracker version used to save the instrument. This is only
|
||||||
|
used in the instrument files.
|
||||||
|
NoS: Number of samples associated with instrument. This is only
|
||||||
|
used in the instrument files.
|
||||||
|
|
||||||
|
Note-Sample/Keyboard Table.
|
||||||
|
Each note of the instrument is first converted to a sample number
|
||||||
|
and a note (C-0 -> B-9). These are stored as note/sample pairs
|
||||||
|
(note first, range 0->119 for C-0 to B-9, sample ranges from
|
||||||
|
1-99, 0=no sample)
|
||||||
|
|
||||||
|
Volume envelope: Values from 0->64, 0FFh indicating end of envelope.
|
||||||
|
(after which note fade applies)
|
||||||
|
|
||||||
|
Node data: Tick THEN magnitude
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Impulse Instrument Format
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000: ³'I'³'M'³'P'³'I'³ DOS FileName (12345678.123) ³
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
0010: ³00h³NNA³DCT³DCA³FadeOut³PPS³PPC³GbV³DfP³RV ³RP ³TrkVers³NoS³ x ³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0020: ³ Instrument Name, max 26 bytes, includes NUL...................³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄ´
|
||||||
|
0030: ³.......................................³IFC³IFR³MCh³MPr³MIDIBnk³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄ´
|
||||||
|
0040: ³ Note-Sample/Keyboard Table, Length = 240 bytes................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0130: ³ Envelopes.....................................................³
|
||||||
|
ÃÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
NNA = New Note Action
|
||||||
|
0 = Cut 1 = Continue
|
||||||
|
2 = Note off 3 = Note fade
|
||||||
|
|
||||||
|
DCT = Duplicate Check Type
|
||||||
|
0 = Off 1 = Note
|
||||||
|
2 = Sample 3 = Instrument
|
||||||
|
|
||||||
|
DCA: Duplicate Check Action
|
||||||
|
0 = Cut
|
||||||
|
1 = Note Off
|
||||||
|
2 = Note fade
|
||||||
|
|
||||||
|
FadeOut: Ranges between 0 and 128, but the fadeout "Count" is 1024
|
||||||
|
See the Last section on how this works.
|
||||||
|
Fade applied when:
|
||||||
|
1) Note fade NNA is selected and triggered (by another note)
|
||||||
|
2) Note off NNA is selected with no volume envelope
|
||||||
|
or volume envelope loop
|
||||||
|
3) Volume envelope end is reached
|
||||||
|
|
||||||
|
PPS: Pitch-Pan separation, range -32 -> +32
|
||||||
|
PPC: Pitch-Pan center: C-0 to B-9 represented as 0->119 inclusive
|
||||||
|
|
||||||
|
GbV: Global Volume, 0->128
|
||||||
|
DfP: Default Pan, 0->64, &128 => Don't use
|
||||||
|
RV: Random volume variation (percentage)
|
||||||
|
RP: Random panning variation (panning change - not implemented yet)
|
||||||
|
|
||||||
|
MCh = MIDI Channel
|
||||||
|
MPr = MIDI Program (Instrument)
|
||||||
|
|
||||||
|
TrkVers: Tracker version used to save the instrument. This is only
|
||||||
|
used in the instrument files.
|
||||||
|
NoS: Number of samples associated with instrument. This is only
|
||||||
|
used in the instrument files.
|
||||||
|
|
||||||
|
Note-Sample/Keyboard Table.
|
||||||
|
Each note of the instrument is first converted to a sample number
|
||||||
|
and a note (C-0 -> B-9). These are stored as note/sample byte pairs
|
||||||
|
(note first, range 0->119 for C-0 to B-9, sample ranges from
|
||||||
|
1-99, 0=no sample)
|
||||||
|
|
||||||
|
Envelope layout
|
||||||
|
|
||||||
|
Envelopes: 3 structures, first for volume (130h), second for
|
||||||
|
panning (182h), third for pitch (1D4h).
|
||||||
|
|
||||||
|
Each is structured as such:
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6.......
|
||||||
|
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄ¿
|
||||||
|
xxxx: ³Flg³Num³LpB³LpE³SLB³SLE³ Node points, 25 sets, 75 bytes....³ x ³
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÅÄÄÄ´
|
||||||
|
|
||||||
|
Flg: Bit 0: Envelope on/off, 1 = on, 0 = off
|
||||||
|
Bit 1: Loop on/off, 1 = on, 0 = off
|
||||||
|
Bit 2: SusLoop on/off, 1 = on, 0 = off
|
||||||
|
|
||||||
|
Num = Number of node points
|
||||||
|
|
||||||
|
LpB = Loop beginning SLB = Sustain loop beginning
|
||||||
|
LpE = Loop end SLE = Sustain loop end
|
||||||
|
|
||||||
|
Node point = 1 byte for y-value
|
||||||
|
(0->64 for vol, -32->+32 for panning or pitch)
|
||||||
|
1 word (2 bytes) for tick number (0->9999)
|
||||||
|
|
||||||
|
Total length of an instrument is 547 bytes, but 554 bytes are
|
||||||
|
written, just to simplify the loading of the old format. (Hence
|
||||||
|
there are 7 'wasted' bytes per instrument)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Impulse Sample Format
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000: ³'I'³'M'³'P'³'S'³ DOS Filename (12345678.123) ³
|
||||||
|
ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
0010: ³00h³GvL³Flg³Vol³ Sample Name, max 26 bytes, includes NUL.......³
|
||||||
|
ÃÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
0020: ³.......................................................³Cvt³DfP³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄ´
|
||||||
|
0030: ³ Length ³ Loop Begin ³ Loop End ³ C5Speed ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
0040: ³ SusLoop Begin ³ SusLoop End ³ SamplePointer ³ViS³ViD³ViR³ViT³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
|
||||||
|
|
||||||
|
The cache file has the following pieces of information added on:
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0050: ³ File Size ³ Date ³ Time ³Fmt³...........................³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Fmt. 0 = unchecked. 1 = directory, 2 = it sample, 3 = st sample
|
||||||
|
|
||||||
|
|
||||||
|
GvL: Global volume for instrument, ranges from 0->64
|
||||||
|
Flg: Bit 0. On = sample associated with header.
|
||||||
|
Bit 1. On = 16 bit, Off = 8 bit.
|
||||||
|
Bit 2. On = stereo, Off = mono. Stereo samples not supported yet
|
||||||
|
Bit 3. On = compressed samples.
|
||||||
|
Bit 4. On = Use loop
|
||||||
|
Bit 5. On = Use sustain loop
|
||||||
|
Bit 6. On = Ping Pong loop, Off = Forwards loop
|
||||||
|
Bit 7. On = Ping Pong Sustain loop, Off = Forwards Sustain loop
|
||||||
|
Vol: Default volume for instrument
|
||||||
|
|
||||||
|
Length: Length of sample in no. of samples NOT no. of bytes
|
||||||
|
LoopBeg: Start of loop (no of samples in, not bytes)
|
||||||
|
Loop End: Sample no. AFTER end of loop
|
||||||
|
C5Speed: Number of bytes a second for C-5 (ranges from 0->9999999)
|
||||||
|
SusLBeg: Start of sustain loop
|
||||||
|
SusLEnd: Sample no. AFTER end of sustain loop
|
||||||
|
|
||||||
|
SmpPoint: 'Long' Offset of sample in file.
|
||||||
|
|
||||||
|
ViS: Vibrato Speed, ranges from 0->64
|
||||||
|
ViD: Vibrato Depth, ranges from 0->64
|
||||||
|
ViT: Vibrato waveform type.
|
||||||
|
0=Sine wave
|
||||||
|
1=Ramp down
|
||||||
|
2=Square wave
|
||||||
|
3=Random (speed is irrelevant)
|
||||||
|
ViR: Vibrato Rate, rate at which vibrato is applied (0->64)
|
||||||
|
|
||||||
|
The depth of the vibrato at any point is worked out in the following
|
||||||
|
way:
|
||||||
|
Every processing cycle, the following occurs:
|
||||||
|
1) Mov AX, [SomeVariableNameRelatingToVibrato]
|
||||||
|
2) Add AL, Rate
|
||||||
|
3) AdC AH, 0
|
||||||
|
4) AH contains the depth of the vibrato as a fine-linear slide.
|
||||||
|
5) Mov [SomeVariableNameRelatingToVibrato], AX ; For the next
|
||||||
|
; cycle.
|
||||||
|
|
||||||
|
For those that don't understand assembly, then the depth is
|
||||||
|
basically the running-sum of the rate divided by 256.
|
||||||
|
|
||||||
|
Sample vibrato uses a table 256-bytes long
|
||||||
|
|
||||||
|
Convert - bits other than bit 0 are used internally for the loading
|
||||||
|
of alternative formats.
|
||||||
|
Bit 0:
|
||||||
|
Off: Samples are unsigned } IT 2.01 and below use unsigned samples
|
||||||
|
On: Samples are signed } IT 2.02 and above use signed samples
|
||||||
|
Bit 1:
|
||||||
|
Off: Intel lo-hi byte order for 16-bit samples } Safe to ignore
|
||||||
|
On: Motorola hi-lo byte order for 16-bit samples } these values...
|
||||||
|
Bit 2: }
|
||||||
|
Off: Samples are stored as PCM values }
|
||||||
|
On: Samples are stored as Delta values }
|
||||||
|
Bit 3: }
|
||||||
|
On: Samples are stored as byte delta values }
|
||||||
|
(for PTM loader) }
|
||||||
|
Bit 4: }
|
||||||
|
On: Samples are stored as TX-Wave 12-bit values }
|
||||||
|
Bit 5: }
|
||||||
|
On: Left/Right/All Stereo prompt }
|
||||||
|
Bit 6: Reserved
|
||||||
|
Bit 7: Reserved
|
||||||
|
|
||||||
|
DfP - Default Pan. Bits 0->6 = Pan value, Bit 7 ON to USE (opposite of inst)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Impulse Pattern Format
|
||||||
|
|
||||||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
0000: ³Length ³ Rows ³ x ³ x ³ x ³ x ³ Packed data................ ³
|
||||||
|
ÃÄÄÄÂÄÄÄÅÄÄÄÂÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ´
|
||||||
|
|
||||||
|
Length: Length of packed pattern, not including the 8 byte header
|
||||||
|
Note that the pattern + the 8 byte header will ALWAYS
|
||||||
|
be less than 64k
|
||||||
|
Rows: Number of rows in this pattern (Ranges from 32->200)
|
||||||
|
|
||||||
|
Patterns are unpacked by the following pseudocode... (this may look
|
||||||
|
horrible, but in practise, it's just as convenient as the S3M
|
||||||
|
pattern format for playback (but not for display))
|
||||||
|
|
||||||
|
GetNextChannelMarker:
|
||||||
|
Read byte into channelvariable.
|
||||||
|
if(channelvariable = 0) then end of row
|
||||||
|
Channel = (channelvariable-1) & 63 ; Channel is 0 based.
|
||||||
|
if(channelvariable & 128) then read byte into maskvariable
|
||||||
|
else maskvariable = previousmaskvariable for current channel
|
||||||
|
|
||||||
|
if(maskvariable & 1), then read note. (byte value)
|
||||||
|
// Note ranges from 0->119 (C-0 -> B-9)
|
||||||
|
// 255 = note off, 254 = notecut
|
||||||
|
// Others = note fade (already programmed into IT's player
|
||||||
|
// but not available in the editor)
|
||||||
|
|
||||||
|
if(maskvariable & 2), then read instrument (byte value)
|
||||||
|
// Instrument ranges from 1->99
|
||||||
|
|
||||||
|
if(maskvariable & 4), then read volume/panning (byte value)
|
||||||
|
// Volume ranges from 0->64
|
||||||
|
// Panning ranges from 0->64, mapped onto 128->192
|
||||||
|
// Prepare for the following also:
|
||||||
|
// 65->74 = Fine volume up
|
||||||
|
// 75->84 = Fine volume down
|
||||||
|
// 85->94 = Volume slide up
|
||||||
|
// 95->104 = Volume slide down
|
||||||
|
// 105->114 = Pitch Slide down
|
||||||
|
// 115->124 = Pitch Slide up
|
||||||
|
// 193->202 = Portamento to
|
||||||
|
// 203->212 = Vibrato
|
||||||
|
|
||||||
|
Effects 65 is equivalent to D0F, 66 is equivalent to D1F -> 74 = D9F
|
||||||
|
Similarly for 75-84 (DFx), 85-94 (Dx0), 95->104 (D0x).
|
||||||
|
|
||||||
|
(Fine) Volume up/down all share the same memory (NOT shared with Dxx
|
||||||
|
in the effect column tho).
|
||||||
|
|
||||||
|
Pitch slide up/down affect E/F/(G)'s memory - a Pitch slide
|
||||||
|
up/down of x is equivalent to a normal slide by x*4
|
||||||
|
|
||||||
|
Portamento to (Gx) affects the memory for Gxx and has the equivalent
|
||||||
|
slide given by this table:
|
||||||
|
|
||||||
|
SlideTable DB 1, 4, 8, 16, 32, 64, 96, 128, 255
|
||||||
|
|
||||||
|
Vibrato uses the same 'memory' as Hxx/Uxx.
|
||||||
|
|
||||||
|
if(maskvariable & 8), then read command (byte value) and commandvalue
|
||||||
|
// Valid ranges from 0->31 (0=no effect, 1=A, 2=B, 3=C, etc.)
|
||||||
|
|
||||||
|
if(maskvariable & 16), then note = lastnote for channel
|
||||||
|
if(maskvariable & 32), then instrument = lastinstrument for channel
|
||||||
|
if(maskvariable & 64), then volume/pan = lastvolume/pan for channel
|
||||||
|
if(maskvariable & 128), then {
|
||||||
|
command = lastcommand for channel and
|
||||||
|
commandvalue = lastcommandvalue for channel
|
||||||
|
}
|
||||||
|
Goto GetNextChannelMarker
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Mathematics
|
||||||
|
|
||||||
|
Abbreviations:
|
||||||
|
FV = Final Volume (Ranges from 0 to 128). In versions 1.04+, mixed output
|
||||||
|
devices are reduced further to a range from 0 to 64 due to lack of
|
||||||
|
memory.
|
||||||
|
Vol = Volume at which note is to be played. (Ranges from 0 to 64)
|
||||||
|
SV = Sample Volume (Ranges from 0 to 64)
|
||||||
|
IV = Instrument Volume (Ranges from 0 to 128)
|
||||||
|
CV = Channel Volume (Ranges from 0 to 64)
|
||||||
|
GV = Global Volume (Ranges from 0 to 128)
|
||||||
|
VEV = Volume Envelope Value (Ranges from 0 to 64)
|
||||||
|
|
||||||
|
In Sample mode, the following calculation is done:
|
||||||
|
FV = Vol * SV * CV * GV / 262144 ; Note that 262144 = 2^18
|
||||||
|
; So bit shifting can be done.
|
||||||
|
|
||||||
|
In Instrument mode the following procedure is used:
|
||||||
|
|
||||||
|
1) Update volume envelope value. Check for loops / end of envelope.
|
||||||
|
2) If end of volume envelope (ie. position >= 200 or VEV = 0FFh), then turn
|
||||||
|
on note fade.
|
||||||
|
3) If notefade is on, then NoteFadeComponent (NFC) = NFC - FadeOut
|
||||||
|
; NFC should be initialised to 1024 when a note is played.
|
||||||
|
4) FV = Vol * SV * IV * CV * GV * VEV * NFC / 2^41
|
||||||
|
|
||||||
|
Linear slides work like this:
|
||||||
|
Final frequency = Original frequency * 2^(SlideValue/768)
|
||||||
|
|
||||||
|
(I used a lookup table for the multipliers here)
|
||||||
|
|
||||||
|
For command Exx, SlideValue = -4*EffectValue
|
||||||
|
For command EEx, SlideValue = -EffectValue
|
||||||
|
For command Fxx, SlideValue = 4*EffectValue
|
||||||
|
For command FEx, SlideValue = EffectValue
|
||||||
|
|
||||||
|
Note that sample vibrato always uses Linear slides.
|
||||||
|
|
||||||
|
Notes about effects (as compared to other module formats)
|
||||||
|
|
||||||
|
C This is now in *HEX*. (Used to be in decimal in ST3)
|
||||||
|
E/F/G/H/U You need to check whether the song uses Amiga/Linear slides.
|
||||||
|
H/U Vibrato in Impulse Tracker is two times finer than in
|
||||||
|
any other tracker and is updated EVERY tick.
|
||||||
|
If "Old Effects" is *ON*, then the vibrato is played in the
|
||||||
|
normal manner (every non-row tick and normal depth)
|
||||||
|
E/F/G These commands ALL share the same memory.
|
||||||
|
Oxx Offsets to samples are to the 'xx00th' SAMPLE. (ie. for
|
||||||
|
16 bit samples, the offset is xx00h*2)
|
||||||
|
Oxx past the sample end will be ignored, unless "Old Effects"
|
||||||
|
is ON, in which case the Oxx will play from the end of the
|
||||||
|
sample.
|
||||||
|
Yxy This uses a table 4 times larger (hence 4 times slower) than
|
||||||
|
vibrato or tremelo. If the waveform is set to random, then
|
||||||
|
the 'speed' part of the command is interpreted as a delay.
|
||||||
|
|
||||||
|
If you read through this document and there are ANY points which you have
|
||||||
|
troubles with (and have to try out), then let me know - because someone
|
||||||
|
else will have the same questions - and I'd like to make this DOC as easy
|
||||||
|
to understand as possible.
|
||||||
|
|
||||||
|
For Panning....
|
||||||
|
Here's the rough procedure used:
|
||||||
|
|
||||||
|
NotePan = ChannelPan
|
||||||
|
if InstrumentPan=On then NotePan = InstrumentPan
|
||||||
|
NotePan = NotePan+(InstrumentNote-PPCenter)*PPSeparation/8
|
||||||
|
|
||||||
|
Pitch Envelopes
|
||||||
|
Each value on the envelope equates to half a semitone. This is interpolated
|
||||||
|
64 times for smooth pitch sliding. Positive values indicate a pitch variation
|
||||||
|
UP of x semitones, negative values indicate a pitch variation down.
|
||||||
|
|
||||||
|
General Info
|
||||||
|
|
||||||
|
The player in Impulse Tracker 'allocates' channels to notes whenever they
|
||||||
|
are *PLAYED*. In sample mode, the allocation is simple:
|
||||||
|
Virtual Channel (number) = 'Host' channel (number)
|
||||||
|
|
||||||
|
In instrument mode, the following procedure is used:
|
||||||
|
|
||||||
|
Check if channel is already playing ---Yes--> set 'background' flag on.
|
||||||
|
| 'Trigger' NNA. If NNA=cut,
|
||||||
|
No then use this virtual
|
||||||
|
| channel.
|
||||||
|
| |
|
||||||
|
|<------------------ else -----------------/
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Search and find the first non-active virtual channel.
|
||||||
|
|
|
||||||
|
Non-active channel found? ----Yes----> Use this for playback.
|
||||||
|
|
|
||||||
|
No
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Search through and find the channel of lowest volume that is in the #
|
||||||
|
'background' (ie. no longer controlled directly) #
|
||||||
|
| #
|
||||||
|
Background channel found? ----Yes----> Use this for playback. #
|
||||||
|
| #
|
||||||
|
No #
|
||||||
|
| #
|
||||||
|
v #
|
||||||
|
Return error - the note is *NOT* allocated a channel, and hence is not #
|
||||||
|
played. #
|
||||||
|
|
||||||
|
This is actually quite a simple process... just that it's another of
|
||||||
|
those 'hassles' to have to write...
|
||||||
|
|
||||||
|
### Note: This is by far the simplest implementation of congestion
|
||||||
|
resolution. IT 2.03 and above have a greatly enhanced
|
||||||
|
method which more selectively removes the most insignificant
|
||||||
|
channel. Obviously, there is no best way to do this - I
|
||||||
|
encourage you to experiment and find new algorithms for
|
||||||
|
yourself.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Internal Tables
|
||||||
|
|
||||||
|
FineSineData Label Byte
|
||||||
|
DB 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23
|
||||||
|
DB 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44
|
||||||
|
DB 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59
|
||||||
|
DB 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64
|
||||||
|
DB 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60
|
||||||
|
DB 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46
|
||||||
|
DB 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26
|
||||||
|
DB 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2
|
||||||
|
DB 0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23
|
||||||
|
DB -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44
|
||||||
|
DB -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59
|
||||||
|
DB -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64
|
||||||
|
DB -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60
|
||||||
|
DB -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46
|
||||||
|
DB -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26
|
||||||
|
DB -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2
|
||||||
|
|
||||||
|
FineRampDownData Label Byte
|
||||||
|
DB 64, 63, 63, 62, 62, 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 56
|
||||||
|
DB 56, 55, 55, 54, 54, 53, 53, 52, 52, 51, 51, 50, 50, 49, 49, 48
|
||||||
|
DB 48, 47, 47, 46, 46, 45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40
|
||||||
|
DB 40, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 34, 34, 33, 33, 32
|
||||||
|
DB 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24
|
||||||
|
DB 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 18, 17, 17, 16
|
||||||
|
DB 16, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8
|
||||||
|
DB 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0
|
||||||
|
DB 0, -1, -1, -2, -2, -3, -3, -4, -4, -5, -5, -6, -6, -7, -7, -8
|
||||||
|
DB -8, -9, -9,-10,-10,-11,-11,-12,-12,-13,-13,-14,-14,-15,-15,-16
|
||||||
|
DB -16,-17,-17,-18,-18,-19,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24
|
||||||
|
DB -24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32
|
||||||
|
DB -32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40
|
||||||
|
DB -40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48
|
||||||
|
DB -48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-55,-55,-56
|
||||||
|
DB -56,-57,-57,-58,-58,-59,-59,-60,-60,-61,-61,-62,-62,-63,-63,-64
|
||||||
|
|
||||||
|
FineSquareWave Label Byte
|
||||||
|
DB 128 Dup (64), 128 Dup (0)
|
||||||
|
|
||||||
|
EmptyPattern Label
|
||||||
|
DW 64, 64, 0, 0
|
||||||
|
DB 64 Dup (0)
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
PitchTable Label DWord ; Values are 16.16 bit
|
||||||
|
DW 2048, 0, 2170, 0, 2299, 0, 2435, 0, 2580, 0, 2734, 0 ; C-0
|
||||||
|
DW 2896, 0, 3069, 0, 3251, 0, 3444, 0, 3649, 0, 3866, 0 ;>B-0
|
||||||
|
|
||||||
|
DW 4096, 0, 4340, 0, 4598, 0, 4871, 0, 5161, 0, 5468, 0 ; C-1
|
||||||
|
DW 5793, 0, 6137, 0, 6502, 0, 6889, 0, 7298, 0, 7732, 0 ;>B-1
|
||||||
|
|
||||||
|
DW 8192, 0, 8679, 0, 9195, 0, 9742, 0, 10321, 0, 10935, 0
|
||||||
|
DW 11585, 0, 12274, 0, 13004, 0, 13777, 0, 14596, 0, 15464, 0
|
||||||
|
|
||||||
|
DW 16384, 0, 17358, 0, 18390, 0, 19484, 0, 20643, 0, 21870, 0
|
||||||
|
DW 23170, 0, 24548, 0, 26008, 0, 27554, 0, 29193, 0, 30929, 0
|
||||||
|
|
||||||
|
DW 32768, 0, 34716, 0, 36781, 0, 38968, 0, 41285, 0, 43740, 0
|
||||||
|
DW 46341, 0, 49097, 0, 52016, 0, 55109, 0, 58386, 0, 61858, 0
|
||||||
|
|
||||||
|
DW 0, 1, 3897, 1, 8026, 1, 12400, 1, 17034, 1, 21944, 1
|
||||||
|
DW 27146, 1, 32657, 1, 38496, 1, 44682, 1, 51236, 1, 58179, 1
|
||||||
|
|
||||||
|
DW 0, 2, 7794, 2, 16051, 2, 24800, 2, 34068, 2, 43888, 2
|
||||||
|
DW 54292, 2, 65314, 2, 11456, 3, 23828, 3, 36936, 3, 50823, 3
|
||||||
|
|
||||||
|
DW 0, 4, 15588, 4, 32103, 4, 49600, 4, 2601, 5, 22240, 5
|
||||||
|
DW 43048, 5, 65092, 5, 22912, 6, 47656, 6, 8336, 7, 36110, 7
|
||||||
|
|
||||||
|
DW 0, 8, 31176, 8, 64205, 8, 33663, 9, 5201, 10, 44481, 10
|
||||||
|
DW 20559, 11, 64648, 11, 45823, 12, 29776, 13, 16671, 14, 6684, 15
|
||||||
|
|
||||||
|
DW 0, 16, 62352, 16, 62875, 17, 1790, 19, 10403, 20, 23425, 21
|
||||||
|
DW 41118, 22, 63761, 23, 26111, 25, 59552, 26, 33342, 28, 13368, 30
|
||||||
|
|
||||||
|
FineLinearSlideUpTable Label ; Values are 16.16 bit
|
||||||
|
DW 0, 1, 59, 1, 118, 1, 178, 1, 237, 1 ; 0->4
|
||||||
|
DW 296, 1, 356, 1, 415, 1, 475, 1, 535, 1 ; 5->9
|
||||||
|
DW 594, 1, 654, 1, 714, 1, 773, 1, 833, 1 ; 10->14
|
||||||
|
DW 893, 1 ; 15
|
||||||
|
|
||||||
|
LinearSlideUpTable Label ; Value = 2^(Val/192), Values are 16.16 bit
|
||||||
|
DW 0, 1, 237, 1, 475, 1, 714, 1, 953, 1 ; 0->4
|
||||||
|
DW 1194, 1, 1435, 1, 1677, 1, 1920, 1, 2164, 1 ; 5->9
|
||||||
|
DW 2409, 1, 2655, 1, 2902, 1, 3149, 1, 3397, 1 ; 10->14
|
||||||
|
DW 3647, 1, 3897, 1, 4148, 1, 4400, 1, 4653, 1 ; 15->19
|
||||||
|
DW 4907, 1, 5157, 1, 5417, 1, 5674, 1, 5932, 1 ; 20->24
|
||||||
|
DW 6190, 1, 6449, 1, 6710, 1, 6971, 1, 7233, 1 ; 25->29
|
||||||
|
DW 7496, 1, 7761, 1, 8026, 1, 8292, 1, 8559, 1 ; 30->34
|
||||||
|
DW 8027, 1, 9096, 1, 9366, 1, 9636, 1, 9908, 1 ; 35->39
|
||||||
|
DW 10181, 1, 10455, 1, 10730, 1, 11006, 1, 11283,1 ; 40->44
|
||||||
|
DW 11560, 1, 11839, 1, 12119, 1, 12400, 1, 12682,1 ; 45->49
|
||||||
|
DW 12965, 1, 13249, 1, 13533, 1, 13819, 1, 14106,1 ; 50->54
|
||||||
|
DW 14394, 1, 14684, 1, 14974, 1, 15265, 1, 15557,1 ; 55->59
|
||||||
|
DW 15850, 1, 16145, 1, 16440, 1, 16737, 1, 17034,1 ; 60->64
|
||||||
|
DW 17333, 1, 17633, 1, 17933, 1, 18235, 1, 18538,1 ; 65->69
|
||||||
|
DW 18842, 1, 19147, 1, 19454, 1, 19761, 1, 20070,1 ; 70->74
|
||||||
|
DW 20379, 1, 20690, 1, 21002, 1, 21315, 1, 21629,1 ; 75->79
|
||||||
|
DW 21944, 1, 22260, 1, 22578, 1, 22897, 1, 23216,1 ; 80->84
|
||||||
|
DW 23537, 1, 23860, 1, 24183, 1, 24507, 1, 24833,1 ; 85->89
|
||||||
|
DW 25160, 1, 25488, 1, 25817, 1, 26148, 1, 26479,1 ; 90->94
|
||||||
|
DW 26812, 1, 27146, 1, 27481, 1, 27818, 1, 28155,1 ; 95->99
|
||||||
|
DW 28494, 1, 28834, 1, 29175, 1, 29518, 1, 29862,1 ; 100->104
|
||||||
|
DW 30207, 1, 30553, 1, 30900, 1, 31248, 1, 31599,1 ; 105->109
|
||||||
|
DW 31951, 1, 32303, 1, 32657, 1, 33012, 1, 33369,1 ; 110->114
|
||||||
|
DW 33726, 1, 34085, 1, 34446, 1, 34807, 1, 35170,1 ; 115->119
|
||||||
|
DW 35534, 1, 35900, 1, 36267, 1, 36635, 1, 37004,1 ; 120->124
|
||||||
|
DW 37375, 1, 37747, 1, 38121, 1, 38496, 1, 38872,1 ; 125->129
|
||||||
|
DW 39250, 1, 39629, 1, 40009, 1, 40391, 1, 40774,1 ; 130->134
|
||||||
|
DW 41158, 1, 41544, 1, 41932, 1, 42320, 1, 42710,1 ; 135->139
|
||||||
|
DW 43102, 1, 43495, 1, 43889, 1, 44285, 1, 44682,1 ; 140->144
|
||||||
|
DW 45081, 1, 45481, 1, 45882, 1, 46285, 1, 46690,1 ; 145->149
|
||||||
|
DW 47095, 1, 47503, 1, 47917, 1, 48322, 1, 48734,1 ; 150->154
|
||||||
|
DW 49147, 1, 49562, 1, 49978, 1, 50396, 1, 50815,1 ; 155->159
|
||||||
|
DW 51236, 1, 51658, 1, 52082, 1, 52507, 1, 52934,1 ; 160->164
|
||||||
|
DW 53363, 1, 53793, 1, 54224, 1, 54658, 1, 55092,1 ; 165->169
|
||||||
|
DW 55529, 1, 55966, 1, 56406, 1, 56847, 1, 57289,1 ; 170->174
|
||||||
|
DW 57734, 1, 58179, 1, 58627, 1, 59076, 1, 59527,1 ; 175->179
|
||||||
|
DW 59979, 1, 60433, 1, 60889, 1, 61346, 1, 61805,1 ; 180->184
|
||||||
|
DW 62265, 1, 62727, 1, 63191, 1, 63657, 1, 64124,1 ; 185->189
|
||||||
|
DW 64593, 1, 65064, 1, 0, 2, 474, 2, 950, 2 ; 190->194
|
||||||
|
DW 1427, 2, 1906, 2, 2387, 2, 2870, 2, 3355, 2 ; 195->199
|
||||||
|
DW 3841, 2, 4327, 2, 4818, 2, 5310, 2, 5803, 2 ; 200->204
|
||||||
|
DW 6298, 2, 6795, 2, 7294, 2, 7794, 2, 8296, 2 ; 205->209
|
||||||
|
DW 8800, 2, 9306, 2, 9814, 2, 10323, 2, 10835,2 ; 210->214
|
||||||
|
DW 11348, 2, 11863, 2, 12380, 2, 12899, 2, 13419,2 ; 215->219
|
||||||
|
DW 13942, 2, 14467, 2, 14993, 2, 15521, 2, 16051,2 ; 220->224
|
||||||
|
DW 16583, 2, 17117, 2, 17653, 2, 18191, 2, 18731,2 ; 225->229
|
||||||
|
DW 19273, 2, 19817, 2, 20362, 2, 20910, 2, 21460,2 ; 230->234
|
||||||
|
DW 22011, 2, 22565, 2, 23121, 2, 23678, 2, 24238,2 ; 235->239
|
||||||
|
DW 24800, 2, 25363, 2, 25929, 2, 25497, 2, 27067,2 ; 240->244
|
||||||
|
DW 27639, 2, 28213, 2, 28789, 2, 29367, 2, 29947,2 ; 245->249
|
||||||
|
DW 30530, 2, 31114, 2, 31701, 2, 32289, 2, 32880, 2 ; 250->254
|
||||||
|
DW 33473, 2, 34068, 2 ; 255->256
|
||||||
|
|
||||||
|
FineLinearSlideDownTable Label ; Values are 0.16 bit
|
||||||
|
DW 65535, 65477, 65418, 65359, 65300, 65241, 65182, 65359 ; 0->7
|
||||||
|
DW 65065, 65006, 64947, 64888, 64830, 64772, 64713, 64645 ; 8->15
|
||||||
|
|
||||||
|
LinearSlideDownTable Label ; Values are 0.16 bit
|
||||||
|
DW 65535, 65300, 65065, 64830, 64596, 64364, 64132, 63901 ; 0->7
|
||||||
|
DW 63670, 63441, 63212, 62984, 62757, 62531, 62306, 62081 ; 8->15
|
||||||
|
DW 61858, 61635, 61413, 61191, 60971, 60751, 60532, 60314 ; 16->23
|
||||||
|
DW 60097, 59880, 59664, 59449, 59235, 59022, 58809, 58597 ; 24->31
|
||||||
|
DW 58386, 58176, 57966, 57757, 57549, 57341, 57135, 56929 ; 32->39
|
||||||
|
DW 56724, 56519, 56316, 56113, 55911, 55709, 55508, 55308 ; 40->47
|
||||||
|
DW 55109, 54910, 54713, 54515, 54319, 54123, 53928, 53734 ; 48->55
|
||||||
|
DW 53540, 53347, 53155, 52963, 52773, 52582, 52393, 52204 ; 56->63
|
||||||
|
DW 52016, 51829, 51642, 51456, 51270, 51085, 50901, 50718 ; 64->71
|
||||||
|
DW 50535, 50353, 50172, 49991, 49811, 49631, 49452, 49274 ; 72->79
|
||||||
|
DW 49097, 48920, 48743, 48568, 48393, 48128, 48044, 47871 ; 80->87
|
||||||
|
DW 47699, 47527, 47356, 47185, 47015, 46846, 46677, 46509 ; 88->95
|
||||||
|
DW 46341, 46174, 46008, 45842, 45677, 45512, 45348, 45185 ; 96->103
|
||||||
|
DW 45022, 44859, 44698, 44537, 44376, 44216, 44057, 43898 ;104->111
|
||||||
|
DW 43740, 43582, 43425, 43269, 43113, 42958, 42803, 42649 ;112->119
|
||||||
|
DW 42495, 42342, 42189, 42037, 41886, 41735, 41584, 41434 ;120->127
|
||||||
|
DW 41285, 41136, 40988, 40840, 40639, 40566, 40400, 40253 ;128->135
|
||||||
|
DW 40110, 39965, 39821, 39678, 39535, 39392, 39250, 39109 ;136->143
|
||||||
|
DW 38968, 38828, 38688, 38548, 38409, 38271, 38133, 37996 ;144->151
|
||||||
|
DW 37859, 37722, 37586, 37451, 37316, 37181, 37047, 36914 ;152->159
|
||||||
|
DW 36781, 36648, 36516, 36385, 36254, 36123, 35993, 35863 ;160->167
|
||||||
|
DW 35734, 35605, 35477, 35349, 35221, 35095, 34968, 34842 ;168->175
|
||||||
|
DW 34716, 34591, 34467, 34343, 34219, 34095, 33973, 33850 ;176->183
|
||||||
|
DW 33728, 33607, 33486, 33365, 33245, 33125, 33005, 32887 ;184->191
|
||||||
|
DW 32768, 32650, 32532, 32415, 32298, 32182, 32066, 31950 ;192->199
|
||||||
|
DW 31835, 31720, 31606, 31492, 31379, 31266, 31153, 31041 ;200->207
|
||||||
|
DW 30929, 30817, 30706, 30596, 30485, 30376, 30226, 30157 ;208->215
|
||||||
|
DW 30048, 29940, 29832, 29725, 29618, 29511, 29405, 29299 ;216->223
|
||||||
|
DW 29193, 29088, 28983, 28879, 28774, 28671, 28567, 28464 ;224->231
|
||||||
|
DW 28362, 28260, 28158, 28056, 27955, 27855, 27754, 27654 ;232->239
|
||||||
|
DW 27554, 27455, 27356, 27258, 27159, 27062, 26964, 26867 ;240->247
|
||||||
|
DW 26770, 26674, 26577, 26482, 26386, 26291, 26196, 26102 ;248->255
|
||||||
|
DW 26008 ; 256
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Effect Info
|
||||||
|
|
||||||
|
Here's about all the info I can think of for effects. "Process" variables are
|
||||||
|
variables used internally by effects to control the direction of playback..
|
||||||
|
This section has not been completed yet.
|
||||||
|
|
||||||
|
First, here is the rough flow chart for processing information, it's not fully
|
||||||
|
detailed, but all of the important steps are outlined.
|
||||||
|
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ Set note volume to volume set for each channel ³
|
||||||
|
³ Set note frequency to frequency set for each channel ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ Decrease tick counter ³ Yes
|
||||||
|
³ Is tick counter 0 ? ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
|
||||||
|
³ ³
|
||||||
|
No ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Tick counter = Tick counter set ³
|
||||||
|
³ Update effects for each ³ ³ (the current 'speed') ³
|
||||||
|
³ channel as required. ³ ³ Decrease Row counter. ³
|
||||||
|
³ ³ ³ Is row counter 0? ³
|
||||||
|
ÀÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³ No ³ ³
|
||||||
|
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ Yes
|
||||||
|
³ ³ ³
|
||||||
|
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ ³ Call update-effects for ³ ³ Row counter = 1 ³
|
||||||
|
³ ³ each channel. ³ ³ ³
|
||||||
|
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ Increase ProcessRow ³
|
||||||
|
³ ³ ³ Is ProcessRow > NumberOfRows? ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÙ
|
||||||
|
³ Yes ³ ³ No
|
||||||
|
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
|
||||||
|
³ ³ ProcessRow = BreakRow ³ ³
|
||||||
|
³ ³ BreakRow = 0 ³ ³
|
||||||
|
³ ³ Increase ProcessOrder ³ ³
|
||||||
|
³ ³ while Order[ProcessOrder] = 0xFEh, ³ ³
|
||||||
|
³ ³ increase ProcessOrder ³ ³
|
||||||
|
³ ³ if Order[ProcessOrder] = 0xFFh, ³ ³
|
||||||
|
³ ³ ProcessOrder = 0 ³ ³
|
||||||
|
³ ³ CurrentPattern = Order[ProcessOrder] ³ ³
|
||||||
|
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
|
||||||
|
³ ³ ³
|
||||||
|
³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³ ³
|
||||||
|
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ ³ CurrentRow = ProcessRow ³
|
||||||
|
³ ³ Update Pattern Variables (includes jumping to ³
|
||||||
|
³ ³ the appropriate row if requried and getting ³
|
||||||
|
³ ³ the NumberOfRows for the pattern) ³
|
||||||
|
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³ ³
|
||||||
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³
|
||||||
|
ÚÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Yes ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ Instrument mode? ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Update Envelopes as required ³
|
||||||
|
ÀÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ Update fadeout as required ³
|
||||||
|
³ ³ Calculate final volume if req ³
|
||||||
|
³ No (Sample mode) ³ Calculate final pan if req ³
|
||||||
|
³ ³ Process sample vibrato if req ³
|
||||||
|
ÚÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³ Calculate final volume if required ³ ³
|
||||||
|
³ Calculate final pan if requried ³ ³
|
||||||
|
³ Process sample vibrato if required ³ ³
|
||||||
|
ÀÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
|
||||||
|
³ ³
|
||||||
|
³ ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
³
|
||||||
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
³ Output sound!!! ³
|
||||||
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
Axx Set Tempo
|
||||||
|
|
||||||
|
if (xx != 0) {
|
||||||
|
Maxtick = xx;
|
||||||
|
Currenttick = xx;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bxx Jump to Order
|
||||||
|
|
||||||
|
ProcessOrder = xx - 1;
|
||||||
|
ProcessRow = 0xFFFE; // indicates new pattern internally for IT...
|
||||||
|
|
||||||
|
Cxx Break to Row
|
||||||
|
|
||||||
|
BreakRow = xx;
|
||||||
|
ProcessRow = 0xFFFE;
|
||||||
|
|
||||||
|
Dxx Volume slide down
|
||||||
|
|
||||||
|
if (xx == 0) then xx = last xx for (Dxx/Kxx/Lxx) for this channel.
|
||||||
|
|
||||||
|
Order of testing: Dx0, D0x, DxF, DFx
|
||||||
|
|
||||||
|
Dx0 Set effect update for channel enabled if channel is ON.
|
||||||
|
If x = F, then slide up volume by 15 straight away also (for S3M compat)
|
||||||
|
Every update, add x to the volume, check and clip values > 64 to 64
|
||||||
|
D0x Set effect update for channel enabled if channel is ON.
|
||||||
|
If x = F, then slide down volume by 15 straight away also (for S3M)
|
||||||
|
Every update, subtract x from the volume, check and clip values < 0 to 0
|
||||||
|
DxF Add x to volume straight away. Check and clip values > 64 to 64
|
||||||
|
DFx Subtract x from volume straight away. Check and clip values < 0 to 0
|
||||||
|
|
||||||
|
Hxy Vibrato
|
||||||
|
|
||||||
|
if (x != 0) {
|
||||||
|
speed = 4*x;
|
||||||
|
}
|
||||||
|
if (y != 0) {
|
||||||
|
depth = y * 4;
|
||||||
|
if(OldEffects) depth <<= 1;
|
||||||
|
}
|
||||||
|
Set effect update for channel enabled if channel is ON.
|
||||||
|
Goto InitVibrato (explained later)
|
||||||
|
|
||||||
|
Ixy Tremor, ontime x, offtime y
|
||||||
|
|
||||||
|
if (x != 0) {
|
||||||
|
ontime = x;
|
||||||
|
if (oldeffects) ontime++;
|
||||||
|
}
|
||||||
|
if (y != 0) {
|
||||||
|
offtime = y;
|
||||||
|
if (oldeffects) offtime++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Nxx Channel volume slide down
|
||||||
|
|
||||||
|
if (xx == 0) then xx = last Nxx for this channel.
|
||||||
|
|
||||||
|
Order of testing: Nx0, N0x, NxF, NFx
|
||||||
|
|
||||||
|
Nx0 Set effect update for channel enabled.
|
||||||
|
Every update, add x to the volume, check and clip values > 64 to 64
|
||||||
|
N0x Set effect update for channel enabled.
|
||||||
|
Every update, subtract x from the volume, check and clip values < 0 to 0
|
||||||
|
NxF Add x to volume straight away. Check and clip values > 64 to 64
|
||||||
|
NFx Subtract x from volume straight away. Check and clip values < 0 to 0
|
||||||
|
|
||||||
|
Uxy Fine Vibrato
|
||||||
|
|
||||||
|
if (x != 0) {
|
||||||
|
speed = 4*x;
|
||||||
|
}
|
||||||
|
if (y != 0) {
|
||||||
|
depth = y;
|
||||||
|
if(OldEffects) depth <<= 1;
|
||||||
|
}
|
||||||
|
Set effect update for channel enabled if channel is ON.
|
||||||
|
Goto InitVibrato (explained later)
|
||||||
|
|
||||||
|
Wxx Global volume slide down
|
||||||
|
|
||||||
|
if (xx == 0) then xx = last Wxx for this channel.
|
||||||
|
|
||||||
|
Order of testing: Wx0, W0x, WxF, WFx
|
||||||
|
|
||||||
|
Wx0 Set effect update for channel enabled.
|
||||||
|
Every update, add x to the volume, check and clip values > 128 to 128
|
||||||
|
W0x Set effect update for channel enabled.
|
||||||
|
Every update, subtract x from the volume, check and clip values < 0 to 0
|
||||||
|
WxF Add x to volume straight away. Check and clip values > 128 to 128
|
||||||
|
WFx Subtract x from volume straight away. Check and clip values < 0 to 0
|
||||||
|
|
||||||
|
.. sorry this is incomplete..
|
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
What is VSound?
|
||||||
|
---------------
|
||||||
|
VSound is a virtual sound driver for Impulse Tracker. It actually uses
|
||||||
|
Microsoft's DirectSound to provide output on ANY soundcard supported by
|
||||||
|
Windows '95 or Windows '98. It does NOT support Windows NT.
|
||||||
|
|
||||||
|
It does take a little effort to setup and doesn't perform quite as well
|
||||||
|
as the native drivers, so if you have a SB16, ESS or some other card
|
||||||
|
directly supported by IT, don't bother messing around VSound. If you have
|
||||||
|
a SBPro compatible card, some PCI card or anything else that isn't being
|
||||||
|
used to its maximum capabilities, then give these files a try.
|
||||||
|
|
||||||
|
How to use these files
|
||||||
|
----------------------
|
||||||
|
You MUST have DirectX installed. It was written with the DirectX6 SDK,
|
||||||
|
although I'm pretty sure DirectSound 5 is sufficient.
|
||||||
|
|
||||||
|
1. Copy ITVSOUND.VXD into your Windows\System directory
|
||||||
|
(normally C:\WINDOWS\SYSTEM)
|
||||||
|
|
||||||
|
Note that the file may NOT show up in Window's Explorer since they have
|
||||||
|
a system extension (.VXD). Use DOS, or enable (unhide) system files in
|
||||||
|
your Explorer configuration.
|
||||||
|
|
||||||
|
2. In your Windows directory (normally C:\WINDOWS), edit your SYSTEM.INI file
|
||||||
|
and include the line:
|
||||||
|
device=itvsound.vxd
|
||||||
|
anywhere in the [386Enh] section
|
||||||
|
|
||||||
|
3. Reboot your computer
|
||||||
|
|
||||||
|
4. Run Server.EXE
|
||||||
|
|
||||||
|
5. Run "IT"
|
||||||
|
|
||||||
|
Configuring the driver
|
||||||
|
----------------------
|
||||||
|
The driver can be configured by modifying Window's Registry by running
|
||||||
|
"regedit" (which comes with Windows). The variables can be found at:
|
||||||
|
"KHEY_LOCAL_MACHINE\Software\Jeffrey Lim\Impulse Tracker VSound Server"
|
||||||
|
|
||||||
|
The 4 variables are:
|
||||||
|
BufferSize - The size of the DirectSound buffer in kb.
|
||||||
|
Permitted ranges from 4 to 64, default 24
|
||||||
|
BufferThreshold - The size of the buffer that IT tries to maintain in kb.
|
||||||
|
Permitted ranges from 2 to 32, default 21
|
||||||
|
BufferType - 0 = DualBuffer (BufferSize is logically split into 2 sections)
|
||||||
|
1 = QuadBuffer (BufferSize is logically split into 4 sections)
|
||||||
|
2 = OctBuffer (BufferSize is logically split into 8 sections)
|
||||||
|
(recommended, default)
|
||||||
|
MixSpeed - Mixing rate to be used in Hz.
|
||||||
|
Permitted ranges from 11025 to 64000, default 44100
|
||||||
|
|
||||||
|
You will need to restart the server before these changes take effect.
|
||||||
|
|
||||||
|
Known Problems
|
||||||
|
--------------
|
||||||
|
1. This driver only works with Win95 and Win98, NOT WinNT (I'll try a WinNT
|
||||||
|
driver sometime).
|
||||||
|
|
||||||
|
2. There is an obvious latency due to the size of the buffers and the delay
|
||||||
|
that is inherent to DirectSound. Reducing the BufferSize and BufferThreshold
|
||||||
|
values can reduce this latency, however, smaller values can also cause the
|
||||||
|
sound to break up.
|
||||||
|
|
||||||
|
Try using the values:
|
||||||
|
1. BufferSize=16, BufferThreshold=14, BufferType=2, MixSpeed=44100
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,400 @@
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
## Impulse Tracker MIDI Supplement ##
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
The biggest new addition to Impulse Tracker 2.12 has been support for
|
||||||
|
sending data out through the MIDI protocol. Earlier versions of Impulse
|
||||||
|
Tracker (IT) have had support for incoming MIDI data, so it was possible to
|
||||||
|
play on a 'MIDIfied' keyboard and have IT 'track' all the notes down in the
|
||||||
|
pattern in realtime.
|
||||||
|
|
||||||
|
MIDI out, however, is a completely different ballgame. You in fact don't
|
||||||
|
have to read this supplement at all if you wish to get MIDI working, but in
|
||||||
|
order to gain full usage of MIDI out, you will have to read this in order
|
||||||
|
to understand how IT's MIDI support fully works
|
||||||
|
|
||||||
|
|
||||||
|
MIDI Support & Soundcards (Modified by Pulse)
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
At present, the only sound devices IT supports for MIDI output are the AMD
|
||||||
|
InterWave and the Creative Labs Sound Blaster AWE32. Support for other
|
||||||
|
soundcards is via the generic MPU401 driver. To use this driver, you must
|
||||||
|
run "IT /S19 /A<address>" where <address> is the address of your MPU401
|
||||||
|
compatible card (eg. "IT /S19 /A330"). Note that the generic MPU401 driver
|
||||||
|
does *NOT* support sample playback at all.
|
||||||
|
|
||||||
|
MIDI And AWE32 Soundcards (Pulse)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
I have found that the Windows '95 drivers for the AWE32 are somewhat buggy.
|
||||||
|
On my computer, I can use MIDI In/Out in Impulse Tracker *IF* I disable the
|
||||||
|
MIDI support within Windows '95. Otherwise, it is simply not recognised. To
|
||||||
|
disable the MIDI support in Windows '95, right click on "My Computer",
|
||||||
|
"Properties", "Device Configuration", "Sound, Video & Game Controllers".
|
||||||
|
Double click on "Creative Labs SB16 or AWE32" and go to the resources.
|
||||||
|
Uncheck the "Use Automatic Settings" box if it is set and change the basic
|
||||||
|
configuration to one that does NOT include the MIDI Ports 300h or 330h.
|
||||||
|
(For example, Basic Configuration 0 has only 220h, 5, 1, 5 on my computer
|
||||||
|
and IT works fine in a DOS Box)
|
||||||
|
|
||||||
|
|
||||||
|
Enabling MIDI
|
||||||
|
=============
|
||||||
|
|
||||||
|
To enable MIDI output, you must first have IT on Instrument control mode
|
||||||
|
rather than Sample control mode. To do this, press F12 to go to the Song
|
||||||
|
Variables screen and switch control to 'Instruments' if you haven't already
|
||||||
|
done so.
|
||||||
|
|
||||||
|
|
||||||
|
MIDI & Instruments
|
||||||
|
==================
|
||||||
|
|
||||||
|
MIDI Channel
|
||||||
|
------------
|
||||||
|
|
||||||
|
New to the Pitch section of the Instrument screen (press F4 and select the
|
||||||
|
"Pitch" button) are the sliders "MIDI Channel", "MIDI Program" and "MIDI
|
||||||
|
Bank". Once the MIDI Channel value for that instrument is set to a value
|
||||||
|
other than zero, IT will send out MIDI data whenever that instrument is
|
||||||
|
encountered in a pattern, on that particular MIDI Channel. What data IT
|
||||||
|
actually sends through the MIDI port will be a note on command, although
|
||||||
|
this will be discussed in more detail later.
|
||||||
|
|
||||||
|
MIDI Program/MIDI Bank
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The MIDI Program and MIDI Bank sliders work in a similar manner to each
|
||||||
|
other. If they have a value set to -1, IT will not transmit a program change
|
||||||
|
message nor a bank change message for that instrument. If you specifically
|
||||||
|
set a MIDI Program for that instrument, IT will send a 'program change'
|
||||||
|
message along with the 'note on' message.
|
||||||
|
|
||||||
|
The MIDI Bank instrument setting is also the same; IT will not send a bank
|
||||||
|
change message if the MIDI Bank slider is set to Off (ie: has a value of
|
||||||
|
-01). If the MIDI Bank setting is active for that instrument, IT will send
|
||||||
|
it along with the note on message as well.
|
||||||
|
|
||||||
|
Summary
|
||||||
|
-------
|
||||||
|
|
||||||
|
IT will always send a 'note on' command for a particular MIDI channel
|
||||||
|
whenever a MIDI instrument is encountered in the pattern. (A MIDI instrument
|
||||||
|
is simply an instrument where the MIDI Channel value has been set to
|
||||||
|
something other than "Off"). IT will also send a program change command and/or
|
||||||
|
a bank change command along with the note on command if they are set active.
|
||||||
|
|
||||||
|
|
||||||
|
More Advanced MIDI
|
||||||
|
==================
|
||||||
|
|
||||||
|
How MIDI Works
|
||||||
|
--------------
|
||||||
|
|
||||||
|
MIDI is not a file format (like IT is a module format) nor is it even a file
|
||||||
|
layout. MIDI is a computer protocol (or language) which is used to
|
||||||
|
communicate between devices . You may like to think of it as a network,
|
||||||
|
where the MIDI cables are the cables you lay between computers, and MIDI is
|
||||||
|
the network protocol (such as Novell NetWare, Windows Networking or TCP/IP)
|
||||||
|
used to communicate between the sound devices. When an instrument is said to
|
||||||
|
be 'MIDI compliant', that means that it has support for the MIDI protocol
|
||||||
|
and understands MIDI messages.
|
||||||
|
|
||||||
|
The .MID file format is simply a way to store these messages. It is a
|
||||||
|
collection of MIDI data, and when a .MID file is run through a MIDI player,
|
||||||
|
all the MIDI player does is send the data in the .MID file out through the
|
||||||
|
computer's MIDI port. In a network analogy, if you can imagine that every
|
||||||
|
single transaction run through the network was being logged to a file on
|
||||||
|
your hard disk; that every single byte was being recorded to a logfile, this
|
||||||
|
is what a .MID file is.
|
||||||
|
|
||||||
|
An example of MIDI Communication in IT
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
You've read above that when IT encounters a MIDI instrument in the
|
||||||
|
patterndata, it sends a 'note on' command, which is defined in the MIDI
|
||||||
|
protocol to be 'Play this note on this MIDI channel at this particular
|
||||||
|
velocity'. (Velocity is similar to volume ). If you play a MIDI instrument
|
||||||
|
which is mapped to MIDI channel 2 at C-5 with a velocity of 64, the actual
|
||||||
|
data which IT sends out to the MIDI port resembles something like this (in
|
||||||
|
hex):
|
||||||
|
|
||||||
|
Note On with parameters;
|
||||||
|
MIDI Channel: 2
|
||||||
|
Note: C-5
|
||||||
|
Velocity: 64
|
||||||
|
|
||||||
|
Data that IT sends out (hex): 91 3C 40
|
||||||
|
Data that IT sends out (decimal): 145 60 64
|
||||||
|
|
||||||
|
We'll run through each of these three bytes step by step.
|
||||||
|
|
||||||
|
The first byte (91 in hex, or 91h) is the actual 'Note on' command. It tells
|
||||||
|
the receiving MIDI device that the data which follows is part of the 'note
|
||||||
|
on' data. An analogy which trackers may find useful is the effect column.
|
||||||
|
There, you have an effect command and effect data; for example, the effect
|
||||||
|
'G20' can be split up into two parts--'G' and '20'. The 'G' part is the
|
||||||
|
actual effect command which tells IT that you wish to perform a portamento,
|
||||||
|
and the '20' part is the effect data, or in this case the spe ed at which
|
||||||
|
the portamento should occur. In this MIDI example, the '9' is the MIDI
|
||||||
|
command and the '1 3C 40' is the rest of the data for that command.
|
||||||
|
|
||||||
|
Now, the second digit (1 in our example) specifies the MIDI channel. MIDI
|
||||||
|
channels are 0-based; that is, if you want to send to MIDI channel 6, IT
|
||||||
|
specifies 05 for the actual data. MIDI channel 10 is 09h, MIDI channel 14 is
|
||||||
|
0Dh, etc. Here we're sending to MIDI channel 2, so the value sent out over
|
||||||
|
MIDI is 01h.
|
||||||
|
|
||||||
|
The second byte (3Ch) is actually the note to send (C-5 here). In MIDI, all
|
||||||
|
command (parameter) data is between a scale of 00h-7Fh (or 0-127 in
|
||||||
|
decimal). Notes are transmitted the same way - via numbers. If you imagine
|
||||||
|
C-1 is sent with a value of 00h, C#1 i s 01h, D-2 is 02h, etc, then the note
|
||||||
|
we want to play, C-5, has a value of 3Ch (60 decimal).
|
||||||
|
|
||||||
|
Now the first and second bytes are done with, the third byte should be
|
||||||
|
fairly easy to understand. This byte represents the velocity at which the
|
||||||
|
note should be played. In our case, we want a velocity of 64, which
|
||||||
|
translates to 40h, and so this is the value which is sent out.
|
||||||
|
|
||||||
|
So to recap, we have three bytes for the note on command, "91 3C 40".
|
||||||
|
|
||||||
|
Byte 1: 91 == Note on command (on MIDI channel #2)
|
||||||
|
Byte 2: 3C == Note on data (Note to play, C-5)
|
||||||
|
Byte 3: 40 == Note on data (Velocity of 64 decimal)
|
||||||
|
|
||||||
|
Configuring IT's MIDI out data
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Keeping the above example in mind, press Shift-F1 to get to IT's MIDI screen
|
||||||
|
and press the 'MIDI Output Configuration' button. This will take you to IT's
|
||||||
|
MIDI out engine. Now, if you examine the 'Note On' field, it reads:
|
||||||
|
|
||||||
|
9c n v
|
||||||
|
|
||||||
|
This can be correlated to our above example of '91 3C 40'. Now, the 'c n v'
|
||||||
|
in the Note On field corresponds to 'channel', 'note' and 'velocity'. Think
|
||||||
|
of them as variables; IT will substitute the appropriate channel, note and
|
||||||
|
velocity values which it encounters in the MIDI instrument information
|
||||||
|
and/or patterndata.
|
||||||
|
|
||||||
|
If you now actually defined a MIDI instrument to play on MIDI channel 2, and
|
||||||
|
you played it in a pattern at C-5 with velocity 64, all IT does is read the
|
||||||
|
'Note On' field from the MIDI configuration screen and substitute '1' for
|
||||||
|
'c', '3C' (C-5) for 'n' and '64' for 'v'. Therefore, IT will read '9c n v'
|
||||||
|
and replace it with '91 3C 40'.
|
||||||
|
|
||||||
|
In any of the MIDI output fields, lowercase letters represent variables (or
|
||||||
|
subsitutions which IT should make) and uppercase letters or numbers are
|
||||||
|
constants which IT writes to the MIDI port directly without any change.
|
||||||
|
Therefore, these fields are case se nsitive--for the note on command, '9c n
|
||||||
|
v' is blatantly different to '9C n v'. 9c represents 'send byte 09 followed
|
||||||
|
by the MIDI channel byte', whereas 9C represents 'send the byte 9C'.
|
||||||
|
|
||||||
|
In short, 0-9 and A-F are treated as hexadecimal constants and will be
|
||||||
|
passed through directly. Lowercase letters will be treated as variables and
|
||||||
|
substituted accordingly. Note that variables are regarded as 'full bytes' by
|
||||||
|
themselves and are never part of an actual byte sequence except for the
|
||||||
|
variable 'c', so '9n' is exactly the same as '09 n' or '9 n'; all of them
|
||||||
|
will expand to the sequence '09 <MIDI note byte>'. 'c' is the only value
|
||||||
|
that takes on a nibble (4-byte) value, due to the MIDI protocol definition.
|
||||||
|
This means that 9c will actually become one byte when expanded, with the
|
||||||
|
lower digit representing the channel.
|
||||||
|
|
||||||
|
IT MIDI Variables
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
c: MIDI channel
|
||||||
|
|
||||||
|
This is simply the MIDI channel of which the instrument is set
|
||||||
|
to, 0-based. Note that this is the only nibble sized variable.
|
||||||
|
|
||||||
|
m: note value (instrument)
|
||||||
|
A value from 00-7Fh representing the note to be played, where
|
||||||
|
C-5 is 60h. This is the note entered in the pattern, not the
|
||||||
|
translated value.
|
||||||
|
|
||||||
|
n: note value (sample)
|
||||||
|
|
||||||
|
A value from 00-7Fh representing the note to be played, where
|
||||||
|
C-5 is 60h. This is the note after instrument translations have
|
||||||
|
been applied.
|
||||||
|
|
||||||
|
o: Offset value
|
||||||
|
|
||||||
|
Extra parameter than can be sent via Oxx commands.
|
||||||
|
|
||||||
|
v: velocity
|
||||||
|
|
||||||
|
The MIDI velocity of the note.
|
||||||
|
|
||||||
|
u: volume
|
||||||
|
|
||||||
|
Volume is similar to velocity, except that velocity does not
|
||||||
|
take the volume envelope and fadeout values into account, whereas the
|
||||||
|
'u' volume variable does.
|
||||||
|
|
||||||
|
x: pan set
|
||||||
|
|
||||||
|
Sends a MIDI panning value. This does not take into account
|
||||||
|
panning envelopes.
|
||||||
|
|
||||||
|
y: calculated pan
|
||||||
|
|
||||||
|
Sends a MIDI panning value which does take into account
|
||||||
|
panning envelopes.
|
||||||
|
|
||||||
|
a: high byte of bank select
|
||||||
|
b: low byte of bank select
|
||||||
|
|
||||||
|
These commands are only really useful in the bank change
|
||||||
|
field.
|
||||||
|
|
||||||
|
z: macro data
|
||||||
|
|
||||||
|
(See section on macros for full explanation).
|
||||||
|
|
||||||
|
Configuring MIDI Output for Your Keyboard
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
In the basic IT distribution, the only fields which have any data are 'Note
|
||||||
|
on', 'Note Off' and 'Program Change'. The reason for this is that these are
|
||||||
|
the only commands which are set as standards by MIDI. MIDI commands such as
|
||||||
|
Change Pan, Bank Select , e tc all differ from synth to synth. There's not
|
||||||
|
much which can be done to solve this, you will have to look up your synth's
|
||||||
|
manual to find out the exact MIDI commands it needs to issue a panning
|
||||||
|
change, bank select, etc.
|
||||||
|
|
||||||
|
Some values which you may wish to try, however, will be:
|
||||||
|
|
||||||
|
Change pan: Bc 0A x
|
||||||
|
Bank select: Bc 0 a 20 b
|
||||||
|
|
||||||
|
These may or may not work. If they do, then great, but if they don't, you
|
||||||
|
will have to actually RTFM *gasp* in order to get these other commands
|
||||||
|
working.
|
||||||
|
|
||||||
|
|
||||||
|
Effect Commands & Macros
|
||||||
|
========================
|
||||||
|
|
||||||
|
Now that IT's MIDI engine is understood and the basis of MIDI communication
|
||||||
|
has been laid down, perhaps the most powerful function of IT's MIDI engine,
|
||||||
|
macros, will be explained.
|
||||||
|
|
||||||
|
Standard Effects
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Firstly, at the moment there is NO support for standard IT effect commands
|
||||||
|
(such as pitch slide, portamento, vibrato etc) to work via MIDI. This may or
|
||||||
|
may not be implemented in future. Currently, however, if you perform an E01
|
||||||
|
effect on a note, nothing w ill happen as far as the MIDI aspect of the
|
||||||
|
instrument is concerned.
|
||||||
|
|
||||||
|
Macro Effects - SFx
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The SFx command, previously used in the .MOD format as "FunkRepeat", has
|
||||||
|
been changed in IT to allow for the functioning of MIDI macros. The unused
|
||||||
|
Zxx command will also now play a part in MIDI functioning.
|
||||||
|
|
||||||
|
To understand how this works, it's best to take an example into account. At
|
||||||
|
the beginning of this supplement, the MIDI sequence '91 3C 40' was used
|
||||||
|
which was a Note On, MIDI channel #2 played at C-5 with a velocity of 64.
|
||||||
|
This was represented in IT's MIDI configuration as '9c n v', so it made the
|
||||||
|
appropriate substitutions to '91 3C 40'.
|
||||||
|
|
||||||
|
The Macro Setup section of IT's MIDI Output Configuration screen can be used
|
||||||
|
to define your own custom MIDI command/data sequences. These can be
|
||||||
|
absolutely anything you like, from a MIDI SysEx command to a Note On
|
||||||
|
command. In fact, to start off, we'll tak e a Note On sequence as an example
|
||||||
|
and we will attempt to emulate the same '91 3C 40' bytes, except that we'll
|
||||||
|
make this sequence ourselves rather than letting IT do the work for us.
|
||||||
|
|
||||||
|
How SFx and Zxx commands relate
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Firstly, remember that IT substitutes values when it encounters variables.
|
||||||
|
If you glance at the above section on IT MIDI Variables, you'll notice that
|
||||||
|
the 'z' variable represents macro data. Now that this '91 3C 40' sequence
|
||||||
|
has been driven into our he ads, try setting the SF0 macro field on IT's
|
||||||
|
MIDI Output Configuration screen to '91 3C z'.
|
||||||
|
|
||||||
|
Remember that the third byte in the MIDI sequence (40 in our normal
|
||||||
|
example) is the velocity to send with the Note On message. The SF0 macro
|
||||||
|
field you've just defined means that IT will read any Zxx effects and
|
||||||
|
replace the 'z' variable in the SF0 macro with the 'xx' value from the Zxx
|
||||||
|
effect. To enable the macro, simply put in a SF0 along with a Note On in the
|
||||||
|
pattern data. Now, all values from Z00 to Z7F will substitute for 'z'
|
||||||
|
accordingly. So, to show that our SF0 sequence will reproduce the exact same
|
||||||
|
thing as our Note On command:
|
||||||
|
|
||||||
|
C-5 01 SF0 (this will play the note on command as usual, and
|
||||||
|
specify that the SF0 macro sequence should be
|
||||||
|
hooked to Zxx effects).
|
||||||
|
... .. ...
|
||||||
|
... .. ...
|
||||||
|
... .. ...
|
||||||
|
... .. Z40 (this will trigger our SF0 sequence with a 'z'
|
||||||
|
value of 40h).
|
||||||
|
|
||||||
|
The above patterndata should produce a note on event at row 0 in the
|
||||||
|
pattern, and again at row 4. Now, try replacing the Z40 effect with Z7F and
|
||||||
|
IT will substitute 'z' with '7F', or a velocity of 7Fh (127 decimal) in our
|
||||||
|
SF0 sequence. The result should be that you'll hear a Note On with velocity
|
||||||
|
64 on row 0, and a Note On with velocity 127 on row 4; ie: the second note
|
||||||
|
triggered will be twice as loud. The The sequence that IT will send will be
|
||||||
|
'91 3C 7F'.
|
||||||
|
|
||||||
|
SFx commands summary
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Our example above of using a 'note on' command sequence for an SFx effect is
|
||||||
|
rather pointless, since IT does this effect itself. However, it has
|
||||||
|
hopefully served its purpose by demonstrating how effects work.
|
||||||
|
|
||||||
|
The SFx commands, as you can see, can be redefined to absolutely any MIDI
|
||||||
|
data at all. This can be something simple like a pitch slide, a complex
|
||||||
|
SysEx 'set filter to aftertouch' command, or whatever you like. The
|
||||||
|
possibilities are endless and are only li mited by what your synth can do;
|
||||||
|
IT's SFx/Zxx combination is customisable enough to handle nearly any MIDI
|
||||||
|
data you wish to output.
|
||||||
|
|
||||||
|
If you wish to take advantage of these commands, you will have to look up
|
||||||
|
the manual for your synth and get stuck into the MIDI/SysEx section. Please
|
||||||
|
do not come to any IT support people asking for help on this subject because
|
||||||
|
every synth is different.
|
||||||
|
|
||||||
|
Z80 -> ZFF commands
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The Z80 to ZFF commands are also macro sequences, but they have no 'z'
|
||||||
|
variable to substitute for. They are not 'hooked' to any SFx effects, they
|
||||||
|
are straight, direct macro sequences. For example, if you have a MIDI
|
||||||
|
controllable effects unit (such as an Alesis MidiVerb), you may wish to
|
||||||
|
assign the Z80 command to set a up a certain value for the reverb delay
|
||||||
|
length. Later in the song, you can issue a Z81 command to change the reverb
|
||||||
|
delay or turn it off altogether.
|
||||||
|
|
||||||
|
To summarise, the Z80 to ZFF commands are similar to SFx macro sequences,
|
||||||
|
but they do not have any extra parameters (whereas the SFx macro's 'z'
|
||||||
|
variables are controlled by Z00 to Z7F).
|
||||||
|
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
===================
|
||||||
|
|
||||||
|
If there are any problems with this textfile, email ozone@post1.com or
|
||||||
|
pulse@cyburbia.net.au
|
||||||
|
|
||||||
|
__/\___/\_/\____/\____/\ .. . Andre Pang % vault ...:
|
||||||
|
|
||||||
|
/ /__ / \_ \_ __) :.. mailto:ozone@post1.com . ....:
|
||||||
|
( : / (__: ) | | _)_ : . http://www.mindflux.com.au/ .:
|
||||||
|
\___( ______/|__;__|_____| :. irc: #trax (irc.neato.org) ..:
|
||||||
|
\/ - #ozone
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
|
||||||
|
|
||||||
|
Networked Impulse Tracker
|
||||||
|
|
||||||
|
|
||||||
|
What is Networked Impulse Tracker?
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Networked Impulse Tracker is simply that - a session of Impulse Tracker where
|
||||||
|
multiple composers can all edit the same song at the same time! It may sound
|
||||||
|
a little bizarre, but networked sessions can be both extremely fun and
|
||||||
|
productive.
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
1. Impulse Tracker, 7 Apr 99 or later
|
||||||
|
|
||||||
|
2. Impulse Tracker Network driver file. (*.NET)
|
||||||
|
|
||||||
|
3. Some form of network supported by the network driver file.
|
||||||
|
|
||||||
|
To Use
|
||||||
|
------
|
||||||
|
To initiate a Network session, Press Shift-ESC. A list of available drivers
|
||||||
|
will be shown. Select one with Enter.
|
||||||
|
|
||||||
|
|
||||||
|
ITIPX.NET
|
||||||
|
---------
|
||||||
|
|
||||||
|
ITIPX.NET is an IPX Network driver for Impulse Tracker. It is recommended that
|
||||||
|
this is used over a LAN (ie. you will need a network card in your computer).
|
||||||
|
Although Kali will work (IPX over the internet), performance will probably be
|
||||||
|
unacceptable for most people through a modem.
|
||||||
|
|
||||||
|
The IPX driver *will not be stable* under Win95. Upgrade to Win98.
|
||||||
|
To install IPX to run under Windows, go to Start Menu->Settings->Control Panel.
|
||||||
|
Select Network, and under the Configuration Tab, press Add, then select
|
||||||
|
Protocol->Microsoft->IPX/SPX Compatible Protocol
|
||||||
|
|
||||||
|
The IPX driver will list the available sessions in the left hand box. Select
|
||||||
|
a session to join by pressing Enter.
|
||||||
|
|
||||||
|
The Username that the IPX driver transmits is associated with each driver file.
|
||||||
|
The public distribution identifies itself as "Unregistered". Different
|
||||||
|
usernames are availble for US$10 each. Payment can be made via Kagi at
|
||||||
|
http://order.kagi.com/?4ZM
|
||||||
|
|
||||||
|
Please specify a username, maximum length 15 characters, or else one will be
|
||||||
|
chosen for you. Updated versions of the driver, if made, will be provided free
|
||||||
|
of charge. However, changing your username will still cost $10.
|
||||||
|
|
||||||
|
'Normal' usage of this driver should run quite stably. However, if you try hard
|
||||||
|
to make it crash, I'm sure you will be able to.
|
||||||
|
|
||||||
|
Note that connections will be automatically dropped if queued packets fail to
|
||||||
|
be transmitted for more than 10 seconds.
|
||||||
|
|
||||||
|
General Notes
|
||||||
|
-------------
|
||||||
|
Impulse Tracker supports a maximum of 4 users per session. Extra users will
|
||||||
|
be automatically discarded.
|
||||||
|
|
||||||
|
Many functions have been disabled under network mode. You will receive warning
|
||||||
|
messages in these cases.
|
||||||
|
|
||||||
|
Do *NOT* use hardware mixed drivers for networked sessions. This specifically
|
||||||
|
means the AWE32, GUS and Interwave drivers. Since networked sessions can
|
||||||
|
change samples 'behind your back', these drivers will not update correctly.
|
|
@ -0,0 +1,72 @@
|
||||||
|
|
||||||
|
This package contains 6 files
|
||||||
|
|
||||||
|
1. IT.EXE - This can be considered IT214 Patch #4. Includes a few bugfixes
|
||||||
|
and some minor enhancements. Registered users should use their
|
||||||
|
own IT.EXE
|
||||||
|
|
||||||
|
2. ITVSOUND.MMX - Virtual Sound Driver for Impulse Tracker. This is a MMX
|
||||||
|
driver and will not work on non MMX computers.
|
||||||
|
|
||||||
|
3. ITVSOUND.DRV - Virtual Sound Driver for Impulse Tracker. This is a non-MMX
|
||||||
|
driver and should work on all computers.
|
||||||
|
|
||||||
|
4. ITVSOUND.VXD - Driver to connect ITVSOUND.MMX to the server.
|
||||||
|
|
||||||
|
5. SERVER.EXE - Windows server to connect to DirectSound
|
||||||
|
|
||||||
|
6. README.TXT - This file.
|
||||||
|
|
||||||
|
How to use these files
|
||||||
|
----------------------
|
||||||
|
You MUST have DirectX installed. It was written with the DirectX6 SDK,
|
||||||
|
although I'm pretty sure DirectSound 5 is sufficient.
|
||||||
|
|
||||||
|
1. Copy ITVSOUND.VXD into your Windows\System directory
|
||||||
|
(normally C:\WINDOWS\SYSTEM)
|
||||||
|
|
||||||
|
2. In your Windows directory (normally C:\WINDOWS), edit your SYSTEM.INI file
|
||||||
|
and include the line:
|
||||||
|
device=itvsound.vxd
|
||||||
|
anywhere in the [386Enh] section
|
||||||
|
|
||||||
|
3. Reboot your computer
|
||||||
|
|
||||||
|
4. Run Server.EXE
|
||||||
|
|
||||||
|
5. Run "IT"
|
||||||
|
|
||||||
|
Configuring the driver
|
||||||
|
----------------------
|
||||||
|
The driver can be configured by modifying Window's Registry by running
|
||||||
|
"regedit" (which comes with Windows). The variables can be found at:
|
||||||
|
"KHEY_LOCAL_MACHINE\Software\Jeffrey Lim\Impulse Tracker VSound Server"
|
||||||
|
|
||||||
|
The 4 variables are:
|
||||||
|
BufferSize - The size of the DirectSound buffer in kb.
|
||||||
|
Permitted ranges from 4 to 64, default 24
|
||||||
|
BufferThreshold - The size of the buffer that IT tries to maintain in kb.
|
||||||
|
Permitted ranges from 2 to 32, default 21
|
||||||
|
BufferType - 0 = DualBuffer (BufferSize is logically split into 2 sections)
|
||||||
|
1 = QuadBuffer (BufferSize is logically split into 4 sections)
|
||||||
|
2 = OctBuffer (BufferSize is logically split into 8 sections)
|
||||||
|
(recommended, default)
|
||||||
|
MixSpeed - Mixing rate to be used in Hz.
|
||||||
|
Permitted ranges from 11025 to 64000, default 44100
|
||||||
|
|
||||||
|
You will need to restart the server before these changes take effect.
|
||||||
|
|
||||||
|
Known Problems
|
||||||
|
--------------
|
||||||
|
1. This driver only works with Win95 and Win98, NOT WinNT (I'll try a WinNT
|
||||||
|
driver sometime).
|
||||||
|
|
||||||
|
2. There is an obvious latency due to the size of the buffers and the delay
|
||||||
|
that is inherent to DirectSound. Reducing the BufferSize and BufferThreshold
|
||||||
|
values can reduce this latency, however, smaller values can also cause the
|
||||||
|
sound to break up.
|
||||||
|
|
||||||
|
Try using the values:
|
||||||
|
1. BufferSize=16, BufferThreshold=14, BufferType=2, MixSpeed = 44100
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,296 @@
|
||||||
|
|
||||||
|
Summary Information - Command Line
|
||||||
|
|
||||||
|
-SFilename.Drv - Set soundcard driver
|
||||||
|
|
||||||
|
-Sxx Quick set sound card
|
||||||
|
0 = No Sound
|
||||||
|
1 = PC Speaker
|
||||||
|
2 = Sound Blaster 1.xx
|
||||||
|
3 = Sound Blaster 2.xx
|
||||||
|
4 = Sound Blaster Pro
|
||||||
|
5 = Sound Blaster 16
|
||||||
|
6 = Sound Blaster AWE 32
|
||||||
|
7 = Gravis UltraSound
|
||||||
|
8 = Interwave IC
|
||||||
|
9 = Pro Audio Spectrum
|
||||||
|
10 = Pro Audio Spectrum 16
|
||||||
|
11 = Windows Sound System
|
||||||
|
12 = ESS ES1868 AudioDrive
|
||||||
|
13 = EWS64 XL Codec
|
||||||
|
19 = Generic MPU401 driver
|
||||||
|
20 = Disk writer device
|
||||||
|
|
||||||
|
-Axxx Set sound card's address (hexadecimal)
|
||||||
|
-D# Set DMA channel (decimal)
|
||||||
|
-I## Set IRQ number (decimal)
|
||||||
|
|
||||||
|
-M##### Set mixing speed (decimal)
|
||||||
|
-L### Limit number of channels
|
||||||
|
|
||||||
|
-C Control playback in DOS Shell (with Grey +/-, Right Alt & Right Ctrl)
|
||||||
|
-F Disable file-colour distinctions
|
||||||
|
-K Exchange F1 and F11 keys
|
||||||
|
-Px Pattern memory allocation strategy.
|
||||||
|
-P0 = Try to store patterns in conventional memory first, EMS is
|
||||||
|
only used once conventional memory runs out.
|
||||||
|
Not recommended, but those of you who use IT in Windows 3.xx
|
||||||
|
should try this option if you get EMS errors. (I recommend
|
||||||
|
that you don't use IT under Windows 3.xx at all)
|
||||||
|
-P1 = Use one block of EMS for all patterndata.
|
||||||
|
This is the most memory efficient of all the pattern
|
||||||
|
storage modes - (this is also the default)
|
||||||
|
-P2 = Use EMS blocks for each pattern
|
||||||
|
This is a VERY wasteful but 'safe' memory allocation scheme.
|
||||||
|
-R Reverse channels (flip left-right), same as Alt-R on the info page.
|
||||||
|
-T1 Disable usage time indication
|
||||||
|
-T2 Enable timeslice release
|
||||||
|
-V1 Override VGA detection/Matrox detection.
|
||||||
|
-V2 Force matrox compatibility mode (use with -v1)
|
||||||
|
-V3 Wait for vertical retraces
|
||||||
|
-X1 Disable internal MMTSR
|
||||||
|
-X2 Disable mouse
|
||||||
|
-X3 Disable drive map detection
|
||||||
|
-X4 Disable cache file creation
|
||||||
|
|
||||||
|
|
||||||
|
Summary Information - Effects, alphabetically
|
||||||
|
|
||||||
|
Volume Column Effects
|
||||||
|
Ax - Volume slide up
|
||||||
|
Bx - Volume slide down
|
||||||
|
Cx - Fine volume slide up
|
||||||
|
Dx - Fine volume slide down
|
||||||
|
Ex - Pitch slide down
|
||||||
|
Fx - Pitch slide up
|
||||||
|
Gx - Portament to
|
||||||
|
Hx - Vibrato with speed x
|
||||||
|
|
||||||
|
General Effects
|
||||||
|
Axx - Set speed (set number of frames per row)
|
||||||
|
Bxx - Jump to order
|
||||||
|
Cxx - Break to row xx of (next) pattern
|
||||||
|
Dxy - Volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Exx - Pitch slide down by xx
|
||||||
|
EFx - Fine pitch slide down by x
|
||||||
|
EEx - Extra fine pitch slide down by x
|
||||||
|
Fxx - Pitch slide up by xx
|
||||||
|
FFx - Fine pitch slide down by x
|
||||||
|
FEx - Extra fine pitch slide down by x
|
||||||
|
Gxx - Portamento to note with speed xx
|
||||||
|
Hxy - Vibrato with speed x, depth y
|
||||||
|
Ixy - Tremor with ontime x, offtime y
|
||||||
|
Jxy - Arpeggio with halftones x and y
|
||||||
|
Kxy - Dual command: H00 and Dxy
|
||||||
|
Lxy - Dual command: G00 and Dxy
|
||||||
|
Mxx - Set channel volume to xx (0->40h)
|
||||||
|
Nxy - Channel volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Oxx - Set sample offset to xx00h
|
||||||
|
Pxy - Panning slide, x=0 right; y=0 left; x=F fine right; y=F fine left
|
||||||
|
Qxy - Retrigger note every y frames with volume modifier x
|
||||||
|
Values for x:
|
||||||
|
0: (nothing) 4: -8 8: (nothing) C: +8
|
||||||
|
1: -1 5: -16 9: +1 D: +16
|
||||||
|
2: -2 6: *2/3 A: +2 E: *3/2
|
||||||
|
3: -4 7: *1/2 B: +4 F: *2
|
||||||
|
Rxy - Tremelo with speed x, depth y
|
||||||
|
S3x - Set vibrato waveform
|
||||||
|
S4x - Set tremelo waveform
|
||||||
|
S5x - Set panbrello waveform
|
||||||
|
Waveforms for x in S3x, S4x and S5x:
|
||||||
|
0 = Sine 2 = Square
|
||||||
|
1 = Ramp down 3 = Random
|
||||||
|
S6x - Pattern delay for x frames
|
||||||
|
S7x - Instrument functions
|
||||||
|
Values for x in S7x:
|
||||||
|
0: Past note cut 5: Set NNA to note off
|
||||||
|
1: Past note off 6: Set NNA to note fade
|
||||||
|
2: Past note fade 7: Turn off volume envelope
|
||||||
|
3: Set NNA to note cut 8: Turn on volume envelope
|
||||||
|
4: Set NNA to continue
|
||||||
|
S8x - Set pan position
|
||||||
|
S91 - Set surround sound
|
||||||
|
SB0 - Set loopback point
|
||||||
|
SBx - Loop x times to loopback point
|
||||||
|
SCx - Note cut after x frames
|
||||||
|
SDx - Note delay for x frames
|
||||||
|
SEx - Pattern delay for x rows
|
||||||
|
SFx - Select parameterised MIDI Macro
|
||||||
|
T0x - Tempo slide down by x
|
||||||
|
T1x - Tempo slide up by x
|
||||||
|
Txx - Set tempo (20h->0FFh)
|
||||||
|
Uxy - Fine vibrato with speed x, depth y
|
||||||
|
Vxx - Set global volume to xx (0->80h)
|
||||||
|
Wxx - Global volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Xxx - Set panning position (0->0FFh)
|
||||||
|
Yxy - Panbrello with speed x, depth y
|
||||||
|
Zxx - MIDI Macro - check MIDI.TXT
|
||||||
|
|
||||||
|
Summary Information - Effects, categorically
|
||||||
|
|
||||||
|
Note: Not all effects are listed here.
|
||||||
|
|
||||||
|
Speed Control
|
||||||
|
Axx - Set speed
|
||||||
|
T0x - Tempo slide down by x
|
||||||
|
T1x - Tempo slide up by x
|
||||||
|
Txx - Set tempo (20h->0FFh)
|
||||||
|
S6x - Pattern delay for x frames
|
||||||
|
SEx - Pattern delay for x rows
|
||||||
|
|
||||||
|
Position Control
|
||||||
|
Bxx - Jump to order
|
||||||
|
Cxx - Break to row xx of (next) pattern
|
||||||
|
SB0 - Set pattern loopback point
|
||||||
|
SBx - Loop pattern x times
|
||||||
|
|
||||||
|
Volume Control
|
||||||
|
Ax - Volume slide up
|
||||||
|
Bx - Volume slide down
|
||||||
|
Cx - Fine volume slide up
|
||||||
|
Dx - Fine volume slide down
|
||||||
|
Dxy - Volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Ixy - Tremor with ontime x, offtime y
|
||||||
|
Mxx - Set channel volume to xx (0->40h)
|
||||||
|
Nxy - Channel volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Vxx - Set global volume to xx (0->80h)
|
||||||
|
Wxx - Global volume slide, x=0 down; y=0 up; x=F fine down; y=F fine up
|
||||||
|
Rxy - Tremelo with speed x, depth y
|
||||||
|
S4x - Set tremelo waveform
|
||||||
|
|
||||||
|
Panning Control
|
||||||
|
Xxx - Set panning position (0->0FFh)
|
||||||
|
S8x - Set pan position
|
||||||
|
S91 - Set surround sound
|
||||||
|
Pxy - Panning slide, x=0 right; y=0 left; x=F fine right; y=F fine left
|
||||||
|
Yxy - Panbrello with speed x, depth y
|
||||||
|
S5x - Set panbrello waveform
|
||||||
|
|
||||||
|
Pitch Control
|
||||||
|
Exx - Pitch slide down by xx
|
||||||
|
EFx - Fine pitch slide down by x
|
||||||
|
EEx - Extra fine pitch slide down by x
|
||||||
|
Ex - Pitch slide down
|
||||||
|
Fxx - Pitch slide up by xx
|
||||||
|
FFx - Fine pitch slide up by x
|
||||||
|
FEx - Extra fine pitch slide up by x
|
||||||
|
Fx - Pitch slide up
|
||||||
|
Gxx - Portamento to note with speed xx
|
||||||
|
Gx - Portamento to
|
||||||
|
Hxy - Vibrato with speed x, depth y
|
||||||
|
Hx - Vibrato with speed x
|
||||||
|
Uxy - Fine vibrato with speed x, depth y
|
||||||
|
S3x - Set vibrato waveform
|
||||||
|
Jxy - Arpeggio with halftones x and y
|
||||||
|
|
||||||
|
Summary Information - Pattern Editor 1
|
||||||
|
|
||||||
|
Data Entry
|
||||||
|
Alt-0 -> Alt-9 Set skipvalue to 0-9
|
||||||
|
. (period) Clear field(s)
|
||||||
|
1 Note cut (^^^)
|
||||||
|
` Note off (ÍÍÍ) / panning toggle (in volume column)
|
||||||
|
Spacebar Use last (default) note/instrument/volume/effect/effectvalue
|
||||||
|
|
||||||
|
³ ³ ³³ ³ ³ ³ ³³ ³³ ³ ³ ³ ³³ ³ ³ ³ ³³ ³³ ³ ³ ³ ³³ ³ ³
|
||||||
|
³ ³ ³³ ³ ³ ³ ³³ ³³ ³ ³ ³ ³³ ³ ³ ³ ³³ ³³ ³ ³ ³ ³³ ³ ³
|
||||||
|
³ ³S³³D³ ³ ³G³³H³³J³ ³ ³2³³3³ ³ ³5³³6³³7³ ³ ³9³³0³ ³
|
||||||
|
³ ÀÂÙÀÂÙ ³ ÀÂÙÀÂÙÀÂÙ ³ ÀÂÙÀÂÙ ³ ÀÂÙÀÂÙÀÂÙ ³ ÀÂÙÀÂÙ ³
|
||||||
|
³ Z³ X³ C³ V³ B³ N³ M³ Q³ W³ E³ R³ T³ Y³ U³ I³ O³ P³
|
||||||
|
ÀÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÁÄÄÙ
|
||||||
|
|
||||||
|
Pattern selection
|
||||||
|
+, - Next/Previous pattern (*)
|
||||||
|
Shift +, - Next/Previous 4 patterns (*)
|
||||||
|
Ctrl +, - Next/Previous order's pattern (*)
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
Enter Get default note/instrument/volume/effect
|
||||||
|
'<' or Ctrl-Up Decrease instrument
|
||||||
|
'>' or Ctrl-Down Increase instrument
|
||||||
|
Grey '/' Decrease octave
|
||||||
|
Grey '*' Increase octave
|
||||||
|
',' (comma) Toggle edit mask for current field
|
||||||
|
|
||||||
|
Ins/Del Insert/Delete a row to/from current channel
|
||||||
|
Alt-Ins/Del Insert/Delete an entire row from pattern (*)
|
||||||
|
Alt-N Toggle Multichannel
|
||||||
|
2*Alt-N Multichannel selection menu
|
||||||
|
Alt-Enter Store pattern data
|
||||||
|
Alt-Backspace Revert pattern data (*)
|
||||||
|
Ctrl-Backspace Undo - any function with (*) can be undone.
|
||||||
|
|
||||||
|
Ctrl-F2 Set (multiple) pattern length
|
||||||
|
|
||||||
|
Cursor Control
|
||||||
|
Up/Down Move up/down by the skipvalue
|
||||||
|
Ctrl-Home/End Move up/down by 1 row
|
||||||
|
Alt-Up/Down Slide pattern up/down by 1 row
|
||||||
|
Alt-Left/Right Move forwards/backwards one channel
|
||||||
|
Ctrl-Left/Right Move left/right between track columns
|
||||||
|
Tab/Shift-Tab Move forwards/backwards to note column
|
||||||
|
PgUp/PgDn Move up/down by n lines (n=Row hilight major)
|
||||||
|
Ctrl-PgUp/PgDn Move to top/bottom of pattern
|
||||||
|
Home Move to start of column/start of line/start of pattern
|
||||||
|
End Move to end of column/end of line/end of pattern
|
||||||
|
Backspace Move to previous position (accounts for Multichannel)
|
||||||
|
|
||||||
|
Ctrl-C Toggle centralise cursor option.
|
||||||
|
|
||||||
|
Track View Functions
|
||||||
|
Alt-T Cycle current track's view
|
||||||
|
Alt-R Remove all track views
|
||||||
|
Alt-H Toggle track-view divisions
|
||||||
|
Ctrl-0 Deselect current track
|
||||||
|
Ctrl-1 - Ctrl-5 View current track in scheme 1-5
|
||||||
|
Ctrl-Left/Right Move left/right between track columns
|
||||||
|
|
||||||
|
Left-Ctrl &
|
||||||
|
Left-Shift 1-4 Quick setup view scheme (and enable cursor-tracking)
|
||||||
|
|
||||||
|
Ctrl-T Toggle view-channel cursor tracking
|
||||||
|
|
||||||
|
Summary Information - Pattern Editor 2
|
||||||
|
|
||||||
|
Block functions.
|
||||||
|
Shift-Movement Mark block
|
||||||
|
Alt-B Mark beginning of block
|
||||||
|
Alt-E Mark end of block
|
||||||
|
Alt-D Quick mark n/2n/4n/... lines (n=Row Hilight Major)
|
||||||
|
Alt-L Mark entire column/pattern
|
||||||
|
|
||||||
|
Alt-U Unmark block/release clipboard
|
||||||
|
|
||||||
|
Alt-Q Raise notes by a semitone (*)
|
||||||
|
Alt-A Lower notes by a semitone (*)
|
||||||
|
|
||||||
|
Alt-S Set instrument (*)
|
||||||
|
Alt-V Set volume/panning (*)
|
||||||
|
Alt-W Wipe volume/panning not associated with a note/instrument (*)
|
||||||
|
Alt-K Slide volume/panning column (*)
|
||||||
|
2*Alt-K Wipe all volume/panning controls (*)
|
||||||
|
Alt-J Volume amplifier (*) / Fast Volume attenuate (*)
|
||||||
|
Alt-Z Cut block (*)
|
||||||
|
Alt-X Slide effect value (*)
|
||||||
|
2*Alt-X Wipe all effect & effect value data (*)
|
||||||
|
|
||||||
|
Alt-C Copy block into clipboard
|
||||||
|
Alt-P Paste data from clipboard (*)
|
||||||
|
Alt-O Overwrite with data from clipboard (*)
|
||||||
|
Alt-M Mix data from clipboard with pattern data (*)
|
||||||
|
|
||||||
|
Alt-F Double block length (*)
|
||||||
|
Alt-G Halve block length (*)
|
||||||
|
|
||||||
|
Alt-I Select template mode / Fast volume amplify (*)
|
||||||
|
Ctrl-J Toggle fast volume amplification with Alt-J/Alt-I
|
||||||
|
|
||||||
|
Playback functions
|
||||||
|
4 Play note under cursor
|
||||||
|
8 Play row
|
||||||
|
|
||||||
|
Ctrl-F6 Play pattern from current row
|
||||||
|
Ctrl-F7 Set/Clear playback mark (for use with F7)
|
||||||
|
|
||||||
|
Alt-F9 Toggle current channel on/off
|
||||||
|
Alt-F10 Solo current channel on/off
|
|
@ -0,0 +1,592 @@
|
||||||
|
|
||||||
|
Contributors Additions
|
||||||
|
- IT215 file format saving. Note that this is an alternative compression
|
||||||
|
format and is often better, but not always. Public releases of IT214
|
||||||
|
Patch 1 and later can read IT215 compressed files. There is also a
|
||||||
|
version of MikIT that can read IT215 compression.
|
||||||
|
- Sample sorting enabled. On the sample/instrument list screens, files will
|
||||||
|
be priority sorted alphabetically if you don't move the cursor. If you
|
||||||
|
do move the cursor, then you can force a resort once all the files have
|
||||||
|
been loaded by pressing Alt-S.
|
||||||
|
- Reordering of order list with Alt-R while on the order list screen
|
||||||
|
(easier to try it out, than to try to explain it)
|
||||||
|
- Row lock in pattern editor if holding shift - very useful for chords
|
||||||
|
(ie. use Shift+note)
|
||||||
|
- 10 configurable 'preset' envelopes slots
|
||||||
|
- Extra instrument filter controls (under pitch menu).
|
||||||
|
- Alt-W on the sample list saves as .WAV format, not .RAW
|
||||||
|
- Individual Sample/Instrument solo.
|
||||||
|
- Personalised Network username
|
||||||
|
|
||||||
|
Contributions of US$30 or more
|
||||||
|
- Stereo Diskwriter
|
||||||
|
- MIDI .IT -> .MID converter
|
||||||
|
|
||||||
|
|
||||||
|
Bug fixes to Network version
|
||||||
|
- Correct data transmitted on:
|
||||||
|
1. Pattern Undo (Ctrl-Backspace)
|
||||||
|
2. Block Mix (Alt-M)
|
||||||
|
- EMS Error 83h during network sessions
|
||||||
|
|
||||||
|
IT214 Network
|
||||||
|
- This includes the first version of Networked Impulse Tracker. Check
|
||||||
|
NETWORK.TXT for more information.
|
||||||
|
|
||||||
|
- ITSB16B.MMX for SBLive! users which shouldn't require reinitialisation.
|
||||||
|
|
||||||
|
IT214 Patch 4 - This release has been made entirely for the VSOUND drivers,
|
||||||
|
which will allow you to setup IT to run under Windows '95/'98
|
||||||
|
with *ANY* soundcard. Check ITVSOUND.TXT for more information.
|
||||||
|
|
||||||
|
- Addition: Included command line option /V3 to wait for vertical retrace.
|
||||||
|
- Addition: Included command line option /X4 to disable cache file creation.
|
||||||
|
|
||||||
|
- Bug fix: Several fixes to the MIDI Out implementation
|
||||||
|
- Bug fix: S3M saver sometimes caused crash problems and pattern errors
|
||||||
|
- Bug fix: SCx and Qxx commands and will work with MIDI Out instruments
|
||||||
|
- Bug fix: 64 channel view doesn't skip channels with only volume-effects
|
||||||
|
|
||||||
|
- Driver news: 4-band EQ in diskwriter
|
||||||
|
Minor miscellaneous upgrades
|
||||||
|
Fixes to MMX drivers that clicked on 0 volume (oops)
|
||||||
|
|
||||||
|
Clarification (only because I saw some arguments on usenet)
|
||||||
|
- the MMX drivers use 32-bit precision mixing, not 16-bit.
|
||||||
|
|
||||||
|
IT214 Patch 3 - Merry XMas guys!
|
||||||
|
|
||||||
|
- If anyone who has contributed has NOT received an EMail from me, please
|
||||||
|
write to me! I've sent out EMails to every one of you.. but a few
|
||||||
|
addresses have changed.. or I could have accidentally missed you (huge
|
||||||
|
apologies if so)
|
||||||
|
|
||||||
|
- Bug fix: IFF loader <incorrect info given to me before>
|
||||||
|
- Bug fix: XM modules with no patterns won't crash IT. (Apologies to the
|
||||||
|
GroovyCompo Organisers - for those interested in online music
|
||||||
|
tracking competitions, check http://www.groove.org)
|
||||||
|
- Bug fix: CACHE files stored on CDROMs will now work, irrespective of
|
||||||
|
their datestamp. Thanks to Humanoid/Prophecy for the Morbid Minds
|
||||||
|
CD on which I could finally test these routines!
|
||||||
|
- Bug fix: Obscure bug on instrument list under rare circumstances causing
|
||||||
|
playing notes to do weird things.
|
||||||
|
|
||||||
|
- Driver news: Updated driver format (incompatible with previous ITs)
|
||||||
|
Resonant filters - check FILTERS.TXT for information.
|
||||||
|
This stuff has been released basically so that contributors
|
||||||
|
can distribute their songs that use filters..
|
||||||
|
- MMX drivers implemented.
|
||||||
|
- WAV driver - time accuracy improved
|
||||||
|
- can specify destination directory (on shift-F5)
|
||||||
|
- handles resonant filters
|
||||||
|
|
||||||
|
IT214 Patch 2
|
||||||
|
- Bug Fix: 16-bit samples of an exact multiple of 32768 bytes in size were
|
||||||
|
getting corrupted on saving.
|
||||||
|
- Bug fix: MIDI Macros (unparameterised) were somehow disabled somewhere
|
||||||
|
after IT212.. now reenabled
|
||||||
|
|
||||||
|
IT214 Patch 1
|
||||||
|
- Bug fix: EMM4.0 mode reenabled
|
||||||
|
- Bug fix: Volume envelopes were skipping some ticks (sounded too fast)
|
||||||
|
- Bug fix: Slight problems with the wav writer fixed
|
||||||
|
- Bug fix: S3M saving bug fixed (was introduced in IT214 due to a 'bug
|
||||||
|
report')
|
||||||
|
- Other miscellaneous fixups
|
||||||
|
|
||||||
|
IT214 - Version jump to make sure samples don't get screwed up by the
|
||||||
|
prerelease (IT213) loader. This is the FINAL public release. Apart
|
||||||
|
from bugfixes/new soundcard drivers, don't expect to see anything in
|
||||||
|
the future...
|
||||||
|
|
||||||
|
- Samples are now compressed on the fly when saved and loaded from disk.
|
||||||
|
Note that this is NOT the same as using MMCMP.
|
||||||
|
|
||||||
|
- Several unimportant (debug) procedures removed to make slightly more
|
||||||
|
memory available.
|
||||||
|
|
||||||
|
- Driver news: Diskwriter interpolation changed from quadratic spline
|
||||||
|
to cubic spline. (Requires a FPU)
|
||||||
|
|
||||||
|
IT213 Update
|
||||||
|
- Modification: Sample panning reset to override instrument panning due to
|
||||||
|
demand.
|
||||||
|
|
||||||
|
- Update: .IFF loader updated. Should deal with almost any .IFF file now.
|
||||||
|
|
||||||
|
- Update: EMS Stability improved
|
||||||
|
|
||||||
|
- Update: Several miscellaneous changes
|
||||||
|
|
||||||
|
- Update: If old effects is *ON*, then a looped volume envelope will NOT
|
||||||
|
include the last node (for XM compat)
|
||||||
|
|
||||||
|
- Update: More memory available (Help text was manually compressed)
|
||||||
|
|
||||||
|
- Row hilight information is now stored within the .IT module..
|
||||||
|
|
||||||
|
- Automatic MIDI Pitch wheel handling. Vibrato, pitch slides, portamentos
|
||||||
|
all handled.
|
||||||
|
<Note: REQUIRES a FPU.. the program will hang if you enable this on
|
||||||
|
Shift-F1 and you don't have a FPU (486DX+ chips have FPUs)>
|
||||||
|
|
||||||
|
- MIDI Configuration can be embedded into .IT files.
|
||||||
|
(Option is on Shift-F1)
|
||||||
|
|
||||||
|
- Driver news: Terratec EWS64 XL Codec software mixing driver
|
||||||
|
Terratec Maestro 32/96 Codec software mixing driver
|
||||||
|
Terratec Maestro 16/96 Codec software mixing driver
|
||||||
|
Ensoniq SoundscapeVIVO Codec software mixing driver
|
||||||
|
Sound Track PCI Codec software mixing driver
|
||||||
|
ES1688 Audiodrive Codec software mixing driver (for ViperMAX)
|
||||||
|
MPU401 generic driver.
|
||||||
|
Direct to Disk writer now uses logarithmic volume ramping
|
||||||
|
and quadratic spline interpolation
|
||||||
|
Read DRIVERS.TXT for information on all of these.
|
||||||
|
|
||||||
|
IT212 Update - Special thanks go out to all those that did stability testing
|
||||||
|
of the beta versions of IT212.
|
||||||
|
|
||||||
|
- Bug fix: "Available Samples" in the instrument loading screen will be
|
||||||
|
correct if you're loading an instrument from within a module.
|
||||||
|
|
||||||
|
- Bug fix: Sample files will store default pan values.
|
||||||
|
|
||||||
|
- Bug fix: Trying to show pattern data past the end of a pattern will
|
||||||
|
not crash IT anymore. This could have occurred before if the
|
||||||
|
number of rows in a pattern were reduced during playback, then
|
||||||
|
switching to the info page.
|
||||||
|
|
||||||
|
- Bug fix: Deleting samples/instruments "within" a module has been disabled
|
||||||
|
(as it should be), so that the module itself cannot be deleted.
|
||||||
|
|
||||||
|
- Bug fix: Default sample pan will override instrument pan whether "Old
|
||||||
|
Effects" is on or off.
|
||||||
|
|
||||||
|
- .669 Loader, since Snowman is collecting 'em :)
|
||||||
|
This loader hasn't been extensively tested, maily because Composd.Exe
|
||||||
|
will not run on my machine (64MB is "Not enough extended memory" ?!?! ).
|
||||||
|
Most songs should play though.. Please don't bug me to update the loader
|
||||||
|
any further - you won't get a reply.
|
||||||
|
|
||||||
|
- *Much* better memory handling for patterns. EMM386 parameter H=255
|
||||||
|
should not be required in MOST cases now (you will only need it if
|
||||||
|
you use a large number of samples (ie. > 50) ). You should also have
|
||||||
|
more FreeMem to work with. Beta testers have noted that QEMM shows even
|
||||||
|
more stability problems in this version than previous versions - please
|
||||||
|
avoid QEMM as it DOES cause crashing for as yet unknown reasons. The old
|
||||||
|
memory allocation routines can still be found if you have EMS problems by
|
||||||
|
using /P2 on the command line.
|
||||||
|
|
||||||
|
- Keyboard handling on instrument lists has been improved to handle
|
||||||
|
multiple keypresses/releases. (but not on sample list due to usability)
|
||||||
|
|
||||||
|
- Default volume display in *NORMAL* (5 channel) pattern editor if you press
|
||||||
|
Ctrl-V. If you use a custom font, you will need to upgrade your font set
|
||||||
|
with FONTUPGR to see this properly.
|
||||||
|
Example:
|
||||||
|
C-4 01 .. ... <-- what volume is this??
|
||||||
|
|
||||||
|
Press Ctrl-V:
|
||||||
|
C-4 01 [32] ... <-- it'll show that the default volume of
|
||||||
|
sample/instrument 1 is 32.
|
||||||
|
|
||||||
|
Alt-K has been upgraded to 'pick up' these default values. (So that you
|
||||||
|
can also slide from volume 0 to the sample's default without having to
|
||||||
|
explicitly key in the value).
|
||||||
|
|
||||||
|
- Automatic filename extension replacement on Ctrl-S, so that if you press
|
||||||
|
Ctrl-S after loading a .MOD, .669, .MTM or .XM, the filename will be
|
||||||
|
automatically modified to have a .IT extension.
|
||||||
|
|
||||||
|
- CDRom check for CACHE.IT? files. If you burn a CDRom of samples or
|
||||||
|
instruments, include the CACHE.ITI and CACHE.ITS files from IT211+ and
|
||||||
|
they should accelerate loading of sample and instrument names on all
|
||||||
|
future versions of IT.
|
||||||
|
< Not tested, since I can't :( >
|
||||||
|
|
||||||
|
- 64 channel miniview on the info page. (note: doesn't show all fields)
|
||||||
|
|
||||||
|
- Note dots added on the info page.
|
||||||
|
(You may have to update your info page settings by re-saving all prefs)
|
||||||
|
|
||||||
|
- Changed the old Alt-C on the instrument list to Alt-W (wipe data)
|
||||||
|
New Alt-C removes the instrument name and filename, but does NOT
|
||||||
|
remove the instrument parameters (like the Alt-C on the sample list)
|
||||||
|
|
||||||
|
- MIDI OUTPUT!
|
||||||
|
Fully configurable output
|
||||||
|
16 parameterised macros
|
||||||
|
128 constant macros
|
||||||
|
Check MIDI.TXT for details. (Big thanks to Ozone for writing this)
|
||||||
|
|
||||||
|
- Soundcard Driver news
|
||||||
|
þ Inserted a new algorithm into the direct-to-disk writer to remove
|
||||||
|
clicks at the end of samples in cases of Note Cut commands, Note Cut NNA
|
||||||
|
and instantaneous sample changes in sample mode. For those who have
|
||||||
|
sent me money and would like to receive the upgrade, EMail me.
|
||||||
|
þ ESS ES1868 AudioDrive driver. This will NOT support any other ESS
|
||||||
|
chipsets than the ES1868. Do not write to me asking for support for
|
||||||
|
other ESS chips unless you are willing to buy me a card (or send me
|
||||||
|
the money to do so). This driver supports mixing rates up to 56.8kHz
|
||||||
|
(16 bit, stereo) and it also supports MIDI In.
|
||||||
|
þ AWE32 driver update: More accurate tempo control and less clicks under
|
||||||
|
Win95
|
||||||
|
þ TB Tropez users: I received an EMail telling me that the GUSMAX drivers
|
||||||
|
were working fully with the TB Tropez cards! See how
|
||||||
|
it works...
|
||||||
|
þ Sound drivers for the ST97 and EWS64 coming... as soon as I get them
|
||||||
|
working....
|
||||||
|
|
||||||
|
Other news: It seems that some people really don't care how much work
|
||||||
|
I've put into IT - Warez versions of the full ITWAV.DRV
|
||||||
|
are being sought after. Let me make this clear: Distribution
|
||||||
|
of the full version of ITWAV.DRV is NOT appreciated and if I
|
||||||
|
ever find the full version anywhere, IT will no longer be
|
||||||
|
publically released.
|
||||||
|
|
||||||
|
|
||||||
|
IT211 Update - Not so much this time, as I have been working full time, so
|
||||||
|
since IT has been sitting on my HDD without changes for a
|
||||||
|
couple of weeks, I decided to release the update anyway.
|
||||||
|
|
||||||
|
- Saving a song with Ctrl-S or from the menu will not prompt about
|
||||||
|
'overwriting' the file.
|
||||||
|
|
||||||
|
- Compatibility Gxx volume fadeout fixed.
|
||||||
|
|
||||||
|
- Matrox autodetection fixed to set mouse cursor properly also.
|
||||||
|
|
||||||
|
- You can press 'L' or 'R' on the "load stereo sample" prompt to select
|
||||||
|
left or right channels.
|
||||||
|
|
||||||
|
- Increased file-header 'load-buffer' so that more Sound Forge .WAV files
|
||||||
|
should be recognised.
|
||||||
|
|
||||||
|
- Bug fix to: swap samples/instruments, insert/remove sample/instrument
|
||||||
|
and update instrument *could* have caused the current
|
||||||
|
editing pattern to skip being modified.
|
||||||
|
|
||||||
|
- Bug fix: Pressing delete on a non-note column in template mode should
|
||||||
|
work as expected.
|
||||||
|
|
||||||
|
- Note: If you delete your old IT.CFG files and run IT afresh, you'll
|
||||||
|
get an extra 'line' on the infopage to work with.
|
||||||
|
|
||||||
|
- .KRZ sample-library loader. Note that this does NOT support multiple
|
||||||
|
.KR* files (ie. .KR1, .KR2, .KR3). To use these files, you will have
|
||||||
|
to run MERGEKRZ.EXE (supplied) to create a single .KRZ file.
|
||||||
|
(BIG thanks to Markus Jonnson for the info!)
|
||||||
|
|
||||||
|
- .PAT sample-library loader.
|
||||||
|
|
||||||
|
- Creating a 'host instrument' after loading a sample will first attempt
|
||||||
|
to use an instrument of the same number as the sample before finding
|
||||||
|
the first empty instrument.
|
||||||
|
|
||||||
|
- Holding down Caps Lock in the pattern editor will allow you to play
|
||||||
|
notes without entering them into the patterns.
|
||||||
|
|
||||||
|
Driver modifications
|
||||||
|
- Bug fix for SB16 drivers which caused patterns not to 'play'. For those
|
||||||
|
that still have troubles with the SB16 driver, read DRIVERS.TXT
|
||||||
|
- For those of you who couldn't get the GUSMAX driver working, check out
|
||||||
|
DRIVERS.TXT also :)
|
||||||
|
- The ITWAV.DRV file now writes proper .WAV files instead of .RAW
|
||||||
|
- ITAWE32.DRV uses floating point calculations to reduce memory usage.
|
||||||
|
ITAWE32B.DRV (the old driver) still exists for people who don't have
|
||||||
|
math coprocessors
|
||||||
|
|
||||||
|
|
||||||
|
IT210 Update - some MAJOR fixes here.
|
||||||
|
|
||||||
|
- Approximate song length on Ctrl-P. Note that *some* soundcards will
|
||||||
|
require reinitialisation after this (almost all won't). The time given
|
||||||
|
is the 'ideal' time for the playback of the song and should correspond
|
||||||
|
*exactly* to GUS/AWE non-IRQ playback times.
|
||||||
|
|
||||||
|
- A few more player bug fixes for XM compatibility
|
||||||
|
|
||||||
|
- IT won't crash if you try to load instruments from an 'empty' drive
|
||||||
|
(eg. disk not inserted or no files present)
|
||||||
|
|
||||||
|
- In the pattern editor, Insert/Delete, Note Cut/Note Off/Note Delete
|
||||||
|
are all 'template aware' - they will span more than 1 channel if
|
||||||
|
you are editing in template mode and the template has height 1.
|
||||||
|
Also, 'picking up' data with Enter will turn off Template mode's except
|
||||||
|
for "Template-Notes Only"
|
||||||
|
|
||||||
|
- Volume column effects Ex/Fx/Gx in combination with effect Jxx should
|
||||||
|
operate as expected now.
|
||||||
|
|
||||||
|
- Deleting a file on the instrument list will update the instrument cache
|
||||||
|
file appropriately.
|
||||||
|
|
||||||
|
- Sample/Instrument cache file time check fixed.
|
||||||
|
|
||||||
|
- Slight modification to the handling of SBx commands to prevent
|
||||||
|
infinite loops.
|
||||||
|
|
||||||
|
- Simple crash recovery mechanism should you ever encounter a problem.
|
||||||
|
(You shouldn't need it!) This is on Ctrl-Alt-Del in DOS or
|
||||||
|
Ctrl-Alt-Ins in Windows. It is not guaranteed to work, but if it works
|
||||||
|
once, then I guess that the amount of time I spent on it was worth it
|
||||||
|
(~10 minutes).
|
||||||
|
|
||||||
|
For the technically minded lot, what it does is it tries to 'kick start'
|
||||||
|
the tracker again directly from the keyboard interrupt handler.
|
||||||
|
|
||||||
|
- Loading a stereo WAV file will cause a pop-up menu to appear to select
|
||||||
|
loading the left or right channels.
|
||||||
|
|
||||||
|
- GUSMAX users interested in using software mixing, check out DRIVERS.TXT
|
||||||
|
|
||||||
|
- Memory corruption error found and fixed which produced 3-sets of invalid
|
||||||
|
values in the order list/instruments (main reason for this release!)
|
||||||
|
|
||||||
|
IT209 Update
|
||||||
|
|
||||||
|
************************* FONT FILES REQUIRE UPDATING *********************
|
||||||
|
If you have your own custom font file, you will need to change character
|
||||||
|
number 184 to 190. If you have used one of the 'standard' font sets, you
|
||||||
|
will need to run ITF and grab an updated file. Failure to do so will just
|
||||||
|
make the sample page look stuffed - You have been warned :)
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
Many Many MANY miscellaneous fixes to the XM loader and playback routines
|
||||||
|
-> XM support should be *MUCH* better now.
|
||||||
|
Volume effects have been debugged... hopefully :)
|
||||||
|
|
||||||
|
Some major errors fixed around (ie. dumping to DOS from the Instrument
|
||||||
|
screen, Pattern's not updating in memory correctly (which went wrong in
|
||||||
|
IT208) )
|
||||||
|
|
||||||
|
Added default sample pan to the sample list (default instrument pan WILL
|
||||||
|
override this if present). Note that using default pan is the equivalent
|
||||||
|
of using a 'set pan' effect on that row - the channel will be set to the
|
||||||
|
default sample pan.
|
||||||
|
|
||||||
|
You can change whether the info page displays sample names or instrument
|
||||||
|
names by pressing 'i'
|
||||||
|
|
||||||
|
IT208 Update
|
||||||
|
|
||||||
|
So much so quickly? Well, I had exams. And when I have exams, I code, 'cos
|
||||||
|
it's better than having to study :)
|
||||||
|
|
||||||
|
************************* FONT FILES REQUIRE UPDATING *********************
|
||||||
|
If you have your own custom font file, you will need to change character
|
||||||
|
number 184 to. If you have used one of the 'standard' font sets, you will
|
||||||
|
need to run ITF and grab an updated file. Failure to do so will just make
|
||||||
|
the info page and 10-channel editor look stuffed - You have been warned :)
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
- Bug fix: Keyboard configuration files could have cause MAJOR problems...
|
||||||
|
fixed!
|
||||||
|
|
||||||
|
- Bug fix: Some files with the .MOD ID "CH" which actually were NOT MODs
|
||||||
|
were being identified as "Fast Tracker 2" modules.
|
||||||
|
(You may have to delete your CACHE.ITS files to force IT to
|
||||||
|
refresh it's data)
|
||||||
|
|
||||||
|
- Bug fixes: MIDI input won't corrupt input on the order list
|
||||||
|
MIDI input won't interfere with button presses
|
||||||
|
MIDI input won't insert effect SDF into patterns when recording
|
||||||
|
where inappropriate.
|
||||||
|
|
||||||
|
- Old Left Ctrl+Shift-1 'removed', Left-Ctrl+Shift 1->4 still work - and
|
||||||
|
have been updated.
|
||||||
|
|
||||||
|
PROPER 10-channel editing mode available (complete with half sized cursors!)
|
||||||
|
as well as some minor logic improvements. (Try Left-Ctrl+Shift 2)
|
||||||
|
|
||||||
|
- ";" and "'" made to change the samples/instrument in the pattern editor
|
||||||
|
as '<' and '>' do - just much easier to do so on American keyboards.
|
||||||
|
|
||||||
|
- Dragging mouse nodes past boundaries is more accurate.
|
||||||
|
|
||||||
|
- "Channel details" display (on the infopage) *can* show the 64th channel
|
||||||
|
(oops in IT207)
|
||||||
|
|
||||||
|
- Matrox bug autodetection (Many thanks to Csaba Pankaczy for working with
|
||||||
|
me on this!)
|
||||||
|
|
||||||
|
- Message system hooked to a timer (ie. all those messages that appear
|
||||||
|
towards the top of the screen).. so that they will last a consistent
|
||||||
|
amount of time (independent of machine).
|
||||||
|
|
||||||
|
- Player Improvement: NNA mechanism will eliminate channels on two extra
|
||||||
|
conditions now (no difference to playback, but should
|
||||||
|
maximise channel usage)
|
||||||
|
|
||||||
|
- Improvement: Persistence of cache files through different sessions of IT
|
||||||
|
- ie. once the sample/instrument cache files are created, they
|
||||||
|
are NOT recreated unless necessary.
|
||||||
|
|
||||||
|
- Root "\" directory has replaced "." directory on all loading screens.
|
||||||
|
|
||||||
|
- Several Template input related functions improved. Also, Block-Cut in
|
||||||
|
template mode won't overwrite your clipboard if you're working with
|
||||||
|
templates.
|
||||||
|
|
||||||
|
- Template: "Notes only" added. This is different from the other templates
|
||||||
|
in that it will NOT copy the template's instruments, volumes or effects.
|
||||||
|
Instead, it will change it's instrument/volume/effect according to the
|
||||||
|
last used instrument/volume/effect, and will insert whatever is speicfied
|
||||||
|
by the edit mask.
|
||||||
|
|
||||||
|
- Addition: Volume Column effects, Ax, Bx, Cx, Dx, Ex, Fx, Gx and Hx!!!!
|
||||||
|
|
||||||
|
Ax = Fine volume slide up by x
|
||||||
|
Bx = Fine volume slide down by x
|
||||||
|
Cx = Volume slide up by x
|
||||||
|
Dx = Volume slide down by x
|
||||||
|
Ex = Pitch slide down by x
|
||||||
|
Fx = Pitch slide up by x
|
||||||
|
Gx = Portamento to note with speed x
|
||||||
|
Hx = Vibrato with depth x
|
||||||
|
|
||||||
|
Note that the pitch/portamento scale here is DIFFERENT from the standard
|
||||||
|
effect slideup/down
|
||||||
|
|
||||||
|
* Note that if you use these in your songs, IT < 2.08 will NOT play them
|
||||||
|
* correctly... (in fact, it'll probably play it extremely painfully)
|
||||||
|
|
||||||
|
- Alt Up/Down/Ins/Del added to the note translation table.
|
||||||
|
|
||||||
|
- Minor modifications around the tracker
|
||||||
|
|
||||||
|
- Windows Sound System Driver! (Operates at mixing rates up to 64kHz!)
|
||||||
|
Impulse Tracker has the greatest soundcard support of any tracker by far!
|
||||||
|
|
||||||
|
- Old Effects will 'unlink' the memory of Gxx from Exx/Fxx
|
||||||
|
|
||||||
|
- XM LOADING!!!!!!!!!!
|
||||||
|
|
||||||
|
Don't write to me complaining about incompatibilities - I am aware of
|
||||||
|
lots of them and you probably won't get a reply. :) *MOST* songs should
|
||||||
|
have a near perfect conversion tho...
|
||||||
|
|
||||||
|
- Big safety feature!! Playback dying because of overload? Bad NNA selection?
|
||||||
|
F8 *should* stop playback immediately now! (in DOS).
|
||||||
|
|
||||||
|
In Windows '95, there may be a noticeable stall before playback stops
|
||||||
|
(ie. several seconds), or it may not function at all...
|
||||||
|
|
||||||
|
IT207 update
|
||||||
|
|
||||||
|
- Some bug fixes to MIDI input.
|
||||||
|
- Ctrl-PgUp/PgDn on the sample list will redraw the waveforms
|
||||||
|
- Jxx memory should work fine (The memory didn't operate if the channel
|
||||||
|
wasn't active before)
|
||||||
|
- Template limits should be correctly applied. (ie. clipped within
|
||||||
|
C-0 and B-9)
|
||||||
|
- Going to a pattern from the Info Page ('G') will also go to the
|
||||||
|
current order playing.
|
||||||
|
- MIDI input can be enabled/disabled in the pattern editor with
|
||||||
|
Alt-Scroll Lock
|
||||||
|
- MOD in-module sample library loop points fixed.
|
||||||
|
- Envelope drawing algorithm slightly more tolerant of corrupt information
|
||||||
|
- Mouse envelope routines slightly improved for more accurate handling of
|
||||||
|
nodes.
|
||||||
|
- Added Message editor to main menu.
|
||||||
|
- Added 10 channel view to the info page (you may need to reset your info-
|
||||||
|
page settings and "save your preferences")
|
||||||
|
- Squished up the info page view to get a couple of extra lines! :)
|
||||||
|
- Ctrl-F7 on the order list will set the next pattern to play (at request
|
||||||
|
of ChuckB) - for DJ use
|
||||||
|
- Due to Win95's unstable disk-EMS routines, if you load a MMTSRed sample,
|
||||||
|
instrument or module (sample library), playback *will* stop to prevent
|
||||||
|
corruption of samples currently in memory.
|
||||||
|
- Notes in templates of height 1 will be played back in the pattern editor
|
||||||
|
(very useful for "multi sample" note entry)
|
||||||
|
- Added effects T0x and T1x for Tempo slide down and tempo slide up.
|
||||||
|
- Added .IT and .XM *INSTRUMENT* library support. Note that .ITs that
|
||||||
|
aren't in instrument mode or have no instruments will NOT be shown on
|
||||||
|
the instrument loader list.
|
||||||
|
- Added Alt-Ins and Alt-Del on the sample and instrument lists to add
|
||||||
|
in samples/instruments
|
||||||
|
|
||||||
|
**** NOTE: /Sx command line parameters have been changed around just for
|
||||||
|
neatness. CHECK SUMMARY.TXT FOR NEW /Sx VALUES OR RUN "IT /?" ***
|
||||||
|
|
||||||
|
IT 2.06
|
||||||
|
|
||||||
|
- Update: Yet another update to the EMS routines.. for those of you who
|
||||||
|
couldn't be bothered to read the FAQ.
|
||||||
|
|
||||||
|
Also new command line switch:
|
||||||
|
/Px - Set pattern memory allocation strategy.
|
||||||
|
Check SUMMARY.TXT for info on this.
|
||||||
|
|
||||||
|
- Minor update: The 10-stage undo buffer will now use EMS memory under most
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
- Minor update: S3M and IT loader routines slightly modified for more
|
||||||
|
efficient memory usage.
|
||||||
|
|
||||||
|
- Minor update: "Song modified" flag logic slightly modified.
|
||||||
|
|
||||||
|
- Minor update: .WAV loader slightly improved. (should read any 8 or 16-bit
|
||||||
|
format.)
|
||||||
|
|
||||||
|
- Minor Addition: IT will now release time slices to multitasking OS/s
|
||||||
|
if you specify /T2 on the command line.
|
||||||
|
If you are using the MIDI input capabilities of IT, you
|
||||||
|
SHOULD NOT enable this (timing gets effected badly)
|
||||||
|
|
||||||
|
- Minor Addition: Set pattern length command on Ctrl-F2 (can set multiple
|
||||||
|
patterns)
|
||||||
|
|
||||||
|
- Minor Addition: Command line switch /T1 to disable "usage time" indication
|
||||||
|
|
||||||
|
- Addition: TX Wave loader for .W?? samples (eg. from Kosmic's sample dirs)
|
||||||
|
Note: These are actually 12-bit samples, which are converted to
|
||||||
|
16-bit at load time.
|
||||||
|
|
||||||
|
- Addition: .MOD sample library loader.
|
||||||
|
|
||||||
|
This "only" recognises the following MOD Identifications -
|
||||||
|
"M.K.", "M!K!", "FLT4", "FLT8", "4CHN", "6CHN", "8CHN"
|
||||||
|
And FT2's extended MOD identification, "xxCH"
|
||||||
|
|
||||||
|
If you have an "Old Amiga-MOD format" MOD (which doesn't have an
|
||||||
|
ID), then you'll have to save it as another format if you want
|
||||||
|
to rip directly from it.
|
||||||
|
|
||||||
|
So sample library support in total:
|
||||||
|
.MOD, .669, .FAR, .MTM, .S3M, .PTM, .XM, .IT
|
||||||
|
|
||||||
|
- Addition: Intelligent MIDI Input for SB16 and Interwave cards!
|
||||||
|
MIDI options screen is on Shift-F1 (those of you who have IT.CFG
|
||||||
|
from older versions of IT *WILL* need to visit this screen at
|
||||||
|
least once if you want to use MIDI - "Save All Preferences" will
|
||||||
|
save these settings)
|
||||||
|
|
||||||
|
In the pattern editor, Ctrl-Z is "Change MIDI playback trigger."
|
||||||
|
Normally, it is quite difficult to start at a row/pattern with
|
||||||
|
MIDI - this options allow you to control whether a pattern or
|
||||||
|
song should START playing when you play the first note.
|
||||||
|
|
||||||
|
(IT will play either from the start of the current pattern or
|
||||||
|
the song starting from the current row depending on your choice)
|
||||||
|
Once this is done, the trigger is immediately unset, so you will
|
||||||
|
have to setup this trigger again if you want to use it.
|
||||||
|
|
||||||
|
Note that this *will* turn on pattern tracing. To disable it,
|
||||||
|
use Scroll-Lock.
|
||||||
|
|
||||||
|
****** NOTE ******
|
||||||
|
|
||||||
|
SB16's MIDI input is somewhat 'iffy'. If you stop receiving
|
||||||
|
MIDI input, you need to reinit the soundcard (Ctrl-I) (possibly
|
||||||
|
several times). I don't know why it does this. Dont' write
|
||||||
|
to me about it, 'cos I have spent MANY MANY hours on this little
|
||||||
|
problem and I don't want to know about it. Also, in Win95, I
|
||||||
|
found it necessary to change my SB16's configuration to EXCLUDE
|
||||||
|
the MIDI port (and I used a Microsoft MPU401 driver instead),
|
||||||
|
otherwise MIDI input was ignored.
|
||||||
|
|
||||||
|
Sorry, no GUS MIDI at the moment, as I couldn't get it working.
|
||||||
|
Please do NOT write to me about this, you will not get a reply.
|
||||||
|
An updated GUS driver will be released if/when I get it working.
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
TRACEENABLED EQU 0
|
||||||
|
|
||||||
|
TUTORIAL = 0
|
||||||
|
|
||||||
|
EMSUSE41 = 0
|
||||||
|
|
||||||
|
SHOWVERSION = 0
|
||||||
|
SHOWREGISTERNAME = 1
|
||||||
|
|
||||||
|
USE32BITSCREENCOPY = 0
|
||||||
|
|
||||||
|
SORTENABLED = 1
|
||||||
|
DDCOMPRESS = 1
|
||||||
|
ORDERSORT = 1
|
||||||
|
FILTERENVELOPES = 1
|
||||||
|
CHORDENTRY = 1
|
||||||
|
SPECTRUMANALYSER = 1
|
||||||
|
SAVESAMPLEWAV = 1
|
||||||
|
ENABLEPRESETENVELOPES = 1
|
||||||
|
ENABLESOLO = 1
|
||||||
|
|
||||||
|
DEFAULTFORMAT = 3 ; 0 = IT214, 1 = S3M, 2 = IT2xx, 3 = IT215
|
||||||
|
|
||||||
|
USEFPUCODE = 1 ; For IT_MUSIC, this will change from LUT to FPU code
|
||||||
|
|
||||||
|
OLDDRIVER = 0
|
||||||
|
|
||||||
|
MUSICDEBUG = 0
|
||||||
|
EMSDEBUG = 0
|
||||||
|
MEMORYDEBUG = 0
|
||||||
|
ENABLEINT3 = 0 ; For debugging.
|
||||||
|
|
||||||
|
TIMERSCREEN = 1
|
||||||
|
|
||||||
|
NETWORKENABLED = 1
|
||||||
|
SHOWPATTERNLENGTH = 0
|
||||||
|
|
||||||
|
IF TUTORIAL
|
||||||
|
SORTENABLED = 1
|
||||||
|
DDCOMPRESS = 1
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
TRACKERVERSION = 217h ; Still have to change text in IT.ASM, IT_F.ASM
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,56 @@
|
||||||
|
|
||||||
|
; 8-bit interpolated mixing routine, 4 samples at a time. Rearranged
|
||||||
|
; MM7 contains volume as packed floating point
|
||||||
|
; MM6 contains offset as packed integer offset
|
||||||
|
; MM5 = DeltaOffset
|
||||||
|
|
||||||
|
; MM7 = RVol|LVol
|
||||||
|
; MM6 = (1-Offset2)|Offset2|(1-Offset1)|Offset1
|
||||||
|
|
||||||
|
MovD MM0, [SampleBlock1] ; MM0 = x|x|x|x|S2H|S2L|S1H|S1L
|
||||||
|
MovQ MM2, MM6
|
||||||
|
|
||||||
|
PSRAW MM2, 1
|
||||||
|
PUnpckLBW MM0, MM0 ; MM0 = S2H|S2L|S1H|S1L
|
||||||
|
|
||||||
|
PAddW MM6, MM5
|
||||||
|
PMAddWD MM0, MM2 ; MM0 = IS2|IS1
|
||||||
|
|
||||||
|
MovD MM1, [SampleBlock2] ; MM1 = x|x|x|x|S4H|S4L|S3H|S3L
|
||||||
|
MovQ MM2, MM6
|
||||||
|
|
||||||
|
PUnpckLBW MM1, MM1 ; MM1 = S4H|S4L|S3H|S3L
|
||||||
|
PSRAW MM2, 1
|
||||||
|
|
||||||
|
PI2FD MM0, MM0 ; MM0 = FIS2|FIS1
|
||||||
|
PMAddWD MM1, MM2 ; MM1 = IS4|IS3
|
||||||
|
|
||||||
|
MovQ MM2, MM0
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FIS1|FIS1
|
||||||
|
|
||||||
|
PUnpckHDQ MM2, MM2 ; MM2 = FIS2|FIS2
|
||||||
|
PI2FD MM1, MM1 ; MM1 = FIS4|FIS3
|
||||||
|
|
||||||
|
PFMul MM0, MM7 ; MM0 = R1|L1
|
||||||
|
PAddW MM6, MM5
|
||||||
|
|
||||||
|
PFMul MM2, MM7 ; MM2 = R2|L2
|
||||||
|
MovQ MM3, MM1
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer1]
|
||||||
|
PUnpckLDQ MM1, MM1 ; MM1 = FIS3|FIS3
|
||||||
|
|
||||||
|
PFAdd MM2, [Buffer2]
|
||||||
|
PUnpckHDQ MM3, MM3 ; MM3 = FIS4|FIS4
|
||||||
|
|
||||||
|
PFMul MM1, MM7
|
||||||
|
MovQ [Buffer1], MM0
|
||||||
|
|
||||||
|
PFMul MM3, MM7
|
||||||
|
PFAdd MM1, [Buffer3]
|
||||||
|
|
||||||
|
MovQ [Buffer2], MM2
|
||||||
|
PFAdd MM3, [Buffer4]
|
||||||
|
|
||||||
|
MovQ [Buffer3], MM1
|
||||||
|
MovQ [Buffer4], MM3
|
|
@ -0,0 +1,304 @@
|
||||||
|
|
||||||
|
; 8-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
|
||||||
|
|
||||||
|
; MM7 contains volume as packed floating point MM7 = RVol|LVol
|
||||||
|
|
||||||
|
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
|
||||||
|
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
|
||||||
|
|
||||||
|
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
|
||||||
|
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
|
||||||
|
|
||||||
|
MovQ MM2, MM0
|
||||||
|
MovQ MM3, MM1
|
||||||
|
|
||||||
|
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
|
||||||
|
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
|
||||||
|
|
||||||
|
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
|
||||||
|
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
|
||||||
|
|
||||||
|
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
|
||||||
|
; only one resource shared between pipes?)
|
||||||
|
|
||||||
|
PI2FD MM0, MM0 ; MM0 = FS2|FS1
|
||||||
|
PI2FD MM1, MM1 ; MM1 = FS6|FS5
|
||||||
|
PI2FD MM2, MM2 ; MM2 = FS4|FS3
|
||||||
|
PI2FD MM3, MM3 ; MM3 = FS8|FS7
|
||||||
|
|
||||||
|
MovQ MM4, MM0
|
||||||
|
MovQ MM5, MM2
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
|
||||||
|
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
|
||||||
|
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
|
||||||
|
|
||||||
|
PFMul MM0, MM7 ; MM0 = R1|L1
|
||||||
|
PFMul MM4, MM7 ; MM4 = R2|L2
|
||||||
|
PFMul MM2, MM7 ; MM2 = R3|L3
|
||||||
|
PFMul MM5, MM7 ; MM5 = R4|L4
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer1]
|
||||||
|
PFAdd MM4, [Buffer2]
|
||||||
|
PFAdd MM2, [Buffer3]
|
||||||
|
PFAdd MM5, [Buffer4]
|
||||||
|
|
||||||
|
MovQ [Buffer1], MM0
|
||||||
|
MovQ [Buffer2], MM4
|
||||||
|
MovQ [Buffer3], MM2
|
||||||
|
MovQ [Buffer4], MM5
|
||||||
|
|
||||||
|
MovQ MM0, MM1
|
||||||
|
MovQ MM2, MM3
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
|
||||||
|
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
|
||||||
|
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
|
||||||
|
|
||||||
|
PFMul MM0, MM7
|
||||||
|
PFMul MM1, MM7
|
||||||
|
PFMul MM2, MM7
|
||||||
|
PFMul MM3, MM7
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer5]
|
||||||
|
PFAdd MM1, [Buffer6]
|
||||||
|
PFAdd MM2, [Buffer7]
|
||||||
|
PFAdd MM3, [Buffer8]
|
||||||
|
|
||||||
|
MovQ [Buffer5], MM0
|
||||||
|
MovQ [Buffer6], MM1
|
||||||
|
MovQ [Buffer7], MM2
|
||||||
|
MovQ [Buffer8], MM3
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; Rearranged to improve pairing
|
||||||
|
; MM7 contains volume as packed floating point MM7 = RVol|LVol
|
||||||
|
|
||||||
|
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
|
||||||
|
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
|
||||||
|
|
||||||
|
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
|
||||||
|
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
|
||||||
|
|
||||||
|
MovQ MM2, MM0
|
||||||
|
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
|
||||||
|
|
||||||
|
MovQ MM3, MM1
|
||||||
|
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
|
||||||
|
|
||||||
|
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
|
||||||
|
PI2FD MM0, MM0 ; MM0 = FS2|FS1
|
||||||
|
|
||||||
|
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
|
||||||
|
PI2FD MM1, MM1 ; MM1 = FS6|FS5
|
||||||
|
|
||||||
|
MovQ MM4, MM0
|
||||||
|
PI2FD MM2, MM2 ; MM2 = FS4|FS3
|
||||||
|
|
||||||
|
MovQ MM5, MM2
|
||||||
|
PI2FD MM3, MM3 ; MM3 = FS8|FS7
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
|
||||||
|
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
|
||||||
|
|
||||||
|
PFMul MM0, MM7 ; MM0 = R1|L1
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
|
||||||
|
|
||||||
|
PFMul MM4, MM7 ; MM4 = R2|L2
|
||||||
|
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
|
||||||
|
|
||||||
|
PFMul MM2, MM7 ; MM2 = R3|L3
|
||||||
|
PFAdd MM0, [Buffer1]
|
||||||
|
|
||||||
|
PFMul MM5, MM7 ; MM5 = R4|L4
|
||||||
|
PFAdd MM4, [Buffer2]
|
||||||
|
|
||||||
|
PFAdd MM2, [Buffer3]
|
||||||
|
MovQ [Buffer1], MM0
|
||||||
|
|
||||||
|
MovQ [Buffer2], MM4
|
||||||
|
PFAdd MM5, [Buffer4]
|
||||||
|
|
||||||
|
MovQ [Buffer3], MM2
|
||||||
|
MovQ MM0, MM1
|
||||||
|
|
||||||
|
MovQ [Buffer4], MM5
|
||||||
|
MovQ MM2, MM3
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
|
||||||
|
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
|
||||||
|
|
||||||
|
PFMul MM0, MM7
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
|
||||||
|
|
||||||
|
PFMul MM1, MM7
|
||||||
|
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer5]
|
||||||
|
PFMul MM2, MM7
|
||||||
|
|
||||||
|
PFAdd MM1, [Buffer6]
|
||||||
|
PFMul MM3, MM7
|
||||||
|
|
||||||
|
MovQ [Buffer5], MM0
|
||||||
|
PFAdd MM2, [Buffer7]
|
||||||
|
|
||||||
|
MovQ [Buffer6], MM1
|
||||||
|
PFAdd MM3, [Buffer8]
|
||||||
|
|
||||||
|
MovQ [Buffer7], MM2 ; These will be rearranged to match
|
||||||
|
MovQ [Buffer8], MM3 ; the next iteration.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; 16-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
|
||||||
|
|
||||||
|
; MM7 contains volume as packed floating point MM7 = RVol|LVol
|
||||||
|
|
||||||
|
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
|
||||||
|
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
|
||||||
|
|
||||||
|
MovQ MM2, MM0
|
||||||
|
MovQ MM3, MM1
|
||||||
|
|
||||||
|
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
|
||||||
|
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
|
||||||
|
|
||||||
|
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
|
||||||
|
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
|
||||||
|
|
||||||
|
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
|
||||||
|
; only one resource shared between pipes?)
|
||||||
|
|
||||||
|
PI2FD MM0, MM0 ; MM0 = FS2|FS1
|
||||||
|
PI2FD MM1, MM1 ; MM1 = FS6|FS5
|
||||||
|
PI2FD MM2, MM2 ; MM2 = FS4|FS3
|
||||||
|
PI2FD MM3, MM3 ; MM3 = FS8|FS7
|
||||||
|
|
||||||
|
MovQ MM4, MM0
|
||||||
|
MovQ MM5, MM2
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
|
||||||
|
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
|
||||||
|
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
|
||||||
|
|
||||||
|
PFMul MM0, MM7 ; MM0 = R1|L1
|
||||||
|
PFMul MM4, MM7 ; MM4 = R2|L2
|
||||||
|
PFMul MM2, MM7 ; MM2 = R3|L3
|
||||||
|
PFMul MM5, MM7 ; MM5 = R4|L4
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer1]
|
||||||
|
PFAdd MM4, [Buffer2]
|
||||||
|
PFAdd MM2, [Buffer3]
|
||||||
|
PFAdd MM5, [Buffer4]
|
||||||
|
|
||||||
|
MovQ [Buffer1], MM0
|
||||||
|
MovQ [Buffer2], MM4
|
||||||
|
MovQ [Buffer3], MM2
|
||||||
|
MovQ [Buffer4], MM5
|
||||||
|
|
||||||
|
MovQ MM0, MM1
|
||||||
|
MovQ MM2, MM3
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
|
||||||
|
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
|
||||||
|
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
|
||||||
|
|
||||||
|
PFMul MM0, MM7
|
||||||
|
PFMul MM1, MM7
|
||||||
|
PFMul MM2, MM7
|
||||||
|
PFMul MM3, MM7
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer5]
|
||||||
|
PFAdd MM1, [Buffer6]
|
||||||
|
PFAdd MM2, [Buffer7]
|
||||||
|
PFAdd MM3, [Buffer8]
|
||||||
|
|
||||||
|
MovQ [Buffer5], MM0
|
||||||
|
MovQ [Buffer6], MM1
|
||||||
|
MovQ [Buffer7], MM2
|
||||||
|
MovQ [Buffer8], MM3
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; Rearranged to improve pairing
|
||||||
|
; MM7 contains volume as packed floating point MM7 = RVol|LVol
|
||||||
|
|
||||||
|
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
|
||||||
|
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
|
||||||
|
|
||||||
|
MovQ MM2, MM0
|
||||||
|
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
|
||||||
|
|
||||||
|
MovQ MM3, MM1
|
||||||
|
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
|
||||||
|
|
||||||
|
PI2FD MM0, MM0 ; MM0 = FS2|FS1
|
||||||
|
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
|
||||||
|
|
||||||
|
PI2FD MM1, MM1 ; MM1 = FS6|FS5
|
||||||
|
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
|
||||||
|
|
||||||
|
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
|
||||||
|
; only one resource shared between pipes?)
|
||||||
|
|
||||||
|
MovQ MM4, MM0
|
||||||
|
PI2FD MM2, MM2 ; MM2 = FS4|FS3
|
||||||
|
|
||||||
|
MovQ MM5, MM2
|
||||||
|
PI2FD MM3, MM3 ; MM3 = FS8|FS7
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
|
||||||
|
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
|
||||||
|
|
||||||
|
PFMul MM0, MM7 ; MM0 = R1|L1
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
|
||||||
|
|
||||||
|
PFMul MM4, MM7 ; MM4 = R2|L2
|
||||||
|
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer1]
|
||||||
|
PFMul MM2, MM7 ; MM2 = R3|L3
|
||||||
|
|
||||||
|
PFAdd MM4, [Buffer2]
|
||||||
|
PFMul MM5, MM7 ; MM5 = R4|L4
|
||||||
|
|
||||||
|
PFAdd MM2, [Buffer3]
|
||||||
|
MovQ [Buffer1], MM0
|
||||||
|
|
||||||
|
PFAdd MM5, [Buffer4]
|
||||||
|
MovQ [Buffer2], MM4
|
||||||
|
|
||||||
|
MovQ MM0, MM1
|
||||||
|
MovQ [Buffer3], MM2
|
||||||
|
|
||||||
|
MovQ MM2, MM3
|
||||||
|
MovQ [Buffer4], MM5
|
||||||
|
|
||||||
|
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
|
||||||
|
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
|
||||||
|
|
||||||
|
PFMul MM0, MM7
|
||||||
|
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
|
||||||
|
|
||||||
|
PFMul MM1, MM7
|
||||||
|
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
|
||||||
|
|
||||||
|
PFAdd MM0, [Buffer5]
|
||||||
|
PFMul MM2, MM7
|
||||||
|
|
||||||
|
PFAdd MM1, [Buffer6]
|
||||||
|
PFMul MM3, MM7
|
||||||
|
|
||||||
|
MovQ [Buffer5], MM0
|
||||||
|
PFAdd MM2, [Buffer7]
|
||||||
|
|
||||||
|
MovQ [Buffer6], MM1
|
||||||
|
PFAdd MM3, [Buffer8]
|
||||||
|
|
||||||
|
MovQ [Buffer7], MM2
|
||||||
|
MovQ [Buffer8], MM3
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,101 @@
|
||||||
|
;
|
||||||
|
; Debug macro. To write to the file, use "Trace <logmessage>"
|
||||||
|
;
|
||||||
|
|
||||||
|
IF TRACEENABLED
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
FirstTime DB 0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
LogFileName DB "Logfile.Txt", 0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc WriteDebugFile
|
||||||
|
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
|
||||||
|
Mov DX, Offset LogFileName
|
||||||
|
|
||||||
|
IF CREATENEWLOGFILE
|
||||||
|
|
||||||
|
Cmp DS:FirstTime, 0
|
||||||
|
JNE WriteDebugFile1
|
||||||
|
|
||||||
|
Mov AH, 3Ch
|
||||||
|
Xor CX, CX
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
Mov DS:FirstTime, 1
|
||||||
|
XChg AX, BX
|
||||||
|
Jmp WriteDebugFile2
|
||||||
|
|
||||||
|
WriteDebugFile1:
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
Mov AX, 3D02h
|
||||||
|
Int 21h
|
||||||
|
JC WriteDebugFileEnd
|
||||||
|
|
||||||
|
XChg AX, BX
|
||||||
|
|
||||||
|
Mov AX, 4202h
|
||||||
|
Xor CX, CX
|
||||||
|
Xor DX, DX
|
||||||
|
Int 21h ; Move to end of file
|
||||||
|
|
||||||
|
WriteDebugFile2:
|
||||||
|
Mov AH, 40h
|
||||||
|
Mov CX, 82
|
||||||
|
Mov DX, SI
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
Mov AH, 3Eh
|
||||||
|
Int 21h
|
||||||
|
|
||||||
|
WriteDebugFileEnd:
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP WriteDebugFile
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
Local X, Y
|
||||||
|
|
||||||
|
PushF
|
||||||
|
Push SI
|
||||||
|
Jmp Y
|
||||||
|
X:
|
||||||
|
DB LogMessage
|
||||||
|
DB 80-($-Offset X) Dup (0)
|
||||||
|
DB 0Dh, 0Ah
|
||||||
|
Y:
|
||||||
|
Mov SI, Offset X
|
||||||
|
Call WriteDebugFile
|
||||||
|
Pop SI
|
||||||
|
PopF
|
||||||
|
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Trace Macro LogMessage
|
||||||
|
EndM
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
|
||||||
|
DMAData Label Byte
|
||||||
|
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
|
||||||
|
DB 0Ah, 4, 0Ch, 0, 0Bh, 58h, 87h, 0, 1, 0Ah, 0
|
||||||
|
DB 0Ah, 5, 0Ch, 0, 0Bh, 59h, 83h, 2, 3, 0Ah, 1
|
||||||
|
DB 0Ah, 6, 0Ch, 0, 0Bh, 5Ah, 81h, 4, 5, 0Ah, 2
|
||||||
|
DB 0Ah, 7, 0Ch, 0, 0Bh, 5Bh, 82h, 6, 7, 0Ah, 3
|
||||||
|
DB 0D4h, 4, 0D8h, 0, 0D6h, 58h, 8Fh, 0C0h, 0C2h, 0D4h, 0
|
||||||
|
DB 0D4h, 5, 0D8h, 0, 0D6h, 59h, 8Bh, 0C4h, 0C6h, 0D4h, 1
|
||||||
|
DB 0D4h, 6, 0D8h, 0, 0D6h, 5Ah, 89h, 0C8h, 0CAh, 0D4h, 2
|
||||||
|
DB 0D4h, 7, 0D8h, 0, 0D6h, 5Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
|
||||||
|
|
||||||
|
ActualDMAPtr Label DWord
|
||||||
|
ActualDMAOffset DW 0
|
||||||
|
ActualDMASegment DW 0
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
||||||
|
Proc SetDMA ; BX:AX points to DMA buffer
|
||||||
|
; DL = DMA Channel
|
||||||
|
; DI = DMA Size
|
||||||
|
PushA
|
||||||
|
Push DS
|
||||||
|
|
||||||
|
Push CS
|
||||||
|
Pop DS
|
||||||
|
Assume DS:Driver
|
||||||
|
|
||||||
|
Mov ActualDMASegment, BX
|
||||||
|
Mov ActualDMAOffset, AX
|
||||||
|
|
||||||
|
Mov CH, BH
|
||||||
|
ShR CH, 4
|
||||||
|
ShL BX, 4
|
||||||
|
Add BX, AX
|
||||||
|
AdC CH, 0
|
||||||
|
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
|
||||||
|
Neg SI
|
||||||
|
Cmp SI, DI
|
||||||
|
JA SetDMA1
|
||||||
|
|
||||||
|
Add ActualDMAOffset, SI
|
||||||
|
Add BX, SI
|
||||||
|
AdC CH, 0
|
||||||
|
|
||||||
|
SetDMA1:
|
||||||
|
Cmp DL, 3
|
||||||
|
JBE SetDMA2
|
||||||
|
|
||||||
|
ShR DI, 1
|
||||||
|
Push CX
|
||||||
|
ShR CH, 1
|
||||||
|
Pop CX
|
||||||
|
RCR BX, 1
|
||||||
|
|
||||||
|
SetDMA2:
|
||||||
|
Mov AL, 11
|
||||||
|
Mul DL
|
||||||
|
Mov SI, AX
|
||||||
|
Add SI, Offset DMAData
|
||||||
|
|
||||||
|
Xor DX, DX
|
||||||
|
|
||||||
|
LodsB ; Set mask
|
||||||
|
Mov DL, AL
|
||||||
|
LodsB
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB ; Clear Ptrs
|
||||||
|
Mov DL, AL
|
||||||
|
LodsB
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB ; Set Mode
|
||||||
|
Mov DL, AL
|
||||||
|
LodsB
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB
|
||||||
|
Mov DL, AL ; DL = page port
|
||||||
|
Mov AL, CH
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB
|
||||||
|
Mov DL, AL ; DL = address port
|
||||||
|
Mov AL, BL
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, BH
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB
|
||||||
|
Mov DL, AL ; DL = count port
|
||||||
|
Mov AX, DI
|
||||||
|
Dec AX
|
||||||
|
Out DX, AL
|
||||||
|
Mov AL, AH
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
LodsB ; Reset mask
|
||||||
|
Mov DL, AL
|
||||||
|
LodsB
|
||||||
|
Out DX, AL
|
||||||
|
|
||||||
|
Pop DS
|
||||||
|
PopA
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndP SetDMA
|
||||||
|
Assume DS:Nothing
|
||||||
|
|
||||||
|
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue