-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathMONOTONE.TXT
More file actions
846 lines (625 loc) · 37 KB
/
MONOTONE.TXT
File metadata and controls
846 lines (625 loc) · 37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
MONOTONE MONOTONE
A tracker for extremely simple output devices on the PC
A Trixter / Hornet Production
"On the Leading Edge of the Trailing Edge!" ___________________________________________
(Note: This documentation is still unfinished. While I've tried to only
document features that are actually working, it is possible a few things
mentioned here are either unfinished or completely absent. Contact me
if you have any questions.)
Table of Contents _________________
---[Quickstart for the experienced tracker musician: 3
---[Design and Concepts: 3
---[Composing with MONOTONE 4
The Note system 4
Movement 5
Editing 5
Effects 5
---[Implementation Details: 7
---[Known Limitations: 7
---[Composing for simple sound devices: 8
PC Speaker 8
Adlib / Sound Blaster 8
Tandy/PCjr 3-voice 8
Creative Music System/Gameblaster 12-voice 8
Bank Street Music Writer card 9
---[Roadmap 9
---[Contact Information 11
---[Special Thanks 11
---[Useless tidbits and trivia 11
Programming style and philosophy 11
Tools and libraries used to develop MONOTONE 12
Sample song info 12
Display Musings 12
Appendix A: Configuring MONOTONE 13
Appendix B: Decimal to Hexidecimal chart 14
---[Quickstart for the experienced tracker musician:
If you already know what a tracker is, you can get started with just
this information:
Look at KEYLIST.TXT (the shipping keyboard configuration). If you like
it, print out KEYLIST.TXT and use it as a reference. If you don't like
it, run MTCONFIG and redefine keys to your liking.
Because MONOTONE was written to support simple devices, the interface
favors note entry over all other operations. This means it probably
doesn't navigate like you are used to. The shipping navigation scheme
is this:
- Left hand on letter keys to enter notes
- Right hand on numeric keypad to move around and change the
default octave
- Moving left/right immediately moves to the prev/next track's note
entry
With this scheme, you can enter the bulk of the song (the note data)
with single keystrokes (no shift/ctrl/etc.) and without moving your
hands from their default positions.
---[Design and Concepts:
MONOTONE is a tracker. For those unfamiliar with trackers, a tracker is
a song editor/player that lets you compose a song by entering notes and
effects into a "pattern" made up of rows and columns. (Each column is
called a "track", hence the name.) Patterns are then strung together by
an "order list" to make a complete song.
While several PC trackers already exist, MONOTONE was designed from the
ground up as a tracker for extremely simple sound devices (ie.
significantly less capabilities than Adlib/Sound Blaster cards or MIDI)
and platforms (ie. very old PCs, microcontrollers, etc.). Until
MONOTONE, such devices have had no representation on the PC.
A "simple" sound device is one with the following characteristics:
- MUST produce sound (ie. a tone at a particular frequency) MUST
- MAY have volume control ___
- MAY have more than one hardware channel ___
- MAY have one or more noise generators ___
Sound devices which meet only the basic criteria include:
- The internal PC speaker
- Any simple sine/sawtooth/triangle/square wave generator
Sound devices which meet (and are generally limited to) all four
criteria that have appeared on the PC in one form or another include:
- Texas instruments SN76489 (IBM PCjr, Tandy 1000 series)
- Phillips SAA 1099 (Creative Music System/Game Blaster)
- General Instrument AY-3-8910 (Bank Street Music Writer card)
(While many other sound devices available on the PC can greatly exceed
these criteria, such as General MIDI or the Yamaha YM3812 (Adlib), they
are not the target audience for MONOTONE. Using such devices is still
possible in MONOTONE, but none of their extended features will be
accessible.)
For maximum output device flexibility, all tracking is done against a
"virtual" sound device that matches one or more of the above criteria.
This is done by implementing a simple finite-state machine in software,
which takes the song data and processes it into virtual channels. For
actual output, the virtual channel data is mapped to the hardware via
each hardware's software object. This allows the song to sound as
consistent as possible across different hardware devices.
Because the hardware these devices are found on is usually quite limited
(IBM PCjr, Tandy 1000, x86 8-bit ISA clones, etc.), MONOTONE was
designed for maximum compatibility with that hardware. This was quite
intentional -- what good is support for the IBM PCjr 3-voice sound chip
if the program itself won't run on an IBM PCjr? To that end, MONOTONE's
minimum hardware and software requirements are:
- Any IBM PC or true compatible
- 128KB of RAM
- One floppy disk drive
- Color display (monochrome support will be in a future release)
---[Composing with MONOTONE
The Note system
MONOTONE is calibrated to an equal temperament scale based on the 12th
root of 2; that is, it is identical to that of a piano, with middle A
tuned to 440Hz. MONOTONE recognizes a note/octaves range of A0 through
C9, giving it roughly one more octave than a piano.
Notes are represented in MONOTONE -- and in most trackers -- by the note
followed by the octave. For example, middle C (4th octave) is displayed
as "C-4". If a note is sharp, it is displayed with a sharp symbol, for
example "C#4". (Flats are not represented in most trackers, and as such
are not represented in MONOTONE.)
Movement
Note: All of the movement and editing in this document refers to the
default keyset included with MONOTONE. You can reconfigure every key if
you like; see Appendix A for more details.
Movement in MONOTONE, like most trackers, follows basic user interface
principles:
- Arrow keys move to previous and next rows, and to previous and
next tracks
- PageUp/PageDown move to the top/bottom of a pattern
- Ctrl+PageUp/PageDown move to the previous/next pattern
Think of navigating a spreadsheet, and you'll be able to navigate
MONOTONE.
Editing
Block manipulation of music elements is done by first Mark the source
with ALT+M, then move to the destination and choose the action you want:
SwapTrack: Alt+S (Swaps the marked track to the current track)
PasteTrack: Alt+P (Pastes the marked track to the current track)
PastePattern: Alt+Ctrl+P (Pastes the marked pattern to the current
pattern)
(this section incomplete)
Effects
MONOTONE, like all trackers, gives you the ability to control the music
by adding one or more effects per row or per note. Effects can do
things like speed up or slow down the music, slide a note slightly
higher up or down, or arpeggiate a note.
Effects are entered by moving to the note you wish to add an effect to
and hitting Ctrl+Enter. You can enter one effect per note. All effect __________
data is entered in hexidecimal; this means that values from 0-9 are the ______________________________
same, but 10-15 must be entered as A-F. For those not familiar with
hexidecimal notation, see Appendix B.
The list of effects supported by the MONOTONE Version 1 file format are:
+-----------------------------------------------------------------------+
Effect Form Function _______________________________ | |
|-----------------------------------------------------------------------|
Arpeggiate 0xy Arpeggiate quickly switches between three notes | |
you specify, switching notes on every tick. | |
"x" refers to the 2nd note interval in the | |
triad, and "y" is the 3rd. For example: If you | |
wanted to arpeggiate a major C chord, you would | |
add the effect 047 to a C note, and it would | |
arpeggiate between C-E-G. If you wanted a | |
minor chord, you would use 037 for C-D#-E. | |
|-----------------------------------------------------------------------|
Portamento Up 1xx Portamento Up slides a channel's frequency | |
upwards by "xx" Hz per tick. This is used more | |
for special effects and less for actual | |
portamento; for a more useful portamento, see | |
Portamento To Note. | |
|-----------------------------------------------------------------------|
Portamento Down 2xx Portamento Down slides a channel's frequency | |
downwards by "xx" Hz per tick. This is used | |
more for special effects and less for actual | |
portamento; for a more useful portamento, see | |
Portamento To Note. | |
|-----------------------------------------------------------------------|
Port. To Note 3xx When used with a note in the note column, | |
Portamento To Note will slide upwards or | |
downwards by "xx" Hz per tick until the target | |
note is reached. (When this effect is used, | |
the player engine knows not to actually sound | |
the note, but to remember it as the note to | |
stop sliding to.). Shortcuts: If the note or | |
data value ("xx") is empty, the previous values | |
will be used. This allows you to specify the | |
slide properly (ie. "D-4 305") and then just | |
enter a shorter form if sliding is still needed | |
(ie. "--- 300"). | |
|-----------------------------------------------------------------------|
Vibrato 4xy Vibrato will oscillate the current note by a | |
certain speed ("x") and depth ("y"). The | |
effect has been calibrated in the version 1 | |
file format so that the middle values (3 for | |
speed and 3 for depth) result in a pleasing | |
vibrato. Each depth value is approximately 14 | |
cents, so using 7 for the depth will oscillate | |
+/- one whole note. Shortcuts: If the speed or | |
depth values are empty ("0") then the previous | |
values will be used. This allows you to | |
specify the vibrato once (ie. "--- 433") and | |
then optionally enter a shorter form if to | |
continue vibrato with previous values (ie. "--- | |
400"). | |
+-----------------------------------------------------------------------+
+-----------------------------------------------------------------------+
Pattern Jump Bxx Jumps to order "xx" in the song. | |
|-----------------------------------------------------------------------|
Row Jump Dxx Jumps to row "xx" in the next pattern. Special | |
usage: If you specify both Bxx (see above) and | |
Dxx in the same row, then playback will jump to | |
the exact point specified by Bxx and Dxx. So | |
if you wanted to jump directly to row 32 (hex: | |
20) in order 11 (hex B), you can do that by | |
putting B0B on one track and D20 in another | |
track on the same row, and the jump will be | |
made after the row is done playing. | |
|-----------------------------------------------------------------------|
Set Speed Fxx Sets the speed of the song to "xx" ticks per | |
row. You can set the speed on any note in any | |
row, to alter the speed of the song as you | |
like, as it is playing. | |
+-----------------------------------------------------------------------+
---[Implementation Details:
MONOTONE differs from previous Amiga and PC trackers in a few ways,
mostly because it was designed from the ground up to be as hardware
"agnostic" as possible. Some of these differences are because we are
not limited to the Amiga's legacy (hardware periods, etc.) and others
are because of a rethinking of how a tracker should be designed for a
low-resource PC:
- Full octave range (A0 to C9)
- Perfect equal temperament (ie. middle C is exactly middle C) exactly
- Pattern navigation is optimized for note entry, not data entry
- The Vibrato effect is done by going up/down by proper logrithmic
semitones and not linear frequencies
Despite these differences, the basic interface "concept" in MONOTONE
remains identical to most other trackers, with the exception that, for
consistency, all numerical data in MONOTONE is displayed and entered in
hexidecimal.
---[Known Limitations:
The alpha release of MONOTONE has the following limitations:
- Device support currently limited to PC Speaker arpeggiator output
and Adlib
- Number of tracks limited to 4
- No support for monochrome cards/monitors
The complete feature list previously advertised will be implemented
incrementally in later builds.
For practical reasons, MONOTONE is limited to 12 total tracks regardless
of the actual hardware output device. If you would like this increased,
and have a good reason for doing so :-) contact the author.
---[Usage Tips:
If you want a particular keyboard combination and the keyboard config
utility isn't registering it, blame your keyboard BIOS. For maximum
compatibility on PC clones, MONOTONE uses the BIOS keyboard routine for
input. Some combinations are simply not registered depending on the
clone BIOS. (If it's any consolation, some keypresses aren't registered
by IBM's own XT BIOS! For example, keypad "5" all by itself isn't
processed, nor is Ctrl+Insert, nor Alt+Enter.) If your keypress combo
isn't picked up by the utility, blame the BIOS and choose another.
The pattern "repaint" routine takes up enough CPU time that it
interferes with smooth playback on a 4.77MHz 8088. If you're
experiencing "stuttery" playback in the pattern editor, switch to the
status screen (default key F3) before playing. (Any 286 or later will
not have this problem.)
---[Composing for simple sound devices:
PC Speaker __________
- If targeting the PC Speaker, whether 1-voice or multivoice, try not to
sustain notes if it's not necessary. The pc speaker is not good at
reproducing harmony, so as much time as you can give each invidual
channel is best. (In other words, the more staccato the note, the
better the chance that other notes may be heard.) If you *are* going to
sustain a note, consider giving it a little "flavor" by adding vibrato
where appropriate.
- Due to the nature of the "dominant channel" arpeggiator, the only way
each note will have a chance to be heard is if the speed is (numtracks)
or higher. For example, if you have three tracks with notes on them and
the tickspeed is set at 2 ticks, the first and second notes will sound
but the third won't because on the third tick the row is advanced.
Unless the third note was still sounding in the next row, it will never
have a chance to sound.
Adlib / Sound Blaster _____________________
To hammer home the point that MONOTONE is specifically not a device- not
dependant tracker, I have programmed the Adlib's default instrument to
sound like a PC Speaker. Enjoy the cacophony of 9 simultaneous PC
speakers.
Limitations: The default .SBI instrument supplied with MONOTONE does
not sound properly past 3KHz. This means you can compose up to 7
octaves with an Adlib, but not the full 9. If you want the full 9
octaves, you will have to supply MONOTONE with a better-programmed
instrument.
Tandy/PCjr 3-voice __________________
(not implemented yet)
Creative Music System/Gameblaster 12-voice __________________________________________
(not implemented yet)
Bank Street Music Writer card _____________________________
If you actually own one of these you can consider yourself one of the
luckiest people alive. There is only one of these left in the world
documented by the vintage soundcard hobbyist community to still exist
(owned by me) -- if you have one, drop me a line! The Bank Street Music
Writer card for PCs was bundled with Bank Street Music Writer for DOS;
if you never bought that program, you probably don't own one. If you
do, however, you'll find it is essentially a "PC Mockingboard" built
around a GI AY-3-8913, which itself is a smaller pincount version of the
AY-3-8910.
---[Roadmap
MONOTONE is still in development in what is tentatively called the
"version 1" branch. "V1" is largely defined by the file format designed
for low-resource platforms, and to some degree, the young age of the
program. The following is a list of features either completed or in
development for V1 of MONOTONE:
- 1-4 tracks
- 8 effects (portamento up, portamento down, portamento to note,
vibrato, arpeggio, pattern break, pattern jump, and set speed)
- Basic editing (track/pattern copy/move/erase/transpose)
- PC Speaker (low-resource arpeggiator), Adlib, and Tandy/PCjr
output devices
- Song format limited to 255 different patterns and 32K total note
"cells" (about 128 4-track patterns)
- Color screens (CGA, generic)
- Reconfigurable keyboard interface
Only when the complete feature set listed above has been implemented
will MONOTONE release with a "version 1.0" status.
Features planned for "version 2" include:
- More than 4 tracks (this is mainly held back by screen and speed
constraints)
- The ability to control volume, which leads to two additional
features:
- ADSR volume envelopes (attack, decay, sustain, release)
handled by the player engine. Since this allows for the concept of
"instruments", an "instrument" editor will be created and the file
format and tracker altered to allow for "instrument" changes
- Support for 16 effects (essentially all 16 "base" Protracker
effects)
- More flexible parameters to effects (currently V1 is limited to 3
bits (0-7) per x/y or 6 bits (0-63) per whole number; I plan to
increase this to a full nybble (0-16) and byte (0-255)
respectively)
- Better editing (all previous functionality, but now applicable to
an arbitrary row range)
- True multi-channel PC Speaker output. This might take up too
much CPU time on slow machines to be done in the tracker itself and
may require a standalone player.
- Support for monochrome monitors
I have many further ideas that, while they would be nice, I have not
committed to. The following features may or may not see the light of
day:
- Descendant TSong objects to load MOD or S3M or XM (which also
means a descendant TPlayer object to play them
- Related to the above, and probably more practical, are file
format converters that would convert S3M/MOD/XM to .MON format. I
have a very strong motivation to make one for S3M because there is
a particular tune by virt I would love to convert over...
- Converting MONOTONE to TurboVision for a consistent user
interface that supports windows and mouse control. This would be
induce a truly massive speed hit to display updates on slow
machines, though.
- Better memory management of songs, because a 12-track song
shoehorned into 64K is only going to allow up to 42 different
patterns. (Then again, maybe this isn't such a big deal.)
- Support for noise/percussion. I'm not sure how to implement this
while still keeping in the spirit of MONOTONE, but I recognize how
cool it would be to have it. I think the best way to do this would
be an extension to the "instrument" editor to allow for an
"instrument" to be either an ADSR envelope or a noise thing.
Exactly what "noise" parameters to support will probably be
determined by looking at the AY-3-8910, the TN SN76489, the
Phillips SAA 1099, and maybe the Adlib and seeing what noise
capabilities are common to them?
- Taking advantage of 80-column (and VESA 132-column) text modes.
While this would allow for more information on a single screen, it
would require undoing all of the speed optimizations I've put into
the current display routines.
- Format converters for non-tracker composition programs. I've
composed or transcribed music for such PC programs as Pianoman,
Songwriter, Music Construction Set, Bank Street Music Writer, and
even the 3-voice BASIC PLAY statement. Converting that music into
MONOTONE format would be awesome...
Finally, here is a list of features that I am not planning on
implementing unless I'm getting paid 4 figures or more to do so:
- Extensions for specific output device capabilities (like noise,
percussion, instrument changing, etc.). Device-specific feature
support is contrary to the entire spirit of MONOTONE.
- Support for Impulse Tracker (.IT) files.
---[Contact Information
I can be reached at trixter@oldskool.org. However, if you'd like to
follow MONOTONE development and releases, subscribe to the MONOTONE
mailing list at http://list.oldskool.org/listinfo/monotone
---[Special Thanks
Necros, for planting the seed
Jason B., for OOP help
yesso, for offering to be the first betatester
Phoenix / Hornet, for offering to be second betatester
FireLight, for protracker info
virt, for the mega-awesome 1-bit rickroll
Joe Snow / Nuclear Meltdown Productions, for tandy and adlib sample
code from a LONG way back (get in touch with me!)
Sketchcow, for the name and motivation
Spinsane / ACiD, for the mad wicked ANSI
---[Useless tidbits and trivia
Programming style and philosophy ________________________________
100% of MONOTONE's code and documentation was programmed on a real IBM
PC/XT with CGA. At no point did I "cheat" and program on a modern
platform, not even just to write documentation. This was quite
intentional, to firmly cement myself into the mindset of my target
audience. The rationale was, if I coded on the lowest target hardware,
then surely I couldn't write sloppy code -- if the code ran acceptably
on the slowest machine in the target audience, then it would run
brilliantly on all other machines. This has largely proven to be true
:-)
This practice had an interesting side-effect of returning to dawn-of-
personal-computing programming forms: Instead of rapid-fire development
and testing, like we do today, I found myself thinking and planning way
ahead into the future. (Not just to the next hour of coding, but to the
next few years of coding.) This was no doubt a side-effect of losing _____
the luxury of a fast compiler; since it took 3+ minutes to recompile the
entire program (something that happened once or twice an hour in the
early stages), I was reluctant to code a section unless I was sure it sure
was going to work.
One thing that hampered development was the decision to go object-
oriented. This was this my first real OOP exercise, which slowed the
process to a crawl as I reinvented things like design patterns and
message passing. But much worse was the sheer act of attempting OOP on
a severely limited target platform (4.77MHz 8088). OOP's flexibility
and extensibility comes at the "small" price of nearly triple the
pointer loads and memory accesses of traditional procedural code. For
some platforms, this is not a big deal, but the 8088 takes four cycles
to access a single byte of memory (not to mention that its address
calculations can tack on up to 12 additional cycles). On modern
machines that run at 3 GHz or more, these may seem like trivial
concerns, but believe me, they add up on this slow piece of crap!
BTW: Although it doesn't sound like, it, the term "slow piece of crap"
is an endearing one. I have a lot of love for this machine. Although
it wasn't my first PC (that honor goes to the AT&T PC 6300), it has
definitely become my most favorite over the last 20 years. I've gotten
extremely familiar with the PC/XT's timings and operation, and am
confident that, given some thought, I could make it do anything I wanted
to. (Search for "8088 Corruption" for a prior experiment.)
While it wasn't intentional, I've also gotten very familiar with how
Turbo Pascal 7 generates code, and have tried to balance source code
tricks with readability.
Tools and libraries used to develop MONOTONE ____________________________________________
- Turbo Pascal 7.0 (language, compiler, IDE)
- Aurora (text editing)
- Microsoft Word for DOS v5.5 (documentation)
- SBTIMBRE (Adlib timbre experimentation)
- TheDraw (ANSI handling)
- Michael Abrash's Zen Timer (profiling)
Sample song info ________________
The song "yesso.mon" was the first song ever written in MONOTONE by
someone other than the author.
The song "rickroll.mon" was tracked by virt in about 30 minutes after
about only 90 seconds of showing him MONOTONE and how it worked. He
tracked it directly on my PC/XT. This is notable not only because of
how fast he tracked it, but of how he was able to adapt to a tracker he
had never seen before. I have largely that tune to thank for getting as
many points as I did in the Block Party 2008 Wild Compo.
Display Musings _______________
The opening ANSI was done the old-fashioned way: Contacting the head of
ACiD (RaD MaN) and commissioning an artwork. I then received the final
product with a note, "Is this satisfactory?" For 2008, this was all in
grand tradition: The requestor doesn't know who the artist is until the
artwork has been received, and all communication and requests go through
the group liason. The process was a fun return to early 1990's form.
If you have a true CGA card, your "visual bell" is done via colors in
the overscan border. This little trick currently only works on a real
CGA card and does not show up in any emulator (as of 2008). For a ___
visual bell using the "generic" video driver, I invert the screen
briefly by flipping all of the attribute bits.
Appendix A: Configuring MONOTONE
MONOTONE's default keyset can be completely reconfigured using the
MTCONFIG.EXE utility included with MONOTONE. MTCONFIG.EXE will load the
keyset from DEFAULT.KEY file and allow you to make changes before saving
it back.
If you don't like your custom keyset and want to revert back to the
default keyset, simply delete DEFAULT.KEY and then re-run MTCONFIG.
MTCONFIG will re-create the default keyset when it notices it missing.
Note: If you change the default keyset with MTCONFIG, keep in mind that
the keys listed in the documentation will obviously not match your
keys...
Appendix B: Decimal to Hexidecimal chart
Not everyone is a programmer, so here is a handy decimal-to-hexidecimal
chart for those having trouble getting effect parameters correct:
+----------------+
Decimal Hex ____________ | |
0 0 | |
1 1 | |
2 2 | |
3 3 | |
4 4 | |
5 5 | |
6 6 | |
7 7 | |
8 8 | |
9 9 | |
10 A | |
11 B | |
12 C | |
13 D | |
14 E | |
15 F | |
16 10 | |
17 11 | |
18 12 | |
19 13 | |
20 14 | |
21 15 | |
22 16 | |
23 17 | |
24 18 | |
25 19 | |
26 1A | |
27 1B | |
28 1C | |
29 1D | |
30 1E | |
31 1F | |
32 20 | |
+----------------+
...etc. Hopefully by now you can see the pattern, and can work out the
rest on your own.