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