Initial commit. Import of documentation, keyboard, network and VSound code.
Other code still needs cleaning up a bit before importing
This commit is contained in:
commit
d9384e6207
|
@ -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,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)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# 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`
|
|
@ -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.
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,511 @@
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <conio.h>
|
||||||
|
#include <dsound.h>
|
||||||
|
#include <process.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
Registry keys:
|
||||||
|
BufferSize : in kb. maximum of 64
|
||||||
|
BufferThreshold : in kb. maximum of 32
|
||||||
|
BufferType : 0->2 for DualBuffer,QuadBuffer,OctBuffer
|
||||||
|
MixSpeed : in Hz, maximum of 48000.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Registry values.
|
||||||
|
static int BufferSize = 24;
|
||||||
|
static int BufferThreshold = 21;
|
||||||
|
static int BufferType = 2;
|
||||||
|
static int MixSpeed = 44100;
|
||||||
|
|
||||||
|
// Registry Key stuff.
|
||||||
|
const char *RegistryKey = "Software\\Jeffrey Lim\\Impulse Tracker VSound Server";
|
||||||
|
const char *RegistryKeyBufferSize = "BufferSize";
|
||||||
|
const char *RegistryKeyBufferThreshold = "BufferThreshold";
|
||||||
|
const char *RegistryKeyBufferType = "BufferType";
|
||||||
|
const char *RegistryKeyMixSpeed = "MixSpeed";
|
||||||
|
|
||||||
|
// Other stuff.
|
||||||
|
const static LPCTSTR lpszAppName = "VSound Server";
|
||||||
|
const static LPCTSTR lpszTitleBar = "Impulse Tracker VSound Server";
|
||||||
|
static HRESULT hr;
|
||||||
|
|
||||||
|
static void *BufferUpdateThreadHandle;
|
||||||
|
static int BufferUpdateThreadID;
|
||||||
|
|
||||||
|
static int Quitting = 0;
|
||||||
|
|
||||||
|
static HANDLE NotifyEventHandle;
|
||||||
|
static LPDIRECTSOUND lpDS;
|
||||||
|
static LPDIRECTSOUNDBUFFER lpPDSB, lpSDSB;
|
||||||
|
static PCMWAVEFORMAT pcmwf =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
WAVE_FORMAT_PCM,
|
||||||
|
2,
|
||||||
|
44100,
|
||||||
|
4*44100,
|
||||||
|
4
|
||||||
|
},
|
||||||
|
16
|
||||||
|
};
|
||||||
|
|
||||||
|
HINSTANCE g_hInst;
|
||||||
|
HWND g_hWnd;
|
||||||
|
|
||||||
|
char TextBuffer[80];
|
||||||
|
|
||||||
|
static short int ServerPort = 0x401;
|
||||||
|
static short int DataPort = 0x402;
|
||||||
|
|
||||||
|
static int SoundBufferSize;
|
||||||
|
static int SoundBufferBlockSize;
|
||||||
|
static int SoundBufferBlockMask;
|
||||||
|
|
||||||
|
char *BufferTypes[] =
|
||||||
|
{
|
||||||
|
"DualBuffer",
|
||||||
|
"QuadBuffer",
|
||||||
|
"OctBuffer"
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *ServerID = "ITSERVER";
|
||||||
|
const char *NoServer =
|
||||||
|
"Unable to find VSound.VxD\n" \
|
||||||
|
"\n" \
|
||||||
|
"Please read the documentation on how to setup VSound.VxD";
|
||||||
|
|
||||||
|
const char *ServerActive =
|
||||||
|
"VSound server is active.\n" \
|
||||||
|
"\n"
|
||||||
|
"Please shut down Impulse Tracker first";
|
||||||
|
|
||||||
|
void __cdecl trace(char *Message, ...)
|
||||||
|
{
|
||||||
|
va_list argptr;
|
||||||
|
|
||||||
|
va_start(argptr, Message);
|
||||||
|
vsprintf(TextBuffer, Message, argptr);
|
||||||
|
|
||||||
|
PostMessage(g_hWnd, WM_PAINT, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VSound_Reset()
|
||||||
|
{
|
||||||
|
_outp(ServerPort, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VSound_Identify()
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
char ServerString[60];
|
||||||
|
short int TempValues[2];
|
||||||
|
char *BufferInfo = (char*) (&TempValues);
|
||||||
|
|
||||||
|
sprintf(ServerString, "DirectSound VSoundServer 1.0, %dkb %s", BufferSize, BufferTypes[BufferType]);
|
||||||
|
|
||||||
|
j = strlen(ServerString);
|
||||||
|
for(i = 0; i < 8; i++) _outp(ServerPort, ServerID[i]);
|
||||||
|
for(i = 0; i < j; i++) _outp(ServerPort, ServerString[i]);
|
||||||
|
for( ; i < 60; i++) _outp(ServerPort, ' ');
|
||||||
|
|
||||||
|
TempValues[0] = BufferThreshold * 1024;
|
||||||
|
TempValues[1] = MixSpeed;
|
||||||
|
for(i = 0; i < 4; i++) _outp(ServerPort, BufferInfo[i] ^ 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int VSound_Detect()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char Buffer[8];
|
||||||
|
|
||||||
|
for(i = 0; i < 8; i++) Buffer[i] = _inp(ServerPort);
|
||||||
|
return memcmp(ServerID, Buffer, sizeof(Buffer)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int VSound_Connected()
|
||||||
|
{
|
||||||
|
if(!Quitting) return _inp(ServerPort);
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Error(char *Message)
|
||||||
|
{
|
||||||
|
VSound_Reset();
|
||||||
|
MessageBox(g_hWnd, Message, "VSound Server Error!", MB_OK);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CheckHResult(char *Message)
|
||||||
|
{
|
||||||
|
if(hr) Error(Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD WINAPI BufferUpdateThread(void *Parameter)
|
||||||
|
{
|
||||||
|
int UpdatePosition = 0;
|
||||||
|
int PlayPosition;
|
||||||
|
int Len1, Len2;
|
||||||
|
void *Buf1, *Buf2;
|
||||||
|
int LastBlock;
|
||||||
|
int Active = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
hr = SetThreadPriority(BufferUpdateThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);
|
||||||
|
if(!hr)
|
||||||
|
{
|
||||||
|
trace("Error code: %d", GetLastError());
|
||||||
|
Error("SetThreadPriority failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = SetPriorityClass((HANDLE) BufferUpdateThreadID, REALTIME_PRIORITY_CLASS);
|
||||||
|
if(!hr) {
|
||||||
|
trace("Error code: %d", GetLastError());
|
||||||
|
Error("SetPriorityClass failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
int CurrentBlock;
|
||||||
|
int NumberOfBlocks;
|
||||||
|
|
||||||
|
WaitForMultipleObjects(1, // count of object handle array
|
||||||
|
&NotifyEventHandle, // Handle of event created to signal buffer position updates
|
||||||
|
FALSE, // return if at least one event is signalled
|
||||||
|
INFINITE);
|
||||||
|
|
||||||
|
hr = lpSDSB->lpVtbl->GetCurrentPosition(lpSDSB, &PlayPosition, NULL);
|
||||||
|
CheckHResult("GetCurrentPosition failed");
|
||||||
|
|
||||||
|
CurrentBlock = PlayPosition / SoundBufferBlockSize;
|
||||||
|
NumberOfBlocks = (CurrentBlock - LastBlock) & SoundBufferBlockMask;
|
||||||
|
if(NumberOfBlocks == 0) continue;
|
||||||
|
|
||||||
|
hr = lpSDSB->lpVtbl->Lock(lpSDSB, UpdatePosition, NumberOfBlocks*SoundBufferBlockSize, &Buf1, &Len1, &Buf2, &Len2, 0);
|
||||||
|
CheckHResult("Lock failed");
|
||||||
|
|
||||||
|
if(VSound_Connected() != Active)
|
||||||
|
{
|
||||||
|
Active = ~Active;
|
||||||
|
if(Active)
|
||||||
|
trace("Server active");
|
||||||
|
else
|
||||||
|
trace("Server ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update buffer here.
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
Push EDI
|
||||||
|
Mov DX, [DataPort]
|
||||||
|
|
||||||
|
Mov EDI, [Buf1]
|
||||||
|
Mov ECX, [Len1]
|
||||||
|
Rep InsB
|
||||||
|
|
||||||
|
Mov EDI, [Buf2]
|
||||||
|
Mov ECX, [Len2]
|
||||||
|
Rep InsB
|
||||||
|
|
||||||
|
Pop EDI
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = lpSDSB->lpVtbl->Unlock(lpSDSB, Buf1, Len1, Buf2, Len2);
|
||||||
|
CheckHResult("Unlock failed");
|
||||||
|
|
||||||
|
LastBlock = CurrentBlock;
|
||||||
|
UpdatePosition = LastBlock*SoundBufferBlockSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VSound_InitDSound()
|
||||||
|
{
|
||||||
|
int i, NumberOfNotifications;
|
||||||
|
DSBUFFERDESC DSBDesc;
|
||||||
|
DSBPOSITIONNOTIFY DSBPositionNotify[8];
|
||||||
|
LPDIRECTSOUNDNOTIFY lpDSNotify;
|
||||||
|
int Len1, Len2;
|
||||||
|
char *Buf1, *Buf2;
|
||||||
|
|
||||||
|
NumberOfNotifications = 2 << BufferType;
|
||||||
|
SoundBufferSize = BufferSize*1024;
|
||||||
|
SoundBufferBlockSize = SoundBufferSize / NumberOfNotifications;
|
||||||
|
SoundBufferBlockMask = NumberOfNotifications - 1;
|
||||||
|
|
||||||
|
trace("CreateEvemt");
|
||||||
|
NotifyEventHandle = CreateEvent(NULL, // Security attributes
|
||||||
|
FALSE, // Manual reset = FALSE
|
||||||
|
FALSE, // Signal initial state = FALSE
|
||||||
|
NULL); // Name
|
||||||
|
if(!NotifyEventHandle) Error("CreateEvent failed");
|
||||||
|
|
||||||
|
trace("DirectSoundCreate");
|
||||||
|
hr = DirectSoundCreate(NULL, &lpDS, NULL);
|
||||||
|
CheckHResult("DirectSoundCreate failed");
|
||||||
|
|
||||||
|
trace("SetCooperativeLevel");
|
||||||
|
hr = lpDS->lpVtbl->SetCooperativeLevel(lpDS, GetActiveWindow(), DSSCL_PRIORITY);
|
||||||
|
CheckHResult("SetCooperativeLevel failed");
|
||||||
|
|
||||||
|
trace("CreateSoundBuffer (Primary)");
|
||||||
|
memset(&DSBDesc, 0, sizeof(DSBUFFERDESC)); // Zero it out.
|
||||||
|
DSBDesc.dwSize = sizeof(DSBUFFERDESC);
|
||||||
|
DSBDesc.dwFlags = DSBCAPS_PRIMARYBUFFER;
|
||||||
|
DSBDesc.dwBufferBytes = 0;
|
||||||
|
DSBDesc.lpwfxFormat = NULL;
|
||||||
|
hr = lpDS->lpVtbl->CreateSoundBuffer(lpDS, &DSBDesc, &lpPDSB, NULL);
|
||||||
|
CheckHResult("CreateSoundBuffer (Primary) failed");
|
||||||
|
|
||||||
|
trace("SetFormat");
|
||||||
|
pcmwf.wf.nSamplesPerSec = MixSpeed;
|
||||||
|
pcmwf.wf.nAvgBytesPerSec = MixSpeed * 4;
|
||||||
|
hr = lpPDSB->lpVtbl->SetFormat(lpPDSB, (void*) &pcmwf);
|
||||||
|
CheckHResult("SetFormat failed");
|
||||||
|
|
||||||
|
memset(&DSBDesc, 0, sizeof(DSBUFFERDESC)); // Zero it out.
|
||||||
|
DSBDesc.dwSize = sizeof(DSBUFFERDESC);
|
||||||
|
DSBDesc.dwFlags = DSBCAPS_CTRLPOSITIONNOTIFY |
|
||||||
|
DSBCAPS_GETCURRENTPOSITION2 |
|
||||||
|
DSBCAPS_STICKYFOCUS |
|
||||||
|
DSBCAPS_LOCSOFTWARE;
|
||||||
|
DSBDesc.dwBufferBytes = SoundBufferSize;
|
||||||
|
DSBDesc.lpwfxFormat = (void*) &pcmwf;
|
||||||
|
trace("CreateSoundBuffer (Secondary)");
|
||||||
|
hr = lpDS->lpVtbl->CreateSoundBuffer(lpDS, &DSBDesc, &lpSDSB, NULL);
|
||||||
|
CheckHResult("CreateSoundBuffer (Secondary) failed");
|
||||||
|
|
||||||
|
trace("QueryInterface");
|
||||||
|
hr = lpSDSB->lpVtbl->QueryInterface(lpSDSB, &IID_IDirectSoundNotify, &lpDSNotify);
|
||||||
|
CheckHResult("Error obtaining DirectSoundNotify interface");
|
||||||
|
|
||||||
|
trace("SetNotificationPositions");
|
||||||
|
for(i = 0; i < NumberOfNotifications; i++)
|
||||||
|
{
|
||||||
|
DSBPositionNotify[i].dwOffset = i*SoundBufferBlockSize;
|
||||||
|
DSBPositionNotify[i].hEventNotify = NotifyEventHandle;
|
||||||
|
}
|
||||||
|
hr = lpDSNotify->lpVtbl->SetNotificationPositions(lpDSNotify, NumberOfNotifications, DSBPositionNotify);
|
||||||
|
CheckHResult("SetNotificationPositions failed");
|
||||||
|
|
||||||
|
trace("Lock (Clear)");
|
||||||
|
hr = lpSDSB->lpVtbl->Lock(lpSDSB, 0, 0, &Buf1, &Len1, &Buf2, &Len2, DSBLOCK_ENTIREBUFFER);
|
||||||
|
CheckHResult("Lock failed");
|
||||||
|
|
||||||
|
trace("Clearing buffer");
|
||||||
|
memset(Buf1, 0, Len1);
|
||||||
|
|
||||||
|
trace("Unlock (Clear)");
|
||||||
|
hr = lpSDSB->lpVtbl->Unlock(lpSDSB, Buf1, Len1, Buf2, Len2);
|
||||||
|
CheckHResult("Unlocked failed");
|
||||||
|
|
||||||
|
trace("Creating sound thread");
|
||||||
|
BufferUpdateThreadHandle = CreateThread(NULL, // Security atributes
|
||||||
|
0, // Stack size
|
||||||
|
BufferUpdateThread, // Pointer to thread starting function
|
||||||
|
0, // Parameter to new thread
|
||||||
|
0, // Creation flags
|
||||||
|
&BufferUpdateThreadID);
|
||||||
|
|
||||||
|
hr = SetThreadPriority(BufferUpdateThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);
|
||||||
|
if(!hr) Error("SetThreadPriority failed");
|
||||||
|
|
||||||
|
// Set process to realtime priority.
|
||||||
|
/*
|
||||||
|
hr = SetPriorityClass((DWORD) _getpid(), REALTIME_PRIORITY_CLASS);
|
||||||
|
if(!hr) Error("SetPriorityClass failed");
|
||||||
|
*/
|
||||||
|
trace("Play");
|
||||||
|
hr = lpSDSB->lpVtbl->Play(lpSDSB, 0, 0, DSBPLAY_LOOPING);
|
||||||
|
CheckHResult("Play failed");
|
||||||
|
|
||||||
|
VSound_Identify();
|
||||||
|
trace("Server ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(Message)
|
||||||
|
{
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
HDC hDC;
|
||||||
|
PAINTSTRUCT Paint;
|
||||||
|
RECT Rectangle;
|
||||||
|
|
||||||
|
GetClientRect(hWnd, &Rectangle);
|
||||||
|
InvalidateRect(hWnd, &Rectangle, TRUE);
|
||||||
|
|
||||||
|
hDC = BeginPaint(hWnd, &Paint);
|
||||||
|
|
||||||
|
SetBkMode(hDC, TRANSPARENT);
|
||||||
|
|
||||||
|
Rectangle.left += 5;
|
||||||
|
Rectangle.right -= 5;
|
||||||
|
|
||||||
|
DrawText(hDC, TextBuffer, strlen(TextBuffer), &Rectangle, DT_VCENTER | DT_SINGLELINE | DT_LEFT);
|
||||||
|
EndPaint(hWnd, &Paint);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
case WM_CLOSE:
|
||||||
|
if(VSound_Connected())
|
||||||
|
{
|
||||||
|
MessageBox(hWnd, ServerActive, "Error!", MB_OK);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
VSound_Reset();
|
||||||
|
Quitting = 1;
|
||||||
|
PostQuitMessage(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefWindowProc(hWnd, Message, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetRegistryInteger(const char *KeyName, int Default)
|
||||||
|
{
|
||||||
|
HKEY hkey;
|
||||||
|
int ReturnValue;
|
||||||
|
int Size = 4;
|
||||||
|
|
||||||
|
if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
|
||||||
|
RegistryKey,
|
||||||
|
0,
|
||||||
|
(LPTSTR) lpszAppName,
|
||||||
|
0,
|
||||||
|
KEY_ALL_ACCESS,
|
||||||
|
NULL,
|
||||||
|
&hkey,
|
||||||
|
NULL
|
||||||
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if((hr = RegQueryValueEx(hkey, KeyName, 0, 0, (LPBYTE) &ReturnValue, &Size)) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
RegCloseKey(hkey);
|
||||||
|
return ReturnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegSetValueEx(hkey, KeyName, 0, REG_DWORD, (LPBYTE) &Default, sizeof(Default));
|
||||||
|
RegCloseKey(hkey);
|
||||||
|
return Default;
|
||||||
|
}
|
||||||
|
Error("Unable to access Windows registry");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetRegistryInteger(const char *KeyName, int Value)
|
||||||
|
{
|
||||||
|
HKEY hkey;
|
||||||
|
|
||||||
|
if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,
|
||||||
|
RegistryKey,
|
||||||
|
0,
|
||||||
|
(LPTSTR) lpszAppName,
|
||||||
|
0,
|
||||||
|
KEY_ALL_ACCESS,
|
||||||
|
NULL,
|
||||||
|
&hkey,
|
||||||
|
NULL
|
||||||
|
) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
RegSetValueEx(hkey, KeyName, 0, REG_DWORD, (LPBYTE) &Value, sizeof(Value));
|
||||||
|
RegCloseKey(hkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetRegistry()
|
||||||
|
{
|
||||||
|
BufferSize = GetRegistryInteger(RegistryKeyBufferSize, 24);
|
||||||
|
if(BufferSize < 4 || BufferSize > 64)
|
||||||
|
{
|
||||||
|
BufferSize = 24;
|
||||||
|
SetRegistryInteger(RegistryKeyBufferSize, BufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferThreshold = GetRegistryInteger(RegistryKeyBufferThreshold, 21);
|
||||||
|
if(BufferThreshold < 2 || BufferThreshold > 32)
|
||||||
|
{
|
||||||
|
BufferThreshold = BufferSize >> 1;
|
||||||
|
SetRegistryInteger(RegistryKeyBufferThreshold, BufferThreshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferType = GetRegistryInteger(RegistryKeyBufferType, 2);
|
||||||
|
if(BufferType < 0 || BufferType > 2)
|
||||||
|
{
|
||||||
|
BufferType = 2;
|
||||||
|
SetRegistryInteger(RegistryKeyBufferType, BufferType);
|
||||||
|
}
|
||||||
|
|
||||||
|
MixSpeed = GetRegistryInteger(RegistryKeyMixSpeed, 44100);
|
||||||
|
if(MixSpeed < 11025) MixSpeed = 11025;
|
||||||
|
if(MixSpeed > 64000) MixSpeed = 64000;
|
||||||
|
SetRegistryInteger(RegistryKeyMixSpeed, MixSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||||
|
{
|
||||||
|
MSG msg;
|
||||||
|
WNDCLASSEX wc;
|
||||||
|
|
||||||
|
g_hInst = hInstance;
|
||||||
|
|
||||||
|
// Window Class parameters.
|
||||||
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
|
wc.lpfnWndProc = (WNDPROC) WndProc;
|
||||||
|
wc.cbClsExtra = 0;
|
||||||
|
wc.cbWndExtra = 0;
|
||||||
|
wc.hInstance = hInstance;
|
||||||
|
wc.hIcon = NULL;
|
||||||
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);;
|
||||||
|
wc.hbrBackground= (HBRUSH) (COLOR_WINDOW);
|
||||||
|
wc.lpszMenuName = lpszAppName;
|
||||||
|
wc.lpszClassName= lpszAppName;
|
||||||
|
wc.cbSize = sizeof(WNDCLASSEX);
|
||||||
|
wc.hIconSm = NULL;
|
||||||
|
|
||||||
|
if(RegisterClassEx(&wc))
|
||||||
|
{
|
||||||
|
// Create window.
|
||||||
|
g_hWnd = CreateWindow(
|
||||||
|
lpszAppName,
|
||||||
|
lpszTitleBar,
|
||||||
|
WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE,
|
||||||
|
CW_USEDEFAULT,
|
||||||
|
CW_USEDEFAULT,
|
||||||
|
280,
|
||||||
|
50,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
hInstance,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
if(g_hWnd)
|
||||||
|
{
|
||||||
|
// Lets first see if the VSound server exists.
|
||||||
|
|
||||||
|
if(!VSound_Detect())
|
||||||
|
{
|
||||||
|
trace("Connect to VSound.VxD failed");
|
||||||
|
MessageBox(NULL, NoServer, "Error!", MB_OK);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetRegistry();
|
||||||
|
VSound_InitDSound();
|
||||||
|
|
||||||
|
while( GetMessage(&msg, NULL, 0, 0))
|
||||||
|
{
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
return (msg.wParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
||||||
|
ml -Fl -DBLD_COFF -DIS_32 -W2 -c -Cx -Zm -DMASM6 vsound.asm
|
||||||
|
link /VXD /NOD /OUT:VSOUND.VxD /MAP:VSOUND.MAP /DEF:VSOUND.DEF vsound
|
||||||
|
copy vsound.vxd \windows\system\itvsound.vxd
|
|
@ -0,0 +1,139 @@
|
||||||
|
;****************************************************************************
|
||||||
|
; *
|
||||||
|
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
|
||||||
|
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
|
||||||
|
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
|
||||||
|
; PURPOSE. *
|
||||||
|
; *
|
||||||
|
; Copyright (C) 1993-95 Microsoft Corporation. All Rights Reserved. *
|
||||||
|
; *
|
||||||
|
;****************************************************************************
|
||||||
|
|
||||||
|
ifndef _SHELL_H
|
||||||
|
_SHELL_H EQU 1
|
||||||
|
ifndef Not_VxD
|
||||||
|
Begin_Service_Table SHELL
|
||||||
|
SHELL_Service SHELL_Get_Version, LOCAL
|
||||||
|
SHELL_Service SHELL_Resolve_Contention, LOCAL
|
||||||
|
SHELL_Service SHELL_Event, LOCAL
|
||||||
|
SHELL_Service SHELL_SYSMODAL_Message, LOCAL
|
||||||
|
SHELL_Service SHELL_Message, LOCAL
|
||||||
|
ifndef WIN30COMPAT
|
||||||
|
SHELL_Service SHELL_GetVMInfo, LOCAL
|
||||||
|
endif
|
||||||
|
ifndef WIN31COMPAT
|
||||||
|
SHELL_Service _SHELL_PostMessage, LOCAL
|
||||||
|
SHELL_Service _SHELL_ShellExecute
|
||||||
|
SHELL_Service _SHELL_PostShellMessage
|
||||||
|
SHELL_Service SHELL_DispatchRing0AppyEvents, LOCAL
|
||||||
|
SHELL_Service SHELL_Hook_Properties, LOCAL
|
||||||
|
SHELL_Service SHELL_Unhook_Properties, LOCAL
|
||||||
|
SHELL_Service SHELL_Update_User_Activity, LOCAL
|
||||||
|
SHELL_Service _SHELL_QueryAppyTimeAvailable, LOCAL
|
||||||
|
SHELL_Service _SHELL_CallAtAppyTime, LOCAL
|
||||||
|
SHELL_Service _SHELL_CancelAppyTimeEvent
|
||||||
|
SHELL_Service _SHELL_BroadcastSystemMessage, LOCAL
|
||||||
|
SHELL_Service _SHELL_HookSystemBroadcast, LOCAL
|
||||||
|
SHELL_Service _SHELL_UnhookSystemBroadcast, LOCAL
|
||||||
|
SHELL_Service _SHELL_LocalAllocEx, LOCAL
|
||||||
|
SHELL_Service _SHELL_LocalFree, LOCAL
|
||||||
|
SHELL_Service _SHELL_LoadLibrary, LOCAL
|
||||||
|
SHELL_Service _SHELL_FreeLibrary, LOCAL
|
||||||
|
SHELL_Service _SHELL_GetProcAddress, LOCAL
|
||||||
|
SHELL_Service _SHELL_CallDll, LOCAL
|
||||||
|
SHELL_Service _SHELL_SuggestSingleMSDOSMode
|
||||||
|
SHELL_Service SHELL_CheckHotkeyAllowed
|
||||||
|
SHELL_Service _SHELL_GetDOSAppInfo
|
||||||
|
endif
|
||||||
|
End_Service_Table SHELL
|
||||||
|
ifndef WIN31COMPAT
|
||||||
|
SBH_CALL_ORDER_DEFAULT EQU 0
|
||||||
|
SBH_CALL_ORDER_REGISTRY EQU 30000000H
|
||||||
|
SBH_CALL_ORDER_CONFIGMG EQU 40000000H
|
||||||
|
endif
|
||||||
|
MB_OK EQU 00H
|
||||||
|
MB_OKCANCEL EQU 01H
|
||||||
|
MB_ABORTRETRYIGNORE EQU 02H
|
||||||
|
MB_YESNOCANCEL EQU 03H
|
||||||
|
MB_YESNO EQU 04H
|
||||||
|
MB_RETRYCANCEL EQU 05H
|
||||||
|
MB_ICONHAND EQU 10H
|
||||||
|
MB_ICONEXCLAMATION EQU 30H
|
||||||
|
MB_ICONASTERISK EQU 40H
|
||||||
|
MB_DEFBUTTON1 EQU 00H
|
||||||
|
MB_DEFBUTTON2 EQU 100H
|
||||||
|
MB_DEFBUTTON3 EQU 200H
|
||||||
|
MB_APPLMODAL EQU 00H
|
||||||
|
MB_SYSTEMMODAL EQU 1000H
|
||||||
|
MB_NOFOCUS EQU 8000H
|
||||||
|
MB_ASAP EQU 80000000H
|
||||||
|
MB_NOWINDOW EQU 40000000H
|
||||||
|
MB_HANGSYS EQU 20000000H
|
||||||
|
ifndef WIN31COMPAT
|
||||||
|
MB_APPYTIME EQU 10000000H
|
||||||
|
endif
|
||||||
|
IDOK EQU 1
|
||||||
|
IDCANCEL EQU 2
|
||||||
|
IDABORT EQU 3
|
||||||
|
IDRETRY EQU 4
|
||||||
|
IDIGNORE EQU 5
|
||||||
|
IDYES EQU 6
|
||||||
|
IDNO EQU 7
|
||||||
|
SE_WP_PrtScBoost EQU 00100000H
|
||||||
|
SE_WP_PrtScBoostBit EQU 20
|
||||||
|
SE_WP_DispUpdBoost EQU 00200000H
|
||||||
|
SE_WP_DispUpdBoostBit EQU 21
|
||||||
|
ifndef WIN31COMPAT
|
||||||
|
SPM_UM_DoNotWaitForCrit EQU 00020000H
|
||||||
|
SPM_UM_DoNotWaitForCritBit EQU 17
|
||||||
|
SPM_UM_AlwaysSchedule EQU 00080000H
|
||||||
|
SPM_UM_AlwaysScheduleBit EQU 19
|
||||||
|
endif
|
||||||
|
SGVMI_Windowed EQU 00000004H
|
||||||
|
SGVMI_ALTTABdis EQU 00000020H
|
||||||
|
SGVMI_ALTESCdis EQU 00000040H
|
||||||
|
SGVMI_ALTSPACEdis EQU 00000080H
|
||||||
|
SGVMI_ALTENTERdis EQU 00000100H
|
||||||
|
SGVMI_ALTPRTSCdis EQU 00000200H
|
||||||
|
SGVMI_PRTSCdis EQU 00000400H
|
||||||
|
SGVMI_CTRLESCdis EQU 00000800H
|
||||||
|
SGVMI_HasHotKey EQU 00004000H
|
||||||
|
SGVMI_Polling EQU 00001000H
|
||||||
|
SGVMI_FastPaste EQU 00020000H
|
||||||
|
SGVMI_NoHMA EQU 00002000H
|
||||||
|
SGVMI_XMS_Lock EQU 00010000H
|
||||||
|
SGVMI_EMS_Lock EQU 00008000H
|
||||||
|
SGVMI_V86_Lock EQU 00040000H
|
||||||
|
SGVMI_ClsExit EQU 40000000H
|
||||||
|
endif
|
||||||
|
ifndef WIN31COMPAT
|
||||||
|
ifndef Not_VxD
|
||||||
|
LMEM_FIXED EQU 0000H
|
||||||
|
LMEM_ZEROINIT EQU 0040H
|
||||||
|
LPTR EQU (LMEM_FIXED OR LMEM_ZEROINIT)
|
||||||
|
LMEM_STRING EQU 00010000H
|
||||||
|
LMEM_OEM2ANSI EQU 00020000H
|
||||||
|
QAAFL_APPYAVAIL EQU 00000001H
|
||||||
|
QAAFL_APPYNOW EQU 00000002H
|
||||||
|
CAAFL_RING0 EQU 00000001H
|
||||||
|
CAAFL_TIMEOUT EQU 00000002H
|
||||||
|
endif
|
||||||
|
|
||||||
|
SHEXPACKET STRUC
|
||||||
|
shex_dwTotalSize DD ?
|
||||||
|
shex_dwSize DD ?
|
||||||
|
shex_ibOp DD ?
|
||||||
|
shex_ibFile DD ?
|
||||||
|
shex_ibParams DD ?
|
||||||
|
shex_ibDir DD ?
|
||||||
|
shex_dwReserved DD ?
|
||||||
|
shex_nCmdShow DD ?
|
||||||
|
SHEXPACKET ENDS
|
||||||
|
SGDAIF_COMPARENAME EQU 0
|
||||||
|
SGDAIF_TESTAPPBIT EQU 1
|
||||||
|
SGDAIF_LASTVALID EQU 1
|
||||||
|
SGDAIR_SUCCESS EQU 0
|
||||||
|
SGDAIR_NOMATCH EQU 1
|
||||||
|
SGDAIR_BADFUNCTION EQU 2
|
||||||
|
endif
|
||||||
|
endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,679 @@
|
||||||
|
PAGE 58,132
|
||||||
|
|
||||||
|
.386p
|
||||||
|
|
||||||
|
;
|
||||||
|
; Client has:
|
||||||
|
; States -> state is set by writing to port
|
||||||
|
; data is retrieved by reading from port
|
||||||
|
;
|
||||||
|
; State 0: Get Identification "ITVXDDRV"
|
||||||
|
; State 1: Get Server string (64 bytes)
|
||||||
|
; State 2: Get buffer used
|
||||||
|
; State 3: Reset Client
|
||||||
|
; State 4: Get debug value
|
||||||
|
; State 5: Get TSC
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; Server interface:
|
||||||
|
; Write 0 to reset
|
||||||
|
; If read, returns "ITSERVER", else 01h if Server has been validated.
|
||||||
|
; Needs to receive "ITSERVER" to validate.
|
||||||
|
; If validated, receives server string of max 64 bytes, no 0 permitted.
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
.XLIST
|
||||||
|
INCLUDE VMM.Inc
|
||||||
|
INCLUDE Debug.Inc
|
||||||
|
INCLUDE Shell.inc
|
||||||
|
.LIST
|
||||||
|
|
||||||
|
VSound_Client_Address EQU 400h
|
||||||
|
VSound_Server_Address EQU 401h
|
||||||
|
VSound_Data_Address EQU 402h
|
||||||
|
|
||||||
|
VSOUND_CLIENTSTATES EQU 7
|
||||||
|
VSOUND_BUFFERSIZE EQU (64*1024)
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
; V I R T U A L D E V I C E D E C L A R A T I O N
|
||||||
|
;******************************************************************************
|
||||||
|
|
||||||
|
Declare_Virtual_Device VSOUND, 1, 0, VSOUND_Control, Undefined_Device_ID ,,,
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
; L O C A L D A T A
|
||||||
|
;******************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
VxD_LOCKED_DATA_SEG
|
||||||
|
|
||||||
|
VSound_Data DB VSOUND_BUFFERSIZE Dup (0)
|
||||||
|
VSound_HeadPointer DD 0
|
||||||
|
VSound_TailPointer DD 0
|
||||||
|
|
||||||
|
VSound_Client DD 0
|
||||||
|
VSound_Server DD 0
|
||||||
|
VSound_ClientCallback DD 0
|
||||||
|
|
||||||
|
VSound_ID DB "ITVXDDRV"
|
||||||
|
VSound_State DD 0
|
||||||
|
VSound_BufferUsed DD 0
|
||||||
|
VSound_StatePos DD 0
|
||||||
|
|
||||||
|
VSound_ServerID DB "ITSERVER"
|
||||||
|
VSound_ServerInPos DD 0
|
||||||
|
VSound_ServerOutPos DD 0
|
||||||
|
VSound_ServerValid DD 0
|
||||||
|
|
||||||
|
VSound_DebugValue DD 0
|
||||||
|
VSound_TimeStamp1 DD 0
|
||||||
|
VSound_TimeStamp2 DD 0
|
||||||
|
|
||||||
|
VSound_InTable DD Offset32 VSound_Identification
|
||||||
|
DD Offset32 VSound_GetServerString
|
||||||
|
DD Offset32 VSound_GetBufferUsed
|
||||||
|
DD Offset32 VSound_GetDebugValue
|
||||||
|
DD Offset32 VSound_Get0
|
||||||
|
DD Offset32 VSound_GetDebugValue
|
||||||
|
DD Offset32 VSound_GetTSC
|
||||||
|
|
||||||
|
VSound_OutTable DD Offset32 VSound_Out_ResetStatePos
|
||||||
|
DD Offset32 VSound_Out_ResetStatePos
|
||||||
|
DD Offset32 VSound_Out_GetBufferUsed
|
||||||
|
DD Offset32 VSound_Out_ResetClient
|
||||||
|
DD Offset32 VSound_Out_SetCallbackAddress
|
||||||
|
DD Offset32 VSound_Out_ResetStatePos
|
||||||
|
DD Offset32 VSound_Out_GetTSC
|
||||||
|
|
||||||
|
VSound_ServerString DB 64 Dup (0)
|
||||||
|
|
||||||
|
VxD_LOCKED_DATA_ENDS
|
||||||
|
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
; I N I T I A L I Z A T I O N C O D E
|
||||||
|
;******************************************************************************
|
||||||
|
|
||||||
|
VxD_IDATA_SEG
|
||||||
|
|
||||||
|
Begin_Vxd_IO_Table IO_Table
|
||||||
|
Vxd_IO VSound_Client_Address, VSound_Client_Hook
|
||||||
|
Vxd_IO VSound_Server_Address, VSound_Server_Hook
|
||||||
|
Vxd_IO VSound_Data_Address, VSound_Data_Hook
|
||||||
|
End_Vxd_IO_Table IO_Table
|
||||||
|
|
||||||
|
VxD_IDATA_ENDS
|
||||||
|
|
||||||
|
VxD_ICODE_SEG
|
||||||
|
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
;
|
||||||
|
; VSOUND_Device_Init
|
||||||
|
;
|
||||||
|
; DESCRIPTION:
|
||||||
|
;
|
||||||
|
; This routine is called during Windows startup. It needs to
|
||||||
|
; install the I/O handler for our device, and set up the system
|
||||||
|
; VM as the default owner.
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;==============================================================================
|
||||||
|
|
||||||
|
BeginProc VSOUND_Device_Init
|
||||||
|
|
||||||
|
Xor EAX, EAX
|
||||||
|
Mov VSound_Client, EAX ; no current owner
|
||||||
|
Mov VSound_Server, EAX ; no current owner
|
||||||
|
Mov VSound_ClientCallback, EAX ; No callback
|
||||||
|
|
||||||
|
Mov EDI, OFFSET32 IO_Table
|
||||||
|
VMMCall Install_Mult_IO_Handlers
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSOUND_Device_Init
|
||||||
|
|
||||||
|
VxD_ICODE_ENDS
|
||||||
|
|
||||||
|
|
||||||
|
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
VxD_CODE_SEG
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
;
|
||||||
|
; VSOUND_Destroy_VM
|
||||||
|
;
|
||||||
|
; DESCRIPTION:
|
||||||
|
;
|
||||||
|
; This routine is called when a VM is destroyed. We need to check
|
||||||
|
; to see if the VM in question is the current owner of the device.
|
||||||
|
;
|
||||||
|
;==============================================================================
|
||||||
|
|
||||||
|
BeginProc VSOUND_Destroy_VM
|
||||||
|
|
||||||
|
Xor EAX, EAX
|
||||||
|
|
||||||
|
Cmp EBX, VSound_Client ; Destroying device owner?
|
||||||
|
JNE Short VDM_Client
|
||||||
|
|
||||||
|
Mov VSound_Client, EAX
|
||||||
|
Mov VSound_ClientCallback, EAX
|
||||||
|
|
||||||
|
VDM_Client:
|
||||||
|
Cmp EBX, VSound_Server
|
||||||
|
JNE VDM_Server
|
||||||
|
|
||||||
|
Mov VSound_Server, EAX
|
||||||
|
Mov VSound_ServerValid, EAX
|
||||||
|
|
||||||
|
VDM_Server:
|
||||||
|
ClC
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSOUND_Destroy_VM
|
||||||
|
|
||||||
|
VxD_CODE_ENDS
|
||||||
|
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
|
||||||
|
VxD_LOCKED_CODE_SEG
|
||||||
|
|
||||||
|
;******************************************************************************
|
||||||
|
;
|
||||||
|
; VSound_Control
|
||||||
|
;
|
||||||
|
; DESCRIPTION:
|
||||||
|
;
|
||||||
|
; This is a call-back routine to handle the messages that are sent
|
||||||
|
; to VxD's to control system operation.
|
||||||
|
;
|
||||||
|
;==============================================================================
|
||||||
|
BeginProc VSound_Control
|
||||||
|
|
||||||
|
Control_Dispatch Device_Init, VSound_Device_Init
|
||||||
|
Control_Dispatch Destroy_VM, VSound_Destroy_VM
|
||||||
|
|
||||||
|
ClC
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSound_Control
|
||||||
|
|
||||||
|
VxD_LOCKED_CODE_ENDS
|
||||||
|
|
||||||
|
|
||||||
|
VxD_CODE_SEG
|
||||||
|
|
||||||
|
;*****************************************************************************
|
||||||
|
;
|
||||||
|
; VSound_Client_Hook
|
||||||
|
;
|
||||||
|
; DESCRIPTION:
|
||||||
|
;
|
||||||
|
; This routine is called for every I/O access to our port. First,
|
||||||
|
; it checks to see if the VM issuing the I/O is the current owner.
|
||||||
|
; If not, it displays a dialog box so the user can decide what to
|
||||||
|
; do.
|
||||||
|
;
|
||||||
|
;*****************************************************************************
|
||||||
|
|
||||||
|
VSound_Identification:
|
||||||
|
Pop EAX
|
||||||
|
Push ECX
|
||||||
|
Mov ECX, VSound_StatePos
|
||||||
|
|
||||||
|
Mov AL, [VSound_ID+ECX]
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 7
|
||||||
|
Mov VSound_StatePos, ECX
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_GetServerString:
|
||||||
|
Pop EAX
|
||||||
|
Push ECX
|
||||||
|
Mov ECX, VSound_StatePos
|
||||||
|
|
||||||
|
Mov AL, [VSound_ServerString+ECX]
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 63
|
||||||
|
Mov VSound_StatePos, ECX
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_GetBufferUsed:
|
||||||
|
Pop EAX
|
||||||
|
Push ECX
|
||||||
|
Mov ECX, VSound_StatePos
|
||||||
|
|
||||||
|
Xor ECX, 1
|
||||||
|
Mov AL, [Byte Ptr VSound_BufferUsed+ECX]
|
||||||
|
Mov VSound_StatePos, ECX
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_GetTSC:
|
||||||
|
Pop EAX
|
||||||
|
Push ECX
|
||||||
|
Mov ECX, VSound_StatePos
|
||||||
|
|
||||||
|
Mov AL, [Byte Ptr VSound_TimeStamp1+ECX]
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 7
|
||||||
|
|
||||||
|
Mov VSound_StatePos, ECX
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Get0:
|
||||||
|
Xor AL, AL
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_GetDebugValue:
|
||||||
|
Pop EAX
|
||||||
|
Push ECX
|
||||||
|
Mov ECX, VSound_StatePos
|
||||||
|
|
||||||
|
Mov AL, [Byte Ptr VSound_DebugValue+ECX]
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 3
|
||||||
|
|
||||||
|
Mov VSound_StatePos, ECX
|
||||||
|
|
||||||
|
Pop ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
BeginProc VSound_Client_Hook
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
; Resolve Contention
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Push EAX
|
||||||
|
|
||||||
|
Mov EAX, VSound_Client
|
||||||
|
|
||||||
|
Cmp VSound_ServerValid, 0
|
||||||
|
JE NoValidServer
|
||||||
|
|
||||||
|
Cmp EAX, EBX ; Is the request from the
|
||||||
|
JE Process_IO ; current owner?
|
||||||
|
|
||||||
|
Test EAX, EAX ; Was there a previous owner?
|
||||||
|
JZ New_Owner
|
||||||
|
|
||||||
|
NoValidServer:
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Dispatch_Byte_IO Fall_Through, <SHORT Blocked_IO>
|
||||||
|
|
||||||
|
Mov AL, 80h
|
||||||
|
|
||||||
|
Blocked_IO:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
New_Owner:
|
||||||
|
Mov VSound_Client, EBX
|
||||||
|
Mov VSound_ClientCallback, 0
|
||||||
|
|
||||||
|
Process_IO:
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Dispatch_Byte_IO Fall_Through, <SHORT VSound_Out>
|
||||||
|
|
||||||
|
Push EAX
|
||||||
|
Mov EAX, VSound_State
|
||||||
|
Cmp EAX, VSOUND_CLIENTSTATES
|
||||||
|
JAE VSound_Unknown
|
||||||
|
|
||||||
|
Jmp [VSound_InTable+EAX*4]
|
||||||
|
|
||||||
|
VSound_Unknown:
|
||||||
|
Pop EAX
|
||||||
|
Xor AL, AL
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Out:
|
||||||
|
Push EAX
|
||||||
|
Mov Byte Ptr VSound_State, AL
|
||||||
|
And EAX, 0FFh
|
||||||
|
|
||||||
|
Cmp EAX, VSOUND_CLIENTSTATES
|
||||||
|
JAE VSound_Out_Nothing
|
||||||
|
|
||||||
|
Jmp [VSound_OutTable+EAX*4]
|
||||||
|
|
||||||
|
VSound_Out_GetTSC:
|
||||||
|
DB 0Fh
|
||||||
|
DB 31h ; RdTSC
|
||||||
|
Mov VSound_TimeStamp1, EAX
|
||||||
|
Mov VSound_TimeStamp2, EDX
|
||||||
|
Jmp VSound_Out_ResetStatePos
|
||||||
|
|
||||||
|
VSound_Out_GetBufferUsed:
|
||||||
|
Mov EAX, VSound_TailPointer
|
||||||
|
Sub EAX, VSound_HeadPointer
|
||||||
|
And EAX, VSOUND_BUFFERSIZE-1
|
||||||
|
Mov VSound_BufferUsed, EAX
|
||||||
|
|
||||||
|
VSound_Out_ResetStatePos:
|
||||||
|
Mov VSound_StatePos, 0
|
||||||
|
|
||||||
|
VSound_Out_Nothing:
|
||||||
|
Pop EAX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Out_ResetClient:
|
||||||
|
Xor EAX, EAX
|
||||||
|
Mov VSound_Client, EAX
|
||||||
|
Mov VSound_ClientCallback, EAX
|
||||||
|
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Out_SetCallbackAddress:
|
||||||
|
Mov AX, [EBP+CLIENT_REG_STRUC.CLIENT_CS]
|
||||||
|
ShL EAX, 16
|
||||||
|
Mov AX, [EBP+CLIENT_REG_STRUC.CLIENT_BX]
|
||||||
|
|
||||||
|
Mov VSound_ClientCallback, EAX
|
||||||
|
|
||||||
|
Pop EAX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSound_Client_Hook
|
||||||
|
|
||||||
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
;--------------------------------------------------------------------
|
||||||
|
|
||||||
|
BeginProc VSound_Server_Hook
|
||||||
|
|
||||||
|
Push EAX
|
||||||
|
|
||||||
|
Mov EAX, VSound_Server
|
||||||
|
|
||||||
|
Cmp EAX, EBX ; Is the request from the
|
||||||
|
JE Process_Server_IO ; current owner?
|
||||||
|
|
||||||
|
Test EAX, EAX ; Was there a previous owner?
|
||||||
|
JZ New_Server
|
||||||
|
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Dispatch_Byte_IO Fall_Through, <SHORT Server_Blocked_IO>
|
||||||
|
|
||||||
|
Mov AL, 80h
|
||||||
|
|
||||||
|
Server_Blocked_IO:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
New_Server:
|
||||||
|
Mov VSound_Server, EBX
|
||||||
|
|
||||||
|
Process_Server_IO:
|
||||||
|
Pop EAX
|
||||||
|
|
||||||
|
Dispatch_Byte_IO Fall_Through, <SHORT VSound_Server_Out>
|
||||||
|
|
||||||
|
Cmp VSound_ServerValid, 1
|
||||||
|
JE VSound_Server_Validated
|
||||||
|
|
||||||
|
Mov ECX, VSound_ServerInPos
|
||||||
|
Mov AL, [VSound_ServerID+ECX]
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 7
|
||||||
|
Mov VSound_ServerInPos, ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Server_Validated:
|
||||||
|
Mov ECX, VSound_Client
|
||||||
|
Add ECX, 0FFFFFFFFh
|
||||||
|
SBB AL, AL ; Returns 0 if not connected, 0FFh if connected
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Server_Out:
|
||||||
|
Test AL, AL ; Reset?
|
||||||
|
JZ VSound_Server_Reset
|
||||||
|
|
||||||
|
Mov ECX, VSound_ServerOutPos
|
||||||
|
|
||||||
|
Cmp VSound_ServerValid, 1
|
||||||
|
JE VSound_ReceiveServerString
|
||||||
|
|
||||||
|
Cmp [VSound_ServerID+ECX], AL
|
||||||
|
JE VSound_ValidByte
|
||||||
|
|
||||||
|
Mov VSound_ServerOutPos, 0
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_ValidByte:
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 7
|
||||||
|
Mov VSound_ServerOutPos, ECX
|
||||||
|
JNZ VSound_ServerNotValidated
|
||||||
|
|
||||||
|
Mov VSound_ServerValid, 1
|
||||||
|
|
||||||
|
VSound_ServerNotValidated:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_ReceiveServerString:
|
||||||
|
Mov [VSound_ServerString+ECX], AL
|
||||||
|
Inc ECX
|
||||||
|
And ECX, 63
|
||||||
|
Mov VSound_ServerOutPos, ECX
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Server_Reset:
|
||||||
|
Xor ECX, ECX
|
||||||
|
Mov VSound_Server, ECX
|
||||||
|
Mov VSound_ServerValid, ECX
|
||||||
|
Mov VSound_ServerInPos, ECX
|
||||||
|
Mov VSound_ServerOutPos, ECX
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSound_Server_Hook
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
BeginProc VSound_Data_Hook
|
||||||
|
|
||||||
|
Cmp EBX, VSound_Server
|
||||||
|
JE VSound_Data_Server
|
||||||
|
|
||||||
|
Cmp EBX, VSound_Client
|
||||||
|
JE VSound_Data_Client
|
||||||
|
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Data_Client:
|
||||||
|
Cmp CX, String_IO or Rep_IO or Byte_Output
|
||||||
|
JNE Data_Client_Simulate
|
||||||
|
|
||||||
|
PushAD
|
||||||
|
Push ES
|
||||||
|
PushF
|
||||||
|
|
||||||
|
ClI
|
||||||
|
|
||||||
|
Push DS
|
||||||
|
Pop ES
|
||||||
|
|
||||||
|
ShR ECX, 16 ; ECX = segment.
|
||||||
|
Mov EAX, [EBP+CLIENT_REG_STRUC.CLIENT_ECX]
|
||||||
|
|
||||||
|
ShL ECX, 4
|
||||||
|
Mov ESI, [EBP+CLIENT_REG_STRUC.CLIENT_ESI]
|
||||||
|
|
||||||
|
And ESI, 0FFFFh
|
||||||
|
Mov EDI, VSound_TailPointer
|
||||||
|
|
||||||
|
Add ESI, ECX ; ESI = data source.
|
||||||
|
And EAX, 0FFFFh ; EAX = byte count
|
||||||
|
|
||||||
|
Test EAX, 3 ; Must be multiple of 4 bytes
|
||||||
|
JNZ VSound_DataClientExit
|
||||||
|
|
||||||
|
LEA EDX, [EDI+EAX]
|
||||||
|
Add EDI, Offset VSound_Data
|
||||||
|
|
||||||
|
Cmp EDX, VSOUND_BUFFERSIZE
|
||||||
|
JB VSound_DataClient1
|
||||||
|
|
||||||
|
Mov ECX, VSOUND_BUFFERSIZE
|
||||||
|
LEA EAX, [EDX-VSOUND_BUFFERSIZE]
|
||||||
|
|
||||||
|
Sub ECX, VSound_TailPointer
|
||||||
|
ShR ECX, 2
|
||||||
|
|
||||||
|
Rep MovsD
|
||||||
|
|
||||||
|
Mov EDI, Offset VSound_Data
|
||||||
|
|
||||||
|
VSound_DataClient1:
|
||||||
|
ShR EAX, 2
|
||||||
|
And EDX, VSOUND_BUFFERSIZE-1
|
||||||
|
|
||||||
|
Mov ECX, EAX
|
||||||
|
Mov VSound_TailPointer, EDX
|
||||||
|
|
||||||
|
Rep MovsD
|
||||||
|
|
||||||
|
VSound_DataClientExit:
|
||||||
|
PopF
|
||||||
|
Pop ES
|
||||||
|
PopAD
|
||||||
|
|
||||||
|
Data_Client_Simulate:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
VSound_Data_Server:
|
||||||
|
|
||||||
|
;
|
||||||
|
; The server will only receive data if:
|
||||||
|
; 1) A Rep InsB instruction is used. No other instruction will work
|
||||||
|
; 2) The ECX count is a multiple of 4
|
||||||
|
; 3) The ECX count must be less than BUFFERSIZE
|
||||||
|
|
||||||
|
Cmp CX, String_IO or Rep_IO or Addr_32_IO or Byte_Input
|
||||||
|
JNE Data_Server_Simulate
|
||||||
|
|
||||||
|
PushAD
|
||||||
|
Push ES
|
||||||
|
PushF
|
||||||
|
|
||||||
|
ClI
|
||||||
|
|
||||||
|
ShR ECX, 16
|
||||||
|
Mov ES, CX
|
||||||
|
|
||||||
|
Mov EAX, [EBP+CLIENT_REG_STRUC.CLIENT_ECX]
|
||||||
|
Mov EDI, [EBP+CLIENT_REG_STRUC.CLIENT_EDI]
|
||||||
|
|
||||||
|
Test EAX, 3
|
||||||
|
JNZ VSound_DataServerExit
|
||||||
|
|
||||||
|
Cmp EAX, VSOUND_BUFFERSIZE
|
||||||
|
JAE VSound_DataServerExit
|
||||||
|
|
||||||
|
; Want minimum of bytes available and bytes requested
|
||||||
|
Mov ESI, VSound_HeadPointer
|
||||||
|
Mov EBX, VSound_TailPointer
|
||||||
|
|
||||||
|
Sub EBX, ESI
|
||||||
|
And EBX, VSOUND_BUFFERSIZE-1 ; EBX = bytes available
|
||||||
|
; EAX = bytes requested
|
||||||
|
Cmp EBX, EAX
|
||||||
|
JB VSound_DataServer1
|
||||||
|
|
||||||
|
Mov EBX, EAX
|
||||||
|
|
||||||
|
VSound_DataServer1: ; EBX = bytes to transfer
|
||||||
|
Sub EAX, EBX ; EAX = bytes to zero
|
||||||
|
LEA EDX, [ESI+EBX]
|
||||||
|
|
||||||
|
ShR EBX, 2 ; EBX = dwords to transfer
|
||||||
|
Add ESI, Offset VSound_Data
|
||||||
|
|
||||||
|
Cmp EDX, VSOUND_BUFFERSIZE ; Does it span the buffer boundary?
|
||||||
|
JB VSound_DataServer2
|
||||||
|
|
||||||
|
LEA EBX, [EDX-VSOUND_BUFFERSIZE]
|
||||||
|
Mov ECX, VSOUND_BUFFERSIZE
|
||||||
|
|
||||||
|
ShR EBX, 2
|
||||||
|
Sub ECX, VSound_HeadPointer
|
||||||
|
|
||||||
|
ShR ECX, 2
|
||||||
|
|
||||||
|
Rep MovsD
|
||||||
|
|
||||||
|
Mov ESI, Offset VSound_Data
|
||||||
|
|
||||||
|
VSound_DataServer2:
|
||||||
|
ShR EAX, 2
|
||||||
|
Mov ECX, EBX
|
||||||
|
Rep MovsD
|
||||||
|
|
||||||
|
Mov ECX, EAX
|
||||||
|
And EDX, VSOUND_BUFFERSIZE-1
|
||||||
|
|
||||||
|
Xor EAX, EAX
|
||||||
|
Mov VSound_HeadPointer, EDX
|
||||||
|
|
||||||
|
Rep StosD
|
||||||
|
|
||||||
|
; ECX = 0
|
||||||
|
Mov EBX, VSound_Client
|
||||||
|
Cmp VSound_ClientCallback, ECX
|
||||||
|
JE VSound_DataServerExit
|
||||||
|
Test EBX, EBX
|
||||||
|
JZ VSound_DataServerExit
|
||||||
|
|
||||||
|
Mov EBP, [EBX+CB_S.CB_Client_Pointer]
|
||||||
|
|
||||||
|
VMMCall Set_Execution_Focus
|
||||||
|
JC VSound_DataServerExit
|
||||||
|
|
||||||
|
Push_Client_State
|
||||||
|
|
||||||
|
VMMCall Begin_Nest_V86_Exec
|
||||||
|
|
||||||
|
MovZX EDX, Word Ptr [VSound_ClientCallback]
|
||||||
|
MovZX ECX, Word Ptr [VSound_ClientCallback+2]
|
||||||
|
VMMCall Simulate_Far_Call
|
||||||
|
VMMCall Resume_Exec
|
||||||
|
|
||||||
|
VMMCall End_Nest_Exec
|
||||||
|
|
||||||
|
Pop_Client_State
|
||||||
|
|
||||||
|
VSound_DataServerExit:
|
||||||
|
PopF
|
||||||
|
Pop ES
|
||||||
|
PopAD
|
||||||
|
|
||||||
|
Data_Server_Simulate:
|
||||||
|
Ret
|
||||||
|
|
||||||
|
EndProc VSound_Data_Hook
|
||||||
|
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
VxD_CODE_ENDS
|
||||||
|
|
||||||
|
|
||||||
|
END
|
|
@ -0,0 +1,38 @@
|
||||||
|
;****************************************************************************
|
||||||
|
; *
|
||||||
|
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
|
||||||
|
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
|
||||||
|
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
|
||||||
|
; PURPOSE. *
|
||||||
|
; *
|
||||||
|
; Copyright (C) 1993-95 Microsoft Corporation. All Rights Reserved. *
|
||||||
|
; *
|
||||||
|
;****************************************************************************
|
||||||
|
|
||||||
|
VXD VSOUND
|
||||||
|
|
||||||
|
DESCRIPTION 'VSOUND Impulse Tracker Virtual Soundcard driver for for Microsoft Windows'
|
||||||
|
|
||||||
|
SEGMENTS
|
||||||
|
_LPTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_LTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_LDATA CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_TEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_DATA CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
CONST CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_TLS CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_BSS CLASS 'LCODE' PRELOAD NONDISCARDABLE
|
||||||
|
_ITEXT CLASS 'ICODE' DISCARDABLE
|
||||||
|
_IDATA CLASS 'ICODE' DISCARDABLE
|
||||||
|
_PTEXT CLASS 'PCODE' NONDISCARDABLE
|
||||||
|
_PDATA CLASS 'PDATA' NONDISCARDABLE SHARED
|
||||||
|
_STEXT CLASS 'SCODE' RESIDENT
|
||||||
|
_SDATA CLASS 'SCODE' RESIDENT
|
||||||
|
_DBOSTART CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING
|
||||||
|
_DBOCODE CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING
|
||||||
|
_DBODATA CLASS 'DBOCODE' PRELOAD NONDISCARDABLE CONFORMING
|
||||||
|
_16ICODE CLASS '16ICODE' PRELOAD DISCARDABLE
|
||||||
|
_RCODE CLASS 'RCODE'
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
VSOUND_DDB @1
|
Loading…
Reference in New Issue