Initial commit

This commit is contained in:
root@procul
2021-04-15 13:31:59 -05:00
commit 278a90f7ce
57951 changed files with 34606208 additions and 0 deletions
View File
+414
View File
@@ -0,0 +1,414 @@
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º
º FRANKE.387 º
º º
º Coprocessor Emulation for º
º 387DX and 387SX º
º º
º Version 2.4 º
º º
º (c) Copyright 1989, 1990 by º
º Ingenieurbro FRANKE, º
º All rights reserved. º
º º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Overview
ÍÍÍÍÍÍÍÍ
FRANKE.387 is a software emulation of the arithmetic coprocessors 387DX
and 387SX from Intel. FRANKE.387 was developed for ATs using a 386DX or
386SX processor. MS-DOS or any compatible operation system is required.
The hole instruction set of the 387 coprocessor is available with
FRANKE.387. All 16 or 32 bit addressing modes are supported. No
application program can make out any difference to the real coprocessor.
Of course, FRANKE.387 is not able to increase the physical power of your
computer. FRANKE.387 is slower than a 387 coprocessor, but you can run
every application having no expensive coprocessor. Many application
programs will run up to 2.25 times faster even with FRANKE.387 if they
support a coprocessor.
Shareware
ÍÍÍÍÍÍÍÍÍ
Starting with version 2.4, FRANKE.387 will also be distributed as
shareware. The shareware version does not have all features, the full
version has.
The not registered shareware version may freely be copied and distributed
for free. Everybody may test the not registered version free of charge
for up to 30 days.
All rights, not described above, like selling, changing, distribution of
a registered version or even the use of the not registered version
longer than 30 days are explicitly not permitted, if you do not have a
prior written permission from Ingenieurbro Franke.
Registration
ÍÍÍÍÍÍÍÍÍÍÍÍ
Only registered users may use FRANKE.387 longer than 30 days. The
registered versions do not need any interactions during boot.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Version ³ Fee ³
³ ³ incl. costs ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Shareware version, only one precision level ³ DM 64.00 ³
³ ³ ³
³ Full version, 3 precision levels, High Level Language ³ ³
³ Interface, 387 Instruction Trace Modus ³ DM 99.00 ³
³ ³ ³
³ Upgrade from shareware version to full version ³ DM 44.00 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
We need the following data for your registration:
1. name
2. complete address
3. requested version (shareware/full/upgrade)
Send your registration including the fee to:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Letter/Fax/Check: Payment: ³
³ ³
³ Ingenieurbro FRANKE Ingenieurbro FRANKE ³
³ Rennweg 61 Konto 10039999 ³
³ D-8500 Nrnberg 20, Germany Schmidt Bank, Nrnberg ³
³ Fax: 49 911 535421 BLZ 760 300 70 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
We will deliver your registered version after we received your payment.
Installation
ÍÍÍÍÍÍÍÍÍÍÍÍ
The installation of FRANKE.387 is very easy:
1. Copy the files FRANKE.387 and 387.EXE to your hard disk or boot
floppy.
2. Create the CONFIG.SYS file, if it does not exist.
3. Insert the following line in CONFIG.SYS file:
DEVICE = FRANKE.387
If needed you can include a path description before FRANKE.387,
e.g. DEVICE = c:\tools\FRANKE.387
After the name FRANKE.387 you can use the swiches ON or OFF.
E.g. DEVICE = FRANKE.387 ON.
This swiches specify whether FRANKE.387 will be enable or disabled
during boot. If swiches are missing, FRANKE.387 will be automatically
enabled, if no coprocessor was found, and disabled otherwise.
4. Re-boot the computer.
The entry in the CONFIG.SYS file loads FRANKE.387 every time you
boot. FRANKE.387 comes up with a copyright message and its current
status.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ The not registered shareware version uses an extended copyright ³
³ message and sounds two bell signals. To continue boot you must ³
³ press the key specified in the last line of the screen. - Only ³
³ uppercase letters are accepted! ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
How to use FRANKE.387
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Normally FRANKE.387 needs no user interaction. All actions are started
from the application programs that utilize the coprocessor. So FRANKE.387
does its work automatically. The application programs cannot make out
any difference to the real coprocessor.
Of course, FRANKE.387 must be enabled to work. As described, FRANKE.387
can be enabled or disabled using the swiches ON or OFF at installation.
Normally FRANKE.387 is always enabled, if no coprocessor is installed.
To enable or disable FRANKE.387 after installation, you can use the program
387.EXE. This program may be copied to any directory of your hard disk
or to any floppy disk.
387.EXE allows the following calling options. Some of this options are
supported by the full version only.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Option ³ Functions performed ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 ³ FRANKE.387 will be set to default status. ³
³ ³ I.e. FRANKE.387 will be enabled if no coprocessor is ³
³ ³ installed. It will be disabled if a coprocessor was ³
³ ³ found. ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 ON ³ FRANKE.387 is enabled with full precision. ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 OFF ³ FRANKE.387 is disabled. This may be necessary, if ³
³ ³ you want to re-boot your system with Ctrl+Alt+Del. ³
³ ³ The keyboard driver KEYBOARD.386 will do that auto- ³
³ ³ matically. ³
ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵
³ The following opitons are supported by the full version only. ³
ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵
³ 387 53 ³ FRANKE.387 is enabled with 53 bit precision maximum. ³
³ ³ This corresponds to the data types 'double', 'long ³
³ ³ real' or 'double precision'. Most of the application ³
³ ³ programs do not need more precision. FRANKE.387 will ³
³ ³ run faster using this option. ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 24 ³ FRANKE.387 is enabled with 24 bit precision maximum. ³
³ ³ This corresponds to the data types 'float', 'real' or ³
³ ³ 'single precision'. In most cases, no higher pre- ³
³ ³ cision is needed. FRANKE.387 will run much faster ³
³ ³ using this option. ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 ON I ³ Same as 387 ON, the High Level Language Interface ³
³ ³ is enabled. (See also High Level Language Interface.) ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 53 I ³ Same as 387 53, the High Level Language Interface ³
³ ³ is enabled. This is the suggested standard option for ³
³ ³ the full version. (See also High Level Language ³
³ ³ Interface.) ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 387 24 I ³ Same as 387 24, the High Level Language Interface ³
³ ³ is enabled. FRANKE.387 run at maximum speed, if you ³
³ ³ use this option. (See also High Level Language ³
³ ³ Interface.) ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Speed
ÍÍÍÍÍ
Like any 387 coprocessor, FRANKE.387 supports the three precision levels
for 64, 53 and 24 bit precision. The full version allows the user to
specify the maximum precision to increase computing speed.
The following table shows the aprox. number of CPU cyles. The numbers
are for a 386DX processor and no wait states. In the case of a 386SX or
wait states all numbers should be increased a little bit.
The column EMUL87 shows the speed for the public domain 80287 emulation.
ÚÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄ¿
³ º º º FRANKE.387 º ³
³ Instruct.º Description º 387DX º 64 Bit ³ 53 Bit ³ 24 Bit º EMUL87 ³
ÆÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍ͵
³ FNOP º no operation º 25 º 410 ³ 410 ³ 410 º 1,075 ³
³ FLD º load TByte numberº 38 º 650 ³ 650 ³ 650 º 1,470 ³
³ FSTP º store TByte num. º 55 º 745 ³ 745 ³ 745 º 1,495 ³
ÃÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄ´
³ FADD º Addition º 34 º 700 ³ 700 ³ 680 º 1,460 ³
³ FSUB º Subtraction º 34 º 770 ³ 770 ³ 750 º 1,565 ³
³ FMUL º Multiplication º 52 º 830 ³ 800 ³ 700 º 1,985 ³
³ FDIV º Division º 96 º 840 ³ 840 ³ 710 º 2,340 ³
ÃÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄ´
³ FSQRT º Square Root º 126 º 1,295 ³ 1,060 ³ 805 º 3,135 ³
³ FSIN º Sinus º 490 º 3,960 ³ 3,770 ³ 1,960 º --- ³
³ FCOS º Cosinus º 547 º 4,100 ³ 3,910 ³ 2,070 º --- ³
³ FPTAN º Tangens º 342 º 5,845 ³ 5,400 ³ 2,995 º 13,530 ³
³ FPATAN º Arcustangens º 448 º 8,895 ³ 7,965 ³ 3,750 º 13,875 ³
³ FYL2X º Logarithmus º 492 º 8,690 ³ 7,610 ³ 3,410 º 12,885 ³
³ F2XM1 º Power Function º 317 º 4,385 ³ 3,975 ³ 2,140 º 11,640 ³
ÀÄÄÄÄÄÄÄÄÄÄÐÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÐÄÄÄÄÄÄÄÐÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÐÄÄÄÄÄÄÄÄÙ
High Level Language Interface
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Only the full version contains the High Level Language Interface (HLLI).
The HLLI utilizes the special code for coprocessor instructions, that are
used by several compilers from Microsoft and Borland.
Using this HLLI, FRANKE.387 can execute every instruction much faster.
Normally no application is interfered by the HLLI. If there are any
problems you should disable the HLLI. We suggest that you enable
FRANKE.387 with HLLI and a maximum precision of 53 bits. Using this
option, you have high performance and nearly no risc.
The following tables shows the use of HLLI. The tested program executes
every instruction 100,000 times using random numbers. It was written in
C and compiled with Microsoft C (Microsoft) and Turbo C (Borland).
The CPU was a 386DX, 25MHz. The execution time is shown in seconds.
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º Test program comiled with Microsoft C: º
ÇÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
º C- º º Microsoft º FRANKE.387 º FRANKE.387+HLLI º
º Function º 387DX º Emulation º 64 Bit ³ 53 Bit º 64 Bit ³ 53 Bit º
ÌÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍ͹
º x := y º 0.27 º 0.27 º 0.27 ³ 0.27 º 0.27 ³ 0.27 º
º x < y º 0.71 º 8.63 º 9.56 ³ 9.51 º 8.35 ³ 8.35 º
ÇÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄĶ
º x + y º 0.66 º 8.63 º 9.07 ³ 9.07 º 8.30 ³ 8.24 º
º x * y º 0.71 º 10.49 º 9.67 ³ 9.62 º 8.85 ³ 8.79 º
º x / y º 0.93 º 12.47 º 9.73 ³ 9.73 º 8.90 ³ 8.90 º
ÇÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄĶ
º sqrt(x) º 2.75 º 27.58 º 29.56 ³ 28.74 º 26.32 ³ 25.44 º
º sin(x) º 7.14 º 129.67 º 92.86 ³ 90.11 º 84.62 ³ 82.42 º
º cos(x) º 7.14 º 131.32 º 94.51 ³ 91.21 º 86.26 ³ 82.97 º
º tan(x) º 6.04 º 103.30 º 76.92 ³ 75.82 º 70.88 ³ 69.23 º
º atan(x) º 4.95 º 107.69 º 52.20 ³ 52.20 º 47.25 ³ 46.70 º
º exp(x) º 7.14 º 130.77 º 94.00 ³ 92.31 º 83.52 ³ 81.87 º
º log(x) º 4.95 º 103.30 º 70.33 ³ 65.38 º 65.38 ³ 60.99 º
º pow(x,y) º 9.89 º 217.58 º 143.41 ³ 137.36 º 131.32 ³ 125.27 º
ÈÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍͼ
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º Test program compiled with Borland's Turbo C: º
ÇÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
º C- º º Borland º FRANKE.387 º FRANKE.387+HLLI º
º Function º 387DX º Emulation º 64 Bit ³ 53 Bit º 64 Bit ³ 53 Bit º
ÌÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍ͹
º x := y º 0.57 º 4.47 º 5.74 ³ 5.74 º 5.13 ³ 5.13 º
º x < y º 0.68 º 6.89 º 8.21 ³ 8.21 º 7.32 ³ 7.32 º
ÇÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄĶ
º x + y º 0.79 º 8.59 º 9.31 ³ 9.31 º 8.48 ³ 8.48 º
º x * y º 0.90 º 10.74 º 9.91 ³ 9.80 º 9.08 ³ 8.98 º
º x / y º 1.01 º 11.95 º 9.91 ³ 9.91 º 9.14 ³ 9.09 º
ÇÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄĶ
º sqrt(x) º 1.67 º 19.25 º 17.05 ³ 16.18 º 15.62 ³ 14.69 º
º sin(x) º 3.21 º 38.92 º 29.58 ³ 28.48 º 28.48 ³ 27.93 º
º cos(x) º 3.76 º 38.92 º 30.64 ³ 29.03 º 29.03 ³ 28.48 º
º tan(x) º 3.76 º 68.04 º 39.47 ³ 37.82 º 37.82 ³ 35.63 º
º atan(x) º 4.86 º 44.97 º 47.16 ³ 46.62 º 26.83 ³ 26.29 º
º exp(x) º 8.70 º 68.64 º 102.66 ³ 101.56 º 36.17 ³ 34.53 º
º log(x) º 4.86 º 60.90 º 61.45 ³ 57.05 º 51.01 ³ 46.62 º
º pow(x,y) º 15.05 º 149.67 º 190.88 ³ 184.84 º 107.31 ³ 101.32 º
ÈÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍͼ
Benchmark Tests
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
FRANKE.387 was tested with some popular benchmark programs. The table
shows the results that were reported using a 386DX with 25MHz:
ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÒÄÄÄÄÄÄÄÒÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ³ º º no º FRANKE.387 º FRANKE.387 + HLLI ³
³ Benchmark ³ º 387DX º Copr.º 64 B.³ 53 B.³ 24 B.º 64 B.³ 53 B.³ 24 B.³
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄ×ÄÄÄÄÄÄÄ×ÄÄÄÄÄÄ×ÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄ´
³ ATPERF ³ MHz º 52.5 º ---- º 6.8 ³ 6.8 ³ 7.5 º 6.8 ³ 6.8 ³ 7.5 ³
³ 87TEST ³ MHz º 26.91 º ---- º 1.881³ 1.937³ 2.8 º 1.881³ 1.937³ 2.8 ³
³ BENCH 5.0 ³ s º 0.33 º ---- º 3.66 ³ 3.45 ³ 2.94 º 2.44 ³ 2.30 ³ 1.78 ³
³ TEST41V ³ s º 0.50 º 2.06 º 1.55 ³ 1.50 ³ 1.22 º 1.44 ³ 1.39 ³ 1.17 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÐÄÄÄÄÄÄÄÐÄÄÄÄÄÄÐÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÐÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÙ
The benchmark programs used:
ATPERF: ATPERF -- PC Tech Journal AT Hardware Performance Test
Version 2.00, Copyright (c) 1986, 1987 Ziff Communications Co.
87TEST: 87TEST Version 2.01
Copyright (C) MicroWay, Inc. 1985-1989
BENCH 5.0: PC Magazine Labs Benchmark Series 5.0
TEST41V: SpeedTest Version 4.1, Copyright 1990 by Duane A. Allred
387 Instruction Trace Mode
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Der 387 Instruction Trace Mode is available in the full version only. It
allows completely new methods to debug. The 387 Instruction Trace Mode
shows every executed coprocessor instruction at the screen using the
image:
CS:IP Code Instruc. Operand Address Contents
e.g.:
2AE1:4FD3 D9EC LDLG2
2AE1:4FD6 DEC9 MULP ST(1),ST
2AE1:4FD9 DF5E ISTP Word 30ED:03C4 = 0000
2AE1:4FE6 DB6E LD TByte 30ED:03BA = 3FFF8000000000000000
Once 387 Instruction Trace Mode is enabled, instructions are only
displayed if scroll lock is on. You can toggle output on or off if
you toggle scroll lock on and off.
To single step through coprocessor instructions, hold down the left
shift key and step with the Ctrl key. If the left shift key is pressed,
the 387 Instruction Trace Mode waits for the Ctrl key pressed, before
it resumes the running program.
The 387 Instruction Trace Mode gives you additional features to debug
an application that uses a coprocessor. The 387 Instruction Trace Mode
is completely transparent to the application.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ To use the 387 Instruction Trace Mode you need the program 387TRACE.EXE, ³
³ that you will get together with the full version. This program becomes ³
³ resident at the first call, using about 2800 bytes. 387TRACE toggles ³
³ between 387 Instruction Trace Mode enabled and disabled at each call. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Compatibiliy
ÍÍÍÍÍÍÍÍÍÍÍÍ
FRANKE.387 is a high quality software product. It has efficient
algorithms that uses the full 32 bit power of 386 processors.
FRANKE.387 does exactly the same as a 387 coprocessor. The few minor
differences to the 387 coprocessor are described here:
1. Precision
ÄÄÄÄÄÄÄÄÄÄÄÄ
The 387 coprocessor has always an internal precision of 67 bits. For
less precision only the results are rounded. Instead of that,
FRANKE.387 calculates with a maximum precision of 64 bits. At 64 bit
precision some rounding errors may occur. This rounding errors normally
have no effects. With the 24 and 53 bit precision FRANKE.387 gives always
better results.
2. Rounding
ÄÄÄÄÄÄÄÄÄÄÄ
The only rounding by FRANKE.387 is done with the instruction FRNDINT or
before storing a number from coprocessor stack. The 387 coprocessor
rounds after each calculation. This different rounding makes FRANKE.387
faster. No side effects by this rounding method were detected.
3. F2XM1, FYL2XP1
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
The 387 coprocessor restricts the arguments for the F2XM1 and FYL2XP1
instruction only. FRANKE.387 does not have this restrictions. Every
instruction may be called with any mathematically allowed argument.
4. F2X
ÄÄÄÄÄÄ
FRANKE.387 has the additional instruction F2X (code D9 EF). This
instruction does the same as F2XM1, FLD1, FADDP but without any loss of
precision.
5. FPTAN
ÄÄÄÄÄÄÄÄÄ
FRANKE.387 calculates for tan(ã/2) the result "infinity", which is the
precise result.
6. Exceptions
ÄÄÄÄÄÄÄÄÄÄÄÄÄ
FRANKE.387 is a software emulation. It cannot cause any hardware
interrupt. If any exception occurs, FRANKE.387 will directly execute an
INT 2 instruction. This Interrupt cannot be masked. This is exactly like
the specification of the 387 coprozessor. INT 2 is called for compati-
bility.

File diff suppressed because it is too large Load Diff
+87
View File
@@ -0,0 +1,87 @@
4DECOMP V1.0 (c) 1993 by Akisoft, Vienna
4DOSs New Version 5.0 came up right now! It has a lot of new features,
including BATCOMP.EXE, also from JP Software, which is assumed to compress
.BTM-Files.
Its purpose is to make .BTM-files shorter (to use less space on the hard-
disk) and to make .BTM-files something like "encrypted". That makes it
possible for batch-file-programmers to distribute their files without
distributing the batch-file-source-code, which is imanent to distributing
flat batch-files. The encryption algorithm is as simple as the decryption
algorithm. A very short program, with pascal-source-code, can decrypt such
batch-files. The maximum file-length is, like in .BTM-files, limited to 64k.
File-format of the compressed file:
===================================
(like everything in this package distributed without any warranty)
The first 2 Bytes are equal to EBh BEh, the indicator for compressed 4DOS-
.BTM-files. the next 2 Bytes contain the size of the original BATCH-file.
The encryption (compression) uses the following cheme: from position 5 there
are 30 characters stored, which are the most frequently used characters. The
rest of the file contains nibbles (2 nibbles per byte).The first 14 of the
most frequently used characters have nibble-codes from 2 to 15 (2h to Fh),
the others have 2-nibble-codes (use the same size as one byte, but may be lo-
cated separated inside 2 bytes), the first nibble is always 1 and the second
goes from 0 to 15 (0h to Fh). The nibble code 0 (at a first-level-nibble-
position) is used to indicate that the following 2 nibbles represent one char
in ASCII, but the lower 4 bits swapped with the upper 4 (the 2 nibbles are
swapped). Summary: If there are only a few different chars inside the text,
for example by using a lot of ECHO-directives, the text can be compressed to
one half of its original size (1 char uses only 1 nibble of storage place). If
there are a lot of different characters in the text, and most of them appear
often, it is possible that the "compressed" file is larger than the original
batch-file.
A short example:
Original .BTM-File:
ECHO OFF
echo abcdefghijklmnopqrstuvwxyz
Compressed .BTM-File (HEX-output of DEBUG):
0000 EB BE 28 00 20 46 4F 63-65 68 6F 0D 43 45 48 61 ..(. FOceho.CEHa
0010 62 64 66 67 69 6A 6B 6C-6D 6E 70 71 72 73 74 75 bdfgijklmnpqrstu
0020 76 77 BA C4 24 33 96 57-82 DE 5F 61 01 17 12 13 vw..$3.W.._a....
0030 14 15 16 17 81 81 91 A1-B1 C1 D1 E1 F0 87 09 70 ...............p
0040 A7 .
*) 0000: EB BE, indicates compressed .BTM-file.
*) 0002: 28 00, size of original .BTM-file (0028h=40 bytes).
*) 0005-0011: The very most frequently used characters, 0dh stands
for both 0dh and 0ah (carriage return+line feed).
*) 0012-0022: The other most frequently used characters.
*) 0023-0040: Token for the used characters in the original .BTM-file:
BA = Token bh (Token 11 is "E"), Token ah (Token 10 is "C")
C4 = Token for "H" and "O"
24 = Token for " " and "O"
33 = twice the Token for "F"
96 = Token for NEW-LINE and "e"
57 82 DE 5F = Token for "cho abcd"
61 = Token for "e" and prefix for second table
01 = Token 0 from second table = "f" + prefix for second table
17 = Token 1 from second table = "g" + first Token 7 = "h"
12 13 14 15 16 17 = all token from second table "ijklmn"
81 = Token "o" + prefix, second table
81 91 A1 B1 C1 D1 E1 = Token "pqrstuv" from second table
F0 87 = Token 15 from second table "w" and character 78h="x"
09 70 A7 = again Token for character, character "y", token, "z"
That's it!
Use the program as long as JP software doesn't change the encryption
algorithm ...
The program, source, documentation is uploaded "as is", without any warranty,
etc. Use, modify, copy, and delete the program excessively the way you want,
but keep in mind, the idea was MINE (pow!)!
mfg to all my hacking friends i don't know yet
and "Viele Gruesse aus Oesterreich!"
Akisoft, Vienna (c) december 1993
+476
View File
@@ -0,0 +1,476 @@
44
44 III
44 DDDDDDD ZZZZZZZZZZZZZ
44 DDDDDDDD III ZZZZZZZZZZZZZZ
44 44 DD DD III ZZZ
44 44 DD DD III ZZZ
44 44 DD DD III ZZZ
444444444 DD DD III ZZZ
44444444 DD DD III ZZZ
44 DD DD III ZZZ
44 DDDDDDDD III ZZZZZZZZZZZZZ
44 DDDDDDD III ZZZZZZZZZZZZZ
Version 1.8
4DIZcribe for 4DOS
Documentation
Developed By
Mathijs de Weerdt
Documentation By
Mathijs de Weerdt
Published By
Mathijs de Weerdt
e-mail: mmweerdt@cs.ruu.nl
Holland
CONTENTS
-------------------------------------------------------------------
CONTENTS
Introduction...............................................1
Chapter 1 / Installation...................................2
Chapter 2 / Configuration..................................3
Chapter 3 / Example .INI file..............................4
Chapter 4 / Changes since last version.....................5
Chapter 5 / The author.....................................6
Chapter 6 / Where to get new versions......................8
Chapter 7 / Copyrights and disclaimer......................9
-------------------------------------------------------------------
1 INTRODUCTION
Since a few years I've been using, testing and (re)viewing archive
files. As you all probably know, 4DOS gives us a lot of easy and fast
extensions to the standard COMMAND.COM (read MS-DOS) features (i.e.
descriptions which are shown with the DIR commando). So when I first saw
4DOS, I got addicted at once.
In the archives (mostly .ZIP and some .ARJ) used to be a short
description of the stored files, FILE_ID.DIZ. Then I ran into a short batch
file from Donald Clancy (and I've seen many variants after that one). This
.BTM-file extracted the FILE_ID.DIZ and pushed it into the 4DOS's
DESCRIPT.ION file. So when executing the DIR command this short description
was shown. There was only one real problem: the thing was quite slow.
To be short, after some experimenting I decided to write such a program
(in C). And here it is:
* FILE_ID.DIZ's of every length can be imported
* DESC.SDI's used when FILE_ID.DIZ's not found
* up to 3000 file-descriptions supported in one dir
* descriptions up to 12 lines (=12*40=480 chars)
(limited by 4DOS)
* FILE_ID.DIZ's/DESC.SDI's can be converted:
v truncating lines (take only the first 40 characters of every line)
v excluding lines with less than /c alphanumericals
v excluding @X?? codes (used by PCB or so)
v describing sets of archives (FILE_ID.DIZ is distributed over all files
or only the first one is described)
v maximum lines per file support
v recurse into subdirectory's
* new option: only files without a description will be converted
* quiet option: less output (to screen)
* different extractor names supported (ARJ.exe and PKUNZIP.exe by default)
* very colorfull output screen: with (nearly) all the information you want
(option /d)
* handy 4DIZ.INI file
* nice helpscreen
-------------------------------------------------------------------
2 INSTALLATION
FAST installation: (assuming 4DOS is installed )
1) Put 4DIZ.EXE, 4DHELP.TXT and 4DIZ.INI in a directory.
I'll assume here you call it C:\4DIZ\, but you may substitute
this by any directory you'd like.
2) Add SET 4DIZ_PATH=C:\4DIZ to your AUTOEXEC.BAT.
3) Do one of the following:
1) make an alias 4DIZ=C:\4DIZ\4DIZ
a) by adding "4DIZ C:\4DIZ\4DIZ" to your ALIAS.LST
b) by adding "ALIAS 4DIZ=C:\4DIZ\4DIZ" to your AUTOEXEC.BAT
2) add C:\4DIZ to your PATH statement in AUTOEXEC.BAT
4) Edit 4DIZ.INI and change the options to your needs.
You should at least change the "prog" settings.
(The paths of these archivers probably aren't correct.)
5) Reboot.
Now you've only to type 4DIZ *.* to describe all the files in the
current directory.
If you like this util, you could use your whole holiday to add
DESCRIPTIONMAX=480 to your 4DOS.INI and to change the 4DIZ.INI file
to your likings.
-------------------------------------------------------------------
3 CONFIGURATION
To be short: try all options, see what they do and put the ones you like in
your ALIAS.
Remember: Using the 4DIZ.INI file is much more easier.
These options override the options in the 4DIZ.INI file.
Usage: 4DIZ [options] filename ...
where options is a combination of:
/q quiet mode (absolutely no text display)
gives in combination with /d: no archive info
/t truncate lines
/f fill in short lines with blanks
/s smart describing: only the first one from a serie
/v very smart describing: the first description is
divided over the whole family
/n describe ALL files (not just those without any description)
/e exclude lines with less than /c alphanumerical characters (def. 4)
and exclude the "@X**"-codes
/c followed by the minimum amount of alphanumerical characters
in a line
/m followed by the maximum amount of lines of description per file
/r recurse into subdirectory's
/b (blanks) disable space convert to 255 (space is converted to ascii 255
because 4dos otherwise wraps the lines at the last space character
and not at the 40th character)
/d colorfull display with lots of useless/usefull information
/p pause just before returning to DOS with the /d isplay option
/h or /? this screen
and filename ... is a list of filenames or wildcards (or both).
It's possible to use other than the default extraction program.
(PKUNZIP -- -+ -) -o for .ZIP files) Therefore you MUST change
the .INI file options starting with "ext", "prog" and "opt".
There is a limit to the amount of parameters: this program
checks only the first 127 characters or so.
(that's because of this *&#%^$! compiler)
And there's also a limit to the amount of files to describe. When you
are describing more than 2000 files an (m)allocation error will occur.
It's possible to use a 4DIZ.INI file. If the file isn't in the current
path, the environment variable 4DIZ_INI will be used to find it.
(i.e. SET 4DIZ_PATH=c:\4diz\). 4DIZ.INI can be used in addition
to the command line options. Command-line options will overwrite the
options from the INI-file. An example 4DIZ.INI is included in this
package. See also the next chapter.
My favourite command-line is: 4diz /t /v /m4 /c5 /d /q *.*
this could be an alias: alias 4d = 4diz /t /v /m4 /c5 /d /q *.*
But it can also be edited in an INI-file.
Another nice try is: 4diz /b /e *.*.
Now I only have to type 4d.....and all the files in my directory
are described !!!
-------------------------------------------------------------------
4 EXAMPLE 4DIZ.INI
;4DIZ.INI
;
;Empty lines, lines starting with a ; and lines without a = are ignored.
;Please don't use spaces in the option-lines.
;No,nO,NO,Yes,yEs,yeS,YEs,YeS,yES and YES are not recognized:
;Please use only yes and no (lower-case)
;Archivers:
;ext1,ext2,...,ext9:
; extentions for the archives (to detect what program to use)
; without points, a digit indicates any digit
;prog1,prog2,...,prog9:
; path and program names
;opt1,opt2,...,opt9:
; options to use
ext1=ARJ,A00,000
ext2=ZIP
ext3=UC2
ext4=RAR
ext5=CRU
ext6=DWC
ext7=LZH
ext8=ARC
prog1=f:\program\pak\arj\arj.exe
prog2=f:\program\pak\infozip\unzip\unzip386.exe
prog3=f:\program\pak\uc2\uuc.exe
;remember to start 4diz with "US 4DIZ [options] filename"
prog4=f:\program\pak\rar\rar.exe
prog5=f:\program\pak\crush\uncrush.exe
prog6=f:\program\pak\dwc\dwc.exe
prog7=f:\program\pak\lha\lha.exe
prog8=f:\program\pak\arc\arc.exe
opt1=x -y -v -ja1
opt2=-C -o
opt3=e
opt4=e -y -c-
opt5=-q -e
opt6=e!
opt7=e
opt8=e
DestinationFile=DESCRIPT.ION
;Destination for descriptions. Default=DESCRIPT.ION.
;This file is hidden by default.
DescriptionFiles=FILE_ID.DIZ,DESC.SDI
;Files to extract from the archives and to use to make the descript.ion.
;Default=FILE_ID.DIZ,DESC.SDI
NoDesText=ÿ
;Text to use when no description is found. Default=ÿ.
Quiet=no
;Very little text-display. Default is no.
Display=yes
;Colorfull output-screen. Default is no.
Truncate=yes
;Truncate lines that are too long too fit on the screen. Default is no.
FillLines=yes
;Fill half empty lines up to the end with blanks
Blanks=no
;If yes, blanks are 'normal' space-characters (#20). If no,
;Ascii 255 is used. Default is no.
Mode=VerySmart
;Archive-family mode: Stupid( = default), Smart or VerySmart
OnlyNewFiles=yes
;Describe only the undescribed files in the directory. Default is yes.
ExcludeNonInfo=yes
;Exclude the lines with too little information. Default is no.
CharactersNeeded=5
;At least so many characters are needed to let a line be info. Default is 4.
MaximumLines=4
;The maximum amount of lines per file-description. Default is 12.
;Maximum is 100.
RecurseSubdirs=no
;Recurse into subdirectory's. Default is no.
Pause=no
;Pause after display mode. Default is no.
-------------------------------------------------------------------
5 CHANGES
Changes since last distributed version (v1.7):
1) extended maximumlines from 12 to 100 (by user request)
2) bug fixed: extensions with a number other than zero weren't
detected (i.e. UC2)
v1.6 was not distributed
Changes v1.5:
1) added "Max Line": a brown line which indicates where the description
is truncated; no line is displayed when the description is shorter
than maxlines lines and when maxlines >= 12
2) /q /d combination gives now "no archive info"
3) display bug fixed: after trying to describe a non-archive file
some text was displayed on the lower half of the screen in stead of
the upper half
4) added 4DIZ.INI file support with much extra options:
* destination file can be chosen (in stead of descript.ion)
* description files can be chosen (in stead of or in addition to
FILE_ID.DIZ and DESC.SDI)
* nodescription option: chose the description to add when the program
can't find any description
* added self-define archives: up to 9 archivers support
5) reversed working of /n option: if /n is used, all files will be
described and if /n is omitted only files without a description
will be described
I did this because one user forgot to use /n and lost 20 descriptions.
6) improved /? /d combination (better help)
7) removed memory allocation bug
8) changed quiet option: this is really quiet now, but two times slower
Changes since v1.4:
1) added /b : disable "space to ascii 255 convert" (per request)
2) added /d : nice colorfull output screen
3) added /p : pause before leaving display screen
4) added DESC.SDI support ( when FILE_ID.DIZ can't be found )
5) improved "same family" recoginizing with /v and /s
6) breaking the 100 files barrier ! It's now possible to describe
directory's with about 3000 files !
7) improved truncating options: try /t and /f (and /b)
/w option removed
v1.3 was not distributed
Changes since v1.2:
1) finally got .arj multi-volume support right
2) added environment-variable usage:
4DIZ_UNZIP for unzipping program
4DIZ_UNZIP_OPT for unzipping program options
4DIZ_ARJ for arj extracting program
4DIZ_ARJ_OPT for arj extracting program options
"old" options /z and /a will be removed in the near future
this fixes the following "bug":
a) lower case file_id.diz not found (just upper case)
when using case-sensitive archives
3) added "recurse into subdirectory" option (/r)
v1.1 was not distributed
Changes since v1.0:
1) better error report
2) debug mode removed -> less code
3) bugs fixed: a) with long FILE_ID.DIZ's (near 8K)
b) sort function didn't work (for multiple volume)
c) /a and /z options didn't work as they should
4) added /c : minimum amount of characters per line (now default 4)
5) added /m : maximum amount of lines per file
6) added /n : only new files
Things to do, but which probably will never be implemented:
1) /l : remove lines with words out of list-file
2) /c : edit every description
3) define exit-codes
Known bugs (I'll try to fix them as soon as possible, please mail me
to report these or other bugs) :
1) sometimes the error: "Null pointer assignment" is displayed along
with some junk, maybe only when trying to describe all files, but
only one file doesn't have a description
-------------------------------------------------------------------
6 THE AUTHOR
Author: This util is made by Mathijs de Weerdt. (Yeah, that's me !)
I'm born in Holland in 1976. And now I'm studying in Utrecht.
(That's also in the Netherlands.)
I'd like to hear what you think of my program. I'll fix all
bugs (when reported) as soon as possible. Please mail me your
suggestions etc. I'll be happy to code them and send you the
new version.....
My adress (e-mail): mmweerdt@cs.ruu.nl
MAIL ME !
Happy dizcribing !
-------------------------------------------------------------------
7 WHERE
You can get the newest version from the following URL (this can be accessed
by almost every WWW-client) (preferrably using Netscape):
http://huizen.dds.nl/~mmweerdt
It can also be found at Cyber City BBS (see below for more info).
At least every half version (1.0, 1.5, 2.0, etc.) will be uploaded to SimTel.
So 4DIZ can be ftp'ed at every SimTel mirror. Ask a cyberpunk for your
nearest SimTel mirror. I'll put it online as "4diz??.zip" with
??=versionnumber (i.e. 17 for v1.7). So this version can be found under
"4diz17.zip".
-------------------------------------------------------------------
8 COPYRIGHTS AND DISCLAIMER
Copyrights
* This program is not in the public domain. You are hereby
granted a limited right to copy the program and pass it on to
friends and upload it to any bulletin board system, provided
no fee is charged other than a nominal disk fee. You may use
the program for up to YOUR WHOLE LIVE without registering it.
If you use it for more than this, please register. Site
licenses are available for corporate use. Contact the author
for more information.
Disclaimer
* 4DIZ is distributed without warranty, expressed or implied,
including without limitation the warranties of merchanta-
bility and of fitness for a particular purpose. You, the
user, assume full responsibility for the selection and use of
4DIZ to achieve your desired results.
Another Introduction
* 4DOS, the outstanding COMMAND.COM replacement created by
J.P. Software, allows a file description of up to 512
characters to be created. The 4DOS file commands such as
copy, move and delete cause the description to follow the
file. In other words, if you copy a file with a description
from the c: drive to the a: drive, the description will be
added to the a: drive file automatically. The DIR command
then displays the descriptions next to the files similar
to the file lists on many BBS's. 4DOS provides a simple,
command line editor for the descriptions.
4DIZ does not, however, require 4DOS. You may use it with or
without 4DOS to create descriptions for disk catalog programs
that support 4DOS style descriptions, such as 4Cat v. 1.40.
* 4DOS is a trademark of J. P. Software
* This last Chapter was copied from the documentation of FDE,
an editor for 4DOS-descriptions, thanks Earl R. Davidson !
* Cyber City BBS is Located in Malaysia:
-----------------------------------------------------------------------------
+60-3-758-7400 (8 lines) 24 hrs * PCBoard 15.22M/100 * 2400-28.8k (V34/VFC)
Dist. Site for Morgul Player * Inertia Player * Terminate * GameBase
Software Creations BBS #1810 * Critical Apps. Dist. List (CWSApps)
M'sian BBSes List (MBBS) * Jojo's Top 100 Games Chart * Electric Storm Soft.
TBH-Softworx * Ashrella/TXDS Doors * CommNet/Win/Win95
========== Sales site for modems/peripherals, PCBoard BBS software =========
Email SysOp@cyberhq.po.my john-lim@cyberhq.po.my (CoSys) * FidoNet 6:609/73
-----------------------------------------------------------------------------
File diff suppressed because it is too large Load Diff
+235
View File
@@ -0,0 +1,235 @@
Released July 4th, 1993
Õ͵ 4_Drive Utilities v1.0 ³ Multiple Port Address AT/IDE Drive Inquiry
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Dustbowl Designs, Inc. ³ 0 MB ³ ³ 153 MB ³
³ "Dedicated to enhancing the ³ ðþðððððððððððð ³ ³ ð*ðððððððððððð ³
³ world's personal computers." ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ (405) 741-4705 Voice Drive 0 Drive 1
³ (405) 741-2721 BBS Port Address: 170 (secondary)
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Copyright 1993 by Dustbowl Designs, Inc. All rights reserved. ³
³ 12600 S.E. 38th Street, Choctaw, Oklahoma USA 73020-6107 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
You are free to copy this software and distribute it to other users as
long as the archive file is distributed in its entirety with this text
file included in the archive.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³±±± Introduction ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
We've decided to release to the public a handy in-house AT/IDE inquiry
utility. What's particularly useful about this rendition is that you
may talk to drives that are attached to either the Primary or
Secondary Port Addresses. This ability dovetails nicely with our
3_Drives and DiskQwik shareware utilities. Also, we've emphasized the
newer Multiple Sectors, DMA and LBA transfer options that are soon to
be more generally available on AT/IDE drives.
The 4_Drive Utilities is designed to assist in the use of our
3/4_Drives and DiskQwik products by suggesting the command line
switches that these programs may use. This utility also serves as a
basic AT/IDE Inquiry that can give you the Cylinder, Head, Sectors per
Track geometry used by your AT/IDE drive.
This inquiry is defined and works on AT/IDE and ESDI interface
drives.
Plans for 4_Drive Utilities include MBR and Partition Record
preparation and analysis, Multiple Sectors transfer rate test and much
more.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³±±± Command Line Switches ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
This program will accept three basic command line switches. If no
command line switches are placed, then the program will run
interactively, asking for which Port and which Drive:
[P]rimary or [S]econdary: s
Drive [0] or [1]: 1
You can load this info up on the command line as: 4DRVUTIL s 1
Additionally, if you place the m on the command line, all hi-ASCII
bytes will be masked out of the hex data dump. This is useful when
printing, as these characters can cause unpredictable results.
Example: 4DRVUTIL s 1 m >drive2-1.dat
(then hit the enter key a few times..) will create an ASCII file of
this program's output....
Drive/Controller Model: My Drive MD-123A
Serial number: 00123456789000000000, Controller firmware: REV. AA
Cylinders: 969, Heads: 9, Sectors: 36
DMA mode: NOT AVAILABLE
LBA mode: NOT AVAILABLE
Multiple sector mode: 64 sector/interrupt max
switches: 3/4_Drives m0+ or m0 (either 64 or 32 sectors per interrupt)
DiskQwik b064 rm0 wm0
Buffer size: 128 KBytes (256 sectors)
A dual ported multi-sectored buffer capable of simultaneous transfers with
a read caching capability.
Word Offset Data----------------------------------- ASCII------------------
0 0000 4A32 C903 0000 0900 9051 4402 2400 100C J2 .. .. .. .Q D. $. ..
8 0010 0B00 0F00 3030 3231 3433 3635 3837 3039 .. .. 00 21 43 65 87 09
16 0020 3030 3030 3030 3030 0300 4000 0400 4552 00 00 00 00 .. @. .. ER
24 0030 2E56 4120 2041 794D 4420 6972 6576 4D20 .V A A yM D ir ev M
32 0040 2D44 3231 4133 2020 2020 2020 2020 2020 -D 21 A3
40 0050 2020 2020 2020 2020 2020 2020 2020 0100 ..
48 0060 0000 0100 0000 0000 0000 0000 0000 0000 .. .. .. .. .. .. .. ..
56 0070 0000 0000 0000 0000 0000 0000 0000 0000 .. .. .. .. .. .. .. ..
64 0080 0000 0000 0000 0000 0000 0000 0000 0000 .. .. .. .. .. .. .. ..
etc.....etc
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³±±± Outline ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
The structure of the 256 words (512 bytes) is as follows:
0 General configuration
1 cylinders (default xlat mode)
2 reserved... ESDI: Removables
3 heads (default xlat mode)
4 bytes per track (unformatted)
5 bytes per sector (unformatted)
6 sectors/track (default xlat mode) hi=reserved lo=SPT
7 IDE:vendor unique... ESDI: bytes intersector gap lo=ISG hi=index gap
8 IDE:vendor unique... ESDI: bytes in sync lo=PLO bytes hi=reserved
9 words unique status
10 serial number in ASCII 20 bytes
20 controller or buffer type
21 buffer size in 512 byte blocks
22 ECC bytes transferred in r/w long
23 firmware revision in ASCII 8 bytes
27 model number ID in ASCII 40 bytes
47 number of sectors/interrupt in multiple, 00h = not implemented
bits 8-15 are vendor unique
48 double word transfer flag
49 capabilities...LBA and/or DMA
0-7 vendor unique
8 1=DMA supported
9 1=LBA supported
10-15 reserved
50 reserved...
51 PIO data xfer timing mode lo=vendor unique
52 DMA data xfer timing mode lo=vendor unique
53 translation mode valid for words 54-58, 1-15 is reserved
54 translation cylinders
55 translation heads
56 translation sectors/track
57 number of sectors - low
58 number of sectors - high
59 current multiple setting
0-7 current SPT if multiple valid
8 1=multiple sector valid
9-15 reserved
60 LBA sectors - low
61 LBA sectors - high
62 single word DMA
63 multi word DMA
64 reserved
128 vendor unique data
160 to end= reserved
This section will be expanded in the next release!
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³±±± Legal Disclaimer ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LICENSE AGREEMENT
There is no registration requirement for this version of 4_Drive
Utilities.
4_Drive Utilities All versions.
Dustbowl Designs, Inc. provides the accompanying object code software
("Software") and nonexclusively licenses its use on the following
terms and conditions. The Software is copyrighted by Dustbowl Designs,
Inc. with all rights reserved. YOU ASSUME FULL RESPONSIBILITY FOR THE
SELECTION OF THE SOFTWARE TO ACHIEVE YOUR INTENDED PURPOSES, FOR THE
PROPER INSTALLATION AND USE. Dustbowl Designs, Inc. DOES NOT WARRANT
THAT THE SOFTWARE WILL MEET YOUR REQUIREMENTS, THAT THE SOFTWARE IS
FIT FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL BE
ERROR FREE. Dustbowl Designs, Inc. EXPRESSLY DISCLAIMS ALL WARRANTIES,
WHETHER ORAL OR WRITTEN, EXPRESSED OR IMPLIED, INCLUDING WITHOUT
LIMITATION WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT WILL Dustbowl Designs, Inc. BE LIABLE TO YOU,
YOUR CUSTOMERS OR OTHER USERS FOR ANY INDIRECT, INCIDENTAL,
CONSEQUENTIAL, SPECIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN
CONNECTION WITH THE USE OR INABILITY TO USE THE SOFTWARE.
3_Drives, 4_Drives and DiskQwik are a trademarks of Dustbowl Designs,
Inc. The 4_Drive Utilities software and documentation are Copyright 1993 by
Dustbowl Designs with All Rights Reserved. The 3_Drives v3.0, 4_Drives
v3.0 and 4_Park v1.1 software programs ARE NOT shareware or freeware
and unauthorized redistribution is STRICTLY PROHIBITED.
End of License agreement.
*****************************************************************
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³±±± Revision History ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
v1.0 07/93 - public release of Shareware 4_Drive Utilities v1.0.
Contents of the 4_Drives Utilities Distribution Set. 4DRVU100.ZIP
(4DRVU.ZIP on CompuServe (tm) go IBMHW forum Lib 1)
4DRVUTIL.EXE An AT/IDE Identify Drive inquiry utility that shows
which 3_Drive/4_Drive and DiskQwik command line
switches work best. Designed to work on both Primary
and Secondary Port Addresses.
4DRVUTIL.DOC Auxiliary documentation.
DBOWLDEM.EXE Simple demo that gives a look at registered
4_Drives v3.0 and 4_Park v1.1, and our new DiskQwik
programs.
VENDOR3.DOC Shareware vendor distribution policy
All files dated 7-4-93 02:50:00.
========================
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ 4_Drives and 3_Drives ³
From the ³ The Universal device driver that lets you add ³
makers of: ³ an additional 16-bit interface to your system. ³
³ Add up to two more MFM, RLL, ESDI, or AT/IDE ³
³ Hard Disk Drives to a Secondary Port Address! ³
³ Fast Disk I/O options registered versions. ³
³ ³
³ DiskQwik ³
³ A utility that maximizes the speed potential ³
³ of AT/IDE hard disk drives. Many newer IDE ³
³ drives often have an untapped feature called ³
³ "Multiple Sectors per Interrupt". By activating ³
³ this, you can increase the data transfer rate ³
³ of your hard drive by up to 50% .... ³
³ State of the Art! ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Shareware versions of these programs are available at all better
BBS's! If you can't find a copy locally, feel free to call our BBS.
Dustbowl Designs, Inc. |
12300 S.E. 38th Street |
Choctaw, Oklahoma 73020-6107 |
U.S.A. | CIS: 71062,2542
phone:
(405) 741-4705 ordering, tech support, general information
(405) 741-2721 BBS (9600 HST/v.everything) Tech Support, Hard disk
drive shareware, drive specs, Online Shareware
Registration/Download for VISA or MasterCard orders!
-= EOF 4DRVUTIL.DOC =-

File diff suppressed because it is too large Load Diff
+303
View File
@@ -0,0 +1,303 @@
A86 assembler package V3.22 January 25, 1990
The entire package is Copyright 1986--1990 Eric Isaacson.
All rights reserved.
PLEASE read Chapter 1 for legal terms and conditions, how to
register for the package, and the overview of the assembler.
This manual is huge! A note about printing it occurs at
the bottom of the next page.
If you have never heard of "shareware", and you purchased
this disk from XYZ Software House, that advertises great
software for $5 per disk, you may now be asking the following
QUESTION: "What's going on here? Have I already bought an
assembler, or what?"
ANSWER: Well, no, not exactly. You've bought a disk that has
great software on it; you haven't bought the software yet.
A86, like the vast majority of software offered by the $5-
per-disk distribution houses, is free-distribution software
(also known as "shareware", or "user-supported software").
That means I retain the rights to A86, but I choose to let
people pass it around. I have no business relationship
with any distribution houses in the U.S.; I don't get a
penny of the $5 (or whatever) you paid them for the disk
containing A86. So I need and expect to be paid by you,
because I make my living out of making and supporting
shareware products.
A few distribution houses do a pretty poor job of revealing
the shareware nature of the software they sell. If you
thought you had purchased the software free and clear, you
might feel justified in being angry with them for having
misled you. And you might look around for houses that do a
better job of informing the public. But I hope you'll take
the time to consider everybody's role in the shareware
marketing scene; if you do, I think you'll conclude that
although you may have been misled, you haven't really been
cheated out of anything.
Shareware is great for authors like me, who have spent all
their years in their computer holes, learning to be great
programmers, and no time in business school learning
marketing and distribution techniques. We simply cast our
programs to the winds. They are distributed at practically
no cost to us. That's why we can charge less than
the cost of "commercial" software.
0-2
Shareware is also great for customers like you. You can
try out the software before paying for it. You'll know
that a successful shareware product is good, because only
satisfied customers pay for it. The existence of shareware
infuses healthy competition in the entire software market,
for both price and quality. In the case of A86, I'm
utterly convinced that you'll never find a better value for
an assembler, anywhere.
Finally, let's consider the distribution houses. They
provide a legitimate service, for which they charge a
reasonable price. The best houses act as librarians,
evaluating and cataloguing software. Most pay thousands of
dollars for advertising. Their cut is far less than the
distributor's cut for "commercial" software (they prosper
because their volume is bigger). Most customers for the
distribution houses are repeat customers, who are aware of,
and happy with, what they are getting. If it weren't for
your XYZ House, you might never have heard of A86, or might
never have figured out where to obtain it.
So I hope you'll be happy with shareware, and actively
desire to support it. You'll feel good about promoting a
healthy situation for everybody. And you'll encourage the
best programmers in the world to keep writing for you,
instead of for the big corporations.
Now that I've said that, let's move on to the package. The
A86 package consists of the four programs A86.COM, XREF.COM,
EXMAC.COM, and FAKE.EXE; a collection of source, batch, and
library files used by the demonstration contained in Chapter
2, and a sequence of DOC files that, when printed out in
order, make the manual. Each chapter is a DOC file whose
name is A??.DOC, where ?? runs from 00 though 17. Exception:
chapter 6 is split into A06A.DOC and A06B.DOC. The second
file is wider, and should be printed at 12 cpi if you can
manage it. The other files can print at 10cpi with margins--
You should set your printer to a 1-inch left margin, as the
DOC files do not attempt to provide a left margin for you.
(You can modify the PAGE.8 program to output the appropriate
codes!)
0-3
TABLE OF CONTENTS
CHAPTER 1 INTRODUCTION AND LEGAL TERMS
Introduction 1-1
Legal Terms and Conditions 1-1
Registration Benefits 1-3
Overview of A86 1-4
About the Author 1-6
How to Contact Me 1-6
CHAPTER 2 A86 DEMONSTRATION
Demonstration of A86 and Associated Tools 2-1
Assembling a Very Short Program: PAGE.COM 2-1
Demonstration of Error-Reporting 2-1
Assembling a Longer Program with Library Files: REV.COM 2-1
Using XREF on a medium-sized program: TCOLS.COM 2-2
Using EXMAC 2-2
CHAPTER 3 OPERATION AND REQUIREMENTS
Creating Programs to Assemble 3-1
Program Invocation 3-1
Assembler Switches 3-2
The A86 Environment Variable 3-4
Using Standard Input as a Command Tail 3-5
Strategies for Source File Maintenance 3-6
System Requirements for A86 3-6
CHAPTER 4 ELEMENTS OF THE A86 LANGUAGE
The A86 Language and the A86 Program 4-1
General Categories of A86 Elements 4-1
Operand Typing and Code Generation 4-3
Registers 4-3
Variables 4-3
Labels 4-4
Constants 4-4
Generating Opcodes from General Purpose Mnemonics 4-4
CHAPTER 5 SOME EXCLUSIVE FEATURES OF A86
The IF Statement 5-1
Multiple operands to PUSH, POP, INC, DEC 5-1
Conditional Return Instructions 5-2
A86 extensions to the MOV and XCHG instructions 5-2
Local Symbols 5-3
Operands to AAM and AAD Instructions 5-4
Single-Operand Forms of the TEST Instruction 5-4
Optimized LEA Instruction 5-4
0-4
CHAPTER 6 THE 86 INSTRUCTION SET
Effective Addresses 6-1
Segmentation and Effective Addresses 6-2
Effective Use of Effective Addresses 6-3
Encoding of Effective Addresses 6-4
Table of Effective Address byte values 6-5
How to Read the Instruction Set Chart 6-6
The Instruction Set Chart 6-8
CHAPTER 7 THE FLOATING-POINT PROCESSOR
The 8087 and 287 Coprocessors 7-1
Extra Coprocessor Support 7-2
Emulating the 8087 by Software 7-2
The Floating Point Stack 7-3
Floating Point Initializations 7-3
Built-In Constant Names 7-4
Special Immediate FLD Form 7-4
Floating Point Operand Types 7-5
Operand Choices in A86 7-6
The 87 Instruction Set 7-6
CHAPTER 8 NUMBERS AND EXPRESSIONS
Numbers and Bases 8-1
The RADIX Directive 8-2
Floating-point Initializations 8-3
Overview of Expressions 8-3
Types of Expression Operands 8-4
Numbers and Label Addresses 8-4
Variables 8-4
Index Expressions 8-4
Arithmetic Operators 8-4
HIGH/LOW 8-4
BY 8-5
Addition (combination) 8-5
Subtraction 8-6
Multiplication and Division 8-6
Shifting Operators 8-6
Logical Operators 8-7
Boolean Negation Operator 8-7
Relational Operators 8-8
String Comparison Operators 8-8
Attribute Operators/Specifiers 8-9
B,W,D,Q,T Memory Variable Specifiers 8-9
SHORT and LONG operators 8-9
OFFSET operator 8-10
NEAR Operator 8-11
Square Brackets Operator 8-11
Colon Operator 8-11
ST Operator 8-12
TYPE Operator 8-12
THIS and $ Specifiers 8-12
Operator Precedence 8-13
0-5
CHAPTER 9 DIRECTIVES IN A86
Segments in A86 9-1
CODE ENDS and DATA ENDS Statements 9-2
The ORG Directive 9-2
The EVEN Directive 9-3
Data Allocation Using DB, DW, DD, DQ, and DT 9-3
The STRUC Directive 9-6
Forward References 9-6
Forward References in Expressions 9-7
The EQU Directive 9-8
Equates to Built-In Symbols 9-9
The NIL Prefix 9-9
Interrupt Equates 9-9
Duplicate Definitions 9-9
The = Directive 9-10
The PROC Directive 9-10
The ENDP Directive 9-11
The LABEL Directive 9-11
CHAPTER 10 RELOCATION AND LINKAGE
.OBJ Production Made Easy 10-1
Overview of Relocation and Linkage 10-3
The NAME Directive 10-5
The PUBLIC Directive 10-5
The EXTRN Directive 10-6
MAIN: The Starting Location for a Program 10-7
The END Directive 10-7
The SEGMENT Directive 10-8
DATA SEGMENT, STRUC and CODE SEGMENT Directives 10-11
The ENDS Directive 10-11
Default Outer SEGMENT 10-12
The GROUP Directive 10-12
The SEG Operator 10-13
0-6
CHAPTER 11 MACROS AND CONDITIONAL ASSEMBLY
Macro Facility 11-1
Simple Macro Syntax 11-1
Formatting in macro definitions and calls 11-2
Macro operand substitution 11-2
Quoted-string operands 11-3
Looping by operands in macros 11-4
The #L last operator and indefinite repeats 11-5
Character-loops 11-5
The "B"-before and "A"-after operators 11-6
Multiple-increments within loops 11-6
Negative R-loops 11-7
Nesting of loops in macros 11-8
Implied closing of loops 11-8
Passing Operands by Value 11-8
Passing Operand Size 11-8
Generating the Number of an Operand 11-9
Parenthesized Operand Numbers 11-9
Exiting from the Middle of a Macro 11-10
Local labels in macros 11-10
Debugging macro expansions 11-11
Conditional Assembly 11-11
Conditional Assembly and Macros 11-13
Simulating MASM's Conditional Assembly Constructs 11-14
Conditional Assembly and the XREF Program 11-14
Declaring Variables in the Assembler Invocation 11-14
Null Invocation Variable Names 11-15
Changing Values of Invocation Variables 11-15
CHAPTER 12 COMPATIBILITY WITH OTHER ASSEMBLERS
Conversion of MASM programs to A86 12-1
Compatibility-symbols recognized by A86 12-4
Conversion of A86 Programs to Intel/IBM/MASM 12-5
CHAPTER 13 ASSOCIATED TOOLS
XREF Cross-reference and Symbol Listing Facility 13-1
EXMAC Macro Expansion Tool 13-2
A86LIB Source File Library Tool 13-3
Using A86.LIB in A86 Assemblies 13-4
Environment Variable A86LIB 13-5
Forcing a Library Search 13-5
Listings with A86 13-5
Mimicking Tool: FAKE.EXE 13-7
CHAPTER 14 DESCRIPTIONS OF A86 ERROR MESSAGES
CHAPTER 15 RELEASE HISTORY OF A86
CHAPTER 16 RESERVED SYMBOLS IN THE A86 LANGUAGE
INDEX
+331
View File
@@ -0,0 +1,331 @@
CHAPTER 1 INTRODUCTION AND LEGAL TERMS
Introduction
A86 is the finest assembler available, at any cost under any
terms, for the 86-family of microprocessors (IBM-PC, compatibles,
and not-so-compatibles). In contrast to software firms who
attempt to restrict the distribution of their products via
protection-schemes, I encourage free distribution, and trust that
those who use my products will pay for them.
Please keep in mind the fundamental good spirit of
free-distribution software as you endure the following barrage of
legalities. Then evaluate the outstanding value that the A86
package offers you. I assure you that you will not be
disappointed.
Legal Terms and Conditions
This package is provided to you under the following conditions:
1. You may copy the A86Vxxx.ZIP and D86Vxxx.ZIP files, and give
them to anyone who accepts these terms. The copies you
distribute must be complete and unmodified. You do not have
to be registered to distribute this package.
2. Even if you have not yet obtained full execution rights, you
may execute the programs in this package, in order to evaluate
them. If you decide that any of this package is of use to
you, you must become a registered user by sending $50 US ($52
if you are outside North America) to:
Eric Isaacson
416 E. University Ave.
Bloomington, IN 47401-4739
For your convenience, I now accept Visa and MasterCard, by
telephone. My number is (812)339-1811.
For the convenience of users in Great Britain, I have
authorized the firm Shareware Marketing to collect
registrations for me. We'll try to keep the prices about the
same whether you register through me or through them; it's
your choice. Their address is 87 High Street, Tonbridge, Kent
TN9 1RX; telephone 0732 771344. They'll send me a list of
registered users at the end of every month, and I'll send an
acknowledgement to each user when I get the list. So if you
haven't heard from me by the end of the month following your
registration with them, please let me know.
1-2
Your registration includes a single update diskette (5.25
inch, double density), that also includes the A86LIB tool
available to registered users only. You may order further
updates for $10 US, or $12 US if you are overseas. Once you
register for this package, you are registered for all future
versions-- you have permanent rights to execute A86 on one
computer. As long as I'm in business, you can get the latest
version for just the update fee.
I have a combination offer for the A86 and D86 packages.
Instead of $50 + $50 = $100, I charge $80 ($82 overseas) for
both.
I also offer a printed version of this manual, covering both
A86 and D86. The manual is printed on sheets 8.5 inches high
and 7 inches wide, with a plastic ring-style binding so the
book can lay flat. If you order with your registration the
manual is an extra $10 to the U.S., $15 overseas. If you've
already registered and now want the manual, add another $10
($12 overseas) for the update disk that the manual is bundled
with. There is a limit of one manual per computer registered
(except you may reorder when there is a substantial revision
to the manual).
Indiana residents need to add sales tax. At the current rate
of 5%, the prices for Indiana residents are $52.50 for one
product, $63 one product with manual, $84 both products,
$94.50 both products with manual, $21 manual if already
registered.
Educational institutions and training facilities MUST be
registered in order to use A86 in courses. Contact me for
special terms.
Companies and government agencies MUST be registered in order
to use A86 for their work. Again, contact me for special
terms.
3. This package may not be sold to anyone. If the package is
distributed this package on a diskette, any fees collected
must be specified as materials/handling, and may not exceed
$10 for the diskette.
4. The user is completely responsible for determining the fitness
or usability of this package. I will not be liable for any
damages, of any kind, arising from any failure of any programs
in this package to perform as expected.
5. Only permanent registered users can sell or distribute any
programs that you have written or modified using this
assembler. If you do sell or distribute such programs, you
must insure that your registered name (company or individual)
will always be distributed with the program, so that I can
verify your registration. Any individual or company found to
be violating these terms will be liable for triple
registration fees for every machine they own capable of
running my assembler (plus any legal and court costs).
1-3
NOTE that the only computers that need to be registered are
those executing the program A86.COM. The programs produced by
A86 are entirely yours-- there are no "run-time royalties".
6. A86 takes advantage of situations in which more than one set
of opcodes can be generated for the same instruction. (For
example, MOV AX,BX can be generated using either an 89 or 8B
opcode, by reversing fields in the following ModRM byte. Both
forms are absolutely identical in functionality and execution
speed.) A86 adopts an unusual mix of choices in such
situations. This creates a code-generation "footprint" that
occupies no space in your program file, but will enable me to
tell, and to demonstrate in a court of law, if a non-trivial
object file has been produced by A86. The specification for
this "footprint" is sufficiently obscure and complicated that
it would be impossible to duplicate by accident. I claim
exclusive rights to the particular "footprint" I have chosen,
and prohibit anyone from duplicating it. This has at least
two specific implications:
a. Any assembler that duplicates the "footprint" is mine. If
it is not identified as mine and issued under these terms,
then those who sell or distribute the assembler will be
subject to prosecution.
b. Any program marked with the "footprint" has been produced
by my assembler. It is subject to condition 5 above.
Registration Benefits
Thank you for enduring the legalities. They are there to protect
me, and also to convince you that this is my business, from which
I expect to make a living. I'll now return to a softer sell, to
try to make you want to register for my products.
There is a certain amount of ambiguity about when you're still
evaluating A86, and when you're really using A86 and should
register for it. Some cases are clear (e.g., you're a school
using A86 to teach a course); but many are not. In practical
reality, it up to you to decide: you are "on your honor". Also in
practical reality, most users who ought to register haven't, yet.
For most, it's not dishonesty but merely procrastination. So I
have provided some incentives, to prod you into registering.
One incentive is the printed manual, which only registered users
can purchase. I haven't left anything out of the disk version of
the manual, but the printed version is formatted and bound much
more nicely than if you print it yourself.
Another incentive is the tool A86LIB.COM, that lets you create
libraries of source files, to be automatically searched by A86
whenever your program has undefined symbols. This means you can
effectively add procedures of arbitrary power and complexity to
A86's language.
1-4
Also, when you register you're on my mailing list. I'll
occasionally send you notices about what I've added to A86 and
D86 since the last notice. When I bring out new products, you'll
hear about them. (I'm working on a library of source files for
A86, and also a 386 assembler-debugger package.)
Finally, there are the intangible incentives. You know you've
done the right thing. You're letting me know that you appreciate
what I've done. You're letting the world know that quality
software can succeed when distributed as shareware.
Overview of A86
A86 accepts assembly language source files, and transforms them
directly into either: (1) .COM files executable under MS-DOS,
starting at offset 0100 within a code segment; (2) .OBJ files
suitable for feeding to a linker; or (3) object files starting at
offset 0, suitable for copying to ROMs. A86 is a full featured,
professional quality program. I designed A86 to be as closely
compatible to the standard Intel/IBM assembly language as
possible, given that I insisted upon making design and language
enhancements necessary to make A86 the best possible assembler.
Some of A86's most notable features are:
* A86 is blazingly fast-- 4 times as fast as MASM V5.1. In the
best conditions (large program, 8MHz AT, RAM drive) A86
assembles at a rate of over a thousand lines per second.
That's per second. NOT per minute, per second.
* A86 is simple to use. You can feed it a program containing
just machine instructions, without the red tape (NAME, ASSUME,
SEGMENT PARA PUBLIC, PROC, ENDP, END, PUBLIC, EXTRN, etc. etc.)
necessary with other assemblers. The output of A86 can be a
.COM file, ready to execute immediately. You don't have to go
through a linker. Or, if you want to go through a linker, A86
will produce a correct .OBJ file even if no red tape directives
are given-- the default settings are compatible with most
high-level languages. (If you have programs written for that
other assembler containing the red tape directives, you may
leave them in: A86 knows about them, and is programmed to act
upon them when assembling .OBJ files, and ignore them if
assembling .COM files.)
* In spite of its simplicity, A86 encourages modular programming,
even in its .COM mode, with separately-developed source files.
This is because A86 assembles multiple source files in its
invocation line; and because A86 assembles source files faster
than other people's linkers can link their object files. You
get all the advantages of relocation/linkage systems (building
up libraries of reliable program modules that you can piece
together), without the disadvantages (excessive,
time-and-source-code-wasting, confusing red tape).
1-5
* A86 has ample capacity for really large programming projects.
Its symbol table capacity is approximately 1500 10-letter
symbols, plus room for 8K bytes of compressed macro definition
text. (10 letters is an average symbol length; A86 recognizes
up to 127 letters in a symbol.) Plus, A86's generic local label
facility effectively doubles your symbol table capacity.
* A86 has language extension features that, once you start using,
you'll never want to do without. These include multiple
operands to PUSH and POP; conditional returns; MOV from one
segment register to another; assembly time assertion checking;
based structures; and IF (flag) (statement).
* A86's macro processor is the best, achieving an optimal balance
between ease of use and raw power. Its looping and text
concatenation abilities let you define sophisticated macros,
whose calls look just like the machine instructions that
surround them; without the clumsy invocation syntax required by
other macro processors of A86's power.
* A86 provides clear, English error messages, given right at the
point in the source code where A86 detected the error. The
messages are actually inserted into your source file, where you
can read them and correct your code at the same time. You can
remove the messages yourself, or A86 will remove them for you
when it reassembles the file. (Fear not: your original source
is preserved in x.OLD if you want it. Or you can disable this
feature and send error messages to a .ERR file.)
* A86 provides a full complement of assembly time expression
arithmetic operators, compatible with Intel/IBM assemblers. A86
also provides 4-function floating point arithmetic in assembly
time expressions used for floating point initializations (an
A86-exclusive feature).
* A86 assembles the floating point instruction set of the
8087/287/387/IIT coprocessors, and the extended instruction set
of the 186/286/NEC series, including the NEC-unique
instructions.
* A86 has a built-in source file library feature. Any undefined
symbols in your program are automatically searched for in a
special library file A86.LIB, and the associated source files
are automatically assembled. This makes access to library
routines as effortless as it is in the "C" programming
language. A sample A86.LIB file is included in the shareware
version of the package. Only registered users should have the
tool A86LIB, with which you can create your own library files.
* A86 works with an associated symbolic debugger, D86, to make
the finest development environment available for the PC. See
the D86 package for the details of its features.
1-6
About the Author
I am a full-time shareware author. I have worked with Intel
microprocessors since the early days of the 8080. As an employee
of Intel, I was a part of the two-man team that implemented the
first ASM86 assembler. Having worked with all the processors of
the 86 family from the beginning, I know as much as anyone about
their machine-language architecture. I have written a book, The
80386/387 Architecture, by Morse, Isaacson, and Albert, published
by Wiley and Sons, ISBN 0-471-85352-6. Look for it in your
bookstore (or I'll send you a copy for $20, which is $4.95 off
the list price.)
A86 and D86 themselves are extremely mature, solid programs.
They have been in existence since 1984, running first under my
own, proprietary operating system; then later under the Xenix
operating system on Altos computers, used by myself and my
clients. I have been making a decent living from A86 and D86 for
some time now, and with your much-appreciated support, I will
continue to improve my products, and enhance them with new,
related offerings.
How to Contact Me
I have no plans to move from my present location at least through
the millennium. So you can write to:
Eric Isaacson Software
416 East University Ave.
Bloomington, IN 47401-4739
or call (812)339-1811.
Sorry, I can't guarantee to return everybody's long distance
calls. If you'd like to be SURE I'll get back to you, please
invite me to call you back collect, or tell me to charge the cost
of the call to your credit card.
I also accept BBS mail at PC-Link Central, (812)855-7252, which I
try to check into daily. Type J 3 when you get on that system,
to reach my conference. Another BBS which I check into about
twice a week is Indiana On-Line, at (812)332-7227-- type J A86 to
reach my conference on that BBS. I also check into Compuserve
every 10 days or so-- my ID number there is 71520,74.
PLEASE contact me if you find bugs in my programs; I'll fix them!
I accept bug reports from anyone, registered or non-registered,
no questions asked. It's very frustrating to hear about people
telling each other about bugs, and not telling me. I still await
Greg Wettstein's bug list.
+119
View File
@@ -0,0 +1,119 @@
CHAPTER 2 A86 DEMONSTRATION
To give you a feeling for the operation of A86, I have provided
some source files for you to assemble. You should make sure your
current directory (or a PATH directory) is the one that contains
this assembler package, and perform the following operations to
see the assembler package in action:
Assembling a Very Short Program: PAGE.COM
First, let's assemble a very short program; a program that sends
an ASCII form feed (hex 0C) to your line printer. The source for
this program is PAGE.8; type the command TYPE PAGE.8 to see how
simple this program is: note the lack of red tape directives
(NAME, ASSUME, END, PUBLIC, etc.) required by other assemblers.
Now type the command A86 PAGE.8 to assemble the file. If you are
working on a hard disk, make sure you don't blink your eyes after
typing the command; you'll miss the assembly, because A86 is
FAST, FAST, FAST.
You now have a file PAGE.COM, which is an executable program. If
you now type the command PAGE with your printer turned on, and if
your printer recognizes the form feed character, then it should
advance to the next page. You have just created a useful tool.
By altering the DB line in the source code that contains the form
feed, you can create tools to output other control sequences to
your printer.
Demonstration of Error Reporting
Now type the command ERDEMO, invoking the batch file ERDEMO.BAT.
This will invoke an assembly of a source file PAGE.BAD (copied
from PAGE.BL so you can run this demo again), into which I have
deliberately placed an erroneous statement, XCHG BL,AX. Note
that A86 tells you that it has inserted error messages into
PAGE.BAD, and saved the original source in PAGE.OLD.
Now use your favorite text editor to edit PAGE.BAD. You can use
your editor's string search function to find a tilde symbol,
which brackets all A86 error messages. Without altering the
messages, change the BL to BX, and exit your editor. Now type
the command A86 PAGE.BAD to reassemble the file. You should get
a successful assembly. Now type the command TYPE PAGE.BAD, and
note that A86 has removed the error messages for you. Wasn't
that easy?
Assembling a Longer Program with Library Files: REV.COM
Let's see A86 assemble a program with four source files. Type the
command A86 REV.8 to the console. A86 will assemble the REV.8
file you specified, see that there are undefined symbols in the
program, then assemble the files LINES.8, MSDOS.8, and USAGE.8,
listed in the library file A86.LIB, which I created using the
tool A86LIB available only to registered users.
2-2
REV is a tool that exists in the Unix operating system. It is a
"filter"; that is, it reads from standard input, transforms the
input, and outputs the transformed data to standard output. The
transformation that REV performs is to reverse all lines, so that
they come out backwards.
The usefulness of REV is in conjunction with other tools. In
particular, suppose you have a list of words that you wanted
sorted according to their last letters, not their first. You run
the list through REV, to get the words spelled backwards. Then
you run that output through SORT, to sort them that way. Finally,
you run the output of SORT through REV again, to get the words
spelled forwards again, but still sorted according to their
backwards spellings.
The normal usage of REV is, therefore, in conjunction with
redirection of standard input and output; e.g. REV <infile
>outfile. If you want to just see if REV works, type REV, the
enter key, your first name, the enter key, your last name, the
enter key, the F6 key, and the enter key. You'll get your first
and last name spelled backwards.
Using XREF on a medium-sized program: TCOLS.COM
Type the command MTCOLS to execute the batch file MTCOLS.BAT.
Observe that the file assembles the file TCOLS.8 into the program
TCOLS.COM. Then the batch file runs the XREF program, to produce
a cross reference listing TCOLS.XRF of the program.
Type the command TCOLS. The TCOLS program you just assembled
will execute, and notice that you have given it no parameters. It
thus gives you a self-documenting message. Note that towards the
end of the message is an example showing how TCOLS can be used to
print XREF listings. You can do so now by turning your printer
on and typing an appropriate command; e.g., TCOLS <TCOLS.XRF 4 6
80 66 >PRN for 4 columns, skip 6 lines between pages, which are
80 columns by 66 lines.
Using EXMAC
Type the command MEXP, invoking the batch file MEXP.BAT, which
executes the command EXMAC TCOLS <TCOLS.8 >TCOLS.EXP to create a
version of TCOLS with macros expanded. Look at the file
TCOLS.EXP, and note that the DEFAULT macro defined there has had
all of its calls expanded. Type the command A86 TCOLS.EXP and
note that it assembles into TCOLS.COM just as the original file
does.
Type the command EXMAC TCOLS to enter interactive mode. The
program pauses, waiting for you to type in lines. Type a garbage
line, e.g. "abc", and see the line echoed back to you. Now type
the macro call: DEFAULT FOO,7 and see the macro expanded
interactively. Type Control-Z followed by the enter key to exit
the EXMAC program. (On most IBM-compatible computers you can
type F6 to get a control-Z.)
+349
View File
@@ -0,0 +1,349 @@
CHAPTER 3 OPERATION AND REQUIREMENTS
Creating Programs to Assemble
Before you invoke A86 you must have an assembly-language source
program to assemble. A source program is an ASCII text file,
created with the text editor of your choice. The editor must
produce a file that is free of internal records known only to the
editor. Some of the fancier word processors will require you to
use a "plain text" mode to insure that the file is free of such
records.
This manual will fully explain to you the correct syntax of an
A86 program, but it is not intended to teach you about the
86-family instruction set, or about assembly-language interfacing
to your computer or your operating system.
The instruction set charts in Chapters 6 and 7 give concise,
one-line descriptions of each instruction, but they don't go into
any detail about instruction usage. For such detail, I recommend
either one of the two books The 8086/8088 Primer by Stephen P.
Morse, or The 80286 Architecture by Morse and Albert. The latter
book covers the 8087/287 and is recommended if you have a
floating-point coprocessor, or if you wish to explore the
expanded capabilities of the 286. (My 386 book is the latest in
a series in which those two books are predecessors.)
To learn how to make system calls to input from keyboard or disk,
output to screen, printer or disk, etc., you need a book that
covers the MS-DOS operating system and the BIOS for the IBM-PC,
or whatever computer you have if it's non-IBM-BIOS-compatible (if
you don't know whether or not it's compatible, it probably is).
I used Peter Norton's Programmer's Guide to the IBM-PC. If
you're less familiar with assembly language, you will probably
want his Assembly Language Guide to the IBM-PC instead.
Program Invocation
To invoke A86, you must provide a program invocation line, either
typed to the console when the DOS command prompt appears, or
included in a batch file. The program invocation line consists
of the following:
1. The program name A86.
2. The names of the source files you want to assemble. You may
use the wild card delimiters * and ? if you wish, to denote a
group of source files to be assembled. A86 will sort all
matching names into alphabetical order for each wild card
specification; so the files will be assembled in the same
order even if they get jumbled up within a directory.
A86 identifies the end of the source file names when it sees a
name with no extension, or a name with the default object
extension (COM, BIN or OBJ, as described shortly). Sorry, you
cannot have a source file with the default object extension.
3-2
3. You may optionally provide the word TO, to separate the source
file names from the output file names.
4. The name of the output program. If you do not provide an
extension, A86 will assume one of the following extensions:
a. .OBJ if you invoked the +O switch, for linkable object file
production.
b. .BIN if there is no +O switch, but there is an ORG 0 in
your program.
c. .COM otherwise.
If you want your program file to have no extension, you end
the file name with a period.
You have the option to omit both the program file name and the
symbol table file name from the invocation. If you do so, A86
will output the program source.COM (or source.OBJ or
source.BIN) and the symbol table source.SYM; where "source" is
a name derived from the list of source files, according to the
rules described in the section "Strategies for Source File
Maintenance" later in this chapter.
5. The name of the symbol table file. You do not need to give
the .SYM extension: A86 will produce a file with extension
.SYM in any case. In earlier versions of A86 I had allowed
other extensions to be specified, but this meant that by
carelessly permuting names on the command line, you could
destroy a source file-- not good!
You can omit the name of the symbol table file. If you do so,
A86 will use the same root as the output program name. If you
desire no symbol table file, specify the +S switch in your
invocation line or A86 environment variable (described later
in this chapter).
Assembler Switches
In addition to input and output file names, you may intersperse
assembler switch settings anywhere after the A86 program name.
They are all acted upon immediately, no matter where they are on
the command line. Some of the switches are discussed in more
detail elsewhere; I'll summarize them here:
+C causes the assembler to output symbol names with lower case
letters to its OBJ and SYM files. The case of letters is
still ignored during assembly. I output the name as it
appears in the last PUBLIC or EXTRN directive containing it;
if there is no such directive, I use the first occurrence of
the symbol to control which letters are output lower case.
(+C duplicates Microsoft MASM's /mx switch.)
3-3
+c causes the assembler to consider the case of letters within
all non-built-in symbols as significant both during assembly
and for output. Thus, for example, you can define different
symbols X and x. (+c duplicates MASM's /ml switch.)
+D causes the default base for numeric constants to be decimal,
even if the constants have leading zeroes.
-D causes the default base to be hexadecimal if there is a
leading zero; decimal otherwise.
+E causes the error-message-augmented source file to be written
to yourname.ERR within the current directory, in all cases.
With +E, A86 will never rewrite your original source file.
-E causes A86 to insert error messages into your source file,
whenever the file is in the current directory. If the file
is not in the current directory, A86 write an ERR file no
matter what the E switch setting is.
+F causes A86 to generate the 287 form of floating point
instructions (no implicit FWAIT bytes are generated before
the instructions). This mode can also be specified in the
program with the .287 directive.
+f causes A86 to support emulation of the 8087. When A86 sees a
floating point instruction, it generates external references
to be resolved by the standard emulation library (provided by
Microsoft, Borland, etc.). When you LINK your program to the
emulation library, the floating point instructions are
emulated by software. NOTE you must be assembling to a
linkable OBJ file for this mode to have effect; otherwise, +f
is ignored.
-F causes emulation and default-287 to be disabled. You'll
still get 287 generation if there is a .287 directive in your
program.
+Ln causes A86 to implement one or more of the following minor
options for code-generation. All these options enhance MASM
compatibility. The first three do so at the expense of
program size. The number n should be the sum of the numbers
for each of the options selected. For example, +L10 will
select the options numbered 2 and 8.
1 causes A86 to generate a longer (3-byte) instruction form
for an unconditional JMP instruction to a forward
reference local label, e.g. JMP >L1. A86 normally
assumes that since it's a local label, it will be nearby
and the short, 2-byte form will work. With this option
your code will usually be longer than necessary, but
you'll be spared having to occasionally go back and code
an explicit JMP LONG >L1.
2 causes A86 to refrain from optimizing the LEA instruction.
Without this option A86 will replace an LEA with a
shorter, equivalent MOV when it sees the chance.
3-4
4 causes A86 to generate a slightly more inefficient internal
format for memory references within an OBJ file. The
Power C compiler's MIX utility requires the inefficient
form. The makers of Power C refused to support their
customers on this by enhancing MIX, so I am forced to
offer this option.
8 causes A86 to assume that all ambiguous forward reference
operands to instructions other than jumps or calls refer
to memory variables and not offsets or constant values.
You can override this on a one-by-one basis, with the
OFFSET operator.
-L causes A86 to revert to its default for all the above
options.
+O causes A86 to produce a linkable .OBJ file when the output
file name extension is not explicitly given.
-O causes A86 to produce an executable .COM file when the output
file name extension is not explicitly given.
+S suppresses the creation of the symbol table (.SYM) file in
normal (no errors) assembly. This is overridden if you give
an explicit symbols file name in the invocation line.
-S causes the symbol table file to be created in all cases.
+X causes A86 to require that undefined names be explicitly
declared with an EXTRN when A86 is producing a linkable .OBJ
file. The X switch has no effect when A86 is making a .COM
file.
-X causes A86 to quietly assume that all undefined names are
valid external references.
The default setting for all the switches is "minus". Multiple
switches can be specified with a single sign; e.g. +OX is the
same as +O+X.
The A86 Environment Variable
To allow you to customize A86, the assembler examines the MS-DOS
environment variable named "A86" when it is invoked. If there is
such a variable, its contents are inserted before the invocation
command tail, as if you had typed them yourself.
For example, if you execute the command SET A86=+OX while in DOS
(typically in the AUTOEXEC.BAT file run when the computer is
started), then the O and X switches will be "plus", unless
overridden with a "minus" setting in the command line.
3-5
You may also include one or more file names in the A86
environment variable. Those files will always be assembled
first, before the files you specify on the command line. This
allows you to set up a library of macro definitions, which will
always be automatically available to your programs. Thus, for
example, the DOS command SET A86=C:\A86\MACDEF.8 +OX will cause
both the O and X switches to default ON, but will also cause the
file MACDEF.8 of subdirectory A86 of drive C to always be
assembled.
Using Standard Input as a Command Tail
The following feature is a bit advanced. If you're not familiar
with the practice of redirecting standard input, you may safely
skip this section.
A86 can also be configured to take its command arguments from
standard input, in addition to the invocation command tail or the
A86 environment variable. This allows A86 to be used in those
menu-driven systems that don't generate command tails for
programs. It also allows other programs to create lists of files
to be assembled, then "pipe" the list to A86.
Here's how the feature works: when the command argument A86 is an
ampersand &, A86 will prompt for standard input. If the
ampersand is seen but there are other things following it, the
ampersand is ignored.
For example, you can place a list of file names and switch
settings into a file called FILELIST. You can then invoke the
assembler via
A86 <FILELIST &
which will cause the contents of the FILELIST file to be used as
a command line.
You may place an ampersand at the end of your A86 environment
variable. If you do so, then A86 will prompt for file names
whenever it is invoked without any command arguments (you type
A86 followed immediately by the ENTER key to the MS-DOS prompt).
This is the mode used if you have a menu system that can't
generate an invocation command tail.
Note: when you redirect standard input so that it comes from a
file, A86 will read all the lines of the file (up to a limit of
1023 bytes), and substitute spaces for the line breaks. Thus you
may give the file names on individual lines, for readability.
However, if the feature is invoked manually (no redirection), so
that you are typing in the line after the prompt, A86 will take
the first line only. You need to give all your switches and
files on that one line.
3-6
Strategies for Source File Maintenance
A86 encourages modular programming, by letting you break your
source into separate files, with complete impunity. A86 has no
concern whatsoever for file breaks-- it treats the sequence of
files as a single source code stream.
You should consider one or more of the following strategies,
which I have adopted in my source file management:
1. I name all my A86 source files with the same extension, which
is found on no other files. The particular extension I have
chosen is ".8". I did not choose the more common .ASM, because
I have a few source files designed for MSDOS's assembler. If
you don't like .8, I would suggest .A86.
2. I keep a separate subdirectory on my hard disk for each
multi-source-file A86 program I have. Then the simple command
"A86 *.8" performs the assembly for the current directory's
program.
3. I exploit the fact that A86 expands wild cards into
alphabetical order. Whenever I want a source file to be
assembled first (e.g., when it contains variable
declarations), I append a decimal digit to the start of the
file name: 0 for the first file, 1 for the second, etc., for
however many files that need to be explicitly ordered. If a
file needs to come last, I append a "Z" to the start of the
file name.
To accommodate this strategy, I have programmed A86 to a
somewhat complicated algorithm for determining the default
output file name. I use the name of the first source file;
but I truncate the first character if it is a decimal digit.
However, you may have a general-purpose file that must come
first; so I have provided the following exception: if you have
a source file whose name begins with the digit "9", that name
(without the 9) is used. If you don't like this, you can
always explicitly give the program name you want: "A86 *.8
MYPROG".
System Requirements for A86
A86 requires MS-DOS V2.00 or later. No BIOS or lower-level calls
are made by A86, so A86 should run on any MS-DOS machine. Please
let me know if you find this not to be the case.
A86 itself is a small program, and it is fairly flexible about
the memory it uses. You can assemble small files with only 32K
bytes of memory beyond the program itself, which in the current
version is under 22K bytes-- a total of 54K bytes beyond the
operating system. The more memory you have, the more capacity A86
has, in symbol table size, source file size, and output file
size. If it can, A86 will use up to 256K bytes of memory.
3-7
As I just noted, in a small-memory system A86 severely limits the
size of source files. But remember that this doesn't hurt you
badly: you can split up source files with impunity. A86
assembles a sequence of files as if it were a single source
stream (similar to the INCLUDE facility of other assemblers).
+252
View File
@@ -0,0 +1,252 @@
CHAPTER 4 ELEMENTS OF THE A86 LANGUAGE
This chapter begins the description of the A86 language. It's a
bit more tutorial in nature than the rest of the manual. I'll
start by describing the elementary building blocks of the
language.
The A86 Language and the A86 Program
First, let's establish what we mean when we say A86. On one
hand, A86 is the name for my assembly language for the Intel 86
family of (IBM-PC and compatible) computers. Statements written
in this language are used to specify machine instructions for the
86 family and to allocate memory space for program data. On the
other hand, A86 is the name for a program called an assembler,
that translates these human readable statements into a machine
readable form. The input to the assembler is a source file (or a
list of source files) containing assembly language statements.
The output of the assembler is a file containing binary program
code that can either be run as a program on the PC, or combined
with other modules (using a linker) to make a program.
General Categories of A86 Elements
The statements in an A86 source file can be classified in three
general categories: instruction statements, data allocation
statements, and assembler directives. An instruction statement
uses an easily remembered name (a mnemonic) and possibly one or
more operands to specify a machine instruction to be generated. A
data allocation statement reserves, and optionally initializes,
memory space for program data. An assembler directive is a
statement that gives special instructions to the assembler.
Directives are unlike the instruction and data allocation
statements in that they do not specify the actual contents of
memory. Examples of the three types of A86 statements are given
below. These are provided to give you a general idea of what the
different kinds of statements look like.
Instruction Statements
MOV AX,BX
CALL SORT_PROCEDURE
ADD AL,7
Data Allocation Statements
A_VARIABLE DW 0
DB 'HELLO'
Assembler Directives
CODE SEGMENT
ITEM_COUNT EQU 5
4-2
The statements in an A86 source file are made up of keywords,
identifiers, numbers, strings, special characters, and comments.
A keyword is a symbol that has special meaning to the assembler,
such as an instruction mnemonic (MOV, CALL) or some other
reserved word in the assembly language (DB, SEGMENT, EQU).
Identifiers are programmer-defined symbols, used to represent
such things as variables, labels in the code, and numerical
constants. Identifiers may contain letters, numbers, and the
characters _, @, $, and ?, but must begin with a letter, _, or @.
The identifier name is considered unique up to 127 characters,
but it can be of any length (up to 255 characters). Examples of
identifiers are: COUNT, L1, and A_BYTE.
Numbers in A86 may be expressed as decimal, hexadecimal, octal,
or binary. These must begin with a decimal digit and, except in
the case of a decimal or hexadecimal number, must end with "x"
followed by a letter identifying the base of the number. A
number without an identifying base is hexadecimal if the first
digit is 0; decimal if the first digit is 1 through 9. Examples
of A86 numbers are: 123 (decimal), 0ABC (hexadecimal), 1776xQ
(octal), and 10100110xB (binary).
Strings are characters enclosed in single quotes. Examples of
strings are: '1st string' and 'SIGN-ON MESSAGE, V1.0'. The
single quote is one of many special characters used in the
assembly language. Others, run together in a list, are: ! $ ? ;
: = , [ ] . + - ( ) * / > ". The space and tab characters are
also special characters, used as separators in the assembly
language.
For compatibility with other assemblers, I now also accept double
quotes for strings.
A comment is a sequence of characters used for program
documentation only; it is ignored by the assembler. Comments
begin with a semicolon (;) and run to the end of the line on
which they are started. Examples of lines with comments are
shown below:
; This entire line is a comment.
MOV AX,BX ; This is a comment next to an instruction statement.
Alternatively, for compatibility with other assemblers, I provide
the COMMENT directive. The next non-blank character after
COMMENT is a delimiter to a comment that can run across many
lines; all text is ignored, until a second instance of the
delimiter is seen. For example,
COMMENT 'This comment
runs across two lines'
4-3
I don't like COMMENT, because I think it's very dangerous. If,
for example, you have two COMMENTs in your program, and you
forget to close the first one, the assembler will happily ignore
all source code between the comments. If that source code does
not happen to contain any labels referenced elsewhere, the error
may not be detected until your program blows up. For multiline
comments, I urge you to simply start each line with a semicolon.
Statements in the A86 are line oriented, which means that
statements may not be broken across line boundaries. A86 source
lines may be entered in a free form fashion; that is, without
regard to the column orientation of the symbols and special
characters.
PLEASE NOTE: Because an A86 line is free formatted, there is no
need for you to put the operands to your instructions in a
separate column. You organize things into columns when you want
to visually scan down the column; and you practically never scan
operands separate from their opcodes. The only reason that 99%
of the assembly-language programs out there in the world have
operands in a separate column is that some IBM assembler written
back in 1953 required it. It makes no sense to have operands in
a separate column, so STOP DOING IT!
Operand Typing and Code Generation
A86 is a strongly typed assembly language. What this means is
that operands to instructions (registers, variables, labels,
constants) have a type attribute associated with them which tells
the assembler something about them. For example, the operand 4
has type number, which tells the assembler that it is a numerical
constant, rather than a register or an address in the code or
data. The following discussion explains the types associated
with instruction operands and how this type information is used
to generate particular machine opcodes from general purpose
instruction mnemonics.
Registers
The 8086 has 8 general purpose word (two-byte) registers:
AX,BX,CX,DX,SI,DI,BP, and SP. The first four of those registers
are subdivided into 8 general purpose one-byte registers
AH,AL,BH,BL,CH,CL,DH, and DL. There are also 4 16-bit segment
registers CS,DS,ES, and SS, used for addressing memory; and the
implicit instruction-pointer register (referred to as IP,
although "IP" is not part of the A86 assembly language).
Variables
A variable is a unit of program data with a symbolic name,
residing at a specific location in 8086 memory. A variable is
given a type at the time it is defined, which indicates the
number of bytes associated with its symbol. Variables defined
with a DB statement are given type BYTE (one byte), and those
defined with the DW statement are given type WORD (two bytes).
Examples:
4-4
BYTE_VAR DB 0 ; A byte variable.
WORD_VAR DW 0 ; A word variable.
Labels
A label is a symbol referring to a location in the program code.
It is defined as an identifier, followed by a colon (:), used to
represent the location of a particular instruction or data
structure. Such a label may be on a line by itself or it may
immediately precede an instruction statement (on the same line).
In the following example, LABEL_1 and LABEL_2 are both labels for
the MOV AL,BL instruction.
LABEL_1:
LABEL_2: MOV AL,BL
In the A86 assembly language, labels have a type identical to
that of constants. Thus, the instruction MOV BX,LABEL_2 is
accepted, and the code to move the immediate constant address of
LABEL2 into BX, is generated.
IMPORTANT: you must understand the distinction between a label
and a variable, because you may generate a different instruction
than you intended if you confuse them. For example, if you
declare X: DW ?, the colon following the X means that X is a
label; the instruction MOV SI,X moves the immediate constant
address of X into the SI register. On the other hand, if you
declare X DW ?, with no colon, then X is a word variable; the
same instruction MOV SI,X now does something different: it loads
the run-time value of the memory word X into the SI register.
Constants
A constant is a numerical value computed from an assembly-time
expression. For example, 123 and 3 + 2 - 1 both represent
constants. A constant differs from an a variable in that it
specifies a pure number, known by the assembler before the
program is run, rather than a number fetched from memory when the
program is running.
Generating Opcodes from General Purpose Mnemonics
My A86 assembly language is modeled after Intel's ASM86 language,
which uses general purpose mnemonics to represent classes of
machine instructions rather than having a different mnemonic for
each opcode. For example, the MOV mnemonic is used for all of
the following: move byte register to byte register, load word
register from memory, load byte register with constant, move word
register to memory, move immediate value to word register, move
immediate value to memory, etc. This feature saves you from
having to distinguish "move" from "load," "move constant" from
"move memory," "move byte" from "move word," etc.
4-5
Because the same general purpose mnemonic can apply to several
different machine opcodes, A86 uses the type information
associated with an instruction's operands in determining the
particular opcode to produce. The type information associated
with instruction operands is also used to discover programmer
errors, such as attempting to move a word register to a byte
register.
The examples that follow illustrate the use of operand types in
generating machine opcodes and discovering programmer errors. In
each of the examples, the MOV instruction produces a different
8086 opcode, or an error. The symbols used in the examples are
assumed to be defined as follows: BVAR is a byte variable, WVAR
is a word variable, and LAB is a label. As you examine these MOV
instructions, notice that, in each case, the operand on the right
is considered to be the source and the operand on the left is the
destination. This is a general rule that applies to all
two-operand instruction statements.
MOV AX,BX ; (8B) Move word register to word register.
MOV AX,BL ; ERROR: Type conflict (word,byte).
MOV CX,5 ; (B9) Move constant to word register.
MOV BVAR,AL ; (A0) Move AL register to byte in memory.
MOV AL,WVAR ; ERROR: Type conflict (byte,word).
MOV LAB,5 ; ERROR: Can't use label/constant as dest. to MOV.
MOV WVAR,SI ; (89) Move word register to word in memory.
MOV BL,1024 ; ERROR: Constant is too large to fit in a byte.
+241
View File
@@ -0,0 +1,241 @@
CHAPTER 5 SOME EXCLUSIVE FEATURES OF A86
The IF Statement
As a "nudge" in the direction of structured programming, A86
offers the IF statement. Suppose you want to conditionally skip
around just one instruction. Ordinarily, this would require, for
example:
JNZ >L1 ; skip the following move if NZ
MOV AX,BX ; make this move only if Z
L1: ; this label exists only for the above skip
You may replace the above code with the single line:
IF Z MOV AX,BX
The above line generates exactly the same code as the previous 3
lines-- a conditional jump of the opposite condition, around the
statement given in the tail of the IF statement. The statement
can be a macro call, giving you the opportunity to skip something
more complicated.
You may use any condition that would follow the "J" in a
conditional jump instruction, except CXZ, which does not have a
reverse condition. The assembler interprets the condition by
appending a "J" to the beginning of the condition; so that the
symbols "C", "NC", "Z", "NZ", etc. are not reserved by the
assembler, and can be defined in other contexts.
Multiple operands to PUSH, POP, INC, DEC
A86 will accept any number of register operands for the
instructions PUSH, POP, INC, and DEC; it will generate the
appropriate machine instruction for each operand. For example,
the statement PUSH AX,BX is the same as the two statements PUSH
AX and PUSH BX.
A numeric operand appearing in an INC or DEC statement will cause
the previous INC(s) or DEC(s) to be propagated that number of
times. For example, the statement INC AX,4 will generate 4 INC
AX instructions. The statement DEC AL,BX,2 will generate DEC AL,
DEC BX, DEC AL, DEC BX. Sorry, numeric operands are not allowed
if any of the operands affected was a forward reference or
relocatable quantity; e.g., INC FOO,2 where FOO is undefined. In
most such cases, you'll want to code the more efficient ADD FOO,2
anyway.
5-2
Conditional Return Instructions
Programmers accustomed to the conditional return instructions of
the 8080/Z80 will appreciate the following feature: A86 allows
the operand to a conditional jump instruction to be one of the
three RET instructions RET, RETF, or IRET. The assembler will
find a nearby return instruction of the indicated flavor, and use
that as the target for the conditional jump. For example, JZ RET
is the replacement for the 8080's RZ return-if-zero instruction.
In other 8086 assembly languages, you have to find the nearby
instruction yourself, attach a label to it, and use that label.
Note that it does not suffice to attach a label to a single RET
instruction and use that label throughout the program: the range
of conditional jumps is only 128 bytes in either direction.
What happens if A86 does not find a nearby return instruction? In
that case, A86 issues an error, "02 Jump > 128", for the next
matching return instruction in the program. If there is no
subsequent return instruction, the return mnemonic will appear as
an undefined symbol at the end of the program. In either case,
you correct the problem by inserting a free-standing return
instruction at some nearby point in the program, where it will
not affect the existing code (typically following an
unconditional JMP instruction). If there is no good place to
insert a return instruction, you can always replace the "Jcond
RET" with an "IF cond RET".
A86 extensions to the MOV and XCHG instructions
There are a number of MOV and XCHG instructions available in A86
that are not a part of the machine instruction set.
First, moves between segment registers, and of immediate
constants into segment registers are allowed. For example, if
you code MOV ES,DS , the assembler will generate a PUSH DS
followed by a POP ES; which will effect the move that you
intended. If you code MOV DS,0 , the assembler will generate
PUSH AX; MOV AX,0; MOV DS,AX; POP AX. This is mainly a
convenience for D86 users to load segment registers manually.
Second, MOV allows 3 operands. A statement MOV x,y,z is
equivalent to the two statements MOV y,z followed by MOV x,y.
Sorry, but segment overrides are not allowed in conjunction with
3-operand MOVs. The override preceding the MOV is ambiguous in
its meaning; and overrides within operands cannot be handled
correctly by A86. You'll have to code two MOV instructions if
you want either or both to have a segment override.
Third, A86 accepts a MOV of a word-sized memory operand into
another word-sized memory operand. A86 handles this the same way
it handles a MOV of segment registers: it generates a PUSH of the
source followed by a POP of the destination.
5-3
Finally, A86 allows the XCHG of a segment register (except CS)
with any other word-sized quantity, as well as the XCHG of two
word-sized memory quantities. If there is no machine instruction
available for XCHG a,b, then A86 generates PUSH a followed by MOV
a,b followed by POP b.
Local Symbols
If you examine most assembly language program symbol tables, you
will find that the symbols can be partitioned into two levels of
significance. About half the symbols are the names of
procedures and variables having global significance. If the
names of these symbols are chosen intelligently and carefully,
the program's readability improves drastically. (They usually
aren't chosen well, most often because the assembler restricts
symbols to 6 letters, or because the programmer's habits are
influenced by such assemblers.)
The other half of the symbols in a program have a much lower,
local significance. They are only place markers used to
implement small loops and local branching (e.g., "skip the next 2
instructions if the Z-flag is set"). Assigning full-blown names
to these symbols reduces the readability of your program in two
ways: First, it is harder to recognize local jumps for what they
are-- they are usually the assembly language equivalent of high
level language constructs like IF statements and WHILE loops.
Second, it is harder to follow the global, significant symbols
because they are buried in a sea of the place marker symbols in
the symbol table.
A86 solves this problem with local symbols. If a symbol in your
program consists of a single letter followed by one or more
decimal digits (L3, X123, Y37, etc.), then the symbol is a local
symbol. Local symbols do not appear in the A86 XREF
cross-reference listing. They can also be redefined to something
completely different later in the program. Local symbols can be
of any type: labels, memory variables, etc.
Because local symbols can be redefined, you must take care to
specify which one you are referring to in your program. If your
reference is a forward reference (the label occurs further down
in the program from the reference), then the reference must be
preceded by a ">". For example,
L2:
MOVSB
INC BX
LOOP L2 ; lack of ">" means L2 is above this statement
.
.
JNZ >L2 ; ">" indicates L2 is below this statement
.
JMP >L2 ; JMP L2 is disallowed here: cannot overlap ranges
.
L2:
5-4
I recommend that you assign all your local labels the names L0
through L9. If your program is so complex that it needs more
than 10 place holders in any one stretch of code, then that
stretch needs to be rewritten.
Operands to AAM and AAD Instructions
Those of you who have examined 86 family opcodes with an eagle
eye will have noticed a somewhat spurious "0A" opcode generated
after every AAM or AAD instruction. The opcode is there to
provide the constant divisor or multiplicand for the instruction.
Believe it or not, there wasn't enough room in the microcode of
the original 8086 to hold this constant! Although Intel has
never announced the generality of AAM and AAD, it is there: you
can substitute any other constant for 0A (decimal 10), and that
constant will be used. A86 supports this by letting you give a
constant byte-sized operand to AAM or AAD. Particularly useful
are the instructions AAM 16, which unpacks AL into nibbles AH and
AL; and AAD 16, which reverses the process, packing nibbles AH
and AL into AL.
WARNING: A couple of my users point out to me that the AAD
instruction with a general operand won't work on the NEC V20 and
V30 chips. The operand is assumed to be 10 no matter what it
really is. Since a large number of PC "speed up" kits involve
switching to NEC chips, this will be seen on many PC's. You
should not use AAD with an operand if you want your program to
run on everybody's machine. Too bad. AAM works fine, though.
Single-Operand Forms of the TEST Instruction
A86 allows the TEST instruction to have a single operand, to set
the flags according to the value of the operand. If the operand
is a register, A86 generates a TEST of the register with itself.
If the operand is a memory quantity, A86 generates a TEST of the
memory with the constant -1 (i.e., the quantity will be ANDed
with an all 1's constant). For example, instead of TEST DL,DL,
you can code simply TEST DL. Instead of TEST WVAR,0FFFF, you can
code simply TEST WVAR.
Optimized LEA Instruction
Many assembly-language programmers are in the habit of using, for
example, LEA SI,MEMLOC instead of the equivalent MOV SI,OFFSET
MEMLOC to load an immediate value that represents the pointer to
a memory location. However, the LEA instruction form generates
one more byte of object code than the MOV form. A86 recognizes
this situation and generates the more-efficient MOV instruction
when it can. This also applies to register moves: MOV AX,BX
instead of LEA AX,[BX].
5-5
I've gotten a little flak from some users about this feature.
They claim it violates my policy against "behind your back"
actions. But I feel that this feature is completely equivalent
to code optimizations in other situations: the short JMP form
instead of the equivalent near JMP; a byte operand to ADD SI,4
instead of a word operand; the one-byte XCHG AX,BX instead of the
general XCHG rw,ew form; etc, etc, etc. In situations where there
is absolute functional equivalence between forms, A86 tries to
generate the most efficient form. But for those who are not
convinced, I offer the +L2 switch, described in Chapter 3.
Some users have also gotten the mistaken impression, from reading
Intel's confusing specs, that the longer LEA is sometimes faster
than the shorter MOV. This is never the case-- those users are
reading the clock counts for the memory-fetch forms of MOV, not
the register-only or immediate-value forms. If you don't believe
it, try timing 1000 consecutive LEA's in a loop that executes
50000 times, vs. a similar loop with the equivalent MOV.
+349
View File
@@ -0,0 +1,349 @@
CHAPTER 6 THE 86 INSTRUCTION SET
Effective Addresses
Most memory data accessing in the 86 family is accomplished via
the mechanism of the effective address. Wherever an effective
address specifier "eb", "ew" or "ed" appears in the list of 8086
instructions, you may use a wide variety of actual operands in
that instruction. These include general registers, memory
variables, and a variety of indexed memory quantities.
GENERAL REGISTERS: Wherever an "ew" appears, you can use any of
the 16-bit registers AX,BX,CX,DX,SI,DI,SP, or BP. Wherever an
"eb" appears, you can use any of the 8-bit registers
AL,BL,CL,DL,AH,BH,CH, or DH. For example, the "ADD ew,rw" form
subsumes the 16-bit register-to-register adds; for example, ADD
AX,BX; ADD SI,BP; ADD SP,AX.
MEMORY VARIABLES: Wherever an "ew" appears, you can use a word
memory variable. Wherever an "eb" appears, you can use a byte
memory variable. Variables are typically declared in the DATA
segment, using a DW declaration for a word variable, or a DB
declaration for a byte variable. For example, you can declare
variables:
DATA_PTR DW ?
ESC_CHAR DB ?
Later, you can load or store these variables:
MOV SI,DATA_PTR ; load DATA_PTR into SI for use
LODSW ; fetch the word pointed to by DATA_PTR
MOV DATA_PTR,SI ; store the value incremented by the LODSW
MOV BL,ESC_CHAR ; load the byte variable ESC_CHAR
Alternatively, you can address specific unnamed memory locations
by enclosing the location value in square brackets; for example,
MOV AL,[02000] ; load contents of location 02000 into AL
Note that A86 discerned from context (loading into AL) that a
BYTE at 02000 was intended. Sometimes this is impossible, and
you must specify byte or word:
INC B[02000] ; increment the byte at location 02000
MOV W[02000],0 ; set the WORD at location 02000 to zero
6-2
INDEXED MEMORY: The 86 supports the use of certain registers as
base pointers and index registers into memory. BX and BP are the
base registers; SI and DI are the index registers. You may
combine at most one base register, at most one index register,
and a constant number into a run time pointer that determines the
location of the effective address memory to be used in the
instruction. These can be given explicitly, by enclosing the
index registers in brackets:
MOV AX,[BX]
MOV CX,W[SI+17]
MOV AX,[BX+SI+5]
MOV AX,[BX][SI]5 ; another way to write the same instr.
Or, indexing can be accomplished by declaring variables in a
based structure (see the STRUC directive in Chapter 9):
STRUC [BP] ; NOTE: based structures are unique to A86!
BP_SAVE DW ? ; BP_SAVE is a word at [BP]
RET_ADDR DW ? ; RET_ADDR is a word at [BP+2]
PARM1 DW ? ; PARM1 is a word at [BP+4]
PARM2 DW ? ; PARM2 is a word at [BP+6]
ENDS
INC PARM1 ; equivalent to INC W[BP+4]
Finally, indexing can be done by mixing explicit components with
declared ones:
TABLE DB 4,2,1,3,5
MOV AL,TABLE[BX] ; load byte number BX of TABLE
Segmentation and Effective Addresses
The 86 family has four segment registers, CS, DS, ES, and SS,
used to address memory. Each segment register points to 64K
bytes of memory within the 1-megabyte memory space of the 86.
(The start of the 64K is calculated by multiplying the segment
register value by 16; i.e., by shifting the value left by one hex
digit.) If your program's code, data and stack areas can all fit
in the same 64K bytes, you can leave all the segment registers
set to the same value. In that case, you won't have to think
about segment registers--no matter which one is used to address
memory, you'll still get the same 64K. If your program needs
more than 64K, you must point one or more segment registers to
other parts of the memory space. In this case, you must take
care that your memory references use the segment registers you
intended.
Each effective address memory access has a default segment
register, to be used if you do not explicitly specify which
segment register you wish. For most effective addresses, the
default segment register is DS. The exceptions are those
effective addresses that use the BP register for indexing. All
BP-indexed memory references have a default of SS. (This is
because BP is intended to be used for addressing local variables,
stored on the stack.)
6-3
If you wish your memory access to use a different segment
register, you provide a segment override byte before the
instruction containing the effective address operand. In the A86
language, you code the override by giving the name of the segment
register you wish before the instruction mnemonic. For example,
suppose you want to load the AL register with the memory byte
pointed to by BX. If you code MOV AL,[BX], the DS register will
be used to determine which 64K segment BX is pointing to. If you
want the byte to come from the CS-segment instead, you code CS
MOV AL,[BX]. Be aware that the segment override byte has effect
only upon the single instruction that follows it. If you have a
sequence of instructions requiring overrides, you must give an
override byte before every instruction in the sequence. (In that
case, you may wish to consider changing the value of the default
segment register for the duration of the sequence.)
NOTE: This method for providing segment overrides is unique to
the A86 assembler! The assemblers provided by Intel and IBM
(MS-DOS) attempt to figure out segment allocation for you, and
plug in segment override bytes "behind your back". In order to
do this, those assemblers require you to inform them which
variables and structures are pointed to by which segment
registers. That is what the ASSUME directive in those assemblers
is all about. I wrote Intel's first 86 assembler, ASM86, so I
have been watching the situation since day one. Over the years,
I have concluded that the ASSUME mechanism creates far, far more
confusion that it solves. So I scrapped it; and the result is an
assembler with far less red tape. But if your program needs more
than 64K, you do have to manage those segment registers yourself;
so take care!
Effective Use of Effective Addresses
Remember that all of the common instructions of the 86 family
allow effective addresses as operands. (The only major functions
that don't are the AL/AX specific ones: multiply, divide, and
input/output). This means that you don't have to funnel many
through AL or AX just to do something with them. You can perform
all the common arithmetic, PUSH/POP, and MOVes from any general
register to any general register; from any memory location
(indexed if you like) to any register; and (this is most often
overlooked) from any register TO memory. The only thing you
can't do in general is memory-to-memory. Among the more common
operations that inexperienced 86 programmers overlook are:
* setting memory variables to immediate values
* testing memory variables, and comparing them to constants
* preserving memory variables by PUSHing and POPping them
* incrementing and decrementing memory variables
* adding into memory variables
6-4
Encoding of Effective Addresses
Unless you are concerned with the nitty-gritty details of 86
instruction encoding, you don't need to read this section.
Every instruction with an effective address has an encoded byte,
known as the effective address byte, following the 1-byte opcode
for the instruction. (For obscure reasons, Intel calls this byte
the ModRM byte.) If the effective address is a memory variable,
or an indexed memory location with a non-zero constant offset,
then the effective address byte will be immediately followed by
the offset amount. Amounts in the range -128 to +127 are given
by a single signed byte, denoted by "d8" in the table below.
Amounts requiring a 2-byte representation are denoted by "d16" in
the table below. As with all 16-bit memory quantities in the 86
family, the word is stored with the least significant byte FIRST.
The following table of effective address byte values is organized
into 32 rows and 8 columns. The 32 rows give the possible values
for the effective address operand: 8 registers and 24 memory
indexing modes. A 25th indexing mode, [BP] with zero
displacement, has been pre-empted by the simple-memory-variable
case. If you code [BP] with no displacement, you will get
[BP]+d8, with a d8-value of zero.
The 8 columns of the table reflect further information given by
the effective address byte. Usually, this is the identity of the
other (always a register) operand of a 2-operand instruction.
Those instructions are identified by a "/r" following the opcode
byte in the instruction list. Sometimes, the information given
supplements the opcode byte in identifying the instruction
itself. Those instructions are identified by a "/" followed by a
digit from 0 through 7. The digit tells which of the 8 columns
you should use to find the effective address byte.
For example, suppose you have a perverse wish to know the precise
bytes encoded by the instruction SUB B[BX+17],100. This
instruction subtracts an immediate quantity, 100, from an
effective address quantity, B[BX+17]. By consulting the
instruction list, you find the general form SUB eb,ib. The
opcode bytes given there are 80 /5 ib. The "/5" denotes an
effective address byte, whose value will be taken from column 5
of the following table. The offset 17 decimal, which is 11 hex,
will fit in a single "d8" byte, so we take our value from the
"[BX] + d8" row. The table tells us that the effective address
byte is 6F. Immediately following the 6F is the offset, 11 hex.
Following that is the ib-value of 100 decimal, which is 64 hex.
So the bytes generated by SUB B[BX+17],100 are 80 6F 11 64.
6-5
Table of Effective Address byte values
s = ES CS SS DS
rb = AL CL DL BL AH CH DH BH
rw = AX CX DX BX SP BP SI DI
digit= 0 1 2 3 4 5 6 7
Effective
EA byte address:
values: 00 08 10 18 20 28 30 38 [BX + SI]
01 09 11 19 21 29 31 39 [BX + DI]
02 0A 12 1A 22 2A 32 3A [BP + SI]
03 0B 13 1B 23 2B 33 3B [BP + DI]
04 0C 14 1C 24 2C 34 3C [SI]
05 0D 15 1D 25 2D 35 3D [DI]
06 0E 16 1E 26 2E 36 3E d16 (simple var)
07 0F 17 1F 27 2F 37 3F [BX]
40 48 50 58 60 68 70 78 [BX + SI] + d8
41 49 51 59 61 69 71 79 [BX + DI] + d8
42 4A 52 5A 62 6A 72 7A [BP + SI] + d8
43 4B 53 5B 63 6B 73 7B [BP + DI] + d8
44 4C 54 5C 64 6C 74 7C [SI] + d8
45 4D 55 5D 65 6D 75 7D [DI] + d8
46 4E 56 5E 66 6E 76 7E [BP] + d8
47 4F 57 5F 67 6F 77 7F [BX] + d8
80 88 90 98 A0 A8 B0 B8 [BX + SI] + d16
81 89 91 99 A1 A9 B1 B9 [BX + DI] + d16
82 8A 92 9A A2 AA B2 BA [BP + SI] + d16
83 8B 93 9B A3 AB B3 BB [BP + DI] + d16
84 8C 94 9C A4 AC B4 BC [SI] + d16
85 8D 95 9D A5 AD B5 BD [DI] + d16
86 8E 96 9E A6 AE B6 BE [BP] + d16
87 8F 97 9F A7 AF B7 BF [BX] + d16
C0 C8 D0 D8 E0 E8 F0 F8 ew=AX eb=AL
C1 C9 D1 D9 E1 E9 F1 F9 ew=CX eb=CL
C2 CA D2 DA E2 EA F2 FA ew=DX eb=DL
C3 CB D3 DB E3 EB F3 FB ew=BX eb=BL
C4 CC D4 DC E4 EC F4 FC ew=SP eb=AH
C5 CD D5 DD E5 ED F5 FD ew=BP eb=CH
C6 CE D6 DE E6 EE F6 FE ew=SI eb=DH
C7 CF D7 DF E7 EF F7 FF ew=DI eb=BH
d8 denotes an 8-bit displacement following the EA byte, to be
sign-extended and added to the index.
d16 denotes a 16-bit displacement following the EA byte, to be
added to the index.
Default segment register is SS for effective addresses containing
a BP index; DS for other memory effective addresses.
6-6
How to Read the Instruction Set Chart
The following chart summarizes the machine instructions you can
program with A86. In order to use the chart, you need to learn
the meanings of the specifiers (each given by 2 lower case
letters) that follow most of the instruction mnemonics. Each
specifier indicates the type of operand (register byte, immediate
word, etc.) that follows the mnemonic to produce the given
opcodes.
"c" means the operand is a code label, pointing to a part of the
program to be jumped to or called. A86 will also accept a
constant offset in this place (or a constant segment-offset
pair in the case of "cd"). "cb" is a label within about 128
bytes (in either direction) of the current location. "cw" is
a label within the same code segment as this program; "cd" is
a pair of constants separated by a colon-- the segment value
to the left of the colon, and the offset to the right. Note
that in both the cb and cw cases, the object code generated
is the offset from the location following the current
instruction, not the absolute location of the label operand.
In some assemblers (most notably for the Z-80 processor) you
have to code this offset explicitly by putting "$-" before
every relative jump operand in your source code. You do NOT
need to, and should not do so with A86.
"e" means the operand is an Effective Address. The concept of
an Effective Address is central to the 86 machine
architecture, and thus to 86 assembly language programming.
It is described in detail at the start of this chapter. We
summarize here by saying that an Effective Address is either
a general purpose register, a memory variable, or an indexed
memory quantity. For example, the instruction "ADD rb,eb"
includes the instructions: ADD AL,BL, and ADD CH,BYTEVAR, and
ADD DL,B[BX+17].
"i" means the operand is an immediate constant, provided as part
of the instruction itself. "ib" is a byte-sized constant;
"iw" is a constant occupying a full 16-bit word. The operand
can also be a label, defined with a colon. In that case, the
immediate constant which is the location of the label is
used. Examples: "MOV rw,iw" includes the instructions: MOV
AX,17, or MOV SI,VAR_ARRAY, where "VAR_ARRAY:" appears
somewhere in the program, defined with a colon. NOTE that if
VAR_ARRAY were defined without a colon, e.g., "VAR_ARRAY DW
1,2,3", then "MOV SI,VAR_ARRAY" would be a "MOV rw,ew" NOT a
"MOV rw,iw". The MOV would move the contents of memory at
VAR_ARRAY (in this case 1) into SI, instead of the location
of the memory. To load the location, you can code "MOV
SI,OFFSET VAR_ARRAY".
6-7
"m" means a memory variable or an indexed memory quantity; i.e.,
any Effective Address EXCEPT a register.
"r" means the operand is a general purpose register. The 8 "rb"
registers are AL,BL,CL,DL,AH,BH,CH,DH; the 8 "rw" registers
are AX,BX,CX,DX,SI,DI,BP,SP.
WARNING: Instruction forms marked with "*" by the mnemonic are
part of the extended 186/286/NEC instruction set. Instructions
marked with "#" are unique to the NEC processors. These
instructions will NOT work on the 8088 of the IBM-PC; nor will
they work on the 8086; nor will the NEC instructions work on the
186 or 286. If you wish your programs to run on all PC's, do not
use these instructions!
+427
View File
@@ -0,0 +1,427 @@
6-8
Opcodes Instruction Description
37 AAA ASCII adjust AL (carry into AH) after addition
D5 0A AAD ASCII adjust before division (AX = 10*AH + AL)
D4 0A AAM ASCII adjust after multiply (AL/10: AH=Quo AL=Rem)
3F AAS ASCII adjust AL (borrow from AH) after subtraction
14 ib ADC AL,ib Add with carry immediate byte into AL
15 iw ADC AX,iw Add with carry immediate word into AX
80 /2 ib ADC eb,ib Add with carry immediate byte into EA byte
10 /r ADC eb,rb Add with carry byte register into EA byte
83 /2 ib ADC ew,ib Add with carry immediate byte into EA word
81 /2 iw ADC ew,iw Add with carry immediate word into EA word
11 /r ADC ew,rw Add with carry word register into EA word
12 /r ADC rb,eb Add with carry EA byte into byte register
13 /r ADC rw,ew Add with carry EA word into word register
04 ib ADD AL,ib Add immediate byte into AL
05 iw ADD AX,iw Add immediate word into AX
80 /0 ib ADD eb,ib Add immediate byte into EA byte
00 /r ADD eb,rb Add byte register into EA byte
83 /0 ib ADD ew,ib Add immediate byte into EA word
81 /0 iw ADD ew,iw Add immediate word into EA word
01 /r ADD ew,rw Add word register into EA word
02 /r ADD rb,eb Add EA byte into byte register
03 /r ADD rw,ew Add EA word into word register
0F 20 #ADD4S Add CL nibbles BCD from DS:SI into ES:DI (CL even,NZ)
24 ib AND AL,ib Logical-AND immediate byte into AL
25 iw AND AX,iw Logical-AND immediate word into AX
80 /4 ib AND eb,ib Logical-AND immediate byte into EA byte
20 /r AND eb,rb Logical-AND byte register into EA byte
83 /4 ib AND ew,ib Logical-AND immediate byte into EA word
81 /4 iw AND ew,iw Logical-AND immediate word into EA word
21 /r AND ew,rw Logical-AND word register into EA word
22 /r AND rb,eb Logical-AND EA byte into byte register
23 /r AND rw,ew Logical-AND EA word into word register
63 /r *ARPL ew,rw Adjust RPL of EA word not smaller than RPL of rw
62 /r *BOUND rw,md INT 5 if rw not between [md] and [md+2] inclusive
9A cd CALL cd Call far segment, immediate 4-byte address
E8 cw CALL cw Call near, offset relative to next instruction
FF /3 CALL ed Call far segment, address at EA doubleword
FF /2 CALL ew Call near, offset absolute at EA word
0F FF ib #CALL80 ib Call 8080-emulation code at INT number ib
98 CBW Convert byte into word (AH = top bit of AL)
F8 CLC Clear carry flag
FC CLD Clear direction flag so SI and DI will increment
FA CLI Clear interrupt enable flag; interrupts disabled
6-9
0F 12/0 #CLRBIT eb,CL Clear bit CL of eb
0F 13/0 #CLRBIT ew,CL Clear bit CL of ew
0F 1A/0 ib #CLRBIT eb,ib Clear bit ib of eb
0F 1B/0 ib #CLRBIT ew,ib Clear bit ib of ew
0F 06 *CLTS Clear task switched flag
F5 CMC Complement carry flag
3C ib CMP AL,ib Subtract immediate byte from AL for flags only
3D iw CMP AX,iw Subtract immediate word from AX for flags only
80 /7 ib CMP eb,ib Subtract immediate byte from EA byte for flags only
38 /r CMP eb,rb Subtract byte register from EA byte for flags only
83 /7 ib CMP ew,ib Subtract immediate byte from EA word for flags only
81 /7 iw CMP ew,iw Subtract immediate word from EA word for flags only
39 /r CMP ew,rw Subtract word register from EA word for flags only
3A /r CMP rb,eb Subtract EA byte from byte register for flags only
3B /r CMP rw,ew Subtract EA word from word register for flags only
0F 26 #CMP4S Compare CL nibbles CD at DS:SI from ES:DI (CL even,NZ)
A6 CMPS mb,mb Compare bytes ES:[DI] from [SI], advance SI and DI
A7 CMPS mw,mw Compare words ES:[DI] from [SI], advance SI and DI
A6 CMPSB Compare bytes ES:[DI] from DS:[SI], advance SI and DI
A7 CMPSW Compare words ES:[DI] from DS:[SI], advance SI and DI
99 CWD Convert word to doubleword (DX = top bit of AX)
27 DAA Decimal adjust AL after addition
2F DAS Decimal adjust AL after subtraction
FE /1 DEC eb Decrement EA byte by 1
FF /1 DEC ew Decrement EA word by 1
48+rw DEC rw Decrement word register by 1
F6 /6 DIV eb Unsigned divide AX by EA byte (AL=Quo AH=Rem)
F7 /6 DIV ew Unsigned divide DXAX by EA word (AX=Quo DX=Rem)
C8 iw 00 *ENTER iw,0 Make stack frame, iw bytes local storage, 0 levels
C8 iw 01 *ENTER iw,1 Make stack frame, iw bytes local storage, 1 level
C8 iw ib *ENTER iw,ib Make stack frame, iw bytes local storage, ib levels
Fany Floating point set is in Chapter 7
F4 HLT Halt
F6 /7 IDIV eb Signed divide AX by EA byte (AL=Quo AH=Rem)
F7 /7 IDIV ew Signed divide DXAX by EA word (AX=Quo DX=Rem)
F6 /5 IMUL eb Signed multiply (AX = AL * EA byte)
F7 /5 IMUL ew Signed multiply (DXAX = AX * EA word)
6B /r ib *IMUL rw,ib Signed multiply immediate byte into word register
69 /r iw *IMUL rw,iw Signed multiply immediate word into word register
69 /r iw *IMUL rw,ew,iw Signed multiply (rw = EA word * immediate word)
6B /r ib *IMUL rw,ew,ib Signed multiply (rw = EA word * immediate byte)
E4 ib IN AL,ib Input byte from immediate port into AL
EC IN AL,DX Input byte from port DX into AL
E5 ib IN AX,ib Input word from immediate port into AX
ED IN AX,DX Input word from port DX into AX
FE /0 INC eb Increment EA byte by 1
FF /0 INC ew Increment EA word by 1
40+rw INC rw Increment word register by 1
6C *INS eb,DX Input byte from port DX into [DI]
6D *INS ew,DX Input word from port DX into [DI]
6C *INSB Input byte from port DX into ES:[DI]
6D *INSW Input word from port DX into ES:[DI]
6-10
CC INT 3 Interrupt 3 (trap to debugger) (far call, with flags
CD ib INT ib Interrupt numbered by immediate byte pushed first)
CE INTO Interrupt 4 if overflow flag is 1
CF IRET Interrupt return (far return and pop flags)
77 cb JA cb Jump short if above (CF=0 and ZF=0) above=UNSIGNED
73 cb JAE cb Jump short if above or equal (CF=0)
72 cb JB cb Jump short if below (CF=1) below=UNSIGNED
76 cb JBE cb Jump short if below or equal (CF=1 or ZF=1)
72 cb JC cb Jump short if carry (CF=1)
E3 cb JCXZ cb Jump short if CX register is zero
74 cb JE cb Jump short if equal (ZF=1)
7F cb JG cb Jump short if greater (ZF=0 and SF=OF) greater=SIGNED
7D cb JGE cb Jump short if greater or equal (SF=OF)
7C cb JL cb Jump short if less (SF/=OF) less=SIGNED
7E cb JLE cb Jump short if less or equal (ZF=1 or SF/=OF)
EB cb JMP cb Jump short (signed byte relative to next instruction)
EA cd JMP cd Jump far (4-byte immediate address)
E9 cw JMP cw Jump near (word offset relative to next instruction)
FF /4 JMP ew Jump near to EA word (absolute offset)
FF /5 JMP md Jump far (4-byte address in memory doubleword)
76 cb JNA cb Jump short if not above (CF=1 or ZF=1)
72 cb JNAE cb Jump short if not above or equal (CF=1)
73 cb JNB cb Jump short if not below (CF=0)
77 cb JNBE cb Jump short if not below or equal (CF=0 and ZF=0)
73 cb JNC cb Jump short if not carry (CF=0)
75 cb JNE cb Jump short if not equal (ZF=0)
7E cb JNG cb Jump short if not greater (ZF=1 or SF/=OF)
7C cb JNGE cb Jump short if not greater or equal (SF/=OF)
7D cb JNL cb Jump short if not less (SF=OF)
7F cb JNLE cb Jump short if not less or equal (ZF=0 and SF=OF)
71 cb JNO cb Jump short if not overflow (OF=0)
7B cb JNP cb Jump short if not parity (PF=0)
79 cb JNS cb Jump short if not sign (SF=0)
75 cb JNZ cb Jump short if not zero (ZF=0)
70 cb JO cb Jump short if overflow (OF=1)
7A cb JP cb Jump short if parity (PF=1)
7A cb JPE cb Jump short if parity even (PF=1)
7B cb JPO cb Jump short if parity odd (PF=0)
78 cb JS cb Jump short if sign (SF=1)
74 cb JZ cb Jump short if zero (ZF=1)
9F LAHF Load: AH = flags SF ZF xx AF xx PF xx CF
0F 02 /r *LAR rw,ew Load: high(rw) = Access Rights byte, selector ew
C5 /r LDS rw,ed Load EA doubleword into DS and word register
8D /r LEA rw,m Calculate EA offset given by m, place in rw
C9 *LEAVE Set SP to BP, then POP BP (reverses previous ENTER)
C4 /r LES rw,ed Load EA doubleword into ES and word register
0F 01 /2 *LGDT m Load 6 bytes at m into Global Descriptor Table reg
0F 01 /3 *LIDT m Load 6 bytes at m into Interrupt Descriptor Table reg
0F 00 /2 *LLDT ew Load selector ew into Local Descriptor Table reg
0F 01 /6 *LMSW ew Load EA word into Machine Status Word
F0 LOCK (prefix) Assert BUSLOCK signal for the next instruction
6-11
0F 33/r #LODBITS rb,rb Load AX with DS:SI,bit rb (incr. SI,rb), rb+1 bits
0F 3B/0 ib #LODBITS rb,ib Load AX with DS:SI,bit rb (incr. SI,rb), ib+1 bits
AC LODS mb Load byte [SI] into AL, advance SI
AD LODS mw Load word [SI] into AX, advance SI
AC LODSB Load byte [SI] into AL, advance SI
AD LODSW Load word [SI] into AX, advance SI
E2 cb LOOP cb noflags DEC CX; jump short if CX/=0
E1 cb LOOPE cb noflags DEC CX; jump short if CX/=0 and equal (ZF=1)
E0 cb LOOPNE cb noflags DEC CX; jump short if CX/=0 and not equal
E0 cb LOOPNZ cb noflags DEC CX; jump short if CX/=0 and ZF=0
E1 cb LOOPZ cb noflags DEC CX; jump short if CX/=0 and zero (ZF=1)
0F 03 /r *LSL rw,ew Load: rw = Segment Limit, selector ew
0F 00 /3 *LTR ew Load EA word into Task Register
A0 iw MOV AL,xb Move byte variable (offset iw) into AL
A1 iw MOV AX,xw Move word variable (offset iw) into AX
8E /3 MOV DS,mw Move memory word into DS
8E /3 MOV DS,rw Move word register into DS
C6 /0 ib MOV eb,ib Move immediate byte into EA byte
88 /r MOV eb,rb Move byte register into EA byte
8E /0 MOV ES,mw Move memory word into ES
8E /0 MOV ES,rw Move word register into ES
8C /1 MOV ew,CS Move CS into EA word
8C /3 MOV ew,DS Move DS into EA word
C7 /0 iw MOV ew,iw Move immediate word into EA word
8C /0 MOV ew,ES Move ES into EA word
89 /r MOV ew,rw Move word register into EA word
8C /2 MOV ew,SS Move SS into EA word
B0+rb ib MOV rb,ib Move immediate byte into byte register
8A /r MOV rb,eb Move EA byte into byte register
B8+rw iw MOV rw,iw Move immediate word into word register
8B /r MOV rw,ew Move EA word into word register
8E /2 MOV SS,mw Move memory word into SS
8E /2 MOV SS,rw Move word register into SS
A2 iw MOV xb,AL Move AL into byte variable (offset iw)
A3 iw MOV xw,AX Move AX into word register (offset iw)
A4 MOVS mb,mb Move byte [SI] to ES:[DI], advance SI and DI
A5 MOVS mw,mw Move word [SI] to ES:[DI], advance SI and DI
A4 MOVSB Move byte DS:[SI] to ES:[DI], advance SI and DI
A5 MOVSW Move word DS:[SI] to ES:[DI], advance SI and DI
6-12
F6 /4 MUL eb Unsigned multiply (AX = AL * EA byte)
F7 /4 MUL ew Unsigned multiply (DXAX = AX * EA word)
F6 /3 NEG eb Two's complement negate EA byte
F7 /3 NEG ew Two's complement negate EA word
NIL (prefix) Special "do-nothing" opcode assembles no code
90 NOP No Operation
F6 /2 NOT eb Reverse each bit of EA byte
F7 /2 NOT ew Reverse each bit of EA word
0F 16/0 #NOTBIT eb,CL Complement bit CL of eb
0F 17/0 #NOTBIT ew,CL Complement bit CL of ew
0F 1E/0 ib #NOTBIT eb,ib Complement bit ib of eb
0F 1F/0 ib #NOTBIT ew,ib Complement bit ib of ew
0C ib OR AL,ib Logical-OR immediate byte into AL
0D iw OR AX,iw Logical-OR immediate word into AX
80 /1 ib OR eb,ib Logical-OR immediate byte into EA byte
08 /r OR eb,rb Logical-OR byte register into EA byte
83 /1 ib OR ew,ib Logical-OR immediate byte into EA word
81 /1 iw OR ew,iw Logical-OR immediate word into EA word
09 /r OR ew,rw Logical-OR word register into EA word
0A /r OR rb,eb Logical-OR EA byte into byte register
0B /r OR rw,ew Logical-OR EA word into word register
E6 ib OUT ib,AL Output byte AL to immediate port number ib
E7 ib OUT ib,AX Output word AX to immediate port number ib
EE OUT DX,AL Output byte AL to port number DX
EF OUT DX,AX Output word AX to port number DX
6E *OUTS DX,eb Output byte [SI] to port number DX, advance SI
6F *OUTS DX,ew Output word [SI] to port number DX, advance SI
6E *OUTSB Output byte DS:[SI] to port number DX, advance SI
6F *OUTSW Output word DS:[SI] to port number DX, advance SI
1F POP DS Set DS to top of stack, increment SP by 2
07 POP ES Set ES to top of stack, increment SP by 2
8F /0 POP mw Set memory word to top of stack, increment SP by 2
58+rw POP rw Set word register to top of stack, increment SP by 2
17 POP SS Set SS to top of stack, increment SP by 2
61 *POPA Pop DI,SI,BP,SP,BX,DX,CX,AX (SP value is ignored)
9D POPF Set flags register to top of stack, increment SP by 2
0E PUSH CS Set [SP-2] to CS, then decrement SP by 2
1E PUSH DS Set [SP-2] to DS, then decrement SP by 2
06 PUSH ES Set [SP-2] to ES, then decrement SP by 2
6A ib *PUSH ib Push sign-extended immediate byte
68 iw *PUSH iw Set [SP-2] to immediate word, then decrement SP by 2
FF /6 PUSH mw Set [SP-2] to memory word, then decrement SP by 2
50+rw PUSH rw Set [SP-2] to word register, then decrement SP by 2
16 PUSH SS Set [SP-2] to SS, then decrement SP by 2
60 *PUSHA Push AX,CX,DX,BX,original SP,BP,SI,DI
9C PUSHF Set [SP-2] to flags register, then decrement SP by 2
D0 /2 RCL eb,1 Rotate 9-bit quantity (CF, EA byte) left once
D2 /2 RCL eb,CL Rotate 9-bit quantity (CF, EA byte) left CL times
C0 /2 ib *RCL eb,ib Rotate 9-bit quantity (CF, EA byte) left ib times
D1 /2 RCL ew,1 Rotate 17-bit quantity (CF, EA word) left once
D3 /2 RCL ew,CL Rotate 17-bit quantity (CF, EA word) left CL times
C1 /2 ib *RCL ew,ib Rotate 17-bit quantity (CF, EA word) left ib times
6-13
D0 /3 RCR eb,1 Rotate 9-bit quantity (CF, EA byte) right once
D2 /3 RCR eb,CL Rotate 9-bit quantity (CF, EA byte) right CL times
C0 /3 ib *RCR eb,ib Rotate 9-bit quantity (CF, EA byte) right ib times
D1 /3 RCR ew,1 Rotate 17-bit quantity (CF, EA word) right once
D3 /3 RCR ew,CL Rotate 17-bit quantity (CF, EA word) right CL times
C1 /3 ib *RCR ew,ib Rotate 17-bit quantity (CF, EA word) right ib times
F3 REP (prefix) Repeat following MOVS,LODS,STOS,INS, or OUTS CX times
65 #REPC (prefix) Repeat following CMPS or SCAS CX times or until CF=0
F3 REPE (prefix) Repeat following CMPS or SCAS CX times or until ZF=0
64 #REPNC (prfix) Repeat following CMPS or SCAS CX times or until CF=1
F2 REPNE (prfix) Repeat following CMPS or SCAS CX times or until ZF=1
F2 REPNZ (prfix) Repeat following CMPS or SCAS CX times or until ZF=1
F3 REPZ (prefix) Repeat following CMPS or SCAS CX times or until ZF=0
CB RETF Return to far caller (pop offset, then seg)
C3 RET Return to near caller (pop offset only)
CA iw RETF iw RET (far), pop offset, seg, iw bytes
C2 iw RET iw RET (near), pop offset, iw bytes pushed before Call
D0 /0 ROL eb,1 Rotate 8-bit EA byte left once
D2 /0 ROL eb,CL Rotate 8-bit EA byte left CL times
C0 /0 ib *ROL eb,ib Rotate 8-bit EA byte left ib times
D1 /0 ROL ew,1 Rotate 16-bit EA word left once
D3 /0 ROL ew,CL Rotate 16-bit EA word left CL times
C1 /0 ib *ROL ew,ib Rotate 16-bit EA word left ib times
0F 28/0 #ROL4 eb Rotate nibbles: Heb=Leb HAL,Leb=LAL LAL=Heb
D0 /1 ROR eb,1 Rotate 8-bit EA byte right once
D2 /1 ROR eb,CL Rotate 8-bit EA byte right CL times
C0 /1 ib *ROR eb,ib Rotate 8-bit EA byte right ib times
D1 /1 ROR ew,1 Rotate 16-bit EA word right once
D3 /1 ROR ew,CL Rotate 16-bit EA word right CL times
C1 /1 ib *ROR ew,ib Rotate 16-bit EA word right ib times
0F 2A/0 #ROR4 eb Rotate nibbles: Leb=Heb Heb=LAL AL=eb
9E SAHF Store AH into flags SF ZF xx AF xx PF xx CF
D0 /4 SAL eb,1 Multiply EA byte by 2, once
D2 /4 SAL eb,CL Multiply EA byte by 2, CL times
C0 /4 ib *SAL eb,ib Multiply EA byte by 2, ib times
D1 /4 SAL ew,1 Multiply EA word by 2, once
D3 /4 SAL ew,CL Multiply EA word by 2, CL times
C1 /4 ib *SAL ew,ib Multiply EA word by 2, ib times
D0 /7 SAR eb,1 Signed divide EA byte by 2, once
D2 /7 SAR eb,CL Signed divide EA byte by 2, CL times
C0 /7 ib *SAR eb,ib Signed divide EA byte by 2, ib times
D1 /7 SAR ew,1 Signed divide EA word by 2, once
D3 /7 SAR ew,CL Signed divide EA word by 2, CL times
C1 /7 ib *SAR ew,ib Signed divide EA word by 2, ib times
6-14
1C ib SBB AL,ib Subtract with borrow immediate byte from AL
1D iw SBB AX,iw Subtract with borrow immediate word from AX
80 /3 ib SBB eb,ib Subtract with borrow immediate byte from EA byte
18 /r SBB eb,rb Subtract with borrow byte register from EA byte
83 /3 ib SBB ew,ib Subtract with borrow immediate byte from EA word
81 /3 iw SBB ew,iw Subtract with borrow immediate word from EA word
19 /r SBB ew,rw Subtract with borrow word register from EA word
1A /r SBB rb,eb Subtract with borrow EA byte from byte register
1B /r SBB rw,ew Subtract with borrow EA word from word register
AE SCAS mb Compare bytes AL - ES:[DI], advance DI
AF SCAS mw Compare words AL - ES:[DI], advance DI
AE SCASB Compare bytes AX - ES:[DI], advance DI
AF SCASW Compare words AX - ES:[DI], advance DI
0F 14/0 #SETBIT eb,CL Set bit CL of eb
0F 15/0 #SETBIT ew,CL Set bit CL of ew
0F 1C/0 ib #SETBIT eb,ib Set bit ib of eb
0F 1D/0 ib #SETBIT ew,ib Set bit ib of ew
0F 01 /0 *SGDT m Store 6-byte Global Descriptor Table register to M
D0 /4 SHL eb,1 Multiply EA byte by 2, once
D2 /4 SHL eb,CL Multiply EA byte by 2, CL times
C0 /4 ib *SHL eb,ib Multiply EA byte by 2, ib times
D1 /4 SHL ew,1 Multiply EA word by 2, once
D3 /4 SHL ew,CL Multiply EA word by 2, CL times
C1 /4 ib *SHL ew,ib Multiply EA word by 2, ib times
D0 /5 SHR eb,1 Unsigned divide EA byte by 2, once
D2 /5 SHR eb,CL Unsigned divide EA byte by 2, CL times
C0 /5 ib *SHR eb,ib Unsigned divide EA byte by 2, ib times
D1 /5 SHR ew,1 Unsigned divide EA word by 2, once
D3 /5 SHR ew,CL Unsigned divide EA word by 2, CL times
C1 /5 ib *SHR ew,ib Unsigned divide EA word by 2, ib times
0F 01 /1 *SIDT m Store 6-byte Interrupt Descriptor Table register to M
0F 00 /0 *SLDT ew Store Local Descriptor Table register to EA word
0F 01 /4 *SMSW ew Store Machine Status Word to EA word
F9 STC Set carry flag
FD STD Set direction flag so SI and DI will decrement
FB STI Set interrupt enable flag, interrupts enabled
0F 31/r #STOBITS rb,rb Store AX to ES:DI,bit rb (incr. DI,rb), rb+1 bits
0F 39/0 ib #STOBITS rb,ib Store AX to ES:DI,bit rb (incr. DI,rb), ib+1 bits
AA STOS mb Store AL to byte [DI], advance DI
AB STOS mw Store AX to word [DI], advance DI
AA STOSB Store AL to byte ES:[DI], advance DI
AB STOSW Store AX to word ES:[DI], advance DI
0F 00 /1 *STR ew Store Task Register to EA word
6-15
2C ib SUB AL,ib Subtract immediate byte from AL
2D iw SUB AX,iw Subtract immediate word from AX
80 /5 ib SUB eb,ib Subtract immediate byte from EA byte
28 /r SUB eb,rb Subtract byte register from EA byte
83 /5 ib SUB ew,ib Subtract immediate byte from EA word
81 /5 iw SUB ew,iw Subtract immediate word from EA word
29 /r SUB ew,rw Subtract word register from EA word
2A /r SUB rb,eb Subtract EA byte from byte register
2B /r SUB rw,ew Subtract EA word from word register
0F 22 #SUB4S Sub CL nibbles BCD at DS:SI from ES:DI (CL even,NZ)
A8 ib TEST AL,ib AND immediate byte into AL for flags only
A9 iw TEST AX,iw AND immediate word into AX for flags only
F6 /0 ib TEST eb,ib AND immediate byte into EA byte for flags only
84 /r TEST eb,rb AND byte register into EA byte for flags only
F7 /0 iw TEST ew,iw AND immediate word into EA word for flags only
85 /r TEST ew,rw AND word register into EA word for flags only
84 /r TEST rb,eb AND EA byte into byte register for flags only
85 /r TEST rw,ew AND EA word into word register for flags only
0F 10/0 #TESTBIT eb,CL Test bit CL of eb, set Z flag
0F 11/0 #TESTBIT ew,CL Test bit CL of ew, set Z flag
0F 18/0 ib #TESTBIT eb,ib Test bit ib of eb, set Z flag
0F 19/0 ib #TESTBIT ew,ib Test bit ib of ew, set Z flag
9B WAIT Wait until BUSY pin is inactive (HIGH)
0F 00 /4 *VERR ew Set ZF=1 if segment can be read, selector ew
0F 00 /5 *VERW ew Set ZF=1 if segment can be written to, selector ew
9r XCHG AX,rw Exchange word register with AX
86 /r XCHG eb,rb Exchange byte register with EA byte
87 /r XCHG ew,rw Exchange word register with EA word
86 /r XCHG rb,eb Exchange EA byte with byte register
9r XCHG rw,AX Exchange with word register
87 /r XCHG rw,ew Exchange EA word with word register
D7 XLAT mb Set AL to memory byte [BX + unsigned AL]
D7 XLATB Set AL to memory byte DS:[BX + unsigned AL]
34 ib XOR AL,ib Exclusive-OR immediate byte into AL
35 iw XOR AX,iw Exclusive-OR immediate word into AX
80 /6 ib XOR eb,ib Exclusive-OR immediate byte into EA byte
30 /r XOR eb,rb Exclusive-OR byte register into EA byte
83 /6 ib XOR ew,ib Exclusive-OR immediate byte into EA word
81 /6 iw XOR ew,iw Exclusive-OR immediate word into EA word
31 /r XOR ew,rw Exclusive-OR word register into EA word
32 /r XOR rb,eb Exclusive-OR EA byte into byte register
33 /r XOR rw,ew Exclusive-OR EA word into word register
* Starred forms will not execute on 8086/8088! See note at top of chart.
# These instructions work only on NEC chips! See note at top of chart.
+481
View File
@@ -0,0 +1,481 @@
CHAPTER 7 THE FLOATING-POINT PROCESSOR
In this chapter, we'll refer to the various Central Processing
Units (CPUs) as the "86". Thus "86" refers to either the 8088,
8086, 80186, 80286, etc. We'll refer to the various coprocessors
as the "87". Thus "87" refers to either the 8087, the 287, the
387, or the special IIT-2C87 processor.
The 8087 and 287 Coprocessors
All IBM-PC's, and most clones, contain a socket for a floating
point coprocessor. If you shell out between $80 and $300, and
plug the appropriate chip into that socket, then a host of
floating point instructions is added to the assembly language
instruction set.
The original IBM-PC, and the XT, accept the original floating
point chip, the 8087. The AT accepts a later update, the 287.
From a programming standpoint, the two chips are nearly
identical: the 287 adds the instructions FSETPM and FSTSW AX, and
ignores the instructions FENI and FDISI. There is, however, a
rather nasty design flaw in the 8087, that was corrected in the
287.
To understand the flaw, you must understand how the 86 and 87
work as coprocessors. Whenever the 86 sees a floating point
instruction, it communicates the instruction, and any associated
memory operands, to the 87. Then the 86 goes on to its next
instruction, operating in parallel with the 87. That's OK, so
long as the following instructions don't do one of the following:
1. Execute another floating point instruction; or
2. Try to read the results of the still-executing floating
point instruction.
If they do, then you must provide an instruction called WAIT (or
synonymously FWAIT), which halts the 86 until the 87 is finished.
For almost all floating point instructions, it should not be
necessary to provide an explicit FWAIT; the 86 ought to know that
it should wait. For the 8087, it IS necessary to give an
explicit FWAIT before each floating point instruction: that is
the flaw.
Because of the flaw, all assemblers supporting the 8087 will
silently insert an FWAIT code (hex 9B) before all 87
instructions, except those few (the FN instructions other than
FNOP) not requiring the FWAIT. A86 provides the switch +F (the F
must be capitalized), to signal that the 287 is the target
processor. A86 also provides the directive ".287", compatible
with Microsoft's assembler, that you can insert into your
programs to accomplish the same thing as +F. However, the actions
taken by A86 and Microsoft when seeing .287 are completely
disjoint! To wit:
7-2
* A86 ceases outputting FWAIT directives that are unnecessary for
the 287. For reasons beyond my comprehension, Microsoft
continues to put them out. Can someone enlighten me as to why
Microsoft is putting out those codes?
* A86 ignores the instructions FENI, FDISI, FNENI, and FNDISI
after it sees a .287 directive. Microsoft continues to
assemble these instructions.
* Microsoft recognizes the new 287 instructions, if and only if
it sees the .287 directive. A86 recognizes them even if .287
is not given. In general, I don't attempt to police your
instruction usage-- if you use an instruction available on a
limited number of processors, I trust that you are programming
for one of those processors.
In summary, if your program will be running only on machines with
a 287, you can give ".287" directive. Your programs will be
significantly shorter than if they were assembled by Microsoft.
If you want your programs to run on all machines containing a
floating point chip, you should refrain from specifying .287.
WARNING: The most common mistake 87 programmers make is to try to
read the results of an 87 operation in 86 memory, before the
results are ready. At least on my AT, the system often crashes
when you do this! If your program runs correctly when single
stepped, but crashes when set loose, then chances are you need an
extra explicit FWAIT somewhere.
Extra Coprocessor Support
A86 now supports two additional coprocessors available for
PC-compatibles: the 80387, available for 386-based machines, and
the IIT-2C87, a 287-plug-compatible chip that adds a couple of
unique instructions. The IIT-2C87 has two extra banks of on-chip
8-number stacks, that can be switched in with the FBANK
instruction, and a matrix multiply instrction that uses all three
banks as input. (For details contact Specialty Software
Development Corp., 110 Wild Basin Road, Austin TX 78746.) Both
chips incorporate the correction to the 8087's FWAIT design flaw,
so you can assemble with the .287 directive. The extra
instructions for these chips are marked by "387 only:" and "IIT
only:" in the chart at the end of this chapter.
Emulating the 8087 by Software
There is a software package provided with many compilers
(Borland's Turbo C and most Microsoft compilers, for example)
that emulates the 8087 instruction set. The emulator is very
cleverly implemented so that the programmer need not know whether
a floating point chip will be available, or whether emulation
will be necessary. This is done by having the linker replace all
floating point machine instructions with INT calls to certain
interrupts, dedicated to emulation. The interrupt handlers
interpret the operands to the instructions, and emulate the 8087.
7-3
You can tell A86 that the emulator might be used, by providing a
+f switch in the invocation line, or in the A86 environment
variable (make sure the f is lower case). Since your program
will be linked to the emulator, you must be producing an OBJ
file, not a COM file, for emulation support to take effect.
Whenever a floating point instruction is assembled, A86 will
generate an external reference at the opcode for the instruction.
Then, if the emulation package is linked with your program, the
opcodes will be replaced by the INT calls. If a special
non-emulation module is linked, the opcodes will be left alone,
and the floating point instructions will be executed directly.
The Floating Point Stack
The 87 has its own register set, of 8 floating point numbers
occupying 10 bytes each, plus 14 bytes of status and control
information. Many of the 87's instructions cause the numbers to
act like a stack, much like a Hewlett-Packard calculator. For
this reason, the numbers are called the floating point stack.
The standard name for the top element of the floating point stack
is either ST or ST(0); the others are named ST(1) through ST(7).
Thus, for example, the instruction to add stack element number 3
into the top stack element is usually coded FADD ST,ST(3).
I find this notation painfully verbose. Especially bad are the
parentheses, which are hard to type, and which add visual clutter
to the program. To alleviate this problem while retaining
language compatibility, I name my stack elements simply 0 through
7. I recognize ST as a synonym for 0. I allow expression
elements to be concatenated; concatenation is the same as
addition. Thus, when A86 sees ST(3), it computes 0+3 = 3. So
you can code the old way, FADD ST,ST(3), or you can code the
concise way, FADD 0,3 or simply FADD 3.
Floating Point Initializations
In general, you use the 87 by loading numbers from 86 memory to
the 87 stack (using FLD instructions), calculating on the 87
stack, and storing the results back to 86 memory (using FST and
FSTP instructions). There are seven constant numbers built into
the 87 instruction set: zero, one, Pi, and four logarithmic
conversion constants. These can be loaded using the FLD0, FLD1,
FLDPI, FLDL2T, FLDL2E, FLDLG2, and FLDLN2 instructions. All
other constants must be declared in, then loaded from, 86 memory.
Integer constant words and doublewords can be loaded via FILD.
Non-integer constant doubleword, quadwords, and ten-byte numbers
can be loaded via FLD.
7-4
A86 allows you to declare constants loaded via FLD as floating
point numbers, using scientific notation if you like. As an
exclusive feature, A86 allows you to use any of the 4 arithmetic
functions +, -, *, / in expressions involving floating point
numbers. A86 will even do type conversion if one of the two
operands is given as an integer; though for clarity I recommend
that you always give floating point constants with their decimal
point.
Built-In Constant Names
A86 offers another exclusive feature: the built-in symbols
PI ratio of circumference to diameter of a circle
L2T log base 2 of 10
L2E log base 2 of the calculus constant e = 2.71828...
LG2 log base 10 of 2
LN2 natural log (base e) of 2
You can use these symbols in expressions, to declare useful
constants. For example, you can declare the degrees-to-radians
conversion constant:
DEG_TO_RAD DT PI/180.
Special Immediate FLD Form
Yet another exclusive A86 feature is the instruction form FLD
constant. This form is intended primarily to facilitate "fooling
around" with the 87 when using D86; but it is also useful for
quick-and-dirty programs. For example, the instruction FLD 12.3
generates the following sequence of code bytes (without
explicitly using the local labels given):
CS FLD T[M1]
JMP >M2
M1 DT 12.3
M2:
Obviously, this form is not terrifically efficient: you can
always save the JMP by placing the constant outside of the
instruction stream; and the CS override might not be needed. But
the form is very, very convenient!
NOTE that the preceding 2 sections imply that you can get
careless and code, for example, FLD PI when you intended FLDPI.
Though the two are functionally equivalent, the first form takes
a whopping 17 bytes; and second, only 2 bytes. Be careful!
7-5
Floating Point Operand Types
The list of floating point instructions contains a variety of
operand types. Here is a brief explanation of those types:
0 stands for the top element of the floating point stack.
A synonym for 0 is ST or ST(0).
i stands for element number i of the floating point stack.
i can range from 0 through 7. A synonym for i is ST(i).
mem10r is a 10-byte memory quantity (typically declared with a
DT directive) containing a full precision floating point
number. Intel recommends that you NOT store your numbers
in full precision; that you use the following double
precision format instead. Full precision numbers are
intended for storage of intermediate results (on the
stack); they exist to insure maximum accuracy for
calculations on double precision numbers, which is the
official external format of 87 numbers.
mem8r is an 8-byte memory quantity (typically declared with a
DQ directive) containing a double precision floating
point number. This is the best format for floating
point numbers on the 87. The 87 takes the same amount
of time on double precision calculations as it does on
single precision. The only extra time is the memory
access of 4 more bytes; negligible in comparison to the
calculation time.
mem4r is a 4-byte quantity (typically defined with a DD
directive) containing a single precision floating point
number.
mem10d is a 10-byte quantity (also defined via DT) containing a
special Binary Coded Decimal format recognized by the
FBLD and FBSTP instructions. This format is useful for
input and output of floating point numbers.
mem4i is a 4-byte quantity representing a signed integer in
two's-complement notation.
mem2i is a 2-byte quantity representing a signed integer in
two's-complement notation.
mem14 and mem94 are 14- and 94-byte buffers containing the 87
machine state.
7-6
Operand Choices in A86
In the "standard" assembly language, the choice of operands for
floating point instructions seems inconsistent to me. For
example, to subtract stack i from 0, you must provide two
operands; to do the equivalent comparison, you must provide only
one operand. A86 smooths out these inconsistencies by allowing
more choices for operands: FADD i is equivalent to FADD 0,i. FCOM
0,i is equivalent to FCOM i. The same holds for the other main
arithmetic instructions. FXCH 0,i and FXCH i,0 are allowed. So
if you wish to retain compatibility with other assemblers, you
should use their more restrictive instruction list, not the
following one.
The 87 Instruction Set
Following is the 87 instruction set. The "w" in the opcode field
is the FWAIT opcode, hex 9B, which is suppressed if .287 is
selected. Again, "0", "1", and "i" stand for the associated
floating point stack registers, not constant numbers! Constant
numbers in the descriptions are given with decimal points: 0.0,
1.0, 2.0, 10.0.
Opcode Instruction Description
w D9 F0 F2XM1 0 := (2.0 ** 0) - 1.0
w DB F1 F4X4 IIT only: 4 by 4 matrix multiply
w D9 E1 FABS 0 := |0|
w DE C1 FADD 1 := 1 + 0, pop
w D8 C0+i FADD i 0 := i + 0
w DC C0+i FADD i,0 i := i + 0
w D8 C0+i FADD 0,i 0 := i + 0
w D8 /0 FADD mem4r 0 := 0 + mem4r
w DC /0 FADD mem8r 0 := 0 + mem8r
w DE C0+i FADDP i,0 i := i + 0, pop
w DB E8 FBANK 0 IIT only: set bank pointer to default
w DB EB FBANK 1 IIT only: set bank pointer to bank 1
w DB EA FBANK 2 IIT only: set bank pointer to bank 2
w DF /4 FBLD mem10d push, 0 := mem10d
w DF /6 FBSTP mem10d mem10d := 0, pop
7-7
w D9 E0 FCHS 0 := -0
9B DB E2 FCLEX clear exceptions
w D8 D1 FCOM compare 0 - 1
w D8 D0+i FCOM 0,i compare 0 - i
w D8 D0+i FCOM i compare 0 - i
w D8 /2 FCOM mem4r compare 0 - mem4r
w DC /2 FCOM mem8r compare 0 - mem8r
w D8 D9 FCOMP compare 0 - 1, pop
w D8 D8+i FCOMP 0,i compare 0 - i, pop
w D8 D8+i FCOMP i compare 0 - i, pop
w D8 /3 FCOMP mem4r compare 0 - mem4r, pop
w DC /3 FCOMP mem8r compare 0 - mem8r, pop
w DE D9 FCOMPP compare 0 - 1, pop both
w D9 FF FCOS 387 only: push, 1/0 := cosine(old 0)
w D9 F6 FDECSTP decrement stack pointer
w DB E1 FDISI disable interrupts (.287 ignore)
w DE F9 FDIV 1 := 1 / 0, pop
w D8 F0+i FDIV i 0 := 0 / i
w DC F8+i FDIV i,0 i := i / 0
w D8 F0+i FDIV 0,i 0 := 0 / i
w D8 /6 FDIV mem4r 0 := 0 / mem4r
w DC /6 FDIV mem8r 0 := 0 / mem8r
w DE F8+i FDIVP i,0 i := i / 0, pop
w DE F1 FDIVR 1 := 0 / 1, pop
w D8 F8+i FDIVR i 0 := i / 0
w DC F0+i FDIVR i,0 i := 0 / i
w D8 F8+i FDIVR 0,i 0 := i / 0
w D8 /7 FDIVR mem4r 0 := mem4r / 0
w DC /7 FDIVR mem8r 0 := mem8r / 0
w DE F0+i FDIVRP i,0 i := 0 / i, pop
w DB E0 FENI enable interrupts (.287 ignore)
w DD C0+i FFREE i empty i
w DE /0 FIADD mem2i 0 := 0 + mem4i
w DA /0 FIADD mem4i 0 := 0 + mem2i
w DE /2 FICOM mem2i compare 0 - mem2i
w DA /2 FICOM mem4i compare 0 - mem4i
w DE /3 FICOMP mem2i compare 0 - mem2i, pop
w DA /3 FICOMP mem4i compare 0 - mem4i, pop
w DE /6 FIDIV mem2i 0 := 0 / mem2i
w DA /6 FIDIV mem4i 0 := 0 / mem4i
w DE /7 FIDIVR mem2i 0 := mem2i / 0
w DA /7 FIDIVR mem4i 0 := mem4i / 0
w DF /0 FILD mem2i push, 0 := mem2i
w DB /0 FILD mem4i push, 0 := mem4i
w DF /5 FILD mem8i push, 0 := mem8i
7-8
w DE /1 FIMUL mem2i 0 := 0 * mem2i
w DA /1 FIMUL mem4i 0 := 0 * mem4i
w D9 F7 FINCSTP increment stack pointer
9B DB E3 FINIT initialize 87
w DF /2 FIST mem2i mem2i := 0
w DB /2 FIST mem4i mem4i := 0
w DF /3 FISTP mem2i mem2i := 0, pop
w DB /3 FISTP mem4i mem4i := 0, pop
w DF /7 FISTP mem8i mem8i := 0, pop
w DE /4 FISUB mem2i 0 := 0 - mem2i
w DA /4 FISUB mem4i 0 := 0 - mem4i
w DE /5 FISUBR mem2i 0 := mem2i - 0
w DA /5 FISUBR mem4i 0 := mem4i - 0
w D9 C0+i FLD i push, 0 := old i
w DB /5 FLD mem10r push, 0 := mem10r
w D9 /0 FLD mem4r push, 0 := mem4r
w DD /0 FLD mem8r push, 0 := mem8r
w D9 E8 FLD1 push, 0 := 1.0
w D9 /5 FLDCW mem2i control word := mem2i
w D9 /4 FLDENV mem14 environment := mem14
w D9 EA FLDL2E push, 0 := log base 2.0 of e
w D9 E9 FLDL2T push, 0 := log base 2.0 of 10.0
w D9 EC FLDLG2 push, 0 := log base 10.0 of 2.0
w D9 ED FLDLN2 push, 0 := log base e of 2.0
w D9 EB FLDPI push, 0 := Pi
w D9 EE FLDZ push, 0 := +0.0
w DE C9 FMUL 1 := 1 * 0, pop
w D8 C8+i FMUL i 0 := 0 * i
w DC C8+i FMUL i,0 i := i * 0
w D8 C8+i FMUL 0,i 0 := 0 * i
w D8 /1 FMUL mem4r 0 := 0 * mem4r
w DC /1 FMUL mem8r 0 := 0 * mem8r
w DE C8+i FMULP i,0 i := i * 0, pop
DB E2 FNCLEX nowait clear exceptions
DB E1 FNDISI disable interrupts (.287 ignore)
DB E0 FNENI enable interrupts (.287 ignore)
DB E3 FNINIT nowait initialize 87
w D9 D0 FNOP no operation
DD /6 FNSAVE mem94 mem94 := 87 state
D9 /7 FNSTCW mem2i mem2i := control word
D9 /6 FNSTENV mem14 mem14 := environment
DF E0 FNSTSW AX AX := status word
DD /7 FNSTSW mem2i mem2i := status word
w D9 F3 FPATAN 0 := arctan(1/0), pop
w D9 F8 FPREM 0 := REPEAT(0 - 1)
w D9 F5 FPREM1 387 only: 0 := REPEAT(0 - 1) IEEE compat.
w D9 F2 FPTAN push, 1/0 := tan(old 0)
7-9
w D9 FC FRNDINT 0 := round(0)
w DD /4 FRSTOR mem94 87 state := mem94
w DD /6 FSAVE mem94 mem94 := 87 state
w D9 FD FSCALE 0 := 0 * 2.0 ** 1
9B DB E4 FSETPM set protection mode
w D9 FE FSIN 387 only: push, 1/0 := sine(old 0)
w D9 FB FSINCOS 387 only: push, 1 := sine, 0 := cos(old 0)
w D9 FA FSQRT 0 := square root of 0
w DD D0+i FST i i := 0
w D9 /2 FST mem4r mem4r := 0
w DD /2 FST mem8r mem8r := 0
w D9 /7 FSTCW mem2i mem2i := control word
w D9 /6 FSTENV mem14 mem14 := environment
w DD D8+i FSTP i i := 0, pop
w DB /7 FSTP mem10r mem10r := 0, pop
w D9 /3 FSTP mem4r mem4r := 0, pop
w DD /3 FSTP mem8r mem8r := 0, pop
w DF E0 FSTSW AX AX := status word
w DD /7 FSTSW mem2i mem2i := status word
w DE E9 FSUB 1 := 1 - 0, pop
w D8 E0+i FSUB i 0 := 0 - i
w DC E8+i FSUB i,0 i := i - 0
w D8 E0+i FSUB 0,i 0 := 0 - i
w D8 /4 FSUB mem4r 0 := 0 - mem4r
w DC /4 FSUB mem8r 0 := 0 - mem8r
w DE E8+i FSUBP i,0 i := i - 0, pop
w DE E1 FSUBR 1 := 0 - 1, pop
w D8 E8+i FSUBR i 0 := i - 0
w DC E0+i FSUBR i,0 i := 0 - i
w D8 E8+i FSUBR 0,i 0 := i - 0
w D8 /5 FSUBR mem4r 0 := mem4r - 0
w DC /5 FSUBR mem8r 0 := mem8r - 0
w DE E0+i FSUBRP i,0 i := 0 - i, pop
w D9 E4 FTST compare 0 - 0.0
w DD E0+i FUCOM i 387 only: unordered compare 0 - i
w DD E1 FUCOM 387 only: unordered compare 0 - 1
w DD E8+i FUCOMP i 387 only: unordered compare 0 - i, pop
w DD E9 FUCOMP 387 only: unordered compare 0 - 1, pop
w DA E9 FUCOMPP 387 only: unordered compare 0 - 1, pop both
9B FWAIT wait for 87 ready
w D9 E5 FXAM C3 -- C0 := type of 0
w D9 C9 FXCH exchange 0 and 1
w D9 C8+i FXCH 0,i exchange 0 and i
w D9 C8+i FXCH i exchange 0 and i
w D9 C8+i FXCH i,0 exchange 0 and i
w D9 F4 FXTRACT push, 1 := expo, 0 := sig
w D9 F1 FYL2X 0 := 1 * log base 2.0 of 0, pop
w D9 F9 FYL2XP1 0 := 1 * log base 2.0 of (0+1.0), pop
+720
View File
@@ -0,0 +1,720 @@
CHAPTER 8 NUMBERS AND EXPRESSIONS
Numbers and Bases
A86 supports a variety of formats for numbers. In non-computer
life, we write numbers in a decimal format. There are ten
digits, 0 through 9, that we use to describe numbers; and each
digit position is ten times as significant as the position to its
right. The number ten is called the "base" of the decimal
format. Computer programmers often find it convenient to use
other bases to specify numbers used in their programs. The most
commonly-used bases are two (binary format), sixteen (hexadecimal
format), and eight (octal format).
The hexadecimal format requires sixteen digits. The extra six
digits beyond 0 through 9 are denoted by the first six letters of
the alphabet: A for ten, B for eleven, C for twelve, D for
thirteen, E for fourteen, and F for fifteen.
In A86, a number must always begin with a digit from 0 through 9,
even if the base is hexadecimal. This is so that A86 can
distinguish between a number and a symbol that happens to have
digits in its name. If a hexadecimal number would begin with a
letter, you precede the letter with a zero. For example, hex A0,
which is the same as decimal 160, would be written 0A0.
Because it is necessary for you to append leading zeroes to many
hex numbers, and because you never have to do so for decimal
numbers, I decided to make hexadecimal the default base for
numbers with leading zeroes. Decimal is still the default base
for numbers beginning with 1 through 9.
Large numbers can be given as the operands to DD, DQ, or DT
directives. For readability, you may freely intersperse
underscore characters anywhere with your numbers.
The default base can be overridden, with a letter or letters at
the end of the number: B or xB for binary, O or Q for octal, H
for hexadecimal, and D or xD for decimal. Examples:
077Q octal, value is 8*7 + 7 = 63 in decimal notation
123O octal if the "O" is a letter: 64 + 2*8 + 3 = 83 decimal
1230 decimal 1230: shows why you should use "Q" for octal!!
01234567H large constant
0001_0000_0000_0000_0003R real number specified in hexadecimal
100D superfluous D indicates decimal base
0100D hex number 100D, which is 4096 + 13 = 5009 in decimal
0100xD decimal 100, since xD overrides the default hex format
0110B hex 110B, which is 4096 + 256 + 11 = 4363 in decimal
0110xB binary 4+2 = 6 in decimal notation
110B also binary 4+2 = 6, since "B" is not a decimal digit
8-2
The last five examples above illustrate why an "x" is sometimes
necessary before the base-override letter "B" or "D". If that
letter can be interpreted as a hex digit, it is; the "x" forces
an override interpretation for the "B" or "D". By the way, the
usage of lower case for x and upper case for the following
override letter is simply a recommendation; A86 treats upper-and
lower-case letters equivalently.
The RADIX Directive
The above-mentioned set of defaults (hex if leading zero, decimal
otherwise) can be overridden with the RADIX directive. The RADIX
directive consists of the word RADIX followed by a number from 2
to 16. The default base for the number is ALWAYS decimal,
regardless of any (or no) previous RADIX commands. The number
gives the default base for ALL subsequent numbers, up to (but not
including) the next RADIX command. If there is no number
following RADIX, then A86 returns to its initial mixed default of
hex for leading zeroes, decimal for other leading digits.
For compatibility with IBM's assembler, RADIX can appear with a
leading period; although I curse the pinhead designer who put
that period into IBM's language.
As an alternative to the RADIX directive, I provide the D switch,
which causes A86 to start with decimal defaults. You can put +D
into the A86 command invocation, or into the A86 environment
variable. The first RADIX command in the program will override
the D switch setting.
Following are examples of radix usage. The numbers in the
comments are all in decimal notation.
DB 10,010 ; produces 10,16 if RADIX was not seen yet
; and +D switch was not specified
RADIX 10
DB 10,010 ; produces 10,10
RADIX 16
DB 10,010 ; produces 16,16
RADIX 2
DB 10,01010 ; produces 2,10
RADIX 3 ; for Martian programmers in Heinlein novels
DB 10,100 ; produces 3,9
RADIX
DB 10,010 ; produces 10,16
8-3
Floating Point Initializations
A86 allows floating point numbers as the operands to DD, DQ, and
DT directives. The numbers are encoded according to the IEEE
standard, followed by the 8087 and 287 coprocessors. The format
for floating point constants is as follows: First, there is a
decimal number containing a decimal point. There must be a
decimal point, or else the number is interpreted as an integer.
There must also be at least one decimal digit, either to the left
or right of the decimal point, or else the decimal point is
interpreted as an addition (structure element) operator.
Optionally, there may follow immediately after the decimal number
the letter E followed by a decimal number. The E stands for
"exponent", and means "times 10 raised to the power of". You may
provide a + or - between the E and its number. Examples:
0.1 constant one-tenth
.1 the same
300. floating point three hundred
30.E1 30 * 10**1; i.e., three hundred
30.E+1 the same
30.E-1 30 * 10**-1; i.e., three
30E1 not floating point: hex integer 030E1
1.234E20 scientific notation: 1.234 times 10 to the 20th
1.234E-20 a tiny number: 1.234 divided by 10 to the 20th
Overview of Expressions
Most of the operands that you code into your instructions and
data initializations will be simple register names, variable
names, or constants. However, you will regularly wish to code
operands that are the results of arithmetic calculations,
performed either by the machine when the program is running (for
indexing), or by the assembler (to determine the value to
assemble into the program). A86 has a full set of operators that
you can use to create expressions to cover these cases:
* Arithmetic Operators
byte isolation and combination (HIGH, LOW, BY)
addition and subtraction (+,-)
multiplication and division (* , /, MOD)
shifting operators (SHR, SHL, BIT)
* Logical Operators
(AND, OR, XOR, NOT)
* Boolean Negation Operator
(!)
* Relational Operators
(EQ, LE, LT, GE, GT, NE)
* String Comparison Operators
(EQ, NE, =)
8-4
* Attribute Operators/Specifiers
size specifiers (B=BYTE,W=WORD,F=FAR,SHORT,LONG)
attribute specifiers (OFFSET,NEAR,brackets)
segment addressing specifier (:)
compatibility operators (PTR,ST)
built-in value specifiers (TYPE,THIS,$)
* Special Data Duplication Operator
(DUP) --see Chapter 9 for a description
Types of Expression Operands
Numbers and Label Addresses
A number or constant (16-bit number) can be used in most
expressions. A label (defined with a colon) is also treated as
a constant and so can be used in expressions, except when it is a
forward reference.
Variables
A variable stands for a byte- or word-memory location. You may
add or subtract constants from variables; when you do so, the
constant is added to the address of the variable. You typically
do this when the variable is the name of a memory array.
Index Expressions
An index expression consists of a combination of a base register
[BX] or [BP], and/or an index register [SI] or [DI], with an
optional constant added or subtracted. You will usually want to
precede the bracketed expression with B, W, or F; to specify the
kind of memory unit (byte, word, or far pointer) you are
referring to. The expression stands for the memory unit whose
address is the run-time value(s) of the base and/or index
registers added to the constant. See the Effective Address
section and the beginning of this chapter for more details on
indexed memory.
Arithmetic Operators
HIGH/LOW
Syntax: HIGH operand
LOW operand
These operators are called the "byte isolation" operators. The
operand must evaluate to a 16-bit number. HIGH returns the
high order byte of the number; LOW the low order byte.
For example,
MOV AL,HIGH(01234) ; AL = 012
TENHEX EQU LOW(0FF10) ; TENHEX = 010
8-5
These operators can be applied to each other. The following
identities apply:
LOW LOW Q = LOW Q
LOW HIGH Q = HIGH Q
HIGH LOW Q = 0
HIGH HIGH Q = 0
BY
Syntax: operand BY operand
This operator is a "byte combination" operator. It returns the
word whose high byte is the left operand, and whose low byte is
the right operand. For example, the expression 3 BY 5 is the
same as hexadecimal 0305. The BY operator is exclusive to A86. I
added it to cover the following situation: Suppose you are
initializing your registers to immediate values. Suppose you
want to initialize AH to the ASCII value 'A', and AL to decimal
10. You could code this as two instructions MOV AH,'A' and MOV
AL,10; but you realize that a single load into the AX register
would save both program space and execution time. Without the BY
operator, you would have to code MOV AX,0410A, which disguises
the types of the individual byte operands you were thinking
about. With BY, you can code it properly: MOV AX,'A' BY 10.
Addition (combination)
Syntax: operand + operand
operand.operand
operand PTR operand
operand operand
As shown in the above syntax, addition can be accomplished in
four ways: with a plus sign, with a dot operator, with a PTR
operator, and simply by juxtaposing two operands next to each
other. The dot and PTR operators are provided for compatibility
with Intel/IBM assemblers. The dot is used in structure field
notation; PTR is used in expressions such as BYTE PTR 0. (See
Chapter 12 for recommendations concerning PTR.)
If either operand is a constant, the answer is an expression with
the typing of the other operand, with the offsets added. For
example, if BVAR is a byte variable, then BVAR + 100 is the byte
variable 100 bytes beyond BVAR.
Other examples:
DB 100+17 ; simple addition
CTRL EQU -040
MOV AL,CTRL'D' ; a nice notation for control-D!
MOV DX,[BP].SMEM ; --where SMEM was in an unindexed structure
DQ 10.0 + 7.0 ; floating point addition
8-6
Subtraction
Syntax: operand - operand
The subtraction operator may have operands that are:
a. both absolute numbers
b. variable names that have the same type
The result is an absolute number; the difference between the two
operands.
Subtraction is also allowed between floating point numbers; the
answer is the floating point difference.
Multiplication and Division
Syntax: operand * operand (multiplication)
operand / operand (division)
operand MOD operand (modulo)
You may only use these operators with absolute or floating point
numbers, and the result is always the same type. Either operand
may be a numeric expression, as long as the expression evaluates
to an absolute or floating point number. Examples:
CMP AL,2 * 4 ; compare AL to 8
MOV BX,0123/16 ; BX = 012
DT 1.0 / 7.0
Shifting Operators
Syntax: operand SHR count (shift right)
operand SHL count (shift left)
BIT count (bit number)
The shift operators will perform a "bit-wise" shift of the
operand. The operand will be shifted "count" bits either to the
right or the left. Bits shifted into the operand will be set to
0.
The expression "BIT count" is equivalent to "1 SHL count"; i.e.,
BIT returns the mask of the single bit whose number is "count".
The operands must be numeric expressions that evaluate to
absolute numbers. Examples:
MOV BX, 0FACBH SHR 4 ; BX = 0FACH
OR AL,BIT 6 ; AL = AL OR 040; 040 is the mask for bit 6
8-7
Logical Operators
Syntax: operand OR operand
operand XOR operand
operand AND operand
NOT operand
The logical operators may only be used with absolute numbers.
They always return an absolute number.
Logical operators operate on individual bits. Each bit of the
answer depends only on the corresponding bit in the operand(s).
The functions performed are as follows:
1. OR: An answer bit is 1 if either or both of the operand bits
is 1. An answer bit is 0 only if both operand bits are 0.
Example:
11110000xB OR 00110011xB = 11110011xB
2. XOR: This is "exclusive OR." An answer bit is 1 if the
operand bits are different; an answer bit is 0 if the operand
bits are the same. Example:
11110000xB XOR 00110011xB = 11000011xB
3. AND: An answer bit is 1 only if both operand bits are 1. An
answer bit is 0 if either or both operand bits are 0.
Example:
11110000xB AND 00110011xB = 00110000xB
4. NOT: An answer bit is the opposite of the operand bit. It
is 1 if the operand bit is 0; 0 if the operand bit is 1.
Example:
NOT 00110011xB = 11001100xB
Boolean Negation Operator
Syntax: ! operand
The exclamation-point operator, rather than reversing each
individual bit of the operand, considers the entire operand as a
boolean variable to be negated. If the operand is non-zero (any
of the bits are 1), the answer is 0. If the operand is zero, the
answer is 0FFFF.
8-8
Because ! is intended to be used in conditional assembly
expressions (described in Chapter 11), there is also a special
action when ! is applied to an undefined name: the answer is the
defined value 0FFFF, meaning it is TRUE that the symbol is
undefined. Similarly, when ! is applied to some defined quantity
other than an absolute constant, the answer is 0, meaning it is
FALSE that the operand is undefined.
Relational Operators
Syntax: operand EQ operand (equal)
operand NE operand (not equal)
operand LT operand (less than)
operand LE operand (less or equal)
operand GT operand (greater than)
operand GE operand (greater or equal)
The relational operators may have operands that are:
a. both absolute numbers
b. variable names that have the same type
The result of a relational operation is always an absolute
number. They return an 8-or 16-bit result of all 1's for TRUE
and all 0's for FALSE. Examples:
MOV AL, 3 EQ 0 ; AL = 0 (false)
MOV AX, 2 LE 15 ; AX = 0FFFFH (true)
String Comparison Operators
Syntax: string EQ string (equal)
string NE string (not equal)
string = string (equal ignoring case)
In order to subsume the string comparison facilities offered by
That Other Assembler's special conditional-assembly directives
IFIDN and IFDIF, A86 allows the relational operators EQ and NE to
accept string arguments. For this syntax to be accepted by A86,
both strings must be bounded using the same delimiter (either
single quotes for both strings, or double quotes for both
strings). For a match (EQ returns TRUE or NE returns FALSE), the
strings must be the same length, and every character must match
exactly.
8-9
An additional A86-exclusive feature is the = operator, which
returns TRUE if the characters of the strings differ only in the
bit masked by the value 020. Thus you may use = to compare a
macro parameter to a string containing nothing but letters. The
comparison will be TRUE whether the macro parameter is upper-case
or lower-case. No checking is made to detect non-letters, so if
you use = on strings containing non-letters, you may get some
false TRUE results. Also, = is accepted when it is applied to
non-strings as well-- the corresponding values are interpreted as
two-byte strings, with the 020 bits masked away before
comparison.
Attribute Operators/Specifiers
B,W,D,Q,T memory variable specifiers
Syntax: B operand Q operand
operand B operand Q
W operand T operand
operand W operand T
D operand
operand D
B, W, D, F, Q, and T convert the operand into a byte, word,
doubleword, far, quadword, and ten-byte variable, respectively.
The operand can be a constant, or a variable of the other type.
Examples:
ARRAY_PTR:
DB 100 DUP (?)
WVAR DW ?
MOV AL,ARRAY_PTR B ; load first byte of ARRAY_PTR array into AL
MOV AL,WVAR B ; load the low byte of WVAR into AL
MOV AX,W[01000] ; load AX with the memory word at loc. 01000
LDS BX,D[01000] ; load DS:BX with the doubleword at loc. 01000
JMP F[01000] ; jump far to the 4-byte location at 01000
FLD T[BX] ; load ten-byte number at [BX] to 87 stack
For compatibility with Intel/IBM assemblers, A86 accepts the more
verbose synonyms BYTE, WORD, DWORD, FAR, QWORD, and TBYTE for
B,W,D,F,Q,T, respectively.
SHORT and LONG Operators
Syntax: SHORT label
LONG label
8-10
The SHORT operator is used to specify that the label referenced
by a JMP instruction is within 127 bytes of the end of the
instruction. The LONG operator specifies the opposite: that the
label is not within 127 bytes. The appropriate operator can (and
sometimes must) be used if the label is forward referenced in the
instruction.
When a non-local label is forward referenced, the assembler
assumes that it will require two bytes to represent the relative
offset of the label (so the instruction including the opcode byte
will be three bytes). By correctly using the SHORT operator, you
can save a byte of code when you use a forward reference. If the
label is not within the specified range, an error will occur. The
following example illustrates the use of the SHORT operator.
JMP FWDLAB ; three byte instruction
JMP SHORT FWDLAB ; two byte instruction
JMP >L1 ; two byte instruction assumed for a local label
Because the assembler assumes that a forward reference local
label is SHORT, you may sometimes be forced to override this
assumption if the label is in fact not within 127 bytes of the
JMP. This is why LONG is provided:
JMP LONG >L9 ; three byte instruction
If you are bothered by this possibility, you can specify the +L
switch, which causes A86 to pessimistically generate the three
byte JMP for all forward references, unless specifically told not
to with SHORT.
NOTE that LONG will have effect only on the operand to an
unconditional JMP instruction; not to conditional jumps. This is
because the conditional jumps don't have 3-byte forms; the only
conditional jumps are short ones. If you run into this problem,
then chances are your code is getting out of control--time to
rearrange, or to break off some of the intervening code into
separate procedures. If you insist upon leaving the code intact,
you can replace the conditional jump with an "IF cond JMP".
OFFSET Operator
Syntax: OFFSET var-name
OFFSET is used to convert a variable into the constant pointer to
the variable. For example, if you have declared XX DW ?, and
you want to load SI with the pointer to the variable XX, you can
code: MOV SI,OFFSET XX. The simpler instruction MOV SI,XX moves
the variable contents of XX into SI, not the constant pointer to
XX.
8-11
NEAR Operator
Syntax: NEAR operand
NEAR converts the operand to have the type of a code label, as if
it were defined by appearing at the beginning of a program line
with a colon after it. NEAR is provided mainly for compatibility
with Intel/IBM assemblers.
Square Brackets Operator
Syntax: [operand]
Square brackets around an operand give the operand a memory
variable type. Square brackets are generally used to enclose the
names of base and index registers: BX, BP, SI, and DI. When the
size of the memory variable can be deduced from the context of
the expression, square brackets are also used to turn numeric
constants into memory variables. Examples:
MOV B[BX+50],047 ; move imm value 047 into mem byte at BX+50
MOV AL,[050] ; move byte at memory location 050 into AL
MOV AL,050 ; move immediate value 050 into AL
Colon Operator
Syntax: constant:operand
segreg:operand
seg_or_group_name:operand
The colon operator is used to attach a segment register value to
an operand. The segment register value appears to the left of
the colon; the rest of the operand appears to the right of the
colon.
There are three forms to the colon operator. The first form has
a constant as the segment register value. This form is used to
create an operand to a long (inter-segment) JMP or CALL
instruction. An example of this is the instruction JMP 0FFFF:0,
which jumps to the cold-boot reset location of the 86 processor.
The only context other than JMP or CALL in which this first form
is legal, is as the operand to a DD directive or an EQU
directive. The EQU case has a further restriction: the offset
(the part to the right of the colon) must have a value less than
256. This is because there simply isn't room in a symbol table
entry for a segment register value AND a 2-byte offset. I don't
think you will be hurt by this restriction, since references to
other segments are usually to jump tables at the beginning of
those segments.
8-12
The second form has a segment register name to the left of the
colon. This is the segment override form, provided for
compatibility with Intel/IBM assemblers. A86 will generate a
segment override byte when it sees this form, unless the operand
to the right of the colon already has a default segment register
that is the same as the given override.
I prefer the more explicit method of overrides, exclusive to A86:
simply place the segment register name before the instruction
mnemonic. For example, I prefer ES MOV AL,[BX] to MOV
AL,ES:[BX].
The third form has a segment or group name before the colon. This
form is ignored by A86; it is provided for compatibility with
Turbo C, which likes to include spurious DGROUP: overrides, to
satisfy MASM's ASSUME-checking.
ST Operator
ST is ignored whenever it occurs in an expression. It is
provided for compatibility with Intel and IBM assemblers. For
example, you can code FLD ST(0),ST(1), which will be taken by A86
as FLD 0,1.
TYPE Operator
Syntax: TYPE operand
The TYPE operator returns 1 if the operand is a byte variable; 2
if the operand is a word variable; 4 if the operand is a
doubleword variable; 8 if the operand is a quadword variable; 10
if the operand is a ten-byte variable; and the number of bytes
allocated by the structure if the operand is a structure name
(see STRUC in the next chapter).
A common usage of the TYPE operator is to represent the number of
bytes of a named structure. For example, if you have declared a
structure named LINE (as described in the next chapter) that
defines 82 bytes of storage, then two ways you might refer to the
value symbolically are as follows:
MOV CX,TYPE LINE ; loads the size of LINE into CX
DB TYPE LINE DUP ? ; allocates an area of memory for a LINE
THIS and $ Specifiers
THIS returns the value of the current location counter. It is
provided for compatibility with Intel/IBM assemblers. The dollar
sign $ is the more standard and familiar specifier for this
purpose; it is equivalent to THIS NEAR. THIS is typically used
with the BYTE and WORD specifiers to create alternate-typed
symbols at the same memory location:
8-13
BVAR EQU THIS BYTE
WVAR DW ?
I don't recommend the use of THIS. If you wish to retain Intel
compatibility, you can use the less verbose LABEL directive:
BVAR LABEL BYTE
WVAR DW ?
If you are not concerned with compatibility to lesser assemblers,
A86 offers a variety of less verbose forms. The most concise is
DB without an operand:
BVAR DB
WVAR DW ?
If this is too cryptic for you, there is always BVAR EQU B[$].
Operator Precedence
Consider the expression 1 + 2 * 3. When A86 sees this
expression, it could perform the multiplication first, giving an
answer of 1+6 = 7; or it could do the addition first, giving an
answer of 3*3 = 9. In fact, A86 does the multiplication first,
because A86 assigns a higher precedence to multiplication than it
does addition.
The following list specifies the order of precedence A86 assigns
to expression operators. All expressions are evaluated from left
to right following the precedence rules. You may override this
order of evaluation and precedence through the use of parentheses
( ). In the example above, you could override the precedence by
parenthesizing the addition: (1+2) * 3.
Some symbols that we have referred to as operators, are treated
by the assembler as operands having built-in values. These
include B, W, F, $, and ST. In a similar vein, a segment
override term (a segment register name followed by a colon) is
recorded when it is scanned, but not acted upon until the entire
containing expression is scanned and evaluated.
If two operators are adjacent, the rightmost operator must have
precedence; otherwise, parentheses must be used. For example,
the expression BIT ! 1 is illegal because the leftmost operator
BIT has the higher precedence of the two adjacent operators BIT
and "!". You can code BIT (! 1).
--Highest Precedence--
8-14
1. Parenthesized expressions
2. Period
3. OFFSET, SEG, TYPE, and PTR
4. HIGH, LOW, and BIT
5. Multiplication and division: *, /, MOD, SHR, SHL
6. Addition and subtraction: +,-
a. unary
b. binary
7. Relational: EQ, NE, LT, LE, GT, GE =
8. Logical NOT and !
9. Logical AND
10. Logical OR and XOR
11. Colon for long pointer, SHORT, LONG, and BY
12. DUP
--Lowest Precedence--
+615
View File
@@ -0,0 +1,615 @@
CHAPTER 9 DIRECTIVES IN A86
Segments in A86
The following discussion applies when A86 is assembling a .COM
See the next chapter for the discussion of segmentation for .OBJ
files.
A86 views the 86 computer's memory space as having two parts: The
first part is the program, whose contents are the object bytes
generated by A86 during its assembly of the source. A86 calls
this area the CODE SEGMENT. The second part is the data area,
whose contents are generated by the program after it starts
running. A86 calls this area the DATA SEGMENT.
Please note well that the only difference between the CODE and
DATA segments is whether the contents are generated by the
program or the assembler. The names CODE and DATA suggest that
program code is placed in the CODE segment, and data structures
go in the DATA segment. This is mostly true, but there are
exceptions. For example, there are many data structures whose
contents are determined by the assembler: pointer tables, arrays
of pre-defined constants, etc. These tables are assembled in the
CODE segment.
In general, you will want to begin your program with the
directive DATA SEGMENT, followed by an ORG statement giving the
address of the start of your data area. You then list all your
program variables and uninitialized data structures, using the
directives DB, DW, and STRUC. A86 will allocate space starting
at the address given in the ORG statement, but it will not
generate any object bytes in that space. After your data segment
declarations, you provide a CODE SEGMENT directive. If the
program starts at any location other than the standard 0100, you
give an ORG giving the address of the start of your program. You
follow this with the program itself, together with any
assembler-generated data structures. A short program
illustrating this suggested usage follows:
DATA SEGMENT
ORG 08000
ANSWER_BYTE DB ?
CALL_COUNT DW ?
CODE SEGMENT
JMP MAIN
TRAN_TABLE:
DB 16,3,56,23,0,9,12,7
MAIN:
MOV BX,TRAN_TABLE
XLATB
MOV ANSWER_BYTE,AL
INC CALL_COUNT
RET
9-2
A86 allows you to intersperse CODE SEGMENTs and DATA SEGMENTs
throughout your program; but in general it is best to put all
your DATA SEGMENT declarations at the top of your program, to
avoid problems with forward referencing.
CODE ENDS and DATA ENDS Statements
For compatibility with Intel/IBM assemblers, A86 provides the
CODE ENDS and DATA ENDS statements. The CODE ENDS statement is
ignored; we assume that you have not nested a CODE segment inside
a DATA segment. The DATA ENDS statement is equivalent to a CODE
SEGMENT statement.
The ORG Directive
Syntax: ORG address
ORG moves the output pointer (the location counter at which
assembly is currently taking place within the current segment) to
the value of the operand, which should be an absolute constant,
or an expression evaluating to an absolute,
non-forward-referenced constant.
ORG is most often used in a DATA segment, to control the location
of the data area within the segment. For example, in programs
that fit entirely into 64K, you provide an ORG directive as the
first line within your DATA segment at the top of your program.
The location given by the ORG is some location that you are sure
will be beyond the end of your program. If you are sure that
your program will not go beyond 8K (02000 hex), your program can
look like this:
DATA SEGMENT
ORG 02000 ; data goes here, beyond the end of the program
(your data segment variable and buffer declarations go here)
DATA ENDS
(your program goes here)
9-3
There is a special side effect to ORG when it is used in the CODE
segment. If you begin your code segment with ORG 0, then A86
knows that you are not assembling a .COM program; but are instead
assembling a code segment to be used in some other context
(examples: programming a ROM, or assembling a procedure for older
versions of Turbo Pascal). The output file will start at 0, not
0100 as in a .COM file; and the default extension for the output
file will be .BIN, not .COM.
Other than in the above example, you should not in general issue
an ORG within the CODE segment that would lower the value of the
output pointer. This is because you thereby put yourself in
danger of losing part of your assembled program. If you
re-assemble over space you have already assembled, you will
clobber the previously-assembled code. Also, be aware that the
size of the output program file is determined by the value of the
code segment output pointer when the program stops. If you ORG
to a lower value at the end of your program, the output program
file will be truncated to the lower-value address.
Again, almost no program producing a .COM file will need any ORG
directive in the code segment. There is an implied ORG 0100 at
the start of the program. You just start coding instructions,
and the assembler will put them in the right place.
The EVEN Directive
Syntax: EVEN
The EVEN directive coerces the current output pointer to an even
value. In a DATA SEGMENT or STRUC, it does so by adding 1 to the
pointer if the pointer was odd; doing nothing if the pointer was
already even. In a code segment, it outputs a NOP if the pointer
was odd. EVEN is most often used in data segments, before a
sequence of DW directives. The 16-bit machines of the 86 family
fetch words more quickly when they are aligned onto even
addresses; so the EVEN directive insures that your program will
have the faster access to those DW's that follow it. (This speed
improvement will not be seen on the 8-bit machines, most notably
the 8088 of the original IBM-PC.)
Data Allocation Using DB, DW, DD, DQ, and DT
The 86 computer family supports the three fundamental data types
BYTE, WORD, and DWORD. A byte is eight bits, a word is 16 bits
(2 bytes), and a doubleword is 32 bits (4 bytes). In addition,
the 87 floating point processor manipulates 8-byte quantities,
which we call Q-words, and 10-byte quantities, which we call
T-bytes. The A86 data allocation statement is used to specify
the bytes, words, doublewords, Q-words, and T-bytes which your
program will use as data. The syntax for the data allocation
statement is as follows:
9-4
(optional var-name) DB (list of values)
(optional var-name) DW (list of values)
(optional var-name) DD (list of values)
(optional var-name) DQ (list of values)
(optional var-name) DT (list of values)
The variable name, if present, causes that name to be entered
into the symbol table as a memory variable with type BYTE (for
DB), WORD (for DW), DWORD (for DD), QWORD (for DQ), or TBYTE (for
DT). The variable name should NOT have a colon after it, unless
you wish the name to be a label (instructions referring to it
will interpret the label as the constant pointer to the memory
location, not its contents).
The DB statement is used to reserve bytes of storage; DW is used
to reserve words. The list of values to the right of the DB or
DW serves two purposes. It specifies how many bytes or words are
allocated by the statement, as well as what their initial values
should be. The list of values may contain a single value or more
than one, separated by commas. The list can even be missing;
meaning that we wish to define a byte or word variable at the
same location as the next variable.
If the data initialization is in the DATA segment, the values
given are ignored, except as place markers to reserve the
appropriate number of units of storage. The use of "?", which in
.COM mode is a synonym for zero, is recommended in this context
to emphasize the lack of actual memory initialization. When A86
is assembling .OBJ files, the ?-initialization will cause a break
in the segment (unless ? is embedded in a nested DUP containing
non-? terms, in which case it is a synonym for zero).
A special value which can be used in data initializations is the
DUP construct, which allows the allocation and/or initialization
of blocks of data. The expression n DUP x is equivalent to a
list with x repeated n times. "x" can be either a single value,
a list of values, or another DUP construct nested inside the
first one. The nested DUP construct needs to be surrounded by
parentheses. All other assemblers, and earlier versions of A86,
require parentheses around all right operands to DUP, even simple
ones; but this requirement has been removed for simple operands
in the current A86.
Here are some examples of data initialization statements, with
and without DUP constructs:
CODE SEGMENT
DW 5 ; allocate one word, init. to 5
DB 0,3,0 ; allocate three bytes, init. to 0,3,0
DB 5 DUP 0 ; equivalent to DB 0,0,0,0,0
DW 2 DUP (0,4 DUP 7) ; equivalent to DW 0,7,7,7,7,0,7,7,7,7
9-5
DATA SEGMENT
XX DW ? ; define a word variable XX
YYLOW DB ; no init value: YYLOW is low byte of word var YY
YY DW ?
X_ARRAY DB 100 DUP ? ; X_ARRAY is a 100-byte array
D_REAL DQ ? ; double precision floating variable
EX_REAL DT ? ; extended precision floating variable
A character string value may be used to initialize consecutive
bytes in a DB statement. Each character will be represented by
its ASCII code. The characters are stored in the order that they
appear in the string, with the first character assigned to the
lowest-addressed byte. In the DB statement that follows, five
bytes are initialized with the ASCII representation of the
characters in the string 'HELLO':
DB 'HELLO'
Note that except for string comparisons described in the previous
chapter, the DB directive is the only place in your program that
strings of length greater than 2 may occur. In all other
contexts (including DW), a string is treated as the constant
number representing the ASCII value of the string; for example,
CMP AL,'@' is the instruction comparing the AL register with the
ASCII value of the at-sign. Note further that 2-character string
constants, like all constants in the 8086, have their bytes
reversed. Thus, while DB 'AB' will produce hex 41 followed by
hex 42, the similar looking DW 'AB' reverses the bytes: hex 42
followed by hex 41.
For compatibility, A86 now accepts double quotes, as well as
single quotes, for strings in DB directives.
The DD directive is used to initialize 32-bit doubleword pointers
to locations in arbitrary segments of the 86's memory space.
Values for such pointers are given by two numbers separated by a
colon. The segment register value appears to the left of the
colon; and the offset appears to the right of the colon. In
keeping with the reversed-bytes nature of memory storage in the
86 family, the offset comes first in memory. For example, the
statement
DD 01234:05678
appearing in a CODE segment will cause the hex bytes 78 56 34 12
to be generated, which is a long pointer to segment 01234, offset
05678.
DD, DQ, and DT can also be used to initialize large integers and
floating point numbers. Examples:
DD 500000 ; half million, too big for most 86 instructions
DD 3.5 ; single precision floating point number
DQ 3.5 ; the same number in a double precision format
DT 3.5 ; the same number in an extended precision format
9-6
The STRUC Directive
The STRUC directive is used to define a template of data to be
addressed by one of the 8086's base and/or index registers. The
syntax of STRUC is as follows:
(optional strucname) STRUC (optional effective address)
The optional structure name given at the beginning of the line
can appear in subsequent expressions in the program, with the
operator TYPE applied to it, to yield the number of bytes in the
structure template.
The STRUC directive causes the assembler to enter a mode similar
to DATA SEGMENT: assembly within the structure declares symbols
(the elements of the structure), using a location counter that
starts out at the address following STRUC. If no address is
given, assembly starts at location 0. An option not available to
the DATA SEGMENT is that the address can include one base
register [BX] or [BP] and/or one index register [SI] or [DI]. The
registers are part of the implicit declaration of all structure
elements, with the offset value increasing by the number of bytes
allocated in each structure line. For example:
LINE STRUC [BP] ; the template starts at [BP]
DB 80 DUP (?) ; these 80 bytes advance us to [BP+80]
LSIZE DB ? ; this 1 byte advances us to [BP+81]
LPROT DB ?
ENDS
The STRUC just given defines the variables LSIZE, equivalent to
B[BP+80], and LPROT, equivalent to B[BP+81]. You can now issue
instructions such as MOV AL,LSIZE; which automatically generates
the correct indexing for you.
The mode entered by STRUC is terminated by the ENDS directive,
which returns the assembler to whatever segment (CODE or DATA) it
was in before the STRUC, with the location counter restored to
its value within that segment before the STRUC was declared.
Forward References
A86 allows names for a variety of program elements to be forward
referenced. This means that you may use a symbol in one
statement and define it later with another statement. For
example:
JNZ TARGET
.
.
TARGET:
ADD AX,10
9-7
In this example, a conditional jump is made to TARGET, a label
farther down in the code. When JNZ TARGET is seen, TARGET is
undefined, so this is a forward reference.
Earlier versions of A86 were much more restricted in the kinds of
forward references allowed. Most of the restrictions have now
been eased, for convenience as well as compatibility with other
assemblers. In particular, you may now make forward references
to variable names. You just need to see to it that A86 has
enough information about the type of the operand to generate the
correct instruction. For example, MOV FOO,AL will cause A86 to
correctly deduce that FOO is a byte variable. You can even code
a subsequent MOV FOO,1 and A86 will remember that FOO was assumed
to be a byte variable. But if you code MOV FOO,1 first, A86
won't know whether to issue a byte or a word MOV instruction; and
will thus issue an error message. You then specify the type by
MOV FOO B,1.
In general, A86's compatibility with That Other assembler has
improved dramatically for forward references. Now, for most
programs, you need only sprinkle a very few B's and W's into your
references. And you'll be rewarded: in many cases the word form
is longer than the byte form, so that the other assembler winds
up inserting a wasted NOP in your program. You'll wind up with
tighter code by using A86!
Forward References in Expressions
A86 now allows you to add or subtract a constant number from a
forward reference symbol; and to append indexing registers to a
forward reference symbol. This covers a vast majority of
expressions formerly disallowed. For the remaining, more
complicated expressions, there is a trick you can use to work
your way around almost any case where you might run into a
forward reference restriction. The trick is to move the
expression evaluation down in your program so that it no longer
contains a forward reference; and forward reference the
evaluation answer. For example, suppose you wish to advance the
ES segment register to point immediately beyond your program. If
PROG_SIZE is the number of bytes in your program, then you add
(PROGSIZE+15)/16 to the program's segment register value. This
value is known at assembly time; but it isn't known until the end
of the program. You do the following:
MOV AX,CS ; fetch the program's segment value
ADD AX,SEG_SIZE ; use a simple forward reference
MOV ES,AX ; ES is now loaded as desired
Then at the end of the program you evaluate the expression:
PROG_SIZE EQU $
SEG_SIZE EQU (PROG_SIZE+15)/16
9-8
The EQU Directive
Syntax: symbol-name EQU expression
symbol-name EQU built-in-symbol
symbol-name EQU INT n
The expression field may specify an operand of any type that
could appear as an operand to an instruction.
As a simple example, suppose you are writing a program that
manipulates a table containing 100 names and that you want to
refer to the maximum number of names throughout the source file.
You can, of course, use the number 100 to refer to this maximum
each time, as in MOV CX,100, but this approach suffers from two
weaknesses. First of all, 100 can mean a lot of things; in the
absence of comments, it is not obvious that a particular use of
100 refers to the maximum number of names. Secondly, if you
extend the table to allow 200 names, you will have to locate each
100 and change it to a 200. Suppose, instead, that you define a
symbol to represent the maximum number of names with the
following statement:
MAX_NAMES EQU 100
Now when you use the symbol MAX_NAMES instead of the number 100
(for example, MOV CX,MAX_NAMES), it will be obvious that you are
referring to the maximum number of names in the table. Also, if
you decide to extend the table, you need only change the 100 in
the EQU directive to a 200 and every reference to MAX_NAMES will
reflect the change.
You could also take advantage of A86's strong typing, by changing
MAX_NAMES to a variable:
MAX_NAMES DB ?
or even an indexed quantity:
MAX_NAMES EQU [BX+1]
Because the A86 language is strongly typed, the instruction for
loading MAX_NAMES into the CX register remains exactly the same
in all cases: simply MOV CX,MAX_NAMES.
9-9
Equates to Built-In Symbols
A86 allows you to define synonyms for any of the assembler
reserved symbols, by EQUating an alternate name of your choosing,
to that symbol. For example, suppose you were coding a source
module that is to be incorporated into several different
programs. In some programs, a certain variable will exist in the
code segment. In others, it will exist in the stack segment. You
want to address the variable in the common source module, but you
don't know which segment override to use. The solution is to
declare a synonym, QS, for the segment register. QS will be
defined by each program: the code-segment program will have a QS
EQU CS at the top of it; the stack-segment program will have QS
EQU SS. The source module can use QS as an override, just as if
it were CS or SS. The code would be, for example, QS MOV
AL,VARNAME.
The NIL Prefix
A86 provides a mnemonic, NIL, that generates no code. NIL can be
used as a prefix to another instruction (which will have no
effect on that instruction), or it can appear by itself on a
line. NIL is provided to extend the example in the previous
section, to cover the possibility of no overrides. If your
source module goes into a program that fits into 64K, so that all
the segment registers have the same value, then code QS EQU NIL
at the top of that program.
Interrupt Equates
A86 allows you to equate your own name to an INT instruction with
a specific interrupt number. For example, if you place TRAP EQU
INT 3 at the top of your program, you can use the name TRAP as a
synonym for INT 3 (the debugger trap on the 8086).
Duplicate Definitions
A86 contains the unique feature of duplicate definitions. We
have already discussed local symbols, which can be redefined to
different values without restriction. Local symbols are the only
symbols that can be redefined. However, any symbol can be
defined more than once, as long as the symbol is defined to be
the same value and type in each definition.
This feature has two uses. First, it eases modular program
development. For example, if two independently-developed source
files both use the symbol ESC to stand for the ASCII code for
ESCAPE, they can both contain the declaration ESC EQU 01B, with
no problems if they are combined into the same program.
9-10
The second use for this feature is assertion checking. Your
deliberate redeclaration of a symbol name is an assertion that
the value of the symbol has not changed; and you want the
assembler to issue you an error message if it has changed.
Example: suppose you have declared a table of options in your
DATA segment; and you have another table of initial values for
those options in your CODE segment. If you come back months
later and add an option to your tables, you want to be reminded
to update both tables in the same way. You should declare your
tables as follows:
DATA SEGMENT
OPTIONS:
.
.
OPT_COUNT EQU $-OPTIONS ; OPT_COUNT is the size of the table
CODE SEGMENT
OPT_INITS:
.
.
OPT_COUNT EQU $-OPT_INITS ; second OPT_COUNT had better be the same!
The = Directive
Syntax: symbol-name = expression
symbol-name = built-in-symbol
symbol-name = INT n
The equals sign directive is provided for compatibility with That
Other assembler. It is identical to the EQU directive, with one
exception: if the first time a symbol appears in a program is in
an = directive, that symbol will be taken as a local symbol. It
can be redefined to other values, just like the generic local
symbols (letter followed by digits) that A86 supports. (If you
try to redefine an EQU symbol to a different value, you get an
error message.) The = facility is most often used to define
"assembler variables", that change value as the assembly
progresses.
The PROC Directive
Syntax: name PROC NEAR
name PROC FAR
name PROC
PROC is a directive provided for compatibility with Intel/IBM
assemblers. I don't like PROC; and I recommend that you do not
use it, even if you are programming for those assemblers.
9-11
The idea behind PROC is to give the assembler a mechanism whereby
it can decide for you what kind of RET instruction you should be
providing. If you specify NEAR in your PROC directive, then the
assembler will generate a near (same segment) return when it sees
RET. If you specify FAR in your PROC directive, the assembler
will generate a far RETF return (which will cause both IP and CS
to be popped from the stack). If you simply leave well enough
alone, and never code a PROC in your program, then RET will mean
near return throughout your program.
The reason I don't like PROC is because it is yet another attempt
by the assembler to do things "behind your back". This goes
against the reason why you are programming in assembly language
in the first place, which is to have complete control over the
code generated by your source program. It leads to nothing but
trouble and confusion.
Another problem with PROC is its verbosity. It replaces a simple
colon, given right after the label it defines. This creates a
visual clutter in the program, that makes the program harder to
read.
A86 provides an explicit RETF mnemonic so that you don't need to
use PROC to distinguish between near and far return instructions.
You can use RET or a near return and RETF for a far return. Even
if you are programming in that other assembler, and you need to
code a far return, I recommend that you create a RETF macro (it
would have the single line DB 0CBH), and stay away from PROCs
entirely.
The ENDP Directive
Syntax: [name] ENDP
The only action A86 takes when it sees an ENDP directive is to
return the assembler to its (sane) default state, in which RET is
a near return.
NOTE that this means that A86 does not support nested PROCs, in
which anything but the innermost PROC has the FAR attribute. I'm
sorry if I am blunt, but anybody who would subject their program
to that level of syntactic clutter has rocks in their head.
The LABEL Directive
Syntax: name LABEL NEAR
name LABEL FAR
name LABEL BYTE
name LABEL WORD
LABEL is another directive provided for compatibility with
Intel/IBM assemblers. A86 provides less verbose ways of
specifying all the above LABEL forms, except for LABEL FAR.
9-12
LABEL defines "name" to have the type given, and a value equal to
the current output pointer. Thus, LABEL NEAR is synonymous with
a simple colon following the name; and LABEL BYTE and LABEL WORD
are synonymous with DB and DW, respectively, with no operands.
LABEL FAR does have a unique functionality, not found in other
assemblers. It identifies "name" as a procedure that can be
called from outside this program's code segment. Such procedures
should have RETFs instead of RETs. Furthermore, I have provided
the following feature, unique to A86: if you CALL the procedure
from within your program, A86 will generate a PUSH CS instruction
followed by a NEAR call to the procedure. Other assemblers will
generate a FAR call, having the same functional effect; but the
FAR call consumes more program space, and takes more time to
execute.
WARNING: you cannot use the above CALL feature as a forward
reference; the LABEL FAR definition must precede any CALLs to it.
This is unavoidable, since the assembler must assume that a CALL
to an undefined symbol takes 3 program bytes. All assemblers
will issue an error in this situation.
+686
View File
@@ -0,0 +1,686 @@
CHAPTER 10 RELOCATION AND LINKAGE
A86 allows you to produce either .COM files, which can be run
immediately as standalone programs, or .OBJ files, to be fed to
the MS-DOS LINK program. In this chapter I'll discuss .OBJ mode
of A86.
.OBJ Production Made Easy
I'll start by giving you the minimum amount of information you
need to know to produce .OBJ files. If you are writing short
interface routines, and do not want to concern yourself with the
esoterica of .OBJ files (segments, groups, publics, etc.), you
can survive quite nicely by reading only this section.
There are two ways you can cause A86 to produce a .OBJ file as
its object output. One way is to explicitly give .OBJ as the
output file name: for example, you can assemble the source file
FOO.8 by giving the command "A86 FOO.8 FOO.OBJ". The other way
is to specify the switch +O (letter O not digit 0). This is
illustrated by the invocation "A86 +O FOO.8", which will have the
same effect as the first invocation.
My design philosophy for .OBJ production is to accommodate two
types of user. The first type of user is writing new code, to
link to other (usually high level language) modules. That person
should be able to write the module with a minimum of red tape,
and have A86 do the right thing. The second type of user has
existing modules written for Intel/IBM assemblers, and wants to
port them to A86. A86 should recognize and act upon all the
relocation directives (SEGMENT, GROUP, PUBLIC, EXTRN, NAME, END)
given. The assembly should work even if several files, assembled
separately under the Intel/IBM assembler, are fed to a single A86
assembly. You'll see if you read on through this entire chapter
that the multiple-files requirement causes A86 to interpret some
of the relocation directives a little differently (while
achieving compatible results).
Let's suppose you're writing new code: for example, an interface
routine to the "C" language, that multiplies a 16-bit number by
10. "C" pushes the input number onto the stack, before calling
your routine. Your code needs to get the number, multiply it by
10, and return the answer in the AX register. You can code it:
_MUL10: ; "C" expects all public names to start with "_"
PUSH BP ; "C" expects BP to be preserved
MOV BP,SP ; we use BP to address the stack
MOV AX,[BP+4] ; fetch the number N, beyond BP and the ret addr
ADD AX,AX ; 2N
MOV BX,AX ; 2N is saved in BX
ADD AX,AX ; 4N
ADD AX,AX ; 8N
ADD AX,BX ; 8N + 2N = 10N
POP BP ; BP is restored
RET ; go back to caller
10-2
These 11 lines can be your entire source file! If you name the
file MUL10.8, A86 will create an object file MUL10.OBJ, that
conforms to the standard SMALL model of computation for high
level languages. If you use RETF instead of RET (thus, by the
way, getting the operand from BP+6 instead of BP+4), the object
module will conform to the standard LARGE model of computation.
All the red tape information required by the high level language
is provided implicitly by A86. I'll go through this information
in detail later, but you should need to read about it only if
you're curious.
What happens if you need to access symbols outside the module
you're assembling? If the type of the symbol is correctly
guessed from the instruction that refers to it, then you can
simply refer to it, and leave it undefined within the module. For
example, if A86 sees the instruction CALL PRINT with PRINT
undefined, it will assume that PRINT is a NEAR procedure. If
PRINT is never defined within the module, A86 will act as if you
declared PRINT via the directive EXTRN PRINT:NEAR. The address
of PRINT will be plugged into your instruction by LINK when it
combines A86's .OBJ file with the high level language's .OBJ
files, to make the final program.
In general, the undefined operand to any CALL or JMP instruction
is assumed to be NEAR. The second (source) operand to a MOV or
arithmetic instruction is assumed to be ABS (i.e., an immediate
constant). An undefined first (destination) operand is assumed
to be a simple memory variable, of the same size (BYTE or WORD)
as the register given in the second operand. If your external
symbol does not comply with these guidelines, you need to declare
it with an EXTRN before you use it. (You can also use EXTRN to
declare types of non-complying forward references within your
module, as you'll see later.)
If you'd like to link the MUL10 procedure to Turbo Pascal V4.0 or
later, you need to append the line CODE SEGMENT PUBLIC to the top
of the program, to name the program segment according to Turbo
Pascal's expectations. You may dispense with the leading
underscore in the name MUL10-- Turbo Pascal does not require or
expect it.
At this point, if you're a casual user, I think you've read
enough to get going! Read further only if you wish; or if you
get stuck, and need to master the esoterica.
10-3
Overview of Relocation and Linkage
When you assemble a program directly into a .COM file, the
program has just two forms: the source program, that you can
understand, and the .COM file, that the computer can "understand"
(i.e., execute). A .OBJ file is an intermediate format: neither
you nor the (executing) computer can make sense out of a .OBJ
file; only programs like LINK interpret .OBJ files. The purpose
of a .OBJ file is to allow you to assemble or compile just a part
of a program. The other parts (also in the form of .OBJ files)
can be produced at a different time; often by a different
assembler or compiler, whose source files are in a different
language. It's easy to see where the word "linkage" comes from:
the LINK program puts the pieces of a program together. The
"relocation" comes because the assembler or compiler that makes a
given program piece doesn't know how many other pieces will come
before it, or how big the other pieces will be. Each piece is
constructed as if it started at location 0 within the program;
then LINK "relocates" the piece to its true location.
Many of the relocation features of 86 assembly language are
couched in terms of LINK's point of view, so we must look at the
way LINK sees things. LINK calls a .OBJ file an "object module",
or just "module". Each module has a NAME, that can be referred
to when LINK issues diagnostic messages, such as error messages
and symbol maps. If a program symbol is used only within a
single module, it does not need to be given to LINK, except
possibly to pass along to a symbolic debugger. On the other
hand, if a program symbol is defined in one module and referenced
in other modules, then LINK needs to know the name of the symbol,
so it can resolve the references. Such a symbol is PUBLIC in the
module in which it is defined; it is "external" in the other
modules, containing references to it. Finally, exactly one
module in a program must contain the starting location for the
program; that module is called the "main module", and it must
supply the starting address (which is not necessarily at the
beginning of the module).
In the 86 family of microprocessors, the LINK system also does
much to manage the memory segments that a program will fit into,
and get its data from. The (grotesquely ornate) level of support
for segmentation was dictated by Intel when it specified (and IBM
and the compiler makers accepted) the format that .OBJ files will
have. I attended the fateful meeting at Intel, in which the
crucial design decisions were made. I regret to say that I sat
quietly, while engineers more senior than I applied their fertile
imaginations to construct fanciful scenarios which they felt had
to be supported by LINK. Let's now review the resulting
segmentation model.
10-4
The parts of a program, as viewed by LINK, come in three
different sizes: they can be (1) pieces of a single segment, (2)
an entire single segment, or (3) a sequence of consecutive
segments in 86 memory. Size (1) should have been called
something like FRAGMENT, but is instead called SEGMENT. Size (2)
should have been called SEGMENT, but is instead called GROUP.
Size (3) should have been called "group", but is instead called
"class". Let me cling to the sensible terminology for one more
paragraph, while I describe the worst scenario Intel wanted to
support; then when I discuss individual directives, I'll
regretfully revert to the official terminology.
The scenario is as follows: suppose you have a program that
occupies about 100K bytes of memory. The program contains a core
of 20K bytes of utility routines that every part of the program
calls. You'd like every part of the program to be able to call
these routines, using the NEAR form to save memory. By gum, you
can do it! You simply(!) slice the program into three fragments:
the utility routines will go into fragment U, and the rest of the
program will be split into equal-sized 40K-byte fragments A and
B. Now you arrange the fragments in 8086 memory in the order
A,U,B. The fragments A and U form a 60K-byte block, addressed by
a segment register value G1, that points to the beginning of A.
The fragments U and B form another 60K-byte block addressed by a
segment register value G2, that points to the beginning of U. If
you set the CS register to G1 when A is executing, and G2 when B
is executing, the U fragment is accessible at all times. Since
all direct JMPs and CALLs are encoded as relative offsets, the
U-code will execute direct jumps correctly whether addressed by
G1 with a huge offset, or G2 with a small offset. Of course, if
U contains any absolute pointers referring to itself (such as an
indirect near JMP or CALL), you're in trouble.
It's now been over a decade since the fateful design meeting took
place, and I can report that the above scenario has never taken
place in the real world. And I can state with some authority
that it never will. The reason is that the only programs that
exceed 64K bytes in size are coded in high level language, not
assembly language. High level language compilers follow a very,
very restricted segmentation model-- no existing model comes
remotely close to supporting the scheme suggested by the
scenario. But the 86 assembly language can support it-- the
directives "G1 GROUP A,U" and "G2 GROUP B,U", followed by chunks
of code of the appropriate object size, headed by directives "A
SEGMENT", "B SEGMENT", and "U SEGMENT". The LINK program is
supposed to sort things out according to the scenario; but I
can't say (and I have my doubts) if it actually succeeds in doing
so.
The concept of "class" was added as an afterthought, to implement
the more sensible and usable features that outsiders thought
GROUPs were implementing; namely, the ability to specify that
different (and disjoint!) segments occur consecutively in memory.
This allows programs to be arranged in a consistent manner-- for
example, with all program code followed by all static data
segments followed by all dynamically allocated memory.
10-5
The NAME Directive
Syntax: NAME module_name
The NAME directive specifies that "module_name" be given to LINK
as the name of the module produced by this assembly. The symbol
"module_name" can be used elsewhere in your program without
conflict: it can even, if you like, be a built-in assembler
mnemonic (e.g. "NAME MOV" is acceptable)!
If you do not provide a NAME directive, A86 will use the name of
the output object file, without the .OBJ extension. If you
provide more than one NAME directive, A86 will use the last one
given, with no error reported.
The PUBLIC Directive
Syntax: PUBLIC sym1, sym2, sym3, ...
PUBLIC
The PUBLIC directive allows you to explicitly list the symbols
defined in this assembly, that can be used by other modules. If
you do not give any PUBLIC directives in your program, A86 will
use every relocatable label and variable name in your program,
except local labels (the redefinable labels consisting of a
letter followed by digits: L7, M1, Q234, etc.). Symbols EQUated
to constants, and symbols defined within structures and DATA
SEGMENTs, are not implicitly declared PUBLIC: you have to
explicitly include them in a PUBLIC directive.
A86 maintains an internal flag, telling it whether to figure out
for itself which symbols are PUBLIC, or to let the program
explicitly declare them. The flag starts out "implicit", and is
set to "explicit" only if A86 sees a PUBLIC directive with no
names at all, or a PUBLIC directive containing at least one name
that would have been implicitly made PUBLIC.
If you are writing new code, you'll probably want to keep the
flag "implicit". You use the PUBLIC directive only for those
symbols which have the form of local labels, but aren't (e.g., a
memory variable I1987 for 1987 income); and for absolute values
that are globally accessed -- e.g. specify "PUBLIC
OPEN_FILES_LIMIT" for a symbol defined as "OPEN_FILES_LIMIT EQU
20".
If you are porting existing code, that code will already have
PUBLIC directives in it, and A86 will go to "explicit" mode,
duplicating the functionality of other assemblers.
The PUBLIC directive with no names is used to force "explicit"
mode, thus causing (if there are no further PUBLICs with names)
the .OBJ file to declare no symbols PUBLIC.
10-6
There is another side effect to the PUBLIC directive: if a symbol
is declared PUBLIC in a module, it had better be defined in that
module. If it isn't then A86 includes it in the .ERR listing of
undefined symbols in the module, and suppresses output of the
object file.
The EXTRN Directive
Syntax: EXTRN sym1:type, sym2:type, ...
where "type" is one of: BYTE WORD DWORD QWORD TBYTE FAR
or synonymously: B W D Q T F
or: NEAR ABS
The EXTRN directive allows you to attach a type to a symbol that
may not yet be defined (and may never be defined) within your
program. This is often necessary for the assembler to generate
the correct instruction form when the symbol is used as an
operand. All the possible types except ABS are defined elsewhere
in the A86 language, but I list them again here for convenience:
B or BYTE: byte-sized memory variable
W or WORD: word (2 byte) sized memory variable
D or DWORD: doubleword (4-byte) sized memory variable
Q or QWORD: quadword (8-byte) sized memory variable
T or TWORD: 10-byte-sized memory variable
NEAR: program label accessed within a segment
FAR: program label accessed from outside this segment
ABS: an absolute number (i.e., an immediate constant)
An example of EXTRN usage is as follows: suppose there is a word
memory variable IFARK in your program. The variable might be
declared at the end of the program; or it might be defined in a
module completely outside of this program. Without an EXTRN
directive, A86 will assemble an instruction such as "MOV
AX,IFARK" as the loading of an immediate constant IFARK into the
AX register. If you place the directive "EXTRN IFARK:W" at the
top of your program, you'll get the correct instruction form for
MOV AX,IFARK-- moving a word memory variable into the AX
register.
A86 will allow more than one EXTRN directive for a given symbol,
as long as the same type is given every time. A86 will even
allow an EXTRN directive for a symbol that has already been
defined, as long as the type declared is consistent with the
symbol's definition. These allowances exist so that you can
assemble multiple files written for another assembler, that had
been fed separately to that assembler.
10-7
Note that EXTRN is viewed quite differently by A86 than by other
assemblers. In fact, if it weren't for those other assemblers,
I'd use the mnemonic DECLARE instead of EXTRN. A86 doesn't
really use EXTRN to determine which symbols are external-- it
uses those symbols that are undefined at the end of assembly. As
I stated earlier in the chapter, an undefined symbol can be
referenced without being declared via EXTRN. Conversely, a
defined symbol can be declared (and redeclared) via EXTRN; being
defined, such a symbol will not be specified "external" in the
.OBJ file.
Because EXTRN is useful in forward reference situations, it is
now recognized even when A86 is assembling a .COM file.
For those of you who are accustomed to the more traditional use
of EXTRN, and who do not like external records to be created
"behind your back", A86 offers the "+x" option. If you include
"+x" in the program invocation, A86 will require that all
undefined symbols be explicitly declared via an EXTRN. Any
undefined, undeclared symbols will be included in the .ERR
listing of undefined symbols, and object file output will be
suppressed.
MAIN: The Starting Location for a Program
I've already stated that exactly one module in a program is the
"main" module, containing the starting address of the entire
program. In A86 when assembling .OBJ files, the starting address
is given by the label MAIN. You simply provide the label "MAIN:"
where you want the program to start. The module containing MAIN
is the main module.
The END Directive
Syntax: END
END start_addr
The END directive is used by other assemblers for two purposes,
both of which are now a little silly. The first purpose is to
signal the end of assembly. This was necessary back in the days
when source files were input on media such as paper tape: you had
to tell the assembler explicitly that the content of the tape has
ended. Today the operating system can tell you when you've
reached the end of the file, so this function is an anachronism.
The second purpose of END is, nonsensically, to allow you to
specify the starting location of the program. I suppose the
person who wrote the first assembler back in the 1950's was too
short on memory to implement a separate START directive, or a
MAIN label like A86 has, and decided to let END do double duty.
I've always considered the example "END START" to have an
Alice-in-Wonderland quality; it is fuel for the
high-level-language snobs who like to attack assembly language.
Please defeat the snobs, and use "MAIN:" if you are writing new
code.
10-8
For compatibility, A86 treats "END start_addr" exactly the same
as if you had coded "MAIN EQU start_addr". Note that if you want
your program to assemble under both A86 and that other assembler,
you can specify "END MAIN"-- A86 treats MAIN EQU MAIN as a legal
redefinition of the symbol MAIN.
A86 ignores END when there is no starting-address operand, thus
allowing assembly of multiple files written for other assemblers.
The SEGMENT Directive
Syntax: seg_name SEGMENT [align] [combine] ['class_name']
where "align" is one of: BYTE WORD PARA PAGE
"combine" is one of: PUBLIC STACK COMMON MEMORY
AT number
The SEGMENT directive says that assembled object code will
henceforth go to a block of code whose name is "seg_name".
"seg_name" is a symbol that represents a value that can be loaded
into a segment register. If "seg_name" is not declared in a
GROUP directive, then its value should in fact be loaded into a
segment register, in order to address the code. If "seg_name" is
declared in a GROUP directive, then the code is a a part of the
segment addressed by the name of the group.
A program can consist of any number of named segments, to be
combined in numerous exotic ways to produce the final program.
You can redirect your object output from one segment to another
in your assembly, by providing a SEGMENT directive before each
piece of code. You can even return to a segment you started
earlier, by repeating a SEGMENT with the same name-- the
assembler just picks up where it left off, subject to some
possible skipping for memory alignment, that I'll describe
shortly.
The specifications following the word SEGMENT help to describe
how the code in this module's part of the segment will be
combined with code for the same segment name given in other
modules; and also how this named segment will be grouped with
other named segments. Other assemblers require the
specifications to be given in the order indicated. A86 will
accept any order, and will accept commas between the
specifications if you want to provide them. The only restriction
is that "AT number" must be followed by a comma if it is not the
last specification on the line.
10-9
The "align" specification tells if each piece of code within the
segment should be aligned so that its starting address is an even
multiple of some number. BYTE alignment means there is no
requirement; WORD alignment requires each piece to start at a
multiple of 2; PARA alignment, at a multiple of 16; PAGE
alignment, at a multiple of 256. For example, suppose you have a
segment containing memory variables. You can declare the segment
with the statement "VAR_DATA SEGMENT WORD", which insures that
the segment is aligned to an even memory address. That way you
can insure that all 16-bit and bigger memory quantities in the
segment are aligned to even addresses, for faster access on the
16-bit machines of the 86 family.
There are special rules governing alignment for multiple pieces
of the same named segment within the same program module. Other
assemblers outlaw conflicting alignment specifications in this
situation; A86 accepts them, and uses the strictest specification
given. Furthermore, the alignment given for any specification
beyond the first will control the alignment for that piece of
code within this module's chunk. For example, if a program
contains two pieces of code headed by "VAR_DATA SEGMENT WORD",
A86 will insert a byte between the pieces if the first piece has
an odd number of bytes. This insures correct assembly for
multiple files written for another assembler.
If no "align" type is given for any of the pieces of a named
segment, an alignment of PARA is assumed.
The "combine" specification tells how the chunk of code from this
module will be combined with the chunks of the same named
segment, that come from other modules. Yes, I know, that sounds
like what "align" does; but "combine" takes a different, more
major point of view:
* PUBLIC is the kind of combination we've been talking about all
along: each piece of the segment is located off the end of the
previously linked piece, subject to possible gaps for
alignment. The size of the segment is the sum of the sizes of
the pieces, plus the sizes of the gaps.
* STACK is a combination type reserved for the system's stack
segment. To illustrate how STACK segment chunks are combined,
let's describe the only way a stack segment should ever be
used. We'll call the segment STACK; and we declare it as
follows:
STACK SEGMENT WORD STACK
DW 100 DUP (?)
TOP_OF_STACK:
10-10
The code just given declares a stack area of 200 bytes (100
words) for this module. If identical code occurs in each of
three modules which are then linked together, the resulting
STACK segment will have 600 bytes (the sizes are added), but
TOP_OF_STACK will be the same address (600) for each module
(each piece is overlayed at the top of the segment). That way,
every module can declare and access the top of the stack, which
is the only static part of the stack that any code should ever
refer to.
* COMMON is a type of memory area supported by FORTRAN. Each
module's chunk of a COMMON segment starts at location 0, and
overlaps (usually duplicates) the pieces from all the other
modules. The size of a COMMON segment is the size of the
largest chunk.
* MEMORY is supposed to be another kind of COMMON segment, that
is distinguished by automatically being located beyond all
other segments in memory. The MS_DOS LINK program, however,
does not implement MEMORY segments, and instead treats them
identically to PUBLIC (not COMMON!) segments. I can see no
useful purpose to the MEMORY combine type, since the
functionality can be achieved by putting a COMMON segment into
a 'class' by itself, that goes above all the other classes. So
don't use MEMORY.
Sorry, I don't support the assembly of multiple files written
for other assemblers, that contain STACK, COMMON, or MEMORY
segments. If I did, I would have to detect the file breaks,
and duplicate the overlapping functionality of these segment
types. Since I don't think anybody out there is using these
esoteric types, I didn't bother to support them to that extent.
Objections, anyone?
* "AT number" defines a non-combinable segment at the absolute
memory location whose segment register value is "number". This
form is useful for initializing data in fixed locations, such
as the 86 interrupt vector (IVECTOR SEGMENT AT 0 followed by
ORG 4 * INT_NUMBER), or for reading fixed memory locations,
such as the BIOS variables area (BIOS_DATA SEGMENT AT 040).
The combine type specification can be repeated in subsequent
pieces of a given segment, but if it is, it must be the same in
all pieces.
Finally, if no combine type is ever given for a named segment in
a module, that segment is non-combinable-- no other modules may
define that segment; the code given in the one module constitutes
the entire segment.
10-11
The last specification available on a SEGMENT line is the class
name, which is identified by being enclosed in single quotes.
Unlike a segment name, which can be used as an instruction
operand and hence cannot conflict with other assembler symbols, a
class name can be assigned without regard to its usage elsewhere
in the program. It can even be a built-in A86 mnemonic. In
fact, both the SMALL and LARGE high-level-language models specify
the class name 'CODE' for code segments, and the SMALL model
specifies the class name 'DATA'.
If no class name is given for a segment, A86 specifies the null
(zero length) string as the class name.
DATA SEGMENT, STRUC and CODE SEGMENT Directives
The DATA SEGMENT and STRUC directives work in .OBJ mode exactly
as they do in .COM mode-- they define a special assembly mode, in
which declarations are made, but no object code is output.
Offsets within DATA segments and structures are absolute, as in
.COM mode. Assembly resumes as before when an ENDS or CODE
SEGMENT directive is encountered.
For MASM compatibility (especially in modules written to link to
Turbo Pascal V4.0 programs), I now recognize the keywords CODE,
DATA, and STACK as ordinary relocatable segment names. The
ordinary functionality takes effect whenever a SEGMENT directive
is given with CODE, DATA or STACK as the segment name, and with
one or more relocatable parameters (e.g., PUBLIC) given after
SEGMENT.
The ENDS Directive
Syntax: [seg_name] ENDS
The ENDS directive closes out the segment currently being
assembled, and returns assembly to the segment being assembled
before the last SEGMENT directive. The "seg_name", if given,
must match the name in that last SEGMENT directive. ENDS allows
you to "nest" segments inside one another. For example, you can
declare some static data variables that are specific to a certain
section of code at the top of that section:
_DATA SEGMENT BYTE PUBLIC 'DATA'
VAR1 DB ?
VAR2 DB ?
_DATA ENDS
These four lines can be inserted inside any other segment being
assembled. They will cause the two variable allocations to be
tacked onto the segment _DATA; and assembly will then continue in
whatever segment surrounded the four lines. Observe that the
"nesting" does not occur in the final program; only the
presentation of the source code is nested.
10-12
If you are not nesting segments inside one another, then the ENDS
directive serves only to lend a clean, "block-structured"
appearance to your source code. It does not assist A86 in any
particular way; in fact, it consumes a bit more object output
memory (slightly reducing object output capacity) if you have
ENDSs, rather than just starting up new segments with SEGMENT
directives.
Default Outer SEGMENT
Other assemblers outlaw any code outside of a SEGMENT
declaration, forcing you to give a SEGMENT declaration before you
can assemble anything. A86 lets you assemble just your code; you
don't have to worry about SEGMENTs if you don't want to.
If you do provide code outside of all SEGMENT declarations, A86
performs the following steps, to find a reasonable place to put
the code:
1. If there are any segments explicitly declared whose name is or
ends with "_TEXT", then the first such segment declared is
used. It is as if the SEGMENT declaration appeared at the top
of, rather than within, the program.
2. If there is no such explicit segment, A86 creates a BYTE
PUBLIC segment of class 'CODE', and proceeds to construct a
name for the segment. If there are no RETF instructions in
the outer segment, the name chosen is "_TEXT", conforming to
the SMALL model of computation. If there is a RETF
instruction, the name chosen is "modulename_TEXT", where
"modulename" is the name of this module. Recall that
"modulename" comes from the NAME directive if there is one;
from the name of the .OBJ file if there isn't.
The GROUP Directive
Syntax: group_name GROUP seg_name1, seg_name2, ...
The GROUP directive causes A86 to tell LINK that all the listed
segments can fit into a single 64K-byte block of memory, and
instruct LINK to make that fit. (If they won't fit, LINK will
issue an error message.) Having declared the group, you can then
use "group_name" as the segment register value that will allow
simultaneous access to all the named segments. The order of
names given in the list does not necessarily determine the order
in which the segments will finally appear within the group.
The most useful application of the GROUP directive is to allow
you to structure the pieces of a program, all of whose code and
data will fit into a single 64K segment. You organize the pieces
into SEGMENTs, and declare all the SEGMENTs to be within the same
GROUP. When the program starts, all segment registers are set to
point to the GROUP, and you never have to worry about segment
registers again in the program.
10-13
WARNING: If your segments will be GROUPed in the final program,
you should have the appropriate GROUP directive in every module
assembled. If you don't, then any memory pointers generated will
be relative to the beginning of the individual named segments,
not to the beginning of the whole group.
Because of the obscure scenario I described in the Overview
section, Intel does not prohibit more than one GROUP from
containing some of the same segments; so neither does A86. Any
pointers within a segment will be calculated from the beginning
of the last GROUP that the segment was declared within. But
again, I have my doubts as to whether LINK will handle this
correctly.
The SEG Operator
Syntax: SEG operand
The SEG operator returns the segment containing its operand-- a
value suitable for loading into one of the segment registers. If
the operand is an explicit far constant such as 01811:0100, the
value returned is the lefthand component of the constant (01811
in this example). Otherwise, the result depends on A86's output
mode:
When A86 is assembling to an OBJ file, the result is the named
relocatable segment containing the operand. SEG is most useful
when the operand is not defined in this A86 module: in that case,
the segment value will be plugged in by LINK.
When A86 is assembling to a COM file, SEG always returns the CS
register, with one exception: symbols declared within a SEGMENT
AT structure return the value of the containing segment. COM
files have no facility for explicitly specifying relocatable
segments, so for compatibility A86 assumes that all non-absolute
segment references are to the program's segment itself.
+827
View File
@@ -0,0 +1,827 @@
CHAPTER 11 MACROS AND CONDITIONAL ASSEMBLY
Macro Facility
A86 contains an easy-to-use, but very powerful macro facility.
The facility subsumes the capabilities of most assemblers,
including operand concatenation, repeat, indefinite repeat (often
called IRP), indefinite repeat character (IRPC), passing macro
operands by text or by value, comparing macro operands to
strings, and detecting blank macro operands. Unlike other
assemblers, A86 integrates these functions into the main macro
facility; so they can be invoked without clumsy syntax, or
strange characters in the macro call operands.
Simple Macro Syntax
All macros must be defined before they are used. A macro
definition consists of the name of the macro, followed by the
word MACRO, followed by the text of the macro, followed by #EM,
which marks the end of the macro.
Many assembly languages require a list of dummy operand names to
follow the word MACRO. A86 does not: the operands are denoted in
the text with the fixed names #1, #2, #3, ... up to a limit of
#9, for each operand in order. If there is anything following
the word MACRO, it is considered part of the macro text.
Examples:
; CLEAR sets the register operand to zero.
CLEAR MACRO SUB #1,#1 #EM
CLEAR AX ; generates a SUB AX,AX instruction
CLEAR BX ; generates a SUB BX,BX instruction
; MOVM moves the second operand to the first operand.
; Both operands can be memory variables.
MOVM MACRO
MOV AL,#2
MOV #1,AL
#EM
VAR1 DB ?
VAR2 DB ?
MOVM VAR1,VAR2 ; generates MOV AL,VAR2 followed by MOV VAR1,AL
11-2
Formatting in Macro Definitions and Calls
The format of a macro definition is flexible. If the macro text
consists of a single instruction, the definition can be given in
a single line, as in the CLEAR macro given above. There is no
particular advantage to doing this, however: A86 prunes all
unnecessary spaces, blank lines, and comments from the macro text
before entering the text into the symbol table. I recommend the
more spread-out format of the MOVM macro, for program
readability.
All special macro operators within a macro definition begin with
a hash sign # (a hex 23 byte). The letters following the hash
sign can be given in either upper case or lower case. Hash-sign
operators are recognized even within quoted strings. If you wish
the hash sign to be treated literally, and not as the start of a
special macro operator, you must give 2 consecutive hash signs:
##. For example:
FOO MACRO
DB '##1'
DB '#1'
#em
FOO abc ; produces DB '#1' followed by DB 'abc'
The format of the macro call line is also flexible. A macro call
consists of the name of the macro, followed by the operands to be
plugged into the macro. A86 prunes leading and trailing blanks
from the operands of a macro call. The operands to a macro call
are always separated by commas. Also, as in all A86 source
lines, a semi-colon occurring outside of a quoted string is the
start of a comment, ignored by A86. If you want to include
commas, blanks, or semi-colons in your operands, you must enclose
your operand in single quotes.
Macro Operand Substitution
Some macro assemblers expect the operands to macro calls to
follow the same syntax as the operands to instructions. In those
assemblers, the operands are parsed, and reduced to numeric
values before being plugged into the macro definition text. This
is called "passing by value". As its default, A86 does not pass
by value, it passes by text. The only parsing of operands done
by the macro processor is to determine the start and the finish
of the operand text. That text is substituted, without regard
for its contents, for the "#n" that appears in the macro
definition. The text is interpreted by A86 only after a complete
line is expanded and as it is assembled.
11-3
If the first non-blank character after the macro name is a comma,
then the first operand is null: any occurrences of #1 in the
macro text will be deleted, and replaced with nothing. Likewise,
any two consecutive commas with no non-blanks between them will
result in the corresponding null operand. Also, out-of-range
operands are null; for example, #3 is a null operand if only two
operands are provided in the call.
Null operands to macros are not in themselves illegal. They will
produce errors only if the resulting macro expansion is illegal.
The method of passing by text allows operand text to be plugged
anywhere into a macro, even within symbol names. For example:
; KF_ENTRY creates an entry in the KFUNCS table, consisting of a
; pointer to a KF_ action routine. It also declares the
; corresponding CF_ symbol, which is the index within the table
; for that entry.
KF_ENTRY MACRO
CF_#1 EQU ($-KFUNCS)/2+080
DW KF_#1
#EM
KFUNCS:
KF_ENTRY UP
KF_ENTRY DOWN
; The above code is equivalent to:
;
; KFUNCS:
; DW KF_UP
; DW KF_DOWN
;
; CF_UP EQU 080
; CF_DOWN EQU 081
Quoted String Operands
As mentioned before, if you want to include blanks, commas, or
semicolons in your operands, you enclose the operand in single
quotes. In the vast majority of cases in which these special
characters need to be part of operands, the user wants them to be
quoted in the final, assembled line also. Therefore, the quotes
are passed in the operand. To override this, and strip the
quotes from the string, you precede the quoted string with a hash
sign. Examples:
11-4
DBW MACRO
DB #1
DW #2
#EM
DBW 'E', E_POINTER
DBW 'W', W_POINTER
; note that if quotes were not passed, the above lines would have
; to be DBW '''E''', E_POINTER; DBW '''W''', W_POINTER
FETCH_CHAR MACRO
LODSB
#1
CALL PROCESS_CHAR
#EM
FETCH_CHAR STOSB ; generates STOSB as second instruction
FETCH_CHAR #'INC DI' ; generates INC DI as second instruction
Looping by Operands in Macros
A86's macro facility contains two kinds of loops: you can loop
once for each operand in a range of operands; or you can loop
once for each character within an operand. The first kind of
loop, the R-loop, is discussed in this section; the second kind,
the C-loop, is discussed later.
An R-loop is a stretch of macro-definition code that is repeated
when the macro is expanded. In addition to the fixed operands #1
through #9, you can specify a variable operand, whose number
changes each time through the loop. You give the variable
operand one of the 4 names #W, #X, #Y, or #Z.
An R-loop begins with #R, followed immediately by the letter
W,X,Y, or Z naming the variable, followed by the number of the
first operand to be used, followed by the number of the last
operand to be used. After the #Rxnn is the text to be repeated.
The R-loop ends with #ER. For example:
STORE3 MACRO
MOV AX,#1
#RY24 ; "repeat for Y running from 2 through 4"
MOV #Y,AX
#ER
#EM
STORE3 VAR1,VAR2,VAR3,VAR4
; the above call produces the 4 instructions MOV AX,VAR1; MOV VAR2,AX;
; MOV VAR3,AX; MOV VAR4,AX.
11-5
The #L Last Operator and Indefinite Repeats
A86 recognizes the special operator #L, which is the last operand
in a macro call. #L can appear anywhere in macro text; but its
big power occurs in conjunction with R-loops, to yield an
indefinite-repeat facility.
A common example is as follows: you can take any macro that is
designed for one operand, and easily convert it into a macro that
accepts any number of operands. You do this by placing the
command #RX1L, "repeat for X running from 1 through L", at the
start of the macro, and the command #ER at the end just before
the #EM. Finally, you replace all instances of #1 in the macro
with #X. We see how this works with the CLEAR macro:
CLEAR MACRO #RX1L
SUB #X,#X
#ER
#EM
CLEAR AX,BX ; generates both SUB AX,AX and SUB BX,BX in one macro!
It is possible for R-loops to iterate zero times. In this case,
the loop-text is skipped completely. For example, CLEAR without
any operands would produce no expanded text.
Character Loops
We have seen the R-loop; now we discuss the other kind of loop in
macros, the character loop, or C-loop. In the C-loop, the
variable W,X,Y, or Z does not represent an entire operand; it
represents a character within an operand.
You start a C-loop with #C, followed by one of the 4 letters
W,X,Y, or Z, followed by a single operand specifier-- a digit,
the letter L, another one of W,X, Y, or Z defined in an outer
loop, or one of the more complicated specifiers defined later in
this chapter. Following the #Cxn is the text of the C-loop. The
C-loop ends with #EC. The macro will loop once for every
character in the operand. That single character will be
substituted for each instance of the indicated variable operand.
For example:
PUSHC MACRO #CW1
PUSH #WX
#EC#EM
PUSHC ABC ; generates 3 instructions PUSH AX | PUSH BX | PUSH CX
If the C-operand is quoted in the macro call, the quotes ARE
removed from the operand before passing characters to the loop.
It is not necessary to precede the quoted string with a hash sign
in this case. If you do, the hash sign will be passed as the
first character.
11-6
If the C-operand is a null operand (no characters in it), the
loop text is skipped completely.
The "B"-Before and "A"-After Operators
So far, we have seen that you can specify operands in your macro
in fourteen different ways: 1,2,3,4,5,6,7,8,9,W,X,Y,Z,L. We now
multiply these 14 possibilities, by introducing the "A" and "B"
operators. You can precede any of the 14 specifiers with "A" or
"B", to get the adjacent operand after or before the specified
operand. For example, BL means the operand just before the last
operand; in other words, the second-to-the-last operand. AZ
means the operand just after the Z operand. You can even repeat,
up to a limit of 4 "B"s or 3 "A"s: for example, BBL is the
third-to-last operand.
Note that any operand specifier can appear in contexts other than
by itself following a # within a macro. For example, BBL could
appear as the upper limit to an R-loop: #RZ1BBL loops with Z
running from the first operand to the third-to-last operand.
In the case of the variable operand to a C-loop, the "A" and "B"
specifiers denote the characters before or after the current
looping-character. An example of this is given in the next
section.
Multiple Increments within Loops
We have seen that you end an R-loop with a #ER, and you end a
C-loop with a #EC. We now present another way to end these
loops; a way that lets you specify a larger increment to the
macro's loop counter. You can end your loops with one of the 4
additional commands #E1, #E2, #E3, or #E4.
For R-loops terminated by #ER, the variable operand advances to
the next operand when the loop is made. If you end your R-loop
with #E2, the variable operand advances 2 operands, not just one.
For #E3, it advances 3 operands; for #E4, 4 operands. The #E1
command is the same as #ER.
The most common usage of this feature is as follows: You will
recall that we generalized the CLEAR macro with the #L-variable,
so that it would take an indefinite number of operands. Suppose
we want to do the same thing with the DBW macro. We would like
DBW to take any number of operands, and alternate DBs and DWs
indefinitely on the operands. This is made possible by creating
an R-loop terminated by #E2:
DBW MACRO #RX1L
DB #X
DW #AX
#E2
#EM
DBW 'E',E_POINTER, 'W',W_POINTER ; two pairs on same line!
11-7
The #E2 terminator means that we are looping on a pair of
operands. Note the crucial usage of the "A"-after operator to
specify the second operand of the operand pair.
A special note applies to the DBW macro above: A86 just happens
to accept a DW directive with no operands (it generates no object
code, and issues no error). This means that DBW will accept an
odd number of operands with no error, and do the expected thing
(it alternates bytes and words, ending with a byte).
You could likewise generalize a macro with 3 or 4 operands, to an
indefinite number of triples or quadruples; by ending the R-loop
with #E3 or #E4. The operands in each group would be specified
by #X, #AX, #AAX, and, for #E4, #AAAX.
For C-loops terminated by #E1 through #E4, the character pointer
is advanced the specified number of characters. You use this in
much the same way as for R-loops, to create loops on pairs,
triplets, and quadruplets of characters. For example:
PUSHC2 MACRO #CZ1
PUSH #Z#AZ
#E2
#EM
PUSHC2 AXBXSIDI ; generates PUSH AX | PUSH BX | PUSH SI | PUSH DI
Negative R-loops
We now introduce another form of R-loop, called the Q-loop-- the
negative repeat loop. This loop is the same as the R-loop,
except that the operand number decrements instead of increments;
and the loop exits when the number goes below the finish-number,
not above it. The Q-loop is specified by #Qxnn instead of #Rxnn,
and #EQ instead of #ER. You can also use the multiple-decrement
forms #E1 #E2 #E3 or #E4 to terminate an Q-loop.
Example:
MOVN MACRO #QXL2 ; "negative repeat X from L down to 2"
MOV #BX,#X
#EQ#EM
MOVN AX,BX,CX,DX ; generates the three instructions:
; MOV CX,DX
; MOV BX,CX
; MOV AX,BX
Note: the above functionality is already built into the MOV
instruction of A86. The macro shows how you would implement it
if you did not already have this facility.
11-8
Nesting of Loops in Macros
A86 allows nesting of loops within each other. Since we provide
the 4 identifiers W,X,Y,Z for the loop operands, you can nest to
a level of 4 without restriction-- just use a different letter
for each nesting level. You can nest even deeper, for example,
by having two nested R-loops that use W is its indexing letter.
The only restriction to this is that you cannot refer to the W of
the outer loop from within the inner W loop. (I challenge anyone
to come up with an application in which these limitations /
restrictions cause a genuine inconvenience!)
Implied Closing of Loops
If you have a loop or loops ending when the macro ends, and if
the iteration count for those loops is 1, you may omit the #ER,
#EC, or #EQ. A86 closes all open loops when it sees #EM, with no
error.
For example, if you omit the #ER for the loop version of the
CLEAR macro, it would make no difference-- A86 automatically
places an #ER code into the macro definition for you.
Passing Operands by Value
As already stated, A86's defualt mode for passing operands is by
text-- the characters of the operand are copied to the macro
expansion line as-is, without any evaluation. You may override
this with the #V operator. When A86 sees #Vn in a macro
definition, it will evaluate the expression given in the text of
operand n, and pass a string representing the decimal constant
answer, instead of the original text. The operand must evaluate
to an absolute constant value, less than 65536. For example:
JLV MACRO
J#1 LABEL#V2
#EM
JINDEX = 3
JLV NC,JINDEX+1 ; generates JNC LABEL4
JINDEX = 6
JLV Z,JINDEX+2 ; generates JZ LABEL8
Passing Operand Size
The construct #Sn is translated by A86 into the decimal string
representing the number of characters in operand n. One use of
this would be to make a conditional-assembly test of whether an
operand was passed at all, as we'll see later in this chapter.
Another use is to generate a length byte preceding a string, as
required by some high-level languages such as Turbo Pascal.
Example:
11-9
LSTRING MACRO
DB #S1,'#1'
#EM
LSTRING SAMPLE ; generates DB 6,'SAMPLE'
Generating the Number of an Operand
The construct #Nn is translated by A86 into the decimal string
represented by the position number n of the macro operand. Note
that this value does not depend on the contents of the operand
that was passed to the macro. Thus, for example, #N2 would
translate simply to 2; so this usage of #N is silly. #N achieves
usefulness when n is variable: W,X,Y,Z, or L. I give an example
of #N with a loop-control variable in the next section. Here is
an example of #NL, used to generate an array of strings, preceded
by a byte telling how many strings are in the array:
ZSTRINGS MACRO
DB #NL ; generates the number of operands passed
#RX1L
DB '#X',0
#EM
ZSTRINGS TOM,DICK,HARRY ; generates DB 3 followed by strings
Parenthesized Operand Numbers
We've seen that macro operands are usually specified in your
macro definition by a single character: either a single digit or
one of the special letters W,X,Y,Z, or L. A86 also allows you to
specify a constant operand number up to 255. You do so by giving
an expression enclosed in parentheses, rather than a single
character. The expession must evaluate at the time the macro is
defined, to a constant between 0 and 255. You can use this
feature to translate many programs that use MASM's REPT
directive. For example, if the following REPT construct occurs
within a MASM macro:
TEMP = 0
REPT 100
TEMP = TEMP + 1 ; MASM needs an explicitly-set-up counter
DB TEMP
ENDM
you may translate it into an A86 loop, as follows:
#RX1(100) ; the counter X is built into the A86 loop
DB #NX
#ER
If the REPT does not occur within a macro, you must define a
macro containing the loop, which you may then immediately call.
11-10
Note that the expression enclosed in praentheses must not itself
contain any macro operators. Thus, for example, you cannot
specify #(#NY+1) to represent the operand after Y-- you must use
#AY.
Exiting from the Middle of a Macro
For MASM compatibility, A86 offers the #EX operator, which is
equivalent to MASM's EXITM directive. #EX is typically used in a
conditional assembly block within a loop, to terminate the loop
early. When the #EX code is seen in a macro expansion, the
expansion ceases at that point, and assembly returns to the
source file (or to the outer macro in a nested call). You
couldn't use #EM to do this, because that would signal the end of
the macro definition, not just the call.
Local Labels in Macros
Some assemblers have a LOCAL pseudo-op that is used in
conjunction with macros. Symbols declared LOCAL to a macro have
unique (and bizarre) symbol names substituted for them each time
the macro is called. This solves the problem of duplicate label
definitions when a macro is called more than once.
In A86, the problem is solved more elegantly, by having a class
of generic local labels throughout assembly, not just in macros.
Recall that symbols consisting of a single letter, followed by
one or more decimal digits, can be redefined. You can use such
labels in your macro definitions.
I have recommended that local labels outside of macros be
designated L1 through L9. Within macro definitions, I suggest
that you use labels M1 through M9. If you used an Ln-label
within a macro, you would have to make sure that you never call
the macro within the range of definition of another Ln-label with
the same name. By using Mn-labels, you avoid such potential
conflicts.
The following example of a local label within a macro is taken
from the source of the macro processor itself:
; "JHASH label" checks to see if AL is a hash sign. If it is,
; it processes the hash sign term, and jumps to label.
; Otherwise, it drops through to the following code.
JHASH MACRO
CMP AL,'##' ; is the scanned character a hash sign?
JNE >M1 ; skip if not
CALL MDEF_HASH ; process the hash sign
JMP #1 ; jump to the label provided
M1:
#EM
11-11
...
L3: ; loop here to eat empty lines, leading blanks
CALL SKIP_BLANKS ; skip over the leading blanks of a line
INC SI ; advance source ptr beyond the next non-blank
JHASH L3 ; if hash sign then process, and eat more blanks
CMP AL,0A ; were the blanks terminated by a linefeed?
JE L3 ; loop if yes, nothing on this line
L5: ; loop here after a line is seen to have contents
CMP AL,';' ; have we reached the start of a comment?
JE L1 ; jump if yes, to consume the comment
JHASH >L6 ; if hash sign then process it; get next char
...
L6:
LODSB ; fetch the next definition char from the source
CMP AL,' ' ; is it blank?
JA L5 ; loop if not, to process it
...
Debugging Macro Expansions
There is a tool called EXMAC which will help you troubleshoot
program lines that call macros. If you are not sure about what
code is being generated by your macro calls, EXMAC will tell you.
See Chapter 13 for details.
Conditional Assembly
A86 has a conditional assembly feature, that allows you to
specify that blocks of source code will or will not be assembled,
according to the values of equated user symbols. The controlling
symbols can be declared in the program (and can thus be the
result of assembly-time expressions), or they can be declared in
the assembler invocation.
You should keep in mind the difference between conditional
assembly, invoked by #IF, and the structured-programming feature,
invoked by IF without the hash sign. #IF tests a condition at
assembly time, and can cause code to not be assembled and thus
not appear in the program. IF causes code to be assembled that
tests a condition at run time, possibly jumping over code. The
skipped code will always appear in the program.
All conditional assembly lines are identified by a hash sign # as
the first non-blank character of a line. The hash sign is
followed by one of the four keywords IF, ELSEIF, ELSE or ENDIF.
#IF starts a conditional assembly block. On the same line,
following the #IF, you provide either a single name, or an
arbitrary expression evaluating to an absolute constant. In this
context, a single name evaluates to TRUE if it is defined and not
equal to the absolute constant zero. A name is FALSE if it is
undefined, or if it has been equated to zero. An expression is
TRUE if nonzero, FALSE if zero.
11-12
If the #IF expression evaluates to FALSE, then the following
lines of code are skipped, up to the next matching #ELSEIF,
#ELSE, or #ENDIF. If the expression is TRUE, then the following
lines of code are assembled normally. If a subsequent matching
#ELSEIF or #ELSE is encountered, then code is skipped up to the
matching #ENDIF.
#ELSEIF provides a multiple-choice facility for #IF-blocks. You
can give any number of #ELSEIFs between an #IF and its matching
#ENDIF. Each #ELSEIF has a name or expression following it on
the same line. If the construct following the #IF is FALSE, then
the assembler looks for the first TRUE construct following an
#ELSEIF, and assembles that block of code. If there are no TRUE
#ELSEIFs, then the #ELSE-block (if there is one) is assembled.
You should use the ! instead of the NOT operator in conditional
assembly expressions. The ! operator performs the correct
translation of names into TRUE or FALSE values, and handles the
case !undefined without reporting an error.
#ELSE marks the beginning of code to be assembled if all the
previous blocks of an #IF have been skipped over. There is no
operand after the #ELSE. There can be at most one #ELSE in an
#IF-block, and it must appear after any #ELSEIFs.
#ENDIF marks the end of an #IF-block. There is no operand after
#ENDIF.
It is legal to have nested #IF-blocks; that is, #IF-blocks that
are contained within other #IF-blocks. #ELSEIF, #ELSE, and
#ENDIF always refer to the innermost nested #IF-block.
As an example of conditional assembly, suppose that you have a
program that comes in three versions: one for Texas, one for
Oklahoma, and one for the rest of the nation. The three programs
differ in a limited number of places. Instead of keeping three
different versions of the source code, you can keep one version,
and use conditional assembly on the boolean variables TEXAS and
OKLAHOMA to control the assembler output. A sample block would
be:
#if TEXAS
DB 0,1,2,3
#elseif OKLAHOMA
DB 4,5,6,7
#else
DB 8,9,10,11
#endif
If a block of code is to be assembled only if TEXAS is false,
then you would use the exclamation point operator:
#if !TEXAS
DB 0FF
#endif
11-13
Conditional Assembly and Macros
You may have conditional assembly blocks either in macro
definitions or in macro expansions. The only limitation is that
if you have an #IF-block in a macro expansion, the entire block
(i.e., the matching #ENDIF) must appear in the same macro
expansion. You cannot, for example, define a macro that is a
synonym for #IF.
To have your conditional assembly block apply to the macro
definition, you provide the block normally within the definition.
For example:
X1 EQU 0
BAZ MACRO
#if X1
DB 010
#else
DB 011
#endif
#EM
BAZ
X1 EQU 1
BAZ
In the above sequence of code, the conditional assembly block is
acted upon when the macro BAZ is defined. The macro therefore
consists of the single line DB 011, with all the conditional
assembly lines removed from the definition. Thus, both
expansions of BAZ produce the object-code byte of 011, even
though the local label X1 has turned non-zero for the second
invocation.
To have your conditional assembly block appear in the macro
expansion, you must literalize the hash sign on each conditional
assembly line by giving two hash signs:
X1 EQU 0
BAZ MACRO
##if X1
DB 010
##else
DB 011
##endif
#EM
BAZ
X1 EQU 1
BAZ
Now the entire conditional assembly block is stored in the macro
definition, and acted upon each time the macro is expanded. Thus,
the two invocations of BAZ will produce the different object
bytes 011 and 010, since X1 has become non-zero for the second
expansion.
11-14
You will usually want your conditional assembly blocks to be
acted upon at macro definition time, to save symbol table space.
You will thus use the first form, with the single hash signs.
Simulating MASM's Conditional Assembly Constructs
Microsoft's MASM assembler has an abundance of confusing
conditional assembly directives, all of which are subsumed by
A86's #IF expression evaluation policies. IF and IFDEF are both
covered by A86's #IF directive. IFE and IFNDEF are duplicated by
#IF followed by the exclamation-point (boolean negation)
operator. IFB and IFNB test whether a macro operand has been
passed as blank-- they can be simulated by testing the size of
the operand with the #Sn operator. Finally, IFIDN and IFDIF do
string comparisons of macro operands. This is more generally
subsumed by the string-comparison capabilities of the operators
EQ, NE, and =.
Examples of translation of each of these constructs is given in
the next chapter, on compatibility with other assemblers.
Conditional Assembly and the XREF Program
Previous versions of A86 contained a warning, that XREF will not
correctly handle conditional-assembly blocks controlled by
variables whose values change during assembly. Starting with
V3.12, this has been corrected, by writing to the SYM file a log
of each conditional-assembly test result. XREF will consult the
log to determine which blocks to consider.
Declaring Variables in the Assembler Invocation
To facilitate the effective use of conditional assembly, A86
allows you to declare boolean (true-false) symbols in the command
line that invokes the assembler. The declarations can appear
anywhere in the list of source file names. They are
distinguished from the file names by a leading equals sign =. To
declare a symbol TRUE (value = 1), give the name after the equals
sign. DO NOT put any spaces between the equals sign and the
name! To declare a symbol FALSE (value = 0), you can give an
equals sign, an exclamation point, then the name. Again, DO NOT
embed any blanks! Example: if your source files are src1.8,
src2.8, and src3.8, then you can assemble with TEXAS true by
invoking A86 as follows:
a86 =TEXAS src1.8 src2.8 src3.8
You can assemble with TEXAS explicitly set to FALSE as follows:
a86 =!TEXAS src1.8 src2.8 src3.8
11-15
Note that if TEXAS is used only as a conditional-assembly
control, then you do not need to include the =!TEXAS in the
invocation, because an undefined TEXAS will automatically be
interpreted as false.
A user pointed out to me that it's impossible to get an
equals-sign into an environment variable. So A86 now accepts an
up-arrow (hex 5E) character in place of an equals-sign for an
invocation variable.
Null Invocation Variable Names
A86 will ignore an equals-sign by itself in the invocation line,
without error. This allows you to generate assembler invocation
lines using parameters that could be either boolean variable
names, or null strings. For example, in the previously-mentioned
TEXAS-OKLAHOMA-nation example, the program could be invoked via a
.BAT file called "AMAKE.BAT", coded as follows:
A86 =%1 *.8
You invoke A86 by typing one of the following:
amake texas
amake oklahoma
amake
The third line will produce the assembler invocation A86 = *.8;
causing no invocation variables to be declared. Thus both TEXAS
and OKLAHOMA will be false, which is exactly what you want for
the rest-of-the-nation version of the program.
Changing Values of Invocation Variables
The usual prohibition against changing the value of a symbol that
is not a local label does not apply to invocation variables. For
example, suppose you have a conditional control variable DEBUG,
which will generate diagnostic code for debugging when it is
true. Suppose further that you have already debugged source
files src1.8 and src3.8; but you are still working on src2.8. You
may invoke A86 as follows:
A86 src1.8 =DEBUG src2.8 =!DEBUG src3.8
The variable DEBUG will be TRUE only during assembly of src2.8,
just as you want.
+285
View File
@@ -0,0 +1,285 @@
CHAPTER 12 COMPATIBILITY WITH OTHER ASSEMBLERS
I gave heavy priority to compatibility when I designed A86; a
priority just a shade behind the higher priorities of
reliability, speed, convenience, and power. For those of you who
feel that "close, but incompatible" is like saying "a little bit
pregnant", I'm sorry to report that A86 will not assemble all
Intel/IBM/MASM programs, unmodified. But I do think that a vast
majority of programs can, with a little massaging, be made to
assemble under A86. Furthermore, the massaging can be done in
such a way as to make the programs still acceptable to that old,
behemoth assembler.
Version 3.00 of A86 has many compatibility features not present
in earlier versions. Among the features added since A86 was
first released are: more general forward references, double
quotes for strings, "=" as a synonym for EQU, the RADIX
directive, and the COMMENT directive. If you tried feeding an
old source file to a previous A86 and were dismayed by the number
of error messages you got, try again: things might be more
manageable now.
Conversion of MASM programs to A86
Following is a list of the things you should watch out for when
converting from MASM to A86:
1. You need to determine whether the program was coded as a COM
program or as an EXE program. All COM programs coded for MASM
will contain an ORG 100H directive somewhere before the start
of the code. EXE programs will contain no such ORG, and will
often contain statements that load named segments into
registers. If the program was coded as EXE, you must either
assemble it (using the +O option) to an OBJ file to be fed to
LINK, or you must eliminate the instructions that load segment
registers-- in a COM program they often aren't necessary
anyway, since COM programs are started with all segment
registers already pointing to the same value.
A good general rule is: when it doubt, try assembling to an
OBJ file.
2. You need to determine whether the program is executing with
all segment registers pointing to the same value. Simple COM
programs that fit into 64K will typically fall into this
category. Most EXE programs, programs that use huge amounts
of memory, and programs (such as memory-resident programs)
that take over interrupts typically have different values in
segment registers.
12-2
If there are different values in the segment registers, then
there may be instructions in the program for which the old
assembler generates segment override prefixes "behind your
back". You will need to find such references, and generate
explicit overrides for them. If there are data tables within
the program itself, a CS-override is needed. If there are
data structures in the stack segment not accessed via a
BP-index, an SS-override is needed. If ES points to its own
segment, then an ES-override is needed for accesses (other
than STOS and MOVS destinations) to that segment. In the
interrupt handlers to memory-resident programs, the "normal"
handler is often invoked via an indirect CALL or JMP
instruction that fetches the doubleword address of the normal
handler from memory, where it was stored by the initialization
code. That CALL or JMP often requires a CS-override-- watch
out!
If you want to remain compatible with the old assembler, then
code the overrides by placing the segment register name, with
a colon, before the memory-access operand in the instruction.
If you do not need further compatibility, you can place the
segment register name before the instruction mnemonic. For
example:
MOV AL,CS:TABLE[SI] ; if you want compatibility do this
CS MOV AL,TABLE[SI] ; if not you can do it this way
3. You should use a couple of A86's switches to maximize
compatibility with MASM. I've already mentioned the +O switch
to produce .OBJ files. You should also assemble with the +D
switch, which disables A86's unique parsing of constants with
leading zeroes as hexidecimal. The RADIX command in your
program will also do this. And you should use the +L15 switch,
that disables a few other A86 features that might have reduced
compatibility. See Chapter 3 for a detailed explanation of
these switches.
4. A86 is a bit more restrictive with respect to forward
references than MASM, but not as much as it used to be. You'll
probably need to resolve just a few ambiguous references by
appending " B" or " W" to the forward reference name. One
common reference that needs a bit more recoding is the
difference of two forward references, often used to refer to
the size of a block of allocated memory. You handle this by
defining a new symbol representing the size, using an EQU
right after the block is declared, and then replacing the
forward-reference difference with the size symbol.
5. A86's macro definition and conditional assembly language is
different than MASM's. Most macros can be translated by
replacing the named parameters of the old macros with the
dedicated names #n of the A86 macro language; and by replacing
ENDM with #EM. Other constructs have straightforward
translations, as illustrated by the following examples. Note
that examples involving macro parameters have double pound
signs, since the condition will be tested when the macro is
expanded, not when it is defined.
12-3
MASM construct Equivalent A86 construct
IFE expr #IF ! expr
IFB <PARM3> ##IF !#S3
IFNB <PARM4> ##IF #S4
IFIDN <PARM1>,<CX> ##IF "#1" EQ "CX"
IFDIF <PARM2>,<SI> ##IF "#2" NE "SI"
.ERR (any undefined symbol)
.ERRcond TRUE EQU 0FFFF
TRUE EQU cond
EXITM #EX
IRP ... ENDM #RX1L ... #ER
REPT 100 ...ENDM #RX1(100) ... #ER
IRPC ... ENDM #CX ... #EC
The last three constructs, IRP, REPT, and IRPC, usually occur
within macros; but in MASM they don't have to. The A86
equivalents are valid only within macros-- if they occur in
the MASM program outside of a macro, you duplicate them by
defining an enclosing macro on the spot, and calling that
macro once, right after it is defined.
To retain compatibility, you isolate the old macro definitions
in an INCLUDE file (A86 will ignore the INCLUDE directive),
and isolate the A86 macro definitions in a separate file, not
used in an MASM assembly of the program.
6. A86 supports the STRUC directive, with named structure
elements, just like MASM, with one exception: A86 does not
save initial values declared in the STRUC definition, and A86
does not allow assembly of instances of structure elements.
For example, the MASM construct
PAYREC STRUC
PNAME DB 'no name given'
PKEY DW ?
ENDS
PAYREC 3 DUP (?)
PAYREC <'Eric',1811>
causes A86 to accept the STRUC definition, and define the
structure elements PNAME and PKEY correctly; but the PAYREC
initializations need to be recoded. If it isn't vital to
initialize the memory with the specific definition values, you
could recode the first PAYREC as:
DB ((TYPE PAYREC) * 3) DUP ?
If you must initialize values, you do so line by line:
DB 'Eric '
DW ?
If there are many such initializations, you could define a
macro INIT_PAYREC containing the DB and DW lines.
12-4
7. A86 does not support a couple of the more exotic features of
MASM assembly language: the RECORD directive and its
associated operators WIDTH and MASK; and the usage of
angle-brackets to initialize structure records. These
features would have added much complication to the internal
structure of symbol tables in A86; degrading the speed and the
reliability of the assembler. I felt that their use was
sufficiently rare that it was not worth including them for
compatibility.
If your old program does use these features, you will have to
re-work the areas that use them. Macros can be used to
duplicate the record and structure initializations. Explicit
symbol declarations can replace the usage of the WIDTH and
MASK operators.
Compatibility symbols recognized by A86
A86 has been programmed to ignore a variety of lines that have
meaning to Intel/IBM/MASM assemblers; but which do nothing for
A86. These include lines beginning with a period (except .RADIX,
which is acted upon), percent sign, or dollar sign; and lines
beginning with ASSUME, INCLUDE, PAGE, SUBTTL, and TITLE. If you
are porting your program to A86, and you wish to retain the
option of returning to the other assembler, you may leave those
lines in your program. If you decide to stay with A86, you can
remove those lines at your leisure.
In addition, there is a class of symbols now recognized by A86 in
its .OBJ mode, but still ignored in .COM mode. This includes
NAME, END, and PUBLIC.
Named SEGMENT and ENDS directives written for other assemblers
are, of course, recognized by A86's .OBJ mode. In non-OBJ mode,
A86 treats these as CODE SEGMENT directives. A special exception
to this is the directive
segname SEGMENT AT atvalue
which is treated by A86 as if it were the following sequence:
segname EQU atvalue
STRUC
This will accomplish what is usually intended when SEGMENT AT is
used in a program intended to be a COM file.
12-5
Conversion of A86 Programs to Intel/IBM/MASM
I consider this section a bit of a blasphemy, since it's a little
silly to port programs from a superior assembler, to run on an
inferior one. However, I myself have been motivated to do so
upon occasion, when programming for a client not familiar with
A86; or whose computer doesn't run A86; who therefore wants the
final version to assemble on Intel's assembler. Since my
assembler/debugger environment is so vastly superior to any other
environment, I develop the program using my assembler, and port
it to the client's environment at the end.
The main key to success in following the above scenarios is to
exercise supreme will power, and not use any of the wonderful
language features that exist on A86, but not on MASM. This is
often not easy; and I have devised some methods for porting my
features to other assemblers:
1. I hate giving long sequences of PUSHes and POPs on separate
lines. If the program is to be ported to a lesser assembler,
then I put the following lines into a file that only A86 will
see:
PUSH2 EQU PUSH
PUSH3 EQU PUSH
POP2 EQU POP
POP3 EQU POP
I define macros PUSH2, PUSH3, POP2, POP3 for the lesser
assembler, that PUSH or POP the appropriate number of
operands. Then, everywhere in the program where I would
ordinarily use A86's multiple PUSH/POP feature, I use one or
more of the PUSHn/POPn mnemonics instead.
2. I refrain from using the feature of A86 whereby constants with
a leading zero are default-hexadecimal. All my hex constants
end with H.
3. I will usually go ahead and use my local labels L0 through L9;
then at the last minute convert them to a long set of labels
in sequence: Z100, Z101, Z102, etc. I take care to remove all
the ">" forward reference specifiers when I make the
conversion. The "Z" is used to isolate the local labels at
the end of the lesser assembler's symbol table listing. This
improves the quality of the final program so much that it is
worth the extra effort needed to convert L0--L9's to Z100--
Zxxx's.
4. I will place declarations B EQU DS:BYTE PTR 0 and W EQU
DS:WORD PTR 0 at the top of the program. Recall that A86 has
a "duplicate definition" feature whereby you can EQU an
already-existing symbol, as long as it is equated to the value
it already has. This feature extends to the built in symbols
B and W, so A86 will look at those equates and essentially
ignore them. On the old assembler, the effect of the
declarations is to add A86's notation to the old language.
Example:
12-6
B EQU DS:BYTE PTR 0
W EQU DS:WORD PTR 0
MOV AX,W[0100] ; replaces MOV AX, DS:WORD PTR 0100
MOV AL,B[BX] ; replaces MOV AL, DS:BYTE PTR [BX]
+392
View File
@@ -0,0 +1,392 @@
CHAPTER 13 ASSOCIATED TOOLS
XREF Cross-reference and Symbol Listing Facility
XREF is a tool that creates a cross-referenced symbol table
listing of your program.
To invoke XREF, you must provide a program invocation line,
either typed to the console when the DOS command prompt appears,
or included in a batch file. The program invocation line
consists of the program name XREF, followed by the name of a .SYM
symbol table file produced by A86 when you assembled your
program. You do not need to give the .SYM extension. Note that
if you follow normal methodology, the name of the symbol table
file is the same as the name of the program.
XREF will obtain the list of source files from the symbols file,
read those source files, and create a listing file with the same
name as the .SYM file, but with a .XRF extension.
Prior to V3.12, XREF required the list of source files to be
explicitly given, and allowed you to specify the name of the
output file. To retain compatibility with batch files invoking
the old XREF, the current version ignores anything on the command
tail after the symbols file name. This means you can no longer
specify a different output file name. Sorry about that-- I
couldn't think of any other way to be compatible without
overwriting somebody's source files with XREF output. You can
always rename the file after XREF is completed.
For example, you can type XREF myprog to obtain the cross-
reference for the assembly that produced myprog.SYM. The output
will be in the file myprog.XRF.
The output of XREF is an alphabetical listing of all the
non-local symbols in your program. For each symbol, XREF gives
its type, the file in which it was defined, its value, and a list
of all procedures in which the file was used. If you print this
file, you typically use the TCOLS tool to obtain a multi-column
listing from XREF's single-column output.
Note the use of procedure names to identify references -- this is
unique to the A86 package, and makes the cross-reference listing
truly readable. Other cross-reference listings give either line
numbers, which are meaningless unless you go find the associated
line; or a file name, which doesn't give you as much useful
information.
Here is a more detailed description of the various pieces of
information provided for each symbol:
1. TYPE. Labels are indicated by a colon immediately following
the symbol name. Special symbols such as macro names are
denoted by an appropriate word such as "macro" in place of the
value on the following line. Other symbol types are described
by one or two characters, following the symbol name.
Possibilities for the first character are:
13-2
m for a simple memory variable
+ for an index memory quantity
c for a constant
i for an interrupt-equate
s for a structure
If there is a second letter, it is a size attribute: b for
byte, w for word, f for far (or doubleword).
2. FILE in which the symbol was defined. The name is stripped of
its extension, which is presumably the same for all your
source files. The name is preceded by = or period, which
denotes a definition of, not a reference to the symbol.
3. VALUE, given as 4 hex digits, on the line following the
symbol. For memory variables, this is the location of the
variable. For indexed quantities, this is the
constant-displacement part of the quantity. For structures,
it is the size of the structure. For interrupt equates, it is
the number of the interrupt.
4. REFERENCES, given on indented lines following the symbol name.
All occurrences of the symbol in your program produce a
reference. If the symbol is the first thing on a line, it is
considered a "definition" of that symbol, the reference listed
is the source file name. The name is preceded by a period if
the definition was via a colon (i.e., a label); it is preceded
by an equals sign otherwise. If the symbol is not the first
thing on the line, then it is not a definition. The reference
listing consists of the name of the last definition that XREF
scanned (which, if your program is organized in a standard
way, will be the name of the procedure in which the reference
occurred.
Observe that you must use the local-label facility of A86 to
make this work. If you don't use local labels as your
"place-marker" symbols, the symbol XREF gives you will often
be the name of the last "place-marker" symbol, not the name of
the last procedure.
To save space, duplicate reference entries are denoted by a
single entry, followed by "*n", where n is the decimal number
of occurrences of that entry.
EXMAC Macro Expansion Tool
There is a tool called EXMAC which will help you troubleshoot A86
program lines that call macros. If you are not sure about what
code is being generated by your macro calls, EXMAC will tell you.
To use this tool, you must first assemble your macro definitions,
to produce a symbol table file. A86 will produce a .SYM file
even if there were errors. If the errors weren't too
catastrophic, the SYM file should be good enough to enable EXMAC
to do its job.
13-3
EXMAC can be used in two different ways. First, it can be used
as an interactive program. You invoke the program in this way by
typing just "EXMAC myprog", where myprog.SYM is the name of the
symbols file. Then you can type in any number of macro-call
lines. After each line, the program will display the expanded
program text it produces. If the program does not think your
line is a macro call, it will simply echo the line back to you.
In this mode, you exit the program by typing control-Z at the
beginning of a line, then terminating the line with the ENTER
(RETURN on some computers) key. On most IBM-compatible
computers, the control-Z code is also generated by the F6 key,
for convenience.
The second way of using EXMAC is to feed a source file to it. It
will output the equivalent source file with the macros expanded.
You may then, if you wish, rename the new file as the original
source file, and assemble the new file. This method is useful if
you get an error on a macro expansion line, and you don't know
where the error came from. To use EXMAC in this second way, you
simply redirect standard input and output: "EXMAC myprog <infile
>outfile". With the redirection, EXMAC will take its input from
the file "infile" instead of the keyboard; and it will send its
output to the file "outfile" instead of the screen. (If you are
not familiar with redirection of standard input and output, you
might want to read about it in Chapter 6, "Standard Input and
Standard Output", of the MS-DOS reference manual.)
A86LIB Source File Library Tool
There is a tool, A86LIB.COM, available only if you are
registered, that lets you build libraries of source files. To
use A86LIB, you must first code and debug the A86 source files
that you wish to include in your library. Then you issue the
command A86LIB followed by the names of the source files.
Wildcards are accepted; so you will typically want to gather the
source files into a single directory, and use the wildcard
specification. For example, if you use the filename extension .8
for your source files, you can issue the command A86LIB *.8 to
create the library.
The library created consists of a catalog file, always named
A86.LIB, together with the source files that you fed to A86LIB to
create the catalog.
The following observations about A86LIB are in order:
1. Unlike object-code libraries, A86.LIB contains only symbol
names and file names; it does not contain the code itself. You
MUST retain the source files used to create A86.LIB, because
A86 will read those files that it needs after consulting
A86.LIB to read their names.
13-4
2. A86LIB records all non-local symbols that start a line, and
are followed by a colon or an EQU. (Recall that local symbols
are those names consisting of a single letter followed by one
or more decimal digits.) A86LIB also records all symbols
appearing on lines starting with the word PUBLIC.
3. If a symbol appears in more than one library source file, it
will be logged for the first file A86LIB sees, and not the
subsequent ones. No error will be reported, unless and until
A86 tries to assemble both files in one assembly, and sees a
conflict.
4. A86LIB is simple-minded. A86LIB does NOT recognize or expand
macros; nor does it recognize conditional-assembly directives.
This is because the library files do not stand by themselves;
the macros and conditional-assembly variables being used might
well be defined in the main program of the programs accessing
the library files.
You may update A86.LIB by running A86LIB again; either with new
files or previously-recorded ones. If A86LIB is given a file it
had already read in a previous run, then A86LIB marks all the
symbols it had logged for the file as deleted, before rereading
the file. Those symbols that are still in the file are then
"unmarked". Thus, symbols that have been deleted from the file
disappear functionally from A86.LIB, but still occupy space
within A86.LIB. What I'm getting at is this: A86LIB will
tolerate alterations in library files quite nicely; but for
optimum storage efficiency you should delete A86.LIB and rebuild
it from scratch any time you delete anything from the library.
A86LIB is so fast that this is never very painful.
Using A86.LIB in A86 Assemblies
Once you have created a library with A86LIB, you access it simply
by calling the procedures in it from your A86 program. When A86
finishes an assembly and sees that there are undefined symbols in
your program, it will automatically look for copies of A86.LIB in
the current directory (then in other directories, as described in
the next section). If any of the undefined symbols are found in
the A86.LIB catalog, the files containing them are assembled.
You see this in the list of files output to the console by A86.
The subroutines in your library or libraries are effectively a
permanent part of the A86 language. They can be called up
effortlessly in your A86 programs. In time you can build up an
impressive arsenal of library modules, making A86 as easy to
program in as most high-level languages.
13-5
Environment Variable A86LIB
You can set an environment variable A86LIB to specify which
drives or subdirectories contain A86.LIB files. The variable
consists of a sequence of path names separated by semicolons,
just like the PATH variable used by the operating system. For
example, if you include in your AUTOEXEC.BAT file the line
SET A86LIB=C:\bin\lib;\tools\a86lib
then A86 will look for A86.LIB in the current directory, then it
will look for C:\bin\lib\A86.LIB, then \tools\a86lib\A86.LIB. A86
will keep looking in all three catalog files, assembling the
appropriate source files from any or all of them, until there are
no more undefined symbols, or there are no more source files to
assemble.
For every symbol in an A86.LIB catalog, there is recorded the
name of the library file containing the symbol. The library file
is assumed to be in the same directory as its A86.LIB file,
unless a complete path name (starting with \ or a drive
specifier) was fed to A86.LIB when A86.LIB was created.
Forcing a Library Search
You may force A86 to assemble library files before moving on to
more of your program's source files. You do this by placing a
hash sign # (hex code 23) between file names in your invocation
line. For example, suppose your program has two modules FIRST.8
and LAST.8. FIRST.8 calls subroutines from your library; but you
need the library files assembled before LAST.8 is assembled. (You
might want this because LAST.8 allocates memory space beyond the
end of your program, which would be the end of LAST.8 if it were
truly the last module.) You accomplish this by the invocation
line:
A86 FIRST.8 # LAST.8
Note that there is never any need to force a library search at
the end of your program modules: A86 always makes a library
search there, if you have any undefined symbols.
Listings with A86
A86 does not produce a .LST file, or anything similar to it! (We
now pause, to allow traditionalists to recover from their
swooning shock.) OK, everybody back to consciousness? Good.
Now let's all try to strip away our preconceptions, and look at
things with a fresh viewpoint.
In particular, let's consider what we use a listing file for, and
see how A86 meets those needs. I've been programming for 20
years; I have generated literally tons of listings. Historically,
here's what I have used listings for:
13-6
1. To find out what my error messages are. In the early days of
Intel, the text editor was so bad that it was actually faster
to march across the building and physically print the list
file, than it was to use an editor to find error messages! But
even with a fast editor, what a pain it is to go into the list
file, enduring its 120-column wide format on your 80-column
screen, copy down the errors on paper, then go back to the
source file to find where the errors were. Why doesn't the
assembler just stick the messages directly into your source
file, where you can view them and edit the source
simultaneously? That's what A86, and only A86, does, if you
want it to.
2. To see what code was generated; those hexadecimal bytes at the
left of the listing. That was a real necessity, back in the
days of hexadecimal debuggers. There we were, furiously
patching those hex object bytes. We needed the listings to
find our way around the program, while debugging. Today, we
have symbolic, disassembling debuggers, such as D86. The
power of today's debuggers means that you seldom need to look
at hex object bytes. If you do, the debugger can show them to
you.
3. To get a symbol-table listing. The necessity of this
diminishes a great deal when you have a SYMBOLIC debugger; but
I still like to have a listing from time to time. So I have
devised a separate program, XREF, that goes through another
pass of the source file(s), and creates the most useful
cross-reference listing.
You may ask, "Why am I being forced to essentially re-assemble
my code to get a symbol table, when other assemblers will give
it to me in the original assembly?" Don't be fooled. Those
other assemblers go through all your source files twice, or
even three times. They just do it behind your back, every
time you want an assembly. That's one reason why my assembler
is so much faster than everyone else's.
4. To just look at the code. I have often in the past needed to
see that program, spread out on paper, just to get a handle on
what the program is doing. But I have needed this less and
less lately. Why? For two reasons. First, text editors have
improved. It's much, much easier than it was before to cruise
through a file on the screen. Second, my programs have
adapted to the screen-viewing methodology. Almost
subconsciously, I have started making the conceptual "chunks"
of my code fit into 1 or 2 24-line screens, rather than 1 or 2
60-line pages. This, of course, makes better, more modular
programs. (Spaghetti tends to untangle when you chop it up.)
It's gotten to the point where I can develop (and have
developed) a 5000-line application, fully debugged, without
ever making a listing!
13-7
5. For archival purposes. I still do this; you should never put
100% trust in magnetic media. But I've stripped away the
reasons for having anything but the source code and the symbol
table. So I just copy the source files and the
cross-reference listing to the printer. I haven't looked at
the listings too much; so I haven't bothered with pagination
control. If you want to, you can insert form feeds into your
source; A86 will ignore them. Or, you can write a simple
listing tool that recognizes the PAGE directive; A86 ignores
that directive, also.
As a partial remedy to those who have not been convinced by the
above arguments, I now have a D86 command that sends a
disassembly to a file. The disassembly is formatted in the style
of an assembler listing file, with locations and hex codes at the
left. See the D86 manual for details.
Mimicking Tool: FAKE.EXE
As of this writing, Turbo C is aware only of the existence of
Microsoft's MASM for assembling source files it generates. I
hope to persuade Borland to provide a switch to Turbo C that
causes it to invoke A86 directly. Until that happens, I offer
the tool FAKE.EXE, that convinces Turbo C that A86 is really
MASM.
To use FAKE.EXE, it must be renamed MASM.EXE in your disk system.
I would have named it MASM myself, except that
1. Bill Gates would probably get mad at me if I did, and
2. You need to decide what to do with your real MASM if you have
it, before installing FAKE. You could either place FAKE
(named MASM.EXE) into the individual directories containing
Turbo C programs, or you can rename MASM to something like
MSM.EXE or REALMASM.EXE.
Having renamed FAKE.EXE to MASM.EXE, you may now use the Turbo
C's switch, -B, that allows you to place A86 statements into your
C program. You don't need to worry about the gory details of
what FAKE does.
If you like gory details, here they are: FAKE filters the command
line handed to it, replacing switches:
/D becomes =
/ml becomes +c
/mx becomes +C
/E becomes +f
FAKE also eliminates the semicolon, appends .ASM to the source
file name, and turns on the O and S switches. It then feeds the
resulting filtered command line to A86 for assembly.
+722
View File
@@ -0,0 +1,722 @@
CHAPTER 14 DESCRIPTIONS OF A86 ERROR MESSAGES
~01 Unknown Mnemonic~
Most assembly-language lines start with a built-in instruction
mnemonic such as MOV or ADD. The only circumstances in which
a line can start with non-built-in symbol are if the symbol is
a macro name or INT equate, or if the symbol is now being
defined, as indicated by a limited set of following symbols: a
colon, EQU, DB, DW, etc. This line started with a
non-built-in symbol which did not fall into any of the above
categories. You might have misspelled an instruction
mnemonic, or misspelled the following word.
~02 Jump > 128~
The destination operand of a conditional jump must be a label
within 128 bytes of the end of the instruction. (Precisely,
from -128 to +127 from the next instruction, which is from
-126 to +129 from the start of the conditional jump.) This
error is reported in three possible places:
1. At the conditional jump. The operand is more than 126
bytes before the jump, or the operand is not a label (e.g.
you tried an indirect conditional jump through a variable,
which isn't allowed)
2. At a label definition. In this case, you use your editor
to search backwards for references to the label. One or
more of the earliest conditional jumps found are too far
away.
3. At a RET, RETF, or IRET instruction. You use your editor
to search backwards for that flavor of RET used as the
operand to a conditional jump (the A86 conditional return
feature). The earliest such jumps not satisfied by a
previous RET are too far away.
You usually correct this error by rearranging your code, or
(better) by breaking intervening code off into subroutines. If
desperate, you can replace "Jcond" with "IF cond JMP".
~03 [BX+BP] And [SI+DI] Not Allowed~
The 86 instruction set does not support the combinations of
indexing registers indicated in the error message. In
previous versions of A86, this error was reported in other
illegal operand combinations; I've attempted to change other
cases to error 14. If you ever find otherwise, let me know.
~04 Bad Character In Number~
All numbers, and only numbers, start with a decimal digit.
(It's illegal to have a symbol begin with a digit; e.g.
01MYVAR .) You have coded something that starts with a
decimal digit but does not have the correct format for a
numeric constant. See Chapter 8 for detailed descriptions of
the formats of both integer and floating constants.
14-2
~05 Operands Not Allowed~
When this error is reported it usually means that you have
provided something more than just the mnemonic for an
instruction that does not have any operands: e.g., PUSHF,
STOSB, STC, FLDPI, CLTS. It's also called in other contexts
when the assembler expects nothing more on the line; e.g.,
NAME with more than just a single name following, or something
following the word ENDS.
~06 Symbol Required~
This is reported in numerous situations where A86 requires
some sort of symbol: either a built-in assembler mnemonic, or
a symbol you define. (It's possible that a number or some
punctuation marks are legal in the context, and that they have
already been checked for.) Instead of a symbol, a punctuation
mark or out-of-context number was seen. The contexts in which
this error can occur include:
* the start of a line (characters hex 3C or greater)
* after the following at the start of a line: a symbol you
define, #, #IF, IF, CODE, or DATA
* where operands to the following directives are expected:
NAME, PUBLIC, EXTRN, GROUP, SEGMENT
* after ">" denoting a local-label forward reference
~07 Local Symbol Required~
This is reported when something other than a generic local
label (letter followed by one or more digits) follows a ">"
mark, which denotes a local-label forward reference. If you
meant "greater than" you use the GT operator instead.
~08 Too Many Operands~
This is reported for instructions and directives requiring a
limited number of operands, for which the limit is exceeded.
Since operands are separated by commas, you have too many
commas-- possibly an extra comma between the mnemonic and
first operand, or at the end of the operands.
~09 Constant Required~
This is reported for instructions and directives (ENTER, RET,
RADIX, etc.) requiring operands that are an immediate constant
number; and for expression operators (*, /, SHL, OR, NOT, BY,
etc.) whose operands must be constant. In some cases a
limited number of forms other than constants are acceptable,
but the assembler has already checked for and not found those
possibilities.
~10 More Operands Required~
14-3
This is reported for instructions requiring two operands, for
which you have provided no operands or only one operand. You
might have left out the comma separating the operands.
~11 Constant/Label Not Allowed~
This is reported when you have given a constant number in a
place where it isn't allowed-- usually as a destination
operand to an instruction, such as the first operand to a MOV
or ADD. If you meant the operand to be the memory location
with the constant offset, you must convert the type by
enclosing the operand in brackets [ ] or appending a
size-specifier (B, W, D, Q, or T) to the number.
~12 Segment Register Not Allowed~
This is reported when you have used a segment register in an
instruction where it isn't allowed. The only instructions
allowing segment registers as operands are MOV, PUSH, and POP.
You can't, for example, ADD into a segment register. If you
want to do anything with a segment register value, you have to
MOV it into a general register, perform the operation, then
MOV the result back to the segment register.
~13 Byte/Word Combination Not Allowed~
This is reported in a two-byte instruction in which one
operand is byte-sized and the other word-sized; or in an
instruction with a byte-sized destination and an immediate
source whose value is not byte-sized (high byte not 0 or 0FF).
If one of the operands is a memory variable of the wrong size,
you either change the declaration of the variable (DB to DW or
vice versa) or override the size of the variable in this
instruction only, by appending a " B" or " W" to the memory
operand.
~14 Bad Operand Combination~
This is reported when you attempt to add or combine terms in
an operand expression that do not allow combination. An
example of this would be DT 3.7+BX. Only constants can be
added to floating point numbers.
This is also reported when you have two operands that are
mismatched in size, and the mismatch is something other than
Byte vs. Word. Example: MOV AL,D[0100].
~15 Bad Subtraction Operands~
14-4
This is reported when you attempt to subtract terms in an
operand expression that do not allow subtraction, or if the
right-hand side to a subtraction is missing. If the
right-hand side to a subtraction is a non-forward-referenced
constant, then the left side can be almost anything.
Otherwise, the operands must match; e.g., labels from
relocatable segments must be in the same segment (in which
case the answer is an absolute constant; namely, the size of
the block of memory between the two labels).
~16 Definition Conflicts With Forward Reference~
This error occurs when the assembler has previously guessed
the type of a forward-referenced symbol in order to determine
what kind of instruction to generate, and the guess turned out
to be wrong. The error is reported at the time the symbol is
defined. For example, when A86 sees MOV AX,FOO, it will
assume FOO is an immediate value. This error is reported if
FOO turns out to be a word variable: FOO DW 0. You need to
search backwards from the error message, to references of FOO,
and specify the type you intend to be used: MOV AX,FOO W. If
you really did intend to load the offset of FOO and not the
memory contents, you can code MOV AX,OFFSET FOO to make the
error message go away.
~17 Divide Overflow~
This is reported when the right-hand side to a division or MOD
operation is zero, or when the result of a division by a large
(>64K) number is still large.
~18 Same Type Required~
This is reported when the two operands to a relational
operator (EQ, NE, GT, GE, LT, or LE) are of different types.
The operands to a relational operator ought to be both
absolute integer constants, or labels in the same segment.
~19 CS Destination Not Allowed~
This is reported if you attempt to specify CS as the
destination (first) operand to MOV, or as an operand to POP.
The only acceptable way to load CS on the 8086 is via a far
JMP, CALL, RETF, or IRET instruction. The MOV and POP forms
don't make much sense, so they were outlawed by Intel.
~20 Left Operand Not Allowed~
This is reported if you have a left-hand side to an expression
operator that expects only a single operand to its right.
Those operators are BIT, NOT, OFFSET, TYPE, LOW, HIGH, SHORT,
LONG, and INT. (The mnemonic INT is considered an operator
e.g., in MSDOS EQU INT 33.) For example, you would get this
error for the expression 1 NOT 2.
~21 Bad Single Operand~
14-5
This is reported if the operand is inappropriate for an
instruction INC, DEC, PUSH, POP, NOT, NEG, MUL, IMUL, DIV, or
IDIV, that takes a single operand. You should look up the
instruction in the chart in Chapter 6, to determine the proper
operand forms allowed.
~22 Bad DUP Usage~
This is reported when a DUP construct occurs out of context
(e.g. in an instruction operand instead of a data
initialization); when the total number of bytes generated
would push the output pointer beyond 64K; or when there is
improper syntax for a DUP. See Chapter 9 for the description
of correct DUP usage.
~23 Number Too Large~
This is reported when a numeric constant is too large for the
assembler to store in its operand buffers-- the limit for
integers is 2**80-1 = 1208925819614629174706175 decimal. The
error is also given when the exponent part of a floating point
constant is greater than 65535 in magnitude.
~24 SEGMENT or ENDS Required~
This is reported if a line beginning with one of the two A86
keywords CODE or DATA does not continue with one of the
keywords SEGMENT or ENDS. If you meant CODE or DATA to be a
symbol you define, you have to change the name to something
else, like _CODE or _DATA.
~25 Bad CALL/JMP Operand~
This is reported if the operand to a call or jump instruction
cannot be taken as a jump destination. This occurs if the
operand is missing, or if it has a size inappropriate for
address pointers: byte, quadword, or ten-byte. The error also
occurs if the operand is a constant number, and you are
assembling to an OBJ format. In OBJ format anything jumped to
within a segment must be specified as a label within some
segment.
~26 Memory Doubleword Required~
This is reported if the second operand to an LDS, LES, or
BOUND instruction is of the wrong type. The operand should be
a doubleword memory quantity; but A86 will accept a word
memory variable or a memory variable of unspecified size.
~27 Bad IN/OUT Operand~
This is reported when the operands to IN or OUT do not have
the correct form. See Chapter 6 for the limited set of forms
for these instructions. One of the operands must be AL or AX;
the other must be DX or a constant between 0 and 255.
~28 type Required~
14-6
This is reported when a symbol given in an EXTRN list is not
followed one of the type names B, W, D, Q, T, F, NEAR, or ABS.
The more verbose synonyms BYTE, WORD, DWORD, QWORD, and TBYTE
are also acceptable.
~29 Bad Rotate/Shift Operand~
This is reported when the count (second) operand to a rotate
or shift instruction is not appropriate: it should be either
the name CL or a constant less than 32. The instructions
requiring this are ROL, ROR, RCL, RCR, SHL, SHR, SAL, SAR, and
the NEC-specific instructions SETBIT, TESTBIT, CLRBIT, and
NOTBIT.
~30 Byte-Sized Constant Required~
This is reported in contexts where only a byte-sized absolute
constant is acceptable. Those contexts are: the operand to a
BIT or INT operator in an expression; the required operand to
an INT or CALL80 instruction; the optional operand to an AAM
or AAD instruction.
~31 Instruction In Data Segment Not Allowed~
There are only a limited number of directives allowed with a
STRUC or a DATA segment. This error is reported when any
instructions or disallowed directives are seen in one of these
restricted environments. You have possibly neglected to
provide an ENDS directive, returning you to normal assembly.
In a STRUC, the only directives allowed are DB, DW, DD, DQ,
DT, another STRUC, ENDS, EQU, SEGMENT, GROUP, MACRO, LABEL,
EVEN, and ORG. The DATA segment allows the same directives,
plus PROC, ENDP, DATA, and CODE.
~32 Bad String~
This is reported when you start a quoted string, and do not
provide the closing quote in the same line. You might have
left it out; or you might not have intended to code a string
at all, and accidentally inserted a single- or double-quote
mark in your line. Or you might have intended a string
containing an end-of-line, which isn't allowed. You must
instead close the string and code hex bytes 0D,0A to represent
an end-of-line.
~33 Bad Data Operand~
This is reported if an inappropriate operand is seen in a data
initialization (DB, DW, DD, DQ, or DT) directive. Examples of
this are indexed quantities such as [BX], non-byte quantities
in a DB, or floating point constants in a DB or DW.
~34 Index Brackets Required~
14-7
This is reported if the name of a register is given in an
addition/combination operation, but the register is not
enclosed in square brackets. The only registers that may be
added are those presented as indexing registers. For example,
don't code BX+2, code [BX+2].
~35 Bad Character~
This is reported when a punctuation mark or other non-standard
character is seen where it is not expected. The characters
causing this error at the beginning of a line are digits, and
the marks / - , + * ( ) & " ! -- other illegal marks at
the start of a line cause error 6, Symbol Required. The
characters causing this error elsewhere (i.e. within operands)
are all characters except letters, digits, and the marks [ ] +
- ' " > ( ) * . / :
~36 String > 2 Not Allowed~
This is reported when a string with 3 or more characters is
seen outside of the places where such a string is allowed (in
a DB directive, macro operand, or relocatable SEGMENT
directive). One- and two-character strings are treated as
simple numeric constants; but longer strings require special
handling and are allowed only in the places mentioned.
~37 Misplaced Built-In Symbol~
The symbol just before this error message is an A86 built-in
symbol, that is in a place where it doesn't belong. Examples
of this are: mnemonics such as MOV occurring in operands; and
symbols that aren't mnemonics such as LT occurring at the
start of the line. If you thought you could define the symbol
to the left of this message for your own use, you were wrong.
You need to change the symbol to something else: TEST to
_TEST, for example. If you'd like to know the built-in
meaning of the symbol, you can look it up in Chapter 16.
~38 Segment Combination Not Allowed~
This is reported when you attempt to add or combine a segment
or group name with another quantity. A86 currently doesn't
allow this.
~39 Bad Index Register~
This is reported when you attempt to use a register other than
SI, DI, BX, or BP for indexing. Those are the only registers
that the 86 architecture allows you to place inside brackets,
to address memory.
~40 Conflicting Multiple Definition Not Allowed~
14-8
This is reported when you define a symbol in two places in
your program, and the definitions aren't the same. Most often
you have simply forgotten you already had a symbol somewhere
of the same name, and you need to change the name of one of
the two symbols you've defined. A86 allows the re-use of a
symbol if it is a generic local label (a letter followed by
one or more digits), or if is defined with = instead of EQU.
A86 also allows the redefinition of a symbol if it has exactly
the same value (e.g. ESC EQU 01B in two places in your
program). See the section "Duplicate Definitions" in Chapter
9 for a detailed discussion of this feature.
~41 ENDS Has No Segment~
This error occurs when A86 is assembling to an OBJ file, and
it sees an ENDS at the outermost level of segments-- the ENDS
has not been preceded by a matching SEGMENT directive. You
need to look over your SEGMENT and ENDS directives, to get
them to match up properly.
~42 Bad IF Operand~
This is reported when an IF is not followed by one of the
flag-mnemonics (e.g., E, Z, NC, AE, etc.) that follow "J" in a
conditional jump instruction. Most likely the line is a
conditional assembly line intended for another assembler. In
A86, conditional assembly lines begin with a hash sign #. So
you change IF, ELSE, ENDIF to #IF, #ELSE, #ENDIF. You may
also need to change the condition following IF: IF FOO EQU 0
becomes #IF !FOO; IFDEF FOO becomes simply #IF FOO. IF
(expression) must be replaced by the two lines C1 EQU
(expression) followed by #IF C1 . See Chapter 11 for the
details of A86's syntax for conditional assembly. See Chapter
5 for the way A86 uses IF when it doesn't have a hash sign #.
~43 Parenthesis/Bracket Mismatch~
This is reported when there is a lack of balance of
parentheses ( ) or brackets [ ] in an operand expression--
there are too many left-sides, too many right-sides, or the
brackets are interleaved illegally: ( [ ) ]. Most likely you
have left out an opening or closing parenthesis/bracket in a
complicated expression; or a spurious extra ( ) [ or ] has
crept into your code.
~44 Bad Forward Reference Combination~
This is reported when you try to use forward references in
expressions that are too complicated for A86 to handle. You
can add or subtract constants from forward-referenced symbols;
but you can't subtract a forward-referenced symbol from
anything, and you can't add two forward references together.
You can typically get around restrictions in forward reference
expressions by moving the expression down to an EQU directive
after the point that the symbols are defined, and making a
forward reference to the EQUated symbol that represents the
evaluated expression.
14-9
This error is also reported in some situations involving
relocatable symbols in OBJ mode -- these symbols are forward
references in the sense that they are resolved only at link
time.
~45 Is It Byte Or Word?~
This is reported when you have a memory operand of unspecified
size, and A86 needs to know whether the operand is byte-sized
or word-sized, in order to generate the correct instruction
form. All you need to do is to append a B or a W to the
operand, to specify the size you want. For example, if you've
coded INC [BX], you need to decide between INC B[BX] and INC
W[BX]. If you've coded ADD FOO,4 where FOO is a forward
reference, you need to specify ADD FOO B,4 or ADD FOO W,4 .
~46 Bad #-Construct~
This is reported if, within a macro definition, a # is seen
that is not followed by one of the allowed macro parameter
constructs described in Chapter 11. Even in quoted strings,
the hash sign # must be literalized via ## if it is to be
taken as-is.
If you mistakenly provide a macro-loop variable (#W, #X, #Y,
or #Z) outside of any loop defining that variable, this error
is detected when the macro is expanded, even though the error
is in the macro definition.
The error is also reported if # occurs at the beginning of a
line, and is not followed by IF, ELSEIF, ELSE, or ENDIF; or if
a conditional assembly parameter is a built-in mnemonic e.g.
#IF MOV . See Chapter 11 for the correct usage of the hash
sign in both macros and conditional assembly.
~47 #ENDIF Required~
This is reported if you have an #IF without a corresponding
#ENDIF before the end of the file (or the end of the macro
expansion if the #IF was assembled during a macro expansion).
When this message appears at the end of a file, you need to
search backwards for #IFs, to find the unclosed block.
~48 #EM Required To End Macro~
This is reported if you have a MACRO without an end. In A86,
the end of a macro is given by #EM. Most likely your file was
written for another assembler, and you need to convert macro
definitions. You need to change all ENDM directives to #EM.
You also need to eliminate the named parameters from the MACRO
line, and replace occurrences of the named parameters with #1,
#2, #3, etc. The & concatenation operator can be dropped. See
Chapter 11 for a full description of A86's macro syntax.
~49 End Delimiter to COMMENT Required~
14-10
This is reported when the portion of code skipped in a COMMENT
directive has run to the end of the file, without the closing
delimiter being found. You need to search backwards from the
end of the file to find the COMMENT directive, figure out
where you intend the directive to end, and duplicate the
delimiter (the first non-blank following COMMENT) at that
end-point. See Chapter 4 for a full description of the
COMMENT directive.
~50 Reg,Mem Required~
This is reported when you have an improper combination of
operands for a MOV, XCHG, or general arithmetic instruction
such as ADD, SUB, CMP, XOR, etc. Most often you have
attempted to provide two memory operands: MOV VAR1,VAR2 or ADD
VAR1,VAR2. One of the operands must be a register. You can
effect the memory-to-memory operation by using a register in a
two-instruction sequence; for example, MOV AX,VAR2 followed by
ADD VAR1,AX . For convenience, A86 lets you code the sequence
with the single line ADD VAR1,AX,VAR2.
If you don't wish to clobber the contents of any registers,
and the operands are word-sized, you may PUSH the source
operand and then POP to the destination operand: PUSH VAR2
followed by POP VAR1.
~51 Segment Override Not Allowed Here~
For compatibility with other assemblers, A86 allows segment
override operators CS:, DS:, ES:, or SS: within expressions in
instruction operands. The override informs the assembler that
the named segment register is to be used for the memory
reference, so that the assembler might generate a segment
override opcode byte. This error is reported when a segment
override operator occurs out of context: in A86's special
three-operand form for MOV or arithmetic instructions; within
a DATA segment or STRUC, or in an EQU directive. You might
encounter the last case if you're porting a program written
for another assembler. If so, you might have to provide
explicit overrides wherever the EQUated symbol is used. It's
possible, though, that the override is provided only to
satisfy the other assembler's segment checking mechanism, and
no overrides are generated at all. In that case, you can just
eliminate the override operator.
~52 Byte Operand Required~
This is reported when an operand to one of the NEC-specific
instructions STOBITS, LODBITS, ROL4, ROR4 is of the wrong
type. STOBITS and LODBITS require the first operand to be a
byte-sized register and the second operand to be either a
byte-sized register or an immediate constant. ROL4 and ROR4
require the only operand to be a byte-sized register.
~53 Word Register Required~
14-11
This is reported when the first operand to any of the
instructions LDS, LES, LEA, BOUND, IMUL, LAR, or LSL is not a
word-sized general register (AX,BX,CX,DX,SI,DI,BP, or SP).
~54 Floating-Point Chip Required~
This is reported when you attempt to assemble a program with
floating point constants or floating point expressions, and
you do not have a floating point chip (8087 or 287) in your
computer system. A86 uses the 87 to assemble constants and do
arithmetic. It's time for you to buy a chip and install it in
that empty socket!
~55 Bad Floating-Point Operand~
This is reported when an operand to a floating point
instruction is not of the correct type. See Chapter 7 for the
correct forms for the instruction you're coding. Some
possibilities for the error are:
* a memory operand has unspecified size, or a size not
compatible with the instruction. Integer instructions
(FIxxx) require a W or D operand; floating arithmetic
instructions require a D or Q operand.
* you've tried to specify an 86 register instead of a memory
operand.
* you've tried A86's special FLD (constant) form in OBJ mode.
Sorry, I support this only for COM mode (mainly for D86).
* you've specified two register numbers (0 through 7), but
neither is 0.
* you've tried one of the disallowed forms FCOM i,0 or FCOMP
i,0
~56 Constant 0--7 Required~
This is reported if a constant number operand to an 87
instruction, which is supposed to represent an 87 stack number
(0 through 7), does not have the right value; i.e., it's not
an integer, or it's not in the range 0 through 7.
~57 Memory Operand Required~
This is reported when an operand to a floating-point or a 286
protected-mode instruction must be a memory operand, and the
operand you've provided isn't one. See Chapters 7 (for
floating) or 6 (for protected) for the correct syntax of the
instruction you're coding.
~58 Segment Or Struc Name Not Allowed~
14-12
This error occurs most often when you are attempting to
assemble as a COM program a file intended to be an EXE
program. The COM format does not allow you to refer to the
value of a named segment, or to make a FAR pointer out of a
label within the program. You should either use the +O option
to produce an OBJ file, or simply eliminate the statements
intended to set the segment registers-- COM programs are
started with all segment registers already pointing to the
same value.
This error is also reported when you provide the name of a
structure, or the name of an INT equate, in a place where a
register or memory operand is expected.
~59 Word Operand Required~
This is reported when something other than a word-sized
operand is provided for one of the 286 instructions ARPL,
SLDT, LLDT, STR, LTR, VERR, VERW, SMSW, or LMSW.
~60 Circular Definition Not Allowed~
This is reported when a chain of macro calls or references to
undefined symbols reaches a depth of 1024. A86 assumes that
it is in an infinite loop: for example, FOO EQU FOO; or BAZ
MACRO containing an uncontrolled call to BAZ within itself.
~61 Overlapping Local Not Allowed~
Recall from Chapter 5 that when you use a local label symbol
twice, you must distinguish a reference to that symbol by
prepending a > before the symbol's name if the reference is a
forward reference. You get this error if you have followed
such a forward reference with another reference, without the
>, before the next incaration of the symbol is defined.
There's a danger that you intended the reference to be to the
previous incarnation, which A86 doesn't allow. Example:
L1: ; first incarnation of L1
JNZ >L1 ; reference to second incarnation
JMP L1 ; ERROR-- which incarnation are we referring to?
L1: ; second incarnation of L1
If you intended the JMP to be to the second L1, you should
prepend a > to the L1, just like the JNZ. If you intended the
JMP to be to the first L1, you must change one of the two
label names so that their ranges don't overlap.
~62 ORG Required in first DATA SEGMENT~
14-13
Previous versions of A86 allowed a default starting offset of
0 for the DATA SEGMENT. I hope in the future to change this
default to the offset immediately following the program (if it
is a COM file). As a transition, I am outlawing ORGless DATA
segments, so if it was your intention to start at offset 0,
you must now state so explicitly with an ORG 0 following the
first DATA SEGMENT directive in your program.
~97 Object Overflow~
This is reported when the assembler runs out of room in its
output object-code segment (which also holds records used to
resolve forward references). This will happen only if your
object output nears the object capacity, which is 64K if a
full amount of memory (about 200K) is available to the
assembler. If you have a limited amount of memory, you should
increase the memory available to A86, by buying another board,
or by having fewer memory-resident programs installed when you
run A86. If you are assembling OBJ files, you can break the
program into smaller assembled modules.
It's conceivable that this error could result in a D86
session, when you are using patch-memory mode to type in an
extremely complicated program. In that case, you should type
the program into a text file instead, and use A86 to assemble
the text file.
~98 Undefined Symbol Not Allowed~
This error should occur only during a D86 debugging session,
when you type an immediate-execution assembly language line
containing a symbol not in the table (typically a mistyping on
your part). D86 allows you to add symbols to the table only
when you are in patch-memory mode (reached by pressing the F7
key).
~99 Symbol Table Overflow~
This is reported when the symbol table runs out of space. It's
unlikely that you'll ever run into this error, since A86's
capacity is thousands of symbols. If you do, you'll need to
reduce the number of symbols in your program. One way to do
so is to replace all place-marker symbols with local labels in
a limited range (like L0--L9). See Chapter 5 for a
description of A86's local label facility.
+155
View File
@@ -0,0 +1,155 @@
CHAPTER 15 RELEASE HISTORY OF A86
Virtually all releases of A86 include bug fixes. If I don't say
anything about a release, then it was essentially only bug fixes.
V2.10 June 1986. Initial public release of the MSDOS version of
A86. The last previous version ran under the Xenix
operating system on the Altos series of computers. For
this "public offering", I cleanup up the invocation
syntax, upgraded the error-reporting facility, and started
added compatbility features.
V2.11 June 1986. Added RADIX command.
V2.13 July 1986. Reduced memory requirements.
V2.15 August 1986. Implemented COMMENT directive for
compatibility; added floating point instruction set and DQ
and DT directives.
V2.16 August 1986. Made internal changes to accommodate forward
referencing in D86's patch-memory mode.
V2.18 November 1986.
V2.90 March 1987. Test release for .OBJ support.
V3.00 April 1987. Major upgrade:
* added support for linkable .OBJ files
* added long constants and floating-point constants
* added A86LIB library tool and A86LIB support
* added ability to forward-reference variables, and to add
to and index forward references
* added 286 protected-mode and NEC-specific instructions
* added options not to insert errors in source, long
forward JMP for local labels, and default decimal
* added "=" equate compatibility feature
* added double-quoted strings compatibility feature
* parentheses no longer required for most DUP right
operands
V3.01 April 1987. Minor enhancements:
* original file had been renamed to no extension, not OLD
* segment overrides outlawed in 3-operand MOV
* forward references outlawed in numeric-operand INC/DEC
15-2
* add "S" suppress-symtab and "C" case-sensitivity
switches
V3.02 May 1987.
V3.03 May 1987.
V3.04 May 1987.
V3.05 June 1987. Added the following features for MASM
compatibility:
* recognition of SEGMENT AT in non-OBJ mode
* ignore END directive in non-OBJ mode
V3.07 July 1987. Added features necessary for Turbo C support
(+c, +f, +F switches; ignore DGROUP:). Generalized the
environment variable to include macro files. Added the
ampersand feature. Made = compatible with MASM.
V3.08 July 1987.
V3.09 August 1987. Legalized MOV segreg,immediate. Duplicated
MASM functionality for case sensitive mode (A86's +C
switch). Added ability to make aliasing EQU to an
external name. Made FAKE.EXE into an honest EXE file,
instead of a COM masquerading as EXE.
V3.10 September 1987. Added a printed version of the manual.
Added +c switch, reinstating case sensitivity during
assembly, but this time without sensitivity in built-in
symbols.
V3.11 November 1987. Added the SEG operator for compatibility
with Turbo C, and made it possible to define relocatable
segments called CODE, DATA, or STACK, for compatibility
with Turbo Pascal.
V3.12 February 1988. Added features:
* Changed the format of SYM files, so that they are much
smaller yet hold more information. This allows D86,
XREF, and EXMAC to work better with A86.
* A86 now allows an aribtrary expression to appear in a
conditional assembly (#IF) directive.
* Added macro features, for compatibility: #V value
operator, #S size operator, #N number operator, #EX exit
directive, string comparison of operands, and large
operand numbers (up to 255).
* To overcome a Turbo C bug, allowed embedded blanks in
symbols declared via an EXTRN directive. I dropped this
feature in V3.13; see below.
15-3
V3.13 March 1988. Made memory management more flexible, to
allow A86 to run with less available memory. Added a
small feature to ease Turbo C compatibility: if there is a
segment override to a forward refernce, the reference is
assumed to be a variable, not an immediate value. This
eliminates the need for the EXTRN kluge of the above
paragraph, so I dropped that kluge.
V3.14 March 1988.
V3.15 May 1988. Allowed up-arrow in place of equals-sign in
invocation equates. Allowed MOV mem,mem and XCHG of a
variety of new forms, generating sequences of instructions
to implement the unavailable forms.
V3.17 June 1988.
V3.18 July 1988. For compatibility: allowed OFFSET segname, and
implicitly converted a constant with a segment override
into a memory type.
V3.19 August 1988.
V3.20 July 1989. Made internal redesign of handling of size-
override operators (B, W, D, F, etc.) so they are handled
more consistently. Outlawed first DATA SEGMENT without a
strating ORG statement, forcing an explicit ORG 0 for
future compatibility. Allowed more forward references,
including immediate-byte quantities in all applicable
instruction forms.
V3.21 August 1989.
V3.22 January 1990. Added support for additional coprocessors:
the 80387 and the IIT-2C87. Made numerous minor changes
to enhance MASM-compatibility.
+396
View File
@@ -0,0 +1,396 @@
CHAPTER 16 A86 RESERVED SYMBOLS
$ Current assembly pointer
? Uninitialized memory slot
AAA ASCII adjust addition
AAD ASCII adjust division
AAM ASCII adjust multiply
AAS ASCII adjust subtract
ABS EXTRN specifier
ADC Add with carry
ADD Instruction
ADD4S NEC Instruction
AH Byte register
AL Byte register
AND Instruction/operator
ARPL 286 Prot Instruction
ASSUME Ignored, compatibility
AT SEGMENT specifier
AX Word register
B Byte memory specifier
BH Byte register
BIT Bit-mask operator
BL Byte register
BOUND Instruction
BP Word register
BX Word register
BY Bytes-combine operator
BYTE Byte memory specifier
CALL Instruction
CALL80 NEC Instruction
CBW Convert byte to word
CH Byte register
CL Byte register
CLC Clear carry
CLD Clear direction
CLI Clear interrupt
CLRBIT NEC Instruction
CLTS 286 Prot Instruction
CMC Complement carry
CMP Compare
CMP4S NEC Instruction
CMPS Compare string
CMPSB Compare string byte
CMPSW Compare string word
CODE Segment name
COMMENT Directive
COMMON SEGMENT specifier
CS Segment register
CWD Convert word to dword
CX Word register
16-2
D Dword specifier
DAA Decimal adjust add
DAS Decimal adjust sub
DATA Segment name
DB Define bytes
DD Define dwords
DEC Decrement
DH Byte register
DI Word register
DIV Divide
DL Byte register
DQ Define Qwords
DS Segment register
DT Define Twords
DUP Duplicate operator
DW Define words
DWORD Memory specifier
DX Word register
ELSE Conditional term
ELSEIF Conditional term
END Start specifier
ENDIF Conditional term
ENDP End of procedure
ENDS End of segment
ENTER Instruction
EQ Equals operator
EQU Equate directive
ES Segment register
EVEN Coerce to even address
EXTRN Ignored, compatibility
F Far specifier
F2XM1 87 Instruction
F4X4 IIT-2C87 Instruction
FABS 87 Instruction
FADD 87 Instruction
FADDP 87 Instruction
FAR Far specifier
FBANK IIT-2C87 Instruction
FBLD 87 Instruction
FBSTP 87 Instruction
FCHS 87 Instruction
FCLEX 87 Instruction
FCOM 87 Instruction
FCOMP 87 Instruction
FCOMPP 87 Instruction
FCOS 387 Instruction
16-3
FDECSTP 87 Instruction
FDISI 87 Instruction
FDIV 87 Instruction
FDIVP 87 Instruction
FDIVR 87 Instruction
FDIVRP 87 Instruction
FENI 87 Instruction
FFREE 87 Instruction
FIADD 87 Instruction
FICOM 87 Instruction
FICOMP 87 Instruction
FIDIV 87 Instruction
FIDIVR 87 Instruction
FILD 87 Instruction
FIMUL 87 Instruction
FINCSTP 87 Instruction
FINIT 87 Instruction
FIST 87 Instruction
FISTP 87 Instruction
FISUB 87 Instruction
FISUBR 87 Instruction
FLD 87 Instruction
FLD1 87 Instruction
FLDCW 87 Instruction
FLDENV 87 Instruction
FLDL2E 87 Instruction
FLDL2T 87 Instruction
FLDLG2 87 Instruction
FLDLN2 87 Instruction
FLDPI 87 Instruction
FLDZ 87 Instruction
FMUL 87 Instruction
FMULP 87 Instruction
FNCLEX 87 Instruction
FNDISI 87 Instruction
FNENI 87 Instruction
FNINIT 87 Instruction
FNOP 87 Instruction
FNSAVE 87 Instruction
FNSTCW 87 Instruction
FNSTENV 87 Instruction
FNSTSW 87 Instruction
FPATAN 87 Instruction
FPREM 87 Instruction
FPREM1 387 Instruction
FPTAN 87 Instruction
FRNDINT 87 Instruction
FRSTOR 87 Instruction
16-4
FSAVE 87 Instruction
FSCALE 87 Instruction
FSETPM 87 Instruction
FSIN 387 Instruction
FSINCOS 387 Instruction
FSQRT 87 Instruction
FST 87 Instruction
FSTCW 87 Instruction
FSTENV 87 Instruction
FSTP 87 Instruction
FSTSW 87 Instruction
FSUB 87 Instruction
FSUBP 87 Instruction
FSUBR 87 Instruction
FSUBRP 87 Instruction
FTST 87 Instruction
FUCOM 387 Instruction
FUCOMP 387 Instruction
FUCOMPP 387 Instruction
FWAIT 87 Instruction
FXAM 87 Instruction
FXCH 87 Instruction
FXTRACT 87 Instruction
FYL2X 87 Instruction
FYL2XP1 87 Instruction
GE Greater/equal operator
GROUP Group of segments
GT Greater than operator
HIGH High byte of word op
HLT Halt
IDIV Integer divide
IF Skip/conditional term
IMUL Integer multiply
IN Input from port
INC Increment
INCLUDE Ignored, compatibility
INS Input string
INSB Input string byte
INSW Input string word
INT Interrupt
INTO Interrupt on overflow
IRET Interrupt return
16-5
JA Jump on above
JAE Jump above equal
JB Jump on below
JBE Jump below equal
JC Jump on carry
JCXZ Jump on CX zero
JE Jump on equal
JG Jump on greater
JGE Jump greater equal
JL Jump on less
JLE Jump less equal
JMP Jump unconditional
JNA Jump not above
JNAE Jump not above equal
JNB Jump not below
JNBE Jump not below equal
JNC Jump not carry
JNE Jump not equal
JNG Jump not greater
JNGE Jump not greater equ
JNL Jump not less
JNLE Jump not less equal
JNO Jump not overflow
JNP Jump not parity
JNS Jump not sign
JNZ Jump not zero
JO Jump overflow
JP Jump parity
JPE Jump parity even
JPO Jump parity odd
JS Jump on sign
JZ Jump on zero
L2E Real constant
L2T Real constant
LABEL Declaration
LAHF Load AH flags
LAR 286 Prot Instruction
LDS Load into DS
LE Less equal operator
LEA Load eff address
LEAVE Instruction
LES Load into ES
LG2 Real constant
LGDT 286 Prot Instruction
LIDT 286 Prot Instruction
LLDT 286 Prot Instruction
LMSW 286 Prot Instruction
LN2 Real constant
16-6
LOCK Instruction
LODBITS NEC Instruction
LODS Load string
LODSB Load string byte
LODSW Load string word
LONG Operator
LOOP Instruction
LOOPE Loop on equal
LOOPNE Loop not equal
LOOPNZ Loop not zero
LOOPZ Loop on zero
LOW Operator
LSL 286 Prot Instruction
LT Less than operator
LTR 286 Prot Instruction
MACRO Directive
MAIN Program strating label
MEMORY Segment specifier
MOD Operator
MOV Instruction
MOVS Move string
MOVSB Move string byte
MOVSW Move string word
MUL Multiply
NAME .OBJ module name
NE Not equals operator
NEAR Operator
NEG Instruction
NIL No code instruction
NOP No operation
NOT Instruction/operator
NOTBIT NEC Instruction
OFFSET Operator
OR Instruction/operator
ORG Directive
OUT Output to port
OUTS Output String
OUTSB Output string byte
OUTSW Output string word
PAGE Ignored, compatibility
PARA Segment specifier
PI Real Constant
POP Instruction
POPA Pop all
POPF Pop flags
PROC Procedure Directive
PTR Ignored, compatibility
PUBLIC Ignored, compatibility
PUSH Instruction
PUSHA Push all
PUSHF Push flags
16-7
Q Qword specifier
QWORD Memory specifier
RADIX Directive
RCL Rotate carry left
RCR Rotate carry right
REP Repeat prefix
REPC NEC Instruction
REPE Repeat while equal
REPNC NEC Instruction
REPNE Repeat not equal
REPNZ Repeat while zero
REPZ Repeat non zero
RET Return
RETF Far Return
ROL Rotate left
ROL4 NEC Instruction
ROR Rotate right
ROR4 NEC Instruction
SAHF Store AH to flags
SAL Shift arith left
SAR Shift arith right
SBB Subtract with borrow
SCAS Scan string
SCASB Scan string byte
SCASW Scan string word
SEG Operator
SEGMENT Directive
SETBIT NEC Instruction
SGDT 286 Prot Instruction
SHL Instruction/operator
SHORT Operator
SHR Instruction/operator
SI Word register
SIDT 286 Prot Instruction
SLDT 286 Prot Instruction
SMSW 286 Prot Instruction
SP Word register
SS Segment register
ST EQU 0 for compatibility
STACK Segment specifier
STC Set carry
STD Set direction
STI Set interrupts
STOBITS NEC Instruction
STOS Store string
STOSB Store string byte
STOSW Store string word
STR 286 Prot Instruction
STRUC Structure directive
SUB Instruction
SUB4S NEC Instruction
SUBTTL Ignored, compatibility
16-8
T Tbyte specifier
TBYTE Memory specifier
TEST Instruction
TESTBIT NEC Instruction
THIS This-location specifier
TITLE Ignored, compatibility
TYPE Operator
VERR 286 Prot Instruction
VERW 286 Prot Instruction
W Word specifier
WAIT Instruction
WORD Word specifier
XCHG Instruction
XLAT Translate byte
XLATB Translate byte
XOR Instruction/operator
+741
View File
@@ -0,0 +1,741 @@
INDEX 17-1
287 directive, 7-1
387 support, 7-2
A-after operator in macros, 11-6
A86 environment variable, 3-4
A86.LIB file, 13-3
A86.LIB library catalog, 2-1
A86LIB environment variable, 13-5
A86LIB library tool, 13-3
AAD with operand, 5-4
AAM with operands, 5-4
about the author, 1-6
ABS operator in EXTRN, 10-6
absolute segments in OBJ mode, 10-10
address, my, 1-1
align operand list, 10-9
align specification, 10-9
alignment of words, 9-3
allocation directives, 9-3
alphabetical listing, 13-1
ampersand, use to specify standard input, 3-5
AND expression operator, 8-7
angle brackets in MASM, 12-3
archiving, 13-7
arithmetic on floating-point numbers, 7-4
assembler variables, 9-10
assertion checking, 9-10
ASSUME directive, 6-3
asterisk multiplication operator, 8-6
AT combine type, 10-10
at-sign @, in symbols, 4-2
attribute operators/specifiers, 8-9
AUTOEXEC.BAT, 3-4
B operator in EXTRN, 10-6
B override expression operator, 8-9
B-before operator in macros, 11-6
base registers, 6-2
base, default, 12-2
based structure example, 6-2
based structures, 9-6
bases for numbers, 8-1
bases, ambiguous, 8-1
batch file controls, 11-14
BCD numbers, 7-5
benefits of registration, 1-3
BIN extension for object files, 9-3
BIN extension, 3-2
binary base, 8-1
Binary Coded Decimal numbers, 7-5
biography, 1-6
BIOS interface, books on, 3-1
BIT expression operator, 8-6
books on assembler, recommended, 3-1
Boolean negation operator, 8-7
Borland Turbo C, using A86 with, 13-7
brackets, 8-11
British contact, 1-1
bugs, reporting, 1-6
17-2
built-in constant names, 7-4
built-in symbols, 16-1
built-in symbols, equates to, 9-8
BY operator, 8-5
BYTE align type, 10-9
BYTE override expression operator, 8-9
BYTE PTR and WORD PTR, 12-6
C programming language, linking to, 10-1
C switch, 3-2
C, inline assembly statements, 13-7
C-loops in macros, 11-5
capacity, 1-5
capacity, source file, 3-6
case sensitivity, 3-2
case-insensitive comparisons, 8-9
catalog file A86.LIB, 13-3
categories of A86 elements, 4-1
cb specifier, 6-6
cd specifier, 6-6
changing the default base, 8-2
character loops in macros, 11-5
characters allowable in symbols, 4-2
characters recognized in A86 language, 4-2
choices for 87 operands, 7-6
class name, specifying, 10-11
classes, 10-4
clear-register macro, 11-1
clear-register macro, 11-5
closing of macro loops, 11-10
code display, 13-6
CODE ENDS directive, 9-2
code generation of forward references, 9-7
code label specifier, 6-6
CODE SEGMENT directive, 9-1
CODE segment, link to Pascal, 10-11
colon operator, 8-11
colon, deciding when to use, 4-4
columnar output, 2-2
COM extension, 3-2
COM programs, how to detect, 12-1
combine operand list, 10-9
combine specification, 10-9
combine types, 10-9
combining switches, 3-4
COMMENT directive, 4-2
comments in macros, removal of, 11-2
comments, 4-2
COMMON combine type, 10-10
comparison of strings, 8-8
compatibility, 12-1
compression of macro text, 11-2
computation models, 10-2
concatenating terms in an expression, 8-5
conditional assembly and macros, 11-13
conditional assembly and XREF, 11-14
conditional assembly, 11-11
conditional calls, see IF, 5-1
17-3
conditional jump, far, see IF, 5-1
conditional returns, 5-2
constant operand to FLD, 7-4
constants, floating, 8-2
constants, format of, 8-1
constants, large, 9-5
constants, overview, 4-4
contacting me, 1-6
contents, 0-3
control-character notation, 8-5
control-Z key, 2-2
controls, invocation, user-definable, 11-14
conversion of macros, 13-3
crashes, system, on lack of FWAIT, 7-2
creating programs to assemble, 3-1
credit cards, 1-1
cross reference listing, 13-1
cw specifier, 6-6
D operator in EXTRN, 10-6
D override expression operator, 8-9
D switch, 3-3
data allocation statements, samples, 4-1
DATA ENDS directive, 9-2
DATA SEGMENT directive, 9-1
DATA segment, link to Pascal, 10-11
DB directive, 9-3
DD directive, 9-3
DD examples, 9-5
DEC, multiple and numeric operands, 5-1
decimal base, 8-1
decimal output of macro operands, 11-8
default base, changing, 8-2
default base, decimal, 3-3
default bases, 8-1
default forward references, 3-4
default output file name, 3-6
default segment registers, 6-2
default segment, OBJ mode, 10-12
defined symbols, testing for, 8-8
defining macros, 11-1
demonstration, 2-1
description of 87 instructions, 7-6
description of instructions, 6-8
digits in file names, 3-6
digits, hex, 8-1
directives in a86, 9-1
directives, samples, 4-1
displacement field, 6-4
display of symbol values, 13-2
displaying macro expansions, 13-2
division operator, 8-6
dollar sign $, in symbols, 4-2
dollar sign operator, 8-12
DOS interface, books on, 3-1
double hash ## signs in macros, 11-2
double hash signs ## in macros, 11-13
double-precision, 7-5
17-4
double-quotes in strings, 9-5
doubleword pointer initialization, 9-5
DQ directive, 9-3
DQ example, 9-5
DT directive, 9-3
DT example, 9-5
DUP construct, 9-4
duplicate definitions, 9-9
DW directive, 9-3
DWORD override expression operator, 8-9
E switch, 3-3
EA byte, 6-4
eb specifier, 6-6
editing programs, 3-1
effective address codes table, 6-5
effective addresses, 6-1
effective addresses, encoding, 6-4
ELSE, 11-12
ELSEIF, 11-12
EM end-of-macro symbol, 11-1
emulation, floating-point, 7-2
encoding of effective addresses, 6-4
encoding of floating-point numbers, 8-2
END directive, 10-7
END in non-OBJ mode, 12-4
end of a macro, 11-1
end of file, 10-7
ENDIF, 11-12
ENDM, 12-3
ENDP directive, 9-11
ENDS directive, OBJ mode, 10-11
ENDS directives in COM mode, 9-2
English contact, 1-1
environment string, invocation equates in, 11-15
environment variable A86LIB, 13-5
environment variable, a86, 3-4
EQ expression operator, 8-8
EQ in comparing strings, 8-8
EQU directive, 9-8
equal-sign string compare, 8-9
equals-sign directive, 9-10
equates to built-in symbols, 9-8
equates to interrupts, 9-9
ER end-of-repeat symbol, 11-4
ERDEMO.BAT batch file, 2-1
ERR extension, 3-3
error file redirection, 3-3
error messages, 1-5
error messages, explanation, 14-1
evaluating macro operands, 11-8
EVEN directive, 9-3
ew specifier, 6-6
EX exit macro symbol, 11-10
examples of A86 statements, 4-1
examples of floating constants, 8-3
examples of numbers, 4-2
examples of type matching, 4-5
17-5
examples of useful memory accesses, 6-3
exclamation point operator, 8-7
exclusive features, 5-1
EXE programs, how to detect, 12-1
exiting from middle of macro, 11-10
EXITM simulation, 11-10
EXITM, 12-3
EXMAC demo, 2-2
EXMAC tool, 13-2
expansions of macros, displaying, 13-2
explicit EXTRNs, 3-4
explicit EXTRNs, forcing, 10-7
explicit OBJ specification, 10-1
explicit public names, 10-5
explicit WAITs, 7-1
exponent specifier, 8-2
expressions in conditional assembly, 11-11
expressions involving forward references, 9-7
extended-precision operands, 7-5
extensions of source files, 3-6
external names and LINK, 10-3
extra coprocessor support, 7-2
EXTRN directive, 10-6
EXTRNs, explicit, 3-4
F operator in EXTRN, 10-6
F override expression operator, 8-9
F switch, 3-3
f switch, 7-3
F6 to terminate file, 2-2
FAKE.EXE, 13-7
far label constants, 8-12
FAR override expression operator, 8-9
FBANK instruction on IIT-2C87, 7-2
FDISI instruction, 7-1
features, exclusive, 5-1
FENI instruction, 7-1
file containing symbols, 13-1
file in which a symbol was defined, 13-2
file lists, 3-6
file maintenance, 3-6
file names, digits in, 3-6
files, source, 3-1
finding symbol values, 13-2
FLD, immediate operand, 7-4
floating constants, examples of, 8-3
floating point operand types, 7-5
floating point operands, choices for, 7-6
floating point stack, 7-3
floating-point constants, format of, 8-2
floating-point emulation, 7-2
floating-point processor, 7-1
footprint, code generation, 1-3
forcing explicit EXTRNs, 10-7
forcing explicit EXTRNs, 3-4
forcing library lookup, 13-5
format of assembler source lines, 4-3
format of macros, 11-2
17-6
FORTRAN, 10-10
forward references, 12-2
forward references, 9-6
forward references, default, 3-4
fragments, 10-3
FSETPM instruction, 7-1
FSTSW AX form, 7-1
FWAIT instruction, 7-1
Gates, Bill, 13-7
GE expression operator, 8-8
generated code, displaying, 13-6
Great Britain contact, 1-1
greater-mark ">" for local symbols, 5-3
GROUP directive, 10-12
groups, reason for, 10-3
GT expression operator, 8-8
hash sign # in invocation, 13-5
hash sign #, conditional assembly, 11-11
hash signs # in macros, 11-13
hash signs # in macros, 11-2
hash signs #, literalizing in macros, 11-2
hexadecimal base, 8-1
HIGH operator, 8-4
high-level language computation models, 10-2
history of A86, 15-1
ib specifier, 6-6
IBM, 12-1
IBM-PC AT computer, 7-2
IEEE standard for floating-point, 8-2
IF conditional assembly symbol, 11-11
IF statement, 5-1
IFDIF, 12-3
IFE, 12-3
IFIDN, 12-3
IIT-2C87 support, 7-2
immediate operand to FLD, 7-4
implicit public names, 10-5
INC, multiple and numeric operands, 5-1
incentives to register, 1-3
INCLUDE, 12-4
indefinite repeats, 11-5
index expressions, 8-4
index registers, 6-2
indexed memory, 6-2
inferior assemblers, 12-1
inferior assemblers, porting to, 12-5
initializations of floating-point numbers, 7-4
instruction set chart, explanation, 6-6
instruction set, 87, 7-6
instruction statements, samples, 4-1
instructions, list of, 6-8
instructions, special, 6-7
integer operands to 8087, 7-5
Intel assembler, 12-1
Intel meeting, 10-3
interactive macro tool, 13-3
intermediate numeric results, 7-5
17-7
interrupt equates, 9-9
interrupts, grabbing, 12-2
invocation of A86, 3-1
invocation variables in environment string, 11-15
invocation variables, 11-14
IRET operand, 5-2
IRP and IRPC functionality, 11-1
IRP, 12-3
IRPC, 12-3
iw specifier, 6-6
juxtaposing terms in an expression, 8-5
keyboard entry coding example, 11-3
keywords, 4-2
L last-operand in macros, 11-5
L switch, 3-3
L2E and L2T constants, 7-4
LABEL directive, 9-11
labels, examples, 4-4
language, A86, 4-1
large constant initialization, 9-5
large macro operand numbers, 11-9
large model of segmentation, 10-2
last-operand in macros, 11-5
LE expression operator, 8-8
LEA instruction, optimizing, 3-3
LEA optimization, 5-4
leading underscore, in C, 10-1
legal terms, 1-1
length byte, generating in macro, 11-8
length of a symbol name, 4-2
LG2 constant, 7-4
line-format, 4-3
LINES.8 library file, 2-1
LINK program, 10-3
linkage, 10-1
list of instructions, 6-8
listing macros, 13-3
listing of 87 instructions, 7-6
listing of cross references, 13-1
listing of symbols, 13-1
listings with A86, 13-5
LN2 constant, 7-4
loading named segments, 12-2
local labels in macros, 11-10
local labels, simulating, 12-5
local symbols, 5-3
local symbols, specifying, 9-10
location, this, operator, 8-12
logical operators, 8-7
long default jump, 3-3
LONG expression operator, 8-9
looping in macros, 11-4
loops with large index, 11-9
LOW operator, 8-4
lower case letters in symbols, 3-2
LT expression operator, 8-8
m specifier, 6-6
17-8
macro compatibility, 12-2
macro exiting from within loop, 11-10
macro expansion demo, 2-2
macro expansions, displaying, 13-2
macro file, default, 3-5
macro loops, closing, 11-10
macro loops, skipping increments, 11-6
macro operand substitution, 11-2
macro operands, computing number, 11-9
macros and conditional assembly, 11-13
macros, 11-1
macros, defining, 11-1
mailing list, 1-4
main module, 10-3
MAIN symbol, 10-7
maintenance of files, 3-6
manual, scope of, 3-1
MASK, 12-4
MASM 8087/287 code generation, 7-1
MASM compatibility, 12-1
MASM compatible CODE, DATA, 10-11
MASM conditional assembly, simulating, 11-14
MASM, mimicking, 13-7
matching of types, examples, 4-5
matrix multiplication on IIT-2C87, 7-2
maximum length of a symbol name (127), 4-2
maximum source file size, 3-6
meeting at Intel, 10-3
MEMORY combine type, 10-10
memory forms, overlooked, 6-3
memory operand forms to 87 instructions, 7-4
memory requirements, 3-6
memory resident code, 12-2
memory variables, specifying, 6-1
menu systems and A86, 3-5
MEXP.BAT batch file, 2-2
Microsoft, 12-1
minus operator, 8-5
MIX tool, compatibility, 3-4
mixing constant types in word inits., 8-5
mnemonics, 8086, 6-8
mnemonics, one for many instructions, 4-4
MOD modulo operator, 8-6
model of segmentation, grotesque, 10-3
ModRM byte, 6-4
modular programming, encouraging, 13-6
module names, 10-5
modules, object, 10-3
Morse, Steve, 3-1
MOV of immediate value into segment reg, 5-2
MOV of memory operands, 5-2
MOV of segment registers, 5-2
MOV substitute for LEA, 5-4
MOV with three operands, 5-2
move-memory macro example, 11-1
MSDOS.8 library file, 2-1
MTCOLS.BAT batch file, 2-2
17-9
multiple allocation using DUP, 9-4
multiple files in OBJ mode, 10-1
multiple increments in macro loops, 11-6
multiple operands to PUSH,POP,INC,DEC, 5-1
multiply by 10 coding example, 10-1
multiply operator, 8-6
NAME directive, 10-5
NAME in non-OBJ mode, 12-4
name of output files, 3-2
NE expression operator, 8-8
NE in comparing strings, 8-8
NEAR expression operator, 8-11
NEC chips, lack of AAD with operands, 5-4
NEC chips, special instructions, 6-8
negation, Boolean, 8-7
negative R-loops in macros, 11-7
nested IF blocks, 11-12
nested PROCs, lack of, 9-10
nesting of loops in macros, 11-8
NIL prefix, 9-9
non-combinable segments, 10-10
NOP and EVEN directive, 9-3
Norton, Peter, 3-1
NOT expression operator, 8-7
null invocation names, 11-15
null operands to macros, 11-3
number operands in expressions, 8-4
numbers, examples, 4-2
numbers, examples, 8-1
numbers, floating, 8-2
numbers, format of, 8-1
numeric operands to INC,DEC, 5-1
O switch, 10-1
O switch, 3-2
O switch, 3-4
OBJ file generation, 3-4
OBJ internal optimization, 3-4
OBJ production made easy, 10-1
object file name, 3-2
object modules, 10-3
octal base, 8-1
OFFSET expression operator, 8-10
opcodes, 8086, 6-8
opcodes, 87, 7-6
operand choices for 87 instructions, 7-6
operand number, generating, 11-9
operand types to 87 instructions, 7-4
operating system requirements, 3-6
operation of A86, 3-1
operator precedence, 8-13
Optimized LEA instruction, 5-4
OR expression operator, 8-7
ORG directive, 9-2
outer segment, OBJ mode, 10-12
output files, naming, 3-2
overlooked memory forms, 6-3
overrides, segment, 12-2
17-10
overrides, segment, 6-3
overview of A86, 1-4
overview of expressions, 8-3
PAGE directive, 12-4
PAGE specifier, 10-9
PAGE.8 program, 2-1
PAGE.BAD source file, 2-1
PAGE.COM program, 2-1
PARA specifier, 10-9
parenthesized operand numbers, 11-9
Pascal segment names, 10-11
Pascal, linking to, 10-2
passing macro operands by value, 11-8
period operator, 8-5
permanent switch settings, 3-4
phone number, my, 1-1
phone numbers of my bulletin boards, 1-6
PI constant, 7-4
piping file names to A86, 3-5
plus operator, 8-5
POP, multiple operands, 5-1
port programs to inferior assemblers, 12-5
pound sign #, SEE hash sign
Power C, compatibility, 3-4
powers of ten, 8-2
precedence of operators, 8-13
prices, 1-2
printer eject program, 2-1
PROC directive, 9-10
procedure-level summary listings, 13-1
procedures, 9-10
program location operator, 8-12
program starting location, OBJ mode, 10-7
programs, how to create, 3-1
prompt for file names, 3-5
protected mode instructions, 6-7
PTR operator, 8-5
PUBLIC combine type, 10-9
PUBLIC directive, 10-5
public names and LINK, 10-3
PUSH multiple operands, simulating, 12-5
PUSH, multiple operands, 5-1
Q operator in EXTRN, 10-6
Q override expression operator, 8-9
question mark ?, in symbols, 4-2
question-mark operator, 9-4
quoted-string macro operands, 11-3
QWORD override expression operator, 8-9
R-loops in macros, 11-4
R-loops, negative, 11-7
RADIX directive, 8-2
rb register specifier, 6-7
RECORD, 12-4
red tape, 1-4
red tape, 10-1
redefinable symbols, 5-3
redefining invocation variables, 11-15
17-11
redefining symbols, 9-9
redirection of error files, 3-3
references to a symbol, 13-2
registers, 8086, 4-3
registers, general, 6-1
registration benefits, 1-3
registration benefits, 13-3
relational operators, 8-8
relocation and linkage, 10-1
repeating code using DUP, 9-4
REPT directive, simulating, 11-9
requirements, system, 3-6
reserved symbols, 16-1
RET instruction, meaning of, 9-10
RET operand, 5-2
RETF instruction and PROC, 9-10
RETF operand, 5-2
REV.8 source file, 2-1
REV.COM program, 2-1
reversing strings example, 2-1
revision history, 15-1
rw register specifier, 6-7
S switch, 3-4
samples of A86 statements, 4-1
scientific notation, 8-2
SEG operator, 10-13
SEGMENT AT, non-OMF, 12-4
SEGMENT directive, non-OBJ mode, 12-4
SEGMENT directive, OBJ mode, 10-8
segment override colon operator, 8-12
segment overrides, 12-2
segment overrides, 6-3
segment registers, default, 6-2
segmentation and memory access, 6-2
segmentation models, 10-2
segments in A86, 9-1
segments, loading named, 12-2
shareware distribution, 0-1
shifting expression operators, 8-6
SHL and SHR expression operator, 8-6
SHORT expression operator, 8-9
simple macro syntax, 11-1
single-precision, 7-5
size of macro operands, 11-8
size of source files, 3-6
size of structures, 8-12
slash division operator, 8-6
slash specifier, 6-4
small model of computation, 10-2
source files, 3-1
source libraries, 13-3
special instructions, 6-8
Specialty Software, 7-2
speed, 1-4
square brackets operator, 8-11
ST floating-point stack specifier, 8-12
STACK combine type, 10-9
17-12
STACK segment, relocatable, 10-11
stack segments in OBJ mode, 10-9
stack, floating point, 7-3
standard input and output, 13-3
standard input command tail, 3-5
starting location, OBJ mode, 10-7
strategies for file maintenance, 3-6
string allocation, 9-5
string comparison operators, 8-8
STRUC directive, 9-6
STRUC, implicit via SEGMENT AT, 12-4
structure initialization, 12-3
structure, based, example, 6-2
structured programming constructs, 5-1
structures and MASM, 12-3
structures, size of, 8-12
sub-directories of programs, 3-6
substitution of macro operands, 11-2
subtraction operator, 8-6
SUBTTL, 12-4
summary of procedure calls, 13-1
suppressing symbols file, 3-4
switches, assembler, 3-2
switches, combining, 3-4
switches, user-definable, 11-14
SYM extension, 3-2
symbol table file name, 3-2
symbols file, 13-1
symbols file, suppressing, 3-4
symbols listing, 13-1
symbols, allowable characters for, 4-2
symbols, redefining, 9-9
symbols, reserved, 16-1
system crashes on lack of FWAIT, 7-2
system requirements, 3-6
T operator in EXTRN, 10-6
T override expression operator, 8-9
table of contents, 0-3
table of effective address bytes, 6-5
tabs, diatribe against, 4-3
TBYTE override expression operator, 8-9
TCOLS.8 source file, 2-2
TCOLS.COM program, 2-2
telephone number, my, 1-1
telephone numbers of my bulletin boards, 1-6
terms, legal, 1-1
TEST with one operand, 5-4
Texas, 11-12
Texas, 11-14
TEXT segment name, 10-12
THIS operator, 8-12
tips for memory access, 6-3
TITLE, 12-4
TO in invocation, 3-2
Turbo C, using A86 with, 13-7
Turbo Pascal segment names, 10-11
Turbo Pascal, linking to, 10-2
17-13
type display of symbols, 13-1
type matching, examples, 4-5
TYPE operator, 8-12
types in the a86 language, 4-3
types, assumed, 10-2
undefined symbol types, assumed, 10-2
undefined symbols listing in OBJ mode, 10-6
underscore, in symbols, 4-2
underscore, leading, in C, 10-1
underscores within numbers, 8-1
unusable user symbols, 16-1
up arrow symbol and invocation equates, 11-15
USAGE.8 library file, 2-1
value, passing by, 11-8
values of symbols, 13-2
variable forward references, 9-7
variable operands in expressions, 8-4
variables declared at invocation, 11-14
variables, 9-10
variables, examples, 4-3
verbose forms, floating point, 7-3
verbose PROC, 9-11
version history, 15-1
W operator in EXTRN, 10-6
W override expression operator, 8-9
WAIT instruction, 7-1
Wettstein, Greg, 1-6
WIDTH, 12-4
wild cards in source files, 3-2
wild cards, order of, 3-6
WORD align type, 10-9
WORD override expression operator, 8-9
WORD PTR, 12-6
X specifier for numeric bases, 8-1
X switch, 10-7
X switch, 3-4
XCHG of memory operands, 5-2
XCHG with segment register, 5-2
XOR expression operator, 8-7
XREF and conditional assembly, 11-14
XREF demo, 2-2
XREF tool, 13-1
XRF extension, 13-1
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+149
View File
@@ -0,0 +1,149 @@
AFIX conversion tool, V1.0 February 18, 1990
Copyright 1990 Eric Isaacson. All rights reserved.
Eric Isaacson
416 E. University Ave.
Bloomington, IN 47401-4739
(812)339-1811
The AFIX package consists of this AFIX.DOC file, the program
AFIX.COM, and the set of files with the .FIX extension, that
are fed to the AFIX program.
I consider the legal status of the AFIX package to be the same
as that of the free-distribution parts of my A86 package: I
grant permission for anyone to copy the complete, unmodified
package and use it to try out A86. There is no separate
registration fee for AFIX: if you register for A86, that covers
the usage of AFIX. See the A86 package (V3.22 or later) for
details of my copying permissions/restrictions, including my
reservation of the right to inform specific parties that they
may not distribute some or all of my software.
Overview of AFIX
In an effort to expand the test base for my A86 assembler, I
recently converted 61 assembly-language source files, published
by PC Magazine during the past 3 years. These files were
written for various versions of the inferior but more widely-
distributed MASM assembler by Microsoft. I made the minimum
modifications necessary so that A86 would assemble the source
files directly to COM files that are functionally equivalent to
the files produced by MASM, LINK, and EXE2BIN. I would like to
make the modified files as widely available as the original MASM
files; but simply distributing them would violate their
copyright.
AFIX was written to solve this legal problem. For each modified
source file, I am publishing a special file with the extension
.FIX, that contains the specifications for modifying the
original PC Magazine source file. The FIX files contain
absolutely nothing from the original .ASM files; so they are
entirely mine and I can copyright and distribute them as I
please.
To run AFIX, you must place AFIX.COM, the original .ASM file,
and the corresponding .FIX file into your current directory, and
type AFIX followed by the file name to the DOS prompt. AFIX
will verify that the .ASM file has the same size and 16-bit
checksum as the file I have. If it does, AFIX will produce an
A86-compatible file, with the extension .8. A comment line is
inserted at the top of the file, giving the A86 invocation line
that will assemble the program. If the original file was more
than 64K in size, the output will be split into multiple files,
with names ending in _1, _2, etc.
You do not need to run AFIX for each individual source file:
AFIX will accept wildcards in the program name. In fact, if you
simply type AFIX to the DOS prompt, with no arguments, then
*.FIX is assumed, and AFIX will convert all programs for which a
.FIX file and the correct .ASM file both exist. If you do this,
you might want to redirect standard output to a disk file, so
that you can review the status messages at the end:
AFIX >AFIX.LOG
If you get AFIX from a disk you have purchased from me or from a
shareware distribution house, the disk will not contain the .ASM
files you need-- they are copyrighted and cannot be sold.
You'll need to download them from a BBS, or from the utilities
forum of PCMagnet.
What AFIX Doesn't Do
AFIX is not a general-purpose MASM-to-A86 translation tool-- you
**cannot** apply it to files you have created. AFIX is merely a
tool that allows me to communicate, in a machine-readable
format, the changes that I manually made to the copyrighted
source files. It works only with the .FIX files that I have
supplied. I do hope to write a MASM-to-A86 tool that will
assist you in converting any program; but there are other
improvements I would like to make to A86 first. Meanwhile, this
present effort makes over 2 megabytes of A86 source code
publicly available. That should be enough to keep you busy for
awhile!
Some Comments About the Converted Programs
This conversion effort has substantially improved both the
reliability and compatibility of A86. I made several dozen
changes for the V3.22 release, to minimize the changes needed
for the successful conversion. I added a new switch, +L8, that
changes assumptions made about untyped forward references,
reducing the number of B and W type-specifiers needed. The +D
switch already made the syntax of numeric constants MASM-
compatible. Thus, for maximum compatibility, the converted
files are assembled with the +DL8 switch setting.
Chapter 12 of the A86 manual goes into detail about what needs
to be done to convert files from MASM to A86. All 61 source
files assemble to complete .COM programs. The changes made to
these files fell into five categories:
1. Most of the changes comprised the addition of explicit
segment-override operators to memory references. MASM
inserts such overrides behind the programmer's back, as
controlled by the confusing and misunderstood ASSUME
directive. These overrides appear primarily in the
handlers for interrupts taken over by memory-resident
(TSR) programs. For simple, non-resident COM programs,
all segment registers point to the program segment,
so that overrides aren't needed.
2. Two of the 61 source files contained macros. A86's
macro definition syntax is different, so the definitions
had to be converted. These were the only two files
that did not retain MASM-compatibility after conversion.
3. There were some forward-reference symbols whose type
needed to be specified, usually with the OFFSET operator.
4. There were a few expressions involving forward references
that A86 couldn't handle. The expressions were moved into
EQU directives placed below the symbols referenced.
5. There were a couple of built-in mnemonics, such as WAIT, that
doubled as user symbols. MASM allows this; A86 doesn't. The
symbols were modified by appending an underscore character.
I verified the correctness of the converted files by generating a
proprietary version of A86 that mimicked as closely as possible
the (mostly inferior) code generation of MASM. This reduced the
number of discrepancies in the resulting .COM files to a small
enough number that I could manually verify their functional
equivalency. I did not attempt to test the execution of the
programs themselves.
The total size of changes was minuscule in proportion to the
total size of the source files. In fact, the one-line comments
appended to the top of each program totalled more bytes than the
code changes made! Without those comments, the total changes
(moved bytes plus inserted bytes plus deleted bytes) for the 59
non-macro files were 3363 out of 2231783 bytes. I can thus
claim that for COM programs not containing macros, A86 is 99.83%
MASM-compatible. Twenty of the files required no changes
whatever.
+148
View File
@@ -0,0 +1,148 @@
Title : AIO 5.0b Documentation
Creation Date : 1/11/87
Author : Peter King
Well Here it is....AIO 5.0!! 5.0 incorperates MANY new features which will
be discussed here in this .DOC file. A basic knowledge of hacking terminology
is assummed....THIS IS NOT A TUTORIAL ON HACKING OUT CODES, it is only an
explaination of the newer AIO 5.0 features.
New Features will be discussed relative to AIO 4.0b and will be catagorized
by the section of the program that they relate to.
Access Code Finder
==================
MANY new features here make this (I believe) the most flexible code hacker
available today.
First, you may now specify an external file to read in which
contains a list of carrier numbers, up to 1000. This file would contain
numbers that would always answer with a carrier, or, if you are reverse
hacking (discussed later), numbers that would NEVER answer with a modem-tone
(payphones work well). This file MUST contain numbers in in the format :
##########<CR>
##########<CR>
##########<CR>
etc....
If a number is not in this format (straight 10 digits..no hyphens or dashes),
it will be ignored. This is just a standard ASCII file which could be created
with any straight ASCII editor or even by "COPY CON:FILENAME". If you run into
a problem because it will support "only" 1000 numbers, get in touch with me and
I will personally tell you to take a hike. AIO chooses which number to use
completely at random, making it harder to spot a pattern in dialing attempts.
Second, you can now tell AIO what to do if your modem sends the result string
"BUSY" during dialing. AIO can either 1)Record the code as valid, 2)Abort this
try and continue, or 3)Ignore it altogether. Since some services use a busy
signal to indicate an invalid code, this would make cycling immediate if you
chose "2)" and your modem supported busy signal detection.
Fianlly, AIO can now "reverse hack" a system. This is in response to some
services putting a carrier tone in thier recordings to fool your friendly
hacking program into thinking that the code was valid. If you plan to reverse
hack a system, you give it carrier numbers that will NEVER answer with a modem
tone (like a payphone), and if AIO does NOT get a CD during the dialing
attempt, it assumes the code is valid and records it.
I suggest you prepare one text file with a list of all your modem-tone numbers,
and another with a list of all the payphones you know. This offers you the
ultimate flexibility and lessens the chance that the LD company will notice
a pattern in dialing. With about 50 carrier numbers, and a 1 minute delay
between attemps, it would be very hard to spot a pattern in the LD company's
dialing log.
Sequential Dialer
=================
AIO will now skip to the next number immediately if it recieves "BUSY" from
the modem. This makes scanning much faster.
Terminal Mode
=============
This is completely new. It is provided as a way to test out the numbers you
find with the Seq. Dialer while still in AIO. Of course you could use it for
practially anything from testing a number to calling your favorite VPL node.
It is fairly full-featured considering that I was not trying to compete with
ProComm. Pressing Alt-D will get you a listing of the numbers you have found
with the Seq. Dialer, at which point you can choose one of those to dial or
enter one of your own to dial. Alt-K toggles a capture mode which will capture
all incoming/outgoing info to CAPTURE.AIO. HOME will get you a help menu with
all the available commands listed in it.
Modem Setup
===========
Even if you have used AIO before and have the config. files, you should go here
and reconfigure the program for your modem. The init. strings are all new and
need to be re-chosen. After fetching the correct values, you will be prompted
for whether or not you want Fast Dialing. Fast Dialing is not supported on the
Hayes 2400 because it does not recognize the S11 register (thanks a lot, Hayes!)
Carrier detection can now be accomplished in 2 different ways: The first is
that AIO can look for a string returned from your modem (default="CONNECT").
Note that AIO scans the string returned from the modem for this connection
string, so in the above case "CONNECT 1200" would be recognized as well, etc.
The second and MUCH PREFERRED method is that AIO can actually read the pin
on the RS-232 port to determine if CD is present. If you use this method
(which is the default), you must remember to set your modem switch to NOT
force CD, else AIO will always think it has CD. This setting of this "switch"
on the Hayes 2400 is automatically accomplished by the Fetched Init. strings.
In 5.0b, you can now choose the way you want AIO to hang up the modem, either
by dropping DTR (preffered), or by sending the standard Hayes escape code (+++)
followed by "ATH0". If you use the DTR method, remember to set your modem
switches to NOT force DTR. Again this is accomplished on the Hayes 2400 by
the fetched Init. Strings.
*** If you're having trouble getting AIO to communicate with the modem ***
*** correctly, delete your AIO.CNF file and run AIO again, then proceed ***
*** directly to the Modem Setup Menu and set AIO up for your modem. ***
COMMAND.COM Shell
=================
Zapped altogether since no one used it and it took up too much damn room.
QuickDial
=========
Also zapped since you can now do this through the Terminal Mode.
What the HELL is a code mask?
=============================
The code mask allows you to set any nuber of digits in the random code
to constants. For instance, if you were hacking 6 digit coes, a code
mask of "45..8." would result in codes like 456289,451188,450080, etc. Any
character in the mask which is not a numeral is taken to mean "generate a
random number here". Note that if you just wanted to set the first three
digits of a six digit code to 632, a mask of "632" would work just fine.....
there's no need to fill out the remaining spaces with periods or whatever.
If no code mask is specified, all digits are generated randomly. This mask
allows for a great deal of flexibility in hacking access codes.
Well, that's about it....let me know what you think and any suggestions that
you may have. My only suggestions are Have Fun and Be Carefull!
Cheers-
Pete
PS- Unsolicited donations of Absolut Vodka will be accepted at an undisclosed
address.

+81
View File
@@ -0,0 +1,81 @@
Documentation for Allnet Hacker v4.0
Of course you should never under any circumstances use this program for
illegal purposes (HaHa!).
To (ab)use Allnet you must realize that at the time of this writing they are
using a 7 digit base code plus a 2 digit PIN code.
The complete code is divided as follows: BBBBBBB-PP (B=Base code P=PIN code)
When hacking Base codes, the program will enter the 7 digit number that
is written under "Current Code- XXXXXXX" plus your formula. (I also have
a formula hacker, if your interested leave mail)
When hacking PIN codes, the program will enter the Base Code plus a PIN code
that is either defined or random plus your target number (which should be
a non-valid number. Example "8189762222"
Setup Program (option 6 from Main Menu) will set your defaults. Explanations
follow:
Comport- Defaults to "COM1:". This is simply the comport that you will be
dialing from.
Setup String- Default to "ATM3X0S7=255 S9=255 S11=50". This is the command
that will be sent to your modem prior to dialing. Consult your modem guide
to make any changes. With the string as it is set now, on a US Robotics
2400 baud modem, it will: 1-Turn the speaker on after dialing is completed.
2-Set the result codes to minimum. 3-Wait 255 seconds for a carrier (which
is overridden by other setup commands). 4-Say that a carrier must be present
and constant for 25.5 seconds before a result code will be sent. 5-Set your
touch tone spacing to 5 milliseconds per digit. The fastest that my telephone
company's switches can always recognize.
Dial up- Defaults to "9501444". This is so that you people who aren't lucky
enough to have the 950 dialup for Allnet work in your area, can change it
to the 800 dial up.
Base Code Filename- Defaults to "ALLNET.COD". This is the filename that your
[M]arked base codes will be saved under.
Base timeout- Defaults to "350". This is the number that the computer will
count to when hacking Base Codes and then hang up and try the next code.
PIN timeout- Defaults to "350". Same as above except it's hacking PIN codes.
Target number- Defaults to "4159763482". This is the non-valid number that
will be sent after the PIN code when hacking PIN codes.
Formula- Defaults to "111*". This is the series of digits that will be sent
after a base code when hacking or testing base codes. I will try to update
this as much as possible. You can also get my Formula Hacker which will
work with any LD companies that use 2 part codes.
Re-test base- Defaults to "20". Because of the fact that in some areas Allnet
has been killing base codes pretty regularly, I added a feature in the random
PIN code hacking section of the program that will re-test the base code after
so many tries to make sure that it is still a valid base code. This will
default to every 20 tries.
Wait time between dials- Defaults to "75". This is the time that your line
needs to disconnect from Allnet and redial. You may need to extend this time
depending on the speed your computer runs at.
Dial command- Defaults to "ATDT". This is the command to send to the modem
to tell it to tone dial. Consult your modem guide if needed.
Commas after dialup- Defaults to ",,". This is the wait time between dialing
the dialup and diling the possible code. If your using the 950 dialup and
not change S8 in the modem initialization string, this should be perfect for
you.
ASCII code for return- Defaults to "13". This is the ASCII code that the
keyboard will return whenever Return (Enter) is pressed.
Reset modem command- Defaults to "ATZ". This is the modem command to reset
all modem variables to thier initial values.
Also be sure to read the instructions within the program. Have Phun!
Great White

+23
View File
@@ -0,0 +1,23 @@

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-/ A New System Is About To Take The BBS Community By Storm.... \-
-\ A System Where The Sysop Doesn't Give a Fuck. /-
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ú úúúThe AfterMathúúú ¿
Ú úú System Operator : Paradigm úú ¿
Ú úú Zoom 14.4 V32.bis Data Modem úú ¿
À ú 2000 Megs Of Scsi2Fast Storage ú Ù
À ú Runnin A Very Custom Rg Board ú Ù
À úúúúú NO FILE RATIO BULLSHIT úúúúú Ù
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ú úúú The Following Is Supported úúú ¿
Ú Software For Testing Purposes Only ¿
Ú ú For Information Only Text úú ¿
À ú Concentrating Effort Toward ú Ù
À úúú Programming / Art / Sound úúú Ù
À úúúúATDT 12062226042úúúúú Ù
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

+45
View File
@@ -0,0 +1,45 @@
úúúANTARESúDVúINFORMATIONúFILEúúúLASTúREVISEDú07-10-94úúúDONEúBYúACCESS/ADVúúú
ÜÜܰ°±±²²Û
ÜÜþÜ Ü ßÛß ÜÜÛÛÛ°°°°°±±ÛÛÝ
ÜÜÛßß ÜßÜÜÜßß ÜÜ ßßßß
Þ±Û ÞÛß°ß°Û ÜÜÜÛÜ ÛÛ ÜßÜÜÜÛÛÛÛÛÜÜÛÛÜÜ۲߲ÛÜ
ÛÛ ÛÝ ±Ûß ²²²Þ²²²²²²Ü ²ß ß²²²Ü²²ß²²Ü ÞÛ±Ý ±ÛÝÜÝ ÞÝÞÛ þÞþÝ Þ±±±±±±±±±±Þ±Ý ܱ±±±±±Üß °°°ßܰß
ÞÝ ÛÝ Û°ß ÞÞÝ °°°°Þ°°Ý °°°ß °°Ý °°Ý ܰ°ß Þ°°Ý þßßÛÛÜÜ
ßÝ ÞÝÜÜÛßÞßÛ Þ°Ý ²²ß²² Þ²² ²² ܲÜÜßß²²² Þ²Ýß²²ß ²²²²ßÜÜ
ÜÛ ÞÝß Û°Û Üܱ±±ß±±±±±±± Þ±±ß Þ±±Ý ±±ß±±Ü Þ±±±±Ü±°Ü Þ°Ý °ÜÞßÝÛ±Û ß Þ²²ß²²²²²Ý °° ²²Ý²²²Þ²Ý ²²²ß²²²²ÜÜ ²±±ß Þ²²ßÞÝÜÞÛßß Û²²Ý ß²²²²° ß²²Þ²²²²²²Ü Þ²²Ý ß²²²²²²ß Þ²²Ý Û²Ý ÞßÝßßß Ü ßßß ßßß ßßß ßßß ßßß ßßßßß ßßßß ßßÛß ß²²Ü²²ß
ÛßÝúúúúúCodingúiSúAnúArtúúúúú
ÚÄúÄúúúÄúÄÄÄÄúúÄúÄÄÄúÄÄúÄÄúúÄúÄÄúÄÄúúÄúÄÄ¿ L ÚÄúÄúÄÄúÄÄúúÄúÄÄúÄÄúúÄúÄÄúÄÄúúÄ¿
³ oTHER PEoPLE WHo CLiM To BE NTRES ³ ú O ú ì WàNT To CoNTàCT US ¨ ì ³
ú MEMBER RE MiSiNFoRMED oR STUPiD ú E ú ³  WRiTî Tí  ú
³³ ú N ³ú
ú Access   OrGaNiZeR / CíDER   ú G ú úð Antares HQ ð³
ú  WHiTE TiGER   CíDER / iNTerNeT   ú ú L ³ ÷ RUE DU MiLLENiRE 3 ÷ ú
³ CoBR   WoRLD HQ SYSoP   ³ A ú ú÷ 7080.FRMERiES ÷³
ú  WonderBoy   MuSiCiAn  ú ú Y ³  BîLGiUM  ³
ú  CyberSurfer   nsiMakîr  ú L ³ þ Phone - +32-65-667040 þ ³
ÀÄÄúÄúúúÄÄÄúÄÄÄÄÄúÄÄÄÄúúúÄÄÄÄÄÄÄúÄúÄÄÄÄÄÄÙÀÄúúúÄÄÄúÄÄúÄÄúÄÄÄÄÄÄúÄÄÄÄÄÄÄúÄÙ
                  NúEúW MúEúMúBúEúRúS WúEúLúCúOúMúE !                   
            AúNúTúAúRúEúS DúiúSúTúRúiúBúUúTúiúOúN SúiúTúE            
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Bí’RD NME³ SYSoP(s)³ QULiFiCTioN ³ The MGiC NUMBZ ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
ÃúúULTiMATúBBSúúúúúúúúúúCoBRAúúúúúúúúúúúúANTARESúWorldúHQúúúú+32-2-375.56.51úú´
³< 2 NodeZ Soon > ³
ÃúúPointúBreakúúúúúúúúúúLordúCyrixúúúúúúúANTARESúEuroúHQúúúúú+32-11-43.69.25úú´
³< 9 NodeZ > ³
ÃúúViRTUALúACCESSúúúúúúúDViDú úBERTúúúúúúúWaLLoNiE HQúúúúúúú+32-69-45.51.77úú´
³< 2 NodeZ > ³
ÃúúMySTiCalúThiEveSúúúúúTemPestúúúúúúúúúúúúFlandreZ HQúúúúúúú+32-9-220.13.54úú´
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
ÃúúDentalúServiceúúúú³úúLiVinG NaTuReúú³úúúúúDiSTSiTEúúúúú³úú+32-50-36.33.96úú´
ÃúúCaRRieRúOfúBeLiEfú³úúDrúShintoúúúúúú³úúúúúDiSTSiTEúúúúú³úú+32-50-34.04.28úú´
ÃúúHawkMoonúúúúúúúúúú³úúRageúúúúúúúúúúú³úúúúúDiSTSiTEúúúúú³úú+32-59-51.57.32úú´
ÃúúDataComúIIúúúúúúúú³úúFàáúúúúúúúúúúúú³úúúúúDiSTSiTEúúúúú³úúúOúFúFúLúiúNúEúúú´
ÃúúSúTúiúLúLúúúúúúúúú³úúEúMúPúTúYúúúúúú³úúúúúDiSTSiTEúúúúú³úúúOúFúFúLúiúNúEúúú´
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    FúOúRúEúIúGúN DúIúSúTúSúIúTúE WúAúNúTúEúD   
ð Don't Forget Our Party ! - 29/31 October 94 - Mons (Belgium) ð
+71
View File
@@ -0,0 +1,71 @@
Anywhere Scroller
v1.00
OverView:
Anywhere scroller is a program that is another part to the
Intro Maker v3.0. This handy little utility, requires a .CRD coordinate
file for an external 256 color FONT picture. By using this program, you will
be allowed to draw with your keyboard or mouse, on the background picture
where and how you want the Scrolling text to appear. There are four parts
to this program.
The First part to this program, is the request for the .CRD file
which you have created, or one that has been provided with THG Intro Maker.
This will tell the program how big your font that you wish to scroll
actually is. The .CRD files can be created with the MEGAFONT.EXE program.
The Second part to the Anywhere Scroller is a feature that comes in
quite handy for tricky scrolling effects. After figuring how out big your
external font will be, the ANYWhere scroller will switch to 80x50 mode, and
display the number of pixels vertically. Here, the first pixel will be
a fixed point or reference point for the scroller. The next course of
action should be you using the keypad, or arrow keys to place each pixel
how you want it to scroll repectively to the first pixel. To switch
pixels, use the +/- keys. You can save these patterns in BWF files which
mean Brush Warping File. Use L and S to Load the Brush Warp File or Save
the Brush Warp File respectively. If you wish to move the 1st pixel so
you can move the pixels above or along side the first pixel, use the
I-J-K-M buttons to move the screen accordingly so you can have enough
room to move each pixel. Don't forget to save the BWF file if you wish
to re-use this pattern for another scroll. Press Q or ESC to exit
this part. It does not save this automatically, you must use the
Save command.
The Third part of the program, is a request for the background
picture support. Give the extension of your background picture according
to which graphics compression is used. It will decompact the picture and
display it throwing you into the next part of the program.
The heart of the Anywhere scroller is the next part. This will
show you a cursor that looks like you have entered according to the offsets
you have entered in the last second part of the program. Here, you may
either hit the Space Bar for PenUP/ PenDOWN toggle and the keypad for
moving the cursor around. Remember, when the Pen is DOWN, it is recording
where you are putting the pixels. That is the order they will show up in
when it goes to scroll it. You can also use the Mouse and Mouse buttons to
draw on the screen. Although, there is no mouse support when the keyboard
PenUP/PenDOWN key has been toggled, all you have to do is to place the
cursor where you want a slice of your scroll to go. Press the left mouse
button. The Right mouse button exits to the next part of the program, as
well does ESC, and Q. If you hold down the Left mouse button and move the
cursor, it will skip pixels. So go SLOWLY. THis is because the Mouse button
routine that was written is too fast for it. It would record several pixels
by just a quick press of the button. Also, the + and - keys change the
color of the cursor, and the backspace key undoes the previous slice.
The Final part to the program, is entering the Name of the .PTH
path file you wish to call it. This screen also tells you how many slices
of a scroller you have entered.
Keys:
+/- : Change Color
Q,ESC : Exit
Keypad : Move cursor
SpaceBar : PenUP/PenDOWN toggle
Back Space : Undo last Slice
Left Mouse Button : Place a slice at x,y
Right Mouse Button : Exit
Note:
I am not one for documentation. I don't think any of us are, but
this program is pretty easy to use.

+699
View File
@@ -0,0 +1,699 @@
ÉÍÍÍ» ÉÍÍÍÍÍÍÍ» (WS)
º º º º º º
ɼ È» º º º
º º º º ÌÍÍ
ÌÍÍÍÍ͹ ÉÍÍÍÍÍ» ÌÍÍËÍÍÍͼ º º ÉÍÍÍÍÍ»
ɼ È» º º º È» º º º º
º º º º º È» º º ÌÍÍÍÍͼ
º º º º º È» º º º
ÌÍÍÍÍͼ ÈÍÍÍÍÍ
º
º
º
*
Syntax Overview:
ApRite [parameters]
ApRun <command>
Accepted parameters:
ApRite /Install
Initiate or re-initiate application system
ApRite /Destroy
Delete/Remove the complete application system
ApRite /Masters [+|- <user>]
List/Define accepted application users
ApRite /SLaves [+|- <user>]
List/Define users that are accepted as slaves
ApRite /Admin [+|- <user>]
List/Define application system administrators
ApRite /Allow command <user>
Allow [user] access to specified command
ApRite /Remove <nr>
Remove application from application system
ApRite /SHow
Show status and list current allowed commands
ApRite /STatus [Masters|Slaves Pause|Cont]
Show or change application system status
ApRite /?
Display syntax overview
*
ApRite / ApRun : Application System - Description
Purpose:
Grant rights to applications: Run applications with NetWare
rights that differ from the rights of the person calling the
application.
The complete system is based on NetWare security.
Features:
- Allow users to change user ID while 3rd party applications
are run.
- Multiple security levels based on NetWare security.
- Management tool to administer and view the ApRite security.
- Built-in self test for virus infection.
Author:
Wolfgang Schreiber (all rights reserved)
Components:
ApRite.EXE Administration tool
ApRite.DOC Documentation
ApRun.EXE Launch applications
*
Quick Start:
Within 5 minutes you can get a quick impression of the
capabilities of ApRun:
1) Initiate ApRun:
"ApRite /Install"
2) Give a second user (e.g. GUEST) the right to run
SYSCON in your name:
"ApRite /Allow SYSCON GUEST"
3) Login as GUEST and run SYSCON (with/without ApRun):
"ApRun SYSCON"
If you want to remove GUEST's privileges you have two choices:
4a) Login as Supervisor and revoke the privileges:
"ApRite /Remove <nr>" [Insert appr allowance nr]
4b) Remove GUEST from the list of accepted masters:
"ApRite /Master - GUEST"
*
License:
The publisher has thoroughly developed and tested the functions
of ApRun/ApRite but cannot take any liability for adverse
effects or damage that might be caused by software
malfunctions, erroneous or incomplete documentation.
Orders can be sent directly to the publisher.
International distributors wanted.
Retail price: US $199 for first file server,
US $ 30 for additional server licenses
*
Demo Version
The 3 files APRITE.EXE, APRUN.EXE, and APRITE.DOC may
freely be copied to other file servers. But since ApRite
is a commercial application, unlicensed users may only
have a 60 days testing period.
Within this period users can test all features of ApRite
on any number of file servers.
About 60 days after its installation on a server it will
disable itself. When the demo time is over, only the
options "ApRite /?" and "ApRite /Destroy" will remain
active.
Warning: if the demo version detects a file server date
change it might disable itself immediately.
*
Publisher:
Dr. Wolfgang Schreiber
Schanzenstr. 74
4000 Dusseldorf (Germany)
Fax: (xx49) - 211 - 55 64 69
Any comments, suggestions, or error reports are welcome.
Users who detect bugs and document those bugs to the
publisher will be the first to receive the next release of
the application.
Written in Borland's TurboPascal v6.0
*
Concepts:
ApRite is using a concept called 'Application System' and its
implementation in based on the NetWare concept of a 'Job
Server'.
ApRite uses the terms 'Application System', 'MASTER', 'SLAVE',
'ADMINISTRATOR', 'COMMAND', and 'OPTIONS'. Usage of those terms
must be explained shortly.
Application System: The term 'application system' is used to
describe the complete environment supplied by ApRite and ApRun
to support rights granted to applications.
The application system must be initialized by the Supervisor or
an equivalent before users can access it.
To explain the other concepts we will refer to some command
lines as examples (assumed that U_M and U_S are valid user
names):
1) "ApRite /Allow SYSCON U_M" issued by U_S (Slave)
2) "ApRite /Allow FILER" issued by U_S (Slave)
3) "ApRun SYSCON" issued by U_M (Master)
SLAVE: A slave is a NetWare user who grants his/her NetWare
rights to a master, whenever the master will call a specified
program.
A slave must have been admitted to the application system
by the SUPERVISOR ("ApRite /SLaves ...").
The slave must have specified the commands (and its
accepted masters) that can be run in his/her name, before
any master can run an application in the name of a slave,
("ApRite /Allow ").
In the example given above the user U_S gives the user U_M
the right to call SYSCON (command 1) - this means that U_M
will get the rights of U_S while running SYSCON.
Then U_S allows every legitimate application system master
to run FILER with the rights of U_S (command 2).
MASTER: A master is a NetWare user who is logged in to a
NetWare file server and wants to run an application with
different rights than those that he usually has.
Masters must have been admitted to the application system by
the SUPERVISOR ("ApRite /Masters ...").
A master can issue a program call with the rights of a 'slave'
if the slave has allowed (this master) to run an application in
his/her name.
COMMAND/OPTIONS: A standard DOS command line usually
contains the (path and) name of an executable command with
or without additional options/parameters).
The term 'Command' in this script includes all characters up to
the first blank in the command line. It consists of an optional
valid DOS path followed by a file name and it may include the
extension of the application.
The term 'Options' refers to everything that follows the first
blank in the normal DOS call.
ADMINISTRATOR: An application system administrator can
view and change the status of the application system. The
administrator can see all allowed applications, can remove
specific applications from the system, can halt or restart
the system.
By default only the person who installs the application
system is created as system administrator.
New administrators can be defined by the supervisor
("ApRite /Admin ...").
*
Installation and Usage:
- Read the READ.ME file from the installation disk for
information about the first steps;
- Copy all files from the installation disk to a NetWork
directory;
- Setup the system by calling "ApRite /Install"
- Define legitimate slaves with "ApRite /Slaves ..."
(Users who give their rights to applications)
- Define legitimate masters with "ApRite /Masters ..."
(Users who receive new rights in applications)
- A legitimate slave grants application rights with
"ApRite /Allow ..."
- Legitimate masters now can call "ApRun" to start the
admitted applications.
*
Security:
The application system includes several layers of protection to
ensure that only accepted users get access to the system:
- only a Supervisor (or eqivalent) can initiate the system;
- only specified users can get access to the system; they must
have been admitted to the system as 'slaves' or 'masters' by
the supervisor;
- the user ('slave') who gives his rights to other users
('masters') must actively allow those users access to
specified applications;
- only the specified applications can be called; use of these
applications can be restricted to specified persons;
- the master can call the selected applications only if those
applications have not been changed since access was granted;
- the supervisor or administrator can monitor and change the
current status of the application system.
- the supervisor or an assigned 'administrator' can remove
specified applications from the system;
- The automatic self test for virus infection will display a
warning if ApRite.EXE is infected by a virus.
*
Multi-Server Environments
The application system is always file server specific: ApRite
will define how rights may be changed on the current server.
ApRun will change the rights only for the current server.
The current file server is defined by your current default
drive letter. ApRun will always modify rights on a single
server: the server of your default drive.
*
Syntax: ApRite [/parameter]
All options of ApRite can be abbreviated as long as those
shortcuts are unique: "ApRite /I" or "ApRite /SH" are valid
shortcuts.
This overview presents optional parameters within square
brackets "[xxx]", user supplied names (e.g. user names or
commands) in angle brackets "<xxx>". Upper vs. lower case
letters do not make any difference.
*
ApRite /?
Display syntax overview
This command give an overview over the features and available
parameters of ApRite.EXE with basic explanations of their effects.
Example: ApRite /?
*
ApRite /Install
Initiate or Re-Initiate application system
Before using any of the following ApRite parameters the
application system has to be established.
The installation procedure will only take about a second and
will initiate security and all relevant variables.
None of the ApRite/ApRun application parts stays resident in a
workstation's RAM. The application system uses similar bindery
security as NetWare itself; it will store security information
in the NetWare bindery.
WARNING: If "ApRite /Install" is issued a second time, it will
completely reset the application system: all masters, slaves,
administrators, or information about accepted applications will
be removed.
You will be asked for confirmation if the application system is
already installed.
This option is for supervisors only.
Example: ApRite /Inst
*
ApRite /Destroy
Delete/Remove the complete application system
This option can be used to completely remove the application
system structure from your file server.
The only way to recover from the effects of "/Destroy" is to
restore the file server from a previous backup.
This option is for supervisors only.
Example: ApRite /Dest
*
ApRite /Masters [+|- <user|group>]
List/Define accepted application users
See the discussion of the master-slave concept above. Masters
are NetWare users that are allowed to take the identity and
rights of a 'slave' while a program is executed. Only the users
admitted to the application system as masters are allowed to
run applications with the temporary ID of a slave.
Before a slave can specify a user as master (that means before
he/she can allow a master to run the application in the slave's
name) the supervisor must have admitted both slave and master to
the application system. This is done with "ApRite /Slaves ..."
and "ApRite /Masters ..."
Specifying '+' will add new masters, '-' will remove existing
masters.
Users and groups can be accepted as masters. If a group is
specified, ApRite will add or remove each group member
individually: the call "ApRite /Masters - everyone" will
remove all masters.
A slave with supervisor rights can implicitly add masters with
the "/Allow" option (see there). This feature applies to
supervisors only.
Example: ApRite /Master + guest
ApRite /Master - everyone
ApRite /Ma + guest
*
ApRite /SLaves [+|- <user|group>]
List/Define users that are accepted as slaves
See the discussion of the master-slave concept above. Slaves
are NetWare users whose rights are granted to a master while
a program is executed.
Only the users admitted to the application system as slaves
are allowed to transfer their rights to a application user
(master).
Before any slave can allow an application to be run in the
slave's name, the supervisor must have admitted the user as
slave to the application system. This is done with "ApRite
/SLaves ..."
Specifying '+' will add new slaves, '-' will remove existing
slaves.
Users and groups can be accepted as slaves.
This option is for supervisors only.
Example: ApRite /Slave + guest
ApRite /Slave - guest
ApRite /SL + everyone
*
ApRite /ADmin [+|- <user|group>]
List/Define application system administrators
An administrator can monitor the status of the application
system, view the list of accepted slaves, masters, and
applications, and remove specific applications from the system.
The administrator is comparable to a queue operator in the
printing environment.
Specifying '+' will add new administrators, '-' will remove
existing administrators.
Users and groups can be accepted as slaves.
This option is for supervisors only.
Example: ApRite /Admin + guest
*
ApRite /ALlow [command [<user>]]
Allow [user] access to specified command
The option "/Allow" enables a slave to specify, what command is
allowed to be executed in his/her name. This option adds the
new command to the list of accepted commands. An accepted
master is thereby enabled to run this command in the name of
the slave.
The command must contain at least a valid filename; it may
include an optional drive/path specification and/or
extension. ApRite searches for the specified command file to
add it to its list, so the application must be in the default
drive or in one of the search drives, if no path is specified.
The specified command can be located on a local drive or second
file server, but the rights change will always affect only the
current default server (i.e.: the server where the default
drive is located).
If the application (and optional master) is accepted by the
system, it will display the new list of accepted applications.
Each registered application automatically receives a unique
application ID. This ID can be used to remove specific
applications from the system (if desired).
All valid file names will be accepted, but only COM, EXE, and
BAT files give sense.
To use the parameter "/ALLOW" the user must be in the list of
accepted slaves, and he/she needs search/file scan rights in
the directory of the specified command.
If no user is specified after the command, the application can
be started by any accepted master. If the specified user is
unknown or not accepted as master the command will not execute.
If a supervisor equivalent specifies a user who is not a
registered master yet, the system will automatically add the
user to the master list.
If "ApRite /ALlow" is not followed by a command, it will list
the current accepted applications entered by the user.
Only users - no groups - can be accepted as masters.
This option is for supervisors and accepted slaves only.
Example: ApRite /Allow syscon
ApRite /Allow syscon.exe guest
ApRite /Al k:\sub\this.bat guest
*
ApRite /Remove <nr>
Remove application from application system
Every entry in the list of accepted applications can be
identified by its entry ID. The IDs are constants and are
assigned by NetWare.
Applications can be removed from the system list by a system
administrator or by the slave who added the entry to the list.
This option is for supervisors and administrators only.
Example: ApRite /Remove 473
*
ApRite /STatus [Masters|Slaves Pause|Continue]
Show or change application system status
Comprehensive system status information is displayed.
In addition to the status display a supervisor or administrator
can change its status.
You can determine if slaves may add new jobs to the application
system, or if masters may access the application system to
acquire the slaves' rights.
'ApRite /Status Masters Pause' will de-activate the application
system without destroying any of the stored information:
Currently active ApRun applications can be continued, but no
master can start new ApRun commands. 'Continue' will
re-activate the application system.
'ApRite /Status Slaves Pause' will prevent slaves to add new
applications to the application system. Masters still can access
the system to acquire the slaves' rights. All exixting information
will be kept.
Examples: ApRite /Status
ApRite /St Masters pause
ApRite /St Slaves Cont
*
ApRite /SHow
Show status and list current accepted applications
'/SHow' will not only display the short status report, but
additionally list the current accepted slaves, masters,
administrators, and applications.
This option is for supervisors and administrators only.
Example: ApRite /Show
*
ApRun <command> [parameter list]
Run applications with another identity
If an accepted master wants to start an accepted application in
the name of a slave, the command must be launched by ApRun.
Without ApRun the application would run with the default rights
of the program caller.
The command can be followed by the parameters as required by
the launched application's syntax. Use the normal command
syntax, and simply add 'ApRun' at the beginning of the command
line.
Masters who want to launch applications need Search/File Scan
rights in the application directory. If the command is not to
be found in one of the master's search drives, it must include
a drive/path specification.
ApRun.EXE will use approximately 25 Kb of the workstation RAM
while the launched application is running. It therefore limits
the RAM available to that application. Since ApRun is not a TSR
program it will not stay in the workstation memory except
during the execution of the launched program.
This option is for accepted masters only.
Example: ApRun SYSCON
ApRun NCOPY Z:*.* k: /sub
ApRun C:\this.bat par1 par2
*
Limitations:
Due to NetWare limitations and ApRun's implementation there are
several aspects administrators should keep in mind.
- Number of application configurations: The list of accepted
application/rights configurations may include up to 250
entries.
- Number of slaves running ApRun simultaneously on one file
server: 250
- Memory: since ApRun.EXE has to stay in memory while it
changes the rights of a master to the rights of the slaves,
and since it has to stay active until the original rights
are restored, there is only a restricted area of RAM
available to slave applications.
Generally ApRun.EXE takes about 25 kB of RAM during the
execution of slave applications. The RAM available to
applications will be higher if those are COM or EXE files,
a little less with BAT files (since ApRun uses COMMAND.COM
to run batch jobs).
If memory is a problem, you might consider to use 3rd party
memory manager (like HIMEM, EMM386, or QEMM386) to load some
drivers and TSRs to high memory areas. DOS v4.x will usually
leave less memory to applications than DOS v3.x or v5.x.
- Multitasking: if ApRun were used in a multitasking
environment, ALL tasks would change to the slave's
identity as long as one task runs an application with
ApRun. Similar considerations apply to task switching
environments like DR-DOS v6.x or MS-DOS v5.x.
To avoid bypassing of NetWare security, ApRun will not run
under Windows or in other multitasking environments.
- TSR programs: The complete station of the master will
receive the rights and identity of the slave during program
execution. Obviously this will affect TSRs that have been
loaded previously, too. Therefore TSRs might in some cases
represent a breach in security since they receive the same
rights as the legitimate application.
In most situations this will not be a problem.
- Application Updates / Program changes: If a slave allows
access to an application ApRun tries to ensure that this
program is run without any changes. Future masters can run
the accepted application only in its current form (for
security reasons). Any changes to the program will prevent
masters from being able to start that application. The slave
has to re-allow access whenever an application is modified.
- NetWare bugs: Due to a NetWare bug few NetWare commands
(e.g. SETPASS) will not execute with the ID of the
SLAVE but with the ID of the MASTER. This will only
affect commands that use a specific NetWare API
(GetConnectionInformation). Most commands however will
work as expected and run with the ID of the SLAVE.
Novell is aware of this bug in NetWare v3.11 - and
hopefully fix it in a future NetWare version.
Due to the above mentioned limitations the following
suggestions are strongly recommended:
- Create special users who only have the rights to run one
application. The trustee rights of those users might include
only a single directory. Accept only those user names as
slaves.
Take into account that background applications (TSRs)
receive the slave's rights, too.
- Specify the name of the acceptable master in the 'Allow'
command whenever possible. This is especially recommended
if the slave has supervisor rights.
*
Troubleshooting
General Problems
Problem: An application is not executed though it has
been installed with 'ApRite /Allow ...'
Possible Causes: - The user does not have a search path to the
application or does not have sufficient rights
(File Scan/Search rights may be enough).
Solution: Check the user's path and rights.
Problem: A virus warning is displayed.
Possible Causes: - ApRite has a built in virus self-test. A virus
might have infected your system.
- You have different versions of ApRite on your
system.
Solution: Run a virus scan utility immediately.
*
Error messages
Message: 'Application list full'
Possible Causes: The application system can save up to 250
applications. You exceeded this limit.
Solution: Delete some unneeded applications from the list
with 'ApRite /Remove'.
Message: 'Application System not yet initialized'
Possible Causes: ApRite is not yet installed on this server
Solution: Install ApRite. Make sure that you have one
license per file server.
Message: 'ApRite-Demoversion. Valid only .. days'
Possible Causes: - You do not have a full version of ApRite but a
limited demo version on this server. The time
limit has expired.
Solution: Purchase a full license.
Possible Causes: - On a multi-server system you try to run ApRite
on another server than the one that you
installed ApRite on. You may use ApRite for the
demo period but have to purchase a license for
every server that you permanently want to install
ApRite on.
Solution: Purchase a full license.
Message: 'Could not access Application System'
Possible Causes: ApRite is not yet installed on this server
Solution: Install ApRite. Make sure that you have one
license per file server.
Message: 'Demonstration time for ApRite on ... expired.'
Possible Causes: You do not have a full version of ApRite but a
limited demo version on this server. The time
limit has expired.
Solution: Purchase a full license.
Message: '<username> is no accepted MASTER'
Possible Causes: You tried to run ApRun but your are not accepted
as application master.
Solution: Ask the supervisor to install you as ApRun
master ('ApRite /Master ...').
Message: 'Multitasking active'
Possible Causes: You tried to run ApRun in an multitasking
environment (e.g. Windows, DesqView, Task
Switcher). Due to security considerations this
is not accepted.
Solution: Start ApRun in a single task environment.
Message: 'Only a Supervisor can call this function !'
Possible Causes: Some functions of ApRite are reserved for
Supervisors and equivalents.
Solution: Login as supervisor and retry.
Message: 'Wildcards not acceptable'
Possible Causes: You tried to run 'ApRite /Allow' with wildcards.
Solution: Use only one application per command.

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+281
View File
@@ -0,0 +1,281 @@
ASTROCLK Astronomical Clock and Celestial Tracking Program Page 1
Program Revision History
ASTROCLK REVISION HISTORY
Each released version of ASTROCLK uses a four digit
revision code such as 8805. The first two digits indicate the
year and the second two digits indicate the week of the year. In
some cases, an additional letter suffix is added to distinguish
changes occuring within the same week. A partial week at the
beginning or end of the year is counted as a full week. Using
this method, a year will typically have 53 weeks although it is
possible to have 54 weeks in a leap year (1972 is an example).
The current year-week revision code is shown on the Julian Date
display, Display Mode 7, in ASTROCLK.
This file records the recent revision history of program
ASTROCLK through all of the minor twists and turns that usually
accompany the evolution of such a program. (Early revision notes
have been deleted from this file but are available on request.)
It illustrates the tortuous process of maintaining and refining a
program as ideas and problems are reported from every quarter. It
may also be helpful to users who are upgrading from one version
to another to find out what has changed.
David H. Ransom, Jr.
8947 11/19/89
-----------------
-Improved Apparent Geocentric Equatorial Coordinates for internal
database stars and catalog stars, mean to apparent position, to
include effects of nutation and annual aberration. Parallax NOT
included. Apparent coordinates are now accurate to within one
second/arc-second.
-Added navigation function F5 to show first 20 USNO stars in view
and suitable for star sights. Uses current coordinates and time.
-Revised external star catalog logic. Search times halved and
direct access by catalog number is now immediate.
-Expanded external star catalog searches F5+F4 and F5+F5 to show
list of 10 stars nearest the coordinates input.
-Repaired SUB Refract to give correct answer when converting
apparent to real altitudes and adjusted the navigation example
data accordingly. Real to apparent was OK.
-Fixed horizon dip calculation (misplaced decimal point in a
constant).
-Added SHIFT-F6 for entry of DESTINATION data using external city
file and updated HELP.
-Added '/' prefix to F6 and SHIFT-F6 city name input to allow
match within name.
-Improved degree input routine for small negative angles; now
processes both "-0,26" and "0,-26" correctly. A minus sign
anywhere flags a negative angle.
-Fixed "Division by Zero" error in navigation mode when speed was
set to zero.
-Corrected Planetary Heliocentric Longitude to remove multiples
of 360 degrees.
-Corrected USNO coordinates per AA 1989.
ASTROCLK Astronomical Clock and Celestial Tracking Program Page 2
Program Revision History
-Corrected paging problem with ephemeris if more than 40
intervals requested.
-ASTROCLK.INI now always written on exit.
-Reformatted these notes to use a little less paper ...
8943 10/25/89
-----------------
NOTE: Program operation with Navigation DISABLED is essentially
unchanged from previous versions. See also the notes which follow
and the program documentation.
-MAJOR UPGRADE: F10 is now NAVIGATION. May be used to predict
current position by DEAD RECKONING and by SIGHT REDUCTION of USNO
Standard Navigation Stars. Added new NAVIGATION section in
documentation with discussion and instructions.
-Added ASTROCLK Errors 60 thru 62 if a Navigation function is
requested and Naviga-tion mode has not been set up with F10.
-Added ALT-F6 to set LOCAL CONDITIONS of Elevation, Temperature
and Pressure. Affects apparent ALTITUDE of target object and
adjusts for horizon dip with elevation. Elevation is saved but
temperature and pressure are initialized to 20C (68F) and 1010mb
(29.83") respectively upon startup.
-Corrected calculation of Greenwich Hour Angle [GHA] on Target
Tracking Display per Nautical Almanac 1989. (How did that slip by
for so long?)
-Fixed minor error in SUB ZoneName so that Local STANDARD Time is
displayed correctly in Dual Time displays for modes 2 thru 5.
Clarified text in DUAL TIME section.
-ALT-F5 now sets POLARIS as target, moved from F10. [ALT-F10 is
unchanged.]
-Added designation [Ho] for Apparent or Observed Altitude on
Target Tracking Display.
-Improved accuracy of SUB AngleDiff for very small angles.
-Extensive reorganization and cleanup to add NAVIGATION mode and
to relieve memory constraints with QB4 compiler.
-Deleted revision notes for versions 8905 and earlier. Available
on request.
8935 8/30/89
-----------------
-Changed F2 to display an EPHEMERIS of the current target object.
User sets interval and number of intervals with F2. Use the
"PrtSc" key to print. Added by popular request!
-Added manual entry menu of orbital para-meters for planetary
objects using "Z" command on planet selection menu ("P" command).
-Added Day-of-Year (current year, JAN 1 = 1) to F3 date input.
Any time input is ignored. Allowed DOY formats are (quantities in
[] are optional):
Dnnn[.nnnn]
Dnnn:hh[.hhhh]
Dnnn:hh:mm.mm[.mm]
Dnnn:hh:mm:ss[.ss]
Times are UT. The comma is also allowed as the separator.
-Changed date input using F3 to allow JD with no letter prefix.
Eliminated QB4 error in this case.
-Removed on screen HELP from ASTROCLK code and added program
ASTROCLK Astronomical Clock and Celestial Tracking Program Page 3
Program Revision History
ASTROHLP. Operation of help using Function Key F1 is unchanged.
Saved about 10K of RAM compared to V8931, all but about 3K of
which was consumed by new features. Also corrected/updated the
help screens. Modified in response to user requests to reduce RAM
requirements!
-Added SHIFT-F9 to execute a preset DOS command or batch file.
Use ALT-F10, SETTING PROGRAM OPTIONS, to set the command. The DOS
command is saved in file ASTROCLK.INI. Default is no action.
-Modified Interval Timer displays to include negative days. Range
is now -999 to +9999 days on small window, -99 to +999 days on
main window.
-Clarified text for Alarm & Interval Timer.
-Removed ESC key "cancel" codes except during external file
searches and to quit ASTROCLK; RETURN is usually used where ESC
was used before. F8 PRECESSION now requires "Y" or "y" to proceed
and RETURN to cancel. Changed per user requests!
-Extensive minor editing and corrections to the documentation,
principally related to the new features and changes in this
version.
8931 8/04/89
-----------------
-Added most likely chart numbers for Sky Atlas 2000.0 and
Uranometria 2000.0 on Target Tracking display, Display Mode 0.
-Corrected Interval Timer problem: if timer is non-zero and a
date >32,767 days different from the timer start date was entered
with F3, ASTROCLK aborted with QuickBASIC Error 6, OVERFLOW.
Another oops!
-Added automatic conversion to JD for numeric dates greater than
50 entered without a prefix when using F3. Prior versions would
sometimes abort in this situation.
8930 7/23/89
-----------------
-In response to numerous requests, the exit from HELP has been
changed from ESC to the SPACE BAR. Other ESC functions unchanged.
-Minor corrections and updates to the text sections DATES AND THE
GREGORIAN CALENDAR and WHAT TIME IS IT? Data corrected to agree
with the ASTRONOMICAL ALMANAC 1989 (vs. AA 1988).
8926 6/30/89
-----------------
-Assigned estimated angular size and standard visual magnitude to
Halley's Comet to match data reported by Lowell Observatory in
September, 1985; both were 0 -- oops! Will someone please check
this in 2062? Reported by Steve Brewster, Stony Ridge
Observatory.
-Changed minor planet magnitudes from H (visual) to B (blue
photographic) per Steve Brewster.
-Corrected interval timer error if .INI file not present. Timer
showed incorrect day value until reset with Z command.
-Corrected color errors on main clock window (linked to timer
on/off!) and on large digit Horison Coordinates, Mode 0 Target
Tracking Display.
ASTROCLK Astronomical Clock and Celestial Tracking Program Page 4
Program Revision History
8924 6/11/89
-----------------
-Added large digit display for horizon coordinates in Display
Mode 0. Top line is APPARENT ALTITUDE and bottom line AZIMUTH.
While in Display Mode 0, press "0" to toggle between normal
(text) and large digits.
-Added /R and /G command line options to force RED or GREEN color
modes, per request.
-Corrected very minor rounding errors in function PrintDeg.
-Redesigned Interval Timer logic to try to get it right ...
finally! Now uses a "local Julian day" to correct bugs in timer
value upon restart. (V8916 interval timer acted erratically on
startup; an unusually sloppy bit of work, even for me.)
-Interval Timer may now be set using SHIFT-F3 and suffixing the
time entered with T.
-Interval Timer capacity increased from 99 to 999 days.
-Alarm display logic corrected so that correct alarm countdown
time is displayed with clocks off or during simulation.
-Documentation revised to caution users of DOS 3.3+ that DATE and
TIME commands may set BOTH the hardware and software clocks.
8916 4/20/89
-----------------
-Modified Interval Timer to save values and resume if active when
program halted.
-Repaired bug with "On The Hour" beep that disrupted the screen
when coincident with an alarm time.
8915 4/12/89
-----------------
-Added compatibility with USNO Interactive Computer Ephemeris
(ICE). New ICE Flag, set using ALT-F10, selects ICE, FA or none.
Flag is saved in ASTROCLK.INI.
-Reassigned function keys F4-F6 for SETTING PROGRAM OPTIONS, ALT-
F10.
-Revised errors for ICE/FA: deleted errors 20 and 21; added
errors 50 thru 54.
-Changed negative Local and UTC Dates to BLINK in all monochrome
modes.
8914 4/02/89
-----------------
-Planet name omitted or was incorrect in Display Modes 0 and 9
under certain circum-stances. Thanks to Bob Krohn for reporting
this bug.
-Cleaned up interval timer code to eliminate occasional failure
to increment then skip one second.
8911 3/14/89
-----------------
-Rearranged items on Precision Data Displays #1 and #2 to group
all solar data on #2.
8910 3/05/89
-----------------
ASTROCLK Astronomical Clock and Celestial Tracking Program Page 5
Program Revision History
-Added SUN Geocentric Rectangular Equatorial Coordinates (X, Y,
Z) to new Precision Data Display #3. The coordinates are
displayed for the current date and for the current standard epoch
as set by F8.
-Moved all SUN and MOON orbital calculations from SUB Precess to
new SUB SunMoon. Modified SHARED COMMON to store sun/moon
variables.
-Added Perihelion Distance and Perihelion Date to orbital data
for Minor Planets in Display Mode 9.
-Corrected leap year error for minus years which allowed Feb 29
in wrong year and disallowed Feb 29 in correct year. Thanks again
to Ward Harman [WH].
-Corrected SUN Mean Longitude. An adjustment was applied to the
MEAN long which should have been applied to the TRUE long. [WH]
-Added explicit QuickBASIC error text messages rather than just
numbers.
-Removed history for versions 8845 and back.
8908 2/22/89
-----------------
-MAJOR UPGRADE: Added Minor Planet processing and external Minor
Planet Catalog. NOTE: The minor planet logic and calculations
have not been extensively tested. User feedback is most welcome!
-Default catalog is ASTROCLK.MPC which contains the first 250
minor planets, and was prepared using Program MPCAT, also
available on the BBS at (213) 541-7299 or by mail. The full minor
planet catalog (ELEM891.MPC) with 3,774 entries is also
available.
-Changed PLANET SELECT logic so that RETURN is not needed, only
planet number or the first letter(s) of the planet name. Added
"X" to select minor planets and "H" to select Comet Halley
(internal data added).
-Reorganized the source for SUB and PROCEDURE code into three
files: ASTROSB1.BAS through ASTROSB3.BAS.
-Repaired minor bug in path so that "\" is not expected when path
is reset to blank.
-Extensive documentation additions primarily related to minor
planets.
---------------------------------------------------------------
8806 thru 8905 NOTE: Intermediate revision notes have been
deleted here to save file space.
---------------------------------------------------------------
8805 1/24/88 -Initial Release

+117
View File
@@ -0,0 +1,117 @@
=========================================================
Documentation for [ A U T O - H A C K ] version 1.0
=========================================================
Written by: Grimalkin, 08/12/86
NOTICE: This program was written to further the education of the IBM PC
computer users out there, and was not intended to be used in any
method other than educationally. Any uses other than learning about
Hayes compatible modems are the responsibility of the end user.
AutoHack version 1.0
Copyright [C] 1986 by Grimalkin
Program thanks to: Spam Master
First, a general overview of AutoHack. It contains two basic programs in
one. A Scanner, which will scan through a set range of numbers and check for
carriers, and a Hacker, which will "hack" through codes on a given Long
Distance service, such as MCI, Sprint, Metrophone, or Allnet.
=================
Hacking Section
=================
The hacking section options consist of two subchoices, Begin, and Reconfigure.
We will start with Reconfigure.
Reconfigure allows you to change virtually every parameter in AutoHack Hacking
Section. Here is a brief explaination of all of them.
COM port.............The COM port that your modem is in. Can only be 1 or 2
Hack port............The telephone number of the Long Distance service you wish
to hack on.
Start code...........The code to start hacking with.
Increment............Allows you to set it to add a certain number to the code
to try each time. If 0 is selected, it will be a totally
random code, and if 99 is selected it will increment the
code with a random number between 1 and 10.
Time.................The number of minutes you want the hacker to run
Opening delay........The number of seconds you want to wait after the Hack
port is dialed, before the code/number is dialed.
Wait carrier delay...The number of seconds you want to wait for a carrier after
the dialing process begins (includes dialing time)
Length of code.......The number of digits in the code
Number of carrier....A telephone number to try that ALWAYS gives a carrier.
It is a good idea to use one out of your own free-calling
area
When you have reconfigured it to your needs, hit [Q] [RETURN] to quit. This
will save the configuration so you will not need to reconfigure again the next
time you run AutoHack.
Now, you select "Begin Hacking" from the Hacking menu, and the process will
begin. If you wish to stop the hacker completely, hit [X]. If you wish to
hide the screen, press [H]. Hiding the screen will put a fake screen over top
with the words " The Genius Compiler " on the screen, and false compiling
messages on the screen. When the hack is finished, if the screen is still
hidded, it will display some status. The status "Error:" is the number of
working codes you have gotten. Pressing any key will return to the main
Hack menu.
If you are in "Hide" mode, [H] will return you to the normal screen, and [X]
will still quit.
==================
Scanning section
==================
The Scanner also has a reconfigure screen. These are the options it has:
LD Prefix.......The Long Distance prefix to dial before dialing the number to
check for carrier. This allows you to Scan a long distance
area with MCI, Sprint, Metro, or another service, rather than
paying with AT & T. To Scan numbers within your free-calling
area, type [/] at the prompt to change it and it will become
blank.
Area code.......This is the area code of the numbers to be Scanned. If the
LD Prefix is blank, however, this is ignored.
Prefix..........This is the three digit prefix to the numbers to be Scanned.
Start number....This is the first of the four digit numbers to be scanned.
(xxx/xxx-nnnn <- nnnn represents the start number)
End number......This is the last number to be Scanned (see Start number)
Delay...........This is the number of seconds to wait for a carrier at a given
Scanned number.
When you are finished, press [Q] [RETURN]. Notice that these options, too,
are saved so they do not need to be configured each time.
When you begin, it will scan the numbers you have specified. You may press [X]
to abort. Since this is not an illegal activity, I have found no reason to
put the Hide Screen option in this section.
=====================
Reading the results
=====================
When a Hack or a Scan is finished, the results will be in a file on the disk
called "Codes.Dat" (for the Hacker) or "Scanner.Dat" (for the Scanner). These
files may then be printed out or just "Typed" on the screen from DOS.
NOTE: Be sure to print these files, or rename them, before beginning another
Hack or Scan, otherwise they will be overwritten.. I.E.. Poof!
===========
That's it
===========
That's it.. the end of the docs for AutoHack. If you would like to get in
contact with either me or Spam Master concerning this program or future
versions, contact me on the Apple boards listed in the Credits section, or
contact Spam Master on the IBM boards.

+366
View File
@@ -0,0 +1,366 @@
+---------------------------------------------------------+---------------+
| #### ## ## ###### #### #### #### #### ## ## | Version 0.1 |
| ## ## ## ## ## ## ## ## ## ## ## ## ### ## | (C) 1993 by |
| ###### ## ## ## ## ## #### ## ###### ## ### | No Means No |
| ## ## ## ## ## ## ## ## ## ## ## ## ## ## |PRIVATE RELEASE|
| ## ## #### ## #### #### #### ## ## ## ## | VERSION! |
+---------------------------------------------------------+---------------+
| The constitution of the declaration of Autoscan: |
| As far as I know, this is the only scanner of its type, otherwise I |
| wouldn't have done it. I couldn't get some of the other scanners to |
| work with this modem, So I proceeded to write this scanner, my first |
| IBM program. It was completed in 2 weeks. |
| (Would have been sooner if I dodn't have trouble finding COM PORT info) |
| Autoscan (All versions!): (c)opywronged 1993 - All rights reversed |
| If you have any comments, questions or suggestions on this software |
| then get in touch with me and definatly let me know whats on your mind! |
| No Means No - nmn@mindvox.phantom.com |
+-------------------------------------------------------------------------+
| The glorius history of Autoscan (Carefully examined, sensitive subjects |
| censored or omitted by The American Board of Moral Majority. Members |
| include the PTL cosmetic section, the 700 club telephone operators, |
| Robert Tilton, and anyone who owns a christian television station.) |
| |
| Autoscan Version -1 -- Released to select individuals for betatesting |
| and then asked that it be annihilated, so there should be no existing |
| copies out there. Thanks to Captain Trips for betatesting this version.|
| |
| Autoscan Version 0.0 -- Released 2/1993, this was a private release |
| version that was given out upon request to be distributed on a personal |
| basis. |
| |
| Autoscan Version 0.1 (This version) -- Most bugs were fixed, there are |
| still a few left to be fixed, however, you will have to wait until the |
| next version. The documentation for this version remains for the most |
| part the same as the documentation for 0.0, except for minor corrections|
| where needed to make an update for this version. This is still in the |
| testing stages, and it is still a private release version. Notable |
| features added: Blacklist file, List of pre-configured modems. This |
| version comes with the "TL2AS.EXE" utility, which converts Toneloc .DAT |
| datafiles to Autoscan .XCH exchange files. This version of TL2AS only |
| converts toneloc's 10012 byte .DAT files. Thanks to Rebel Lion for |
| betatesting Autoscan Version 0.1. This version of Autoscan was released|
| on 3/1993. |
+-------------------------------------------------------------------------+
Generic Disclaimer: I No Means No, the programmer of Autoscan, nor any
friend of the programmer, their sexual partners, their parents, their pets,
or their computers, can NOT be held responsible for the use, abuse, or
misuse of systems found with this program when used by any government
employees or their associates, of any given country. However, we claim full
responsibility for the abuse of autoscan by normal citizens. Just kidding,
of course. I can not be held responsible for any misuse of this program, or
systems found with it, so that is that. Read on.
About Autoscan: Well, this program is self explanatory. However I will
try to explain things as best as I can without getting too bored. This
program took a total of about 2 weeks to complete, it was written in C and
all routines are of my own coding, except the com port routines, which were
some public domain library which I will take time to do my own routines for
a later version.
This scanner has many unique features, possibly everything you could ever
need in a scanner, heres the more important features of autoscan:
* Completely window driven program for ease of use (ooh ahh!).
* High resolution graphics display in either EGAHI or VGAHI modes with
10(EGA)-20(VGA) line x 79 column modem echo window, a full 200x200 pixel
exchange display grid with either block (solid display) or dot modes,
and a status window with percentages and bar displays of the exchange
results.
* Option to Capture all modem connections to a seperate .CAP file.
* Option to flood all sitting connections to force a response from the
remote computer (only needed when you choose to capture connections).
* Allows the user of the program to 'break in' to established connections
during scanning and login to systems using the modem echo window.
* All exchange data files are only 5000 bytes long.
* Automatic scanning option: This allows AUTOSCANNING MODE which means it
will scan non-stop until aborted (or a power outage of course! But I
suppose you could rig it up to be auto-loaded). Read the extended
documentation on this feature later in this file for further information
on autoscanning with AutoScan.
New features for Version 0.1: For the most part, only bugs were fixed
that I should have fixed before I released Version 0.0. These are the new
noticable features for Autoscan 0.1:
* List of modems added so that you can set up autoscan quickly and
easily (See file: "AUTOSCAN.MDM").
* Blacklist feature added so that you can prevent certain numbers from
being called for whatever reason you deem necessary (See file:
"AUTOSCAN.BLS").
Features you WILL see in the next version: These features will definatly
be included in the next version, weather you like it or not!
* BLOCK SCANNING option (In otherwords, you can scan only PART of a
given exchange, if that be your desire.
* TIME/DATE Start/Stop option, if specified, it will either BEGIN at any
given time and date, and AUTOMACIALLY quit scanning at any given
time/date. This will be a very useful feature, dont you think?
* The ability to stop scanning if the modem detects a callback or NO
DIALTONE, and pause for a given ammount of time to allow the person
calling back to be overcome by frustration and give up all hope of
contacting you to bitch you out for "prank calling". This is useful,
because it IS possible for someone to jump-in and inturupt your
scanning, as a matter of fact, I did it tonight to Rebel Lion, he will
discover it when he reads his .CAP file. *grin*
Also, this can be good, because if you have an answering machine, you
can include a message stating an apology or something to that effect to
thwart the callers efforts to contact you and bitch you out. Sheesh!
Some people these days, eh?
Autoscan Version 0.1: This is the version you have right now, I ask you
to NOT publically distribute (upload to systems, etc) this program, but to
pass it over to the people you feel can handle the responsibility to
accordingly distribute it. So if this program has fallen into your hands
for whatever reason, this does NOT mean your 'elite', however it means you
are trusted, and I ask you to give it to at least one person, not to be
traded, but to be SHARED. Note: This software is still in testing phases.
When you do give it out, I request you distribute it as you have received it,
and that should be an archive with ONLY the following files: "AUTOSCAN.EXE",
"AUTOSCAN.DOC", "AUTOSCAN.BLS" (the example file), and the "TL2AS.EXE"
utility. Please do not include your "AUTOSCAN.CFG" file.
Will this method actually work? I don't know, I suppose I will find out,
its just a simple request to respect my intentions to compensate for the
time I have spent programming this, thats all.
In any case, I hope you like it, let me know what you think.
Configuration: Upon execution of this program, it will first search for
the "AUTOSCAN.CFG" file, which you should NOT have if this is your first
time using the program, (If the person that gave you this program did
include the "AUTOSCAN.CFG", do me a favor, bitch at him/her and tell him/her
to read the documentation). If you have a configuration file from version
0.0, please delete it, the configuration file format changed GREATLY and
both types are incompatable.
Lets go over the options in the configuration file.
(01) Configuration file for : This is where you put your name.
(02) Type of modem being used : This is where you identify which
modem you are using. NOTE: If you modem is not included in the list
(which comes from the file "AUTOSCAN.MDM"), you should first try other
modems and see if they work correctly (That is, see if they correctly
do detections, if it detects an abnormal amount of false tones, thats
a sign you choose a very incompatable modem!), if you can not find one
that will work, you should then proceed to ADD YOUR OWN. Read the
documentation in the "AUTOSCAN.MDM" file for adding your own. Once
you have it working, SEND IT TO ME so your modem (and other peoples
who have the same one) will work with future versions of Autoscan.
(03) Optional modem init string : This is where you can put in hayes
commands to set the speed of your modems dialing, or anything else you
wish to add that is not included in your modems strings in the
"AUTOSCAN.MDM" file. You can use an exclaimation point ("!") to
seperate two commands (example "ATS11=55!ATM1" would first send
"ATS11=55", pause, and then send "ATM1"). This is optional.
(04) Status of modem speaker : Do you want your modems speaker to be
on or off? Self explanatory, don't you think?
(05) Com port settings : You select the COM PORT where your
modem resides (COM1,2,3 or 4), and the baud rate of your modem.
(06) Delays until & between : These are the delays in seconds.
Delay until is the max time it will wait for a response before it
assumes that the remote telephone is "Not answering".
(07) Pre number extension : If you have call waiting, you might
want to put in "*70". Or if your in one of those areas where your
local CO gives you the right to prevent from being CID'd (Caller ID),
then use it here. A "," on the end of the string is not needed for
pausing, Autoscan automatically puts it there when it dials the number.
(08) Graphics mode : This is where you select your graphics
mode of choice, this can be either EGA (640x320) or VGA(640x480), the
difference between the two modes basically narrows down to how many
lines in the modem box you will have. You will have 10 in EGA and
20 in VGA. They both have their advantages and disadvantages. You
can of course change this later if you wish.
(09) Exchange grid style : This refers to the exchange grid style.
Block (easier to tell the numbers apart but slower to draw),
Dot (harder to tell the numbers apart but faster to draw).
(10) Scan format : This determines how Autoscan chooses
its numbers:
RANDOM format: The best to use, of course.
FORWARD SEQUENTIAL format: 0000,0001,0002,0003,0004,etc.
(NOTE: This might get you in trouble with the phone company
these days!)
BACKWARD SEQUENTIAL format: 9999,9998,9997,9996,9995,etc.
(NOTE: Not as risky as forward seq, but possible harassment from
the phone company.)
(11) Capture all connections ? If you select "Yes" for this one, it
will capture ALL modem connections to a seperate file in the format of
"(exchange).CAP", if the exchange is 555 for example, it would be
saved under "555.CAP".
(12) Flood all sitters ? If you select "Yes" for this one, it
will flood all modem connections that do not give a response after 10
seconds.. it will send every character (1-255) in a sequential format.
It will then capture anything it receives as a response from the
flooding for the next 10 seconds. You only need to use this if you
are capturing connections.
(13) Automatic run on startup ? If you select "Yes" for this one, it
will scan random exchanges automatically until aborted. Read the
section on autoscanning first before selecting "Yes".
Main Menu: Your list of commands at the main menu, and simple
descriptions are shown below:
(SPACE) - Edit configuration file, explained in the section above.
(RETURN) - Scan an exchange, explained in the section below.
(V) - View an existing exchange. This allows you to view the exchange
grid on existing exchanges, you can also move to pointer in the grid around
using the cursor keys to see the status of one certain number. The escape
key exits from this view mode.
(D) - Read the documention file you are already reading.
(ESCAPE) - Leave autoscan.
Selecting your exchange: When you push return from the main menu, it
will search the autoscan directory for all files ending with ".XCH", these
files, only 5000 bytes long, are the files that keep all the information on
the exchange in question. If any exist, it will list them, you can scroll
through all the exchanges in the "Pick an exchange:" window. If you do not
wish to continue an exchange scan or wish to start an entirely new scan, or
if it finds no existing exchanges, you can push the space bar to enter a new
exchange of your choice... once you select your exchange, the high
resolution scan screen will be displayed and it will automatically proceed
or continue with the scanning of that exchange.
The high resolution scan screen: The scan screen is set up as shown and
described below...
#############################
#+-------+ 2 +-------------+# 1: The Exchange grid display, shows the #'s
#| 1 |+-+| 4 |# From upper-left(0000) to lower-right(9999)
#| ||3|| |# counting horizontally.
#+-------++-++-------------+# 2: Shows the types of detection, they are:
#+-------------------------+# "Not dialed" (or no dialtone), "No Answer",
#| 5 |# "Busy", "Skipped", "Voice", "Fax Machine",
#+-------------------------+# "Tone", "Carrier". Each type has its own
############################# color on the exchange grid (#1).
3: This is the box that shows the number it is currently dialing and its
status, as well as the countdown timer for the delays.
4: This is the status window that shows the status of the scanning progress.
It also shows autoscans modes that pertain to scanning, and the menu of
commands that you can enter while in scanning mode.
5: This is the modem window, it shows everything the modem sends\receives.
It acts just like a terminal window, there is a command that allows you
to take control over the modem window when you make a successful modem
connection, allowing you to log into the system.
Blacklisting numbers: If there are certain numbers that you do NOT wish
to be dialed under any circumstances (examples: people that know you hate
them, local scanning enforcement agencies), you can add these numbers in a
file "AUTOSCAN.BLS". You should receive an example "AUTOSCAN.BLS" file with
this software, but in the possible case you have not, the format for the file
is described below:
Every phone number included in the file must start on a new line. If you
wish to add notes in the file, they must follow a semicolon (";").
--------"AUTOSCAN.BLS" example--------
; This is an example of the Autoscan blacklist file.
; These numbers will not be dialed, they will be "skipped" by Autoscan.
5551212 ; This number is my old boss who didn't like me
5558172 ; This is someone not worth mentioning
2025559526 ; C&P Scanning enforcement division
--------------------------------------
There can only be a maximum of 50 numbers (any numbers after 50 will be
ignored!). Any number which exceeds 11 digits will be truncated. All non-
digit characters will be ignored and all characters after the ";" will also
be ignored until the newline.
The "AUTOSCAN.BLS" file will be loaded (if it exists) into memory prior
to every scan.
Scanning the exchange: Exchange scanning is automatic, and consistant.
If you wish to abort the scanning, a simple press of the escape key will do.
If you happen to find a carrier of intrest and wish to immediatly log into
that system while the connection is still established, you can push return
at any time during the connection. You then will have complete control over
the modem box and it will act as a terminal. No terminal modes are
supported but raw data transmission. Once you are finished with the system,
push the escape key and Autoscan will continue with the scanning of the
current exchange.
Once the exchange is completed, it will prompt you to hit return, and you
will be returned to the main menu screen.
Automatic scanning (Autoscanning!): This feature is very useful if you
are the type of person that enjoys CONSTANTLY scanning exchanges. To
activate this feature, select "Yes" in the configuration file under the
"Automatic run on startup?" line. This will activate any time you are at
the main menu. It will then begin to start a countdown of 10 seconds,
giving you enough time to exit the program (and run it later to be
activated) or to deactivate it. Once the countdown is complete, it will
proceed by selecting random EXISTING exchanges from the autoscan directory.
If the exchange that was randomly picked is uncomplete, it will continue
scanning on that exchange until it IS complete. If it is completed, it will
skip it and select another random exchange.
If you wish to abort autoscanning, a simple ESCAPE will do as stated in
the previous section, all other commands in the previous section work as
well. But once it is escaped, it will disable autoscanning mode and save
the configuration with autoscanning disabled to prevent accidental
re-activation of autoscanning. Once at the main menu it will wait for
further instructions as if it was run normally, without autorun activation.
I was going to add in a mode in autoscanning that after all EXISTING
exchange datafiles have been completed, it would randomly create a new
exchange within the range of 222-999 (with no double 0 digits), however, I
have decided against it due to potential problems, such as the random
selection of an exchange that you do NOT wish to scan!
Instead, there are alternatives, you can create a new exchange, lets say,
555, and then copy that file into other exchanges you wish to dial, and then
select autorun mode, it will dial all the exchanges that you WANT to scan, I
think this is a much more acceptable idea, and no extra implementations need
to be done to the code, just create a bunch of new blank exchanges that you
wish to fully scan.
Below I have included a chart of the length of times it would take to
complete (Y) exchanges with the delay of (X) in seconds it takes to detect
one number in the given exchange (I used the "Delay until" factor in
Autoscan), note that the MAXIMUM would be the average of the MAXIMUM*2, so
having a delay until of 60 seconds wouldn't necessarily be 6.9 days for one
exchange, but rather 3.5 days if your modem can detect voice, busy signals,
dialtones, and carriers quickly. The content of the exchange would also be
a factor in coming up with an average time figure, however I do not have
any sufficent data to come up with an AVERAGE for something as crazy as
that, and I would have to average out the number status differences during
certain times of the day. Same with averaging out the modems, oh nevermind,
here it is:
(X)-> Number of Exchanges
+----------+-----------+-----------+----------+----------+
MAXIMUM | 1 | 5 | 10 | 20 | 50 |
+---------+----------+-----------+-----------+----------+----------+
(Y) | 60 secs | 6.9 days | 34.7 days | 69.4 days |138.8 days|347.2 days|
| +---------+----------+-----------+-----------+----------+----------+
V | 50 secs | 5.7 days | 28.9 days | 57.8 days |115.7 days|289.3 days|
+---------+----------+-----------+-----------+----------+----------+
Delay | 40 secs | 4.6 days | 23.1 days | 46.2 days | 92.5 days|231.4 days|
+---------+----------+-----------+-----------+----------+----------+
AVERAGE (Note: This is an average, secs per call for 10,000 #'s
of: As we know, if you have a good modem that detects every-
60 secs thing, the following would be the avg for the max of 60)
+---------+----------+-----------+-----------+----------+----------+
| 30 secs | 3 11:19 | 17 08:39 | 34 17:19 | 60 10:39 |173 14:39 |
+---------+----------+-----------+-----------+----------+----------+
dd hh:mm - dd=days hh=hours mm=minutes
(As if you couldn't figure that out for yourself)
Datafiles: The following is a list of all the data files that can be
found in the autoscan directory that have been created by Autoscan:
"AUTOSCAN.CFG" : This is your autoscan configuration file.
"AUTOSCAN.LOG" : Shows exchanges that have been scanned, when it was
started and when it was completed or aborted.
"(exchange).XCH" : This is the exchange datafile.
"(exchange).CAP" : This is the capture file for the exchange.
"(exchange).LST" : This is the list of all carriers/tones found for the
exchange.
Known problems: The VGA bug previously mentioned in the Version 0.0
documentation STILL EXISTS. This will be fixed in the next version. I have
pinpointed the problem and a fix is being done in assembly. So for now, I
would suggest you do not use Autoscan in VGA mode, because the modem box in
VGA will NOT scroll.
Thats all: Well thats all, I hope this is well explained, if you have
found any bugs (other than the VGA modem window scrolling problem), or have
any problems, comments or suggestions, then leave mail, my internet mail
address is below.
No Means No
nmn@mindvox.phantom.com
+317
View File
@@ -0,0 +1,317 @@
============================
The ANSI Voting Booth
============================
COPYRIGHT 1991,94 T&J Software
One of the T&J Software Collection of multi-BBS door programs.
Supporting PCBoard, Wildcat!, Gap, QBBS, RBBS, Spitfire,
UltraBBS, Telegard, TriBBS, and Remote Access.
VERSION 2.60 01/01/94
By
Tom Wildoner
397 West Broadway
Jim Thorpe, PA
18229
VOICE (717)325-9480
From
The T&J BBS
(717)325-9481
2 NODES
1200/2400/9600/19200/38400
24 Hours/Day
LATEST VERSION:
Please call the T&J BBS for the latest version of this program.
LEGALITIES:
THIS SOFTWARE AND ACCOMPANYING MATERIALS ARE DISTRIBUTED "AS IS"
WITHOUT WARRANTY, EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL ANYONE INVOLVED WITH
THE CREATION AND PRODUCTION OF THIS PRODUCT BE LIABLE FOR INDIRECT,
SPECIAL, OR CONSEQUENTIAL DAMAGES, ARISING OUT OF ANY USE THEREOF
OR BREACH OF ANY WARRANTY.
Distribution:
You may make this file available for downloading from your BBS or you may
upload it to any BBS of your choice, provided that you do not make any
changes to the contents of the archive (ZIP file). The archive and its
individual contents may not be used by any service that charges any money
whatsoever, without the written permission of the author.
Benefits:
-- Support for COM1-15 and non-standard port definitions
-- Online CHAT
-- Multinode support (DesqView aware)
-- Colorful ANSI screens
-- Product support BBS available
-- Sysop Functions
-- Easy SETUP!
PROGRAM DESCRIPTION:
===================
This is a fairly simple door program -- it allows you, the SysOp, to
setup up to 10 different ANSI screens for your users to vote on. It's
great for online competition between your users! Let your users prepare
ANSI screens, upload them to you, then let the other users vote on their
favorite ANSI screens! Shoot, offer a prize to the winner!
NOTE: Some ANSI screens will show better than others. The screens are first
shown on the local screen and then sent to the COM PORT -- so be patient if
the door seems to be hanging (odds are the user is still receiving the
screen, especially for longer animation sequences).
Try saving your screens without using a clear screen command. AVB will
automatically clear the screen prior to showing the ANSI screen. If
you use TheDraw, simply save the file using the HOME CURSOR option as
opposed to CLEAR SCREEN.
NOTE: The voting function is disabled until registered.
INSTALLATION:
============
Example configuration file for PCBOARD.SYS
------------------------------------------
C:\PCB\PCBOARD.SYS <=- (Full pathname of your PCBOARD.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for USERS.SYS
----------------------------------------
C:\PCB\USERS.SYS <=- (Full pathname of your USERS.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for DOOR.SYS
---------------------------------------
C:\BBS\DOOR.SYS <=- (Full pathname of your DOOR.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for USERINFO.DAT
-------------------------------------------
C:\BBS\USERINFO.DAT <=- (Full pathname of your USERINFO.DAT file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
NOTE: DOOR.SYS must be in the SAME directory as USERINFO.DAT
Example configuration file for CALLINFO.BBS
-------------------------------------------
C:\BBS\CALLINFO.BBS <=- (Full pathname of your CALLINFO.BBS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for DORINFOx.DEF
-------------------------------------------
C:\BBS\DORINFOx.DEF <=- (Full pathname of your DORINFOx.DEF file
where 'x' is the BBS Node number.
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for SFDOORS.DAT
------------------------------------------
C:\BBS\SFDOORS.DAT <=- (Full pathname of your SFDOORS.DAT file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for GTUSER.BBS
-----------------------------------------
C:\BBS\GTUSER.BBS <=- (Full pathname of your GTUSER.BBS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
1 <=- (COM port number - defaults to 1)
1 <=- (Node number - defaults to 1)
Example Batch File
==================
A sample batch file is included and is similer to the following:
ECHO OFF
CD\DOORS\AVB <=- Switch to the door's Directory.
AVB AVB.CFG <=- Execute the door program and pass the
configuration filename to the program.
CD\PCB <=- Go back to PCB DIR when user exits door.
BOARD <=- Restart BBS.
This Door is multi-node compatible so you may run more than 1 node from
the same .CFG file provided the path to your system file (DORINFOx.DEF,
CALLINFO.BBS, etc) is exactly the same unless you are using environment
variables, (q.v.)
Environment Variables
=====================
PCBoard automatically creates the %PCBDRIVE% & %PCBDIR% environment
variables. Non-PCBoard systems may also use these variables by including
the following in either your BBS batch or AUTOEXEC.BAT
SET PCBDRIVE=C: <- Drive letter of your BBS files
SET PCBDIR=\BBSDIR <- Path to your BBS files
Then in your Door .CFG file instead of putting C:\BBSDIR\DOOR.SYS, you
would put %PCBDRIVE%%PCBDIR%\DOOR.SYS. This allows you to use just one
.CFG file for multi-node operation!
To specify a non-standard IRQ, put the IRQ number after the .CFG on the
command line. For example:
AVB AVB.CFG /5
or using the PCBDRIVE procedure: SET IRQ=5 and use
AVB AVB.CFG /%IRQ%
This tells the program to use IRQ 5 instead of the standard IRQ.
Had reports of conflicts when using non-standard IRQ's on Novell/Netware
systems. Seems Novell also uses the / character so something went screwy
somewhere. So I added the * (asterisk) which may be used instead of the /
in case of a conflict. In other words, /%IRQ% and *%IRQ% will both work
and are interchangeable.
When specifying the location of the system file on line 1 of the doors .CFG
file, you may use the environment variables %pcbdrive%, %pcbdir%, %pcbnode%,
and %wcnodeid%. Some examples:
PCBoard:
USERS.SYS in C:\PCB - %pcbdrive%%pcbdir%\USERS.SYS
USERS.SYS in C:\PCB\NODE1 - %pcbdrive%%pcbdir%\NODE%pcbnode%\USERS.SYS
Wildcat!:
USERINFO.DAT in C:\WC\NODE1 - C:\WC\NODE%wcnodeid%
Non-PCBoard systems may use the PCB environment variables by setting them
in either AUTOEXEC.BAT or in the batch that runs the door. For example:
SET PCBDRIVE=C:
SET PCBDIR=\BBSDIR
SET PCBNODE=1
Fossil Driver Support
---------------------
DoorFrame supports the use of Fossil drivers. To tell your Door to use the
Fossil driver instead of the standard COM ports, just put /FD on the command
line when running the door. For example:
MYDOOR MYDOOR.CFG /FD
indicates that a Fossil driver is present and should be used. If no Fossil
driver is detected, DoorFrame will print a message to that effect and exit
the door gracefully.
Sysop Keys
==========
F3 - Toggles the printer On/Off. Value is passed to PCBoard and/or
written to DOOR.SYS and USERS.SYS
F4 - Toggles the Page Bell on/off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F5 - DOS Shell. Allows SysOp to exit to DOS from inside a DOOR.
F7 - Toggles the Caller Alarm On/Off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F8 - Returns the caller involuntarily to the BBS.
F9 - Toggles the local display On/Off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F10 - Activates SysOp CHAT mode within the DOOR.
ESC - Deactivates CHAT mode. DOOR is resumed.
UP - Give the caller extra time while in the DOOR.
DN - Subtract time from the caller while in the DOOR.
HOME - HELP key for Status Line options.
ALT-N - SysOp next on toggle. Value passed to PCBoard. (PCBoard only)
ALT-X - PCBoard will exit after current caller logs off. Value is
passed to PCBoard. Not available on non-PCBoard systems.
Now, add your own screens following the format listed below. Enter all
this information in the SYSOP.CFG file, see the sample one that came with
the door. It would be much easier running AVB using the following
command: AVB UTILITY
This will bring up the utility program and you are offered four choices:
1. Reset the door.
2. Make your AVB.CFG file
3. Make your SYSOP.CFG file
4. QUIT
Here is what is contained in the SYSOP.CFG file for those of you who want
to use a text editor:
10 'Number of screens you have.
screen1.scr 'DOS filename for first screen.
screen2.scr
screen3.scr 'All screens must reside in your
screen4.scr AVB directory!
screen5.scr
screen6.scr
screen7.scr
screen8.scr
screen9.scr
screen10.scr
Add for Galactic Warzone! 'Description for the first ANSI screen.
Add for T&J Software Support BBS '40 characters maximum!
Bombing of IRAQ!
Add for US Robotics
What is it like being a SysOp?
Add for Mustang Software BBS
Add for Prize Vault Door game
Add for Lemonade Door game
T&J Software -- most popular files
Eric Erway ANSI screen
NOTE: If you do not have 10 ANSI screens to show, you must include blank
spaces for the rest of the entries. Lines 2-11 are the DOS filenames of the
ANSI screens and lines 12-21 are the descriptions. This file must contain
21 lines.
To run in LOCAL mode simply run: AVB LOCAL
WHEN YOU CHANGE SCREENS:
==== === ====== =======
When you switch screens (after you think all the users have had a chance
to vote for the current screens), you can reset the LOG file, the voter
registration file, and the vote total file by running AVB using the
following command: AVB UTILITY
Then select option 1 to reset the records.
UPGRADING:
From v2.4/2.6 to v2.6 just replace the main .EXE file and the
AVB1/2/3/4.DAT files!
FUTURE VERSIONS:
--->> Let me know what you would like to see!
VERSION HISTORY:
See the enclosed HISTORY.TXT file.
REGISTERING:
That's all there is to it! If you have any problems or questions
please feel free to call the T&J BBS at (717)325-9481 and join the
T&J Software Conference.
See the REGISTER.TXT file for information on registering.
+160
View File
@@ -0,0 +1,160 @@
B64dCode Conversion Utility Version 2.4
A Little About B64dCode
-----------------------
B64dCode (Base 64 Encode/Decode Utility) will decode MIME/Base 64 files back
into their original configuration or encode any other file type into
MIME/Base 64. MIME is an acronym for Multi-part Internet Mail Encoding, a
specification commonly used for Internet email attachments. Base 64 is a
coding standard that allows 8-bit files (graphics, compressed files, word
processing documents, etc.) to be transported via Internet email.
B64dCode is a 32-bit program developed with Microsoft's Visual C++ Version
2.0/4.0 and thus runs in the Windows 95 environment (it's untested in NT,
but should also run in that environment). B64dCode will NOT run under DOS
or in a 16-bit Windows 3.1 environment. It has NOT been tested in the
WIN32S Windows 3.1 environment.
B64dCode does no checksum or hash accumulation or verification. When
decoding a Base 64 file, any text or other extraneous data found in it is
ignored except for the file name. If more than one encoded document is
stacked in one file, only the first will be processed.
If you have a multi-part Base 64 file, you can use a text editor to cut and
paste the multiple files into one. If you do this, you must be careful at
the point where they are joined. Any change in the encoded line size or the
presence of an equal sign ("=") within the encoded data will terminate
decoding.
The converted output file will be directed to the input file's directory by
default. Unless you've activated the Auto Save option, you will be given the
opportunity to change both the output file name and/or destination after
conversion via the standard "Save as" menu option.
When converting from Base 64, B64dCode attempts to determine the correct
output file name and file type from the input data. If the file name cannot
be determined, it defaults to the input file name. If the file type cannot
be determined, a psudo extension of "001" is presented. The user is
notified when this occurs and given the option of saving or discarding the
file because the integrity of the converted file is probably suspect.
B64dCode supports command line initiation ("batch" mode) as well as Drag and
Drop. Keep in mind, however, that when starting B64dCode from the command
line (or via Drag and Drop) the only way it can determine whether to Encode
or Decode is by the input file type extension. If you pass it a file with
the expected Base 64 file type extension (changeable via the Configuration
Options), B64dCode will assume you are DECODING. If you pass it a file with
any other file type extension, B64dCode will assume you're ENCODING.
CONFIGURATION OPTIONS
---------------------
o AUTO SAVE: B64dCode can be configured to automatically save a
converted file (the default is OFF). The full path name of the saved file
will be shown to the user after processing ("interactive" mode) and the file
will be saved in the directory where the input file resides. This is always
the default when executing B64dCode in "batch" mode.
o AUTO PURGE: B64dCode can be configured to delete the Base 64 input
file after a successful conversion (the default is OFF). This will occur
with no user notification.
o AUTO LAUNCH: B64dCode can be configured to launch the application
associated with the converted file (the default is OFF). This is based on
the association between the target application and the file type extension
of the converted (Decoded) file. (Converted files with .EXE, .COM or .BAT
file extensions are excluded for your protection.) The application to be
launched must exist in your WIN.INI file under the [Extensions] section with
a matching file type extension. B64dCode will search your WIN.INI file,
extract the application's path name and "spawn" the application.
o LINE SIZE: The default Base 64 line size (when creating a Base 64
file) can be changed to any value between 60 and 80. It must, however, be
evenly divisible by four. The initial default is 76. Smaller sizes will
result in larger Base 64 files because of the additional lines generated
(extra CR/LF pairs).
o FILE EXTENSION: You can optionally change the default Base 64 file
type extension (the default is "B64") to any unused file type extension you
choose. The new extension must be valid and cannot already exist in your
WIN.INI file's [Extensions] section. If you change the file type extension
in B64dCode, be aware it will NOT change the system file association for the
new file type. B64dCode will NOT update your System Registry with the new
file type extension. If you wish to start B64dCode by double-clicking a
Base 64 file while in Explorer, you must manually change the file type
association yourself from ".B64" to the new one via My Computer in the
Control Panel/View/Options dialog then choose File Types from the property
sheet.
o B64dCode will remember it's window size and position from one session
to the next. These parameters and the configuration options are maintained
in the B64DCODE.INI file residing in your C:\Windows directory. If this
file is not present, B64dCode will create one.
INSTALLATION
------------
Just unzip the B64DCODE.ZIP into whatever directory you wish (generally
C:\Windows) and create any shortcuts you desire on your Desktop or in the
Windows 95 "Start Menu" folder. You can even put a shortcut to B64dCode in
your "Send To" folder and "send" a file to it from Explorer.
B64dCode will also "remember" the last directory used and will display on
the File menu the most recent four files you've converted (these are
maintained in the B64DCODE.INI file in your C:\Windows directory and in the
System Registry).
If you wish, you may configure sound effects for B64dCode. It uses the
following system sound events: Asterisk, Question, Exclamation.
B64dCode requires MFC30D.DLL (this should be standard with Windows 95) in
your Windows directory in to order to function. When B64dCode is executed
for the first time, it will create it's own B64DCODE.INI file in your
C:\Windows directory.
The B64DCODE.INI file contains the [Recent File List] entries for display on
the File menu along with the window settings and configuration options.
REGISTRATION
------------
B64dCode is shareware, not freeware. Unlike many shareware products,
however, it contains no ugly reminder screens or devious expiration date
schemes. There is nothing to stop you from continuing to use B64dCode
for free. You're on your honor. But if you're honest and you find B64dCode
useful and you continue to use it, I would certainly appreciate a
contribution of $10 (cheap) in cash, check or money order delivered to the
following address:
Warren A. Smethurst
P.O. Box 2146
Antioch, TN 37013-2146
If you have any problems with B64dCode or you would like to offer some
suggestions or comments you may reach me via Internet email at
warrens@concentric.net or you may visit my Web page at
http://www.concentric.net/~warrens/ and send me any comments or suggestions
directly from there.
LICENSE
-------
You may use B64dCode freely on your computer system. You may distribute
B64dCode freely on Online Services. You may NOT sell copies of B64dCode
(i.e. disk vendors) without express permission from the author. You may
NOT decompile, reverse engineer, or modify B64dCode or its resources. You
may NOT modify the B64DCODE.ZIP file or its contents.
WARRANTY
--------
USE OF THIS PROGRAM IS AT YOUR OWN RISK. YOU AGREE BY USING THIS
PROGRAM TO HOLD HARMLESS THE AUTHOR, WARREN A. SMETHURST, AGAINST DAMAGES
ARISING OUT OF THE USE OF THIS PROGRAM. EVEN IF THE AUTHOR WAS NOTIFIED IN
ADVANCE THAT SUCH DAMAGES MIGHT OCCUR.
+278
View File
@@ -0,0 +1,278 @@
BackInfo and RestInfo
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
The complete disk setup information recovery utility
Version 1.22
1990, 1991 (c) KsofT Development
Chief Data Recovery Co.
P.O.Box 499, Nes-Ziona 70400, ISRAEL.
Phone: +972-8-400070
FAX: +972-8-403295
BBS: +972-3-9667562
FidoNet: 2:403/138
SHAREWARE INFORMATION
The BackInfo/RestInfo package is distributed as a shareware package.
It is not a free program nor public domain. BackInfo / Restinfo
requires registration for individual and commercial use. If you have
found the package helpful and you created a BackInfo diskette for
use in the future - you mast register it. Please refer to the
registration form at the end of this document.
BackInfo / RestInfo Page 1
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Introduction
ÍÍÍÍÍÍÍÍÍÍÍÍ
The BackInfo/RestInfo package designed to help in recovering a crashed
hard disks and return them to use in the easiest way.
The BackInfo program will create a master system diskette (BackInfo
Diskette) with all the needed information to recover the hard disk
crash.
The RestInfo program will attempt to recover the system with the
information recorded on the BackInfo diskette.
Validating programs
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
To validate that BackInfo and RestInfo programs are intact, please use
McAfee's VALIDATE utility and compare the results with the ones listed
here. If the validation codes mismatch - Don't use the programs and
get yourself a fresh copy of the package.
File Name: BACKINFO.EXE RESTINFO.EXE
Size: 18,004 13,317
Date: 7-31-1991 7-31-1991
File Authentication:
Check Method 1 - 888D B5B9
Check Method 2 - 11E2 04A8
Creating the master system diskette
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
To create the master system diskette you must follow these steps:
1. Format a new system diskette in drive A: by commanding
"FORMAT A: /S" at the DOS prompt.
2. Make sure that your PATH statement is set correctly and points to
the DOS directory where it can find important files.
3. Place both BackInfo and RestInfo in the same directory and run
"BACKINFO" from the DOS prompt.
The program will then write all needed information to the diskette.
4. Place a write protect tab on the diskette and put it in a safe
place.
The BackInfo diskette should be re-created every time you change your
system configuration or after the following events:
1. Installation of a new hardware.
2. Low level format of the hard disk.
3. New DOS version installation.
4. Changes in the AUTOEXEC.BAT or CONFIG.SYS.
5. Change in system paths.
6. Any other case of changing the boot process.
BackInfo / RestInfo Page 2
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
The information on the BackInfo diskette contains the following:
1. CMOS information (AT only).
2. Partition table.
3. Track 0 of the hard disk.
4. Boot record.
5. System files and command processor.
6. Startup files (AUTOEXEC.BAT and CONFIG.SYS).
7. Device drivers listed in the config.sys file.
8. System configuration text file.
9. RestInfo program.
10. A new AUTOEXEC.BAT file to run RestInfo.
This information may be manually restored, but only by a trained
person. However, the RestInfo program should restore all this
information correctly.
Restoring information after a system crash
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
In case of a system crash or a hard disk boot failure, you should poll
out the BackInfo diskette from it's safe place and follow these steps:
1. Make sore that your PC can boot from drive A.
If it's an AT computer, make sure that the CMOS configuration is
correct for drive A.
2. Place the BackInfo diskette in drive A: and boot your PC.
The RestInfo program will automatically start in the AUTOPILOT
mode. You'll be prompted if you like to continue in this mode.
If you don't know nothing about recovering a crashed hard disk,
just let restinfo do it's work and answer all questions with 'Y'.
RestInfo will recover the system step-by-step and will boot the system
after each step of recovering data.
RestInfo will always prompt for Y/N if a disk write operation is about
to accrue. It will never do anything without noting you first.
After RestInfo will complete it's operation, it is most likely that
your hard disk is back to it's normal state.
After RestInfo
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
After RestInfo completed it's operation and restored the hard disk
data, it is your responsibility to check the system to validate it.
Compare the information in your AUTOEXEC.BAT and CONFIG.SYS to the one
recorded on your BackInfo diskette.
Check important device drives like DMDRVR.BIN and copy them from the
BackInfo diskette, if necessary.
BackInfo / RestInfo Page 3
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Warnings and Notes
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
þ The BackInfo system diskette should only be used on the system it
was created on. Never use a BackInfo diskette on other systems.
þ If problems accrued during the creation of the BackInfo diskette
you should never try to restore from it.
þ If BackInfo reports of files that were not copied to the diskette
do it manually. If there is not enough free space in the diskette,
copy them to a second diskette and keep it with the backInfo
diskette.
þ RestInfo is able to successfully restore a disk in about 95% of the
cases. However - almost 100% of cases may be manually recovered by
the information in the BackInfo diskette.
þ On rare occasions RestInfo may not safely restore the information to
the hard disk. In these occasions, it is in you're judgement to
decide if to use RestInfo to recover the hard disk.
The safe solution
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
If you want to play safe and don't want to get into the statistics of
RestInfo failures, you should consult a pro about recovering your
disk.
There are some companies that actually does data recovery and can
recover you disk information easily by using the RestInfo diskette.
In USA you may consult the ONTRACK data recovery company, and in
Israel you may consult Chief Data Recovery Company.
Registration
ÍÍÍÍÍÍÍÍÍÍÍÍ
To register Back/RestInfo you should fill the registration form at the
end of this document and send it with a 25$ check or money order to:
Chief Data Recovery Co.
P.O.Box 499
Nes-Ziona 70400
ISRAEL
When we'll receive your registration, we'll sent you the latest
version of Back/RestInfo.
Back/RestInfo Registration for Individual home use
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Yes. I want to become a registered owner of the Back/RestInfo package.
Please send me the latest version of the Back/RestInfo package.
Name:_______________________________________________ Date:____________
Address:______________________________________________________________
Phone(s):______________________________ _____________________________
Computer type:________________________________________________________
Hard disk(s) type:____________________________________________________
DOS Version:__________________________________________________________
Please mark one option: __ I never had a disk crash
__ I had a crash and recovered in myself.
__ I had a crash and used a pro to recover it.
__ I had a crash and couldn't recover it.
Copies Amount
BackInfo/RestInfo Registration $25 x ________ = $___________
Add $5 per package outside Israel . . . . . . . . $___________
T O T A L . . . . . . . . . . . . . . . . . . . . $___________
Payment by (Please mark one):
____ Check/Money Order No. ______________________
( Please make checks payable to Chief Data Recovery Co. )
____ Charge my Visa credit card:
Card Number_______________________________________________________
Name on Card______________________________________________________
Exp. Date_________________________________________________________
Signature_(Must)__________________________________________________
Diskette format requested is ___ 5 1/4" ___ 3 1/2"
Site licence registration is also available.
Please connect Chief Data Recovery Co. for more information.
+22
View File
@@ -0,0 +1,22 @@
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
Brought to you by AMCOM, one of the largest PCBoards in the world, and winner
of one of the top 6 rankings in the 1990, Best 100 BBS's in the USA Contest!
Thanks to all that voted for us! Since the contest, we've grown even larger!
We have massive file libraries for IBM, Amiga and Macintosh computer users.
You are cordially invited to give AMCOM a call! We support 6 languages...
115+ conferences and 30+ doors await you, along with one of the best user
groups you could ask for... extensive programming and professional libraries!
AMCOM is a 80386 based, multi-node system, and is PCPursuitable (OHCLE)
We offer 38400/19200/9600/2400/1200 Baud HST & V.32 service.
P.O.Box 31752, Cleveland, OH, 25,000+ files!
------
216-526-9480 2400/1200 Baud New and subscription caller lines
216-526-9481 2400/1200 Baud New and subscription caller lines
216-526-9482 9600/1200 Baud USR HST New and subscription caller lines
216-526-9485 19200/1200 Baud USR HST New and subscription caller lines
216-526-9489 38400/1200 Baud USR D/S V.32 New and subscription caller lines
216-526-9490 2400/1200 Baud Public access ( FULL ACCESS-FREE caller line )
There is always something new on Ohio's largest PCBoard, why not call today?
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
+19
View File
@@ -0,0 +1,19 @@
Serving the Amiga and MS-DOS community...
_____________ _________________ _________________________
Line 1: Network Line\_____/ _ \/ _______/ _ \\_____/ / ____/
(604)733-6432 16.8ds | \ | \ __) \ | \| \ / \ / __)_
| \ | \ | | \ | \ \/ \/ \
Line 2: |___ /__|__ /__| |___ /__|__ /___ /\___ /|_____ /
(604)733-8193 14.4hst """\/ "" ""\/ "" """\/ "" ""\/ """\/ """\/ """""\/
________________________________ ____ ___ ________
Sysops: Norman Yen \_____ \_____ \ ______/ _ \/ _\/_ \/ ____/
Bradley Yen | | \ | _/ __)_ / | \ | | \____ \
| ` \ \ \ _ \ | | \ /
Vancouver, BC, Canada |______ /__|\ /____ /___/ \_ /__|__|__ /___ /
""""""\/ "" \/ """"\/ """ "\/ "" "" ""\/ """\/
Networks: FidoNet 1:153/7042, AmigaNet 40:800/7042, VJAC 73:8522/10
Creativity Demo Network 94:850/0 [Western Canada Host]
Sound Blaster Connection Network 13:900/0 [Region Host]
Upload Time => Thursday 03-Jun-93 12:17:02
+151
View File
@@ -0,0 +1,151 @@
BBS Crash - Term Program v1.01
(11/04/90) Release
+--------------------------------------------+
| |
| BBS-Term v1.01 |
| Copyright 1990 John Richardson |
| |
| |
| TopSoft Software |
| 2135 Possum Ct. |
| Brookfield, Wi 53005 |
| |
+--------------------------------------------+
Warranty
--------
This is product is provided "as is" without warranty of any kind. The
entire risk as to the results and performance of the program is assumed by
you. Further more, I the author do not warrant, guarantee, or make any
representations regarding the use of or the results of the use of the program,
and you rely on the program and results solely at your own risk. I the author
cannot accept responsibility for system damage, loss of profit, or any other
special, incidental, or consequential damages resulting from the use or
inability to use this product.
What Is BBS-Term
----------------
BBS-Term is a special terminal program that is used with the BBS Crash
On-Line BBS game. BBS-Term will display screens, maps, and menus instantly
on your screen. By using BBS-Term you will be able to move around on the
BBS map much faster and more enjoyable.
How to use BBS-Term
-------------------
BBS-Term was written to be used from your current terminal program.
You will tell your terminal program to shell to DOS and execute BBS-Term
before you actually enter the BBS Crash game itself. To quit BBS-Term
you must press ESCape.
BBS-Term command line:
Usage : BBS-TERM baudrate comport
Example: BBS-TERM 2400 2
BBS-Term DesqView and DoubleDOS support
---------------------------------------
BBS-Term is DesqView and DoubleDOS aware. It will appropriately and correctly
adjust the program to fit the environment.
Installing BBS-Term with Telix
------------------------------
First of all create a batch file called BBSTERM.BAT and put it in your
Telix subdirectory. Make sure it looks something like this:
REM BBSTERM.BAT
@ECHO OFF
CD\BBSTERM
BBSTERM 2400 2
CD\TELIX
Now to install BBS-Term as a protocol.
Make sure you're in Telix when doing this.
Step 1: Press Alt-O
Step 2: Press P
Step 3: Pick an available slot in the protocol listing
Step 4: Enter the following information
Protocol Upload Download Bat or DL
Key Name Filename Filename Script Name
---- -------- --------- --------- -------- ----
T BBS-Term BBSTERM BBSTERM Batch N
Step 5: Exit and write this setup to disk.
To use BBS-Term. Log onto your favorite BBS that is running BBS Crash
v4.5 or above. When you are ready to play BBS, start the term program
by pressing PageUp or PageDn and then just select BBS-Term off of the
scroll menu. When you are done playing BBS Crash press the ESCape
key to quit the term program and return to telix.
Comments & Credits
------------------
All programming was done by John Richardson of TopSoft Software.
Thanks to:
Dan Vanderboom for giving me numerous ideas for the game, drawing part
of the map, writing the documents, and for drawing some of the danger
and zoom up screens.
Robert Richardson, Steve Richardson, and Dan Vanderboom for testing the
game before its first beta release. They gave it a good run and found
most of the bugs.
I'd also like to thank the following sysops for beta testing BBS Crash!
Reptile Ranch.......................Terrance Ohearn...(XXX)XXX-XXXX 9600HST
Open Door West......................Bill Hamilton.....(602)242-4784 2400
Plane Crazy's High Flying BBS.......Jerry Kemp........(901)357-1778 9600HST
Modern Pastimes.....................Bruce Berna.......(414)384-1701 19200HST
The Com-Link Infotainment System....Alex Slinin.......(904)642-2633 2400
The Westfield Express BBS...........Mark Gill.........(404)435-8722 9600 v.32
The High Pinnacle...................Todd Carlton......(817)640-4124 2400
BBS Crash was written and compiled in Borland's Turbo Pascal v5.5.
BBS Crash Copyright 1990 John Richardson
Turbo Pascal 5.5 Copyright 1983, 1989 by Borland International, Inc.
Support
-------
TopSoft Support Systems (414) 796-8408.
24 hour / 7 days a week operation.
Support of 1200 and 2400 baud.
I may be contacted directly through fidonet netmail at the following address
[1:154/300].
You may also contact me through the following fidonet echos:
ON_LINE_GAMES
DOORWARE
TOPSOFT
There has also been a Fidonet TopSoft Support Echo created for TopSoft
programs. Ask for the echo when you call, and we can help you get the
closest feed for it.
End of original documentation
-----------------------------------------------------------------------------
+345
View File
@@ -0,0 +1,345 @@
BDIFF/BUPDATE: Binary file differencer/updater
What they do?
=============
Bdiff creates a binary difference between two files. On unix like systems,
many people use diff and patch to update source files. They are very powerful
for "line oriented" data. However, they are incapable of handling binary data.
Modifying a single line in source file amounts to a considerable difference
in its compiled object. Calling address, variable address, segment value, they
will all change even when object's structure remains similar.
Bdiff creates the difference of two objects. Suppose, the difference will be
much smaller than whole new object file. With bupdate and "old object file",
you can create new object file from the difference file.
What's good?
============
The merit of size, is very important if you distribute the difference on
line. And there is another reason to use difference. Only the person who
has "old version" can get new version of program. So, you can release the
update information of your charged program (commercial, shareware, etc.).
You do no need to bundle a document again. Cause, who use it, must have a
document bundled with the package of older version.
Bdiff can pack many difference files into one file. You can see the
information of differences the file contents with bupdate command. With
composite difference file, you can update many files of a package at once.
Of course, not only program file, but document file can be updated with
BDIFF/BUPDATE. It is not so effective than to use diff/patch. Nevertheless,
it is much more convenient.
Not only differences of different files, you can pack the differences for
same file, but between different versions.
Suppose you released a program versions 1.1, 1.2, and 1.3. You can not guess
who holds which version. In such case, you can pack respective differences
between 1.1 and 1.2, between 1.2 and 1.3, and finally between 1.3 and the new
version 1.4.
The holder of the program version 1.2, can update from his version to 1.3
then to 1.4. Bupdate checks the version and does this incremental updating
to the newest and will report its actions on the screen. You just watch it.
Difference data to incremental update, is more effective in the size than
the sum of all differences between new version and every respective version.
NOTE
====
"CURRENT" outputs of Bdiff is not so compact. They must be larger than 1/8
of original program file size. You had better use compressing tools such as
LHarc to get down the size of up- downloading. In future version of Bdiff,
you may expect to have compressed output directly.
If you use RCS for maintenance of source files, and write RCS header in
the program, you can let Bdiff automatically scan the header. Bdiff will
modify time stamps of files from the scan, and will record revision number
into difference file. This function of Bdiff makes maintenance of version
easier.
If there is large difference between two files, Bdiff may fail to create
difference. The difference must be smaller than 16KB.
Bdiff is effective enough for code changing, inserting, and deleting. But
it is not so for moving. Future version may be improved.
********** BDIFF
Usage:
======
BDIFF [-swindow[:rate]] [(-r|-x)] [-i] [-a] [-v[rev:rev]] oldfile newfile [diffile]
You have to assume two file names of old version file, and new version file.
You can not omit them. Of course, they are not the same name. To make
difference between two versions of a.exe, please rename older versions of a.exe
as a.old or such name. Otherwise, place them in different directories.
You may not modify <newfile> name instead of <oldfile>. Because, This name
is recorded into differnce file, and used on updating.
Bdiff may cause some confusion when it meets a file with version number in
its name.
The output has the name <diffile> if you specify it, otherwise the output
has the name combined with a prime name of <newfile> and default extension of
".bdf". You can omit <diffile> argument usually.
Suppose you create difference between bdiff123.exe and bdiff124.exe, you type:
bdiff bdiff123.exe bdiff124.exe
to have the diffile bdiff124.bdf by default. The name implies that this
diffile is to update a program with name bdiff124.ext not bdiff123.ext.
The file bdiff123.bdf will try to update bdiff123.exe while bdiff124.bdf
searches for bdiff124.exe. You can not expect your user to have bdiff124.exe
since this is going to be the new version. If you type
bdiff bdiff123.exe bdiff124.exe bdiff123.bdf
^^^^^^^
then you can get the BDF file with proper name. When you omit <diffile>
please be aware of the fact that <diffile> name is recorded in itself.
There are some options. I will describe them below.
Options:
========
-s: To assume data span and required match rate in comparing. To assume
span, use unit of byte. To assume ratio, use unit of per-cent.
Default value of span is 15 bytes, and rate is 66%. It means if 10
characters in each 15 succeeding characters of two compared files
match, Bdiff believes two sets of data synchronize.
If some data insertion/deletion occurs, data sync is broken. Then,
Bdiff scans the context, and restart from a new position at which such
sync is possible.
Default values are reasonable to compare normal dos executable files.
However, if you want to compare source/document files, you'd better
assume large sapn/rate values. For example, -s20:100 option will give
more effective outputs.
If you do not specify rate you will have the default value of 80%.
-r: Good for source files. Output size remains the same if this option is
on or off. Nevertheless, "compressed" file size may vary.
I am not sure if this option may be valid in the future compatibility.
-x: Output "reverse" difference data with normal data. BDF files
created with -x option, supports "version down" if need.
Note that output contains a part of <oldfile>. Be careful about
valid dates of copyright statement.
-i: Suppress time stamp comparison. Bupdate first check time stamp,
sum, length of target to insure updating correct file. Of course,
it is good way to compare time stamp. But if you loose released file,
and time stamp is unknown (though contents of files are equal),
use this option.
RCS header will try to avoid such cases.
-a: Append difference data after existing BDF file. With this option,
you can pack the difference of different files, between different
versions.
-v: You can assume revisions of <oldfile> and <newfile> with this option.
If you write RCS header in the objects, Bdiff records each version
number in a difference file. If you don't, it is encouredged to assume
each version number with this option.
With -v option, Bdiff refrains from correcting time stamps even with
RCS header. If you don't want to modify time stamp, use this option.
Return value
============
0 for normal case, 1 for error.
Compatibility with older versions:
================================
Omitted.
PLEASE USE BDIFF1.2x OR LATER.
Examples:
=========
Creating difference between Bdiff.old(1.1) and Bdiff.exe(1.2).
bdiff bdiff.old bdiff.exe
will create bdiff.bdf which is a difference between versions 1.1->1.2.
Creating "reverse" difference.
bdiff -x bdiff.old bdiff.exe
Creating difference between non-RCS headered programs.
bdiff -v1.1:1.2 bdiff.old bdiff.exe
Add difference of document into created BDF file.
bdiff -a -s20:100 bdoc.old bdiff.doc bdiff.bdf
You do not need to specify Extension of "bdiff.bdf".
********* BUPDATE
Usage:
======
BUPDATE (-v | -d | -x [-i[s]] [-r] [-o] [-wdir]) diffile [file[;source]..]
Bupdate updates files using a deference file created by Bdiff. If more
than one difference is encountered in a single BDF file, Bupdate updates
all files required.
It is also used to display the contents of BDF file, and to remove
some differences in a composite-difference BDF file.
File names to update, are written in a BDF file. So most simple use,
only BDF file name is required for an argument, regardless of single difference
BDF or multiple differences BDF. To update bdiff.exe from 1.1 to 1.2,
type:
bupdate bdiff.bdf
or bupdate bdiff
In normal usage, you actually not need to type filename extension ".bdf".
After updating, extension of original files to update, will be modified
as ".org". If a file with an extension ".org" already exists, its extension
will be renamed as ".nnn" where nnn is a 3 digit number.
You can also give file name templates after BDF file name. They can
include wildcards in themselves. If they assumed, bupdate procceeds execution
for only files whose name match to the templates. To update exe files only, use
"*.exe" as a template.
Type:
bupdate bdiff *.exe
when you have files bdiff.exe and bdiff.doc in the curent directory.
You can add a "path" for the templates. This is useful in updating files
in some other directory. In case when files to be updated are in drive C:,
type:
bupdate foo.bdf c:*.*
Updating files must have exactly the same contents to the ones used to
create differences. Bupdate checks time stamps, sums, lengths. For some
reason, if you want time stamp comparison to be ignored, use -i option which
is described below. If -i option was assumed on creating difference, time
comparison is always ignored.
Options:
========
-v: Verbosely outputs contents of BDF file. Prints file names to update,
time stamps of old and new versions of the file, their file size,
their revisions, and BDF file size.
This option is useful to see what version is required to update.
-d: Deletes differences whose name match to file name templates given.
Original BDF file is renamed as ".bak", and saved.
-x: Updates files. Without -v and -d options, this option assumed as a
default.
-i: Ignores time stamps. If you modified time stamps of updating files
for some reason(ex. re-compiling), this option will help you.
-is: Ignores time stamps and sums. This option is useful to update "patched"
versions of files.
Assuming you have a1.exe, and a1a.exe watch is patched version of
a1.exe. When a2.exe, which is a new version of a1.exe, released,
first creates difference between a1.exe and a2.exe. Then assume it
to a1a.exe with -is option. You may get a good version of a2a.exe
under favorable circumustances.
-r: Updates in reverse order. It means "version down". Create <oldfile>
from <newfile> for bdiff. Of course, BDF file must be created with
-x option.
-o: Omitting backups. As described above, original files are renamed and
preserved. This is to save disk space when you try incremental
updates. With this option, all original files are discarded.
RESERVE ORIGINAL FILES BEFORE UPDATING WITH -o OPTION, OR APPLY TO
COPIED FILES ONLY.
-w: Specify Working directory.
Return value:
=============
0 for success updating all files, 1 for error updating at least one file.
Compatibility to older versions:
================================
OMITTED. USE BUPDATE1.2x OR LATER.
Source file assuming:
====================
As explained above, <newfile> name is used as a updating file name. If it has
version numbers in it, the kind of trouble you may expect is as follows.
Suppose program distributer is going to update BDIFF123 to BDIFF124.
distributer types:
bdiff bdiff123.exe bdiff124.exe
and bdiff124.bdf will be created. What happens then? You as a user have the
difference bdiff124.bdf and bdiff123.exe. While, Bupdate looks for
bdiff124.exe to update. You have to copy bdiff123.exe into bdiff124.exe
or rename so before updating. Sounds complicated.
In such case, source file assuming will do. You can give a source file name
just after filename templates separated by a semi-colon. Templates are exact
source file names, should not have wildcards. In case above, you type:
bupdate bdiff124.bdf bdiff124.exe;bdiff123.exe
to avoid copying. If bdiff124.bdf encounters only one difference, you can
type in short:
bupdate bdiff124 ;bdiff123.exe
After all, I dare to say including a version number in a file name is not
a good manner. Use time stamp instead.
************ modtime
Usage:
modtime filename
This program is used to set time stamp according to RCS header included.
Modify time stamp before INITIAL release. It will make you free from
remembering time stamp of released one.
************ bupmini
Usage:
bupmini bdf_file
This tiny program is for update only. This program does not have the
ability to display or modify the contents of BDF file.
This program acts just as bupdate with -o option, does NOT create backups.
You have to preserve origainal files for your own sake.
Slightly modified version of bupmini, makes "self updating" BDF file enable.
Please contact us for such version.
+-------------------------------------------------------+
|This file is not contained in English Version of Bdiff.|
+-------------------------------------------------------+
************ COPYRIGHT and OTHERS
Term of "this program" described below, means all programs and documents
contained in this archive. And what described below, are affected to this
version only. They may be changed without notice in future.
On distributing and using:
==========================
* All copyrights of this program are reserved by the author.
* You can distribute this program freely if
- distributing this program only (not with other programs)
- not changed
- free without media charge
- not any copyrights restricted by distributing (it means, for example,
never upload on a BBS who claims copyrights of uploaded programs).
* You can use this program to create difference free, and release difference
data created by this program free, regardless of commercial or no-commercial
base.
* Please contact us to use this program itself (ex. adding update program
with difference, and distributing it).
* NO WARRANTY OF THIS PROGRAM. THIS PROGRAM IS SUPPLIED AS-IS.
WE ASSUME NO LIABILITY FOR DAMAGES DIRECT OR CONSEQUENTIAL, WHICH MAY RESULT
FROM THE USE OF THIS PROGRAM.
Toshiyuki TANAKA
TNT Technology corp.
KAKINOKIZAKA 3-6-7-111,
MEGURO, TOKYO
152 JAPAN
+813-795-0168 may accept
your "AUTO DIALED" fax.
Oversea Users Contact
K.Okubo Genie,
74100,2565 Compuserve,
or E-Mail address:
c31834@sinet.ad.jp
+67
View File
@@ -0,0 +1,67 @@
News on the BESTPR package by Timo Salmi in reverse order
=========================================================
University of Vaasa, Finland, Linux Pentium garbo.uwasa.fi has a
large collection of PD and shareware PC programs available by
anonymous ftp, WWW and mail server. The file /pc/ts/news-pd2
contains news about select uploads to Garbo archives (in reverse
order). This text, which you now have, is an extract from the
news-pd2 file and Usenet news.
....................................................................
Prof. Timo Salmi Co-moderator of news:comp.archives.msdos.announce
Moderating at ftp:// & http://garbo.uwasa.fi archives 193.166.120.5
Department of Accounting and Business Finance ; University of Vaasa
ts@uwasa.fi http://uwasa.fi/~ts BBS 961-3170972; FIN-65101, Finland
....................................................................
Sat 30-Sep-95: I recently release an update of "Timo's choice of 43
best MS-DOS SW and PD packages". Since then several users on Usenet
have suggested including full URL file paths. I have done so in a
file BESTPATH.TXT now included in the new version
ftp://garbo.uwasa.fi/pc/pd2/besta43a.zip
Timo's choice of 43 best MS-DOS SW and PD packages
Sat 23-Sep-95: I have made an update
ftp://garbo.uwasa.fi/pc/pd2/bestp43.zip
Timo's choice of 43 best MS-DOS SW and PD packages
Not surprisingly many of the selections that were on the original
list were utilities that complemented what the earlier MS-DOS
versions lacked. I have moved the consequently outdated selections
to a separate file earlybst.txt in this the collection. I have also
updated the version numbers.
Wed 15-Mar-95: I have made an update
garbo.uwasa.fi:/pc/pd2/bestp42.zip
Timo's choice of 42 best MS-DOS SW and PD packages
Added fourteen new selections to bring the total up to 42 from 28.
Altered two selections. Updated version numbers. Added my standard,
general information material.
Sat 21-May-94: Updated versions numbers, and some minor changes to
the text.
Fri 24-Dec-93: Merry Christmas. Added information to same of the
entries and updated the version numbers. Added three new items.
Sat 3-Jul-93: Corrected the out-of-date information about
target15.zip.
Fri 2-Jul-93: Made no additions but changed one choice and rewrote
most of the items.
Sat 20-Feb-93: Updated the version numbers and added one new item.
Tue 19-May-92: Updated the version numbers and added two new items.
Sat 2-Nov-91: Added one further item (shrom) on the list, and
rewrote some others a bit. For the record. I have registered all the
shareware programs on this list.
Fri 11-Oct-91: Updated the text and added some new items on my list.
Sat 16-Mar-91: Having had the opportunity to use PCs extensively
both at work and at home for several years I decided to take a very
subjective look at what have been the most useful MS-DOS shareware
and PD utilities for me. Here are my choices in an alphabetical
order.
+765
View File
@@ -0,0 +1,765 @@
Voice B.J. Guillot Data/Fax
713.893.9320 2611 Rushwood Circle 713.893.9124
Houston Texas 77067-1941
Copyright (C) 1993 B.J. Guillot. All Rights Reserved.
=============================================================
BGFAX 1.09 WED 22 DEC 93
=============================================================
Dedicated to Gene Roddenberry
1921-1991
-------------------------------------------------------------
ABSTRACT FidoNet 1:106/400.0
-------------------------------------------------------------
BGFAX allows SYSOPs to accept faxes on their BBS line. BGFAX can
also send faxes. (While BGFAX was originally designed just for
sysops, it can also be used by Mr. Joe User who, like me, hates
TSR based fax programs that all the commerical fax software
developers love for some reason.)
BGFAX is a tool designed for use with *ANY* Class 2 compliant fax
modem. The fax modem must also support fully functional ADAPTIVE
ANSWERING.
Common Class 2 fax modems include the Supra, Practical Peripherials
(may require purchase of a newer ROM revision if you are using an
older model), Zoom, etc.
BGFAX also directly supports ZyXEL fax mode. (AT#B1+FCLASS=6).
BGFAX will *NOT* function with Class 1 *ONLY* fax modems. Common
Class 1 *ONLY* fax modems include all non-v.32terbo USR fax modems,
Digicom Scouts, the AT&T Dataport, and the SupraLC.
BGFAX can be used in FOUR distinct modes.
FRONTEND MODE ... BGFAX will answer the telephone line ITSELF,
handle events, pass data calls to a front end
compatible BBS, and take fax calls.
REAR END MODE ... BGFAX will be called from another program when
an incoming fax is detected. FidoNet sysops
using front end mailers such as FrontDoor,
Intermail, D'Bridge, Dutchie, etc. are required
to use this mode. The mailer must support the
ability to exit to BGFAX when a fax is coming.
SEND MODE ....... BGFAX has the ability to send faxes to another
fax machine. (At this time, the file to be sent
must already be in converted fax format.)
INITIALIZATION .. BGFAX will only initialize the modem, and then
quit. This mode is provided for people who need
to use BGFAX in rear end mode, but their Fido
mailer (or BBS software) will not allow the long
initialization strings required for fax usage.
-------------------------------------------------------------
INCLUDED FILES
-------------------------------------------------------------
1. BGFAX.DOC -- general documentation
2. BGFAX.TXT -- release notes
3. BGFAX.EXE -- the main executable
4. BGFAX.CNF -- default configuration file, not required
if you plan on using only rear end mode
5. HELPME.ARJ -- specialized help files for various setups
6. REGISTER.FRM -- registration form
-------------------------------------------------------------
DISCLAIMER
-------------------------------------------------------------
BGFAX and accompanying files are provided AS IS without any
warranty, expressed or implied. This includes without limitation
the fitfulness for a particular purpose or application and any
warranties of merchantability.
While I tried to be as through as possible in preparing BGFAX,
B.J. Guillot shall not be liable for any damages, whether direct,
indirect, special, incidental or consequential arising from a
failure of this program or accompanying files to operate in a
manner desired by the user. B.J. Guillot shall not be liable for
any damage to data or property which may by caused directly or
indirectly by use of this program.
In no event will B.J. Guillot be liable to you for any damages,
including any lost profits, lost savings or other incidental or
consequential damages arising out of your use or inability to use
the program, or for any claim by any other party. Individuals using
the software bear all risk as to its quality and performance.
-------------------------------------------------------------
CONTACTING ME
-------------------------------------------------------------
FidoNet: 1:106/400 Voice: +1 713.893.9320
InterNet: st1r8@jetson.uh.edu Data/Fax: +1 713.893.9124
The latest versions of BGFAX can be obtained by Fido FREQ at the
above Fido node number with the magic name "BGFAX" and can be
obtained by anonymous FTP for InterNet users at the site
"uhdux2.dt.uh.edu" in the "/incoming" directory.
BGFAX can also be obtained from Fido 2:512/39. This system is
called The Owl's Nest and is the Dutch Supra Distributor. They
have three nodes:
+31 0.2155.10921 +31 0.2155.12571 +31 0.2155.28096
An alternate distribution site is Fido 3:635/552. Cloud Nine.
+61-3-803-6954
-------------------------------------------------------------
MISCELLANEOUS NOTES
-------------------------------------------------------------
BGFAX takes the fax call itself. It does *NOT* require any special
TSR drivers to be used and does *NOT* pass control to another fax
program to receive the fax.
...HOWEVER... You *WILL* need some type of external fax program to
VIEW and PRINT the received fax. BGFAX currently supports two
popular fax formats. Smith Micro Software's Quick Link II, which
is included with several faxmodems, and ZyXEL's ZFAX software.
(ZFAX will not function on a normal Class 2 faxmodem, but it will
allow you to view and print BGFAX faxes stored in ZFAX format.)
If anyone can get me the formats for other popular packages, I
will gladly add them to BGFAX if its not too much trouble. A
number of people have requested WinFax format, but I can't find
any information on Delrina's WinFax file format.
PLEASE NOTE: BGFAX does not need nor use a FOSSIL driver. BGFAX
has internal communication support for all UART types including
the 16550A FIFO chip. BGFAX assumes ...
COM1=3F8x4 COM2=2F8x3 COM3=3E8x4 COM4=2E8x3
If you are using a nonstandard port configuration, whenever BGFAX
requires a port number to be entered (such as po=2), instead of
entering the port number, enter the base address and IRQ seperated
by an 'x' character (such as po=2E8x5). BGFAX requires the base
address be given in hexidecimal notation.
If you are using a ZyXEL modem, whenever you specify the com port
for BGFAX, you will need to put an exclamation point, !, i.e.,
po=2! so that BGFAX will not attempt to relock the DTE. Most
modems work fine without the !, but remember this option is
available. I've also heard that the Zoom VFP Internal Fax Modem
may also require this ! option.
BGFAX supports Desqview's alternate video buffer zone, if used, and
will return ticks to other tasks.
This program was compiled under Borland's Turbo Pascal 7.0.
I do all testing with a Supra Fax Modem (ROCKWELL based) v.32bis
external with V1.80-02 firmware and FrontDoor 2.02/NC running on
a 386DX/40. I also routinely test BGFAX with a generic no-namer
2400 data, 9600 send/receive fax (SIERRA based) modem from Computer
City running on the ever-so-slow 286/8.
-------------------------------------------------------------
QUICK TUTORIAL ON SOME FAX CLASS 2 COMMANDS
-------------------------------------------------------------
AT+FCLASS=?
===========
This command will allow you to see if your fax modem supports
the "unofficial" Fax Class 2 standard. The modem should report
back a string similar to:
0,1,2 or 0,2 or 0,1,2.0 or ERROR
0 = Data
1 = Fax Class 1 capable
2 = Draft Fax Class 2 "compatible"
2.0 = Fax Class 2.0 capable
ERROR = no fax capabilities
Do *NOT* use the "AT+FCLASS=n" command in any of your intialization
strings. (Unless you are using Class 2.0).
GROUP III and CLASS 2
=====================
Many people are often confused between the terminology "GROUP" and
"CLASS" regarding fax modems.
ALL FAX EQUIPMENT is "GROUP 3" compatible. This includes fax
machines, fax modems, standalone PC fax cards, etc. Group 3 just
defines the fax specifications, e.g., black-and-white, the
resolutions, etc. When Group 4 fax machines are available to
consumers, they will offer color and/or ISDN fax capabilities, but
our fax modems will still only do black-and-white.
"CLASS" refers only to fax modems. CLASS has NOTHING AT ALL to do
with fax machines. Class 1, Class 2 and Class 2.0 are different
methods of sending commands to a fax modem from a computer serial
port. Many fax modems offer the Class 2 command set.
AT+FAA=1
========
This command will put your modem in ADAPTIVE ANSWERING mode. This
means your modem will properly mate with either a standard modem
data call or a fax machine/fax modem. Some modems, such as the
Supra, will report a "FAX" response the instant a fax CNG tone is
heard from the remote end. Some modems are brain dead and will
report "FAX" whenever an "ATA" command is issued to the modem
regardless of whether the incoming fax is data or fax.
All modems, on true fax calls, will report a "+FCON" response code
when the fax connection is truly established. (This is similar to
a "CONNECT 14400" on a data call.)
Many modems are slightly brain dead and will forget the +FAA
setting when another command is issued to the modem. To ensure
you always answer in adaptive mode, rather than using "ATA" to
answer the phone, use the following: "AT+FAA=1;A".
The ";", semicolon, is used as a seperator for fax commands. Some
modems, such as the Supra, do not require it. Others, such as the
PPI, will "ERROR" out if the semicolons are not used.
A final note about adaptive answering: IT IS NOT 100% ACCURATE.
Every now and then, your modem may get confused and think a data
call is a fax call. There is nothing I can do about this as it is
most likely a firmware problem with the modem. Some modems are
very brain dead and allow low speed data callers to call the BBS,
but all high speed callers are treated like they are fax machines.
(That is NOT GOOD.) The only way to cure this is get a ROM chip
upgrade to the modem, if a newer version exists. You'll just have
to experiment and make sure your adaptive answer works about
95% of the time, or whatever you decide is good.
The Supra Fax Modem, for example, is pretty good concerning
adaptive answering. (Note that very earlier versions of the
Supra, did not offer adaptive answering until the 1.2-H and 1.2-J
ROMs appeared on the scene.) However, many older fax machines do
not send out a CNG tone when they are engaged. Many fax modems,
including the Supra, won't know what to do, and will assume the
old fax machine is really a data caller. Again, this is not good,
but its not that much of a problem. Tell the operator of the old
fax machine to push their "START" button *IMMEDIATELY* after dialing
the last digit of the telephone number instead of waiting to hear
the fax tones on our end like many office people do.
AT+FCR=1
========
As silly as this command may sound, it gives permission to your
fax modem the ability to accept fax calls. The fax modems default
to *NOT* allow incoming fax calls (EVEN IF ADAPTIVE ANSWERING IS
ENABLED!) So, just make sure +FCR is always equal to 1.
AT+FLID="713 893 9124"
======================
( The Class 2.0 command is AT+FLI )
The above command sets your modems fax ID string. This is the
string that is send to the remote end on fax connects. (It's the
deal that's printed on the little 'confirmation reports' that many
fax machines make.) The fax ID can ONLY BE A MAXIMUM OF *20*
CHARACTERS. If you try to stuff more than 20 characters in a fax
ID string, the modem will respond with an "ERROR". DO NOT USE
HIGH-BIT ASCII CHARACTERS IN THIS STRING. Use only simple
letters, numbers, and punctuation marks. (High-bit ASCII
characters include foreign accented letters, inverted question
marks, etc.)
I've been told that some older fax machines will go nuts if you
use a fax ID with ALPHABETIC letters and that the only true valid
values, as specified by the CCITT (PLUS, SPACE, DASH, and the
numbers ZERO through NINE). I've never seen this happen
personally, but am informing you of it nevertheless.
AT+FDCC=1,5,0,2,0,0,0,0
=======================
The above command is what the power on defaults to a 14400 fax
modem are, with one exception. The first number, 1, allows your
fax modem to accept high resolution fax documents. The power on
default to most modems are to accept only low resolution
documents. The second number, 5, allows your fax modem to use fax
speeds up to 14400 bps.
If you issue the above command on a fax modem with an upper limit
of 9600 on fax tranmissions, you will receive an "ERROR" or cause
the modem to behave odd. Use this string on a 9600 fax modem:
AT+FDCC=1,3,0,2,0,0,0,0
The remaining numbers are not that important. Changing them
around, though, may cause BGFAX to fail. The command can also be
abbreviated to "AT+FDCC=1,5" or "AT+FDCC=1,3".
STACKING
========
A single command string can be made using what we need ...
AT+FAA=1;+FCR=1;+FLID="713 893 9124";+FDCC=1,5,0,2,0,0,0,0
However, if you are using BGFAX in rear end mode with a Fido
mailer, you may have a hard time of making an initialization
string that long, so you may be required to split the line into a
few pieces. Remeber to make your ATA command "AT+FAA=1;A" if it
is possible to change in your mailer.
AT+FMFR?
========
( The Class 2.0 command is AT+FMI? )
If you want to find out who makes the fax datapump for your modem,
this command should tell you if you enter it in while in terminal
mode. My Supra (and many others) report "ROCKWELL". My Cheap
2400 data, 9600 S/R fax modem reports "SIERRA". Others report
"EXAR" and other things as well.
FAX MODE
========
Probably 95% of you will be using BGFAX with a high speed modem
(v.32 or v.32bis). Many of you may have started off with slower
300, 1200, or 2400 modems from long ago. If you can remember back
that far, when an incoming data call came in, you would see a
string like "CONNECT 1200". If your port was set at 2400, you
would garbage on the screen unless you shifted your bps rate down
to 1200 to match that of the caller. Many newer terminal programs
refer to this speed shift as "Autobaud".
Modern modems require your serial port be locked at a specific
speed (such as 19200, 38400, 57600, etc.) so that you can achieve
higher thruput via compression engines such as MNP and v.42bis.
The modem-to-modem speed may only be 14400, but the modem-to-
computer speed stays "locked" at 38400. Autobaud is not required,
and if used, would result is garbage on the screen.
Why am I telling you all this? Well, I don't know who's silly
idea it was, but the powers that be decided that fax modems should
use the ancient method of changing the port rate when a fax is
incoming or outgoing.
After your modem reports the result code "+FCON" all further
communications *MUST* be done at 19200 bps, even if you are locked
at 38400 or 57600. If the port speed is not relocked at 19200,
nothing but garbage will come on the screen.
I'm telling you this because I frequently get mail asking me why
I'm changing the port speed to 19200. It's not my fault! That's
the way is has to be done! The only modem that I know that does
not require this idiotic speed shift is the ZyXEL modem. In fact,
a special option must be used to tell BGFAX you are using a ZyXEL
or BGFAX will fail as it will try talking to the ZyXEL modem at
19200 instead of 57600 or whatever rate it's locked at.
-------------------------------------------------------------
FRONTEND MODE
-------------------------------------------------------------
To use BGFAX in front end mode, you say "BGFAX /HOST".
If you plan on using BGFAX in Frontend mode, you need to do a
couple of things first.
1. An evironment variable called BGFAX needs to be inserted in
your AUTOEXEC.BAT or someother batch file. Example:
SET BGFAX=C:\BGFAX
This environment variable points to the location of your BGFAX
configuration file and the directory where faxes will be
received into.
2. Make sure the BGFAX.CNF configuration file is in the directory
pointed to by the BGFAX environment variable and make any
changes you think necessary. The included configuration file
is self explantory. I won't repeat the format here.
3. BGFAX can exit with 5 possible errorlevels:
5 - fax was sent successfully
4 - fax was received
3 - local logon
2 - data call
1 - restart batch file
If no errorlevel is encountered, it means the sysop aborted
BGFAX by pressing the [Esc] key or a serious error occurred.
4. When BGFAX is waiting for a call, pressing Ctrl-R will reset
the on screen counters. Ctrl-A will force BGFAX to send the
answer string to the modem.
5. When a data call comes in, BGFAX creates a DOBBS.BAT file that
looks like so:
C:\BGFAX\EXEBBS.BAT 9600 1 528 /ARQ
The first parameter is the DCE data speed, then the com port,
number of minutes until the next event, and then the error
correcting string, if any. The EXEBBS.BAT file must be created
by you so that your bulletin board software is loaded up in
frontend mode (ie., the data connection is already hot.) When
you speed to specify the DCE rate in your EXEBBS.BAT file use
the variable %1 and the com port is %2, etc.
-------------------------------------------------------------
SEND FAX MODE
-------------------------------------------------------------
If you wish to have BGFAX send a fax file that it has received to
another fax number or send a fax file that has already been
converted by Quick Link II or ZFAX.
BGFAX /SEND FAX0001.ZFX 893-9124
See the BGFAX.CNF file for more info, such as maximum amount of
busy signals and failures before exit, etc.
At this time, only previously converted fax files can be sent.
(i.e., ASCII files have to be translated to ZFAX .FAX format or
QLII .QFX format.)
BGFAX will exit with an errorlevel of 1 if the fax was not
successfully sent, or errorlevel 5 if everything worked okay.
-------------------------------------------------------------
INITIALIZATION MODE
-------------------------------------------------------------
If you want BGFAX just to initialize the modem, you can have it do
so with the BGFAX /INIT parameter. BGFAX will get the port,
speed, and initialization strings from the BGFAX.CNF file in the
directory specified by the BGFAX environment variable.
This mode is provided for people who need to use BGFAX in rear end
mode, but their Fido mailers (or BBS software) do not allow them
to use the long initialization strings required for fax usage.
-------------------------------------------------------------
REAR END MODE (FIDO MAILERS, ETC.)
-------------------------------------------------------------
Rear end mode is useful for those of us who are FidoNet members
where a Fido mailer is required to be running 24 hours a day. It
will be your job to figure out how to get your mailer to exit to
BGFAX when your modem informs the mailer a fax call is coming
through. (See the BGFAX.HLP file for hints on specific mailers.)
First of all, though, you need to discover what string your modem
sends when it has reliably mated with an incoming fax. My Supra
Fax Modem for example returns "FAX". All modems eventually report
"+FCON". In my opinion, it is better to trigger your mailer to
exit on "FAX" *IF* your faxmodem supports it. I've heard about
some brain dead modems to report "FAX" whenever an "ATA" is sent
to the modem. If your modem does that, do *NOT* use "FAX" as the
trigger string in your mailer.
Why is it better to use "FAX" as a trigger string? My Supra
reports "FAX" as soon as it hears the CNG tone from the remote fax
device. It takes about 1.5 seconds or so for the fax machine and
my Supra to mate, which gives BGFAX plenty and plenty of time to
load up and take the fax, even on slow computers. (It should be
noted that your mailer must exit *IMMEDIATELY* upon receipt of the
fax trigger string, because after those 1.5 seconds, if the remote
fax machine cannot mate, it will hangup!)
For those whose modems do not report "FAX", you will have to use
the "+FCON" string as the trigger string. One downside to this is
that it makes timing much more critical and you will probably miss
your chance of obtaining the remote fax ID string.
Your mailer should run BGFAX as soon as the trigger string comes
in the port. It should call BGFAX in the following manner:
BGFAX /how [faxpath port faxtype [pid]]
FAXPATH will be the directory where incoming faxes are to be
placed. PORT is a valid communications port from 1 to 4, or,
optionally, a hexidecial base address and IRQ formatted as
followed "3F8x5". Also, optionally, if the port has a bang, !,
following it, it will force the port to stay locked at the current
speed rather than shifting to 19200 on fax connects. (THIS '!' IS
TO BE USED ONLY FOR ZYXEL MODEMS, OR FOR PEOPLE THAT REALLY KNOW
WHAT THEY ARE DOING.) FAXTYPE is a single character 'Z' or 'Q'.
'Z' for ZyXEL ZFAX format, 'Q' for Smith Micro Software's Quick
Link II fax format.
The /how deal is the most critical switch. There are three
possible settings.
/FAX ... Modem reports "FAX" or "CONNECT FAX".
BGFAX will automatically detect whether it should
use Class 2 (Supra, Zoom) or the ZyXEL fax mode
based on the next message (ie, "+FCON" or "ZyXEL").
/FAST ... Modem reports "+FCON" (PPI, other Class 2 modems)
/FCON ... Try this option if /FAST doens't work.
/FCO ... Modem reports "+FCO" (USR 21.6K)
/FCOS ... Try this option if /FCO doesn't work.
/FZYX ... ZyXEL owners use this if /FAX doesn't work.
Here is a schematic of how each option behaves:
/FAX [ Supra, ZyXEL, i.e. all modems that report "FAX" ]
1. keeps port at locked DTE
2. waits for "+FCON" _or_ 2. waits for "ZyXEL"
3. drops port to 19200 3. waits for high CTS
4. waits for "OK" 4. sends <DC2>
5. sends "AT+FDR"
/FAST [ PPI, i.e. all modems that report "+FCON" ]
1. drops port to 19200
2. waits for "OK"
3. sends "AT+FDR"
/FCON [ PPI, use this if above options don't work ]
1. drops port to 19200
2. blindly sends "AT+FDR"
/FCO [ USR, i.e. all Class 2.0 modems that report "+FCO" ]
1. keeps port at locked DTE
2. waits for "OK"
3. drops port to 19200 _only if_ DTE rate is 38400
(leaves port alone if set at 19200, 57600 or 115200)
4. sends "AT+FDR"
/FCOS [ USR, i.e. all Class 2.0 modems that report "+FCO" ]
1. drops port to 19200 _only if_ DTE rate is 38400
(leaves port alone if set at 19200, 57600 or 115200)
2. blindly sends "AT+FDR"
/FZYX [ ZyXEL, use this only if /FAX doesn't work ]
1. waits for high CTS
2. sends <DC2>
When a fax is inbound, I call BGFAX in rearend mode with the
following command line for my Supra:
BGFAX /FAX C:\BGFAX 1 Z
The /FAX means that I used the modem response "FAX" as a trigger
for FD (see BGFAX.HLP for more details), C:\BGFAX is the path
where I want all faxes to be stored, "1" is the communications
port, and the "Z" represents I want faxes saved in ZyXEL's ZFAX
image format.
If you want to run BGFAX on a multinode system, an optional fifth
parameter can be used. This fifth parameter can be up to three
characters and it is called the PID. Example:
BGFAX /FAX C:\BGFAX 1 Z 99
The only difference between the command above and the previous one
is that rather than making a BGFAX.LOG, all log entries will be
written to a file called BGFAXpid.LOG, in this case, BGFAX99.LOG.
-------------------------------------------------------------
AFTER YOU RECEIVE THE FAX
-------------------------------------------------------------
NAMING CONVENTION
=================
The name of the fax file will be FAXnnnn.xFX where "nnnn" is a
number that is padded with zeros and "x" is the letter "Z" or "Q"
depending upon which fax format you save the file in. If you ever
see a BGFAX.TMP file in your directory, it should *NOT* be there,
as it should have been renamed in the FAXnnnn.xFX format. If it
is there, it means some kind of problem happened during the fax
reception.
FAXIN.LOG
=========
BGFAX creates a BGFAX.LOG file that contains a bunch of
information that is mainly only for debug purposes. A much
cleaner log file is called FAXIN.LOG and looks like this:
Date Time ET Bytes Rate Filename Remote Fax ID Pgs Notes
-------------------------------------------------------------------------------
12-21 11:52 00:42 18183 9600*FAX0001.ZFX Unknown 2 Finished
12-21 18:04 00:38 18182 9600 FAX0002.ZFX Unknown 2 Not Done
12-22 21:30 00:29 17793 14400*FAX0003.ZFX 7138939124 1 Finished
12-22 21:42 00:29 17541 14400 FAX0004.ZFX TRANQUILITY BASE 1 Finished
12-23 06:44 00:32 16941 9600*FAX0005.ZFX Null ID Received 1 Finished
12-25 17:21 01:22 107392 14400*FAX0006.ZFX 7132424708 1 Finished
The asterick between the fax DCE rate and the filename indicates
the fax was marked as high resolution. "Not Done" under Notes
means that BGFAX believed more pages were to have followed, but
were not actually received. "ET" is estimated time. Everything
else is self explanatory.
DOPRINT.BAT
===========
After you successfully receive a fax, BGFAX will exit with an
errorlevel of 4 and append (or create) a DOPRINT.BAT file.
CALL C:\BGFAX\EXEPRINT.BAT C:\BGFAX\FAX0085.ZFX
CALL C:\BGFAX\EXEPRINT.BAT C:\BGFAX\FAX0086.ZFX
You do not have to do anything with this at all, but it is
provided for those of you who wish to print faxes as they are
received. It will call the EXEPRINT.BAT file and pass it the
parameter with the path and name of the fax file that was just
received. If you are using Smith Micro Software's Quick Link II,
for example, and are one of those people that leave your printer
on 24 hours a day, your EXEPRINT.BAT file might contain this:
@echo off
printfax %bgfax%\%1 24pin.qlp
Remeber to delete the DOPRINT.BAT file after you process it.
-------------------------------------------------------------
HANGUP STATUS CODES
-------------------------------------------------------------
When BGFAX reports "Problematic fax reception", it will indicate a
fax hangup code, such as [+FHNG: 73]. This chart, taken from the
Supra CLASS_2.TXT fax command set documentation (which, I believe
was taken from the Rockwell Class 2 documentation), allows you to
match up the +FHNG message with its true meaning. For example,
+FHNG: 73 would indicate "T.30 T2 timeout, expected page not
received", which really does not say much, but it may give you
some clue. I don't know what most of these mean myself, so I
don't know whether it will provide you any luck or not, but, many
people asked that it be included, so here it is.
/-----------------------------------------------------------------\
| 2.0 Class 2 | Cause Description |
|---------------|-------------------------------------------------|
| 00-0F 0-9 | CALL PLACEMENT AND TERMINATION |
|---------------|-------------------------------------------------|
| 00 0 | Normal and proper end of connection |
| 01 1 | Ring Detect without successful handshake |
| 02 2 | Call aborted, from +FK/+FKS or <CAN> |
| 03 3 | No Loop Current |
| 04 n/a | Ringback detected, no answer (timeout) |
| 05 n/a | Ringback detected, answer without CED |
|---------------|-------------------------------------------------|
| 10-1F 10-19 | TRANSMIT PHASE A & MISCELLANEOUS ERRORS |
|---------------|-------------------------------------------------|
| 10 10 | Unspecified Phase A error |
| 11 11 | No Answer (T.30 T1 timeout) |
|---------------|-------------------------------------------------|
| 20-3F 20-39 | TRANSMIT PHASE B HANGUP CODES |
|---------------|-------------------------------------------------|
| 20 20 | Unspecified Transmit Phase B error |
| 21 21 | Remote cannot receive or send |
| 22 22 | COMREC error in transmit Phase B |
| 23 23 | COMREC invalid command received |
| 24 24 | RSPEC error |
| 25 25 | DCS sent three times without response |
| 26 26 | DIS/DTC received 3 times; DCS not recognized |
| 27 27 | Failure to train at 2400 bps or +FMS/ |
| | +FMINSP value |
| 28 28 | RSPREC invalid response received |
|---------------|-------------------------------------------------|
| 40-4F 40-49 | TRANSMIT PHASE C HANGUP CODES |
|---------------|-------------------------------------------------|
| 40 40 | Unspecified Transmit Phase C error |
| 41 n/a | Unspecified Image format error |
| 42 n/a | Image conversion error |
| 43 43 | DTE to DCE data underflow |
| 44 n/a | Unrecognized Transparent data command |
| 45 n/a | Image error, line length wrong |
| 46 n/a | Image error, page length wrong |
| 47 n/a | Image error, wrong compression code |
|---------------|-------------------------------------------------|
| 50-6F 50-69 | TRANSMIT PHASE D HANGUP CODES |
|---------------|-------------------------------------------------|
| 50 50 | Unspecified Transmit Phase D error |
| 51 51 | RSPREC error |
| 52 52 | No response to MPS repeated 3 times |
| 53 53 | Invalid response to MPS |
| 54 54 | No response to EOP repeated 3 times |
| 55 55 | Invalid response to EOP |
| 56 56 | No response to EOM repeated 3 times |
| 57 57 | Invalid response to EOM |
| 58 58 | Unable to continue after PIN or PIP |
|---------------|-------------------------------------------------|
| 70-8F 70-89 | RECEIVE PHASE B HANGUP CODES |
|---------------|-------------------------------------------------|
| 70 70 | Unspecified Receive Phase B error |
| 71 71 | RSPREC error |
| 72 72 | COMREC error |
| 73 73 | T.30 T2 timeout, expected page not received |
| 74 74 | T.30 T1 timeout after EOM received |
|---------------|-------------------------------------------------|
| 90-9F 90-99 | RECEIVE PHASE C HANGUP CODES |
|---------------|-------------------------------------------------|
| 90 90 | Unspecified Receive Phase C error |
| 91 91 | Missing EOL after 5 seconds |
| n/a 92 | < Not assigned > /--- Rockwell only |
| 92 -Note-> 94 | Bad CRC or frame (ECM {or BFT} modes) |
| 93 93 | DCE to DTE buffer overflow |
|---------------|-------------------------------------------------|
| A0-BF 100-119 | RECEIVE PHASE D HANGUP CODES |
|---------------|-------------------------------------------------|
| A0 100 | Unspecified Receive Phase D errors |
| A1 101 | RSPREC invalid response received |
| A2 102 | COMREC invalid response received |
| A3 103 | Unable to continue after PIN or PIP |
|---------------|-------------------------------------------------|
| C0-DF n/a | RESERVED FOR FUTURE STANDARDIZATION |
| E0-FF n/a | REVERVED FOR MANUFACTURER SPECIFIC USE |
| n/a 120-255 | RESERVED CODES |
\-----------------------------------------------------------------/
-------------------------------------------------------------
ACKNOWLEDGEMENTS
-------------------------------------------------------------
I would like to thank the following people for their assistance
during the beta test phase.
Bill Huther
Brian Wood
Russell Kroll
Ethan Brofman
Ed Lucas
...and many people from the InterNet and FidoNet.
-------------------------------------------------------------
SHAREWARE
-------------------------------------------------------------
THIS PROGRAM IS SHAREWARE.
If you use this program for more than four weeks you are required
to register it for its low cost of only $25 US DOLLARS.
Registrations encourage frequent updates.
If you are paying by check or money order, please print out the
REGISTER.FRM file, fill it out, and mail it to my address.
If you are paying by credit card (Visa, Mastercard, Discover or
American Express) you can (1) mail the form to me, (2) fax the
form to me, (3) netmail the form to me, or (4) call my BBS and
open door #6 and instantly register.
All people will have to call my BBS and open door #6 to pick up
the BGFAX.KEY registration key file.
I will mail (or air mail) registration letters out.
-------------------------------------------------------------
Regards,
B.J. Guillot
+290
View File
@@ -0,0 +1,290 @@
BGFAX 1.09 WED 22 DEC 93
-------------------------
The expiration date has been changed to March 31, 1994. (BGFAX 1.08
expired on December 31, 1993.)
ATTN: Gary Jipp I don't know your mailing address!
ATTN: Georges Bourne I don't know your mailing address!
ATTN: Cliff Reid The post office didn't like your address!
ATTN: Michael Kramm The post office didn't like your address!
:::::: NEW STUFF ::::::
0. If you DON'T own a USR modem, go to #2 ...
IF YOU PLAN ON USING BGFAX 1.09 WITH A USR MODEM, YOU MUST BE USING THE
BETA FIRMWARE (12/08/93 SUPERVISOR DATE)! If you are using the 09/20/93
Supervisor date, STAY WITH BGFAX 1.08 until the new firmware is publicly
released. There were many minor changes (bug fixes, improvements, etc.)
since the 09/20 date that make a big enough difference so that this
version will not work on the non-Beta models.
Now, anyone want to take a guess on how many netmail messages or voice
calls I get asking why people are getting unreadable faxes with BGFAX
1.09 and their 09/20 USR modems?? <grin>.
12/08 USR users: Note that you should be using +FNR=1,1,1 instead of
+FNR=1,1 which I was previously saying to use. (The extra one will
allow for the USR modem to report the inbound fax identity. I'm don't
think this works in the 09/20 models.)
Also, note that BGFAX no longer shifts to 19200 when receiving a fax in
Class 2.0 mode. EXCEPTION: If you are locked at 38400, it WILL shift to
19200 because of a small bug in the 12/08 firmware. (Remember that in
the 09/20 firmware, I believe the shift had to happen. So, again,
another reason why BGFAX 1.09 won't work with 09/20 models.)
Another note, in the 12/08 firmware, the fax is received in DIRECT bit
order, not REVERSED bit order (the case in 09/20). Direct bit order is
the order that the ZyXEL receives faxes into. Reversed bit order is the
order that most draft-based Class 2 modems receive into. (This is the
reason some USR beta testers experienced "unreadable faxes" when they
were using BGFAX 1.08).
1. BGFAX now adds Class 2.0 /SEND mode. AGAIN YOU MUST BE USING THE 12/08
BETA FIRMWARE TO TRY THIS OPTION! IF YOU ARE USING THE 09/20/93 MODEL,
YOU MUST BE BGFAX 1.08 (NO /SEND MODE).
2. Attempted to address problems people have reported with BGFAX and
Desqview. Previous versions of BGFAX were giving ticks away to DV while
receiving the fax. This is no longer done. Now, BGFAX only gives away
ticks when in /HOST mode waiting for calls. (It will also do an Int28h
while waiting for calls as well, in case your running /HOST mode under
an OS/2 DOS box.)
3. BGFAX will now not allow dialing of any number (in send mode) that
starts as "911". BGFAX will just pretend the modem is generating a
"BLACKLISTED" response code.
BGFAX (send mode) will now exit with an errorlevel of 7 on black listed
numbers. (This should never happen in the United States with the
exception of the "911" number that is internally blacklisted by BGFAX.)
4. BGFAX, when trying to send an outgoing fax, would not count "failed"
fax calls as "failed" if the connect had made it past the "+FCON" state.
Now, it should correctly incorrect the number of failed connects, thus, no
longer getting stuck in a loop calling some poor fax machine.
5. Now will support 43/50 line EGA/VGA text mode, by adding a /50 to the
BGFAX command line, i.e.:
BGFAX /FAX C:\BGFAX 1 Z /50
6. If you don't like to use environment variables, you can now specify the
pathname to the BGFAX.CNF file by using the "$" modifier. ex:
BGFAX /HOST /50 $C:\BATMAN\ROBIN.CNF
BGFAX /SEND C:\BGFAX\FAX0001.ZFX 893-9124 $C:\BATMAN\BATGIRL.CNF
The "$" modifer must be the last thing on the command line. Instead of
looking for a BGFAX.CNF file as specified by the BGFAX environment
variable, this will cause BGFAX to look for a "ROBIN.CNF" (in host mode)
or "BATGIRL.CNF" if sending.
The "$" modifer has NO EFFECT on rear end mode operation.
BGFAX 1.08 SUN 21 NOV 93
-------------------------
1. Added ZyXEL Class Fax Receive.
Now, BGFAX can directly use the ZyXEL's fax routines. Now, you can use
AT#B1+FCLASS=6 to initialize the modem in ZyXEL fax mode, and using the
regular "ATA" to answer the phone. Example rear-end command line:
BGFAX /FAX C:\BGFAX 1 Z
When BGFAX loads, it will see the "ZyXEL" string come out of your modem
and shift to ZyXEL fax mode, rather than Class 2 fax mode. If for some
reason, the above does not work, you can try:
BGFAX /FZYX C:\BGFAX 1 Z
You should use this parameter if your mailer exits on the string "ZyXEL"
rather than the string "CONNECT FAX".
2. Added FOSSIL support. If BGFAX's internal communication routines work,
there is no reason to use FOSSIL support. FOSSIL support does not
currently work with any send mode. To use FOSSIL mode use the following
method to your batch file that calls BGFAX:
If you are using a ZyXEL (or modem that does not require a shift to
19200 when receiving faxes):
BGFAX /FAX C:\BGFAX 1 Z
If you are using a non-ZyXEL modem:
BNU /L0=0
BGFAX /FAX C:\BGFAX F1 Z
BNU /L0=38400
Note the "F1" means for BGFAX to use the FOSSIL on COM1. The "/L0=0"
parameter on BNU means for BNU to "unlock the port". Why? Because, the
FOSSIL driver will *ignore* a DTE shift request when its in "locked"
mode. BGFAX will be unable to relock your port with the FOSSIL driver,
so that is the purpose of the second BNU line. It re-locks COM1 at
38400 (or whatever) rate you want to use.
3. New BGFAX.CNF option for sending. "DT=60". This sets a "dial timeout"
to 60 seconds. (i.e., when sending an outgoing fax, BGFAX 1.06 and
below would always cancel out after 40 seconds. Now it's settable.)
4. Added another test environment variable. "SET FAXDLY=17" will cause
BGFAX to hang loose for 1.7 seconds before doing anything. You should
never have to use this. The number specified is in deciseconds.
BGFAX 1.07 SUN 14 NOV 93
-------------------------
0. Registered users should have already, or real soon now, be receiving
a letter from me that explains the new registration logic in this
release. If you have not received your letter, call me voice at
713-893-9320 to receive your new registration code.
I do not have a valid address for Michael Waybright, Robin Davis, Gary
Jipp, Cliff Reid, Don Appleton and Dan Mancuso. You need to send me your
address so I can send you the new registration code!
1. Added /FCO mode for those of you with the new Class 2.0 USR faxmodems.
NOTE: BGFAX /SEND mode still does NOT work.
If /FCO does not work you you, try /FCON as a last resort.
For more information, open the HELPME.ARJ file and look at the
following files: USR-FD.TXT, BGFAX.USR and READ.ME
2. For those out you who hate the fax alert sound that BGFAX plays after
receiving a fax, this can now be suppressed, e.g.:
BGFAX /FAX C:\BGFAX 1 Z /NS
Where the "/NS" means No Sound.
3. Front end people must now start the program ...
BGFAX /HOST
or like this ...
BGFAX /HOST:14
Which will cause BGFAX front end mode to exit with an errorlevel of 6
after 14 idle minutes have elapsed. I am still planning a major
overhaul of the event structure of frontend mode, but have been busy
with other new features. This is a temporary solution.
If you type "BGFAX" alone, it will now give you a short help screen giving
some sketchy details :-) about all the / parameters.
4. For /HOST, /INIT, and /SEND modes. If you have an in=ATZ or an si=ATZ
in your BGFAX.CNF files, these lines can be taken out. Now, BGFAX will
always issue an "ATZ" command as the first init string performed. While
I don't really like to hardcode information like this into my programs,
it seems that on some fax modems, an "ATZ" while sometimes "unlock"
some faxmodems after they have "crashed". (Yes, isn't it great that our
modems are getting so complex they crash!) If this ATZ proves to be a
major problem, I can take it out, but I don't expect it to be, as almost
everyone was using an in=ATZ anyway.
5. Support for "Supra Silent Answer" added. THIS FEATURE IS NOT FOR BBS
SYSOPS, THIS IS FOR MR. JOE USER. Supra Silent Answer lets you have
your modem take faxes and your answering machine take messages. This is
useful because you don't have to buy a $80 fax switch box. You do
however have to buy an $8 "tele protector" (Part #43-107) from Radio Shack
if your answering machine does not automatically cut off when you pick
up an extension phone.
When installing the modem, DO NOT plug the answering machine into the
telephone jack on the back of the modem. Instead, do ONE of the
following:
a. Plug the answering machine and modem into different wall jacks
(i.e., jacks in different rooms.)
b. Plug the answering machine into a wall jack and the modem into the
answering machine.
To use BGFAX's silent answer mode, make a batch file:
SILENT.BAT
~~~~~~~~~~
@echo off
bgfax /host* c:\bgfax 1 z
if errorlevel 1 silent.bat
Where "c:\bgfax" is the directory for received faxes, "1" is the com
port, and "z" means ZFAX format.
BGFAX 1.06 TUE 14 SEP 93
-------------------------
Changes between BGFAX 1.0 Beta 5 and BGFAX 1.06 ...
1. People with EXAR based fax modems are having problems sending faxes.
The EXAR, at various points, spits out the response "CED". When dialing
out, BGFAX would see the "CED" response and think it was some kind of error
(such NO DIALTONE, BUSY, etc.) Now, BGFAX ignores the "CED" response.
2. Attempted to add support for the new USR Class 2.0 Courier faxmodems that
should begin shipping on or about September 20. At present, I have not
been able to get in contact with anyone that has one of these modems
readily available for testing, so I have NO IDEA if it will work with
them or not. I also heard that the NetComm modems in OZ may use Class
2.0 already? If so, I'd appreiciate a looksee from a NetComm owner.
3. New things in the BGFAX.CNF file for frontend, /INIT, and /SEND people:
tc=ATHMH1
; tc ... string bgfax sends to modem to terminate communications
sw=10
; sw ... seconds to wait before redialing when sending faxes
ky=P,170
; ky ... alt-key, errorlevel to exit on when waiting for calls
Also, make sure your ds= entry is set to ds=ATDT *instead of*
ds=AT+FCLASS=2;DT as was included in the BGFAX.CNF on Beta 5. Because
of the changes done for Class 2.0 support, any +FCLASS entry you set in
the ds= entry will make BGFAX fail. It will handle the FCLASS itself.
4. Added optional parameter when sending faxes. Normally to send you do it
like so:
BGFAX /SEND C:\BGFAX\FAX0001.ZFX 893-9124
You can still do that, or, you can also tell BGFAX to force the maximum
fax rate down to a certain speed like so:
BGFAX /SEND:7200 C:\BGFAX\FAX0001.ZFX 893-9124
Valid rates are 2400, 4800, 7200, 9600, 12000, and 14400. When you use
the rate option on the /SEND parameter BGFAX will *NOT* check your modem
capabilties, so it will assume you know what your doing. (For example,
telling a faxmodem with a maxmium rate of 9600 to fax at 12000 or 14400
may yield unpredictable results.)
5. In /SEND mode, if a fax is successfully transmitted, BGFAX will now exit
with an errorlevel of 5 instead of no errorlevel. (It will continue to
exit with an errorlevel of 1 if transmission is unsuccessful.) Also,
BGFAX will now reserve all single digit errorlevels for future use. So
make sure that if you use any events in front end mode that the
errorlevel number is greater than 9.
6. The way the DOPRINT.BAT is handled has changed again. Here is a sample:
CALL C:\BGFAX\EXEPRINT.BAT C:\BGFAX\FAX0158.ZFX
CALL C:\BGFAX\EXEPRINT.BAT C:\BGFAX\FAX0159.ZFX
CALL C:\BGFAX\EXEPRINT.BAT C:\BGFAX\FAX0160.ZFX
As you can see, every time a fax is received, the DOPRINT.BAT file is
appended. Remember to delete the DOPRINT.BAT file after you process it.
7. BGFAX was incorrectly reporting "Finished" on all documents in the
FAXIN.LOG file whether all pages were received or not. Fixed.
8. For BGFAX frontend users ... When BGFAX goes to its waiting for event
mode, it will now busy out the telephone line instead of letting the line
ring as it did before.
9. When I fixed the Beta 4 EOL bug, I introduced a new bug. (These EOL
things aren't really bugs, just logic errors.) This version should have a
perfect EOL determination engine. (i.e., to determine whether the
two-to-three byte sequence is an End-Of-scan-Line marker.)
+182
View File
@@ -0,0 +1,182 @@
.DOCUMENT BlueBEEP Documentation
.TOPIC Editorial
.SUBTITLE Hello and goodbye - an adventure 2 years in the making
- Welcome to BlueBEEP 1.00 -
Today, it's been two years since I sat in my room in Hamburg
and casually decided that I am going to start the next couple days
on writing a little blueboxing tool for myself and my friends. It
should be a project that changed the world; mine, and those of others.
Five days later, the first version, 0.01 was finished and I called
my friend uptown. "I wrote a little bluebox in Pascal. You want me to
send it over to you so you can check it out?" The next day he rang me
up in the evening and told me that he liked it a lot, and if I could
add a couple of features. He also suggested that I should give it a try
and upload it to a local warez board so we could see if other people
liked it too.
A warez board. Holy shit.
About a week later, I called my local uucp email provider to see if
that girl I was writing with already sent me a reply. When I logged on,
I didn't find 1 message.
I found 57.
A total of fifty-seven people from all over the world had sent me
letters about how much they liked BlueBEEP and what kind of features
they were missing direly from other, older blueboxes that were out. Or
those cool menus they had in that Amiga bluebox. Or this. Or that. It
was out of control. As much as everyone rags on the warez scene, it's
sure as hell the best digital junkmail network you can imagine; you
throw something into it, and thousands of warez puppies make sure it
ends up in everybody's front yard. God bless WaReZ.
The overwhelming interest in the program never subsided. If
blueboxing died in one country, other people in a different country
finally figured out what they could do by shooting some signals down to
a remote CCITT long-distance switch. It was seeping down from the more
elite countries all the way to the bottom: USA, Canada, Western Europe,
then Poland, Hungary, Yugoslavia, Brazil.. It blew me out of my chair.
While I kept on developing BlueBEEP, I received a clip from a norwegian
newspaper in the mail. A big article, with an image that pictured a
very concerned looking guy in a suit in front of a PBX system. From the
norwegian blah underneath I could only tell my handle was mentioned.
And BlueBEEP. In a huge double-page article with screen-shot. WTF! The
english translation that was neatly made on a laser printer, made me a
little bit wiser.
"SHELL NORWAY IS SUFFERING MAJOR LOSSES FROM A PROGRAM THAT IS BEING
PASSED AROUND IN THE NORWEGIAN COMPUTER UNDERGROUND FOR UP TP Nk. 20000
PER COPY. THE PROGRAM, WITH THE RIGHT SETUP, ENABLED THE USER TO USE
SHELL'S TELEPHONE SWITCHING SYSTEM TO MAKE FREE PHONE CALLS AT SHELL'S
EXPENSE. BLUEBEEP, AS THE PROGRAM IS CALLED, WAS CREATED BY A COMPUTER
HACKER FROM HAMBURG, GERMANY WHO GOES BY THE NAME OF "ONKEL DITTMEYER".
LOCAL INVESTIGATIONS IN GERMANY ARE STILL PENDING AT THIS TIME..."
The suit on the picture threw me evil looks, and I sat down. Here we
are, giving people free tools to explore the phone system, learn, and
trade K-RaD 0DaY WaReZ for free! Then some asshole turns it into
white-collar crime and we get blamed for all the shit. Luckily, in
the long run, nobody ever came to my house and asked me to "move it"
downtown. Our "local investigators" must have been too busy scooping up
the guys that got jumped by some Turks last night. Busy Police is one
of the few good things about living in a crappy neighborhood.
However, BlueBEEP made it through. Maybe not in a steady flow, but
I always managed to come up with something new and throw it into the
big junkmail machine. In December '93, I flew to the states on some
saved-up money and attended HoHoCon. I had just completely rewritten
BlueBEEP from pieces, cluster by cluster, from my hard drive that had
just crashed. It took me about 5 days of coding - without a break. The
combination of loud music, coffeine and painkillers is a productive
one,I was just comfortably feeling numb while and about 2 weeks after
I did it. All programmers must have these moments. In Texas, a couple
of the people there had already played around with the program, and it
was up on most local h/p bbses there. I was supposed to talk about the
program, but by the time my english was bad and I was too chicken to
go up and dare to bore 350 hung-over and grouchy hackers! (sorry dFx)
DrunkFux should get some credit here, because I always harrassed him,
both '93 and 94, to give me a speaker slot and I never took him up on
it at the actual con. I better watch out now! But you can't see him
coming, each time I see him he has a different hair color. He'll
probably print my name on the TOP TEN CHICKEN LIST when he makes next
year's HoHo-shirts. Eye phear!
After that, I couldn't really program too much because my life
turned out of control, and I never had the time and the piece of mind
to focus on and do some good programming. Somehow, I managed to release
0.09 and 0.10, 0.10 with some really interesting improvements, like the
internal file structure etc. Since Summer '94 or so, nothing much was
done on the code because until recently I couldn't get the 3 necessary
components together: Inspiration, Peace of Mind and Hardware. Now that
my life is somewhat calmer now, my straightforwardness and my focus
has returned but BlueBEEP - for a long time now - is basically sucked
dry for improvements. There is no useful feature that could be added.
If it was there and it made sense and it was possible to realize it,
some user let me know about it and it has been implemented. For a
couple months already, there are no more useful suggestions coming in
on how I could be improved. Want a wardialer? Try ToneLoc. Want a
terminal? Try Telix. Want cryptostuff? Try PGP. Nothing really made
sense, and that's the state the program is in right now. With this last
version, I just added some tiny little details and fixed some bugs. One
thing is special about it though:
IT IS THE LAST RELEASE
I will make no further improvements, bug fixes or releases of this
proggy. For fairness, learning and to keep the hacker spirit of the
50's and 60's alive, I make the whole unabridges source code available
to everybody for improvements, very like the way it was done at MIT
when programming was coming to life back in the days.
If you would ask me if I think that publishing the source code is
a good idea, I would have to say no. It is unevitable that some teenage
lamers from all over the world are going to come out with bad bluebeep
hacks that don't really work, that people are gonna steal parts of this
code and use it without giving me the props, and that people are going
to flame at me on how bad my programming sucks (feel free). It is
definitely not smart, but it's Right. And, tons of people are bickering
for linux/windows/os2/insert_os_name_here versions. Well, go ahead,
port the thing (I did't tell you it was fun, remember that!) and give
me the credit. I am not good enough a programmer to port it into all
those environments, but if you think you can do it for just one, go
right ahead. Unless anyone is going to sell this code or portations of
it, it's cool with me. Just let me know if you can, OK?
Some acknowledgements to people who really helped along the way:
Prime/Spyce - for getting me into boxing in the first place
Urmel - for making some cool adlib sound routines
ECR - for stealing them from Urmel and giving them to me :)
LowCyl - who betatested it in the rough WaReZ reality, 24/7.
Tr8or - who always came up with something good.
Werdohl M.R. - for keeping all of us entertained at all times
DrunkFux - for his talent in organizing cool events
Beetle - who opened my eyes on many ideas and helped me manage
Carlos (C.A.T) - for running the BlueBEEP Fan Club in Brazil
and wife
#phreak/#hack - stuck on a higher level (gnawt) try #k0dek1dz
Pluvius - just for being a cool contact
and all those that cheered, complained, suggested, rumored, uploaded,
ftp'ed, traded, toted, spread, criticized and used BlueBEEP all along.
Happy Birthday and goodbye.
- Onkel Dittmeyer, April 1st, 1995
onkeld@earth.planet.net
.END
.TOPIC GAWD-DAMN!
.SUBTITLE Something came along and nuked the docs!
|RGAWDDAMN, |WSHITFUQ, |YMUTHAFUQIN JEZUZ KRIST! |ZBVERFLIXT 'N ZUGENAEHT!!!!
Just when I was editing this file tonight, a straight text file about
90k in size, my editor crashed while saving the file and completely wiped
it out. However, the documentation of the source code was not affected and
you can still read it as source.doc (plaintext). I will re-write and release
the fixed documentation in the next couple of days; however because I want
to keep my promise of having the source out on April 1st, BlueBEEPs second
anniversary, I am releasing it anyway. You can grab the full documentation
in a week or so at ftp.fc.net, and I bet it will also be traded around on
#phreak/#phreak/#warez*. Stay tuned. The editorial survived the crash; chew
on that in the meantime ;-]
|COnkel Dittmeyer / onkeld@planet.net
|BApril 1st, 1995
.END
.ENDDOC

+199
View File
@@ -0,0 +1,199 @@
#############################################################################
# #
# #### #### ### # ##### #### #
# # # # # # # # # #
# ### # ##### # ### # # #
# # # # # # # # # #
# #### #### # # ##### ##### #### #
# #
# #### ##### ##### ##### ### #### #### #
# # # # # # # # # # # # # #
# #### # # # # # ##### #### ### #
# # # # # # # # # # # # #
# #### ##### # # # # # # # #### #
# #
# Trainer #
# #
# by #
# #
# Tumblin / Bodies In Motion #
# #
#############################################################################
Hello there, this doc file is intended to be a trainer for doing
scaled bitmaps. The routines accompanying this file are not meant to be as
fast as possible, but clear and easy to learn what is going on when doing
this effect. With this in mind, lets put on our thinking caps and get our
hands dirty!
Okay, first a little bit of background theory. The basic algorithm
that my implementation of scaled bitmaps is based on is the infamous
Bresenham's Algorithm. This is the favoured technique for drawing lines
very quickly. But for scaled bitmaps, we modify it a little so that we can
take a column of pixels and stretch them out or squash them down. Lets go
through an example that we could use to draw a scaled bitmap, in the form of
a vertical column of pixels on the screen by taking pixel colors from a one
dimensional array.
The following pseudo code example will *stretch* a source bitmap to a larger
destination bitmap (a 64 pixel bitmap to a 124 pixel bitmap):
-----------------------------------------------------------------------------
source_height = 64
start_y = 0
end_y = 123
destination_height = end_y - start_y
error_term = 0
source_index = 0
screen_x = 0
screen_y = start_y
do
{
color=bitmap[source_index]
draw_pixel(screen_x,screen_y)
error_term = error_term + source_height
if error_term > destination_height
error_term = error_term - destination_height
source_index = source_index + 1
endif
screen_y = screen_y + 1
} while screen_y < end_y
-----------------------------------------------------------------------------
Here's the explanation.
In the do loop, you start out by grabbing a color from the source
bitmap that you want to scale onto the screen. You then draw that color on
the screen at the current screen coordinates. Then there is this error_term
thingy. What it is used for is to help us decide when it will be time to
change the index into the source bitmap so that we can pull out the next
color. What you do is you add the height of the source bitmap to the error
term, then you do a test to see if the error term has exceeded the size of
the destination bitmap. If it did, then you subtract the size of the
destination bitmap from the error term and also increase the index into the
source bitmap. After this decision is done, you increase the screen
coordinate. You keep repeating this do loop until the screen coordinate is
equal to the ending coordinate that you specified at the beginning. The
whole gist of scaling a small source bitmap to a larger destination bitmap is
to always increment the screen coordinate through each time through the loop
and only increment the index to the source bitmap when it is necessary to.
Every pixel in the source bitmap will be drawn at least once, even repeated
if need be. Just think in your mind that you are "stretching" the bitmap.
Pretty simple really.
Now here is what it would look like if you wanted to *shrink* a source bitmap
to a smaller destination bitmap (a 101 pixel bitmap to a 74 pixel bitmap):
-----------------------------------------------------------------------------
source_height = 101
start_y = 0
end_y = 73
destination_height = end_y - start_y
error_term = 0
source_index = 0
screen_x = 0
screen_y = start_y
do
{
color=bitmap[source_index]
draw_pixel(screen_x,screen_y)
error_term = error_term + destination_height
if error_term > source_height
error_term = error_term - source_height
screen_y = screen_y + 1
endif
source_index = source_index + 1
} while screen_y < end_y
-----------------------------------------------------------------------------
This is the same idea as before but with a few changes. In this one, you
grab a color from the source bitmap and draw it on the screen like in the
previous example. Then you add the size of the destination bitmap to the
error term. If the error term exceeds the size of the source bitmap then you
just subtract the size of the source bitmap from the error term and also
increment the screen coordinate. After the if statement, you manditorialy
increment the index into the source bitmap. So the gist of scaling a larger
source bitmap to a smaller destination bitmap is to always increment the
index into the source bitmap, but only drawing the pixels that are necessary.
This means that some of the pixels in the source bitmap will be skipped.
Now then, how do you scale a whole rectangular source bitmap to a
rectangular destination bitmap??? Well, you have to combine the techniques
above to take care both cases of drawing vertically stretched single columns
of pixels. Okay, so that takes care of drawing scaled vertical lines, but
what about the horizontal dimension? You basically use the same routines
explained above, but switch the x's with y's and use the index into the
source bitmap to select which column of the source bitmap you want to work
with and then use the very same routines that we used before. Actually
scaled bitmaps are nested Bresenham loops. Just remember that when you are
doing your routines, make sure you cover the two types of vertical scaling
(large to smaller, and small to larger), and the two types of horizontal
scaling (large to smaller and small to larger). Oops, actually there is one
more additional case, I forgot to mention the case where the source and
destination bitmaps are equal in size! But that is *easily* accounted for.
All you have to do is let one of the four cases also include an equality in
the sizes of both dimensions of the source and destination bitmaps. Another
thing to remember is that when you are done doing a vertical line, reset the
index to the source bitmap back to zero and reset the screen y coordinate to
the top again. All of this will be clear when you see the complete source
code ;-)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Here are some tips for getting the code compiled:
My system consists of a 486DX 33MHz, Trident 8900 SVGA 1MB, 120MB hard drive,
Sound Blaster Pro, and I use Turbo C++ 3.0.
First you need a copy of XLIB06.ZIP
Unzip this file into a directory and then edit MAKEFILE to change the line
that says MODEL=s to MODEL=l (I used the large memory model to compile this
demo). This is what might have caused some people some confusion when they
tried to compile my previous release VECTBALL.ZIP. I included the
VECTBALL.PRJ file with it and I had the memmory model on the Large setting.
XLib 6 was released with the memory model set to Small. Please make sure
that the memory models match!
I might also mention that I also had to change the line that says CC=bcc to
CC=tcc (I compiled it with my Turbo C++ 3.0 and worked fine).
Next type MAKE and watch XLib 6 get compiled before your very eyes. When I
did it myself, I noticed some strange warnings fly up the screen, but they
didn't hurt anything one bit. I guess one of the demo programs didn't get
compiled, but the most important thing is that the XLIB6L.LIB file got
compiled okay.
Now you create a project file by typing BC BMSCALER.PRJ if you have the
Borland C++ 3.1 compiler or TC BMSCALER.PRJ if you have the Turbo C++ 3.0
compiler.
Next you add the BMSCALER.CPP and XLIB6L.LIB files into your project.
Use the Options/Code Generations option and select the Large memory model.
When you are done that, you should be all ready to compile the BMSCALER.CPP
by using Complile/Make, or compile it and run it in the IDE by doing a
Compile/Run.
Play around with the call to the bmscaler function and use some strange
coordinate combinations, they can make some pretty interesting visual effects.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
I guess that about wraps up my discussion on scaled bitmaps. If you have
any questions or comments, email me.
If you use this code in any demos you write, greet me, or send me a cool
post card from your country.
Tumblin / Bodies In Motion
+25
View File
@@ -0,0 +1,25 @@
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º W E L C O M E T O X F D I S K º
ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
º º
º ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ This disk contains information on partitioning º
º ³ÛÛ ÛÛ ÛÛÛÛÛÛÛÛ³ your fixed disk. Get more space on your fixed º
º ³ÛÛ ÛÛ ÛÛ ³ disk by using the space the DOS wastes. Don't use º
º ³ ÛÛ ÛÛ ÛÛ ³ the FDISK program that comes with DOS. It will º
º ³ ÛÛÛÛ ÛÛÛÛÛÛÛÛ³ waste valuable sectors on the first track of your º
º ³ ÛÛ ÛÛ ÛÛ ³ fixed disk. If you have two fixed disks, FDISK º
º ³ÛÛ ÛÛ ÛÛ ³ will waste the entire first cylinder of your disk. º
º ³ÛÛ ÛÛ ÛÛ ³ º
º ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Read the information in the DOC file carefully º
º ³ X F D I S K ³ before using the XFDISK and PREPARE programs!!! º
º ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º
º You will be clearing the data on your fixed disk, º
º so make sure you have a current backup of ALL data on your disk. You º
º will NOT be able to retrieve the data once the disk has been partitioned º
º using XFDISK. Now, remove this disk and boot up normally with DOS. º
º º
º I hope you will enjoy XFDISK and your increased fixed disk capacity. º
º º
ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
º Entire contents Copyright (C) 1991 Dennis W. Person º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼöööööööööööööööööööööööö
+613
View File
@@ -0,0 +1,613 @@
============================
Bordello!
============================
COPYRIGHT 1992,93 T&J Software
One of the T&J Software Collection of multi-BBS door programs.
Supporting PCBoard, Wildcat!, Gap, QBBS, RBBS, Spitfire,
UltraBBS, Telegard, TriBBS, and Remote Access.
VERSION 1.42 December 7, 1993
By
Tom & Jane Wildoner
397 West Broadway
Jim Thorpe, PA
18229
VOICE (717)325-9480
*between 5:30 & 10:00 p.m. Eastern Time
From
The T&J BBS
(717)325-9481
1200/2400/9600/19200/38400
24 Hours/Day
LATEST VERSION:
~~~~~~~~~~~~~~~
Please call the T&J BBS for the latest version of this program.
LEGALITIES:
~~~~~~~~~~~
THIS SOFTWARE AND ACCOMPANYING MATERIALS ARE DISTRIBUTED "AS IS" WITHOUT
WARRANTY, EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO ANY
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
IN NO EVENT SHALL ANYONE INVOLVED WITH THE CREATION AND PRODUCTION OF THIS
PRODUCT BE LIABLE FOR INDIRECT, SPECIAL, OR CONSEQUENTIAL DAMAGES, ARISING
OUT OF ANY USE THEREOF OR BREACH OF ANY WARRANTY. ONCE REGISTERED, ANY
DISTRIBUTION OF THE REGISTERED KEY WILL INVALIDATE YOUR KEY IN ALL FUTURE
VERSIONS OF THIS PROGRAM AND NO PRODUCT SUPPORT WILL BE GIVEN. DISTRIBUTING
A REGISTERED KEY FILE WILL ALSO BRING ABOUT CRIMINAL CHARGES.
DISTRIBUTION:
~~~~~~~~~~~~~
You may make this file available for downloading from your BBS or you may
upload it to any BBS of your choice, provided that you do not make any
changes to the contents of the archive (ZIP file). The archive and its
individual contents may not be used by any service that charges any money
whatsoever, without the written permission of the author.
PROGRAM DESCRIPTION:
~~~~~~~~~~~~~~~~~~~~
Welcome to the game of Bordello! by T&J Software!
Basically, you are running your own whore house and fighting against other
players to attain the most profitable house by the end of the month
(or past the end of the month depending upon how your SysOp has the
door configured)! You can search for whores to work in your house (you
may only have 10 at any one time), hire thugs to fight other players
and to help protect your house, and many other features you will soon
become very familiar with!
Your sysop sets a fixed number of what we call "game days". Let's assume
your sysop has it set for 30. This means you may open your house for
business 30 times during all your plays for that day. You do this by
selecting "N" for next day. The amount of money made depends upon each of
your whore statistics and your house level. The higher your house level,
the more money your girls will make. Be warned, if a particular
whore has a disease, her money earned will only be half normal!
As your hitting the NEXT DAY option and upgrading your whore house, be
warned that the police may bust your house if you haven't payed them
off enough money! And, if you don't have enough money to pay the fine,
you're finished! You'll have to start over from SCRATCH!!
When attacking other players using the covert actions, first view the
top ten players using the "V" command from the main menu, then select
"T" for TOP TEN. This will let you know who the current top players are!
The top ten are adjusted after each attack and everytime you view it!
Watch yourself move up and down as you play!
The top scores are determined using the following formula listed below.
Your overall score, or networth, is determined like this:
CASH + ($1,000 x THUGS) + (HOUSE LEVEL AMOUNT)
HOUSE LEVEL AMOUNT= the combined total you've spent to
upgrade your house. Let's say your house level is 4, the
value of HOUSE LEVEL AMOUNT= $30,000
$5,000 to go to Level 2+
$10,000 to go to Level 3+
$15,000 to go to Level 4= $30,000
This should help those diligent players who have played all month long
building there house level!
On the main menu, you are presented with all the vital statistics you
need including: cash, condoms, networth, police payoff amount, etc.
Bordello resets with the first player of the new month. The object of the
game is simple, end the month with a higher networth than your opponents!
Let's start off by going over the MAIN MENU commands:
A- ADJUST PHRASE: Changes the phrase you say to other players after
a successful covert action!
B- BUY CONDOMS: You may buy condoms in various lot sizes for your
girls to give to the guys during the NEXT DAY option. If your girls
run out of condoms, there is a percent chance they will contract
a disease. If they contract a disease, they will make less money
during the NEXT DAY option. Disease can be cured by the DOCTOR
(see the DOCTOR description below). Condom prices vary on a daily
basis!
C- COVERT ACTIONS: Covert actions will be described in detail below.
D- DOCTOR: Use the doctor to check your girls periodically! If you
run out of condoms your girls can contract diseases. Other players
can send thugs to infect your girls also! Read your MESSAGE file
regularly to see if other players have done this! The doctor will
charge a flat fee just to examine the girls, then, a screen will
come up listing your girls. A 'Y' in the disease column will confirm
that the girl has a disease. It will cost you 10% of the girls
total income to heal her.
F- FIND WHORE: Use this option when you have less than 10 girls in your
house. You may only find 3 girls per play! You will show up in a bar
type setting and are offered two choices: either LOOK for a girl or
go back to the MAIN menu. When you choose LOOK, a girls statistics
will be presented to you. You may either LET her go or KEEP her. No
matter what you choose, you lose one pickup for the that particular
play. Remember, you only get three! If you choose KEEP, she is added
to your whore house. You may always DUMP a girl in the WHORE INFO
section.
G- GET THUGS: Thugs are used to protect your whore house from other
players and to attack other players! Thugs always cost $1,000
apiece. Try to keep as many of these guys around as possible!
H- HELP: Brings up this help file.
M- MESSAGE AREA: Use the message area to leave messages to other
players and to read your messages. Every time a player performs a
COVERT action against you, a note will be added to your message
file telling you who did it and what they did! You may also KILL
your message file after reading it.
v1.2 has a new feature here -- the grafitti wall. You may enter
messages on it for all to read! The grafitti wall is washed off
every 7 days.
N- NEXT DAY: This is where you open your doors for business! Each of
your whores will earn so much money based upon their looks, breast
size, disease, and your whore house level. The higher these stat-
istics, the more they will make. Remember, if any of your girls run
out of condoms, they can get a disease (there is a 5% chance for each
girl without a condom). Also, this is where the police could come and
bust your operation if you haven't paid them off enough! One BIG
NOTE here -- if you don't have enough money to pay the police fine,
you are out of the game and have to start over again!!
P- PAYOFF POLICE: This is where you can payoff the police to try and
get them to leave you alone! The more you pay the better the chance
they will leave you alone. Every time you UPGRADE your whore house
a level, the payoff amount is set back to ZERO! We won't tell you
what the KEY amount of money is, but it doubles for each house level
you have! The police payoff amount for each house level varies on
a monthly basis (just to make things interesting).
Q- QUIT GAME:
R- REDRAW SCREEN: In case of line garbage....
S- START OVER: If you feel like you are doing very poorly, you can
always use this option to start again! You must keep the same ALIAS
name however.
T- TRANSFER MONEY: With this option, you may transfer funds from
your cash and give it to another player. Helpful for team play!
U- UPGRADE WHORE HOUSE: Your whore house starts out at level ONE and
goes up to level ?!@# -- this version has no set MAXIMUM level
that you can attain! The higher the house level, the more money
your girls will make. Going to the next house level will vary
according to the level you are coming from. It's not wasted money
since the money you spend now counts towards your NETWORTH!!
V- VIEW HIGH SCORE: You are then presented with either viewing the
all time high scores or the top ten listing.
W- WHORE INFORMATION: Use this option to view your whore statistics!
From this menu you may choose to DROP a whore if you wish. In order
to DROP a whore you will have to pay her to leave.
X- EXPERT MENU: Use this option to use and EXPERT main menu. This should
help speed up play with 2400 baud users!
COVERT ACTIONS
In the COVERT actions menu you will have the following options:
1- Steal money from another player.
2- Steal a whore from another player.
3- Sabotage another players whore house.
4- Pillage another players girls.
5- Spy on another player.
You MUST have some thugs to perform any of these options! If the opposing
player has more thugs than you, a fight ensues! (see the FIGHT section).
If the opposing player has fewer thugs than you, there will only be a
percent chance of his thugs fighting yours. If you successfully steal
money from another player, it's added to your cash and deducted from
his, etc... (this is after you break the combination!!)
Sabotaging a persons whore house will deduct level(s) from it (if it's
greater than level ONE). There is only a percent chance that you will
manage to do this. Pillaging another players girls will infect them with
a disease!
In order to steal a girl from another player, you MUST have a vacant
slot in your whore house!
Spying on another player will reveal information about him that you
may find useful!
FIGHTING
In some cases, you must fight the other players thugs in order to perform
your covert action! If the fight menu comes up you'll see the following
information and options:
You may choose to ATTACK or RETREAT.
You will see your THUGS left and power left and your opponents. If you
select A for ATTACK, a random number is generated for each player. If this
random number is LOWER than your power, you score a HIT! The same works
for your opponent. Each successful HIT will deduct from 1 to 10 points
of power from the other player.
For every 10 points of power lost, one thug is killed in the fight.
This works for both you and your opponent!
Once the power of either player goes to ZERO the fight is over and you
reap the benefits of the attack!
In v1.2, the opponents thugs are regenerated after fighting (as long
as he has money to pay for them!!)
NOTE:
~~~~~
When you register, you will receive a new BORDELO.KEY file. Your users
are only allowed THREE game days and can only enter the door ONE time
per day until registered. By running BORDELO LOCAL, the SysOp can play
the door without any crippling to better evaluate the door. Be sure your
logon name is SYSOP
FEATURES:
~~~~~~~~~
--- Desqview Aware.
--- COM0-15 support and non-standard IRQ's.
--- Colorful ANSI screens.
--- Chat function with automatic screen redraw.
--- Drop to DOS with automatic screen redraw.
--- NO BRUN module needed for play.
--- BETA tested on many different boards.
--- Will return to BBS on dropped carrier.
--- Will TIMEOUT a player after 5 minutes of no activity.
--- Use of HOT KEYS while in the door.
--- Support BBS available.
--- TOP 15 bulletins.
--- SysOp configurable.
INSTALLATION:
~~~~~~~~~~~~~
Run the utility program by typing BORDUTIL to easily configure
the door!
Next, RESET the DOOR!! Select number 2 from the UTILITY program! This
will reset everything from scratch.
Next, select number 3, set the BORDELO.CFG file -- answer all the
questions here.
Next, select number 4, set the SYSOP.CFG file. This will ask you
how many men per day per player, path to your color bulletin, path
to your ASCII bulletin, how many times they can enter the door per
day, etc...
If you set the number of game days 15 and the number of times they may
enter the door to 3, it means they get 15 game days for the entire DAY!
If they use 10 game days during their first entry to the game, the second
time they enter the door they will only have 5 left.
CONFIGURATION: (Your BORDELO.CFG file)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
** PLEASE CONSULT YOUR OWN BBS DOCUMENTATION FOR SPECIFICS!!!! **
Example configuration file for PCBOARD.SYS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\PCB\PCBOARD.SYS <=- (Full pathname of your PCBOARD.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for USERS.SYS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\PCB\USERS.SYS <=- (Full pathname of your USERS.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for DOOR.SYS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\BBS\DOOR.SYS <=- (Full pathname of your DOOR.SYS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for USERINFO.DAT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
** If you are running Wildcat! 3.xx use DOOR.SYS!!!
C:\BBS\USERINFO.DAT <=- (Full pathname of your USERINFO.DAT file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
NOTE: DOOR.SYS must be in the SAME directory as USERINFO.DAT
Example configuration file for CALLINFO.BBS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\BBS\CALLINFO.BBS <=- (Full pathname of your CALLINFO.BBS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for DORINFOx.DEF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\BBS\DORINFOx.DEF <=- (Full pathname of your DORINFOx.DEF file
where 'x' is the BBS Node number.
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for SFDOORS.DAT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\BBS\SFDOORS.DAT <=- (Full pathname of your SFDOORS.DAT file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
Example configuration file for GTUSER.BBS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\BBS\GTUSER.BBS <=- (Full pathname of your GTUSER.BBS file)
T&J Software <=- (Change this to your BBS name)
Tom <=- (The Sysop's first name)
Wildoner <=- (The Sysop's last name)
1 <=- (COM port number - defaults to 1)
1 <=- (Node number - defaults to 1)
Example Batch File
~~~~~~~~~~~~~~~~~~
A sample batch file similar to the following:
ECHO OFF
CD\DOORS\BODELLO <=- Switch to the door's Directory.
BORDELO BORDELO.CFG <=- Execute the door program and pass the
configuration filename to the program.
CD\PCB <=- Go back to PCB DIR when user exits door.
BOARD <=- Restart BBS.
This Door is multi-node compatible so you may run more than 1 node from
the same .CFG file provided the path to your system file (DORINFOx.DEF,
CALLINFO.BBS, etc) is exactly the same unless you are using environment
variables, (q.v.)
Environment Variables
~~~~~~~~~~~~~~~~~~~~~
PCBoard automatically creates the %PCBDRIVE% & %PCBDIR% environment
variables. Non-PCBoard systems may also use these variables by including
the following in either your BBS batch or AUTOEXEC.BAT
SET PCBDRIVE=C: <- Drive letter of your BBS files
SET PCBDIR=\BBSDIR <- Path to your BBS files
Then in your Door .CFG file instead of putting C:\BBSDIR\DOOR.SYS, you
would put %PCBDRIVE%%PCBDIR%\DOOR.SYS. This allows you to use just one
.CFG file for multi-node operation!
To specify a non-standard IRQ, put the IRQ number after the .CFG on the
command line. For example:
BORDELO BORDELO.CFG /5
or using the PCBDRIVE procedure: SET IRQ=5 and use
BORDELO BORDELO.CFG /%IRQ%
This tells the program to use IRQ 5 instead of the standard IRQ.
Had reports of conflicts when using non-standard IRQ's on Novell/Netware
systems. Seems Novell also uses the / character so something went screwy
somewhere. So I added the * (asterisk) which may be used instead of the /
in case of a conflict. In other words, /%IRQ% and *%IRQ% will both work
and are interchangeable.
When specifying the location of the system file on line 1 of the doors .CFG
file, you may use the environment variables %pcbdrive%, %pcbdir%, %pcbnode%,
and %wcnodeid%. Some examples:
PCBoard:
USERS.SYS in C:\PCB - %pcbdrive%%pcbdir%\USERS.SYS
USERS.SYS in C:\PCB\NODE1 - %pcbdrive%%pcbdir%\NODE%pcbnode%\USERS.SYS
Wildcat!:
USERINFO.DAT in C:\WC\NODE1 - C:\WC\NODE%wcnodeid%
Non-PCBoard systems may use the PCB environment variables by setting them
in either AUTOEXEC.BAT or in the batch that runs the door. For example:
SET PCBDRIVE=C:
SET PCBDIR=\BBSDIR
SET PCBNODE=1
Fossil Driver Support
~~~~~~~~~~~~~~~~~~~~~
DoorFrame supports the use of Fossil drivers. To tell your Door to use the
Fossil driver instead of the standard COM ports, just put /FD on the command
line when running the door. For example:
MYDOOR MYDOOR.CFG /FD
indicates that a Fossil driver is present and should be used. If no Fossil
driver is detected, DoorFrame will print a message to that effect and exit
the door gracefully.
Sysop Keys
~~~~~~~~~~
F3 - Toggles the printer On/Off. Value is passed to PCBoard and/or
written to DOOR.SYS and USERS.SYS
F4 - Toggles the Page Bell on/off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F5 - DOS Shell. Allows SysOp to exit to DOS from inside a DOOR.
F7 - Toggles the Caller Alarm On/Off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F8 - Returns the caller involuntarily to the BBS.
F9 - Toggles the local display On/Off. Value is passed to PCBoard
and/or written to DOOR.SYS and USERS.SYS
F10 - Activates SysOp CHAT mode within the DOOR.
ESC - Deactivates CHAT mode. DOOR is resumed.
UP - Give the caller extra time while in the DOOR.
DN - Subtract time from the caller while in the DOOR.
HOME - HELP key for Status Line options.
ALT-N - SysOp next on toggle. Value passed to PCBoard. (PCBoard only)
ALT-X - PCBoard will exit after current caller logs off. Value is
passed to PCBoard. Not available on non-PCBoard systems.
SYSOP.CFG FILE:
~~~~~~~~~~~~~~~
Here is a breakdown of the SysOp configuration options which will be
found in the SYSOP.CFG file. Remember, you can setup this file easily
with the BORDELO UTILITY program!
40
C:\WC30\BULL\BULL99.SCR
C:\WC30\BULL\BULL99.BBS
3
60
Y
N
N
Y
4
11
N
Y
LINE 1: Game Days
LINE 2: Color bulletin path
LINE 3: Mono bulletin path
LINE 4: Plays per day
LINE 5: Time limit (minutes)
LINE 6: N- no status lines Y- show status lines
LINE 7: Y- use special access feature N- normal access
LINE 8: Y- auto color check N- bypass auto color check routines
LINE 9: Y- local display on N- local display off
LINE 10: Number of covert actions (suggest leaving this at 3 or 4).
LINE 11: Number of tries at the combination (10- Hard, 11- Medium,
12- Easy, or 99- disable this option).
LINE 12: Y-Reset door at end of month N-Let the game run!
LINE 13: Rebuy thugs option. Y=Enabled N=Disabled If enabled, the
defender will automatically rebuy thugs after and attack -
as long as the player has money.
PLAYER FILES:
~~~~~~~~~~~~~
Some items can be changed using the player editor in utility program!
Run the utility program by typing BORDELO UTILITY
Each player has two associated player files. One has the extension of
.REC which contains the players information and the other has the
extension .MSG and contains any messages left to the player. Here is
a list of the information in the .REC files:
THE PROGRAMMER 'Player ALIAS name
11-07-1992 'Date of last play
0 'Game days left today
3 '<NOT USED>
TOM WILDONER 'Player REAL name
Kiss my ass! 'Player's phrase.
"SHAWNA",7,"N",32,8839 'Whore, looks, disease, breasts, money made
"MARGIE",10,"N",35,16010
"CATHY",7,"N",35,13372
"CHERYL",7,"N",39,9008
"MARTHA",2,"N",40,2376
"NANCY",4,"N",39,6268
"COLETTE",3,"N",37,3330
"JEAN",4,"N",38,3496
"GINGER",7,"N",33,6006
"EMPTY",0,"N",0,0
889 'Condoms left
130715 'Cash
10 'House level
10 'Thugs
1 'Number of EMPTY girl slots
0 'Amount paid to police
3 'Covert actions left today
N 'Whether or not the player started over
PLAYER HELP:
~~~~~~~~~~~~
A file is included called BORDELLO.HLP -- feel free to zip this file
up and place it on your board for your users to download!
MAINTENANCE:
~~~~~~~~~~~~
After the initial setup, no maintenance will be required unless you
want to reset the door from scratch. The door will reset with the
first player of a new month (if toggled).
PLAYING LOCALLY:
~~~~~~~~~~~~~~~~
Just type BORDELO LOCAL
Logon with the name of: SYSOP
PLAYER ACCESS:
~~~~~~~~~~~~~~
One new feature that was added to this door is the ability to control player
access to the door. If line 7 of the SYSOP.CFG file is flagged 'Y'
then this option will be in effect. If it is flagged to 'N' then
anybody may play the door.
If flagged to 'Y', the players name must be found in the PACCESS.DAT
file or they will be told to leave a note to the sysop to get access
to the door. This is a good option if you want to keep the kids out
of the door without having to setup special door access's and everything
else in your BBS package.
To add a player to PACCESS.DAT you can use your favorite text editor
and just add the name (case is not important -- see how the current
names are listed in the file). Or, you can use the BORDUTIL.EXE
program to add a player!
TOP PIMP Option:
~~~~~~~~~~~~~~~~
A new option was added in v1.4 called the TOP PIMP option. You may
toggle this option ON or OFF by running the utility program by typing
BORDUTIL and then selecting number 8.
If you enable the TOP PIMP option, you must then select a percentage
of each players income that will go to the top pimp (when they logon).
I would suggest something like 5% (this was tested, and it didn't seem
to bad). If you have a lot of players, you may want to cut it back to
maybe 2-3%.
FUTURE VERSIONS:
~~~~~~~~~~~~~~~~
The next upgrade will probably be v2.0 and will require a complete
reset of the door -- let us know what you would like to see added or
changed!
COMMENTS & QUESTIONS:
~~~~~~~~~~~~~~~~~~~~~
See the file TJHELP.TXT
VERSION HISTORY:
~~~~~~~~~~~~~~~~
See the HISTORY.TXT file for information on the history of the game
and the new options in the new versions!
REGISTERING:
~~~~~~~~~~~~
That's all there is to it! If you have any problems or questions
please feel free to call the T&J BBS at (717)325-9481.
See the enclosed registration form for ordering! (REGISTER.TXT)
+75
View File
@@ -0,0 +1,75 @@
BRUTE: A brute force approach to hacking Unix passwords. Version 1.1
------------------------------------------------------------------------------
Here's how to use it in a nutshell...
Download the passwd file from your local unix site, or have someone download
it for you. It should be in the unix format (that is, line feeds but no
carriage returns) so don't run it through any conversion programs--Brute uses
it "as-is".
To check a single password against your list do this:
BRUTE passwd Password
(that would check the passwd file for the password "Password"). Brute is
case sensitive (just as unix is), so "Password" is different than "password".
To convince yourself that brute actually works you'll probably want to run it
with your password and see that it pulls up your account. It will.
---
Brute can be used with a list of passwords. In this case, edit up a list or
use a pre-made one (one password per line) and call brute like this:
BRUTE passwd @passlist.txt
(where passlist.txt is the name of your list-of-passwords. The @ sign tells
brute that you're using list file). Note that you don't have to use the name
"passlist.txt" for your word list, and you don't have to use the name
"passwd" for the password file. This allows you to keep separate word lists
for different types of unix sites, and separate password files.
Right now that's about it. There are a few enhancements I'm planning in the
future, but this ought to do the trick for you. Any passwords found are
written to the file "PWD_HITS.DAT".
Brute ignores unpassworded and invalidly-passworded accounts automatically,
so you should probably check the passwd file for these babys yourself.
---
Brute is about 25% faster than it's nearest competitor.
Have fun.
Prometheus
---
Version 1.1: Fixed the icky short int bug which causes the "Password"
counter to go negative after 32k attempts (changed to long
int--now it will go negative should you reach 2 billion
attempts in a single setting, which isn't extrememly likely.
Added the "*" password to check for the username as a password
(forward and reversed). Either put * on a line by itself in
your word list file, or call brute like this: brute passwd *
---
Version 2.0: I'm using the fastcrypt routine as ported to DOS by Gandalf and
distributed in OBJ form by sir hackalot. I haven't measured
the speed increase, but it's not as much as I had hoped. Maybe
twice as fast. Anyhow, such is life.
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÝÄ’œ›Š úúúúúúúúúúúúúúú THE HOLLOW'S ALLIANCE úúúúúúúúúúúúúúú AliceÄÞÜ ú
ÜÝÄ (415)849-2688 Ÿ‰‰ë æ”r hîŽë (415)849-2688 ÄÞÜ ú
ÜÝ ÄÄ Ä Ä Ä Ä Ä Ä T-file Distribution Cent-a-RoR Ä Ä Ä Ä Ä Ä ÄÄ ÞÜ ú
ÜÝDr. Murdock ú Powerful Paul ú RatSnatcher ú Sir Death ú Pressed RatÞÜ ú
ÜÝ ÄÄ Ä Ä Ä R o R - A l u c a r d Ä Ä Ä ÄÄ ÞÜ ú
ÜÝÄ The Corporate Headquarters of Shawn-Da-Lay Boy Productions, Inc.ÄÞÜ ú
ÜÝÄúúúú Ø úúúúSmooth is the Descent and Easy is the Wayúúúúú Ø úúúúúÄÞÜ ú
ÜÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛÜ ú
úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú
+58
View File
@@ -0,0 +1,58 @@
(C) Yan Seiner 1988
May not be used in any commercial product without express written permission of
the author. May be copied, and distributed freely with this doc file.
bse drive_letter
is a simple boot sector editor. It is designed to complement Norton's Advanced
Utilites, which for some unfathomable reason, does not provide one.
WARNING!!!!!
bse can trash your disks with ease. DOS takes the boot sector very seriously.
Changing things randomly can lose you all your data, as well as damage your
hardware. MAKE BACKUPS before using it on your hard disks. Learn how to use it
on floppies. Get a good book on DOS (Ray Duncan's Advanced DOS comes to mind.)
IN NO CASE WILL I BE RESPONSIBLE FOR WHAT HAPPENS WHEN YOU USE BSE!!!! MAKE
BACKUPS!!! KNOW WHAT'S GOING TO HAPPEN WHEN YOU CHANGE THE BOOT SECTOR BEFORE
YOU MAKE ANY CHANGES!!!!
Changing cluster size
Why should I do that? Because DOS is very stupid. It formats small hard disks
with large clusters. What this means is that EVERY file on a 10 Meg HD takes at
least 4K. Many of my files are small (under 1K) and changing cluster size to 1K
increased my useful storage by over 30%.
What is a cluster?
A cluster is a group of sectors. A sector is 512 bytes long. DOS stores files
in clusters. Thus, a HD with 8 sector clusters will require 4K per file, no
matter how small. Fortunately, a cluster can consist of almost any number of
sectors. It is best for a cluster to consist of powers of two multiples of
sectors. A 10 Meg HD is formatted with 8 sector clusters by default. You can
change this to 4, 2, or even 1. There are drawbacks to using a small cluster,
but if you have a lot of RAM and not enough disk space, you can gain a lot.
Using small clusters tends to leave less room for programs in RAM. This should
not be a concern unless you have only 256K RAM.
How to change cluster size
1. Cold boot DOS.
2. MAKE BACKUPS. One as a minmum, two preferrably.
3. Make a bootable floppy, with bse and format on it.
4. Run bse, specifying drive letter.
4a. Change sectors per cluster
4b. Hit F9 to calculate FAT size (should be around 40 sectors)
4c. Hit F10 to exit, writing changes to sector.
5. Cold boot DOS to read new boot sector (it is read once, at boot time.)
Disk is now unreadable.
6. Format disk.
7. Restore from backups.
Good Luck!
Yan Seiner 1988
223-C King St.
Princeton, NJ 08540
+290
View File
@@ -0,0 +1,290 @@
The NAG-BUSTER version 1.2b, Copyright (c) 1992-1994 Erik Famm
Changes and bugs fixed (in addition to new patches):
----------------------------------------------------------------------
Version 0.61á:
----------------------------------------------------------------------
- Several different editions of Telix 3.20 .EXE-files created a
problem since the NAG-BUSTER looks for a specified filesize of
the .EXE-file for recognition of the correct version. (It also
checks bytes at pre-set offsets). The solution was to create another
patch for the second TELIX.EXE, so now there is support for two
different Telix 3.20s. This explains why their filesizes are noted
in parentheses in the DOS programs-menu.
----------------------------------------------------------------------
Version 0.62á:
----------------------------------------------------------------------
- The patch for QMail 1stReader 1.00 did not work satisfactory.
In addition to the fact that the patch did not bypass all windows,
I wasn't aware of the built-in limit of messages per conference
(20 only). Now, you can have up to 400 messages - as with the
registered version. (Hey, why only 400...?)
- The Hyperkey v.4.16 patch only removed the delay screen, but
the time limit was still active. Fixed.
- If the user had a program with incorrect bytes at a specified location
although the filesize was correct, a window should pop up telling
that the program had a wrong version. This did not happen consistently.
The patch only halted and the program returned to either the DOS menu
or the Windows menu. Fixed.
- A minor error with the time function written to the log file has been
fixed.
- BUSTER.EXE is no longer compressed, thereby running faster but obviously
occupies more disk space.
----------------------------------------------------------------------
Version 0.63á.
----------------------------------------------------------------------
- Several new patches were added.
- A few cosmethic changes were made.
----------------------------------------------------------------------
Version 0.64á
----------------------------------------------------------------------
- Reported bugs were found in both the Offline Express TD patch and in
the Qedit patch. The OLX patch would not run because of an error
with the checking routines in NAG-BUSTER. The Qedit patch accidentally
altered some colors in Qedit. Both patches seems to work fine now.
Please let me know if you still encounter difficulties.
- In version 0.63á I added a Games menu (with only one patch at present).
That project is now on ice.
- A few cosmethic changes were made - as usual. I never make up my mind...
----------------------------------------------------------------------
Version 0.65á
----------------------------------------------------------------------
- The mouse double-click did not work in the DOS/WINDOWS menus. Fixed.
First, point at the program, then double-click the mouse to choose it.
- Automatic backup copying of program files to .BAK is implemented - not
yet with .OVR and .OVL-files, though.
----------------------------------------------------------------------
Version 0.66
----------------------------------------------------------------------
- New patches only.
----------------------------------------------------------------------
Version 0.70á
----------------------------------------------------------------------
A major rewriting of NAG-BUSTER in this version, so beware of any
unfortunate bugs. Please report found bugs to me - in writing, please.
- Automatic decompression of compressed files implemented as a result
of user request. Thanks for the feed-back!
The new decompression routine does not bother with headers in the
compressed files. The decompression routine jumps to DOS, runs
COMPBUST.EXE, which runs the program to be patched with a interrupt
hook, using disk or EMS (if any) swapping to save memory and finally
it is saved back on disk after decompression found place in memory.
Please report problems!
Do not use the old BUSTLZ.EXE and BUSTPK.EXE any more! Delete them!
- Added a convenient 'Jump to DOS Shell' - menu choice using disk or
EMS (if any) swapping to save low memory.
- Automatic backup copying of .OVR files, too.
- Better (I think) information to the user of what is actually going
on in NAG-BUSTER. Many windows was difficult to follow, as they passed
the user's eye too quickly. Now, things move a bit slower, but inform
you better. Please, contribute with your opinion on this.
- Safer checking of .OVR/OVL files before patching. In earlier versions
NAG-BUSTER checked .EXE files thoroughly, but if there also was a
.OVR to patch also, NAG-BUSTER did not check sufficiently for the
.OVR file's validity, but assumed that it was correct since the
.EXE file was. No problems were discovered, though, but you can never
be *too' sure... Now, .OVR files are checked the same way as .EXE
files before patching. NAG-BUSTER checks and patches the .EXE file
first, then the .OVR file.
- An error was discovered in the Catdisk v.6.15 patch for CATDISK.EXE:
the specified filesize was 153666 bytes, but should have been 153664.
- The Media Cataloging System patch caused the program to hang when
the user chose "F2-Track Notes". I addition, a nag window popped up
when the user reached 80 artists in the database. Fixed.
- Some of the patches in the 0.65á that also had to patch overlay-files
(i.e. files with a .OVR or OVL extension) did not complete
successfully due to a minor programming error. Fixed.
- As opposed to earlier Blaster Master patches, the patch for version
5.7 also eliminates the 25 second limitation of editing (only recently
I became aware of this limit).
----------------------------------------------------------------------
Version 0.71á
----------------------------------------------------------------------
- Minor adjustments only
----------------------------------------------------------------------
Version 0.72á
----------------------------------------------------------------------
- I have written a color setup program and changed all color routines in
NAG-BUSTER to match with BCOLORS.EXE. You should be able to choose a
color setup that suits you.
- It is now possible to pay for NAG-BUSTER by using one of several credit
cards. Therefore, the registration form and routines have been
rewritten.
----------------------------------------------------------------------
Version 0.74á (5 January 1994)
----------------------------------------------------------------------
- The patch for PCopy 9.3 did not work. Fixed. Read about this patch in
PATCHES.NFO.
- The patches for ArcMaster 9.6 and Amisetup 2.10 mixed places in the
DOS programs menu. Fixed. Sorry...
- Added a color palette for color monitors.
Any use of screen savers that reset the monitor after a keypress
will also reset the color palette to your defaults.
----------------------------------------------------------------------
Starting with version 0.75á, patches for some of the older versions will
be deleted. I will keep the patches for the two most recent versions of
any program.
----------------------------------------------------------------------
Version 0.74Bá (21 January 1994)
----------------------------------------------------------------------
- The patch for WinFast 3.4b did not work satisfactory. It removed the nag,
but when the user exited Windows and restarted it, the nag was back.
Fixed.
- VGA COPY PRO 5.2: A great many things can be said about this
"program" (but I will not extend my critisism any further than to
my opinion found in PATCHES.NFO). However, there is a bug in my patch,
ie. VGA COPY exits at the point where you attempt to format a disk. This
is a checksum in case of tampering by the user. Many thanks to Mr. Tom
Liberman (Ontario, Canada) for letting me know. And I thought I was
through with VGACOPY!
(Upgrades of this dreadful program will not be patched by me!).
Btw.: Some users told me about a filesize error message appearing as they
started the second patch run on VGACOPY and thought this was a bug in
NAG-BUSTER. It isn't. Read PATCHES.NFO again - VGACOPY.EXE has to be
patched once before it can be decompressed. Therefore the filesize must
be wrong when NAG-BUSTER comes to the second patch. As you can see from
the "error" message, "NAG-BUSTER will now try to decompress VGACOPY". Just
press a key and let NAG-BUSTER proceed. It will decompress VGACOPY to
the correct filesize and finally write the main patch into VGACOPY.EXE.
- A similar bug occurred in WINZIP v.5.0 and has been fixed.
----------------------------------------------------------------------
Version 1.0 (15 March 1994)
----------------------------------------------------------------------
- I changed my mind about the deletion of older versions from NAG-BUSTER
0.75 (see above). I'll hang on to them until further notice.
- There won't be a 0.75á version. I have decided to skip beta-testing now
because I haven't encountered any bugs in the main program, nor have I
received any bug-reports from the users. The few "bugs" that are noted
and fixed, was found in some of the patches, not in the main program
routines. Therefore, the next version is shipped as 1.0 Release.
----------------------------------------------------------------------
Version 1.01 (28 March 1994)
----------------------------------------------------------------------
- If you patched ConFormat, the log file would be appended with the
ConFormat name with the end-of-file-marker (ASCII 27).
Viewing the log file from the Main menu would therefore stop at
this marker since BUSTER.LOG (ie. the log file) handled as a textfile.
The easiest way to fix this is to omit the end-of-file-marker in the
file name ConFormat. I chose the easy way this time... (sorry, SYDEX).
----------------------------------------------------------------------
Version 1.1 (10 April 1994)
----------------------------------------------------------------------
- The logfile routine has become more extensive in order to inform you, the
user, of what the NAG-BUSTER has done to your program. Hope this will
come in handy!
- Rewritten the backup-copying routine. It was a bit slow, I'm afraid.
- A peculiar (to you) number popped up in the Path-input field right after
you chose to start patching. This number is a defined variable that
I needed to study further and chose to display at the current cursor
position (rather than using the debugger which takes more time).
This looked a bit strange, but had no effect on the program.
----------------------------------------------------------------------
Version 1.1b (22 April 1994). Bugfix.
----------------------------------------------------------------------
- The patch for Qedit 3.00 caused Qedit to pop up a window with the
message "Error in .EXE" after the user had pressed PgDn and then
tried to use one of the arrow keys. I was aware of this message to
begin with, but thought I had managed to bypass this checksum.
Now I have.
- Rewrote the patch routines some more, i.e. not the routines that
patches the programs, but the information shown to you on screen
during the patch operation, but there is a slight miscalculation
in this routine. Nothing major and I'll fix this as soon as
possible.
----------------------------------------------------------------------
Version 1.1c (24 April 1994). Bugfix.
----------------------------------------------------------------------
- The Paint Shop Pro 2.0 patch routine pointed to the 1.0 routine.
Now fixed. I can only say I'm sorry about this blunder.
- A user reported that the 4DOS 5.0d patch caused a total system
crash on his machine. Although I have tested this patch more than
thouroughly, I have not been able to produce a similar situation.
This routine is therefore left unchanged. Please bear in mind the
fact that all patches check your program's filesize against my
preset filesize. If the filesizes don't match and your file is
larger than mine, NAG-BUSTER assumes that your program has been
compressed and triggers the decompression routine.
This was exactly what happened to this user. He probably tried
to patch an earlier 4DOS version with the patch for version
5.0d, and that particular version had a larger .EXE-filesize
than the 5.0d version, thus triggering the decompression
routine (though you have a chance to bud out with ESC prior to
running this routine). Trying to decompress a non-compressed program
will perhaps cause some difficulties on your system, so check and
ensure that you have a program version identical to the one
that the patch is intended for.
----------------------------------------------------------------------
Version 1.1d (10 May 1994)
----------------------------------------------------------------------
- The patch for Graphic Workshop 7.0 called the routine for v.6.1d.
- The patches for MenuBar and Megaedit mixed places in the menu, but
if you went for it, the patches would still work! Well...fixed now.
- A minor error in BUSTREG.EXE resulted in blinking white inputfield
color.
----------------------------------------------------------------------
Version 1.1e (1 July 1994)
----------------------------------------------------------------------
- Hyperdisk v. 4.65 (HYPER386.EXE): At 7 June 1994, HYPER386 showed
the "Time to pay"-window. Fixed, but may occur with other
Hyperdisk cache programs, too. These have not been fixed.
----------------------------------------------------------------------
Version 1.2b (24 August 1994)
----------------------------------------------------------------------
- Allow for 256 different colors including bright background colors
set up through BCOLORS.EXE which has been rewritten accordingly.
- Rewritten and extended the information written to the log file
BUSTER.LOG. This includes full listing of each byte replaced in your
program by NAG-BUSTER.
- A few cosmetic bugs were fixed.
----------------------------------------------------------------------
Written suggestions and feed-back from anyone are always welcome!!
(and I thank all users out there who have sent me a lot of
constructive feed-back already!)
Please feel free to write to the following address:
Erik Famm
Hertzbergsgt. 7 A
N-0360 OSLO
Enclose US$ 5 to cover my postal and stationary expenses if
you want a reply.
You can ask me anything about the development, program routines,
patches or leave some neat tricks if you know any. If you're
in the same "business", I'll try to help you with problems,
though I won't reveal my deepest secrets....
On how to pay and become a registered user, read the file
BUSTER.DOC from NAG-BUSTER (choose [Information] from the Main
menu) or fill in and print the registration form by choosing
[Registration] from the Main menu. Registration fee is to be
sent to the address above, payable to Erik Famm.
Please use a postal money order.
ENJOY!

+375
View File
@@ -0,0 +1,375 @@
ÛÛÛ» ÛÛ» ÛÛÛÛÛ» ÛÛÛÛÛÛ»
ÛÛÛÛ» ÛÛº ÛÛÉÍÍÛÛ» ÛÛÉÍÍÍͼ
ÛÛÉÛÛ» ÛÛº ÛÛÛÛÛÛÛº ÛÛº ÛÛÛ» ÛÛÛÛÛ»
ÛÛºÈÛÛ»ÛÛº ÛÛÉÍÍÛÛº ÛÛº ÛÛº ÈÍÍÍͼ
ÛÛº ÈÛÛÛÛº ÛÛº ÛÛº ÈÛÛÛÛÛÛɼ
Èͼ ÈÍÍͼ Èͼ Èͼ ÈÍÍÍÍͼ
ÛÛÛÛÛÛ» ÛÛ» ÛÛ» ÛÛÛÛÛÛÛ» ÛÛÛÛÛÛÛÛ» ÛÛÛÛÛÛÛ» ÛÛÛÛÛÛ»
ÛÛÉÍÍÛÛ» ÛÛº ÛÛº ÛÛÉÍÍÍͼ ÈÍÍÛÛÉÍͼ ÛÛÉÍÍÍͼ ÛÛÉÍÍÛÛ»
ÛÛÛÛÛÛɼ ÛÛº ÛÛº ÛÛÛÛÛÛÛ» ÛÛº ÛÛÛÛÛ» ÛÛÛÛÛÛɼ
ÛÛÉÍÍÛÛ» ÛÛº ÛÛº ÈÍÍÍÍÛÛº ÛÛº ÛÛÉÍͼ ÛÛÉÍÍÛÛ»
ÛÛÛÛÛÛɼ ÈÛÛÛÛÛÛɼ ÛÛÛÛÛÛÛº ÛÛº ÛÛÛÛÛÛÛ» ÛÛº ÛÛº
ÈÍÍÍÍͼ ÈÍÍÍÍͼ ÈÍÍÍÍÍͼ Èͼ ÈÍÍÍÍÍͼ Èͼ Èͼ
Ò Â ÒÄÄ¿ ÒÄÄ¿ ÖÄ¿ ÄÒÄ ÖÄÄ¿ ÖÄÄ¿ Ä· ÄÄÄ¿ Ò
Ó·ÚÙ ÇÄ ÇÄÂÙ ÓÄ¿ º º ³ º ³ º ÖÄÄÙ ÇÄÄ¿
ÓÙ ÐÄÄÙ Ð Á ÓÄÄÙ ÄÐÄ ÓÄÄÙ Ð Á ÄÐÄ o ÓÄÄÄ ÐÄÄÙ
~NAG-BUSTER~ is Copyright (c) 1992-1994 Erik Famm.
Programming and documentation by Erik Famm.
Introduction
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~What's the purpose of NAG-BUSTER?~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~NAG-BUSTER~ is a utility that removes those 'naggy' windows that
tend to pop up at program entry, randomly or during program exit.
These windows contain information and requests that should have been
placed in a readable file included in the package rather than inside
the program. By removing them, you will be able to evaluate a program
more or less identical to the program you will receive after you have
paid for it. Normally, all naggy windows are subject to great
irritation rather than information, and the user will not even _try_
the program because of this, and this effect is not satisfactory
for either the programmer nor the user.
Some programs contain delays connected to these windows in which the
user sometimes has to wait for up to 90 seconds before the program
continues running. Other programs contain hidden 'bombs' that is able
to crash a machine if the code has been altered in any way.
~NAG-BUSTER~ enters your program file and patches it in order to remove
(or bypass) the nags permanently. (See details below).
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~What's a NAG?~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A 'nag' on PCs is a window that contains a message from the author,
often with a timed delay, begging you to pay for the program if
you intend to use it on a regular basis. The registered version
will not contain such a nag. The nag screens (there may be several)
often pop up at program start or exit and occasionally at one point
in the program. However, nags are not the contents of for instance
a Windows About Box. Such boxes appear on user requests and has no
effect on the program running. Nor are nags a one-line message in
a command line program that informs the user that registration is
this and that. Alas, nags annoy and disturb the user and hinder
normal program execution. Nags serve two purposes:
1) To remind the user to pay.
2) To annoy the user (so he will pay).
I think that you have the right to a trial version that is
identical to the program you are supposed to pay for. I also think
that purpose 1) above is obvious to most users - he will know that
the intention of shareware is 'try before you pay' otherwise the
program doesn't follow the shareware concept. Purpose 2) is
unlikely to work. A query made by me, states that users of shareware
programs with heavy nags often throw them away instantly. They will
not even bother to try them out. I think this is a rather unfortunate
consequense for the programmer.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~What's wrong with 'naggy' programs?~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
A shareware program in its unregistered form with all windows
popping up telling you to pay as soon as possible, or with limited
functionality, is not identical to the program you are to pay for
later, so the 'try before you pay'-concept isn't true for such
programs. The registered version has none of these windows, delays,
checksums or limits. This means that the user will pay for a
completely different program than he evaluated - which is not right,
and gives me the legal right to inform you how to alter that program
to emulate the registered one.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~Registration/payment~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~NAG-BUSTER~ is neither shareware nor public domain, but those who
intend to use it must register and pay for the program.
~NAG-BUSTER~ doesn't contain a lot of irritating windows, begging
screens, delays and other forms of crippled procedures to annoy
the user. That's one of the reasons that ~NAG-BUSTER~ isn't a shareware
program. In fact, the only implemented feature that will show that
this is an unregistered edition, is the menu choice [Registration]
which is only implemented so that you don't have to fill in a form
manually. Besides, the form will hopefully be correct when I receive
it. Those who feel that upgrades (including lots of new patches) are
of interest, may pay the amount of
$ 45,- (United States)
NKr ~250~,- (Norway)
DM 60,- (Germany)
œ 25,- (Great Britain)
SEK 280,- (Sweden)
DKK 250,- (Denmark)
Shipping and handling is included.
You may *not* pay by check, due to high fees in Norwegian banks(!)
(i.e. if you sent me a check, I would have to pay a fee of approx.
$30 to cash it!). You may pay by international postal money order or
using one of the following credit cards: Access, Visa, Eurocard,
MasterCard, or American Express. If you don't own a credit card, then
credit Erik Famm's bank account directly. Use the following address
and bank account:
Bank Name : DnB (Den Norske Bank)
Bank Address : Stranden 21
Box 1171 Sentrum
N-0250 OSLO, Norway
Name : ~Erik Famm~
Address : ~Hertzbergsgt. 7 A~
~N-0360 OSLO, Norway~
Bank Account : ~7112.11.26952~
I would prefer a postal money order of NOK ~250~,-.
Remember to fill in the Registration form found in the Main menu
in ~NAG-BUSTER~.
You may NOT "pay" by sending me shareware programs with nags!
(as you could before...)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
I permitted users to "pay" by sending me programs with nags -
not listed in ~NAG-BUSTER~. The result was that a lot of people sent
me the same programs, or they downloaded an old ~NAG-BUSTER~ program,
such as 0.66 and sent me programs that were already supported in
newer versions. I addition, some people obviously has a strange
opinion on what's a good program and what's not. I've received
a number of disks with completely useless programs, programs without
nags(!), duplicates on several disks, disks with bad tracks or bad
.ZIPs. Besides, I had expenses in returning registered ~NAG-BUSTER~
disks. And finally, only a very small amount of people paid at all
for ~NAG-BUSTER~. 80 per cent of you sent me disks. If you study the
newer versions of ~NAG-BUSTER~, you can find out how many of your
programs that have been supported by ~NAG-BUSTER~. Don't be surprised.
I received 25 programs from a user where none of the 25 reached normal
standards or weren't already patched in a newer ~NAG-BUSTER~ version.
Therefore, I have decided that this method of payment must die.
You may now send me disks in *addition* to the registration fee
(I cannot return them, however)
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~If you enclose disks for implementation in NAG-BUSTER~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
If you send me programs that are compressed, please enclose the
decompressor for these programs. I may not have this program, or may
not be updated with the correct version! When you send me programs,
please let me know which programs are for DOS and which programs are
for Windows and what the patch is to remove/bypass (if this is not
very obvious). This saves me from a lot of work! Remember also to find
out what ~NAG-BUSTER~ version that is the current. If you send me programs
that are not listed in version 0.66 they may be listed in version 0.74!
I prefer 3.5 inch disks. You may send tapes compatible with the
Colorado 120 Jumbo (not the 250!) - QIC-40 (If you pay for ~NAG-BUSTER~,
I will return the tape along with the registered ~NAG-BUSTER~ disk).
Remember: Only send me programs not listed in the latest ~NAG-BUSTER~
version! (New ~NAG-BUSTER~ versions will probably be sent out each three
months).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* ~IMPORTANT~ *
* I'm not interested in games, command line programs and shareware *
* upgrades from for instance 2.10 to 2.11, and all programs must *
* be english versions. .ZIP-files with a filesize of less than 30K *
* will automatically be rejected and not even looked into. Nor *
* may you send me duplicates, programs already listed in NAG- *
* BUSTER or .PRG files for DBASE and so on. These programs will *
* not be patched. You may not send me duplicates, two versions *
* of the same program, or programs that are already supported by *
* your ~NAG-BUSTER~ version. All programs should have atleast one *
* .EXE or .COM file of a reasonable standard. You must enclose a *
* paper or text-file explaining what the programs do, what I *
* should patch, how I can simulate the problem and what *
* environment the programs are written for (DOS or Windows). At *
* present, only DOS and Windows programs are wanted. *
*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*
* If these simple rules aren't followed, you will not receive a *
* registered version of the latest ~NAG-BUSTER~ edition or an *
* upgrade! I'm sorry about this strictness, but it is *
* unfortunately nescessary to emphasize this. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The first upgrade will be sent you for free as you register. After
that, you download further upgrades from a BBS near you, fill in the
registration form, send it to me and pay US$15 or the equivalent in
your local currency. You will receive a registration code as soon as
possible. As you probably understand, upgrades are not and cannot be
free!
The registered version will have your name on the main screen of
~NAG-BUSTER~ and the Registration menu choice will disappear.
After registering, you may of course send me more programs to
be patched in order to improve ~NAG-BUSTER~ and to give you
the patches you need.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~Legal matters~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~NAG-BUSTER~ is intended solely for the use of legitimate owners or
licensees of shareware programs or for those who intend to buy the
shareware program later and is NOT intended for any use that would
deprive any software publisher of his rightful income.
The patched files that ~NAG-BUSTER~ create may NOT be sold, rented
out, given away, or uploaded to computer bulletin board services
(BBS's). The created programs are intended for your testing only
and should only be used until you register them.
You may not modify ~NAG-BUSTER~ in any way. You may not reverse
engineer the program by decompiling, disassembling or decrypting the
program.
~NAG-BUSTER~ is provided for the purpose of allowing you to evaluate
shareware programs as they will appear when you buy them.
You are granted the right, and encouraged, to distribute unregistered
versions of ~NAG-BUSTER~ to others who may find it of interest, and to
upload it to computer bulletin board service (BBS's).
NOTE:
No warranty of any kind, whether expressed or implied, is attached
to ~NAG-BUSTER~, including any claim of merchantability or
suitability of ~NAG-BUSTER~ for any specific purpose. No warranty
shall extend to any right to claim any damages from Erik Famm,
including but not limited to loss of profit, data, or use of the
software, or any consequential or incidental damages. You use
~NAG-BUSTER~ entirely at your risk.
Users from countries other than Norway must comply with the laws of
their respective countries and must not use this program if the
actions taken by it is against the law. If they are, then bear in
mind that it is you, the user of ~NAG-BUSTER~ and not me that is
responsible.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~Pay for Shareware!~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
I respect the shareware concept - try before you pay - and pay less
than you do for commercial programs. I recommend that you pay for all
shareware programs that you intend to use on a regular basis after a
trial period. ~NAG-BUSTER~ is only supposed to give you a feeling of
how the real version works.
If you do not intend to buy these programs, ~NAG-BUSTER~ is not for you.
To keep up with shareware traditions, the authors deserve to be paid
the often symbolic sums of money for their products. A lot of work and
effort has often been put into the development of shareware programs.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~How Do I Use NAG-BUSTER?~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
When the main menu appears use your arrow keys or mouse to move the
highlight bar to any option and press the ENTER-key (or left mouse
button) to select it. Selecting DOS or Windows programs gives you
another menu, in which you can select a program for patching. Then
you will be prompted for the path and the patch will start. It's
possible to stop anywhere and you will be asked if you wish to
continue. If the patch is unsuccessful, you will be informed why.
TIP: All patches are made for one unique version of a program. There
is no point in running a patch on a different version than the
version number listed in the DOS/Windows-menus. This won't work.
If you read ahead, you'll figure out why.
For speed and elegance, ~NAG-BUSTER~ does not search through an
entire .EXE file for the specific bytes to change. Instead it jumps
directly to pre-set offsets and looks at the bytes there. If they
differ from the pre-set bytes in ~NAG-BUSTER~, the program cannot
patch your .EXE file. This means that your .EXE file is not identical
to the .EXE file that I used to test the patch. It has to be!
If it is not identical, then your version may be different or
patched already by yourself or others and need not be patched again.
Your program may be compressed. ~NAG-BUSTER~ will automatically try to
decompress your program if it is compressed. ~NAG-BUSTER~ still needs
the correct filesize to ensure that you have the correct version,
so if the result of the compression of your program is a wrong file-
size - that's too bad! A window will pop up telling you this and
what actions you take from there. In the DOS/Windows menus, you will
now see that I have extended the menus with information of what
compression program that (is likely to have) compressed your program
and a column showing what the patch does.
Due to the lack of space, I had to abbreviate some of the compression
program names: TINYP. is an abbreviation for TINYPROG. EXEP. as in
EXEPACK and COMP. as in COMPACK. The two latter are found in
parentheses, which means that ~NAG-BUSTER~ do not have to decompress
these programs in order to patch them. N/A means not applicable, i.e.
an unknown compression method was used (but the programs need not be
uncompressed in order to be patched successfully). To the far right
of the menus you will find a brief explanation of what each patch
will do.
If you encounter difficulties in decompressing programs with
~NAG-BUSTER~ (due to lack of memory), try to decompress your program
manually by running the COMPBUST-program from DOS. Then re-enter
~NAG-BUSTER~ and start the patch routine again.
None of the Windows programs from the Windows menu are compressed.
If a patch runs successfully, you will get a message and ~NAG-BUSTER~
will create (if not found), or append to a log file information on
the details of the patch routine for the program you chose to
patch.
~NAG-BUSTER~ removes protection by searching the program files for
the data that need to be changed, and then making those changes
with little or no intervention from you. Once the nags are
removed, you need not use ~NAG-BUSTER~ again on that particular
program.
New versions of ~NAG-BUSTER~ will probably be distributed twice a
year, depending on the response from the users and the amount of
new programs that need patching.
And that's all there is to it! Remember that the altered files
created by ~NAG-BUSTER~ are for your own use only and may
not be given away or distributed to another person in any form!
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
~Keep in touch!~
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Please feel free to contact me at my address mentioned above.
Or you may upload a message to author Erik Famm at
~Mike's BBS phone no. +47-22-337320~
The board is open around the clock and supports the V.32bis and HST
standards.
Your opinion is always welcome. I will try to answer all *written*
questions and suggestions.
Enjoy using ~NAG-BUSTER~!

+146
View File
@@ -0,0 +1,146 @@
May 1993
CrackAid V3.39
by
Rawhide
of
The Humble Guys - UK's finest
Old Release notes : version 2.10 to 2.47
===================
2.47.00 Removed pause screen from start.
2.47.01 There are 76 new cracks added to CRACK1.DAT.
2.47.02 Following request have allowed backspace to be used when typing
in directory name.
2.47.03 Have included a 'Special Case' dialogue screen for one crack
that require specific intructions.
2.47.04 Fuck me!!. I had some feedback on one of the cracks.
If the Trump Castle 2 crack doesn't find the byte change
necessary.... try changing the file TC2.EXE..
Hex offset 2229B to EB 02 (Hex 2229B should be 9A if not don't use)
Hex offset 232C7 to 31
2.47.05 CRACKAID.COM has become CRACKAID.EXE due to me exceeding the 64k
*.COM boundary.It LZ'exes to under 7k now!!
Version 2.47 to 2.70
====================
2.70.01 Have added 19 new cracks to CRACK1.DAT
2.70.02 Have altered a typing error in crack for Terminator 2.
2.70.03 Have included a couple of cracks in MORECRAC.KS
2.70.04 er.. that's all I could be bothered to do.
Despite me saying that version 2.47 would be the last release, I have decided
to release this version, primarily as a bug fix for the Terminator 2 crack.
Thought I might as well add another page load of cracks while I was at it.
Version 2.70 to 3.39
====================
3.39.01 Have added 57 new byte cracks to CRACK1.DAT
3.39.02 Have replaced MORECRAC.KS with CALOAD.EXE to create a handful
of loader and TSR patches
3.39.03 Have amended a typo in Bad Blood byte patch.
3.39.04 As this is the last full version of CrackAid, I have tried to
the executable file inside the 64k COM boundary. Subsequently,
the file copy section of code has been trimmed (even further), and
users may notice this version takes longer to backup the original
file.
Feedback
========
Surprise, Surprise.... Fuck all, not a sausage.
Files in this archive
=====================
CRACKAID.EXE - Main executable
CRACK1.DAT - Title listing read into CRACKAID.EXE
CRACK1.OVL - The filename/byte changes needed in CRACKAID.EXE
CAUNLITE.EXE - Extracts PKlite'd EXE files, including the 'unextractable'.
CAUNLZ.EXE - Extracts LZexe'd files to 0.91
TITLES.DOC - ASCII listing of the titles available in this release.
README.BAT - Extraordinarily complex batch file to type this file....
CALOAD.EXE - Creates a handful of loader files
CALOAD.OVL - Data file for CALOAD.EXE
CALOAD.DOC - Brief dox for CALOAD
CAID-339.DOC - This file.
Installation Guide
==================
1> Delete all old files.
2> Copy all new files.
3> er.. that's it.
Further comments
=================
This is definately the last major of release of CrackAid. I am teaming up
with Randall Flagg of Razor 1911 and creating a similar thing under a new
title. The graphics, presentation will obviously be greatly improved, as will
the number of titles (600 or so).
This program will be released as SHAREWARE (whatever that is!!!), and will
also be registerable for a small fee.
At the time of this doc., the final details (including the title), of this new
project are as yet unresovled, but look out for it a board near you soon.
Part of the service of the new project will involve free protection removal for
people with software that has protection in it.
Adieu, Rawhide -=The Humblest of them All=-
Usual old crap
==============
The sole intention of this software is to remove the annoyance of having
to dig out your manual/code-wheel/key diskette everytime you want to play
a game. Also for legimate purchasers of software who have mislaid their
manual amongst all the other crap round their PCs.
It is certainly NOT my intention, that anyone should use this software to
make/distribute illegal copies of software. If you are using this program
for this purpose, then you are very naughty indeed.
Please do not use this software to deprive those smashing ladies and
gents of the software houses, with their BMWs and 5 bedroom detatched houses
in the stockbroker belt out of their hard-earned cash. Support them.
Personal/Group Greets: Hi.T, Byrn and all at THG, Razor Blade, Randall
Flagg and all at Razor 1911, all other groups too numerous to mention, and
everybody in whole world except Bob Monkhouse, who's a cunt.
To all the kisses I've snatched, and vice versa,
WhipCRACKaway....
Rawhide
......
+34
View File
@@ -0,0 +1,34 @@
CA-Load v1.00 beta by Rawhide -=THG=-
Because CrackAid makes only byte patches, and more and more programs require
loader files or TSR to crack them, I have chucked together a tinpot program
called CALOAD.
This version will only do 15 titles, but I may incorporate more in due
course. I chucked the code together in about one and a half hours, and
put extremely simple error checking in.
Basically, CALOAD.OVL must be in the same directory as CALOAD.EXE. It will
produce the requested loader file into the directorty from which it was
run, and you have to copy it over to the directory containing the program
you want to unprotect.
A Couple of Thoughts
====================
Whatever happened to flying saucers?? That splendid piece of confectionery
with sherbert encased in a funny rice-paper envelope. Are they still
about ??
If it's true that 'You are what you eat', then that bloke who hosts
the Clothes Show on BBC, must eat a hell of a lot of arseholes.
Anywayz...
L8rs
Rawhide
-=The Humble Guys=-
+619
View File
@@ -0,0 +1,619 @@
CATCALL V3.4
copyright (c) - 1989, 1990
Zone Communications
written by
The Marauder
Legion of Doom!
Special Thanks to Safe Cracker, and Phucked Agent 04
Lex Luthor, and Frank Carson
Copyright Notice
Permission to copy and distribute this document and the
Accompanying Program CATCALL V3.4 is hereby given, Provided that
This document and all references to the author (The Marauder,
Legion of Doom!, Zone Communications) are included in any copy or
subsequent duplication of this document and the accompanying code.
Under no circumstances will this program be distributed or offered
for profit by any individual or corporation, However compensation
for storage media and postage expenses normally incurred during
mail order freeware distribution is at the discretion of the
person(s) offering the service, however the person(s) subscribing
to this type of service should be made fully aware that this
program (CATCALL V3.4) is offered to the public free of charge.
Modification of the accompanying program (CATCALL V3.4) in any
form is expressly forbidden by any person(s) without written
permission from The Author (The Marauder), The Legion of Doom!,
and Zone Communications.
Disclaimer
This program is released to the public as is and all routines
and code within the the program are the property of the author and
The Legion of Doom!. The use of this program is at the discretion
of the user(s). The author and the Legion of Doom!, assume no
legal responsibility for the programs usage and the user is
CAUTIONED that the use of the accompanying program may not be
legal. The program is released simply as a show of what can
easily be done utilizing various string, Window and communications
routines. The program should be viewed as a tree from which the
owner may grow on. This document and the accompanying program may
be freely copied and distributed as long as the authors name and
associated copyright notice, disclaimers, group affiliations and
this document are included in any duplication or subsequent
distribution. The Author (The Marauder), Zone Communications, and
The Legion of Doom!, disclaim all warranties, Expressed or implied
Including without limitation, the warranties of merchantability
and warranties of fitness for any purpose.
System Requirements:
o IBM PC/XT/AT or any 100% compatible (see note 1)
o At least 64k Ram.
o Any Hayes compatible Modem (see note 2)
Program:
If you have ever been the innocent victim of a prank,
practical joke, received the "Short end of the stick" or simply
felt someone needed their "Just Deserts" - CATCALL is for you, The
underdog. Now from the comfort of your own home you can extract
your vengeance. Simply a few clicks at the old keyboard transforms
your PC in to a state of the art "Punishment Processor" which can
deal out a sentence from mildly annoying to downright galling.
CATCALL allows the user to Harass up to 15 Persons simultaneously
each with their own personal harassment factor.
** As above the user is cautioned that use of this program may not
be legal and should proceed with its usage at his or her own
risk. With the advent of digital CCIS and fully featured ESS
telephone switching systems (ie. Instant callback and the
dreaded.... "Caller ID"). The predator may quickly find
himself the prey.
CONTENTS:
The distribution zipfile should include the following files:
CATCALL.EXE - The catcall program.
CATCALL.DOC - This Document.
USAGE:
Use of CATCALL is simple, it is 80% menu driven, requiring a
minimum of user input. simply copy the files CATCALL.EXE and
CATCALL.DOC to either a floppy or hard drive (Use of a dedicated
directory is not necessary) and type CATCALL. at the > prompt
the program should take a few seconds to load. If you are using
the program for the first time CATCALL will create its own
configuration file named "CATCALL.CFG". This file can be modified
from the CATCALL program itself or any ASCII text editor).
Creation of the Config file should take approximately 3-4 seconds.
the default configuration is as follows:
Comm Port COM1:
Sound Effects ON
Background ASCII 206
Dial String ATDT
Dial Prefix (none)
Modem Init String ATZ
the parameters are stored in the configuration file in ASCII
in the following format:
COM1:,ON,206,ATDT,,ATZ
If you experience any problems executing the program it is
strongly suggested that you simply delete the configuration
file ("CATCALL.CFG"), and run the program allowing CATCALL to
create a fresh configuration file, there are no limitations as to
the number of times this may be done.
After creation of the configuration file CATCALL will proceed onto
the Title page, Striking any key will bring you to the CATCALL
main menu. your options at this point are as follows:
BEGIN Harassment
SELECT Those to harass
CONFIGURE Cat Caller
SOUND effects
CLEAR current List
LOAD Old harassee list
SAVE Current list
QUIT harassment
OPTION DESCRIPTIONS:
BEGIN Harassment (MAIN MENU)
Use this option after you have utilized either options
SELECT, or LOAD. This is the "Meat" of the program and does
the actual harassment. While in harassment mode you may hit
the <ESCAPE> key to pause the harassment at this point you
will be placed into the harassment sub-menu: your options at
this menu are:
Quit - Quit Harassment to Main Menu
Resume - Resume Harassing the current list
Remove - Remove a harassee from the list
Listen - Turn Modem Speaker ON during harass
Hush - Turn Modem speaker OFF During harass
Modem - Allows you to send Any ASCII string
Directly to the modem.
View - Allows the user to view an expanded
Harassee parameter listing
All of the above options are self explanatory from the
program and hitting the <ESCAPE> key will generally terminate
any selection and return the user to the previous menu or
mode.
SELECT those to Harass: (MAIN MENU)
Selection of this option at the main menu will place the
user into the SELECT mode, at this point the user may select
up to 15 persons to be harassed simultaneously. the input
parameters are as follows:
Description ........... Any Alphanumeric character(s) and will be
the later reference to the person/Number
to be harassed
Telephone Number........ The telephone Number of the party to be
harassed in the format #-###-###-####
o Note that the hyphens ("-") may or may
not be included at this point. the 1-XXX
may also be excluded and simple 7 digit
telephone numbers are acceptable for
example:
1-800-111-2222
800-111-2222
111-2222
18001112222
all the above numbers would be
acceptable and would be dialed literally
as they appear.
Harassment Factor....... This may be an integer from 1 to 4, this
is the number of times the program will
call the above telephone number when it
arrives at the selected time and will
repeat this sequence from the selected
time thereafter.
Hangup Delay............ This may be an integer from 1 to 99 and
is simply the number of seconds to remain
on the line before hanging up and
proceeding with the next call. (I
recommend at least using 20 seconds for
good effect.)
Time to start Harass... This MUST be entered in the format hh:mm
in 24 hour format and is the time you
wish the harassment to begin for the
selected party.. hitting <RETURN> will
simply cause the harassment to begin
immediately after selecting the "BEGIN
Harass" Option from the main menu (See
above)
Pause between calls.... This may be any integer between 1 and 99
and it represents the number of minutes to
pause before dialing the selected number
after the Time to harass has begun.
Select Example:
Description........... John J. Doe
Telephone Number...... 111-2222
Harassment Factor..... 3
Hangup Delay.......... 35
Time to Start Harass.. 12:00
Pause Between Calls... 15
Choosing the above would cause CATCALL to proceed as follows :
Begin harassing Mr. John J. Doe at 12:00 (12 noon)
starting at 12:00 CATCALL would place 3 (harassment factor)
calls in a row to 111-2222, Hanging on the line for 35 seconds
per call (weather the phone is answered or not). after completing
the three calls CATCALL would then wait 15 Minutes (Pause between
calls) and would then call Mr. Doe again Three times in a row .
(ie 12:15, 12:30, 12:45, etc..) each of the fifteen allowable
harasses may have their own start times, delays, pauses and
harassment factors. This offers the User with a flexible
harassment schedule.
CONFIGURE Catcall: (MAIN MENU)
Selection of this option from the main menu allows the user
to either temporarily or permanently change the programs default
parameters the options at this menu are:
Comm Port - This is simply the Comm port that your
modem is logically located at valid examples
are: COM1:, COM2:, etc... note that the
colon is required..
Sound Effects - May Be either "ON", or "OFF". Entering any
other alphanumeric data at this point will
simply cause CATCALL to default to ON.
Background ASCII - This is simply the ASCII code for the
character used for the MAIN MENU background,
the default is 177, (Note any character
supplied will appear in inverse video)
DIAL String - This is the "AT" command that instructs
your modem to dial, the default dial
string is "ATDT" (tone dialing), You can
change this to "ATDP" if you are living in
one of the few areas served by rotary/Pulse
telephone service..
Dial Prefix - The Default for this parameter is nothing
This is simply a place for the user to
supply characters prior to all selected
(Via MAIN MENU Select option - see above)
Harassee telephone numbers, for example:
Harassee telephone # - 202-2222
DIAL String - ATDT
DIAL Prefix - 9
would cause CATCALL to send the following
string to the modem at dial time:
ATDT 9202-2222
^
dial prefix inserted here
This option may be useful if you are
running the program via a PBX where
9 may be required for an outside line.
Modem Init String - This Parameter specifies the "AT" command
that will be sent to the modem during
Initialization time the default for this
is "ATZ"
Pressing return at any selection point while in the configuration
Sub-system will cause the current value of the parameter to be
kept. Hitting the <ESCAPE> key will allow the user to abort the
configuration process and All Default values will remain
unchanged. After completion of the desired changes, the user will
be asked if he wishes to make the changes permanent, Selecting YES
will cause CATCALL to update the configuration file (CATCALL.CFG -
see above) and make the changes permanent - Selecting NO will
cause CATCALL to temporarily use the new parameters, they will
remain in effect until the program is terminated, and the
parameters in the configuration file will be loaded the next time
the program is run.
SOUND Effects: (MAIN MENU)
Selection of this option from the main Menu, simply
toggles the programs sound effects on or off. The toggle will
remain in effect until the program is terminated. Sound effects
can be set permanently ON/OFF by default in the configuration
option (See above)
CLEAR Current list : (MAIN MENU)
Selection of this option allows the user to clear CATCALL
of the list of harasses currently in use. The user will be
asked for verification before the clearing is actually done, and
it is strongly suggested that the user SAVE the list via the
SAVE Current list option. (see Below). Before proceeding with the
CLEAR option.
LOAD Old Harassee List: (MAIN MENU)
Selection of this option from the main menu will allow
the user to load a previously saved harassment list into memory
after successful loading the user may go directly to the
BEGIN Harassment mode (See above). Note that the user need not
supply any extension, as CATCALL automatically supplies the
extension ".HRS" to all saved harassment files. (see SAVE)
hitting <ESCAPE> will abort the load option and return the
user to the main menu.
SAVE Current List: (MAIN MENU)
This option allows the user to save the harassee list
currently residing in the CATCALL memory, selection of this
option simply prompts the user for the "Save Filename" and it
may be composed of up to 6 ALPHABETIC characters. The user
should not supply any extension as CATCALL will append the
extension ".HRS" automatically to all saved files. Hitting
the <ESCAPE> key will abort this option and return the user
to the main menu, Leaving the current harassee list in memory.
NOTE: Entering any NON-ALPHABETIC character in the filename
may cause the program to behave erratically, so proceed here at
your own risk, I have not trapped out special characters to allow
the knowledgeable user more flexibility, but I have given the
program only limited testing above the characters A-Z in the
filename.
QUIT Harassment: (MAIN MENU)
Selection of this option will terminate CATCALL, and return
the user to DOS, All harasses currently residing in memory will be
LOST, so it is suggested that the user utilize the SAVE option
(see above) before proceeding. This is the proper way to exit from
the CATCALL program. However if the user manually breaks out of
the program at any point there is no hazard to ones system.
Any questions, Comments, Suggestions for improvement or
scoldings may be directed to me via the internet I'll run across
it sooner or later in my wanderings...
Have Fun - And dial with care....
The
Marauder
Legion of Doom!
Note 1 - IBM is a registered trademark of International Business
Machines corporation.
Note 2 - HAYES is a registered trademark of the Hayes
corporation
(Neither of which had anything to do with this project)

+141
View File
@@ -0,0 +1,141 @@
_\|/_
0/ O O \0
| "..." |
cOdEd bY --oOo-------------oOo-- cOdEd bY
-*- mEsCaL -*- | | -*- mEsCaL -*-
| NoVeLL-NeTwOrK |
| PaSSwOrD-CaTcHeR v2.o |
| |
-----------------------
/////////////////////// ( )//( ) ////////////////////////////////
///////////////////// _o_( )//( )_o_ ////////////////////////////
////////////////////// \____|//|____/ ///////////////////////////
/////////////////////////////////////////////////////////////////
1. What the hell is it?
=======================
Hmmm, CATCH.COM is a cool Hackin-Tool, which allows you to collect the LOGIN
Passwords of the other Networkers... It was coded in less than 2 hours, so
it may be somethin buggy... But... who carz?
2. How does it work?
====================
Very simple... By starting CATCH.COM, it will install resident into memory!
There we stay passiv, until the User runs LOGIN.EXE! Then the Catch-
Routines will wake up! The Name and the Password of the user who is cur-
rently loggin on will be saved in Memory, while he enters... You are able
to save the collected Stuff from Memory to Disk, latah, by pressin a cewl
Key-Combination!
3. How to start it?
===================
SYNTAX: CATCH.COM [DRV:]
For example:
CATCH.COM B: (will write PASSWORD.LST(*) to B:\ )
CATCH.COM C: (will write PASSWORD.LST(*) to C:\ )
CATCH.COM (will write PASSWORD.LST(*) to A:\ )
Note:
If ya leave out the Parameter or if ya enter a nonvalid one, Drive A: is set!
* PASSWORD.LST is the File, in which you can write the collected Names
and Passwords... (see 4.!)
4. How to control it?
=====================
The control of the Program is very handy:
Use...
- STRG-ALT-'+' (on the numeric Pad) to save the collected Names and
Passwords to Disk! All the cought stuff is saved (on the Drive, which you
specified as Parameter when you started CATCH.COM) in a hidden File
named PASSWORD.LST. If ya wanna have a look at it, just type it!
After you saved, the internal Name-/Password-Buffer will reset...
- STRG-ALT-ENTER to uninstall the whole shit from memory... (Hopefully,
nobody can trace you, after doing the uninstall... Hopefully... ;) )
Of course it is impossible to remove it from memory, if other resident
Programs, loaded *after* our CATCH.COM, will use one of the INTs used
by our Program... In this case, CATCH.COM will simply stay passiv in
Memory but not free his used mem!
- STRG-ALT-ESC to toggle between ACTIV ON/OFF... That means, if you press
these keys, while you are *not* logged in, you can save YOUR Password
from beeing caught... If you press twice, the CATCHER will come to live
again and continue collecting Passwords... (This is useful, if you want
to show the PASSWORD.LST to ya friends, and if you don't want them to get
to know your own Password...)
5. Example of catching the Supervisor-Psw
=========================================
Jo... catchin the supervisor-password is really cewl, eh? No Problem, dude!
I'll give you one example how to get the supervisor's password...
First of all, you install the CATCH.COM on ya machine... then just tell the
supervisor that you forgot your system-password and you are now unable to
login... The supervisor will say somethin like: "Too bad! Let me have a
look!". Now, he will sit down at ya machine and login:
Enter your loginname: supervisor
Enter Password:
Got ya! Next, you just let him modify your password, and after that
he hopefully moves away from ya machine and continue his own work...
The way to heaven is free for you! Just press ALT-STRG-'+' and you got
his Password in the hidden File "PASSWORD.LST"! You can c it by typin
the File... You will get somethin like...
Supervisor
Bordello
That means: Name is "Supervisor" and Password is "Bordello"... Easy...
Finaly, you should discard ur fingerprints by pressin' ALT-STRG-ENTER
(remove CATCH.COM from Memory)...
har har... now, all doors are opened to you! HaVe PhUn!
6. What else is important?
==========================
- The so called Name-/Password-Buffer (the collected Names and Passwords
are saved there in Mem) has, in this Version, a size of 1024 Bytes...
This is enough to collect up to 40-50 Names and Passwords... If the Buffer
is full, it will reset automatically. That means, the first Names and Pass-
words will be overwritten by the new ones...
- Note that if there is no Disk in the specified Drive when you pressed
the magic Keyz, the System may hang!! So... keep in a Disk if ya wanna
save, or all stuff is lost!
7. Disclaimer
=============
This program is provided AS IS without any warranty, expressed or implied,
including but not limited to fitness for a particular use.
I cannot held responsible for any damages occured by using my Program!
Repeated: I cannot held responsible for *anything* that occurs by the use
of my Program!!
8. Creditz
==========
Written in 1994 by mEsCaL using TASM 3.2 (R) and published through ThE
SkeWerS iNC.! Please report any Bugs to me!
I do not know if there are Novell-Versions out, on which the Catcher
won't work... I tested it on our School-Network and it worked very well...
9. Last Words
=============
No fuckin last words, dude! I only have to excuse me for my damn baaaad
english-knowledge...But who carz??? Just kick it!
That's it!
-[mEsCaL]-
+409
View File
@@ -0,0 +1,409 @@
ÛÛÛÛÛ ÛÛÛ ÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛ
ÛÛ Û ÛÛ ÛÛ Û ÛÛ Û ÛÛÛ ÛÛÛ ÛÛ Û ÛÛ ÛÛÛ
ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛ
ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛ ÛÛ Û ÛÛ ÛÛÛÛ ÛÛ ÛÛ
ÛÛ ÛÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ
ÛÛ Û ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ Û ÛÛ ÛÛÛ
ÛÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛ
v2.00
Database of Feline Symptoms and Ailments
Copyright 1992, Jim Lynch
CATMED.DOC Page 1
INDEX Purpose................... 2
Quick start............... 2
Help...................... 2
Main Menu................. 2
Symptoms.................. 3
Ailments.................. 5
Commands.................. 6
Color Setup............... 7
Sound Effects............. 7
Exploding Windows......... 7
Network................... 7
Files Supplied............ 7
Support................... 8
Register.................. 5
Other Products............ 9
Disclaimer................ 9
CATMED.DOC Page 2
PURPOSE CAT-MED is a database of common feline symptoms and
ailments. It allows you to quickly determine what a
set of symptoms might mean, and also to see what
symptoms may be associated with a given ailment.
QUICK To install on a floppy or hard drive, simply copy all
START the distribution files to a directory of your choice.
If you are upgrading from a previous version, you
should install the new version into a new directory
or disk and then delete all the files from the old
version. Several files from the old version are no
longer used. You'll have to setup you colors again
if you don't like the factory defaults.
Start the program by typing CATMED at the DOS prompt.
If you want to force the screens to displayed in
Monochrome, start the program by typing CATMED /M
instead. This should not be necessary on monochrome
systems, since CAT-MED will detect what type of
video card you have and display it's screens
accordingly.
HELP Context sensitive help is available at all times.
Press the F1 key to get help.
MAIN MENU There are five Main Menu functions. They are:
Symptoms - This function displays a list of
Symptoms. You can select a Symptom,
or a group of Symptoms, and then see
a list of associated Ailments.
Ailments - This function displays a list of
Ailments. You can select an Ailment,
and then see a list of associated
Symptoms.
CatMed SetUp - This function allows you to alter the
colors, and turn sound effects and
exploding windows On or Off.
Program Info - Tells how to contact the program
Exit - Returns you to the operating system.
CATMED.DOC Page 3
SYMPTOMS This function lets you select a symptom or a group
of symptoms and view a list ailments associated with
your selection(s).
Symptoms List
-------------
This list is in alphabetic order.
PRESS SPACEBAR to Tag/UnTag the symptoms you want
to include.
PRESS "U" to UnTag all the symptoms. This lets
you start with a clean slate.
PRESS ENTER when you have tagged all the symptoms
you wish to investigate. If no symptoms are
tagged, the single hi-lited symptom is selected.
PRESS ESC to quit.
Selected Symptoms List
----------------------
After you have selected symptoms and pressed
enter, you are shown this review list of the
symptoms you selected.
PRESS ENTER accept this list of symptoms.
PRESS ESC to quit.
Ailments for Selected Symptom(s)
--------------------------------
After you have accepted the review list of
symptoms, you are shown this alphabetic list
ailments that are associated with the combination
of symptoms you selected.
From this list of ailments, you can then choose
one and view the symptoms that are associated
with that ailment.
PRESS ANY LETTER key to move to the next ailment
matching that letter.
PRESS ENTER to view the symptoms associated with
the hi-lited ailment.
PRESS ESC to quit.
CATMED.DOC Page 4
Symptoms for Selected Ailment
-----------------------------
This list is in probable occurance order, either
1, 2 or 3.
PRESS 1, 2 or 3 to move to the next symptom with
that probability of occurance.
PRESS ESC or ENTER to quit.
Also please see the section "COMMANDS" for other
commands that are always available while viewing a
list of symptoms or ailments.
CATMED.DOC Page 5
AILMENTS This function lets you select an ailment and view a
list of symptoms associated with that ailment.
Ailments List
-------------
This list is in alphabetic order.
PRESS ANY LETTER key to move to the next ailment
matching that letter.
PRESS ENTER to view the symptoms associated with
the hi-lited ailment.
PRESS ESC to quit.
Symptoms for Selected Ailment
-----------------------------
This list is in probable occurance order, either
1, 2 or 3.
PRESS 1, 2 or 3 to move to the next symptom with
that probability of occurance.
PRESS ESC or ENTER to quit.
Also please see the section "COMMANDS" for other
commands that are always available while viewing a
list of symptoms or ailments.
CATMED.DOC Page 6
COMMANDS These commands are always available while viewing a
list of symptoms or ailments.
PRESS the ARROW KEYS, PGUP and PGDN keys to move up
and down the list.
PRESS CTRL-PGUP to move to the top of the list
(hold down the CTRL key and press PGUP).
PRESS CTRL-PGDN to move to the end of the list
(hold down the CTRL key and press PGDN).
PRESS ENTER to move to the next screen.
PRESS ESC to return to the previous screen.
PRESS F1 for Help.
CATMED.DOC Page 7
COLOR You can change the screen colors used by CAT-MED.
SETUP This function is reached by selecting CATMED SETUP
from the Main Menu.
After you select COLOR SETUP, you must choose an
area to change by moving the hi-lite over the
desired choice and pressing ENTER. You can also
choose the factory DEFAULT COLORS or MONOCHROME from
the menu.
After you select an area, a color sample will appear
on the screen.
Press the LEFT/RIGHT ARROW KEYS to change the
foreground color.
Press the UP/DOWN ARROW KEYS to change the
background color.
When you are finished making changes, select SAVE
CHANGES from the menu to put your changes into
effect, or ABANDON CHANGES to abort.
SOUND You can turn ON or OFF the various beeps and boops
EFFECTS that sound at various times. This function is
reached by selecting CATMED SETUP from the main
menu.
EXPLODING You can turn ON or OFF the exploding window effect.
WINDOWS This function is reached by selecting CATMED SETUP
from the main menu.
NETWORK CAT-MED is network aware, and can be used on a
network without problems.
FILES The following files are supplied with CAT-MED. If
SUPPLIED any of these files are missing please contact the
program author.
catmed.bin config.dbf advert.doc
catmed.cga helptext.dbf catmed.doc
catmed.exe helptext.dbt order.doc
helptext.ntx summary.doc
update.doc
CATMED.DOC Page 8
SUPPORT I can be reached by U.S. mail:
Jim Lynch
P.O. Box 140192
Staten Island, NY 10314
USA
By Modem:
Compuserv 71210,2354
FidoNet 1:278/627, NMH only.
conferences: Clipper, Dbase,
Shareware
RelayNet (RIME) conferences: Clipper, Dbase,
Shareware
InterLink (ILink) conferences: Clipper, Dbase,
Shareware
Pet-Net conferences: Cats
REGISTER CAT-MED is a Shareware program.
You are free to copy and distribute CAT-MED for
NONCOMMERCIAL use provided it is not modified in any
way, and this document accompanies the program.
Clubs, user groups and disk distributors may charge a
nominal fee for expenses and handling.
Shareware isn't free; it is a distribution method
that gives you a chance to try software before buying
it. If you try a Shareware program and continue using
it, you are expected to register.
The registration fee for CAT-MED is $15.00 per copy,
which entitles you to lifetime technical support,
upgrade notices, and one free upgrade to the next
release. Registered copies also have the advertising
screen removed.
You can register by mail or phone. To register,
please see the separate ORDER.DOC file.
CATMED.DOC Page 9
OTHER Other programs available from the author:
PRODUCTS
XREF - a documentation tool for Dbase and Clipper
databases that allows you view and print
database structures, index expressions,
and cross references between them. You can
add and edit descriptions for each
database field to provide more extensive
documentation.
HDBCALC - a programmer's Hex/Decimal/Binary
calculator.
To order an evaluation copy of these programs,
please refer to the seperate ADVERT.DOC file.
DISCLAIMER The author makes no warranties, expressed or
implied, including, but not limited to,
merchantability or fitness for any particular
purpose. In no event shall the author be liable for
indirect or consequential damages arising from the
use of the CAT-MED.
+90
View File
@@ -0,0 +1,90 @@
CDLABEL for Windows
by Gene Toye
07/25/93
Introduction
CDLABEL for Windows is a Windows 3.1 application designed to print labels
for CD jewel boxes. Two labels are printed, a 15 cm by 11.7 cm label for
the back of the jewel box and a 12 cm by 12 cm label for the cover insert.
System Requriements
Windows 3.1
Printer with corresponding Windows driver (support for graphics and
True Type required)
VBRUN200.DLL (not included to reduce size of ZIP archive, commonly
available)
How to Use CDLABEL
CDLABEL prints to the default printer configured within Windows. As
CDLABEL uses the printer font metrics to display an accurate preview of the
label, the printer must be configured when CDLABEL is executed.
The CDLABEL window consists of five buttons across the top with a preview of
the current label below. The five buttons are:
Edit Label - displays dialog for editing text within label.
Print Label - prints label.
Half Scale or Full Scale - Toggle between full scale preview and half.
scale preview. CDLABEL defaults to a half.
scale preview on displays less than 600 pixels
in height.
About - Display CDLABEL about dialog.
Exit - Exit CDLABEL.
The Edit Label dialog has the following items:
Clear All Fields button - clears all text from the text input fields.
Spine Font button - displays Font dialog for selection of spine
text font. Default font is Arial 14 point.
Spine Text field - single line text input field for back label
spine text.
Copy Spine Text button - copies text from Spine Text field into Title
Text field.
Title Font button - displays Font dialog for selection of title
text font. Default font is Arial 36 point.
Title Text field - single line text input field for title text.
Body Font button - displays Font dialog for selection of title
text font. Default font is Arial 14 point.
Title Text field - multiple line text input field for title text.
To create a label, press the Edit Label button. Enter the desired text and
font combinations, then press Ok. The label will be previewed. Note that
lines too long are truncated when printed, including the body. If such lines
are noted, either insert a carriage return (if body text) or reduce the
font size to fit. As the back label and the front label are formatted the
same, there will be a 1.4 cm right margin on the preview and the back label.
This is due to the smaller size of the front label (12 cm versus 13.4 cm).
When the label is ready, press the Print button. The upper label is for the
back of the jewel box, behind the cd holder insert. Fold the two spine
labels up at a right angle to to back of the label. Remove the insert from
the jewel box and place the label in the cavity. Replace the cd holder.
Place the lower label from the printout in the lid of the jewel box.
Terms of Use
CDLABEL for Windows is Copyright (C) 1993 by the author, Gene Toye. It is
Freeware, meaning it may be used without payment to the author. It is
not public domain and rights to it remain with the author. It
may be freely uploaded to BBSes. Commercially distribution is permitted
so long as no fee is charged for the software itself, only for the media
and labor involved in said distribution.
How to Contact the Author
I welcome comments and bug reports. Since this is Freeware, I make no
guarantees as to its usefulness or freedom from bugs. I wrote it
primarilly to fulfill a personal need for a CD Label printer.
Internet: gtoye@oc.com
America Online: GToye (don't expect quick turnaround here)
Snail Mail: Gene Toye
1601 San Francisco
Carrollton, TX 75007
+422
View File
@@ -0,0 +1,422 @@
+----------------------------------------------------------------------+
| ###### ## ## ###### ####### ###### ###### |
| ## ## ## ## ## ## ## ## ## ## ## ## |
| ## ######## #### #### ## ## ## ## ## |
| ## ## ## ## ### ## ## ## ## ## ## |
| ###### ## ## ######## ####### ###### ###### |
+----------------------------------------------------------------------+
| CrackerHack Version 2.0 (c) 1992 - No Means No. Released 12/1/1992. |
| Crackerhack is a very fast custom increment password cracker |
| Utilities included with CH2 are: CH, SETCH, TIMECH, SPLITCH, & NETCH |
| This documentation file describes the Crackerhack Version2 utilities |
| in full detail along with examples & instructions on how to use them |
+----------------------------------------------------------------------+
| -> First increment password cracker ever released (ever written?) <- |
+----------------------------------------------------------------------+
Disclaimer:
I, No Means No, nor any persons involved with the production, construction,
instruction, publication, distribution, implementation or observation of
CrackerHack Version 2.0 assume no responsibility over persons involved with
using, abusing or choosing of CrackerHack Version 2.0, nor do we promote or
condone it. People can make up thier own minds, it is up to the individual.
Overview:
This is a program, like any other, that can be used for a variety of
purposes, educational, security, and yes, even cracking *gasp!*. However, it
was intended to shed light on increment password cracking and prove that it is
indeed very possible.
I began writing Crackerhack sometime during the summer of 1992, however it
was put aside several times so I could work on other projects. I completed
version 1 of Crackerhack sometime in late september of 1992 and was due to be
released to the public on 10/1/92, but it never happened. Instead, after
discovering a few bugs and alot of compatability problems, I decided to just
make CrackerHack Version 2 and have that be the first release to the public.
Only CH, SETCH, and TIMECH were planned for CH1, I added SPLITCH and NETCH in
CH2 as well as writing much more reliable and compatable source code for CH,
SETCH and TIMECH. The documentation was also greatly extended to further
discussion on the included utilities. The original release for CH2 was planned
for 11/1/92 but due to it being submitted to 2600, I have extended the release
date to 12/1/92.
Crackerhack was my second Unix C program to start. A version 3 of
Crackerhack could be very possible, it all depends on what I would like to add
to it. If CH2 has any errors that I do not yet know about, or if there are
any systems on which it will not compile or run correctly, please let me know.
If I discover that there were any problems that I have missed, or if I decide
to add extra features, then there WILL be a CH3. My internet mail address
will be included at the end of this documentation file.
The documentation you are about to read will be fairly detailed and I will
attempt to make things easy to understand, even if you have never used a
program like this before (I have never used a password cracker other than this
one). I also strongly suggest you PRINT these documentations up on PAPER, it
would be annoying to have to come back and scan through this file each time
you want instructions, information, or help using a Crackerhack utility. So
print these if you havn't already.
Explination:
To clear some things up, no password cracker can really be called a password
cracker unless it actually CRACKS the encryption. This program is similar to
other password crackers in the way it compares encryptions, but ONLY in that
respect. It crypts the "guessed word" and compares the encryption of the
"guessed word" to the encryption of the target password encryption, if they
match, the "guessed word" is the unencrypted password. However, that is the
ONLY way Crackerhack can be compared to other password crackers. Other
crackers use dictionary files to use as guesswords. Crackerhack does NOT use
this method, if it did it would be just like every other cracker out there,
which would mean in would be a waste of my time for me to write (correct?).
Instead, Crackerhack could be classified as an INCREMENT CRACKER. This means
it tries EVERY possible combination within a specified range. Combinations and
ranges are set with the SETCH utility and its use is explained in full detail
in the "how to use SETCH" section.
Understanding increment password cracking: Increment cracking works like
binary counting on an alphanumeric table. An example would be if you were to
scan from "aaa" to "zzz" in only lowercase alphas, it would count in the
following format: aaa,aab,aac...nml,nmm,nmn,nmo,nmp,nmq,nmr,nms,nmt,nmu,nmv...
zzu,zzv,zzw,zzx,zzy,zzz. You might be thinking "Damn that must take forever!".
Well first of all, Crackerhack is meant to be used to work on ONLY ONE password
and work on that password until it is either cracked, or the full combo/range
has been completed. Longer cracks take longer time, of course. And it also
depends on the machine you will be cracking the password on and if you will be
using a fast encryption program with CH2, such as UFC (Ultra Fast Crypt).
There is a "Suggestions" section later in this documentation that will
explain different methods of cracking your target password. Some good
suggestions on cracking methods, simple investigation procedures, and what to
AVOID when attempting to crack a password (you wouldnt want it to run
forever!).
Files:
Included with the archived version of this program is the UFC directory that
contains all of the needed Ultra Fast Crypt files so you may add UFC in the
Crackerhack files when compiling. This is explained in the section below
called "compiling". The following files should be in your directory:
CH2-DOC : This documentation file for Crackerhack Version 2.
CH2-NET : Complete information on how to set up the NETCH program.
makefile : The make file for Crackerhack Version 2.
addch.h : The include file for ch.c and timech.c.
ch.c : Crackerhack Version 2 source code.
netch.c : Network Crackerhack Version 2 source code.
setch.c : Setup Crackerhack Version 2 source code.
splitch.c : Split Crackerhack Version 2 source code.
timech.c : Time Crackerhack Version 2 source code.
netch.sh : Network Crackerhack Version 2 work file.
Compiling:
Semi-detailed instructions can be found by just typing "make" in the
directory where the Crackerhack files reside (runs the "makefile"). So if you
should at any time need quicker instructions on how to compile Crackerhack, you
can do that. I am going to explain here in a little more detail exactly how to
compile them.
Included with the archived version of Crackerhack V2, is UFC (Ultra Fast
Crypt). All of the UFC files can be found in the UFC directory that is
included in the CH2 archive. It is highly recommended that you use UFC or some
other fast encryption method with Crackerhack 2 to get MUCH greater speeds when
cracking, because, as most of us know, the standard crypt routines on any
system are slower than a cop without his doughnuts in the morning!
Because UFC is included with the Crackerhack archive, I will explain how to
compile UFC to get the "libufc.a" file and add it to Crackerhack. First,
switch over to the UFC directory and type "make libufc.a". This will compile
the semi-portable version of UFC's "libufc.a" file which should compile and
work correctly on ALL systems. However, you can specify which system you are
using to generate a faster version of UFC for your system, if this is what you
choose to do, you will have to read the UFC documentation for information on
that.
Also, when compiling it on a non-unix based system, use GCC compiler and it
SHOULD compile and run correctly. This has not yet been tested, because CH2
was designed and meant to work on faster systems.
There are 3 different ways to compile:
--------------------------------------
Compiling Crackerhack V2 with "libufc.a": Copy the "libufc.a" file into the
Crackerhack directory and type "make addufc". This will make all Crackerhack
files and add the Ultra Fast Crypt routines into CH and TIMECH.
Compiling Crackerhack V2 with "other.a": First compile the other fast
encryption method and copy the needed file into the Crackerhack directory under
the filename "other.a". Now type "make other", this will make all Crackerhack
files and add your specified fast encryption routines into CH and TIMECH.
Compiling Crackerhack V2 standard format: "make standard" will compile all
Crackerhack files without fast encryption.
--------------------------------------
NOTE: There are special instructions on how to make Crackerhack on a NeXT
system. Add the following string after "make" and before your argument,
'CFLAG=""'... This will clear the optimization flag which seems to screw up
the programs on a NeXT system, so use that so you dont run across any problems
with it after compiling.
You can also "make clean" which will delete all of the made Crackerhack
files as well as ".ch-t", "libufc.a" and "other.a" if they exist.
Using SETCH (Setting up Crackerhack):
The first program you will want to run will be SETCH. SETCH is what is used
to set up the cracking combination and ranges as well as selecting the password
you wish to crack. SETCH creates the ".ch-d" data file which every other
Crackerhack utility works with. After running SETCH you will get the following
menu:
+---(SETCH program output)-------------------------------------------+
|(1) Choose your target password from the "/etc/passwd" file. |
|(2) Choose your target password from the ".ch-p" file. |
|(3) Manually enter an encrypted password string. |
+--------------------------------------------------------------------+
If you are going to be cracking an account that is on the system you will be
cracking on, you will want to select #1 here. If you are going to be cracking
a password that is on another system other than the one you will be cracking on
you will need to copy the "/etc/passwd" file (or just a partial file or even
just one single account if needed) from your target's system, on to the system
you will be cracking on, under the file name of ".ch-p", and select #2. If you
know the encryption of the password you want to crack, then you can select #3
and it will prompt you to type it in. Make sure you type it in EXACTLY (all 13
digits), otherwise you will get false results, or no results at all!
In cases of #1 or #2, it will ask you a pattern to search for, you can
either just press return (to list every account), or enter a pattern for SETCH
to look for within each line of the password file (it uses the unix GREP
command). Then it will go through each account in the password file and ask
you which account you want to choose as your target.
NOTE: In cases #1 or #2, and if you select a pattern to search for it will
create the ".ch-t" file, which is a temporary file created when it uses the
GREP command. This file will be deleted after selecting your target. If you
have a disk space quota it might give you an error when it attempts to create
this file when SETCH is working with very large password files.
After you select either of the 3 options and select your target encryption
it will then display the following:
+---(SETCH program output)-------------------------------------------+
|Select one of the following COMBINATIONS: |
|(1): 0123456789 |
|(2): abcdefghijklmnopqrstuvwxyz |
|(3): 0123456789abcdefghijklmnopqrstuvwxyz |
|(4): ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
|(5): 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
+--------------------------------------------------------------------+
This is where you select the COMBINATION. keep in mind here that when the
program increments, it will count the combination from left to right. Example,
if you choose #2, it will count from a to z and then flip to aa. ab. ac. etc.
The decision on the combination depends on the method you wish to crack the
target password with. Some examples: Will you be scanning in JUST numeric
combinations? Then choose #1. Will you be doing a FULL alphanumeric
(including uppercase) scan? Then choose #5.
+---(SETCH program output)-------------------------------------------+
|Now select the cracking RANGE, up to 8 characters. |
|From : |
|To : |
+--------------------------------------------------------------------+
This is where you select where your cracking increment scan will start at
and end at. If you selected a combo of #1 for example, you will want the start
and end to be NUMERIC, however there are exceptions. A valid exception would
be if you were to crack a password starting with "staff000" and ending at
"staff999" and you want it to scan numerics only. But if you selected from
"test000" to "testaaa" with a numeric combination, it would increment forever.
This is because it would never get to the "aaa" after "test999", instead it
would flip to "tes0000" and continue counting. Be sure you select your COMBO
and RANGE correctly.
Once you have completed the "From" and "To" phase of SETCH it will then
create the ".ch-d" Crackerhack data file. You have just completed setting up
your crack. You may now run any of the other CH2 utilities.
Using TIMECH (Time estimation of your crack):
What this program does is tell you the estimated amount of time it will
take to complete the full cracking scan on the current machine. It will first
load the ".ch-d" data file. Then it counts the number of crypts per second
(CPS) your machine is getting. Then it counts the number of encryptions it
will take to crack your selection. It will then give you an estimate of the
time it will take to complete the full crack in the format of YY/DD/HH/MM/SS
(that is, if it doesn't crack it first!). Thats all there is to it. Simple
and helpful.
NOTE: Because systems/compilers vary on the maximum storage for the DOUBLE
VARIABLE in C, smaller systems will come up with false results when counting
the encryptions it will take to crack very large cracking ranges/combinations.
But then again, it is not a good idea to even attempt running such large cracks
on such small, obviously slow systems anyway. So I don't this this will be too
much of a problem. However, this will be fixed in the possible CH3.
Using CH (Crackerhack Version 2.0):
Crackerhack! Run this program, it uses your specifications in the ".ch-d"
file and runs the crack on it, all output will go to the ".ch-l" log file. The
only way it can prematurely abort is if the ".ch-d" file does not exist. In
that case it will immediatly tell you and abort, otherwise it will create or
append to the ".ch-l" crackerhack log file the crack is it working on. It will
stop and write the crack completion information to the ".ch-l" crackerhack log
file if either of the following 3 things happen: 1) It cracks the password.
2) It completes the cracking scan. 3) It is aborted.
It is best to run Crackerhack in the background, because some cracks take
quite a long time. A nohup (no hangup) is suggested as well. This will make
sure the program does not abort if the user hangs up or loses connection to the
system. An example on a unix system would be to do this: "nohup ch &". The &
signifies that the program will be run in the background as a job.
ACCESS NOTE: If you have superuser access, or if the system you are on
allows users to set priority, Crackerhack will automatically set the priority
of the program to absolute highest (-20). This will eat up process and CPU,
but it is worth it because you will get much faster CPS. If you do not have
such access to set the priority to a job, then it will not be set and will run
normally.
ABORTING NOTE: If Crackerhack is aborted it will write the last encryption
to the log file. This will let you know where it left off when it was aborted
so you are able to continue the crack from where it left off. However,
Crackerhack is UNABLE to detect the system shutdown, this might cause problems
if you are running it on a system that has an upcoming shutdown! You might
want to time it if your system has shutdowns to make sure it wont get killed
with the shutdown. If anyone knows how to detect a shutdown, let me know, I
have not figured it out. Also, it can not detect "sure kills" (kill -9)
because they can not be caught. So if you are going to kill it, send a -QUIT,
-TERM, or -INT so it will write the last encryption to the log file in case you
decide to continue that crack at a later time.
Using SPLITCH (Split Crackerhack into multiple jobs):
This program does exactly what its called, it SPLITS crackerhack into
multiple jobs to be run on the same system, this is useful for such systems as
Crays where you can run multiple jobs and still get the same results for each
job as you would from one single job. This greatly increases the CPS (Crypts
per second). The program sets the limit to up to 10 SPLITS, if you wish to run
more than 10, you will have to change the source code to "#define SPLITMAX <#>"
where <#> equals the maximum number of splits you wish it to allow. You will
then have to recompile the program if you change it. To use SPLITCH, you
simply specify the # of splits you wish to split your crack into (set by SETCH)
after the program name. If you wish to split it into, say 7 jobs, you would
type up "splitch 7". Everything afterwards is automatically done by SPLITCH.
What it does is it counts the cracks in your scan combo/range and then splits
it up and runs the crackerhack jobs for you with "nohup ch &", if you do not
wish to use that format, you will have you go into the source code once again
and change "#define BEFORECH" and "#define AFTERCH". This program is indeed
useful and serves its purpose, but an even MUCH more powerful program is needed
for another purposes, and that program is NETCH.
Using NETCH (Split Crackerhack and NETWORK the multiple jobs):
This program does as stated in SPLITCH, except the splitted jobs will NOT
be run on the machine you are currently running it on, but instead the splitted
jobs will be run on any machine(s) you specify (that you have access to of
course). You will need to compile a list of systems you are on (that you have
RSH access to) in a file named ".ch-n", which is the Crackerhack network
information file. The format for this file is thoroughly explained in the
CH2-NET file.
If your system does not support the "rsh" command, you will have to check to
see which command it uses instead, it might be "rshl" or something similar, if
it is different than "rsh" you can specify the command when you run NETCH. For
example if it uses rshl, you will need to run netch like this: "netch rshl".
When this program is run, it will first access the ".ch-n" file and collect the
information within. If there are any errors in the format, it will display the
error and abort. If it is fine it will then access the ".ch-d" data file (set
with SETCH) and split your crack according to the specified networks in ".ch-n"
and attempt to access each system and run the splits. If there are any errors
with accessing the system, it will let you know then attempt to access the next
system - it will not abort. It is a good idea to first run a test net-crack to
make sure all systems are working correctly before running your real crack, be
sure if you run a test net-crack to go and kill the cracks on each system
before you run the actual crack. If you don't, it will surely slow down the
CPS time you get on your actual crack. Of course, there is an alternative, and
that is to run a very short NETCH splitted crack to not only test to make sure
your network is working correctly, but it will also allow it to be finished
very quickly so you don't have to go to each system and abort them before
running your actual net-crack.
In the program, the maximum networks allowed are 100... This can be changed
by editing the line "#define SPLITMAX <#>" where <#> is of course, as explained
above in SPLITCH, the maximum number of splits allowed. In this case it is the
maximum number of network systems/splits allowed. Each split will go to one
machine on the network that you specify in the ".ch-n" file. All networked
cracks will be run with "nohup" and "&" as explained in the SPLITCH section,
however if you want to change them in netch, you'll have to edit the netch.sh
file. The netch.sh file is used only by netch when networking your crack.
This program is a powerful utility if used correctly, so use it correctly!
Files used/created:
Note that all the files start with a ".", which means they will be hidden
to a normal user on a standard unix system. Use the "-a" flag when using
"ls" to display them.
[FILE]: (Created_by) (Used_by) Description of file.
------: ------------ --------- --------------------
.ch-d : (SETCH ) (all ) Crackerhack Crack data file.
.ch-l : (CH ) (user ) Crackerhack Log file.
.ch-n : (user ) (NETCH ) Crackerhack Network information file.
.ch-p : (user ) (SETCH ) Alternate Passwd file, "etc/passwd" format.
.ch-t : (SETCH ) (SETCH ) Temporary file when choosing target in SETCH.
Suggestions:
Some people immediately attempt to crack a password with full or very long
range/combinations which is crazy under most conditions, but there are some
conditions under which it can actually be done though, only under those
conditions should it even be attempted. Such large cracks are usually not even
necessary. But maybe, for some reason, you want a VERY LONG increment scan.
No computer is fast enough to complete it in a reasonable amount of time,
however, there is an alternative. If you are able to access a network of
machines, you can divide the specified large crack on several machines. NETCH
does this for you automatically, and with NETCH and a large number of systems,
a very large crack CAN be done. Of course, you have to have access to those
systems if you want to use them. As stated before, this is usually not
necessary, so let this be your last choice.
One of the first things you will want to do is find out the requirements for
changing a password on the system where the target derived from. An example,
if password changing on that system requires it being at least 6 digits long
with alpha and numeric characters, you might want to start cracking with the
following scan first: Combo #3, Range From "000000" To "zzzzzz". Of course you
can scan everything below 6 digits if you wish. Just experiment, you will get
the hang of it if you havn't already.
Make sure you enter in all information correctly when setting up your crack
with SETCH! A strong suggestion is that you read over the above documentation
if you havn't already. Alot is explained in each section that could have been
explained in this section instead but I felt it would be better to give the
needed information/explination that pertained to that particular section.
Speeds:
From all of the tests other people and myself have done, Crackerhack 2 is
THE absolute fastest password cracker (Encryptions Per Second) out there. When
used with the same encryption techniques as the other cracker in question, most
usually it is UFC. It can get as much as (maybe more than) 10 times faster
than other password crackers on a UNICOS Cray system! (Using SPLITCH on a Cray
will accomplish this. If your user has priority access you can get extreme
ammounts of crypts per second without using SPLITCH). On every system it has
been tested on and every cracker it has been compared to, it comes out as the
fastest cracker in CPS. Of course, if you do not beleive this, you can test it
and compare it for yourself.
I was going to include a couple of charts in these documentations, however I
was not able to obtain a sizeable ammount of information for the charts by the
time of the release. If I write a future version of Crackerhack, I will
include the charts in that version.
Known Problems:
After completing this version I found a couple of minor problems:
When compiling Crackerhack on systems such as SysV, it may not compile
correctly and get errors. This same problem might occur on some HP systems as
well. Crackerhack should compile and run correctly under most other systems.
Crackerhack might not compile under DOS, this depends on how you compile it
and with what compiler. Very little tests have been done with this, because
CH2 was meant to be used on much faster systems. However if you wish to
pursuit compiling Crackerhack2 on a PC, use a compiler that can compile
programs in the UNIX C format (such as gcc).
If there is a Crackerhack Version 3, these problems will be fixed along with
any other problems that arise in Crackerhack Version 2.
Credits:
Thats it! I had no credits for Crackerhack Version 1 because I did all the
testing myself before releasing it to selected people to have tested. When I
gave it out to be tested, I was notified of certain problems on different
systems so I could correct them for the public release of Crackerhack (CH2).
So i'd like to thank those people who helped me get this programs compatibility
to where it is now and/or just using it alot and giving me feedback on it.
Those people are: Nat X, Sarlo, Lazar, Infomaster, Lithium Bandit, and Krynn.
I would also like to acknowledge Infomaster who not only suggested the idea of
NETCH, but was extremely helpful with testing it! These people were alot of
help and are recognized for it, thanks.
Also advanced thanks to Informix who is going to be helping me distribute
CH2 when it is released.
Thats it!:
Docs are finished. I hope everyone that uses this realizes it's potential,
fully understands how it operates, and puts it to good use. I didn't spend all
this time programming it for it just to be "collected". If you happen to find
any bugs, compiling problems, or if you have any comments, complaints,
suggestions, questions, or if you just want to annoy me or just need someone
to talk to, then you can leave me mail at the following internet mail address
and I will try to help you as much as I can.
No Means No
nmn@mindvox.phantom.com
+277
View File
@@ -0,0 +1,277 @@
CHOP
Version 3.1
Author: Walter J. Kennamer Compuserve PPN: 74025,514
CHOP breaks big files into smaller ones. A number of options are
supported to determine exactly where the breaks take place. This
version also allows you to extract a portion of a file.
More information about CHOP follows; but first, a word from my lawyers:
------------------------------------------------------------------------------
Copyright (c) 1986, 1987 Walter J. Kennamer. All Rights Reserved.
You are free to use, copy and distribute CHOP providing that:
NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
IT IS NOT MODIFIED IN ANY WAY.
THIS DOCUMENTATION FILE (UNMODIFIED) ACCOMPANIES ALL COPIES.
This program is provided AS IS without any warranty, expressed or
implied, including but not limited to fitness for a particular purpose.
------------------------------------------------------------------------------
Usage:
A>CHOP infile [-switches]
"Infile" is a unambiguous file name (i.e., no wildcards are allowed).
The original input file will be unchanged. The output files will have
the same stem as the input file, but the extension will be numbered
consecutively from 1. For example, if you break FOO.BAR into three
smaller files, FOO.BAR will be unchanged, and there will be three
output files--FOO.1, FOO.2 and FOO.3.
Each switch requires a separate switch character (e.g., "-a -b" rather
than "-ab"). Switch order does not matter, unless you enter mutually-
exclusive switches, in which case the last one takes precedence.
Type CHOP by itself to see help.
==============================
Command line options:
==============================
This table summarizes command line options. Options can be preceded
by a hyphen(-) or a slash(/) and can be upper or lower case.
These options determine how much of the file will be output
-Bx Beginning byte to extract (default = 1).
-Ex Ending byte to extract (default = end of file).
These options determine how the file will be partitioned. They
are mutually exclusive.
-Px Chop file into x pieces (default = 2).
-Sxxx Chop file into xxx-sized pieces.
These options determine where the data comes from and where it goes.
-Ifilename Read input from "filename".
-Odirectory Send output to "directory".
-T Trample over existing files.
These options determine if the break will occur at a precise byte or at a
set of characters near the computed boundary. -R and -X are mutually
exclusive. -N, -A, -H, -L, -C and -W have no meaning if -X is selected.
-R is the default option. The term "return character(s)" means the
character(s) that determine where the file will be chopped.
-R Try to chop at a "return" character (default is CR/LF).
-Nfoo Define a sequence of "return" characters (e.g.,"foo").
-A Chop after the "return" characters (default).
-H Chop before the "return" characters.
-Lxxx Limit search for "return" characters to xxx bytes.
-C Make "return" characters case sensitive.
-W Chop at each occurrence of the "return" string.
-X Chop at the exact computed byte.
-Mxxx Define the maximum number of chops (default = 256).
-Gxxx Start output file numbering with xxx.
-Q Quiet. Do not show program status on screen.
-Z Do not insert a Ctrl-Z EOF at end of each output file.
-J Pause for a keystroke between chops.
==============================
Terminology and other notes:
==============================
The term "computed break point" means the place in the file where the
split would normally occur, if CHOP was not doing something special
about return characters. For example, if you have a file of 100,000
bytes that is being split into 5 parts, the computed break points are
at these bytes:
20,000
40,000
60,000
80,000
You can force the breaks to occur exactly at these points by using the
-X (exact) switch on the command line. Or, you can let CHOP try to
find a logical breaking point in the file (normally a carriage return /
line feed).
The term "return string" or "return characters" means the sequence of
one or more characters that defines a newline, or some other
interesting boundary in the file. CHOP assumes that you would prefer
to split the file at a natural boundary, rather than just someplace in
the middle. By default, CHOP assumes the break should occur at a
carriage return / line feed character sequence (CR LF -- Hex 0D 0A).
Thus, if CHOP plans to break the file at the 1000th byte, it will
actually look a little ahead of byte 1000 to try to find a newline (CR
LF) and split it there, rather than at byte 1000.
You can redefine the return string to be something else. For example,
Compuserve messages begin with the "#:" character sequence. By
defining this sequence as the return string, you instruct CHOP to split
the file only between messages--no message would be split across CHOP
output files. You would define "#:" as the return string by using the
switch "-n#:" on the command line (see examples).
CHOP ordinarily splits a file after the return string. You can make
the split happen before the return string by using the -h switch. You
would probably want to use this switch in the preceding Compuserve
example since the "#:" characters mark the beginning of a message. You
would probably want them to be the first characters in a new file,
rather than the last characters in the preceding file.
You can also limit how far CHOP is willing to search for the return
string. The -L parameter determines how many bytes forward of the
computed break point CHOP looks for the return. The default is 1000
bytes. If it cannot find the return string within the number of bytes
specified with -L, CHOP breaks the file at the computed point. CHOP
never breaks a file before the computed point. As a consequence, the
last CHOP output file will typically be a little smaller than the
earlier ones: the differences between the computed break points and
the actual return boundaries mount up.
The first byte of a file is byte 0 or byte 1. The second byte is always
byte 2. In other words, CHOP always counts from 1. if you specify byte
0, it assumes you mean the beginning byte.
CHOP will ordinarily decline to overwrite any existing files, but will
display a message and halt instead. If you want to trample over
existing files (I had to use "trample"--T was the only letter left),
use the -t switch on the command line. If -t is specified, CHOP will
write over any files that get in its way.
Use the -g switch to change the beginning file number. For example, if
you want to chop FOO.BAR into several pieces, but you want the first
one to be numbered FOO.8, use the -g8 switch to set the starting
number.
==============================
Examples:
==============================
CHOP foo.bar
chops FOO.BAR into two pieces, FOO.1 and FOO.2. If you do not use either
the -P or -S switches, CHOP assumes you want to split the file into two
pieces.
CHOP foo.bat -p5
chops the foo.bat program into five files of approximately equal size.
The breaks take place after a CR/LF pair.
CHOP foo.bat -s2000 -x
chops foo.bat into 2000-byte pieces. The first chop occurs exactly at
byte 2000. Note that the output file will actually have 2001 bytes,
counting the control-Z added to the file (though you can suppress it
with the -z switch).
CHOP foo.bat -e2000
copies the first 2000 bytes of foo.bat to FOO.1. By default, copying
begins at the first byte of the file.
CHOP foo.bat -e2000 -p2
puts the first 2000 bytes of foo.bat into 2 files of about 1000 bytes each.
CHOP foo.bat -b3000 -e3999 -p2 -r
puts the 1000 bytes in foo.bat between byte 3000 and 3999 into 2 files.
The chop will occur at the first CR/LF pair after byte 3500.
CHOP foo.bat -s20000 -nMSG: -oD:\CHOPOUT -g5 -c
chops foo.bat into pieces of approximately 20,000 bytes. The first chop
will occur immediately after the first occurrence of the string "MSG:"
(case sensitive because of -c) after byte 20000. The output files will be
D:\CHOPOUT\FOO.5, FOO.6, etc.
CHOP -id:\pdq\cserv.thd -p10 -n#: -h -l2000
chops d:\pdq\cserv.thd into about 10 pieces, with the breaks occurring
immediately before the character string "#:" (used by Compuserve forum
software to designate a new message). CHOP will search up to 2000 bytes
past the computed break point for the "#:" string. If it cannot find
"#:" within 2000 bytes, it will give up and break at the computed point.
CHOP cserv.thd -h -n#: -w -t
chops cserv.thd into many files--one for each occurrence of the "#:"
string. The -w switch implies an unlimited search limit and overrides
the -P, -S and -X switches. Overwrite any files (CSERV.1, CSERV.2,
etc.) that are already there.
CHOP program.pas -nPROCEDURE -w -h
chops the program.pas Pascal file into many files--one for each
procedure. After executing this command, each of the procedures in
"program.pas" will be in a separate file.
CHOP foo.bar -n$0C -p3
This example shows how to put hex codes in the "return" string. The
codes must be exactly two digits (i.e., precede single digit hex codes
with a 0) and must be preceded by a dollar sign. This example causes
foo.bar to be chopped into three pieces, with the chop taking place at a
hex 0C character (ASCII decimal 12, or formfeed).
FOR %1 in (*.TXT) DO CHOP %1 -p4
This example illustrates how to use the batch FOR command to CHOP a
series of files as specified by the wildcard (*.TXT). In this case,
each .TXT file will be chopped into four pieces of approximately equal
size.
==============================
Rejoining Chopped Files
==============================
You can use the DOS copy command to rejoin chopped files. For example,
this command rejoins two text files--FOO.1 and FOO.2--to recreate the
original FOO.BAR file.
COPY FOO.1/a+FOO.2 FOO.BAR
If FOO.BAR, FOO.1 and FOO.2 are binary files, use the /b switch with the
COPY command:
COPY FOO.1/b+FOO.2 FOO.BAR
The /b switch causes DOS to treat control-Z characters as legitimate
data (instead of EOF marks) when the files are joined.
==============================
Support
==============================
If you have any problems with CHOP or any suggestions about how to
improve it, please contact me on Compuserve (PPN 74025,514) or write to
me at 1801 E. 12th., Apt 1118, Cleveland, OH 44114.

File diff suppressed because it is too large Load Diff
+264
View File
@@ -0,0 +1,264 @@
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
xx/xx/93 2.00 BETA
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
DO NOT DISTRIBUTE! THIS IS FOR EXCLUSIVE USE OF COPS MEMBERS ONLY!
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/\/\%%%%%%%\/\%%%%%%/\%%%\/\/\%%%\/\/\%%%\/%%%/\%%%\/\/\/%%%%%%\/\%%%%%%%\/\/\
/\/%%% %%%/\/ \%%% /\/\%%% /\/\%%% /%%% \%%% /\/\%%% %%%/\%%% %%%/\/\
/\/%%% \/\ \%%%%%\/\%%% /\/\%%% /\/\%%% /%%% \%%% /\/\%%%%%%%% \%%%%%%% \/\
\/\%%% /\/\/\/%%% \/%%% \/\/%%% \/\/%%% \%%% /%%% \/\/%%% %%% /%%% %%%\/\/
/\/%%% \/%%%/\%%% /\/\%%% /\/\%%% /\/\%%% /%%% \%%% /\/\%%% /%%% \%%% /%%% \/\
/\/\%%%%%%% \%%%%%%/\%%%%%%/\%%%%%%/\/%%%%%% \%%%%%%/\%%% /%%% \%%% /%%% \/\
/\/\/ /\/ \/ \/ \/\ /\/ \/ /\ \/ /\ \/\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/\/%%%/\/\/\%%%\/\%%%%%%/\/%%%/\%%%\/\%%%%%%/\/\%%%%%%%\/\%%%%%%/\%%%%%%%\/\/\
/\/%%%%\/\/%%%% /%%% %%%\/%%% \%%% /%%% %%%\/%%% %%%/\/ \%%% %%%/\/\
/\/%%%%%/\%%%%% /%%%%%%%% /%%%%\%%% /%%%%%%%% /%%% \/\ \%%%%%\/\%%%%%%% \/\
\/\%%% %%%% %%% \%%% %%% \%%%%%%%% \%%% /%%% \%%% /%%%%\/%%% \/%%% \%%%\/\/
/\/%%% \%% %%% /%%% \%%% /%%% %%%% /%%% \%%% /%%% \/%%% \%%% /\/\%%% /%%% \/\
/\/%%% \/ \%%% /%%% \%%% /%%% \%%% /%%% \%%% /\%%%%%%% \%%%%%%/\%%% /%%% \/\
/\/\ \/\/\/ /\ \/ /\ \/ /\ \/ /\/ /\/ \/ /\ \/\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^
NEW IN THIS VERSION
~~~~~~~~~~~~~~~~~~~
Here are the new features added since the release of version 1.00 on (or
around) 02/23/93:
o MORE CITIES! Yes, that's right, over 500 Cities total!
. Now supporting Canada and Mexico
o Carrier information for most areas
. List the A or B side carriers
. Set search to entire state with modified output
o Format conversion
. Convert Hex to Decimal or Binary
. Convert Octal to Decimal or Binary
o MORE PHONES! Over 200 phones now listed!
. Now supports OEM products listing
o Multiple Menus
. Seperate areas for each type of processing
WHAT IS CELLULAR MANAGE
~~~~~~~~~~~~~~~~~~~~~~~
Well, Cellular Manager (CM), would best be described as a kind of reference
program, much like Professor Falkins Phreakers Tools, except for Cellular phones
and the like. CM has some of the most common tools in a easy, fast, menu driven
environment, to give us just one more edge over our opponents.
I am not, however, going to go into any great detail about what each of the
options is for, and what can be done with the information gathered, since there
are many other nice files already out there that do just that (I would recommend
Bootlegger's freecell file from HohoCon, since in includes virtually all of the
information that is available at the moment).
The most benifical part about this program is the fact that you can track down
the strongest control cell in your area. This is especially useful when trying
to recieve the reverse control channel, which is very weak (due to power limit-
ations from the mobile to the base).
AVAILABLE OPTIONS
~~~~~~~~~~~~~~~~~
All of the options listed below are available from the main menu of the CM,
which the program defaults into. Some options are also available from the
command line, which is discussed later. Cellular Manager is broken into three
different areas, which contain:
[1] CHANNEL PROCESSING
########################
Cellular Channel to Frequency
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Fairly self-explanitory, converts a given cellular frequency into it's
channel number. Will display either forward, or reverse frequencies.
Cellular Frequency to Channel
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Like above option, except reversed.
Table of control Channels
^^^^^^^^^^^^^^^^^^^^^^^^^
A complete listing of all the controls numbers, their channel number, and
forward and reverse frequencies.
Locate and list adjacent Cells
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Prompts for entry of the most powerful control or voice channel in your
area, then displays a small hex table showing the closest cells and their
identification. This function also displays the cell's group status as
well as it's designator.
Search through Wirelines via City/State
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Searches through a list of major cities in the US and then displays the
Wire/Non-Wire (Band A&B) channels for each city, as well as the two carriers
in the region. States can also be specified by simply entering the states
two letter abbreviation.
Cross-Reference Cell Groups
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Uses the cellulars group identification and wireline specs to list all
of the voice channels and their corresponding frequencies. Also displays
the control channel for the group, and it's forward frequency.
Find Strongest Control Cell
^^^^^^^^^^^^^^^^^^^^^^^^^^^
This option requires you to have established 5 (no more, no less) control
channels that can be received at your location. After inputing their
channel numbers, the program will respond with the group that is most
likely to be the strongest.
[2] FORMAT CONVERSION
#######################
Create MIN1 and MIN2
^^^^^^^^^^^^^^^^^^^^
Generates the MIN1 and MIN2 for the phones NAM. Prompts for the areacode
and phone number, then outputs the MIN's in binary format.
Convert HEX to Binary
^^^^^^^^^^^^^^^^^^^^^
Convienient routine to convert a HEX (Base 16) number (up to 10 chars)
into it's Binary (Base 2) format.
Convert HEX to Decimal
^^^^^^^^^^^^^^^^^^^^^^
Same as above, except HEX is limited to 4 chars and conversion is to
the Decimal (Base 10) format.
Convert Octal to Binary
^^^^^^^^^^^^^^^^^^^^^^^
Convienient routine to convert a Octal (Base 8) number (up to 10 digits)
into it's Binary format.
Convert Octal to Decimal
^^^^^^^^^^^^^^^^^^^^^^^^
Same as above, except conversion is to the Decimal format.
[3] PHONE SPECIFICATIONS
##########################
Search list of Manufactures ESN by Name
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Searches through a list of Cellular phone manufactures name fields, then
shows the most likely match and their decimal ESN identification.
Search list of Manufactures ESN by Identification
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Like above option, except reversed.
Search through Phone programming specs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Searches through a list of Cellular phones available, and displays what
information is available about reprogramming. Well display all possible
matches. This search will only work with model numbers, so the Mitsubishi
1500 would be '1500' or '500'.
THE BEST WAY TO SCAN REVERSE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The way I would recommend that will yield the best results when scanning the
reverse channels is this:
(1) Locate and write down the forward control frequencies that you can hear
with the antenni removed from your scanner. Get at least five, and if
possible stay either wireline or non-wireline. Use the table in option
[4] if necessary.
(2) Convert the frequencies to their appropriate channel using option [3].
(3) Enter the channels into option [C] and then write down the group.
(4) Use option [B] to find the channel/frequencies, as well as the strongest
voice channels in your region.
(5) Enter the channel into option [2] and specify [R]everse information.
Simple enough, eh? Now you have the best possible chance of capturing reverse
channel information (such as the ESN). Also try to place your scanners antenni
in the most open location possible, although this is not necessary. I have used
a Radio Shack Pro-37 (portable) with a DDI, and a laptop with very good success.
A COUPLE OF BRIEF NOTES
~~~~~~~~~~~~~~~~~~~~~~~
In the Locate & List Adj Cells function, on the hex chart that is displayed,
only cells that actually TOUCH the highlighed cell are adjacent to it. The cells
on the left and right do not touch the primary cell, although they may appear to.
This is because there are redundant cells exactly opposite it in the field, and
I chose not to display those.
When trying to establish what is most likely your strongest control channel,
it does not matter if you list Wireline and Non-Wireline channels. This is due
to the fact that most cellular companies share a zone, and split it up on the
A/B settings appropriately. Also, do not list the same cell channel twice, since
this will effect what it suggests.
COMMAND LINE OPTIONS
~~~~~~~~~~~~~~~~~~~~
Currently no command line functions are available, although upcoming versions
should start to institute them.
KNOWN BUGS
~~~~~~~~~~
None.
UPDATES
~~~~~~~
I plan to keep CM as updated as possible, but this can only be done with your
help! When you find any information that it does not contain, please leave it
to me on any of the systems listed below. An open exchange of information helps
everyone, and this is the next frontier of phreaking... Extra special greetings
go out to:
FUNKY MONKEY and THE GATSBY
for making some suggestions which were implimented in this version of CM.
PROGRAMS FOR THE FUTURE
~~~~~~~~~~~~~~~~~~~~~~~
Here's some of the programs to be watching for, from me, in the future:
PAIR A very useful utility for sorting and flagging NAM/ESN
pairs. Will cross-reference by both the NAM and ESN, have
password protection/encryption, and multiple flags.
[AVAILABLE SUMMER 1993]
VINHP A new operating system for the HP 95/LX
[AVAILABLE FALL 1993]
CONCLUSION
~~~~~~~~~~
If you have any questions, comments, or problems, please report them to me
on any of the boards listed below or in the program. The greets go out to:
DYNASTAR BOOTLEGGER EREKOSE
MAXIMUM OVERDRIVE MR. DRUNKFUX GRANDMASTER RATTE'
A couple of notes on the systems listed below... There finally is a transfer
area on Demon Roach for my files (Log 38), so you can EASILY find them for a
change.
Big news for anyone who wants to get in touch with me, I finally was forced
into getting an Internet account, and can be reached at videov@cypher.com
Extra special thanks go to those wacky guys at cDc (especially Drunkfux) for
hooking me up. This is also my mega-offical distribution/infiltration ftp site,
so go and leech (this will also be a beta site, with the newest shit).
Here's a couple of things to keep in mind; Clinton's daughter is what happens
when you marry a relative (Jesus, what the fuck IS she?). And, of course,
always remember...
Fuck Clinton, Fuck Gore, Fuck Law & Order, and FUCK THE WORLD!
=============================================================================
Demon Roach [PW: THRASH - NUP: FEAR - cDc - Nuff said ] 24 806-794-4362
Phunline [Extensive Satellite/Virii sections ] 96 916-481-2306
The Stash [My European Connection... Lots of files ] 96 46-498-222113
=============================================================================
This concludes another wonderful file by Video Vindicator (C)opyright 1993
=============================================================================
+568
View File
@@ -0,0 +1,568 @@
TRS-80 COLOUR COMPUTER II EMULATOR Ver. 1.30 (C) 1993,94 Jeff Vavasour
======================================================================
(Internet e-mail to jeffv@physics.ubc.ca)
1. DESCRIPTION
--------------
This package is a complete* emulator designed to make your PC imitate a
genuine CoCo II with 64K and four disk drives. It has also been tested
successfully with the Dragon 32's 16K ROM, though you must use the Options
Menu (F6 in the emulator) to select the Dragon keyboard.
It requires EGA graphics and 256K RAM. Also, a 286 with at least 12 MHz
is recommended, though you'll need a faster processor to get operating
speed that matches the real machine. (A 33 MHz 486, on the other hand,
is drastic overkill. A slowdown option is provided for users fortunate
enough to posess such a beast.)
Version 1.30 is the second release of this package, and includes several |
corrections and enhancements. Most notable of the bugs which have been |
addressed are those which can cause emulator lockup in OS/9 Level 1 and |
certain non-standard accesses to the joystick or keyboard. Enhancements |
include a powerful 6809 debugger/monitor, improved keyboard handling, and |
a utility to move files between the CoCo and MS-DOS environments. Through- |
out this .DOC file, the "|" character on the right indicates changes to the |
documentation from version 1.20. |
This program is freeware, though copyright remains with the author. You
are permitted to distribute the UNALTERED .ZIP package, as long as all
programs listed in section 2 are included. Also, this package may not be
sold or distributed commercially or for profit, though a reasonable media
charge for distribution is acceptable.
Please feel free to forward any comments to me at the email address above,
or the postal address given in the "comments" section below. (Alternate
email addresses are given there as well, but they should only be used if my
primary email address fails.)
* Footnote: For those technically inclined, all features and hardware of the
standard equipped CoCo have been reproduced with the exception of the
cassette port and the 63.5us horizontal sync interrupt. The standard 60Hz
clock interrupt *is* reproduced. The "bit-banger" serial output has also
been rerouted to the PC's printer port, allowing for its use as a printer
port. The DSKINI command will also not work within the emulator, but all
disks are automatically formatted when first used anyway.
2. GETTING STARTED
------------------
This emulator is provided as a .ZIP package containing the following files:
COCO.DOC - this file
COCO.EXE - the main emulator program
COCOUTIL.DSK - CoCo program to retrieve your ROM
DSKINI.EXE - a utility to format CoCo-compatible disks
PORT.BAS - an MS-DOS BASIC program to move files between virtual |
disks used by the emulator, and your MS-DOS directory |
RETRIEVE.EXE - a utility to read CoCo-compatible disks
All files except COCOUTIL.DSK have been revised since version 1.20. |
The only thing that you will need that is not provided with the emulator
is the ROM of a genuine CoCo. Naturally, this could not be included here
for copyright reasons, but any CoCo I or CoCo II will do to get you started.
If you don't have a disk drive with your CoCo, you'll need to build a special
cable to connect your CoCo and PC, but don't worry it's *very* straight
forward and requires only three wires. Detailed instructions are given in
the Appendix.
Section 2.1 explains how to retrieve the ROM via disk, while section 2.2
explains how to do it on a diskless system. (No additional hardware is
required for those using disk.)
Also, Paul Burgin's Dragon 32 emulator (available via ftp from "ftp.funet.fi"
in the "/pub/msdos/interfaces/emulators" directory as "PCDGN101.ZIP")
is capable of reading the ROMs from a CoCo-generated cassette using the
SoundBlaster. As an alternative to the cable method for diskless systems,
section 2.3 explains how to convert these files for use with my emulator.
2.1 OBTAINING THE ROM VIA DISK
------------------------------
In MS-DOS, place a blank 5 1/4" disk in your drive and type:
DSKINI d: COCOUTIL
where "d:" identifies the drive containing the disk (e.g. "A:", "B:", etc.).
Place this disk in drive 0 of your CoCo and type (on the CoCo):
RUN"GETROM"
Next, place the disk back into your PC and type:
RETRIEVE /R d: COCO.ROM
Again, "d:" identifies the drive containing the disk. (Note that in both
cases, "A:" is the default if this parameter is omitted.)
You are now ready to run the emulator. (See section 3.)
2.2 OBTAINING THE ROM FROM DISKLESS MACHINES
--------------------------------------------
This method requires at least version 1.1 of the CoCo BASIC ROM.
Once the cable is built and tested, connect your PC and CoCo together and
load your favourite terminal program on your PC, setting it to 2400 baud,
no parity, 1 stop bit, 8 bit word length. Select the file capture option
and record all data received to the file "COCO.ROM". Then, run the
following program on your CoCo:
10 POKE 150,18
20 PRINT#-2,CHR$(0);CHR$(128);
30 FOR X=32768 TO 49151
40 PRINT#-2,CHR$(PEEK(X));
50 NEXT
Pay particular attention to the semicolons in this program. Once the CoCo
is done and the "OK" prompt returns, close the captured file. Check that
it should be 16386 bytes long in your MS-DOS directory. You may now run
the emulator. (See section 3.)
If the file is too long, there may be a problem with your terminal program
and you should try another. (The file is being transmitted as a binary
file so no filters should be used in your terminal program.)
2.3 USING PCDGN101.ZIP'S ROM FILES (DISKLESS SYSTEMS)
-----------------------------------------------------
Follow the instructions with Paul Burgin's emulator to generate the *.DGN
ROM file. Then, type the following commands in MS-DOS:
DEBUG filename.DGN
M 110 L 4000 102
A 100
DW 8000
{press ENTER an extra time here to get the "-" prompt back.}
N COCO.ROM
W
Q
You have now generated the file "COCO.ROM" which COCO.EXE can use.
3. RUNNING THE EMULATOR
-----------------------
With COCO.ROM in the default directory, type "COCO" at the MS-DOS prompt and
press ENTER. The emulator will start, with a title banner and list of
function keys appearing. Pressing any key will begin the operation of the
emulator. This screen may be redisplayed at any time by pressing F10.
Some other functions are as follows:
F1: Activates the 6809 debugger. See section 7 for details on its use. |
If you enter this option accidentally, press "C" to return to the |
emulator. Pressing "Q" will quit the emulator and return to MS-DOS. |
You will be prompted to enter "Y" to confirm if you attempt to quit. |
(Now users of version 1.20 know what the F1 key was reserved for...) |
F2: The virtual disk menu. The emulator uses special "virtual disk files"
to represent disks (with the extension .DSK, like "COCOUTIL.DSK" provided
with the emulator). This menu allows you to place these "disks" into one
of the four "disk drives" of the emulated CoCo. This is done by
selecting a drive number and then typing in or selecting the disk's
name from the directory listing on the right. New "virtual disks" may
be created by entering an unused name. They will already be formatted
once created, eliminating the need for the CoCo's DSKINI command.
Also, drives may be "write protected" by pressing SHIFT and a drive
number. A bar around a drive number indicates that it is write protected.
ESC returns to normal emulation.
F3: Snapshots. The entire state of the emulator, such as a program or a
game-in-play may be saved to an MS-DOS file, to be retrieved later
(even if you exit the emulator or turn off the computer between
sessions.)
To save a snapshot, press "S" and then type in a name or select it from
those already in the directory. To load, press "L" and select a name
as before. ESC aborts this option.
F4: This turns the sound option on or off. With sound on, 1-bit and 6-bit
CoCo sound is reproduced on the PC's feeble internal speaker.
F5: This changes the keyboard layout. You have a choice between the PC's
layout or the CoCo's. In the CoCo layout, SHIFT-2 would be a quote
will in the PC layout, SHIFT-2 is an "@". Other keys may not be so
obvious: ESC is the BREAK key, ALT is the CLEAR key. The arrow keys
on the keypad also work, but NUM LOCK should be off for this.
F6: Options menu. Pressing the letter associated with an option changes it.
Also, the "+" and "-" keys speed up or slow down the emulator. All
other menus may be selected from this screen as it is obtainable using
the right mouse button. The user can also change the character set
between normal/inverse characters (factory standard) and upper/lowercase
(sometimes more pleasant to look at). The left and/or right joysticks
can be linked to the mouse, with the left button being the "fire" button.
Also, a feature called "artifacting" is provided. When "red" or "blue"
is selected, the screen will blur the highest resolution screen to
simulate the colour effects of a CoCo used with a standard TV set. This
was considered a "feature" in some games.
You may also reset the CoCo or quit the emulator using this menu. Once
one of these options have been selected however, you must hit "Y" or "N"
only to confirm or reject your choice.
NOTE FOR DRAGON 32 USERS: (KEYBOARD SELECTION)
The keyboard layout is also selectable in the F6 menu, though
it has four options rather than two. They are "PC" and "CoCo" -- as
described for the F5 key -- and "DragonPC" or "Dragon" which are the
analogous choices for the Dragon 32 keyboard mapping. If you select
Dragon or DragonPC in this menu, the F5 key will then toggle between
these two settings, rather than "PC" and "CoCo".
If you use the keyboard selection for one of the CoCo or Dragon, but
the ROMs of the other, then the keys will not respond properly. (For
example, the "A" and "1" keys will be exchanged.) This is corrected
simply by pressing F6 and using the keyboard layout option to select
the correct keyboard.
4. USING REAL DISKS WITH THE EMULATOR
-------------------------------------
The DSKINI and RETRIEVE programs have a more general purpose than just
retrieving the ROM.
Any virtual disk file may be written to a 5 1/4" disk, readable by the
CoCo by entering:
DSKINI [d:] [diskname[.DSK]]
where "d:" is the destination drive and "diskname" is the source virtual disk
file. At least one of these two parameters must be given. (The default
drive for "d:" is A:.) Paths may be included in the diskname parameter.
If "diskname" is omitted, a blank disk is formatted.
Disks created by DSKINI.EXE may also be read back to virtual disk files
using
RETRIEVE [d:] diskname[.DSK]
You can use this method to transfer files from your CoCo disks to the
emulator by following these steps:
1. Create a CoCo disk on your PC using DSKINI.EXE.
2. On your CoCo, use BACKUP or COPY to copy the files onto the disk you've
just created in step 1.
3. Put the disk back in your PC and use RETRIEVE.EXE to make a virtual disk
file from it.
It may also be possible to use RETRIEVE directly on your original CoCo |
disks, but most PCs' disk controllers are very picky about formats |
(resulting in a read error on one sector per track). If this happens, |
your only choice is to follow the three steps above. |
5. USING PROGRAM PAKS WITH THE EMULATOR
---------------------------------------
There are two ways to read a Program Pak on a CoCo while staying in BASIC. |
Either you can cover up the pin on the cartridge that tells the CoCo to |
auto-start it, or you can plug the cartridge in with the power on, after |
starting the following program. |
|
WARNING: THERE HAVE BEEN MANY HORROR STORIES OF AN IMPROPERLY INSERTED |
CARTRIDGE BLOWING THE UNPROTECTED CPU WHEN THE POWER IS ON. If |
you elect to use the latter method, do so carefully and proceed |
at your own risk. |
|
To transfer your Program Pak to a PC, you will need the same cable used for |
the diskless ROM transfer. Then, complete the following steps: |
|
1. IF YOU ARE USING THE COVER-THE-PIN METHOD, take the cartridge you are |
going to use and pull the cover back to expose the pins. Then, cover |
up the fourth pin position in on the left on the bottom (pin 8, the |
"CART" signal). (IMPORTANT: Most cartridges have no contacts for the |
first three positions, so this may be the first plated-contact from the |
left. In this case, you can usually see where the other three positions |
should be by the scratch marks from frequent use.) If needed, you can |
also cover up the pin on the top side directly above this one, as well as |
the three pin positions to each of their lefts if necessary. Be careful |
not to cover the fifth pins in as this will make the cartridge |
unreadable. |
|
Once this is done, insert the Pak into your CoCo with the power off, then |
turn on the computer. If you are successful, the CoCo will power up into |
BASIC's "OK" prompt despite the cartridge being present. |
|
2. Next, for both methods, type in the following program in your CoCo: |
10 POKE 65315,54
20 INPUT"INSERT PAK AND PRESS [ENTER] TO SEND";X$
30 POKE 150,18
40 PRINT#-2,CHR$(0);CHR$(32);
50 PRINT#-2,CHR$(0);CHR$(192);
60 FOR X=49152 TO 57343
70 PRINT#-2,CHR$(PEEK(X));
80 NEXT X
90 FOR X=1 TO 33
100 PRINT#-2,CHR$(0);
110 NEXT X
120 PRINT#-2,CHR$(0);CHR$(192);
Note: You may omit lines 10 and 20 if using the covering-the-pin method. |
3. Connect your PC to the CoCo and prepare a terminal capture program on your
PC as described in section 2.2. (Use the extension ".PAK" for Program
Paks.)
4. Run the BASIC program on your CoCo. If you are using the insert-with- |
power-on method, insert the cartridge when you are prompted to do so and |
then press ENTER. This will begin transmission of the cartridge's data. |
The resulting file on your PC should be 8231 bytes long.
To run the Program Pak in the emulator, simply use the Snapshot Menu.
For those who have copied their Program Paks to their PCs using some other
method, the general format of the file constructed by the above program is:
- 2 byte ROM length (LSB/MSB, usually 8192 decimal)
- 2 byte start address (LSB/MSB, usually C000H)
- ROM data (usually 8192 bytes)
- 33 bytes of 0's
- 2 byte entry address (LSB/MSB, usually C000H)
Selecting RESET in the Options Menu will return to BASIC. (Disk BASIC users
may wish to copy over their Disk BASIC as a Program Pak so they may reload
it after running a Program Pak.)
6. MOVING FILES BETWEEN COCO DISKS AND YOUR MS-DOS DIRECTORY |
------------------------------------------------------------ |
|
As a side-beneift, the CoCo II emulator provides a way to move your CoCo |
files to your PC environment. The program "PORT.BAS" is a PC BASIC program |
which will run on either GW-BASIC/BASICA or QBASIC, found on virtually all |
MS-DOS systems. This program can move files between your MS-DOS directory |
and the virtual disk ".DSK" files used by the emulator. To make a ".DSK" |
file out of a CoCo disk, or to write a ".DSK" file to a floppy, follow the |
instructions in section 4 above. |
|
After starting "PORT", select a target virtual disk to use. (A directory |
of .DSK files in the default directory is automatically shown.) You will |
then be presented with a menu of options which will allow you to read |
files from the .DSK virtual disk to your MS-DOS directory, write files to |
the virtual disk, delete files on the .DSK, or show directories of either |
your default MS-DOS path or the virtual disk. |
|
The PORT program's menu is pretty self-explanatory, but you should be aware |
of the following: |
|
1. Be sure to select "X" to exit or "N" for a new virtual disk when you are |
finished, as the virtual disk's directory may not be updated until you do |
this. |
|
2. When prompted for files to read, write or delete, you may use either |
"filename.ext" or "filename/ext", but don't specify an MS-DOS path name |
with it. Change the MS-DOS default path with the "C" option in the menu. |
|
3. The PORT program will automatically change the line terminator of ASCII |
files (as identified in the directory entry) to either CR/LF or CR as |
required by the destination system for the file. |
|
4. When writing files to a virtual disk, you are prompted to give an |
identifier for the file (e.g. "Basic program, data, M/L, or text file") |
as this information is not recorded in the MS-DOS directory. |
|
5. When using PORT with GW-BASIC, it may append a EOF byte (CTRL-Z) to the |
end of files read to your MS-DOS directory. |
7. THE DEBUGGER |
--------------- |
|
The debugger halts the emulator, displaying the current state of all the |
registers in the "6809" CPU, and also includes a 128-byte memory map and |
a disassembly of current instructions. In the lower-left corner, the first |
few entries on the U and S stacks are shown. Several commands are available |
to you, as summarised in the box on the lower-right: (These commands are |
probably best understood through experimentation. [ESC] will cancel any |
option except [E]DIT, which is immediate.) |
|
[B] Sets a BREAKPOINT address. The emulator will resume normal execution |
until the breakpoint is hit, at which time the debugger reappears. Only |
one breakpoint can be set at a time. The breakpoint is cleared the next |
the the debugger or another menu is displayed. |
|
[C] CONTINUE emulation. The breakpoint is cleared and the program returns |
to normal emulation. |
|
[D] Change the start address of DISASSEMBLY. A register or hexidecimal |
address can be specified. If a register is given, the start address of |
the disassembly will always follow whatever is in that register. The |
default for this prompt is the next byte after the last instruction |
displayed on the current disassembly. |
|
[E] EDIT memory. Places a cursor on the memory map with which you can |
directly modify memory. Arrows, PG UP and PG DN work. ROM and memory- |
mapped device addresses behave as in the genuine machine. ESC or ENTER |
when done. |
|
[F] Change the 6809 FLAG registers. Press the letter of the flag to toggle |
its true (1) or false (0) value. ESC to abort, ENTER to keep changes |
and return to main debugger options. |
|
[H] HEXIDECIMAL CALCULATOR. Enter a hex number or register to start. You |
then enter one of the following operations: |
|
[+], [-], [*], [/], [A]nd, [O]r, [X]or, [N]eg, [S]hift, [R]ot, [D]ecimal |
|
The first seven of these will prompt for a second number or register to |
operate with. [N] will NEGate the current result. [S] or [R] followed |
by the left or right arrows will shift or rotate the bit positions of |
the result as appropriate ([ESC] to return to calculator options). [D] |
will display the decimal equivalent and/or allow you to enter a decimal |
value. [ESC] will return to the main debugger options. |
|
[M] Change the MEMORY DUMP start address. Enter either a hex address or a |
register. If a register is used, the start address of the memory dump |
will always follow that register's contents. |
|
[Q] QUIT EMULATOR. Exits back to MS-DOS. You must confirm this choice with |
a "Y". An other reply will return to the main debugger options. |
|
[R] Change REGISTER contents. Select a register using the arrow keys |
followed by [ENTER], or by pressing its letter. Then type a new hex |
value for its contents, or the name of another register to copy that |
register's contents to the currently selected register. |
|
[S] SINGLE STEP. Execute one 6809 instruction and return to the debugger. |
|
[V] VIEW VIDEO. Display the current CoCo screen and wait for a key to be |
pressed. Pressing any key will return you to the debugger's main |
options. |
|
Register names are just there 6809 names, without brackets, except for the |
D register. D is entered as "A/B" to distinguish it from the hex numbers |
000D, 000A, 000B, and 00AB. |
8. COMMENTS |
----------- |
|
Please note, I CANNOT PROVIDE ROM IMAGES OR THE SOURCE CODE. The lack of |
availability of source code is a price you pay for this package being |
freeware. |
|
One of the more common questions I have had after the first release of my |
emulator (aside from bug reports) has been "will you be doing a CoCo III |
Emulator?" The answer to this is a bit difficult to say. Part of the |
reason that I decided to release the CoCo II emulator as a freeware package |
(as opposed to shareware) is that I was afraid I wouldn't have the time to |
provide as much support as I'd like. This is one of four emulator packages |
of mine. The first was a shareware TRS-80 Model I (the Z-80 based machine |
from 1977), followed by a freeware Timex/Sinclair 1000, then version 1.20 of |
this emulator, and finally a commercial TRS-80 Model III/4 Emulator (for |
which the infrastructure of this CoCo II Emulator was the prototype, for the |
interest of those who might have seen both). |
|
Certainly, I am intrigued by the possibility of doing a CoCo III emulator, |
but, as I am still providing support for the Model I emulator and the |
relatively young Z-80 III/4 emulator, my spare time is limited. I have |
toyed with the idea of developing a SHAREWARE CoCo III emulator once the |
demands of these other projects dwindle... if there is sufficient interest. |
My shareware Model I package has a registration fee of $25, so I'd probably |
be proposing something similar here. Of course, this all hinges on whether |
there is sufficient demand for such a product. So, if you are interested or |
have any comments, drop me a line. (Don't send any money yet! :-) I don't |
actually have a CoCo III emulator yet.) |
Send comments or questions to:
e-mail address: jeffv@physics.ubc.ca
postal address: Jeff Vavasour
c/o Department of Physics
6224 Agricultural Road
University of British Columbia
Vancouver, B.C.
Canada V6T 1Z1
If you are having trouble with the above email address, then try
"jeffv@smaug.physics.mun.ca" or "jeffv@morgan.ucs.mun.ca". For Internet
users, I also have an email discussion group for users of my emulators.
Drop me a line if you want to be included.
Disclaimers: Neither this software package nor its development is in any
way associated with the University of British Columbia. It is merely the
most reliable address I currently have. Also, I assume no responsibility
for any damage that may result.
Acknowledgements: Thanks to Jim Veneskey and Lori Paniak for their helpful
references in developing and debugging this package.
APPENDIX: THE SERIAL CABLE
--------------------------
For diskless users, you will need a cable to link the serial port of your
PC to the CoCo's built-in serial port. There are two kinds of serial
connectors on most PCs - the 9-pin and the 25-pin versions.
To start you will need a connector to mate with your PC's serial port. For
those not used to hardware, it's best to get the "crimping" version. No
soldering is necessary.
You'll also need a male 4-pin DIN connector. Though Radio Shack has
discontinued this part, many other electronics stores may still stock them
stocks these parts. Also some Radio Shacks may still have a dusty unit
or two in stock.
The cable itself is very simple. The pin numbers on the 9-pin and 25-pin
PC serial connectors are actually visible on the connector itself, next to
each pin. For the 4-pin DIN connector, I will use the convention of the
CoCo's technical reference manual. Looking at the serial I/O port on the
back of the computer itself, the pins are numbered as shown:
_____
/ |_| \ Pin names: 1 = CD
4 | o o | 1 2 = RS232 IN
| | 3 = GND
3 | o o | 2 4 = RS232 OUT
\ _____ /
Three wires must be connected in this cable, listed below. (The names of
the pins are also given for the reference of those interested.) Be sure
to select the column appropriate to your PC serial connector.
From CoCo To PC's To PC's
4-pin DIN 9-pin 25-pin
========= ======= =======
Pin 2 --------> Pin 4 - or - Pin 20
(RS232 IN) (DTR*) (DTR*)
Pin 3 --------> Pin 5 - or - Pin 7
(GND) (GND) (GND)
Pin 4 --------> Pin 2 - or - Pin 3
(RS232 OUT) (RD) (RD)
Once the cable is assembled, it may be tested by loading a terminal program
on your PC and selecting the appropriate COM: port with the settings:
2400 baud, 1 stop bit, 8 word length, no parity. Next, power on your CoCo
and type the following:
POKE 150,18
PRINT#-2,"THIS IS A TEST"
If the cable is working properly you should see the message "THIS IS A TEST"
on your PC. If no message appears on the PC, but the "OK" prompt returns
on your CoCo, check the line connected to the CoCo's pin 4 (RS232 OUT).
(A ohmmeter or continuity checker would be useful for this.) If the "OK"
prompt fails to return, check pin 2 (RS232 IN). Also, it is a good idea
to check the GND line in both cases.

+877
View File
@@ -0,0 +1,877 @@
COMCALL.EXE Ver 3.0
(August 1992)
COPYRIGHT(C) 1991/1992
Clive Jones, 111 Deer Park Gdns, Mitcham, Surrey ENGLAND CR4 4DX.
ALL RIGHTS RESERVED
COMCALL is distributed under the SHAREWARE principles. The
Author reserves all COPYRIGHTS (C) to the program and associated
documentation. In using this program you agree to the terms that
NO LIABILITY OF ANY KIND EITHER THROUGH DIRECT USAGE OR INDIRECT
USAGE OR INABILITY TO USE THIS PROGRAM OR FAILURE IN THE PROGRAM
TO OPERATE AS DESCRIBED WILL BE PAYABLE OR DUE BY THE AUTHOR.
You are granted a limited licence to use this program for a
limited period of 30 days for evaluation purposes only. If you
intend to use this program beyond the trial period you are
requested to register your copy. Registered copies will receive
postal support (telephone support provided where possible) and
upgrade options as and when available. Failure to register your
copy may result in further development into this and other
packages not being under taken by the author as a result of
financial restraints. Don't be a contributory factor to the
demise of SHAREWARE. Assist the authors who have spent
considerable time and effort by registering your SHAREWARE
packages.
---------------------
This package comprises of the following files:-
COMCALL.EXE
COMDO.EXE
COMCALL.DOC
COMBOOT.EXE
COMBOOTS.EXE
AUTOEX.BAT
AT_SET.TXT.
They are distributed within a single self extracting archive file
called:- COMV2.EXE
If you did not receive this package in this form then you should
not use the programs.
Once Comcall has been installed and ran at least once on your PC
then three additional files will be automatically created:-
CALLRING.DTL - a log file containing ring/action details
COMCC.DTL - a comcall configuration file.
COMVALS.DTL - holds default values for the comcall session
--------------------
If you have a telephone, a Hayes command set modem and an IBM or
compatible running under DOS or Windows, then COMCALL may be of
use.
COMCALL is a package that is designed to monitor your phone line
in your absence. It will either call you at ANY other phone
location that may be directly dialled to advise you when a
pre-defined trigger is met or execute a command to start some
alternative action. Alternatively Comcall will simply monitor
and log any incoming calls such as when you are using an
answerphone with no call time logger. Comcall is constantly
under further development. For future versions it is intended to
add even greater flexibility in Comcalls usage so as to include
such possibilities as the remote control of physical actions such
as video recorder control, light operations, curtains etc with
the control being performed via a single telephone line that
could be shared with other devices eg voice/answerphone/fax/data.
Comcall will work with many existing telecommunications hardware
devices such as existing phones, extensions, answerphones etc.
No special hardware is required at the recipient end of the
triggered call if a telephone advice action is selected. Any
phone that may be DIRECTLY dialled is sufficient.
This version of Comcall is distributed under the Shareware
principles. Future versions may only be obtainable by users
already registered under the Shareware release of the current
version.
The trigger for COMCALL is a range of counts of incoming rings to
your telephone. You define this upon starting COMCALL and is
totally variable. Such as one (and only one) ring being received
(eg like a RINGBACK set up) or maybe between 2 and 4 rings (your
answer phone would have received a message), or maybe all rings
eg 1 - 999 (999 being the COMCALL limit).
Only consecutive rings from one call are counted. If the trigger
condition is not met then the ring count will be reset and
Comcall will wait for subsequent calls.
All incoming rings are logged to a file called CALLRING.DTL for
later inspection if required. Useful if you've been out and
would like to see how many calls you missed.
Comcall may be individually configured to suit your own
particular needs.
Comcall now incorporates a dual trigger condition, so that two
ranges of trigger options may be defined in order to perform two
separate operations according to which trigger condition was
encountered.
Comcall Version 3 is distributed as a fully functioning version.
In trust of its capabilities and of its users I have decided not
to cripple or disable its functionality in any way.
EXAMPLE USAGES OF COMCALL:
1.
You have an answerphone but it does not have a time/date stamp
option. You go away for the weekend only to return to a number
of messages. When were these messages taken? Providing you had
invoked Comcall then you will be able to see exactly when the
messages were left (day and time). You will even be able to see
how many calls resulted in messages not being left.
2.
A family member may be ill in hospital or your wife may have been
taken into maternity as her babies due date nears. You have an
answer phone and you have to go out on some urgent business.
You are fearful that you may receive that all important call
whilst you are out. The answer phone will take the message but
you won't know of this until you next return home or until you
phone up and interrogate your answer phone next (assuming you
have a remote access answer phone). Provided you either have a
radio pager or know the telephone number of the person whom you
are visiting worry no further. Simply invoke COMCALL to monitor
your line, giving it the number of the person whom you are
visiting (or the radio pager number). Go on out about your
business and if a message comes in, then you will be
automatically advised.
3.
You are in the office late on a Friday evening. You still
haven't met that all important deadline for your project and you
really should come in over the weekend to finish of that draft
overview. But your office is over 30 miles away. You are not
permitted to take disks out of the office and no inward external
network access exist into your PC system for security reasons.
Your office PC does however have a modem for outgoing data
transfer and you have a PC, Modem and Communications Software at
home. Simply invoke your copy of COMCALL to trigger after say
just one (and only one) ring of your office telephone. When this
trigger is met you want it to start your comms package that has
been set to autodial your home phone number. You can then go
home in the knowledge that you do not have to drive all the way
in tomorrow and can work from home. All that is required the
next day is for you to call your office phone, hang up after just
one ring, set your PC, Modem and Comms package to autoanswer data
mode and then wait for the return call from your office PC. You
should be confident that no one else will ring your office phone
just once and then hang up. Even if then did it would be of
little consequence as you would get an a simple call from your
works PC which you could then just hang up on. Provided you have
set up the triggering system correctly, your works PC would then
resume waiting for another single ring. (See USING below).
My set up :- I use Comcall for a threefold purpose. Firstly I am
on occasions telephoned in the middle of the night with messages
that have to be dealt with promptly. My answerphone will take
these messages, but, being a sound sleeper, I am seldom awoken by
the few rings prior to the answerphone starting. I set Comcall
to a ring range count of 1 - 10 (eg any calls) and an action of E
REM. Additonally I set the delay time to 360 and delay tone on
so as to raise an alarm that continues beyond teh telephone
ringing period. Any calls that come in during the night
therefore raise a PC alarm tone. Secondly, as my office is over
15 miles away, I set comcall to call me with advise of any
pending messages that may be left on my answerphone throughout
the day. I utilise my answerphones remote interogation option to
then respond to any important matters. Finally, I use Comcall to
allow me to call into my home PC from my office. I only have the
one telephone line sharing both the answerphone and modem. To
use my home PC I simply set a trigger range of 1-2 rings and an
action of X with an error level of 2. This error level is then
picked up from within my modified autoexec.bat file in order to
start my comms package in host mode and await my return data
call. I utilise the re-boot option for this to ensure that I
re-call within 5 minutes, otherwise the PC reboots and reloads
Comcall via the autoexec.bat file.
SET UP/ INSTALLATION.
COMCALLs file should be ideally placed in the same single
directory.
Comcall consists of a number of files, these are described
below:-
COMCALL.EXE the executable file, COMDO.COM which is used to
execute the desired commands/files and COMCALL.DOC - this manual.
Once Comcall has been run once further new files will be
automatically created called CALLRING.DTL - This file is
used to hold details of COMCALLs actions (rings received,
actions taken etc. It is an append mode file so you should
therefore periodically monitor and delete it as necessary).
COMCC.DTL - This file holds the configuration details that you
may select for your comcall sessions. COMVALS.DTL - this file
is used to hold initialisation values each time that comcall is
invoked.
UNDER NO CIRCUMSTANCES SHOULD YOU MODIFY THESE .DTL FILES USING A
TEXT EDITOR. Comcall relies upon these for its correct
functioning. If they become corrupted with invalid data then
Comcall may perform in an un-predictable fashion.
COMBOOT.EXE is a Terminate stay resident program (TSR) that can
be used to invoke a cold re-boot. COMBOOTS.EXE will stop an
impending reboot requested started using COMBOOT.
In addition to these files, a file called AT_SET.TXT is provided.
This provides a basic list of Hayes Commands for those of you who
might have mis-laid their modem manuals. This should not be
taken as a definative list for your particular modem and is
provided purely for the purpse of guidance. Finally the file
called AUTOEX.BAT is provided as a basis upon which you could
build your own file that utilised Comcalls X conditions (see
usage).
Prior to using COMCALL you must have a MODEM (Hayes Command Set)
connected to the specified COM port. The modem must be powered
on prior to the invoking of COMCALL.
To install comcall for the first time simply type COMCALL and
read the notice. Thereafter type COMCALL C and follow the
guidance given. A new configuration file will be created
automatically. You may modify this configuration now or at
any other later time by re-using the Comcall C command.
After this you can use Comcall as required using any of the
available commands. The options that you may configure are
described below:-
COMCALL C COMMAND - CONFIGURATION OPTIONS
To configure the Comcall options - enter <comcall c> at the dos
prompt.
You will then be presented with a number of options that may be
modified. To select one of the options to modify, simply use the
up and down arrow keys until that option is selected and then
press the <ENTER> key to enter into the modify mode. In the
modify option you will see the original value and be prompted for
a new value. You may exit from this by pressing the escape key
or by pressing the enter key without having entered a value for
the new option. Entry of a new values do not come into effect
until after the save option has been selected. Use of the escape
key will therefore result in the previous values being maintained
for the various options.
The options that may be modified are:-
1. Modem Initialisation String. (Consult your modem manual).
It is not recommended that you change this unless you are sure of
what you are doing. The initial value that is supplied with
comcall is ATE1V1H0S0=0 this will ensure that your modem is set
into the required verbrose message mode and to never auto answer.
These are standard Hayes command set commands. In some cases you
may wish to add further Hayes modem control commands in order to
suit you own particular needs. This is where you would add these
as desired.
2. Delay Time
This is the delay time (in seconds) between a trigger
condition being met and the time that the action
specified executes. For telecommunications actions it is
recommended that this figure be set high enough to allow for any
time that another person may be using your phone locally in order
to complete an incomming call. The minimum delay period is 5
seconds, max = 999999. Any values entered outside of this range
will have a default of 120 seconds applied. You will notice
that delays are incorporated into a number of the
functions of COMCALL. This delay is defined here. These delays
are present to ensure that sufficient delay periods exists
when modem functions are performed. For example the delay
count prior to initiating the execution or advisory message
is in place so as to ensure that any incoming messages
should have completed (eg an answerphone) prior to COMCALL
making the outgoing advisory call (after all you would be
sharing the same telephone line).
3. Delay tone.
Prior to Comcall starting an action following a trigger
condition, the delay period (as of 2 above) may or may
not have a warning tone sound. This is useful if you
wish to advise local personnel of such an impending action
so that it may be aborted if required.
4. Colour/Black White.
If you have a black and white monitor then you should set this
option to 'B'. Otherwise set it to 'C' for colour.
5. Tone/Pulse Dialling.
If your local exchanges and modem can issue MF tone dialling then
set this option to 'T' (tone). Otherwise set it to 'P' (Pulse).
If you are not sure as to which type of dialling is local to you
then it is recommended that the 'P' option is used as this
usually works on both.
6. Com Port
You should enter the number (1-4) of the com port that your modem
is connect to.
7. Busy Tone Retries.
COMCALL will re-issue a call if the BUSY tone is detected
upon executing an advisory call. Define the number of re-tries
here (max 10). Note that some modems come with a 'Blacklist'
test for where a number may be dialled unsuccessfully on multiple
occurences. If you have such a modem, then the number of actual
retries performed will be the lower of the value set for busy
re-tries and the blacklist limit.
8. Reverse Dialling Command.
To enable some form of indication at the recipient end of the
named telephone number this program issues a reverse ringback
command signal to your modem when making an advisory call.
If you are unsure about reverse dialling, do not worry too much,
it basically means that the person answering the advisory call
will hear DATA TONES. Thus implying that an advisory call is in
progress. Without the reverse dialling mode, the person
answering the call would hear nothing and may assume that a
telecommunications error had occurred. Not all modems may
support the ringback option, but the ones that do usually have a
command sequence of R to invoke this option (consult your modem
manual for further reference. In some cases this reverse
ringback string is an '/R' eg with a forward slash). The
reverse dialling command option should therefore be set to your
particular modems command (consult your modem manual). The Hayes
command set defines the Ringback command as a single R, so you
will probably have to change the Comcalls default of /R. The
default will probably be changed in future releases if so
requested by popular demand - but as my modem expects a /R I have
left the default to match this.
COMCALL B COMMAND - BROWSE LOG FILE.
This is a command that may be issued from the dos prompt in order
to browse the comcall log file CALLRING.DTL. Callring.dtl is a
text file and may also be browsed using other text editors. In
the browse log mode you can use the up and down arrow keys to
move about the display. To exit the browse mode simply press the
<ESC> key.
COMCALL M COMMAND - BROWSE MANUAL FILE.
This command is issued at the dos prompt in order to browse
through this file (COMCALL.DOC). It operates in a similar
fashion to that of the COMCALL B option with the exception that
the page up and down keys will scroll the text in page lengths.
COMBOOT x COMMAND - REBOOT
As some applications of Comcall can result in memory contention
(eg where Comcall is used to invoke other packages) it is
sometimes desirable to have an automated re-boot option so that
Comcall may be re-initialised via your autoexec.bat file.
Comcall now provides such an option by use of the COMBOOT x
option that may be executed from the dos prompt or from within
bat files. x is a value between 0 and 59 (minutes). Issuing
such a command will result in a cold re-boot of your system after
the time period of x minutes has elapsed. eg
comboot 2
would result in a system reboot in (Approx) 2 minutes from now.
In the mean time any other command or action could be performed
without affecting this request (unless you execute a comboots
request that is (see below)). Similarily comboot 0 would result
in an immediate re-boot occuring.
The reboot option results in a Terminate Stay Resident (TSR)
being installed. Under some circumstances other applications may
contend with this TSR. Always check your set ups thoroughly
before relying upon them. For example, I have found that if I
invoke windows (Win) following the setting of a reboot request,
then at the reboot time the only action that is performed is that
windowns is stopped (returns to the dos prompt). The way around
this is to create a batch file (.bat) that will call another boot
request eg
.
.
cd \comcall
comboot 1 { reboot after 1 min within windows}
cd \windows
win { start windows }
comboot 0 { reboot immediate request }
WARNING: COMBOOT will invoke a cold reboot no matter what!. This
is usually described as a bad practice as the state of the
machine at the time of the reboot request is unknown (resembles a
power failure). Any files that may be open, or any I/O that may
be occuring at the time of the reboot will thus be affected by
the reboot. If you treat the reboot command as a similar effect
to that of powering off/on your PC then you won't go to far
wrong. If you decide to use the reboot option then treat the
command with respect.
COMBOOTS COMMAND - STOP REBOOT REQUEST.
If the Reboot (COMBOOT) is invoked either in a bat file or from
the dos prompt and you wish to abort this auto reboot then use
the Comboots command, again from the dos prompt or within a bat
file. This is useful where Comcall may be driven by a .bat file
that invokes a Comms package awaiting for your return call in
data mode. If a reboot request were contained within this bat
file in order to reset your system back to Comcall if you did not
recall within a time period of x minutes, then if you did call
back in data mode then you would execute this Comboots command
upon establishing your data link to stop such a reboot.
COMCALL COMMAND - EXECUTE COMCALL
By entering <comcall> alone at the dos prompt, you will be
automatically taken into the main comcall process.
Initially you will see a couple of time delayed introductory
screens. Thereafter, you will be presented with the session
configuration screen. Each time that you modify and save any of
these then they will be applied to all future usages of Comcall
until such times that they may be modified again. This entry
configuration screen has a auto-entry delay count of 10 seconds.
Pressing the <esc> key will by-pass this delay. If no other keys
are pressed within this time then the main comcall process will
be entered. This delayed auto entry enables comcall to be used
in batch file processing (eg .BAT files) where it is known that
the default session options have already been set to a suitable
value. For each Comcall session, two trigger options are
available. You may therefore define separate actions to be taken
for each of two separate trigger conditions (ring ranges). The
options that may be modified are :-
COMCALL ENTRY OPTIONS
LOWER AND UPPER RING COUNTS
The ring counts (lower/upper) should be set to the range of FULL
RINGS that you wish COMCALL to trigger an action upon receipt of.
These values may be identical so as to stipulate an exact number
of RINGS to trigger. The minimum number of rings that may be
specified is 1. The maximum upper level is 999 RINGS. For
ranges of RING COUNTS the values are considered to be inclusive.
There should be no over lap between the ranges for OPTION 1
trigger action and OPTION 2. FULL RINGS varies from country to
country. For example in the UK with the Brrr-brrrr ring
Comcall will take all or any part of this to be a full
ring. It is worth noting that in some countries that the
ring heard by the caller and the ring heard by the called person
may not be in phase. Comcall responds to the actual rings
received locally. Comcalls ring counter will only increment
when your modem detects such a ring. This can lead to cases of
where say a caller hears only one ring cycle, whereas at
the receiving end a two ring cycle could have occurred.
For critical operations it is therefore recommended that you
select a ring trigger range over a number of ring cycles.
When you wish to trigger this remotely, then select a mid ring
count between these two values when making the trigger call.
EXECUTE/TELEPHONE/EXIT E/T/X OPTIONS
These parameter should be set according to what the required
trigger action should be eg 'T' a telephone advisory call should
be made to the number defined in the command/telephone option
(see later). The 'E' option enables the command as defined in
the command/telephone option to be performed if the trigger
condition is satisfied. Any dos command or program filename may
be called (even a call to a .BAT file if required), together
with any parameters required by that called program (there is a
upper limit of 4 parameters that may be passed). The X option
is used where it is desired to use comcall in .BAT files. In
some cases using the E option will prevent the successful reload
of comcall (eg if a trigger condition is met and another program
is executed that takes all of the memory available for its own
use). In using the X option, you can define an errorlevel at
which comcall should halt with following the receipt of the
desired trigger condition. This errorlevel should be defined in
the command/telephone option (see later). A bat file can then
pick up on this errorlevel in order to perform the desired
operation using the bat file 'errorlevel' operand.
COMMAND/TELEPHONE
This is the action command itself. If a T options is selected
for the action option (see previous) then this should contain the
target phone number. If a E option is selected for the command
action then this should be a dos command or program filename
(filenames should be full filenames etc comcall.exe). Up to four
parameters may be included with the command eg echo hello there.
If an X command action is selected then this should be a numeric
value (greater than one, less than 100) to which the desired exit
errorlevel is to be set. For more information on BAT file
processing and errorlevel values - consult your operating systems
manual.
For T options (telephone) you may be able to define delay periods
by including an additional character in this string (consult yur
modem manual). For example, when an advisory call is to be made
out through an automatic switchboard eg requiring a prefix
digit(s) to be dialled, followed by a short delay, then you can
use this delay character to cater for this. Lets say that the
delay charater is a comma (,), and your number for gaining an
external line is 9. If you wish to call the number 123-4567 then
your telephone command line value would be := 9,12345678. (Do
not include any dashes in telephone number command actions.) On
receiving a trigger condition, Comcall will then instruct your
modem to dial the digit 9, followed by a short delay, followed by
the number 1234567. This delay character can vary from modem to
modem, so consult your modems manual for further advise. In some
cases you may wish to concatenate a number of delays, usually
this can be achieved by using two or more of the delay characters
consecutively eg 9,,,1234567.
USING COMCALL
For COMCALL to work your PC and Modem must be left on. Any power
loss to your system will result in the loss of the COMCALL
monitoring. To ensure against power glitches you could copy the
COMCALL command to the last line of your autoexec.bat file so
that should the power fail and then be restored then the PC would
reboot and re-execute the COMCALL command automatically.
COMCALL liaises with your modem. You should use a HAYES
compatible MODEM and command set. COMCALL requires that verbose
commands are returned from your modem (not digit values) and that
the modem is set to never answer. These can usually be set using
the AT(tention) commands as defined for your modem once COMCALL
has been invoked. The most commonly used AT commands within
COMCALL is to set your modem to never answer (S0=0) and verbose
listing (word messages). This is automatically sent within the
initialisation process of COMCALL when invoked (providing you
have not modified it using the Comcall C option). Once you have
invoked COMCALL you will be in a terminal session with your
modem. Type AT (attention) followed by the enter key directly
at the terminal screen. You should then see the modems
response of OK. If this does not occur then you should
check your modem and COM port.
Comcall now incorporates dual trigger definition. That is you
can define two separate actions to be taken upon the receipt of
two different ring ranges. If you do not want any actions to be
taken, eg using Comcall purely as a logging device, then we
suggest that you use trigger actions of 998/998 E(xecute) REM
for option 1 and 999/999 E(xecute) REM for option 2. Comcall
will thereafter only log any details of incomming calls to the
log file (CALLRING.DTL) which may be browsed later using the
Comcall B option from the dos prompt. Note that in this case
then if a ring count in the range 998-999 rings is detected
(extremely unlikely) then the only action performed would be that
Comcall would log a remark (REM) statement in the log file.
Once you enter Comcall then try typing in a Capitalised RING at
the terminal screen. You should see the response of the time
of the ring and the ring count. If further rings are entered
in quick succession you should see the ring count increment.
(Beware not to enter the same number of rings as defined for
your trigger otherwise the trigger will occur at this test
stage - unless you wish to test your set up that is.) If there
are delays of over 10 seconds between the last and the next
ring then the ring count will be seen to revert back to one
(assumes a new call).
If you utilise the program file execution option, then COMCALL
may or may not be resumed upon completion of this depending upon
the utilities called (memory space etc). Test your set ups
prior to depending upon them. If COMCALL does not resume then
try setting up the BAT file using the X command option and a
suitable errorlevel (see below).
Lets say that you have a comms package that you wish to invoke
upon a selected ring count condition being met. We'll call your
comms package compac for this example. Your compac program
allows for the creation of script files. You have created a
script file that will result in a comms link being automatically
set up when the script is invoked. The compac package is
assumed to allow you to invoke compac and the script directly
from the dos command line eg if the script is called
ringoff.scr - compac allows you to invoke it and the ringoff.scr
by using the command
compac ringoff.scr
You want this comms package to be run every time that comcall
detects only one ring (one and only one rings). We will also
assume that your modem is connected to your COM port 2.
Additionally, lets also assume that your comms package compac is
in a directory called c:\comms and that your COMCALL package is
in a directory called c:\comcall. Lets say that you want to make
Comcall exit with an errorlevel of 2 when the trigger is met and
invoke your comms package (await your return call in data mode).
Finally lets also assume that if you do not call back within 5
minutes in such a data mode then you wish Comcall to restart
again.
Enter Comcall and selected the required options at the action
screen. Your Upper and lower ring counts should be set to 1 and
1 (eg one and only one ring). Additionally your E/T/X option
should be set to X and the Command/Telephone Option set to 2 (2
is the minimum 99 is the maximum errorlevel that may be set for
this X option. Any other value outside of this 2-99 range will
result in a default of 2 being applied). As you only want one
ring range to be the trigger condition then set the Option 2
values to say 999/999 rings, E(xecute) REM command. Now save
these using the Save/Exit option. Once at the terminal screen -
exit Comcall using the ALT X option. Now each time that Comcall
starts in future then these options will be automatically
installed. Thus you can now include the command Comcall in a bat
file (such as your autoexec.bat) at will. Once the bat file is
run and the comcall command issued, then following a short
delay Comcall will be automatically initialised and entered.
You bat file (consult your dos manual for help regarding batch
files) - may contain something like the following :-
cd c:\comcall - your comcall directory
comcall - start comcall
if errorlevel 2 goto trig - if comcall exits with
- errorlevel of 2 then goto
- trig
goto reboot - otherwise goto reboot
:trig
comboot 5 - reboot system in 5 minutes
cd c:\comms - your comms directory
compac ringoff.scr - start your comms package
:reboot
comboot 0 - reboot imdediately
A similar bat file to that of the example above is included
within the COMCALL package.
(Note the description on the right is for descriptive purposes -
do NOT include this in your bat file.)
Saving such a command sequence to your Autoexec.bat file
followed by a reboot (CNTL-ALT-DEL) would result in the
continuous sequence of comcall being invoked and waiting for
one and only one rings. Then once this trigger was met Comcall
would stop with an errorlevel of 2 which would start a reboot
request after 5 minutes followed by the Compac comms package
being started using the ringoff.scr script file in order to
wait for your return data call. Normal exiting from compac
will result in your system rebooting as a result of the cold
reboot Comboot 0 command. Once the system starts up again
the whole process could be repeated. If you call into your
comms package from a remote site you should immediately execute a
dos shell command of COMBOOT in order to stop the re-boot
countdown. If you didn't log into your computer then, after the
5 minutes delay stated in the COMBOOT 5 option your system would
reboot and start the .bat file all over again. Thus preventing
your system being possibly left in data mode for the rest of the
day.
The benefit of such a set up is that should your mains power
supply fail for a brief period, then the set up would be
re-entered once again after the power had been re-established.
It also ensures that your system should not hang as a result of
memory contention preventing Comcall from correctly working upon
re-entry.
(Note that Compac is a name chosen purely in an arbitary manner
in order to provide a demonstration.)
-----------
Occasionally you should browse the CALLRING.DTL file that is
created automatically by COMCALL. This file contains all of the
rings and the times that they were logged whilst COMCALL was
active. This file will continue to grow until such times that
you delete it. Once deleted a new copy will be started the next
time you re-enter COMCALL.
COMCALL has primarily be developed and tested in the UK. Some
increase in the RINGING tone received whilst COMCALL and the
Modem were active have been reported. This should not be a cause
for concern. In theory the package should work as equally well
on a multitude of telecommunications networks. We have (as of
the current date) not received any reports of COMCALL failing to
work on any given network.
Some difficulty in the anticipated functioning of COMCALL may
occur if another incoming ring is made at the same instant in
time when COMCALL issues an advisory call command. However, the
instances when this occurs should be extremely few in view of the
small timeslot window when such conditions may occur.
When COMCALL initiates an advisory call, the response messages
from that call are monitored. If a BUSY message is received then
the call will be retried after a short delay (providing the busy
re-tries or modems Blacklist limit has not been reached).
In all of the EXECUTE, X and ADVISORY CALL (T) modes, a delay
from the time when the trigger ring receipt was received
and the trigger function operates exists. This is via a counter
level being decremented and displayed upon the terminal screen.
If you wish to cancel the trigger function and resume RING
monitoring, then the ENTER key may be pressed during this delay
period (eg you may have answered your phone locally and you do
not wish for the advisory call to progress to completion).
To quit out of COMCALL use the combined keystrokes of ALT X.
(Some limited help may be obtained by using the combined
keystrokes of ALT H).
REGISTRATION
ENQUIRIES MAY BE MADE DIRECT TO THE AUTHOR AT THE ADDRESS BELOW
OR VIA COMPUSERVE TO ID 100014,3141.
If you found this package to be of some use and would like to
continue to use it beyond the evaluation period of 30 days then
remit your payment and details to the address below.
Clive Jones
111 Deer Park Gardens
Mitcham
Surrey
CR4 4DX
Registration entitles you to support of the package
(postal/electronic mail plus telephone where possible). As a
registered user you will also be advised of upgrades as and when
they become available.
The suggested minimum registrational contribution is 10 UK Pounds
Sterling or 20.00 US Dollars. This entitles you to a continuation
in a single licence beyond the 30 day trial period and
package support together with automatic upgrade to
the next available version as and when this becomes
available (don't forget to state your disk
size/format). Currently registered users (prior to July
1992) need only send a stamped self addressed envelope and disk
for return of a personal copy of the latest release.
Alternatively you may register on a one-off basis for the
current version for only 5 UK pounds (8 US Dollars).
COMCALL.EXE source code and rights are available for sale.
Contact the author for further details.
ENHANCEMENTS. Upon proof of sufficient interest in the
program (eg registrations/enquiries) then the author pledges to
provide further releases of Comcall. Your registration
contributions will ensure that such improvements see the light
of day. Such later releases may only be available to
currently registered users.
HISTORY
Dec 1991. Version 1 Released.
April 1992. Version 2 Released.
Modem Initialisation Modification.
Pulse Dialing bug fix - thanks to Kevin Black
Log file format modification - thanks to Dave Woolcock
User definable delays/modem initialisation added.
Key entry screen modified to delayed entry for auto recall
Thanks to Dave Hickman (CA, USA).
General minor changes.
Configuration options added.
Browse log option added.
Delay tone toggle added.
Delay time from real time and not machine specific.
August 1992. Version 3.
Moved from command line to prompted initialisation.
Dual Trigger Conditions Added.
Time display.
Colour Options
Warning Tone on/off Options
Ringback string definition.
Auto Delay Entry modification.
Batch file option added.
Browse manual option added.
Busy tone retries level option added.
Reboot option (TSR)
----------------------
CURRENT VERSION
----------------------
Comcall is continuously under further development. We appreciate
comments and views with regard to possibly improving the package.
If you do find any errors or have any constructive ideas then
drop us a line. The author has put in considerable effort and
time in creating Comcall. Its nice to know whether his
endeavours are being appreciated.
------------------------------------
U N D E R D E V E L O P M E N T
------------------------------------
Unless you register for the current version of COMCALL, you may
miss out on future developments. Currently Comcall is entering
an exciting phase. Soon we hope to be bringing you a package
that will be unique in its field. A package that will offer new
meaning to the term 'remote control'. Operating over a single
telephone line that may be shared with normal voice and answer
phone set ups, you will be able to remotely control your video,
stereo, tv, curtains, lights, garage doors etc. If you are
registered with Comcall, then you will be automatically advised
of when this becomes available. All in addition to Comcalls
existing functionality. The next release of Comcall, may be
released via Commercial methods or may still be via Shareware
distribution. However, for all users registered under this
current version, the next release will be offered as per the
current terms.
-----------------------
Do you use shareware software on a regular basis. If you do and
you would like to be paid to receive and evaluate some of the
latest and golden oldies programs then contact the author at the
above address. This is a genuine offer where considerable
payments can be received for less than ten minutes of your time
each month. Could just be the best enquiry you make in your life.
----------------------------
EEEEEE NN N DDDDD
E N N N D D
EEEE N N N D D
E N N N D D
EEEEEE N NN DDDDD
----------------------------

+162
View File
@@ -0,0 +1,162 @@
Commchk.doc Version 1.5
Documentation for the Serial protocol analizer
Commchk is used to analyze information on a serial line by
intercepting the information and allowing you to view the
captured information in either a HEX format or in an ASCII format.
The information captured may also be saved in files stored on disk.
Commchk performs this function by routing any information read from
com1 to com2 and any information read from com2 to com1, while
capturing the information for display and or saving to a file.
Commchk will split the screen into 2 windows, an upper window
and a lower window. the upper window will display the information
captured from com1 and sent to com2. The lower window will
display the information captured from com2 and sent to com1.
This program was developed to allow analyzing information being
send from a host computer to a slave computer to determine the
source of errors that were getting into the system.
Alternatively, Commchk can be used to allow a computer that does
not have a modem to access the modem of a second computer.
Commchk command line options are summarized as follows.
-1, -2, -3, -4 Setup ports to use. The first entry becomes
the port designated com1 at the top of the
screen. The second entry becomes the bottom
half of the screen.
-I 0/1/2 all commands up to the next "I" command
are for the identified port.
0 = both ports
1 = com1
2 = com2
-B baud baud rates from 300 baud to 57600
baud are supported.
-H Help off Turn off the initial help screen
-P parity Allowable paritys are
EVEN, ODD, NONE
-W word length 7 or 8 bits
-R Resident As soon as the program gets the serial ports
initialized it will imiadiately shell out to
dos. Information will continue to pass thru
the serial ports from one to the other.
-S stop bits 1 or 2 stop bits
-f file name the file name must not have a length of
greater than 7 characters, not including
the path name. It is used to create create
2 files, one for information read from com1,
and one for information read from com2 by
appending the communications port number
and .fil to the end of the file name.
IE: -f test
generates test1.fil - com1 info
test2.fil - com2 info
-f c:\commchk\test
generates c:\commchk\test1.fil
c:\commchk\test2.fil
Example startup command:
COMMCHK -I 1 -B 1200 -P E -W 7 -S 2 -I 2 -B 4800 -P N -W 8
THIS SETS COM1 TO 1200 BAUD, 7 BIT, EVEN PARITY, 2 STOP BITS
AND COM2 TO 4800 BAUD, NO PARITY, 8 BIT.
The commchk display is as follows:
PORT1 BUFFER 0.0 SYSTEM BUFFER 0.0 RTS DTR DSR CTS 0 0
^ SIZE OF THE BUFFER FOR PORT 1
^ SIZE OF THE BUFFER USED FOR DISPLAY
TOTAL NUMBER OF SERIAL PORT ERRORS ^
LAST RECIEVED SERIAL PORT ERROR CODE ^
Commchk keyboard commands are summarized as follows.
F1 key - Help
F4 key - Allow changing the serial port characteristics online.
O key - Open the currently active capture files
C key - Close the currently active capture files
D key - Toggle video display on and off
F key - Flush out all current serial port buffers
of all characters.
A key - place the display in ASCII mode
H key - place the display in HEX mode
Q key - Quit
R key - Toggle the RTS line
T key - Toggle the DTR line
L key - Toggle the line display status line
Commchk Startup defaults are as follows
2400 Baud, 8 Data bits, 1 Stop bit, No parity
No capture file, com1 and com2 ports
Revision History:
11/5/90 - Fixed serial protocol data errors.
11/13/90 - Modified help routine to not interrupt serial data flow.
Added Flush buffer command.
Modified asynchronous character send routine
errors that caused loss of characters.
Added code to allow setting of the serial
ports to different parameters.
Removed SHAREWARE message.
VERSION 1.3
11/27/90 - Modified code to use only 8088/8086 code.
Added a line at the bottom of the status windows
that displays statistics about the serial port
Added code to allow toggling the RTS and DTR lines
Modified the asyncronous lines to have all serial port
IO completely asyncronously driven to assist in
performance on slower computers.
Added code to allow changing the serial port
characteristics while the program is running (F4 key).
VERSION 1.4/1.5
04/26/92 - Added the -H Startup command to turn off the initial
help screen.
Added the -R Command to perform an imiadiate shell to
Dos.
Written using Turbo C++, Borland C++ by:
Timothy L. Garrison
3003 W. Marquette Woods Rd.
Stevensville Mi. 49127
+354
View File
@@ -0,0 +1,354 @@
The Dungeons of MORIA version 4.872
COPYRIGHT (c) Robert Alan Koeneke
MSDOS port by D. G. Kneller
Nov 1, 1988
Table of contents
1. USAGE ............................................................. 1
2. REQUIREMENTS ...................................................... 1
3. INSTALLATION ...................................................... 1
3.1. Hard drive systems .............................................. 1
3.2. High-density floppy systems ..................................... 2
3.3. 2 - 360K floppy systems ......................................... 2
4. OPTIONS ........................................................... 2
4.1. SAVE ............................................................ 2
4.2. SCORE ........................................................... 3
4.3. KEYBOARD ........................................................ 3
4.4. GRAPHICS ........................................................ 3
4.5. RAWIO ........................................................... 3
4.6. IBMBIOS ......................................................... 3
4.7. ANSI ............................................................ 4
5. ENVIRONMENT VARIABLES ............................................. 5
6. BUGS .............................................................. 5
7. AUTHOR'S ADDRESS .................................................. 5
- i -
INTRODUCTION
This README file describes the requirements and setup necessary to get
MORIA running on your MSDOS computer. The actual game documentation is
in MORIA.DOC. Some of the game documentation will be wrong if you
choose the Rogue-like command set.
1. USAGE
Usage: moria [ -nors ] [ savefile ]
Where: -n starts a new game, ignoring any existing save files.
-o selects the original (VMS) command set.
-r selects the Rogue-like command set.
-s prints the score file and exits.
2. REQUIREMENTS
640K ram (really!)
DOS 2.x or higher
2 - 360K floppy disk drives or 1 high density drive or 1 hard drive
A 24 (or 25) line by 80 column monitor. MORIA uses either BIOS calls
or ANSI for video output so should work properly on most monitors.
It must use ANSI to work on DEC Rainbows. It won't work in 43-line mode
of an EGA.
3. INSTALLATION
MORIA is very easy to configure. The biggest problem is that there is
not enough room on a single 360K floppy disk to hold the DOS system
files, MORIA.EXE (about 340K) and a MORIA save file (about 80K or so).
To install MORIA, some files must be copied and 2 options in MORIA.CNF
must be set. Options and the MORIA.CNF are described more fully in the
section entitled OPTIONS. Here are a few methods of configuration.
These methods are also described in the MORIA.CNF file.
3.1. Hard drive systems
Create a c:\games subdirectory on your hard disk and put c:\games on
your PATH (see the DOS manual if you need help with PATH). Copy
MORIA.EXE and MORIA.CNF to c:\games. Edit MORIA.CNF and put in the
options:
SAVE c:\games\moria.sav;n
SCORE c:\games\moria.scr
- 1 -
3.2. High-density floppy systems
This is about as easy as for a hard disk. Format a diskette and put the
DOS system files on it (use FORMAT A:/S). Copy MORIA.EXE and MORIA.CNF
to that diskette. Edit MORIA.CNF and put in the options:
SAVE a:\moria.sav
SCORE a:\moria.scr
3.3. 2 - 360K floppy systems
You will need to use 2 floppy diskettes. Format a diskette and put the
DOS system files on it (use FORMAT A:/S). Copy MORIA.CNF to this
diskette. This diskette will go in drive A when you want to play MORIA.
Format a second diskette (no /S) and copy MORIA.EXE to it. This
diskette will go in drive B. Edit MORIA.CNF and put in the options:
SAVE a:moria.sav
SCORE a:moria.scr
When you want to play MORIA, put both diskettes in and type "B:MORIA"
4. OPTIONS
When MORIA starts up it looks along your PATH for the file "MORIA.CNF".
MORIA.CNF contains configuration information for MORIA in the form of
options. Options have a name and perhaps a value. If the option
doesn't have a value, simply mentioning its name selects that option.
Here are the options.
4.1. SAVE
The SAVE option has 1 argument, the name of a file where saved games
will be stored. Normally, when you start MORIA by typing "MORIA file",
MORIA will try to use "file" as the name of a saved game. The SAVE
option allows you to give the name of the save file so you don't have to
type it in each time you save or restore a game. A sample SAVE option
is:
SAVE c:\games\moria.sav;n
The ";n" is optional. If given it means that MORIA should never prompt
you for the name of the save file. If the SAVE option isn't given,
MORIA defaults to the file MORIA.SAV in the same directory as MORIA.CNF.
Also, the SAVE option can be just ";n", which means use the default name
without prompting.
- 2 -
4.2. SCORE
The SCORE option has 1 argument, the name of the file where the top
scores are kept. A sample SCORE option is:
SCORE c:\games\moria.scr
If the SCORE option isn't given, MORIA defaults to the file MORIA.SCR in
the same directory as MORIA.CNF.
4.3. KEYBOARD
MORIA can be played with either of 2 styles of commands. There is the
original VMS-style commands and a Rogue-style set of commands. The
choice of command set affects the keyboard letters used for doing the
various game commands. The KEYBOARD value can be either "ROGUE" or
"VMS". The default is to use the original VMS-style commands.
4.4. GRAPHICS
The GRAPHICS option takes 2 arguments, the ASCII number for the
character to be used for displaying the walls and floors. For example,
to use '#' for the walls and '.' for the floors, the GRAPHICS option
would be:
GRAPHICS 35 46
Incidentally, these also are the default characters that are used if the
GRAPHICS option is not specified.
4.5. RAWIO
Normally DOS does some extra work whenever a character is input from the
keyboard. One of the tasks is to interpret the special characters ^S
(control-S, which does a scroll lock) ^C (control-C, which acts like
control-Break) and ^P (control-P, which acts like control-PrtSc,
toggling output to your printer or giving an error message if you don't
have one). The RAWIO option will be used to tell DOS to not do this
extra work by making the input (and output) operate in "raw" mode. This
is good because ^P (a MORIA command) will now work. As well, screen
output will be somewhat faster.
URGENT! RAWIO will not work on Dec Rainbows and will probably lock up
the computer.
4.6. IBMBIOS
IBMBIOS enables the use of a BIOS call to read input from the keyboard.
- 3 -
The advantage of this is that the numeric keypad will then be useable as
direction keys for moving around. With this option the keypad keys map
to the directions:
7 up & left 8 up 9 up & right
4 left 5 nothing 6 right
1 down & left 2 down 3 down & right
And other keypad keys map to:
- rest
+ previous message
Ins inventory Del rest
If you are using the Rogue-style command set, the shift key and NumLock
key modify these commands. With the shift key down, 7 will be "run up
and left", 8 will be "run up", etc. The NumLock key is used as a toggle
between moving and tunneling. With NumLock enabled, 7 will be "tunnel up
and left", etc.
4.7. ANSI
The ANSI option tells MORIA to use ANSI sequences rather than using BIOS
calls for doing output. You must use the ANSI option if you are playing
MORIA on a DEC Rainbow. On IBM PCs, ATs and clones there should be no
need to use this option and you can safely ignore the rest of this
section.
The ANSI option takes three optional arguments: check_ansi, move_opt and
use_tgoto. If no arguments aren't given, they are assumed to be Y (yes),
Y and N (no), respectively. The usage is
ANSI [ check_ansi [ move_opt [ use_tgoto ] ] ]
An example is:
ANSI Y N
check_ansi tells MORIA to check for ANSI.SYS when starting up. You may have
to disable this check if MORIA insists you don't have ANSI installed, but you
know you do. move_opt tries to reduce the amount of output being sent to the
screen. use_tgoto tells MORIA to use the actual TERMCAP tgoto() routine. The
default is to use a faster routine which only works for ANSI-like terminals.
When the ANSI option is chosen, MORIA looks for ANSI control strings in
a file called TERMCAP, first in the current directory, then in directory
ETC. A sample TERMCAP file is supplied. Basically, this file maps
between logical cursor operations (eg. "cursor up") to ANSI sequences
(eg ESC [ A). In the file, ESC (escape) is represented as \E. MORIA
uses the following logical operations:
- 4 -
ce clear to end of line
cl clear screen
cm cursor motion (only if use_tgoto is chosen)
nd cursor forward (non-destructive space)
bc cursor back
up cursor up
xd cursor down
li number of lines on the screen
MORIA can also use:
ti terminal initialization string
te terminal end string
5. ENVIRONMENT VARIABLES
MORIA uses the environment variable USER to determine your real name (as
opposed to your role playing name in the game). The USER environment
variable can be set from DOS with:
set USER = kneller
If the USER variable isn't set, MORIA just uses the name "player".
If the ANSI option is chosen, MORIA uses the variable TERM to determine
the terminal information to extract from the TERMCAP file. If the TERM
variable isn't set, MORIA assumes the value "ibmpc-mono".
6. BUGS
I have not played this game much so there may be bugs which I have not
seen yet. Please report them to me so I can fix them.
7. AUTHOR'S ADDRESS
If you have any questions or bug reports please contact me at:
D. G. Kneller
1349 10th avenue
San Francisco, CA 94122
USA
or by electronic mail at:
ARPA: kneller@cgl.ucsf.edu
BITNET: kneller@ucsfcgl.bitnet
UUCP: ...ucbvax!ucsfcgl!kneller
- 5 -
+73
View File
@@ -0,0 +1,73 @@
Program: COPYDISK.C C 5.1 and MASM 5.1
Purpose: Copies volume label, subdirectory structure and all files
regardless of attribute type from one disk medium to another.
Author: Gordon Harris
3349 Humboldt Ave S
Minneapolis, MN 55408
Comments can be addressed to my
CompuSurve address: [72611,620]
Description: COPYDISK is an XCOPY like utility which allows you to copy
an entire disk to a drive of differing type, e.g. copy
the contents of a 1.2 m floppy to a 1.44 m floppy, etc.
Unlike XCOPY, COPYDISK will copy the volume label from the
source disk to the target, as well as copying all
subdirectories and files including hidden, system or read-
only files and directories. All files on the target disk
created by COPYDISK will have identical attributes (dates,
times, etc) as the files on the source disk. If the
source disk is bootable, so will the resulting target disk.
Syntax: The syntax for using COPYDISK is:
COPYDISK sourcedrive: targetdrive: [-n] [-x] [-f]
where "sourcedrive:" and "targetdrive:" are valid dos drives
and [-n], [-x] and [-f] are optional parameters.
Operation: Given valid parameters, COPYDISK (1) performs a media check
on the indicated drives, (2) prompts the user for permission
to delete all existing data from the target drive, (3) copies
the volume label from the source drive to the target and then
(4) proceeds to copy all files and directories from the source
to the target.
COPYDISK will abort if its check of the media type of the
target disk reveals that it is a fixed disk. This protects
you from inadvertently deleting the contents of a hard disk
either by using an incorrect parameter for the target drive
or by using a virtual drive name created by ASSIGN or SUBST
which represents a fixed disk drive or subdirectory on a
hard disk.
During the media check, COPYDISK installs its own critical
error handler. If a error is detected reading either the
source or target drives, COPYDISK will prompt you to retry
access to the disk. If you choose not to retry access to
the target disk, COPYDISK will prompt you as to whether you
wish to format the target.
COPYDISK will also abort if the data on the source disk is
too large to fit on the empty target disk, or if any errors
occur reading data from the source or writing data to the
target disks.
Optional Parameters:
-n (no prompt). This is useful when using COPYDISK in batch
files. With the "-n" parameter, COPYDISK will not prompt you
for permission to delete all data from the target disk.
-x (relaxed media checking). With this parameter, the target
disk may be a hard disk and the source data may be larger
than the capacity of the target disk.
-f (format target automatically if media check failure). With
this parameter, the DOS FORMAT.COM command will be spawned
without prompting if the target disk fails the media check.

+177
View File
@@ -0,0 +1,177 @@
Cubic Player Dist Sites
ððððððððððððððððððððððððððððððððððð
Internet
http://www.th-zwickau.de/~maz/sound.html (GUS-Patches here!)
ftp://gawain.faw.uni-ulm.de/pub2/demoserv/music/utils/players/
ftp://ftp.luth.se/pub/msdos/demos/music/programs/players/
ftp://cdrom.com/pub/demos/music/programms/players/
FiDO Request
Digital Nightmare 2:2437/301 ff Magic "CP"
Australia
ByteBLiTZ! BBS +61-8-379-6604 9.6k
Belgium
Data Rescue BBS +32-15-431119 28.8k
Unit BBS +32-16-236127 28.8k
Edge of Delight +32-2-3755651 28.8k Boca
+32-2-3758923 19.2k ZyXel
+32-2-3721089 64.0k ISDN
Brazil
RS-Net BBS (3 nodes) +55-51-594-3814 28.8k
AltConn BBS (4 nodes) +55-11-816-2031 28.8k
Canada
Beats per Minute +1-418-660 8137 14.4k
Overlow +1-418-659 1872 14.4k
The Turrahan Relm +1-604-477-0639 14.4k
Danger Unlimited +1-403-280-3778 28.8k
Digital Technologies +1-403-251-0487 14.4k
Denmark
Downstairs BBS +45-981-88132 19.2k ZYX
The Source! +45-36-305533 33.6k USR
Stairway to Heaven +45-747-263-03 28.8k USR
+45-747-200-56 28.8k USR
+45-747-201-56 28.8k USR
+45-737-200-56 64.0k ISDN
Finland
Mindwarp BBS +358-21-2437818 28.8k V.34
Unseen World +385-0-2924119 14.4k
France
ELECTRON BBS +33-1-6939.4630 28.8k USR
+33-1-6939.3152 16.8k USR
A.C.E BBS +33-1-45887548 14.4k
+33-1-45888809 28.8k
+33-1-45887799 28.8k
The Deadline +33-1-46486763 28.8k V.34
+33-1-46445796 28.8k VFC
Germany
Digital Nightmare +49-5121-157107 33.6k USR
+49-5152-39236 16.8k ZYX
+49-5121-157636 64.0k/128k ISDN
Media BBS +49-40-67561137 28.8k
+49-40-6779553 16.8k ZYX
+49-40-67561138 64.0k ISDN
S.EX-System +49-4102-820055 128k ISDN
+49-4102-320125 64.0k ISDN
+49-4102-58127 28.8k USR
+49-4102-320128 14.4k USR
Magican II: Wicked Scene +49-421-689341
Kuschelecke BBS +49-5250-52890 16.8k ZYX
Dark Illusion +49-89-36102651 19.2k ZYX
+49-89-36192234 19.2k ZYX
+49-89-36192235 28.8k
Metal Grave +49-761-806727 16.8k ZYX
Hong Kong
Audio Gang BBS +852-2379-9020 (?) 28.8k V.34
Hungary
Bali BBS +361-2263968 14.4k only from 22.00-06.00!
The RealBBS +361-2503492 14.4k
Italy
Revenge of the Shadow +39-464-421890 28.8k V.34
Malaysia
Data Alchemy +60-3-7185003 19.2k terbo
The Valley of Wind +60-3-719-3405 19.2k ZYX
+60-3-716-2973 28.8k V.34
Netherlands
Bad News BBS +31-35-6837350 28.8k V.34
+31-35-6421455 28.8k V.FC
SC1210 BBS +31-43-638243 28.8k
Cyberia BBS +31-71-790411 ??.?k
Connection VLD .../421 +31-10-4707040 28.8k VFC
fido: 2:286/421 +31-10-2479390 33.6k USR
fido: 2:286/422 +31-10-2479560 64.0k V.34/ISDN
Norway
Sidewalk Caf +47-355 12227 28.8k v.34
Countzero +47-5512-2963 28.8k USR
The Digital Empire +47-728 81664 28.8k
Scheen BBS +47-355 32880 28.8k
Poland
No Mercy +48-2-6718157 28.8k USR
+48-2-6716936 28.8k USR
The Access BBS +48-22-7580417 28.8k+19.2ZX
Russia
Lost in Time BBS +7-095-952-6570 ??.?k ( 0h-9h MST ONLY!)
Dig. Wiz. Group BBS #2 +7-095-143-8456 16.8k USR (23h-6h MST ONLY!)
Singapore
MultiMedia GS +65-252-1220 28.8k V.FC
Slovakia
SAC BBS Node 1: +42-7-2048232 19.2k ZYX
Node 2: +42-7-2048295 28.8k
South Afrika
Phantasia BBS +27-11-955-3597 28.8k USR
Not Power Prod. BBS +27-21-931-3896 14.4k
Spain
Dracker BBS +34-3-3853393 28.8k USR
+34-3-4661604 28.8k USR
Psicosis BBS +34-6-5155313 28.8k V.FC
Enigma II B.B.X +34-28-648061 19.2k ZYX
+34-28-648057 28.8k V.34
Sweden
A Touch of Eternity +46-18-240037 28.8k
Cryonics BBD +46-36-165110 28.8k
Switzerland
Blue Water BBS +41-81-947-4232 19.2k ZYX
The Underworld BBS +41-22-7769331 28.8k USR
Taiwan (R.O.C.)
Starship CBCS +886-2-826-5515 28.8k USR
Blue City BBS +886-2-462-1801 19.2k ZYX
Gold Fish BBS +886-2-768-9027 28.8k USR
Pannan Information BBS +886-37-471-730 28.8k V.34
New Paradise BBS +886-2-816-1462 28.8k V.34
Thailand
Krypt BBS +66-2-7589051 28.8k V.34
United Kingdom
Bubblegum BBS +44-1705-346902 28.8k V.FC
USA
The March 5 BBS +1-319-332-4822 14.4k ZOOM
+1-319-355-1202 14.4k
Raw Bass BBS (3 nodes) +1-219-672-8951 28.8k
connect^300 +1-407-774-8541 14.4k
Fantasy Island +1-804-420-6903 28.8k
The Chop Shop BBS +1-508-667-1978 14.4k
============================================================================
dist site registration
============================
wanna be dist site?
send the following form to one of the addresses on the endscreen.
if your country is already represented by a number of distsites,
we will reject your requests
You are responsible for getting the latest releases.
(PLEASE ALWAYS GIVE US THE -=> PHONE NUMBER <=- OF YOUR BBS)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
country/city: __________________________
bbs name: ______________________________
nodes: (phone number, type of modem, msg)
________________________________________
________________________________________
________________________________________
why should one call your bbs?
________________________________________
non public information:
your adress (mail/fido/compuserve/internet):
________________________________________
________________________________________
________________________________________
________________________________________
________________________________________
________________________________________
________________________________________
comment:
________________________________________
________________________________________
________________________________________
________________________________________
________________________________________
+70
View File
@@ -0,0 +1,70 @@
Cubic Player
Frequently Asked Questions and
Questions that will be Asked
----------------------------------
NOTICE! IF YOU HAVE ANY QUESTIONS OR PROBLEMS WITH CP, PLEASE
CHECK OUT THE HUGE DOCUMENTATION CP.DOC BEFORE (!!!) SENDING US
AN EMAIL!!!
IF YOUR PROBLEM IS DEALT WITH IN THE DOC, WE WILL NOT REPLY
TO YOUR MAIL!!!
?-> this archive of CP lacks the background pictures and anims cp used
to come along with...?
!-> that is to make the archive smaller. if you want background pics and
anims, get hold of an older full version of cp (e.g. 1.4) and just copy
this one over it.
?-> when I run cp, I get a message saying that a file named "dos4gw.exe"
is missing. What can I do?
!-> get a hold on it. It comes with earlier versions of cp (e.g. 1.4) and
many computer games. You probably already have it, just search your
harddisk.
?-> cp crashes... it worked in 0.96, but from 1.0 on cp keeps crashing when
loading the first or second module...
!-> yes, it's a bug...
it is probably due to the vesa-overlay option of your mouse
driver... disable it if possible.
also try loding your mouse driver as mouse.com in your autoexec.bat, and
not as mouse.sys in your config.sys
?-> cp sounds awful when i turn on echos or intepolation!
!-> buy a better computer... no! but this is too much for your cpu... :(
(at least the way i do it.. :). this often happens when DMA 0-3 is
selected. if you can change the dma to 5-7, then do so, this really
helps much! you can also turn down the output rate (-crXXXXX),
the 32 channel output rate (-cqXXXXX), the stereo output or the 16bit
output.
?-> cp runs out of memory although mem tells me I have enough!
("sound card initialisation failure" can sometimes be the same)
!-> dos4gw doesn't use xms when ems is also available, change your memory
configuration to either pure ems or pure xms or auto.
?-> how do I run cp under windows (c) 3.1?
!-> use the cp.pif file, included in the archive. for further info on this,
please check the documentation cp.doc. if it should not work then either,
well... we can't help it. :(
?-> how do I play a CD-AUDIO track?
!-> in the fileselector, select the driver letter of the cd drive which holds
CD. then, select the desired track. for further info, please check out
cp.doc. while playing press ctrl-return to stop playing and release lock.
?-> some modes are not displayed at all on my board!?
!-> if you do not have an et4000-compatible board, you MUST load a vesa
driver to enjoy all extended modes.
?-> some modes look weired or do not display correctly on my vga-board.
!-> that is due to the improper implementation of vesa-standards. It is
not our fault! (yeah!!)
?-> My GUS is mute!?
!-> Start CP with -cg,t as a command line parameter, or change the
irqs of the gus to below 8
?-> How do I play old MODs?
!-> In the Fileselector, enter "M15" as Filetype in the Module-description
Window (on the bottom)
+275
View File
@@ -0,0 +1,275 @@
Revision History of Cubic Player
==================================
Latest versions are available at
Digital Nightmare
+49-5121-157107 33.6k USR
+49-5152-39236 16.8k ZYX
+49-5121-157636 64.0k/128k ISDN
or have a look at the dist site list CP.DST
v1.7 31.3.96 mekka release
-------------------------------
-WAV player... :) (not yet on std. gus)
-stereo and 16 bit bug removed
-pattern lock (alt-l) (hiho alpha...)
-samples >512k cause no more problems with the mixer
-background TGA colors now shifted automatically
-pattern loop to order 0, row 0 fixed
-position jump & pattern break protracker compatibility improved ((r)ok?)
-delete the quality mixer from your cp directory to avoid conflicts!!!
Quality Mixer v1.666b
----------------------
-improved mixer
-volume slides
-quadratic interpolation
v1.666 29.2.96 (the in-between version for the in-between day!)
---------------------------------------------------------------------
-soundsystem completely restructured
-memory consumption and loading time reduced due to overlay system
-windows style CP.INI file / commandline parameters reduced.
-module type autodetect
-compo mode: all texts are removed and fileselector comment shown as name
-scan any given file extension (=> 001, 002, 003, 004 ??? :) )
-use your own background piccies (will you be able to convert them??! >) )
-multiple devices
-tag big modules to play them on a different device (alt-b in fileselector)
-devices can be changed at runtime (=> @:\DEVICES\DEVxyyyy)
-inputs of all devices can be sampled (=> @:\DEVxyyyy.MIC/LIN)
-S3M compatibility improved
-WSS sampler added
-WSS init should now work. tell me if not, since i'm only guessing! ;)
-no click after end of module in no-loop mode
-scanning ZIPs with password fixed
-RAR support. RAR 2.0 required for extracting
(when will they learn to support command line the right way?!!!!!)
-multiple patloops/globalvolslides fixed (thanks go to Eclipse)
-intensity adjust for analysers. (=> ctrl-pgup/dn)
-mono textmode analyser
-fine frequency adjust in analysers.
(no, this is not a feature, only a side effect... :] )
-MDL support (format version 1 only, convert old ones with 2MDL)
-mixer can now resample for screen output. (speed vs. accuracy)
-note delay command hopefully improved
-Super High Quality Mixer and IT loader coming soon. (as a driver)
v1.6 3.11.95 (Wired '95 release)
------------------------------------
-Sound Blaster AWE support (-cc5)
-AWE port is 6x0, not 2x0.
-reverb & chorus:
-does not modify effects engine parameters
-some midis use reverb & chorus
-ctrl-f5 / ctrl-f6 to slide master reverb down / up
-ctrl-f7 / ctrl-f8 to slide master chorus down / up
-ctrl-f4 to toggle between srnd/pan/bal and echo/rev/chr
-command line switches: -vrXXX for reverb/-vcXXX for chorus (-100..100)
-IMM available => load up to 112MB of samples to your AWE... >]
-plays up to 32 channels
-EMU8000 limitations:
-176.4kHz max. sample replay rate (this may seem to be no problem,
but consider a 44.1kHz sample played two ocataves above base).
Some high notes are not played, especially with midi.
-no 8 bit samples => half amount of memory when using only 8 bit samples
-no pingpong loops => converted to forward loops => less memory
-30 simultaneous notes max.
-no reverse playback direction
-Disk Writer device (-cc40)
-Sample Mode: analyse the CD, line or microphone input of your soundcard.
-play a track from the root of your cd drive
-play @:LINE.INP or @:MIC.INP to analyse line or microphone.
-if your cd drive is connected to the line input use the switch -cn
-available modes: a,x,g,shift-g,o
(the beloved ->wrfel mode<- does not yet work!)
-only on SB 1.x/2.x/pro/16 & GUS at the moment
-the "Windows-95-one-file-only-bug" hopefully removed now
-this may also include a similar bug with dos.
-thanks to Michael Erdmann for helping me finding this $&&!!%-[ð] bug.
-pattern re/preview in track view
-gus can use system timer now: -ct (use this switch in combination with
-cg if the gus plays only the first few notes)
-new oscilloscope mode: master channel
-8x finer speed/pitch control. ENOUGH, GUYS?!!? press ctrl-f11 to toggle.
-Audio-only CDs should now work with every computer
-XM fadeout bug fixed
-AMS v2.2 support and generally improved
-runtime stability improved
-some smaller bugfixes & internal changes
-midi titles in fileselector (thanks go to R0M/vacuum for info).
-nice little helpful tool... you'll notice it if you should need it. :)
v1.5-TP4 The Party 4 CD-ROM 31.7.95
---------------------------------------
-cd audio support enabled (just crap... wasn't it?)
(tracks are in root of cd drive)
-AMS support... (v2.1 only)
(I only had one module to test, so please do not hit me!)
-some smaller bugfixes
v1.4 9.7.95
--------------------
-the long promised ultra-cool fileselector ][ implemented:
-module information cache
-MDZ files (see MDZFILE.NFO)
-composer, comment, style, playtime, type, date
-type depending colored modules (what???)
-132x60 mode and others
-online help
-setup (session only for the moment :( )
-faster
-scan in archives
-bug that crashes some systems NOT YET found... sorry!
-Pro Audio Spectrum series support (thanks go to Alexander Gerlach)
-Double GUS support (see DOC 3.6)
-freeze option: alt-p => no screen output, idle, for multitaskers.
-PTM support (thanks to Scholar / $een / Holofix for one important
piece of information! Der Rest war ja wohl ne Lachnummer!)
-FFI officially renamed to Fast-Fake-Interpolation... =) (alt-backspace)
-new: 48-bit-Adaptive-Oversampling-Interpolation (backspace)
and 64-bit-Full-Oversampling-Interpolation (2*backspace)
(FOI always intepolates, AOI only when really needed, but nearly no
difference). intepolation sometimes pops a bit... :(
-gus clicks reduced... (hiho iceman!)
-gus volumes were a bit wrong... amplify can now be turned up to 200%
-textmode analyser colored (tab to change)
-notedots colors improved
-GUS Intelligent Memory Multiplier's IQ raised :)
-chorus added to echos (thanks to Shadow Dancer)
-vesa bugfix for gsa fadeout... (thanks to Michael Erdmann)
-pattern jump/break fixed... (thanks to Christophe Yvon)
-WSS port now used correctly: (thanks to Sandro Richi)
use e.g. -cc20,p530,d1 for standard WSS
-smaller changes/bugfixes: SB, WSS, DMF, S3M, OKT, XM/volcol
v1.0 29.5.95
-------------------
-authors' addresses have changed, see cp.doc
-Intelligent Memory Multiplier. Enables you to upload up to 8 megs of
sampledata to your GUS, CP will try to keep the sound quality as high
as possible. (not just dull doubling... ;)
-Windows Sound System / GUS MAX CODEC support (-cc20 / -cc21)
-GUS daughterboard is WSS. (not tested)
-makes echos, surround and very very big mods possible on a GUS with a
daughterboard or a GUS MAX, though the normal GUS mode usually sounds much
better. backspace should improve the quality)
-detect only works with GUS daughterboard or GUS MAX.
normal WSS owners will have to set the port and dma manually.
(how to detect a WSS?)
-Advanced Note Dots => N
-FFT for no coprocessor systems added (-cf for copro owners)
-common spectrum analyser added in Graphic Spectrum Analyser mode.
(YEHS!, shift tab to change palette)
-big graphic spectrum analyser added: 1024*768, (SHIFT-G)
Pentium recommended for fast mode and Hexium recommended for fine mode.
Resolution could possibly not increase that much on soft-mixer devices.
-OKT support (thanks to Sheer/Patraa for OKTs)
-new pics, new anis, anis need less mem now.
-analysers for no-coprocessor systems added
-did you notice, that all 16 bit samples were converted down to 8 bits? ;)
the GUS driver now supports 16 bit samples...
-card handles changed:
0: Quiet
1: SoundBlaster 1.x
2: SoundBlaster 2.x
3: SoundBlaster Pro
4: SoundBlaster 16 / AWE32
10: Gravis UltraSound
20: Windows Sound System
21: GUS MAX CODEC
-GUS and serial communication improved (worked with my non-fifo at 19.2k)
-Slow computer owners may use -cqXXXXX to set the desired mixing rate at 32
channels, rates at a different number of channels will be interpolated,
but they will not go beyond the -crXXXXX rate.
(SiPiYou: Ok?)
-scopes/gsa modes changed to 640x480, since problems occurred with
some adaptors
-ms-dos seems to mess around with the fonts when using code pages,
which made the graphics mode's text writing routine crash.
-echo editor added. => E
does not work with the UltraSound driver, of course!
-new: file zapper in the fileselector => ctrl-k
wait for the new fileselector for a better one. this one was just
included due to many urgent requests, and not much work was put in it,
so please do not complain!
-DMF files sound much better now!
(yes, they really sound better with more effects... |^} )
Not all effects are implemented yet, so keep complaining!
(I don't think all of them will ever be implemented...
And finally more (all?) DMFs will be loaded!
(how should I know, that I cannot rely on the information in the DMF?)
All RR Chapter 6 DMFs will be played.
-the single-channel-scope-and-low-relative-pitch-bug removed.
-use -md to make midi channel 16 a drum channel.
(thanks go to Martin Moeller for this info)
-the panic.s3m-much-too-high-pitch-in-pattern-5-bug removed.
(wow, I finally found a solution... ;)
-loader bugfixes (XM, S3M, DMF, 669)
-player bugfixes (S3M, DMF)
-load old mods now stays on. (kick me for 0.96!)
-loop modules & midi works
-walking forward in midi files works
-esc esc 2 escape
-save/restore setting moved to alt-f2/f3
-alt-fX mode keys removed
the next point is only true for Novell EMM386.EXE users:
-IRQs >= 8 do work now...
If such an IRQ did occur in real mode, DOS4G did not pass it up
to protected mode... The bugfix needs an additional interrupt. (0x60)
You can change the interrupt or turn the bugfix off (in case you are the
lucky owner of a new DOS4GW.EXE) by the switch -caXX (0:off)
v0.96 2.3.95
------------------
-ZIP support (use this, if you can!) (-> SET TEMP=tempdir)
-ARJ support (not quite sure about it)
-DMF support (wellwell... not too proud of it :]
but who cares in the times of FastTracker II >) )
-669 support
-WOW support
-ULT support (don't know about the effects...)
-old MODs without a signature will only be played if you set a certain switch
-fileselector: path can be entered manually now (ctrl-return)
-XM keyoff effect was misplaced i.e. put before the note instead of after...
v0.95 2.2.95
------------------
-gus support (-cc5)
DOES NOT WORK WITH IRQs FROM 8 TO 15!!!
This seems to be a problem with DOS4GW 1.95...
If anyone knows how to avoid the loss of interrupts with DOS4GW,
please send me a message!
-example echo/reverb batches added... Cathedral
-132 column modes and 30/60 rows modes <x> or <alt/ctrl-z> (VESA)
-32-bit-fast-fourier-interpolation added <backspace>
-midi scopes <o>
-midi drum channel
-the FIDO-net adress is now right... ;)
-vesa support. graphic output should now work correctly
-text mode analyser's font now set correctly. (hope so..)
-many loader bugfixes.
-cooperative command line help
-OS/2 v3 & sb support (probably also gus, but untested!)
-CAUTION: CP may cause OS/2 to do random writes at the hard disk!
Does anyone have more info about this?
v0.9á 27.12.94 (party '94 pre-release)
------------------------------------------------
-first released version
File diff suppressed because it is too large Load Diff
+312
View File
@@ -0,0 +1,312 @@
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º Cubic Player Dist Sites º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
ÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑ͹
º Internet º ³ º
ÈÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ http://www.th-zwickau.de/~maz/sound.html (GUS-Patches here!) ³ ³ º
³ ftp://gawain.faw.uni-ulm.de/pub2/demoserv/music/utils/players/ ³ ³ º
³ ftp://ftp.luth.se/pub/msdos/demos/music/programs/players/ ³ ³ º
³ ftp://ftp.elf.stuba.sk/pub/pc ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Australia º ³ º
ÈÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ ByteBLiTZ! BBS +61-8-379-6604 9600bps ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Belgium º ³ ³ º
ÈÍÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Data Rescue BBS +32-15-43.11.19 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Unit BBS +32-16-23.61.27 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Brazil º ³ ³ º
ÈÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ RS-Net BBS (3 nodes) +55-51-594-3814 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Alt-Conn BBS (4 nodes) +55-11-816-2031 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÑÍÑ͹
º Canada º ³ ³ ³ ³ º
ÈÍÍÍÍÍÍÍͼ ³ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ º
³ Beats per Minute +1-418-660 8137 14.4k ³ ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ º
³ The Turrahan Relm +1-604-477-0639 14.4k ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Danger Unlimited +1-403-280-3778 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Digital Technologies +1-403-251-0487 14.4k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Denmark º ³ ³ º
ÈÍÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Downstairs BBS +45-981-88132 19.2k ZYX ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ The Source! +45-36-305533 33.6k USR ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Finland º ³ ³ º
ÈÍÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Mindwarp BBS +358-21-2437818 28.8k V.34 ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Unseen World +385-0-2924119 14.4k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º France º ³ ³ º
ÈÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ ELECTRON BBS +33-1-6939.4630 USR 28.8k ³ ³ ³ º
³ +33-1-6939.3152 USR 16.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ A.C.E BBS +33-1-45887548 14.4k ³ ³ º
³ +33-1-45888809 28.8k ³ ³ º
³ +33-1-45887799 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÑÍÑÍÑÍÑ͹
º Germany º ³ ³ ³ ³ ³ ³ º
ÈÍÍÍÍÍÍÍÍͼ ³ ³ ³ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ º
³ Media BBS WHQ !!! +49-40-6753878 28.8k ³ ³ ³ ³ ³ ³ ³ º
³ +49-40-6779553 16.8k ZYX ³ ³ ³ ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÙ ³ ³ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ º
³ S.EX-System +49-4102-820055 ISDN 128k ³ ³ ³ ³ ³ ³ º
³ +49-4102-320125 ISDN 64k ³ ³ ³ ³ ³ ³ º
³ +49-4102-58127 USR V.34 ³ ³ ³ ³ ³ ³ º
³ +49-4102-320128 USR 14.4k ³ ³ ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÙ ³ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ º
³ Magican II: Wicked Scene +49-421-689341 ³ ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ º
³ Kuschelecke BBS +49-5250-52890 16.8k ZYX ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Dark Illusion +49-89-36102651 19.2k ZYX ³ ³ ³ º
³ +49-89-36192234 19.2k ZYX ³ ³ ³ º
³ +49-89-36192235 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Metal Grave +49-761-806727 16.8k ZYX ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Hungary º ³ º
ÈÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Bali BBS +36-1-22639680 14.4k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Italy º ³ º
ÈÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Revenge of the Shadow +39-464-421890 28.8k V.34 ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Malaysia º ³ º
ÈÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Data Alchemy +60-3-7185003 19.2k terbo ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÑÍÍ͹
º Netherlands º ³ ³ ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ º
³ Bad News BBS +31-35-837350 28.8k ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ SC1210 BBS +31-43-638243 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Cyberia BBS +31-71-790411 ??.?k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Norway º ³ ³ º
ÈÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Sidewalk Caf +47-355 12227 28.8k v.34 ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ The Digital Empire +47-728 81664 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Russia º ³ º
ÈÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Lost in Time BBS +7-095-952-6570 (0h - 9h MST ONLY!) ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Singapore º ³ º
ÈÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ MultiMedia GS +65-252-1220 28.8k V.FC ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Slovakia º ³ º
ÈÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ SAC BBS Node 1: +42-7-2048232 19.2k ZYX ³ ³ º
³ Node 2: +42-7-2048295 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º South Afrikaº ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Phantasia BBS +27-11-955-3597 28.8k USR ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Spain º ³ ³ º
ÈÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Dracker BBS +34-3-3853393 16.8k USR ³ ³ ³ º
³ +34-3-4661604 16.8k USR ³ ³ ³ º
³ or request via magic "CP" ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Psicosis BBS +34-6-5155313 28.8k V.FC ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÍÍÍ͹
º Sweden º ³ ³ º
ÈÍÍÍÍÍÍÍͼ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ A Touch of Eternity +46-18-240037 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Cryonics BBD +46-36-165110 28.8k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º Switzerland º ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Blue Water BBS +41-81-947-4232 19.2k ZYX ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÑÍÍ͹
º Taiwan (R.O.C.)º ³ ³ ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ º
³ Starship CBCS +886-2-826-5515 28.8k USR ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Gold Fish BBS +886-2-768-9027 28.8k USR ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Blue City BBS +886-2-462-1801 ??.?k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º United Kingdom º ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Bubblegum BBS +44-1705-799529 28.8k V.FC ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÑÍÑÍÍ͹
º USA º ³ ³ ³ º
ÈÍÍÍÍͼ ³ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ º
³ The March 5 BBS +1-319-332-4822 14.4k ZOOM ³ ³ ³ ³ º
³ +1-319-355-1202 14.4k ³ ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ ³ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ º
³ Raw Bass BBS (3 nodes) +1-219-672-8951 28.8k ³ ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Connect 300 BBS +1-407-774-8541 14.4k ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍ͹
º FiDO Request º ³ º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ º
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ º
³ Hamburg, Germany ³ ³ º
³ Media BBS 2:240/5121 (V.34/V.42) Magic: CP or ³ ³ º
³ (hope it works!) 2:240/5122 (V.FC) CP_NEW ³ ³ º
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ º
º
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
º º
º dist site registration º
º º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
º
º wanna be dist site?
º send the following form to
º
º Niklas Beisert
º Oberstrasse 84
º 20149 Hamburg
º Germany
º
º or e-mail/fido-net (see endscreen)
º
º You are responsible for getting the latest releases.
º We will inform you about any new releases.
º
º (PLEASE ALWAYS GIVE US THE -=> PHONE NUMBER <=- OF YOUR BBS)
º
Ç Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä
º
º country/city: __________________________
º bbs name: ______________________________
º nodes: (PHONE NUMBER, type of modem, msg)
º ________________________________________
º ________________________________________
º ________________________________________
º why should one call your bbs?
º ________________________________________
º
º non public information:
º your adress (mail/fido/compuserve/internet):
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º
º comment:
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º ________________________________________
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍþ
+100
View File
@@ -0,0 +1,100 @@
BBS Crash On-Line Game
By: John Richardson & Alex Slinin
(* Player Documentation *)
______________________________________________________________________________
As you begin, you will find yourself at an MS-DOS style DOS prompt. The object
of the game is to make yourself as big a nuisance to as many people as you can
in as short a time possible. You will infiltrate telecommunications services,
hack the accounts of other callers on this BBS, and contact Hackers Anonymous
to get help increasing your skills.
Functions Available in this Game:
DIR, ?, CATALOG - These three commands display the menu of options.
UE - While you are busy trying to trash the many online
services you will find here, they will be trying to
protect themselves by purging off as much of your
system as possible. You can use this UnErase command
to restore your hard drive to its original state. As
word begins to spread about your prowess, the cost
of this service will start to rise.
STATUS - Displays a list of your personal statistics. Tells
how many megabytes you have, how much money on hand
and in the bank. It will also keep a record of how
many turns of each type you have left.
CALL - This is used to call up commercial telecommunication
services and try to crash them. If successful, you
will be rewarded with money from hidden accounts as
you slowly advance in level.
HACK - Make a pest of yourself by attacking the accounts of
other callers on this BBS. Increase your level, take
cash from their credit accounts and steal both their
software and hardware. You will even switch places
with higher level systems if you defeat them.
HA - The infamous Hackers Anonymous. Call them to garner
information about the other caller accounts. They
can also provide you with powerful software cracking
programs and hardware backups... For a price!
HIGH - Displays the top 10 score bulletin.
QUIT - Use this if you want to... quit the game.
+ - Put all of your cash on-hand into the bank.
- - Take all of your cash from the bank.
FORMAT - Delete your current character and start a new one.
Do it when you are out of alternatives.
The name of the game is disk space. The more megabytes you have, the harder
it is for somebody to crash you and the easier it is to waste other boards.
New players should start with BBS #1 and advance from there.
While using CALL or HACK, you will be able to do the following.
[T]rash Files - This purges areas of the enemy hard drive and will
eventually crash their system completely. Note that
some people will hit back rather nastily if they
detect your tampering. Periodic hardware failure can
interfere with hacking operations.
[D]rop Carrier - Drop the carrier immediately in an emergency.
[U]pload Trojan - These nasty little suckers can sometimes do quite a
lot of damage to the host system. The advantage in
using them is that they don't leave any traces for
host to detect. Trojan Horse programs are rare, so
use them with discretion.
[B]ackup - When you take on a heavy hitter who is just about to
wipe you out, this emergency backup can really save
your bacon. It will recover some of the missing megs
before you're completely toasted.
Buying high powered terminal software and a hardware backup will help you to
prevail over powerful enemies. You can buy these from the Hackers Anonymous
BBS by using "HA" from the DOS Prompt.
+338
View File
@@ -0,0 +1,338 @@
Cthugha V5.0
'An Oscilliscope on Acid'
by the Digital Aasvogel Group. 1993-1994
Revision V5.0 - 29Jun94 zaph
Who's this Cthugha dude anyway ?
-----------------------------------------------------------------------
"Cthugha resembles an enormous burning mass continually varying in shape.
It dwells at or near the star Fomalhaut, from whence it may be called.
It is one of the most obscure and remote of all the Great Old Ones."
Call of Cthulhu - Chaosium
When Cthugha is summoned he is always accompanied by Fire Vampires.
'There appeared thousands of tiny points of light. ... The myriad points of
light were living entities of flame! For wherever they touched, fire sprang
up.'
The dweller in Darkness, by August Derleth
What does this software do then ?
-----------------------------------------------------------------------
Audio input seeded image processing.
Cool.
Hook up your CD player to the input of your soundblaster card,
or use your CD-ROM player if you've got one.
Run Cthugha (DOS program)
Then play some of your coolest music
- and wow, does your screen look like a 90's lava lamp or what ?
Cthugha 'listens' to your music, and changes the display dynamically
to the sound.
Ever looked an an oscilliscope of your voice or of music ?
Think of this as an oscilliscope on acid.
Technical Stuff :
-----------------------------------------------------------------------
Sound Cards :
Tested with soundblaster Pro and 16
Tested with GUS
**PROBABLY DOESN'T WORK WITH A PAS AT THE MOMENT :-(
(Sorry - that's all we had, if you want other cards supported get in
touch, and we'll see what we can do.)
Oh yeah, it needs a 386 too :-)
And it *really* wants a 486 with a good-speed graphics card...
And it *flys* with a Pentium PCI machine :-)
Command Line syntax:
Cthugha: Command line options
(These are Case sensitive commands)
-L,-M,-C : Use Line/Mic/CD as input
-G,-S,-P : Use GUS/SB/PAS (default: search)
-O : Use OLD SB code (useful for PAS or other cards that dont work)
-s,-m : Default to STEREO/MONO
-i,-e : Disable Inbuilt/External Palettes
-T <num> : Minimum frames before changing
-R <num> : extra random frames before changing
time delay formula : delay = t + rand()%r
-V <0-255>: Set input volume to <0-255>
-v <rate> : VU bar sample rate (Default=4000)
-Q <num> : Number of frames before silence change <def:200>
-f <num> : Start with flame #<num>
-w <num> : Start with wave #<num>
-p <num> : Start with palette #<num>
-l : Lock to first wave/flame/palette
-d : Pause just before running (usually for debug)
-X,-x : Debug mode (no sound source needed) - generate random noise
-t <fname>: Load alternate Translation table file
-q <fname>: Load alternate Quiet strings from a text file
-I <fname>: Load settings from .ini file
-B <num> : Set the beat volume level to #<num> <def:220>
-b <num> : Set the number of beats to #<num> (0,-ve to disable) <def:16>
(Notes on BEATS):
The BEAT flags allow the screen to try to change on a regular number of
loud beats... Usually this matches either a drum beat, or loud vocals..
If you set the values too low, everything starts going crazy :-)
This would be better implemented as a frequency based system, but since
the FFT code isnt going yet...
Keyboard Commands (While running) :
- + Drop/Increase the sample rate by 1000hz
< > Drop/Increase the noise threshold (blanking level)
i write current setting to INI file
w change wave function
f change flame function
p changes palette
t changes table (how it uses the palette)
d changes display function (up/down etc)
m massage the audio (figure that one out!!)
L Lock modes (No random switching)
c CD player interface
<space> randomally changes something (maybe the same)
* Stereo/Mono toggle
! Toggle Translation Table
<esc> Exit
x Exit
More Tech Stuff :
-----------------------------------------------------------------------
Palette File Format :
The format is the same that FRACTINT uses. If not all color indexes
are specified then they default to black. The color values are
specified in RGB tupples (0-255), where 0 is black. Easy !
The software scans the current directory for palette files (ext .MAP)
and uses up to the first 25 it finds.
Format -
255 255 255 comments index 0
... ... ...
255 255 255 comments color index 255
If you come up with a good palette file,
email it to zaph@torps.apana.org.au
Translation Tables:
-----------------------------------------------------------------------
These tables are used to design just about ANY effect, without recompiling
the source to Cthugha!!!
Here's how they work.
You generate a table, 320x204, of integers - the integer represents the
SOURCE pixel for this DESTINATION pixel.
e.g in a small 3x3 world..
123
456
789 would do nothing
236
519
478 would rotate around the edge, and pop back to the center...
Read the source to GENTABLE.C to try to work out how it works, or send me
some email!
Several tables are included with Cthugha - try them with the -t <fname>
option. Currently, only one table can be loaded for a given run of Cthugha.
Quiet Strings:
-----------------------------------------------------------------------
If everything goes quiet for a while, then Cthugha will pop up one of
19 strings to the screen
Each string can be up to 19 characters long, and can be read from a text
file with the following command line parameter
cthugha -q filename
The first 19 characters of each line are used for the string table.
Contact/Shipping/legal things :
-----------------------------------------------------------------------
CTHUGHA V5.0
Forward messages to Zaph
Internet zaph@torps.apana.org.au
Torps Productions BBS +61-3-813-3688
FidoNet 3:634/386 (FREQ CTHUGHA for the latest version)
Compuserve 100240,2002 (I'd rather use Internet...)
or:
Zaph
PO Box 331
Richmond 3121
Victoria, Australia
SHAREWARE (PostcardWare/CDWare)
Free for non-commercial use - Send a Postcard to show your appreciation
If you have more money than you know what to do with, then send me a CD
of something you like listening to with Cthugha on the screen...
Really, there's no point sending me a cheque for $20-$30, because its going
to cost to get it cashed anyway, and I'd probably go out and buy a CD with
the money, so - if you want to send more than a postcard, why not just send
a CD instead ??
Commercial users register for US$50 (or AUS$50)
(Previous versions were US$20, but it costs that much to cash the cheque!)
Kevin Burfitt
PO Box 331
Richmond 3121
Victoria, Australia
If you can't afford to register send a video tape of public performance
or send a postcard :-)
If you forward this program on to friends, make it available on a
BBS, etc please include this document (un-adulterated).
If you run a shareware house/store, the disk you sell this program on
is not allowed to be sold for more than US$20.
DISCLAIMER : this software is provided 'as is' without waranty
of any kind implied or expressed.
If it works, great.
If it doesn't, then that's your bad luck - send us some mail and we will try
to fix it.
Thanks to:
-----------------------------------------------------------------------
Coders:
zaph@torps.apana.org.au (Kevin Burfitt) Thats me :-)
moles@torps.apana.org.au (Myles Abbott) Documentation/Ideas
u23783@vicvm.uic.edu (Daniel Sachs) SBpro/SB16 Stereo Support,
CD stuff, Borland support
ukr8@rz.uni-karlsruhe.de (Jochen Quante) GUS support
ae510@freenet.carleton.ca (Derek Beland) PAS support (not yet)
General:
Dean Scully Convinced me to release the beast...
millen3@rpi.edu (Neal Millen) First person to email me with ideas!
bl2i+@andrew.cmu.edu (Bryan Lewis) Said nice things about Cthugha
pgray@umr.edu (Paul Gray) Convinced me to release this version
markd@bushwire.apana.org.au Offered his site for FTP access
ID software For DOOM :-)
Postcards from: (so far!)
-----------------------------------------------------------------------
Finland : Toni Nikkanen
Denmark : Ole Nielsen (and his 5.y.o. Neice)
Sweden : Nader Attar
USA : Lang Zerner, Mark Mathais, Gabor Lauffer
Netherlands: Reinout von Shouwen
Australia : James Milne
CD's from: (so far!)
-----------------------------------------------------------------------
Pete Namlooks Ambient Compilation 2 from Don Weir, Australia
Good CD's to watch: (With comments from the net!)
-----------------------------------------------------------------------
The Cure:
Dire Straits: Brothers in Arms
Ella Fitzgerald: (really!!, the 20's songs - trp@Cs.Nott.AC.UK)
Enigma:
Enya: (Excellent with all white palettes - jsee+@andrew.cmu.edu)
Nine Inch Nails:
Peter Gabriel:
Pink Floyd: The Dark Side Of The Moon
Pink Floyd: Momentary lapse of reason
Pink Floyd: (actually, anything by Pink Floyd will do...)
Orbital:
Smashing Pumpkins:
Metallica: Orion - use the crawling worms mode :-)
Metallica: Use Lightning for most tracks
Hendrix:
Manic Depression:
Pete Namlook:
Klaus Schulze:
SOURCE CODE:
-----------------------------------------------------------------------
The Source code to V5.0 should be in this archive. If you didn't get the
source, then email me on zaph@torps.apana.org.au
If you are interested in contributing to the source, contact me via the
Internet zaph@torps.apana.org.au
TroubleShooting TroubleShooting
-----------------------------------------------------------------------
Q: Why doesnt Cthugha work with my V2 Soundblaster ?
A: It might, try using the -O mode for compatibility
Q: Why isnt there native support for my <xxx> card ?
A: Because I need someone like you to write it for me!!
For now, try the -S or -O options...
Q: How can I register Cthugha ?
A: You can send me a postcard, its all I ask... if you have too much money
and don't know what to do with it, then send me a CD of something that
looks cool with Cthugha!
(You could send more, but I don't ask for it... so far I've been sent
several postcards, a couple of long letters, and a CD)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+764
View File
@@ -0,0 +1,764 @@
Getting started
Hardware and Software Requirements 1
Installation and Configuration 1
Game Files 1
Sound Blaster Support Files 2
Graphics Driver Files 3
Creating a new character
Character Types 4
Human 4
Elf 4
Dwarf 5
Wizard 5
Archer 5
Fighter 5
Character Attributes 6
Strength 6
Speed 7
Aim 7
Dexterity 7
I.Q. 7
Power 7
Hit Points 7
Armor Class 7
Playing the game
Gaining Experience 8
Interacting with other characters 8
Regular 8
Merchant 8
Civilian 9
Bartender 9
Healer 9
Teller 9
Trainer 9
Beggar 9
Questor 9
Guard 9
Moving Around 10
The party's spokesbeing 10
Talking to other characters 11
Saving, Restoring and Restarting a game 11
Quick Reference Card
Single Letter Commands 12
Function_Keys 12
D C G A M E S
Version 4.0
PLAYER'S USER GUIDE
(c) DC Software, 1989-1995
7908 Kettlewood Court
Plano TX 75025
214-491-1579 Getting started
Hardware and Software Requirements
This system requires a 386SX or better processor, as well as a
VGA or SuperVGA graphics card. It will use extended or expanded
memory if available, but it is not required at this time.
You should try to make as much conventional memory available as
possible. Use the MS-DOS 'MEM' command to find out how much
conventional memory you have. It should be close to 600KB at
least.
The game system will also support the a Sound Blaster and AdLib
compatible card for voice and music playback. It will recognize
the equipment and use it automatically.
If you have a Sound Blaster compatible card, you can help the
system determine how it is configured if you have a line like
the following in your AUTOEXEC.BAT file:
SET BLASTER=A220 I7 D1 T3
The actual values on the right side of BLASTER= depend on your
configuration and should have been set when you installed your
card.
Installation and Configuration
This game is probably packaged into one or more ZIP files. You
will need to extract the contents of some or all of these ZIP
files into a single directory in order to play the game. The
following files should be present:
FILES Description
WORLD*.* World Landscaping files
WORLDO*.* World Object and Character files
*.PCX Graphics images.
*.SCO Compiled script objects.
*.SCR Script sources (may not be present, it's up to the game
developer!)
*.DTA Various binary data files
DCCTOKEN.DAT Game's tokens and associated codes.
*.VOC, *.CMF Miscellaneous Voice and Music files.
*.RSC Archived voices for the game's characters.
Graphics Driver Files
In addition to the above, you should have the following files in
your game directory:
DCFONTS.7X5 Graphics font file. Same file for all graphics
modes.
DCOBJECT.mde Object graphics blocks for mode 'mde' from table
above.
DCPEOPLE.mde Character graphics blocks for given mode.
DCBLOCKn.mde (n = 0 to 9) Landscaping graphics blocks for given
mode.
DCSYSTEM.mde System graphics blocks for given mode.
Where '.mde' is one of the following:
Mode Resolution Colors Description
VHI 640x480 16 VGA high resolution (recommended for VGA)
VLO 320x200 256 VGA ow resolution (second best)
VH1 640x480 256 SVGA high resolution (best option!)
VH2 800x600 256 XVGA high resolution (memory hog, but wow!)
VH3 1024x768 256 UVGA high resolution (super wow!)
Note that the following modes are now obsolete: CLO, CHI, ELO,
EHI, MGA and TDY.
In addition to the above, you should have an executable file
(usually called DCPLAY.EXE, but it may have been renamed for
your game), as well as documentation files (*.TXT, *.DOC,
READ.ME, etc.).
Note that the following files are NOT part of the game itself.
They are saved game files and may be erased if they are present
in your original delivery:
PARTY.DTA - Holds the initial character creation right after
you've gone through the game's initialization sequence. If this
file is present, the game driver skips the initialization and
goes right into the game itself.
SAV*.* - Holds saved instances of the game files. These files
should NOT be part of the distribution. Note that the game
system can handle up to 1000 saved games. The current game is
stored as SAV*.000 (or slot zero), while your saved games are
stored as SAV*.nnn where nnn is a number between 001 and 999. STARTING A GAME
To start playing from the very beginning, type the following:
C:\> cd \mygame
C:\mygame> dir SAV*.*
C:\mygame> dir party.dta
If you find any files above, the game has already started, so
you should consider if you need to delete them or keep going.
To start the game playing type:
C:\mygame> dcplay
Creating a new character
When you start an adventure, the game designer may have chosen
to create the player character for you, but most likely you will
be allowed to create your own. If the game driver detects that
the player character has not been fully created, you will be
presented with a screen in which you may select your character's
type, name and attributes.
Character Classes
When choosing a character class, you should consider the special
attributes and restrictions (if any) that the character class
has. In the default configuration for DCGAMES, a Fighter cannot
use any magical items, but can use any weapon, armor or shield.
A Wizard on the other hand, cannot use weapons very effectively,
but instead must use it's Power and intelligence to overcome
obstacles. In the end, it becomes a matter of preference. Do you
prefer the powerful fighter, able to wield mighty weapons into
battle, conquering all by a combination of skill and strength,
or do you prefer to be a magic user, using your mind instead of
your muscle.
The standard DCGAMES environment includes the following
character classes, which differ mostly in their abilities and
attributes.
Human
Human beings have no special abilities, but neither are they
restricted in the kind of weapons, armor or shields that they
can use. While they can't cast magic spells (no power), they can
use any magical item.
Elf
These creatures are not very strong. They can not wear or wield
heavy equipment, but they can cast magic spells, recovering
their power faster than wizards. However they gain power very
slowly as they gain experience.
Dwarf
These cave dwellers tend to be small in stature, but very strong
and agile. They cannot use missile weapons or shields, nor cast
spells.
Wizard
A wizard is a being born with natural magical abilities. Their
high I.Q. let's them gain Power points very fast as they gain
experience and advance to higher levels. Unfortunately, they are
not very good with weapons, and can only use one-handed, blunt
or edged weapons (no missile weapons). This means that in hand
to hand combat they are likely to be killed. They can't use any
kind of shields, as it would hinder their ability to cast
spells, and can only use very light armor.
Archer
An archer is a highly trained fighter, whose training has
focused on missile weapons, concentrating on Aim and Speed
rather than Strength and Dexterity. Armed with a good missile
weapon, they can be very effective in a fight. They can only use
light armor and cannot use shields.
Fighter
A fighter is a human being that has trained extensively in the
use of heavy weaponry. They are very strong and agile, and have
learned to rely on their skills. A good fighter knows he/she can
count on their weapons and their own skills at all times. They
have a deep contempt of magical items (other than magical
weapons), and will never use any magical item (like rings,
amulets, gems, scrolls or staffs).
If you are given the opportunity to create your character, you
will be able to allocate some points to your different
attributes. What attributes you assign these points to depends
on the character class you choose.
Character Attributes
All characters have attributes such as strength, speed, I.Q.,
etc. Some attributes are more important than others, and
different character types have different attribute requirements.
For example, a Fighter has no need for a high I.Q., strength is
their primary need. On the other side, a Wizard has no need for
strength and needs all the I.Q. it can get.
When a character's attributes exceed a certain value, the
character will get additional effect when using the attribute.
For example, a very strong person will do extra damage points
when using contact weapons, and will be able to carry heavier
things than normal for that character class.
The following table describes the "additional effect" of a high
attribute:
Attribute Value Effect
Less than 9 May reduce effectiveness
9 to 15 No special effect
16 to 18 +1 effect
19 to 20 +2 effect
21 to 30 +3 effect
31 to 40 +4 effect
41 to 50 +5 effect... (and so on)
There are ten (10) character attributes:
Strength
In hand-to-hand combat, you will do more damage when using
contact weapons. You will also be able to carry 10 additional
pounds for each "additional effect" point.
Speed
Speed is important in a battle, as it may allow you to strike
more than once per round. If your speed exceeds that of your
current foe by more than 10 points, you will be able to strike
twice. If it exceeds it by more than 20 points you will be able
to strike 3 times.
Aim
Aim betters your chance of hitting a target with a missile
weapon. It doesn't affect hand-to-hand combat. In general, you
can expect to hit a target about 1 out of 2 times. An additional
point from aim will better the chances to 2 out of 3 another
point will make it 5 out of 6, and any more points will always
hit.
Dexterity
This attribute is important in combat, as it helps in avoiding
getting hit! It also helps to avoid traps when you try to break
the lock in a chest or door.
A character with dexterity under 9 might have trouble using
weapons, and might harm him/her-self during combat.
I.Q.
A wizard's I.Q. will help him/her gain extra power when promoted
to a new level. A wizard with a low I.Q. might actually loose
Power when promoted to a new level!
Power
A magic user (Wizard or Elf) consumes POWER points when casting
a spell. Power is replenished with time and rest.
Hit Points
This is the amount of damage that a player can take before
dying. Note that a player with only 1 h.p. is unconscious. Extra
hit points are earned when you are promoted to a new level.
Armor Class
This attribute depends on the armor you are wearing, as well as
the magical items and/or spells that may protect you at any
given time. The higher your a.c. the less damage you suffer
after being hit.
Luck
Increases your chances of opening locked doors, avoiding traps,
etc.
Charisma
May get you better deals when trading, etc.
Playing the game
Gaining Experience
When you play the game, you will get experience points for every
point of damage done to a monster during battle. You will also
get experience and a monetary reward for performing services for
other characters (quests). The game designer may have added
other ways of obtaining experience, such as completing certain
tasks, or entering a certain place, etc.
As your experience accumulates, you will be automatically
advanced to a new level. Every time you advance you will
receive additional hit points as well as some additional points
in one or more attributes, depending on your character's type:
Type Gains attribute points for
Human Strength
Elf Power (very slowly)
Dwarf Strength and Dexterity
Archer Aim and Speed
Wizard Power
Fighter Strength
Interacting with other characters
You will encounter many different characters during the course
of your adventures. The character class will direct a
character's actions to a great extent. The following are the
standard classes of characters, but remember each character is
an individual, and the following is just the expected behavior
for a character of any given class.
Regular
This is someone that might be interested in joining your party.
Talk to them before you ask them to join your group. Once they
join, if you ask them to leave you have to share your gold with
them and they take any item they are carrying with them. There
is a maximum of 6 characters in a single party, so choose your
companions well. Use the Vacate command to ask a character to
leave your group.
Merchant
Merchants buy and sell items. Their merchandise varies a lot,
but they usually concentrate on certain 'types' of items like
weapons, armor, food, magic potions, magical items, etc.
Merchants will usually buy only items of a type similar to the
merchandize they carry. For example, an armorer (sells armor,
shields, etc.) would not be interested in buying a Magic Book.
Civilian
This character will not usually join in your adventure. You can
talk to it, but that's about it.
Bartender
The bartender at the local pub is a good source of information,
but drinking in excess will get you no where.
Healer
Can heal your wounds, cure your poisoning, resurrect your dead
and remove cursed items (for a price, of course).
Teller
These person can usually give you a good lead, but their words
may be cryptic and usually expensive.
Trainer
Your character's can train to gain Strength, Dexterity, Aim or
I.Q. This is an expensive but quick way of building your
character's attributes.
Beggar
While most beggars are worthless scum, and will try to steal
your money, beggars have been known to give good tips when
treated right.
Questor
This person will give you a quest. If you accept, you will have
to go and get a specific object, for which the questor will pay
well. Finishing a quest will also give you additional experience.
A questor may also ask you to find and bring a person. This
normally implies a rescue mission.
Guard
A guard will not let you approach the door or passage it is
guarding. Talking to them can lead to a fight, unless you are
prepared to give it the password required. Some guards have been
known to take bribes.
Moving Around
You move around by using the arrow keys (up, down, left, right)
or the key pad (make sure NUMLOCK is NOT set). When you see a
town or an entrance or exit, press the 'E' key to Enter or Exit
through the door.
Time passes every time you move. Your characters consume energy
and eat when they need to automatically out of the group's food
supply. If you run out of food they will go hungry and will
starve to dead eventually, so load up on food if you are going
away from civilized areas for an extended period of time.
Poison will also take it's toll on a character, so be careful
and carry some potions if you can find them. They can usually
be bought in the towns.
When the characters get tired, they must sleep to recover. An
exhausted character will start loosing hit points as they move
around, so find a safe place and rest there.
Hit points are regained every two steps (if you're healthy and
well fed).
A character's attributes may be modified by artificial means.
The modification may be temporary or permanent depending on how
it was obtained. Temporary modifications will go away when you
rest and must be re-invoked when you wake up.
Some magical items may have a limited number of uses, so you
should remove them before you sleep. Otherwise, their effect
will be re-invoked when you wake up, using a charge
unnecessarily.
If monsters appear while camping out, you may not have regained
all of your hit points, and the monsters will have the
initiative (first strike) because they caught you unprepared for
battle.
The party's spokesbeing
To set or change the party's "primary" character, type the
number of the character (1 through 6).
If you want to see the statistics on the entire group, press 0.
The primary character remains selected and is highlighted on the
screen.
Commands like Get, Drop, Wield, Remove, Talk, etc., are always
performed by the primary character. Thus, if you talk to a
merchant, and buy something, it will be placed in the primary
character's back pack.
Food and Gold are the general exception. They are always shared
by the entire party. If a food item is put in the backpack, it
probably means that it's not regular food! Some food has been
known to have strange effects (one of which is poisoning!).
Talking to other characters
When talking to other characters, you can use "keywords" to
conduct a conversation. Most characters will respond to keywords
like Hello, Name, Job, Join, Bye, etc. The conversation may
reveal other keywords, which in turn may lead to more.
Some characters will show you a menu from which you may interact
with it. If the character is interested in idle chat, you will
see a 'Talk' option in the menu, otherwise, the character is
interested only in doing business.
If there is a price associated with an option (such as buying an
item), it will be shown to the right of the menu entry in either
gold pieces (GP) or silver pieces (SP). Remember that there are
10 silver pieces in every gold piece.
Saving, Restoring and Restarting a game
Saving the game often is highly recommended. You can save up to
999 copies of the game (in slots 1 to 999).
If you need to stop playing, press F10 to suspend the game. The
current game is always saved in slot 0. When you come back, the
game will continue where you left off.
To go back to a saved game (restore) press F4 and indicate the
slot number that you want to load.
Should you want to restart the game from the very beginning,
press F6.
If you choose any of the above option by mistake, press <ESC> to
return to the game.
Quick Reference Card
Mouse Interface
Button Window Items Action
R World vehicle, door, chest, sign Use
R World NPC Talk to
R World Anything else Get
L World Any object or npc Look
R Menu menu option Select Option
R ICON BAR Variable. Look at the icon's picture for a clue.
R Group Stats Individual Player Display Stats
R Player Stats Worn/Wielded Item Remove
R Player Stats Backpack Item Wear/Wield
R Player Stats Anywhere Else Display Group
L Player Stats Any item Worn/Wielded/Backpack Look at it.
Single Letter Commands
0 - Show party summary stats.
1-6 - Select's primary character.
A - Attack a group of monsters.
C - Camp Out. Rest for a little while.
D - Drop an object from your back pack.
E - Enter or Exit another world.
G - Get object you are standing on or next to you.
I - Inventory. Look's in your backpack.
L - Look. To examine something closely.
N - iNvoke a magic scroll or a gem.
Q - Quaff (eat or drink something in your backpack).
R - Remove weapon, armor, shield, ring, amulet or staff.
S - Spell. Cast a magic spell (Wizards and Elves only).
T - Talk to other characters.
U - Use object.
V - Vacate. Let someone out of your party.
W - Wield or Wear weapon, shield, armor, ring, etc.
X - eXit a vehicle or dismount.
Z - Zap a monster with a magical staff.
Function Keys
F1 - HELP
F2 - To SAVE the current game.
F3 - Toggle Sound/Music On/Off
F4 - To RESTORE a saved game.
F6 - To RESTART a game from scratch.
F10 - Save game to slot 0 and return to DOS.
ESC - Cancel last operation. During a battle, stop fighting
mode and
try to escape.

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+783
View File
@@ -0,0 +1,783 @@
Deceive
Version 1.0
Copywrite (c) 1986 by Carl Burtner
What Is It?
Have you ever been in the middle of a great game (or
balancing your checkbook, or updating your resume) and had
your boss appear behind you? What did you do? Reboot?
Attempt to block the screen with your body? Get fired?
Well now there's a better way! Deceive allows you to
instantly pause the program you're using and display the
screen of your choice. With the push of a key that
incriminating arcade game can be transformed into a
spreadsheet, word processor, or anything you desire. It's
fun, it's fast, and best of all, it's cheap!
User Supported Software
This program may be copied as much as you like and
distributed to whomever you choose so long as the
distributed copies are not modified and are accompanied by
the programs documentation. See page 9 for furthur
information.
T A B L E O F C O N T E N T S
What Is A Deception . . . . . . . . . . . . . . . . . - 1
How Does It Work . . . . . . . . . . . . . . . . . . - 1
Compatibility . . . . . . . . . . . . . . . . . . . . - 1
One Small Problem and a Bonus . . . . . . . . . . . . - 2
System Requirements . . . . . . . . . . . . . . . . . - 2
About Residency . . . . . . . . . . . . . . . . . . . - 2
How to Use Multiple Deception Screens . . . . . . . . - 2
Basic Key Definitions . . . . . . . . . . . . . . . . - 3
Alt-E . . . . . . . . . . . . . . . . . . . . . . - 3
Alt-B . . . . . . . . . . . . . . . . . . . . . . - 4
Alt-C . . . . . . . . . . . . . . . . . . . . . . - 4
Deception Key . . . . . . . . . . . . . . . . . . - 5
Special Functions . . . . . . . . . . . . . . . . . . - 5
F2 - Deception Screen Storage / Retrieval . . . . - 6
F3 - Screen Mode Alteration Facility . . . . . . . - 6
F4 - Time Delay Facility . . . . . . . . . . . . - 7
User Support . . . . . . . . . . . . . . . . . . . . . - 9
In Case of Trouble . . . . . . . . . . . . . . . . . - 10
What Is A Deception?
A Deception is when the True Screen display has been
replaced by the Deception Screen. The Deception Key is the
key selected by the user to initiate a Deception. The
Deception Screen (also called the Bogus Screen in the
program) is the screen selected by the user to be displayed
during a Deception.
How Does It Work?
Using Deceive Is Simple.
1. Type Deceive from the DOS prompt and hit the enter
key
2. Select and press the key to be used as the Deception
Key
3. Run any program to display the screen you want
displayed during a Deception.
4. Hit Alt-C to capture the screen.
5. Run the program you really want to run.
6. Hit Alt-E to enable the Deception Key.
7. Hit the Deception Key to display the captured
Deception Screen.
8. During a Deception, either hit the Deception Key
immediately to return to your program or hit any
other key to make changes to the Deception Screen.
Use the arrow keys, enter key, and backspace key to
move around the Deception Screen. During editing
of the Deception Screen the Deception Key will
revert to its normal function. Hit the Esc key to
end editing of the Deception Screen and return to
your program. F2 through F4 are used during a
Deception to access several special functions.
These functions will be described later.
Compatibility
Deceive is compatible with both the color and mono display
adapter and will work simply with any program that uses BIOS
to change display modes and obtain keyboard data. Programs
that do direct writes to the screen buffer and take over the
keyboard are a little trickier, but the special functions
Deceive -1- Version 1.0
available during a deception make Deceive compatible with
most of these programs too.
One Small Problem And A Bonus
There is one sequence of actions that must be avoided. If
you install Deceive, hit Alt-E, hit the Deception key, hit
F2, and load in a Deception Screen from disk, the system
will hang when you return to DOS. I have no idea why. This
problem only occurs if you want to load a Deception Screen
from disk immediately after installation. Most users will
probably never want to do this. If you do want to
immediately load a screen, just hit any other key (the
backspace is fine) before hitting Alt-E and everything will
be fine.
The bonus is, if you use Deceive with a game that doesn't
allow you to reboot, you can initiate a Deception and reboot
from there. No more turning off the power switch!
System Requirements
Deceive requires DOS 2.0 or greater and uses about 40K of
memory.
About Residency
Deceive is a resident program. This means that once
initialized, Deceive will remain in memory until the
computer is turned off or rebooted. The memory used by
Deceive (about 40,000 bytes) will not be available for use
by other programs.
How To Use Multiple Deception Screens
If you feel like it, or have the need, it is possible to
have more than one copy of Deceive installed and operative
in memory at the same time. Most users will probably have
no need to use this function and first time users may want
to skip this section entirely for now.
To install multiple copies, just follow the first four steps
of the How Does Work section selecting a different Deception
Key each time. If you install multiple copies, each
installation will decrease the memory available to run other
programs by about 40K bytes. If multiple copies are
installed the Alt-E, Alt-C, and Alt-B keys of the previously
installed copy will be disabled and the Deception key of the
previously installed copy will be enabled. Being able to
Deceive -2- Version 1.0
install multiple copies of Deceive, each with its own
Deception Key, gives the user multiple Deception screens to
choose from and allows flipping between Deception screens
during a Deception (multiple Deception screens can enhance
the realism of a Deception).
Flipping between Deception screens takes a little practice
because each Deception key can only be hit once. For
instance, imagine that you have installed three copies of
Deceive each with a different Deception Screen and Deception
key. When the Deceivee (your boss, or whomever) appears you
panic and hit the Deception key for the third copy. After
peering intently at it for half a minute you decide you'd
better change screens, so you hit the Deception key for the
first copy. After another 30 seconds you decide to switch
to the second copies Deception Screen so you hit it's
Deception key. Now, all three copies have been activated.
When you desire to switch back to Deception Screens one or
three the natural tendency will be to hit their Deception
keys. When you do that you will find that they don't do
anything. To switch back to the previous Deception Screen
you must end the current Deception (with either the
Deception key or the escape key as described earlier).
Ending the second installed copies Deception will take you
back to the first installed copies Deception Screen. Then,
ending the first copies Deception will take you back to the
third copies Deception Screen. Ending the third copies
Deception will take you back to your program. It sounds
much harder than it is. Just try it, you'll get the hang of
it. If you lose your place among the Deception Screens
remember that hitting the escape key enough times will
sooner or later end the Deception and return you to your
program.
Basic Key Definitions
Deceive uses four keys to control its basic functions. They
are:
Alt-E
Alt-C
Alt-B
Deception Key
Alt-E
The Alt-E key combination is used to enable and disable
Alt-B and the Deception Key. When Deceive is first
initialized Alt-B and the Deception Key are disabled.
Pressing Alt-E enables these keys and sounds a low-high tone
sequence. Pressing Alt-E again disables the keys and emits
a high tone-low tone sequence. During a Deception hitting
Deceive -3- Version 1.0
Alt-E enables or disables the Alt-E function. If disabled,
the Alt-E key will no longer enable or disable the Alt-B key
or the Deception Key.
Alt-B
When Alt-B is pressed the screen is blanked and the users
program continues to run. This feature is useful for
allowing a program to initialize while hiding its
initialization screens and for using Shift-PrtSc to print
off a screen without the screen being visible on the
monitor. Hitting Alt-B a second time unblanks the screen
and sounds a short beep.
The Alt-B key is a toggle. Pushed once it blanks the screen.
Pushed again it unblanks the screen and sounds a beep.
Sometimes the computer will unblank a screen that has been
blanked by Alt-B (generally after scrolling or clearing).
There is no way for the Alt-B function to know that the
screen has been unblanked. The next time Alt-B is hit it
will unblank a screen that has already been unblanked. This
is not dangerous, just potentially confusing. Alt-B beeps
every time it unblanks the screen just to let you know that
it thinks the screen needed unblanking Just remember, if you
hit Alt-B to blank the screen and hear a beep, hit Alt-B
again to blank the screen.
The Alt-B key is enabled and disabled by the Alt-E key. The
Alt-B key may also be enabled or disabled during a Deception
by hitting Alt-B.
Alt-C
This key combination is used to capture Deception Screens.
To capture a Deception Screen, run the program necessary to
display the desired screen and hit Alt-C. The screen will
be captured and a short beep will sound.
Some programs which go around BIOS to access the screen
buffer directly can are more difficult to capture screens
from. Lotus graphs are one example. For these programs,
when Alt-C is pressed the screen will display unreadable
garbage. Don't Panic! Deceive has a facility that allows
you to update BIOS and restore the screen to its original
appearance. To restore the screen, follow the following
steps:
1. Press the Deception Key to initiate a Deception
2. Press F3
3. Type T and hit the return key
Deceive -4- Version 1.0
4. Type V and hit the return key
5. Select the most likely screen display mode from the
list and hit the return key.
6. Hit the escape key to end the Deception.
A complete description of the Screen Mode Alteration
Facility will be provided later.
Alt-C is not enabled or disabled by Alt-E. To enable or
disable Alt-C initiate a Deception and press Alt-C.
Deception Key
The Deception Key is defined by the user and may be any key
or any Alt, Shift, or Ctrl key combination except for Alt-E,
Alt-C, or Alt-B. The Deception Key, when pressed, instantly
saves the current screen and displays a screen previously
selected by the user (this is known as initiating a
Deception). If the user has not defined a screen to display
during a Deception, a blank screen is presented. To end a
Deception either hit the Deception Key immediately or use
other keys to make changes to the Deception Screen, then hit
the escape key. The Deception Key is enabled and disabled
by the Alt-E key. Alternatively, the Deception Key may be
enabled or disabled during a Deception by hitting the F1
key.
Special Functions
There are several special functions available only during a
Deception. While there are many programs directly
compatible with Deceive, several are not. These special
functions can be used to make Deceive compatible with many
of these programs. They functions are:
F2 - Deception Screen Storage / Retrieval
F3 - Screen Mode Freeze Facility
F4 - Time Delay Facility
To access these functions press the appropriate F key during
a Deception. When using any of these functions hitting the
escape key will immediately exit the function and return you
to the Deception Screen. The backspace key may be used to
correct entry mistakes. If a variables current value is
displayed, hitting the return key without typing a selection
will leave the current value unchanged.
Deceive -5- Version 1.0
F2 - Deception Screen Storage / Retrieval
This facility allows Deception Screens to be saved to disk
or recalled from disk. The user must select a file name and
the desired action (save or retrieve). The last file name
used is displayed. Hit the enter key to reuse the name or
any other key to enter a new name. If, after entering a new
name, you decide to reuse the old name, use the backspace
key to move the cursor as far left as it will go and hit the
return key. Paths may be used in the file name. After
entering the desired name you must select the desired
action. Type S and hit the return key to save the Deception
Screen to disk. Type R and hit the return key to retrieve a
Deception Screen from disk. If you hit the return key
without typing S or R the last action performed that is
displayed just to the left of the cursor will be repeated.
When you hit the return key the Deception Screen will be
saved or recalled and you will be returned to the Deception
Screen. If an error occurrs (full disk, invalid file name,
file not found, etc.) an error beep will sound and you will
be returned to the Deception Screen.
F3 - Screen Mode Alteration Facility
The IBM-PC has several display modes. Available modes
include 40 column or 80 column alphanumerics, low resolution
graphics, and high resolution graphics. Deceive must have
accurate knowledge concerning the current screen mode to
return from a Deception, capture the screen (Alt-C), or
blank the screen (Alt-B). Deceive receives its information
from BIOS. If BIOS does not know the current mode being
used, Deceives information will be incorrect. When this
happens capturing a screen, blanking the screen, or
returning from a Deception will result in the True Screen
being set to a different mode than it was before. This
usually will cause the screen to display odd loking,
unintelligable garbage. The Screen Mode Alteration Facility
allows Deceive and BIOS to be updated and can restore the
true screen (or the Deception Screen) to its proper
appearance.
After pressing F3 during a Deception the True Screen or the
Deception Screen must be selected for alteration. Then it
must be decided whether the mode is to be frozen or
variable. If the mode is frozen, Deceive will ignore BIOS
when performing any future action on the selected screen.
If the mode is variable, Deceive will use the mode you
select when it returns to the Deception Screen or True
Screen but will use BIOS to determine the mode for future
Deceptions, captures, or blanks.
The final choice is the mode to be used. For reference, a
list of the modes supported by BIOS is displayed. If you
Deceive -6- Version 1.0
are using the monochrome Display Adapter no matter which
mode you select, BIOS will use mode 7. If the Color Diplay
Adapter is being used, DO NOT select mode 7. This mode is
for mono displays only. If you wish to change whether the
mode is frozen or variable without altering the mode, just
hit the return key or type 8 and hit the return key. Once
all the variables have been entered, Deceive updates the
mode accordingly and returns to the Deception Screen.
You should be aware that a very small number of programs use
a non-standard graphics mode which BIOS and Deceive are
incapable of duplicating. For these programs select the IBM
low resolution color graphics mode. This mode will not
display the entire non-standard screen, but works fine in an
emergency. As more information becomes available, the modes
supported by Deceive will be expanded.
The Screen Mode Alteration Facility is fun! If you have a
color display adapter and wish to experiment, try capturing
a screen, initiating a Deception, and altering the mode of
the Deception Screen. Each of the available types of mode
(80 column vs. 40 or graphics vs. alphanumeric) will
reinterpret the screen data to give the Deception Screen a
different appearance.
F4 - Time Delay Facility
Deceive operates by directly taking over the IBM-PC's
keyboard. Many game programs also take over the keyboard.
When this occurs, Deceive will no longer operate. The Time
Delay Facility provides a means by which Deceive can regain
control over the keyboard.
When activated, the Time Delay Facility will wait the
specified time period and check to make sure that Deceive is
in control of the keyboard. If Deceive is not in control,
the Time Delay Facility gives it control and issues a beep
to let you know Deceive is operative. At the users option,
the delay and check will be preformed either once or
continuously.
First, the Time Delay must be activated or halted. Type R
to activate the delay or H to halt the delay and hit the
return key. If you're activating the Delay the delay time
will not start until the Time Delay Facility is exited.
Next, the user must decide if a single delay period and
check is needed or if multiple checks are required. Some
game programs, like the public domain Stargate, retake
control of the keyboard occasionally. The Multiple Checks
mode works nicely with such programs. Finally, the Delay
Period must be entered. At present, the delay period is
entered in units of system clock ticks. Clock ticks occur
at the rate of 18.2 per second. It is recommended that at
Deceive -7- Version 1.0
least a 1 second delay (delay value of 18) be used to
minimize system overhead. In practice, a value of 255 (14
seconds) works well with most programs. This usually allows
enough time to get the program fully initialized before the
first time delay expires. After the Time Delay is typed hit
the return key to enter the value and return to the
Deception Screen. If the Timer Run option was selected the
delay period begins the instant the Time Delay value is
entered.
There are a few rare programs that are incompatible with the
Time Delay function. These programs, like the public domain
SI.COM (Space Invaders), lock up after the delay period has
expired. The only way to determine compatibility is by
experimenting.
If a program requires that the Time Delay Facility be used,
it is possible (but unlikely) that when the program is ended
the keyboard will lock up if any key is hit other than the
Deception Key. Why? The Time Delay Facility gave Deceive
control over the keyboard while a program was running. When
a key is hit Deceive checks to see if the key is one it
cares about (Alt-E, Alt-B, Alt-C, or the Deception Key) then
passes control back to the program you're running. Deceive
has no way of knowing that you ended the program. When you
end the program, if the next key you hit is not one of
Deceive's keys, Deceive will pass control to a program that
is no longer there. The results are unpredictable. The
only way to avoid this is to initiate a Deception
immediately after exiting the program. During the
Deception, reboot. To date, no program has been found where
this problem has occurred. Most game programs which require
the use of the Time Delay Facility require that the system
be rebooted or turned off to exit. If this potential
problem arises, let me know.
Deceive -8- Version 1.0
User Supported Software
For those who have never been exposed, User Supported
Software is a distribution concept begun by Andrew
Fluegelman with PC-Talk. It is based on the assumption that
if a user gets a chance to try a program and likes it, he or
she will voluntarily contribute to the support of the
program. Users are usually encouraged to copy and
distribute User Supported programs freely.
Deceive is being distributed as User Supported Software. If
you're using Deceive and like it (or if it's saved your
job!), and you want to contribute to its further
improvement, please send $5.00 (dirt cheap!) to:
Carl Burtner
435 Brandon Road
Rochester, NY 14622
Contributors to the program will be informed by mail of the
availability of new revisions. Your voice makes a
difference! Major revisions will probably not be undertaken
without positive user response.
You are encouraged to make as many copies of Deceive as you
like and to distribute unmodified copies of the program and
documentation to whomever you choose.
If you have questions, suggestions, or problems with
Deceive, please feel free to contact me.
Deceive -9- Version 1.0
In Case Of Trouble
(a statement of sympathy for the disturbed)
Deceive has been tested for compatibility with as many
different computers and software packages as possible.
However, not every PC-compatible computer could be tested
with every available software package. Also, no matter how
much testing is done, no program is totally bug free. You
use this program at your own risk. If you lose data or blow
your system it's your lose, even if Deceive is at fault. I
assume no responsibility other than the courtesy of a
sympathetic ear. Deceive attempts to outguess the way most
programs will operate and gives you some powerful and
perhaps deadly tools to fight with. With a program of this
type it is impossible to guarantee compatibility with all
other programs. Deceive works with most programs and is
totally incompatible with some. Thats the most you can
expect. I think it does a pretty good job. I hope you will
too.
------------------------------------------------------------
This disk copy provided as a service of
The Public (Software) Library
the software library of
The Houston Area League of PC Users
For a copy of the latest monthly software library newsletter
and a list of the 600+ disks in the library, call or write
The Public (Software) Library
P.O.Box 35705
Houston, TX 77235-5705
(713) 721-6104
Newsletter subscriptions are available for $12 a year.
------------------------------------------------------------
Deceive -10- Version 1.0

+141
View File
@@ -0,0 +1,141 @@
C O D E T H I E F D E L U X E
B y B r e w A s s o c i a t e s
A N O F F I C I A L P H O R T U N E 5 0 0 P R O D U C T
CODE THIEF REVISION 3.5 (DELUXE)
DETAILING NEW FEATURES SINCE CODE THIEF REVISION 3.0
INTRODUCTION
Welcome to the Deluxe edition of Code Thief. ÿThis is Code ÿThief
Revision ÿ3.5, ÿÿthe next logical upgrade from Code Thief ÿ3.0. ÿÿThis
documentation assumes that you have Code Thief 3.0 ÿand wish only to go
over ÿthe ÿnew ÿfeatures in Code Thief Deluxe 3.5. ÿIf Code ÿThief ÿis
TOTALLY ÿnew to you, ÿread THIEF35.DOC for more detailed information on
Code Thief.
UPGRADES TO HACK LONG DISTANCE SERVICES
After selecting the start and stop times, ÿand weather you wish to
quit ÿto ÿDOS after the specified stop time, ÿyou ÿare ÿpresented ÿwith
another screen before hacking. On this screen you will be asked if you
wish ÿto stop hacking after Code Thief finds a number of ÿvalid ÿcodes.
If you answer yes, ÿyou are prompted to enter the number of valid codes
to ÿstop after. ÿThen you are prompted as to weather Code Thief should
quit to DOS after finding this number of valid codes. If you have quit
to ÿDOS ÿfor both the TIME and the NUMBER OF CODES, ÿÿwhatever ÿhappens
first will cause Thief Deluxe to quit to DOS.
Now you are asked the number of seconds to pause between attempts.
This ÿis ÿa ÿfeature ÿto throw off the long ÿdistance ÿcarrier's ÿhack-
detection ÿsoftware. ÿÿIf ÿyou have a lot of flagged extenders PLUS ÿa
delay ÿtime ÿbetween ÿattempts, ÿit greatly decreases the LD ÿcompany's
software ÿfrom ÿdetecting ÿhacking. ÿÿIt is best to ÿhack ÿduring ÿthe
DAYTIME, and a delay will help guarantee that a valid customer calls in
and uses their code so ÿthat ÿyour hacks will be more spread apart. ÿA
lot ÿof ÿflagged ÿextenders ÿalso ÿdecreases the possibility ÿof ÿbeing
detected even MORE. ÿFace it, ÿmore people are being busted every day.
Use ÿCode ÿThief ÿDeluxe with all of the ÿCode ÿThief ÿcapabilities ÿto
greatly ÿheighten your safety. ÿNote that if you hit RETURN for ÿdelay
time, ÿÿCode Thief Deluxe will not pause between attempts (also if ÿyou
hit "0" <return> which is the same thing).
When Code Thief is DELAYING, you will be shown the countdown. ÿIf
you wish to stop the delay and just go on to the next attempt, ÿhit the
[SPACEBAR]. ÿÿHitting ÿESCape during the countdown will ÿquit ÿhacking
mode.
UPGRADES TO EDIT EXTENDER CONFIGURATIONS
Now ÿaccepted in the code template is [#] and [*]. ÿThis ÿis ÿfor
hacking PBX's that need these.
UPGRADES TO DELUXE EXCHANGE SCANNER
The ÿCode ÿThief ÿDeluxe exchange scanner is a ÿmultiple ÿexchange
full-screen exchange scanner. ÿAlso, you can now scan the 1-800 ÿarea.
When ÿyou hit [F] from the main menu, ÿyou are taken into the ÿexchange
editor. ÿIf no exchanges exist, a ÿdummy first record will be created.
Hit ÿ[R] to Replace the first record and enter the exchange, ÿÿstarting
number and ending number of the exchange. ÿNow, ÿyou can add exchanges
by ÿhitting ÿ[A], ÿÿdelete exchanges by hitting [D], ÿflag ÿand ÿunflag
exchanges by hitting [+] and [-] respectively, ÿas well as use the left
and ÿright arrow keys on the numeric keypad to move around in the file.
Also ÿnote ÿthat ÿyou ÿcan ÿenter the ÿexchange ÿrecord ÿnumber ÿto ÿgo
automatically ÿto ÿthat ÿexchange record, ÿjust like ÿin ÿthe ÿextender
configuration section. ÿThe [SPACEBAR] toggles weather the exchange is
in the 1-800 area or not.
If ÿyou ÿwish to not scan exchanges, ÿjust hit [Q] to quit to ÿthe
main menu. ÿBut to begin scanning exchanges, ÿjust hit [G] from ÿhere.
Note ÿthat ÿto scan, ÿÿat ÿleast one exchange must be flagged. ÿIf ÿno
exchanges are flagged Code Thief will tell you. You are also asked for
the modem timeout (in seconds).
During scanning, ÿif the ending number for an exchange is reached,
Code Thief will stop scanning that exchange by unflagging it. When all
of ÿthe ÿflagged ÿexchanges ÿbecome unflagged, ÿCode ÿThief ÿwill ÿquit
exchange scanning. Of course you can also quit by hitting ESCape, ÿand
the ÿlast number dialed in all exchanges will be saved in your exchange
configurations. ÿÿThen all you have to do is hit [F] then [G] from the
main menu to pick up from where you left off.
UPGRADES TO SET MODEM PARAMATERS/DEFAULTS;MODEM SPECIFICS
Hang ÿup mode has been changed. ÿCode Thief now NEEDS to drop DTR
to hang up, so set your modem DIP switches accordingly. The option has
been ÿreplaced ÿby ÿLOCAL DIALING. ÿIf you ÿonly ÿhave ÿpulse ÿdialing
services ÿ(not touchtone) ÿthen set this option to PULSE. ÿÿOtherwise,
TONE ÿis the default. ÿOf course when Code Thief DOES connect ÿto ÿthe
extender, TONE will be used for the remainder of the hack. This should
go without saying.
MODEM INPUT/OUTPUT WINDOWS
All ÿI/O to the modem is now monitored. ÿAlso, ÿCode Thief Deluxe
should work with more modems. ÿDuring hacking or scanning you will see
the ÿI/O ÿwindows, ÿalong with a timer on the top of the screen. ÿÿThe
first ÿwindow is INPUT from the modem, ÿthe second window is OUTPUT ÿto
the modem. ÿCode Thief will now re-send commands if errors occur, ÿtry
commands ÿagain if they elicit no response, ÿrecover from ÿmodem ÿscrew
ups, ÿand generally be more well behaved. For instance, ATX4 ÿis right
as a user string for my COM3: ÿmodem, but creates an ERROR for my COM2:
modem. ÿIf I use a user string of ATX4 for my COM2: modem, ÿCode Thief
will recognize it and keep sending ATX4 ÿa ÿnumber of times to my COM2:
modem. Of course it keeps getting errors. ÿThen after about 5 retries
Code ÿThief ÿwill ÿabort ÿhacking. ÿÿNow ÿI ÿcan ÿlook ÿat ÿthe ÿmodem
configuration and say to myself: ÿAh! ÿI ÿneed to get rid of this user
string. ÿAlso note that when waiting for a carrier if no modem ÿresult
code ÿis ÿreceived in the time specified as TIMEOUT for ÿyour ÿextender
(can be edited using the extender editor) ÿCode Thief Deluxe will ÿknow
and move on. ÿCode Thief Deluxe uses your PC's clock to keep track ÿof
seconds that have elapsed.
MULTIPLE TARGET CONVERSION UTILITIES / TYMFIX.COM
Consult ÿÿCONVERT.DOC, ÿÿwhich ÿhas ÿbeen ÿupdated ÿand ÿÿincludes
information on TYMFIX.COM and its use. Convert version 2.0 is included
in your Code Thief Deluxe ZIPfile.
SUMMARY
Well, ÿthat's about it for the new features in Code Thief ÿDeluxe.
The major changes have been incorporated in the modem I/O which took ÿa
bit ÿof programming, ÿbut are easy to document on paper. ÿAlso, ÿÿCode
Thief ÿhas grown quite complex for a hacker type program. ÿIn creating
Code ÿThief I have attempted to take most of the popular features ÿfrom
other ÿCode ÿHackers, ÿÿwhatever language they were ÿwritten ÿin, ÿÿand
incorporate them ÿinto ÿthe "wish-list" ÿfor Code Thief and Code ÿThief
Deluxe. ÿÿI ÿÿwould ÿalso like to thank the many ÿpeople ÿwho ÿoffered
suggestions as to additions and modifications.
If you are just getting Code Thief Deluxe when it's new, upload it
everywhere so people can move on up to Code Thief Deluxe Revision ÿ3.5.
Besides, ÿÿit ÿwill get you upload points and a ÿbetter ÿupload ÿratio.
Everyone benefits.
CODE THIEF DELUXE
CODE THIEF REVISION 3.5 DOCUMENTATION
WRITTEN BY BREW ASSOCIATES / AUTHOR: CODE THIEF DELUXE v3.5
+224
View File
@@ -0,0 +1,224 @@
ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸
³ °±²±° (D)elam's (E)lite (P)assword (L)eecher °±²±° ³
³ 05/18/91 ³
³ Conceptualized, Written and compiled by: ³
³ * -=<[> [)r. [)elam <]>=- * ³
³ Version 1.00 ³
³ (c) 1991 no rights reserved because I don't care! ³
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;
Special reguards to Dream Pilot who actually wrote the first
password leecher on my request. A copy of his program is
included for educational reasons, but unfortunately there is
no decoder publically available for it.
please note that my program and his are two totally separate
programs both written from scratch.
DEPL is dedicated to hackers all over the world in an effort
to enhance the common goals of all hackers.
The files included:
DP.EXE Dream Pilot's Shell
DEPL.COM Dr. Delam's Shell
INSTALL.EXE Program to install the shell
SCRAPE.EXE Program to scrape up capture file
DEKODER.EXE Program to decode capture file
GAME1.EXE Program 1 to cover up what yer doing
GAME2.EXE Program 2 to cover up what yer doing
INFO.BIN Text configuration file
>> What is DEPL?
DEPL is the most sophisticated, yet simple to use method of
stealing passwords, reading private messages, and finding out
how others do things that you shouldn't know how to do!
>> So how does it work?
To begin discussing how it works, we need to look at what
each of the files provided in this package are for.
DEPL.COM:
DEPL.COM is the main program which all others revolve around.
DEPL.COM is a shell, and a shell being a program which runs
another program from within itself. To start simple we'll
give an example with DEPL's predicessor DP.EXE.
How DP.EXE has been used:
I want to scrape up passwords that my friend (or foe) types
in while he's online with his TELIX term program... so what I
do is, when he's not around, rename his TELIX.EXE program to
some other name, and rename DP.EXE to TELIX.EXE so when
he/she runs what they think is TELIX, they are actually
running the shell. Now how does TELIX get run? Whatever you
named it has to be known to the shell. In the case of Dream
Pilot's program, DP.EXE will always look to run a program
called TRIP.EXE.. this means you must rename TELIX.EXE to
TRIP.EXE.
The chain of events so far:
Friend runs TELIX.EXE (actually DP.EXE).
In turn TELIX.EXE runs TRIP.EXE (actually TELIX.EXE).
So what's going on now that were running TRIP.EXE through
TELIX.EXE? Every keystroke is being recorded!! DP.EXE will
create files named by date, containing all the keystrokes,
encrypted. The capture files are hidden in a directory
called OVERLAYS.DOS within the DOS directory. The files are
hidden remember! So what you need next is a decryptor and a
way to sneak into, and get on your friend's computer to
scrape up all the files so you can go back to your hovel and
decrypt them to see what your friend has been typing.
With DEPL I have eased the whole process in a couple ways.
For one, instead of having to sneak onto your friends
computer at the risk of being caught, I provided
INSTALL.EXE, and SCRAPER.EXE.
INSTALL.EXE:
On the surface, INSTALL.EXE appears to be a game, but
in actuality it will set up the shell doing all the necessary
actions that you would have had to do to install it yourself!
And the best part about it is you can run it right in front
of your friend! He'll just think it's a game.
SCRAPER.EXE:
Again, on the surface SCRAPER.EXE appears to be a game (or
actually anything you want it to be.. discussed in a bit).
SCRAPER.EXE takes care of gathering the encrypted capture
file by moving it to your disk, and off of his. It also has
a feature, where by changing a setting, you can restore your
friend's program and remove the shell all in one go!.. great
if he's started to get suspicious.
Note: make sure that the capture file you are scraping off your
friend's drive is not on your disk.. this causes a confict when
copying. So after scraping, and before dekoding, its a good
idea to rename the capture file.
DEKODER.EXE:
This one practically describes itself.. it will decode the
captured file for reading (to be done in the sanctity of your
own cyber space).
GAME1.EXE and GAME2.EXE:
GAME1.EXE is run by INSTALL.EXE when it has finished, and
GAME2.EXE is run by DEKODER.EXE when it has finished.
Neither of these has to be used, and they may be a game or
any other executable program.
INFO.BIN:
Ahhh, finally, the info bin!
Within the info bin is contained all the information needed
to make DEPL a working system. An example INFO.BIN contents
could be:
NEWFILE C:\DOS\VSIZE.EXE
OLDFILE C:\TELIX\TELIX.EXE
CAPFILE C:\TELIX\SWITCH.OVL
GAMEONE GAME1.EXE
GAMETWO GAME2.EXE
CODEKEY 0
TAKEALL
Here's a brief description of what DEPL would do with these
settings:
| Copies TELIX.EXE into the DOS directory calling it
VSIZE.EXE.
| Copies DEPL.COM into TELIX directory calling it TELIX.EXE.
| Makes the capture file's name SWITCH.OVL there by all
captures save into C:\TELIX\SWITCH.OVL. (encrypted)
| Sets INSTALL.EXE's child process to be GAME1.EXE.
| Sets SCRAPER.EXE's child process to be GAME2.EXE.
| Encrypts under code 0 (feature not installed yet.. it'll
be in the next version).
| Causes scraper, when run, to remove the shell and set
things to the way they were.
GAMEONE, GAMETWO, and TAKEALL are optional keywords. The
rest are not!
When creating your custom INFO.BIN remember to use a space
after the keywords listed above.
And finally the one file not mentioned previously:
ERROR.LOG:
This is where all problems and things that may have gone
wrong are stored. Bummer eh? Well unfortunately you
wouldn't want an error to pop up on your screen while you
were running your <ahem> "GAME" in front of your friend, so I
provided this to you so you could tell what the hell went
wrong.
>> Final Comments:
Don't forget to rename INSTALL.EXE and SCRAPER.EXE to suitable
names that have something to do with the programs they spawn.
The program has many possibilities for use. With some
simple modifications, it could be made to not only record key-
strokes, but play them back as well. For those out to swipe and
infect all at once, DEPL.COM could easily be a carrier. If you
have multiple users at home, you can have their passwords as well.
The possibilities are endless.
If you haven't understood any of the above, please exit
whatever program you are using to look at this and type
FORMAT C: /AUTOTEST ..this will set up my utilities for you
and you need not do anything from then on. :)
If English is a second language to you, please rewrite this
in your native language so it can be used and understood
throughout the world. Send a copy of the documentation, your
name, and address to me and I will send you the source codes!
Seriously!
Hey's & Ho's (Ho's?.. <raised eyebrow>):
To:
Dream Pilot - Well whatta you think? We should be able
to have some real fun with this one.
Hahahaha, well, put this one up on the board,
Dragonwar should enjoy this one. Take care.
Knight Lighting - Hey, I know you don't have IBM but if
someone would be so nice as to show you..
"Hey look what I wrote!"
Flash Force - Y0! Keep up the good work over there at
RABID! We need more! Have to discuss some
new stuff soon...
Ollie Disaster - "Tooka Tooka, mbuaaaa mbuaaa!" hahahah..
we gotta hit those skate ramps again soon.
Mr. Ceptic - How bout a case of Bud for your Amiga?
Cycle Man - Smack Barbarian around would ya and have
him send me that MNP 6?
Soup Dragon - Don't know who the hell you are, but you
got Cycle Man in enough trouble.
Look for more Delamo Inc. products to emerge soon!!
--- Dr. Delam ---
5060 76th Ave. N. #304
Pinellas Park, FL
U.S.A.

+237
View File
@@ -0,0 +1,237 @@
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ DFMAKE v1.0 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ (c) 1994 by DIGITAL UNDERGROUND ³
³Programmed by Alessandro 'BLOB' Job³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Introduction ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DFMAKE is a small utility for joining a number of files in a unique
BIG file,and giving access to each of the old little files contained
in it.
This is PUBLIC DOMAIN.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Disclaimer ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ
DIGITAL UNDERGROUND & Alessandro Job makes no warranty of any kind,
either express or implied,including but not limited to implied
warranties of merchantability and fitness for a particular purpose,
with respect to this software and accompanying documentation.
IN NO EVENT SHALL DIGITAL UNDERGROUND & Alessandro Job BE LIABLE FOR
ANY DAMAGES RESULTING FROM THE USE OF THIS SOFTWARE, INCLUDING BUT NOT
LIMITED TO, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
LOSS OF BUSINESS INFORMATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, OR
OTHER FINANCIAL LOSS ARISING OUT OF THE USE OF OR INABILITY TO USE THIS
PROGRAM , EVEN IF DIGITAL UNDERGROUN & Alessandro Job HAS BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES.
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Usage ³
ÀÄÄÄÄÄÄÄÙ
DFMAKE builds a datafile library from a list of files you pass to it
with the -fFILELIST command line option (where FILELIST is the name of
the text file where your files ar listed).
The name of the datafile library must be the first argument of DFMAKE.
The format of the text file is very simple: you need only to write the
name of the files divided by a CR,a space or a comma.If the files you
need are not in the current dir,you must specify them with the full
path name.
Filenames in library are case sensitive.
Usage: DFMAKE [library name] [-command[commandoption]]
This are the commands you can use:
-?,-h : show the help.
-fFILELIST : this is the text file with the list of files you have
to insert in the new library file.
Use this option only when you want to create a library
file from scratch.
-aFILENAME : add file FILENAME to the top of the library.If the
file is not in the current dir give full pathname.
-dFILENAME : delete file FILENAME from the library.
-xFILENAME : extract file FILENAME from the library to the current
dir.If FILENAME = *,extract all files in library.
-rOLDFILENAME NEWFILENAME : rename the file OLDFILENAME,contained
in the library,in NEWFILENAME.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Developement ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Some routines to access a datafile library are supplyed.They are not
very optimized,but they are only examples.All the functions use the
PMC library functions for PMODE by Thomas Pytel.
FUNCTIONS SUPPLYED:
Name:
WORD __cdecl df_open(STR filename);
Usage:
opens the 'filename' datafile library.
In: filename = full name of the datafile.
Out:WORD = file handle if datafile opened
else NULL.
Name:
void __cdecl df_close(WORD df_handle);
Usage:
closes a previously opened datafile.
In: df_handle = datafile file handle.
Name:
DATAFILE * __cdecl df_getinfos(WORD df_handle);
Usage:
get all the infos to access the files in the datafile.
In: df_handle = file handle returned by df_open();
Out:DATAFILE * = a pointer to a list of DATAFILE structs
containing all the infos.
NULL if an error occurred.
Name:
void __cdecl df_delinfos(DATAFILE *datafileinfo);
Usage:
frees the memory allocated by df_getinfos().Use this function
only when you want to have no more access to the datafile.
In: datafileinfo= a pointer to the list of DATAFILE structs
returned by df_getinfos().
Name:
PTR __cdecl df_read(WORD df_handle,DATAFILE *datafileinfo, \
STR name,PTR buffer);
Usage:
reads in memory a file contained in the datafile.
In: df_handle = the file handle of the datafile.
datafileinfo= the pointer returned by df_getinfos().
name = the name of the file to be loaded.
buffer = a pointer to a pre-allocated buffer of the
size of the file to be loaded,or NULL if
allocation must be done by function.
Out:PTR = the pointer to the memory containing the
loaded file,or NULL if error.
DATA STRUCTURES:
struct datafile {
BYTE name[13]; // name of the file
DWORD offset; // positive offset from the file's end
DWORD length; // lenght in bytes of the file
struct datafile *next; // next file info structure or NULL
};
typedef struct datafile DATAFILE;
This is the structure used to store the infos for every file in
the datafile.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ DATAFILE library format ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
This is the format of a datafile file made by DFMAKE.
All offsets are positive offsets from the end of the datafile.
File START->ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ First file ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Second file ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ... ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Nth file ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
NFILES----->³ 2 BYTES ³
³ Number of files in lib³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 21 BYTES ³
³ First file header ³
³ ³
³ 13 BYTES: file name ³
³ 4 BYTES: offset from ³
³ end of file ³
³ 4 BYTES: file lenght ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Second file header ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Nth file header ³
³ ... ³
³ ... ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 4 BYTES ³
³ NFILES offset from end³
³ of file ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 4 BYTES ³
³ "DATA" signature ³
File END--->ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Acknowledgements ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
This piece of code uses the great PMODE handler and PMC interface and
library by Thomas 'TRAN' Pytel.
I want to thank him for this fantastic stuff. Thank you.
ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ Greetings ³
ÀÄÄÄÄÄÄÄÄÄÄÄÙ
Greetings to all the demo-coders,utility-coders & coders all around
the globe.
ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ INFOS ³
ÀÄÄÄÄÄÄÄÙ
This code is PUBLIC DOMAIN,but if you find it usefull and you use it
in some productions,please,credit me.(This is CREDIT-WARE !! 8-} )
You can also contact me if you have suggestions,comments,flames,etc.
at this addresses:
Internet: S0IOB@uduniv.cc.uniud.it (i'm not here very otfen)
S-MAIL: Alessandro Job
via Peresson ,12
33020 - Piano d'Arta (UD)
ITALY
+181
View File
@@ -0,0 +1,181 @@
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Û
ßßßßßßßÛ Ûßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
Û Û ÜÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Û Û Û Û Û Û Û
Û Û Û ÛÜÜÜÛ Û Û Ûßßßßßßßß
Û Û Û Û Û Û
Û Û Û Û Û Û
Û Û Û ÛßßßÛ Û Û ÛÜÜÜÜÜÜÜÜ
Û Û Û Û Û Û Û Û
ßßßßßß ßßßßß ßßßßß ßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û The Hacker's Choice Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
***** ***** *** ** ** **
** *** ** ** ** ** ** **
** ** ** ** ** ** ** **
** ** ** ** **** ** **
** ** ** ** **** ** **
** *** ** ** ** ** *****
***** ***** *** ** ****
DIC-GEN 1.0á
!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!
This file is for informational purpose only!
The Sysop-Team is NOT RESPONSIBLE for anything you do after reading this text!
!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!! REMEMBER !!
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ[Sysop : van Hauser]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ³
³ Ü Ü Ü Ü ³
³ ÜÛ ÜÛÛßþßÛÛÜ ÜÛßßÛÛÜ ÜÛßßÛÛÜ ³
³ ²ÛÝ Þ²ÛÝ ÞÛ°Ý ²ÛÝ ÛÛÝ ²ÛÝÜ ßß ³
³ ±ÛÝ Û±Û Û±Û ±Û ßÛÜß ±ÛÝßÛÛÜ ³
³ Þ°ÛÝþÜ Þ°ÛÝ ÞÛ²ÝÞ°ÛÝ ÜÛ² Þ°ÛÝ ß ³
³ ßÛß ßÛÛÜ ßÛÛÜþÜÛÛß ßÛß ÞÛÛß ßÛß ßÛÛÜ ³
³ ß ß ß ß ß ³
³ ³
³ 3000 H/P/A/V/C/M Files ³
³ Biggest Hpavcm Board In Germany ³
³ BIG Message Base ! ³
³ Experts Only! Lamer Protection! ³
³ ³
³ ÚÄ[ ++49-69-823282 ]Ä¿ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ NUP : <ask4it!> ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÀÄ[ ++49-69-PRIVAT ]ÄÙ
!!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!!
Dieses File dient nur zur Information und Aufklaerung!
Die Sysops erklaeren sich NICHT VERANTWORTLICH
fr Rechtsverstoesse, die durch diese Informationen entstehen.
!!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!! ACHTUNG !!!
H/P/A/V/M/C/I/D/P/!/L/F/O/!
--------------------------------------------------------------------------------
.Introduction
DIC-GEN is a dictionary generator for the use of Password Guessing Programs.
Easy to use, fast to build the dictionaries.
.What does DIC-GEN
DIC-GEN is a dictionary creator with 2 different modes.
The GUESSING or also called SENSITIVE MODE fills up '?' in a given word with
Characters of a Charset. So if the word is 'Tes?' and the Charset is all
lowcase characters, an OutputFile with 29 possiblities is created. From 'Tesa'
to 'Tesz' plus 'Tes' and 'Tes?', cause also the possibility of leaving the
search character away and that it may really be the `?` char is assumed.
The BRUTE FORCE MODE just generates every possiblity of the Charset from the
specified FROM and TO Word Length. So if From:1 To:2 and Charset:Upcase+Lowcase
everything is created : A,B...Z,a,b...z,AA,AB..AZ,Aa,Ab...zz etc.
The output is one word per line with carraige return and linefeed at the end.
.The Commandline Options
To get a onlinehelp, just type dic-gen, or dic-gen -?, or DIC-GEN ? and so on.
Syntax : DIC-GEN.EXE <OutputFile> <CharSet>
Options : [Variable] [-Fx] [-Tx]
Parameters :
<OutputFile> The file to write the generated words to
<CharSet> The Character Set to generate the words with. You use the
following : A Upcase letters (Ascii 64 to 90)
a Lowcase letters (Ascii 97 to 122)
1 Numbers (Ascii 48 to 57)
$ Extendes Characters like !"$-. (many ;-)
^ Control Character (Ascii Chars 1 to 26)
in any combination or just the word ALL to generate with the
WHOLE ascii set from 1 to 255 !
Examples : 1Aa A ^$a aLl
Optional Parameters :
<Variable> If only 3 Parameters a specified, it's automatically the
GUESSING or SENSITIVE Mode. For any '?' you put into this
variable, it will be substituted with the Charset specified
AND left out AND with the '?' as Character.
Examples : Pa??wor? Tes? Illumi?ati M???
-Fx If 4 Parameters a specified it's automatically the
BRUTE FORCE MODE. You must specify both, the -F(rom)
and -T(o) Parameter for the word length.
Valid Numbers are 1 to 12
-Tx Examples : -F1 -T8 -T4 -F4
Options mentioned with the `-` sign : you may also use a `/` ...
Examples : (all these examples are valid!)
DIC-GEN test.txt a Pa??wor? (would be a 215 KB File)
DIC-GEN numbers.dic 1 -F1 -T4 (would be a 65 KB file)
DIC-GEN lowbrute.dic a -F1 -T4 (would be a 2.3 MB file)
DIC-GEN lowbrute.5 a -F5 -T5 (would be a 80 MB file !!!)
IMPORTANT : If you specify a big range with many possiblities in the Charset
the outputfile gets easy many 100 MBs big in size !
Never ever create a file with more then 7 characters in Brute Force
Mode until you have at least 10 GIG space left ...
.Conclusion
That's something to help you. Get this and be happy with it.
.famous words
You can you defeat your foes if you don't know who they are?
.some infos
Did you encounter Bugs, have questions or want/give the/a sourcecode?
To contact, call L.O.R.E. BBS or email to vh@campus.de
++49-69-823282 login:THC pw:THC
You want the New User Password of L.O.R.E. BBS? Ask c00l hackers & phreakers!
Remember, we've got H/P/A/V/M/C/I/P/!/L/F/O/! stuff, which means
Hacking, Phreaking, Anarchy, Virii, Magazines, Cryptology, Internet,
Professionals and ! LAMERS FUCK OFF !
.Greetings
The whole internet society except the goverment of all states.
All the users on my bbs ;-)
.History
Version 1.0á released 10 October 95
1st public release
.Future
If there is the demand for it i'll put in these options :
- Unix Output Format
- (Birthday) Date Generator
- Calculates the harddisk space needed before beginning to write the file ;)
- Leave away critical characters like ^Z which is the end of a File in Text
Mode, or ^M and ^J ...
- Specify an other Character for the Sensitive/Guessing Option then the '?'
- Amiga Version, ST Version ...
So tell me if ya want these features, or if you want any others ...
Have PHUN!
Ciao... van Hauser

+239
View File
@@ -0,0 +1,239 @@
ÚÄÄÄÄÄÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄÄÄ¿ ÚÄÄÄÄÄ¿ ÚÄ¿ ÚÄ¿ ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄ¿
À¿ ÚÄ¿ ³ ³ ³ ³ ³ ³ ³ À¿ ÚÙ ³ ÚÄÄÄÙ ³ ³ ³ ³ ³ ÚÄÄÄÙ ³ ÚÄÄ¿ ³
³ ³ ³ ³ ³ ³ À¿À¿ ÚÙÚÙ ³ ³ ³ ÀÄ¿ ³ ³ÚÄ¿³ ³ ³ ÀÄ¿ ³ ÀÄÄÙ ³
³ ³ ³ ³ ³ ³ À¿À¿ÚÙÚÙ ³ ³ ³ ÚÄÙ ³ ³³ ³³ ³ ³ ÚÄÙ ³ ÚÄ¿ ÚÙ
ÚÙ ÀÄÙ ³ ³ ÀÄÄ¿ À¿ÀÙÚÙ ÚÙ À¿ ³ ÀÄÄÄ¿ ³ ÀÙ ÀÙ ³ ³ ÀÄÄÄ¿ ³ ³ ³ À¿
ÀÄÄÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÙ ÀÄÄÄÙ ÀÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÙ ÀÄÙ ÀÄÄÙ
Version 3.1
The DL Animation Viewer
Operation Manual
COPYRIGHT (C) 1990-1994 by
Davide Tome' & Luca De Gregorio
All Rights are Reserved
DL-Soft c/o Galactica System
Via Turati, 40
20121 Milano, ITALY
Page 1
INDEX
Topic Page
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
PREFACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
GENERAL FEATURES . . . . . . . . . . . . . . . . . . . . . . . . . . 2
MENU MODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
SINGLE FILE MODE . . . . . . . . . . . . . . . . . . . . . . . . . . 2
MENU FEATURES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
COMMANDS WHILE VIEWING . . . . . . . . . . . . . . . . . . . . . . . 2
DELETING A FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
CONVERTING A FILE . . . . . . . . . . . . . . . . . . . . . . . . . . 3
SOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
KEY SYSTEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
PASSWORDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
DL VIEWER CONDITIONS AND TERMS . . . . . . . . . . . . . . . . . . . 4
DISCLAIMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
PREFACE
This document is Copyrighted by Davide Tome' & Luca De Gregorio.
All rights are reserved. The DL file format is exclusive property of
Davide Tome' & Luca De Gregorio.
Last release of DL VIEWER will be always freely avaiable on the
following bulletting board systems :
Galactica BBS (Sysop : Davide Tome')
Phone: +39-2-29006058 Fax : +39-2-29006153
Internet e-mail : dl-soft@galactica.it
Inferno BBS (Sysop : Luca De Gregorio)
Phone: +39-2-26221453 Fax : +39-2-26224663
The DL format (Davide Luca) is property of Davide Tome' & Luca De Gregorio
^ ^
-------------------------------------------------------------
We'll try to keep this documentation brief but informative.
First to run DL VIEWER you MUST have a VGA card. Also it is best
if your PC has XMS memory and the handle parameter set to 128,
otherwhise you may not be able to view some of the larger .DL files.
IMPORTANT: DL VIEWER requires DOS 5.0 to work correctly.
Page 2
GENERAL FEATURES - DL VIEWER is a very easy to use but powerful DL file
viewer and converter. It shows animations in VGA 320x200x256 video
mode on every display adapter cards that support standard VGA mode.
MENU MODE - This is the default mode when you just enter DL VIEWER from
the DOS command line. It lists all viewable files in a 4 column menu with
easy to use controls to allow you to show animation the way you want to
see them, including a slide mode. See Menu Features.
SINGLE FILE MODE - This mode has advanced features which make it
attractive for application programs which wants to display an animation.
You can shell to DL VIEWER with a filename to display an animation !
DL VIEWER will not return to your program but remain in MENU MODE waiting
for an ESC to be pressed IF you're using the shareware version.
MENU FEATURES:
- Handles up to 250 files using the keyboard.
- Gives 4 column menu of DL files.
- Arrow keys, PgUp/PgDn, Home/End move thru menu.
- Shows animation file at cursor or tagged animations with [ENTER].
- Mark/unmark files for viewing with [SPACEBAR].
- [F1] gives help.
- [F2] Toggle sound modes (SPEAKER/SOUNDBLASTER/NONE).
- [F3] Prompts for a new drive.
- [F4] Toggle language (ITALIAN/ENGLISH).
- [F6] Menu text color configuration.
- [F9] Toggle file info display.
- [F10] shell to DOS.
- [DEL] if you want to delete the file at the cursor.
- [+ - * /] to change default animation speed.
- [ESC] to quit.
COMMANDS WHILE VIEWING - The following commands (shown in brackets) are
available any time the animation is on the screen.
- [-],[+],[*],[/] respectively to DECREASE, INCREASE, MAXIMIZE and
MINIMIZE animation speed.
- [ENTER] or [SPACEBAR] shows next animation in the tagged list
(if any else return to the menu).
- [ESC] returns to the menu.
- [F2] to toggle sound ON-OFF.
- [F10] Shell to DOS.
Page 3
DELETING A FILE. To delete a DL file without exiting to DOS you
can press DEL when this file is at the cursor.
The file won't be really deleted but just renamed to .BAK.
You can later delete *.BAK from you DOS Prompt or rename one
or more files back to .DL to restore them.
CONVERTING A FILE. DL VIEWER automatically converts old 2.0 DL
file format into the new 3.0. It will NOT convert from 1.0, so
if you still have these old animations please use DL-1TO2.EXE.
SOUND. With the 3.0 DL file format you can have music and sound
into a DL animation file. To hear it you can use your SOUNDBLASTER
if you have one or your poor SPEAKER. You can select your sound
device pressing [F2] in menu mode.
Using the SPEAKER might slow down your system if you're using a 286.
For now we're just supporting the default address 220H for the
SOUNDBLASTER card. There might be some problems if you're using
an old card version (before 2.0).
KEY SYSTEM. Some animations can be KEY PROTECTED from their author.
To view them you need to purcase their KEY. Usually you'll find
a registration form within the archive file containing the animation.
We give no warranty about these KEYs since they are created from
the DL MAKER users.
PASSWORDS. Some animation can be PASSWORD PROTECTED from their
author. Usually the PASSWORD is free and you can find it on some
Boards or from the author.
Page 4
DL VIEWER CONDITIONS AND TERMS
DL VIEWER is not free software. If you paid a "public domain" vendor
for this program, you paid for the copy and mailing service only, and
not for the program itself. Nothing ever gets to the author of the
program from such a sale.
DL VIEWER is copyrighted software, and all rights are reserved.
The program may not be changed or modified in any way except by the
author. It is SHAREWARE, and may be freely distributed, as long as it
remains in its complete form with all support and documentation.
This program allows a 15 days free trial period, but if you continue
to use it after that time, you must register your copy or you will be
in violation of the copyright. Registering you will receive the
registration package with the leatest version on it and a registration
key which removes the ending screen of the current and all future
versions. DL VIEWER is continually updated, so look for the newest
revision in our authorized distribution sites.
DISCLAIMER
All warranties are disclaimed, including damage to hardware and/or
software from use of this product. In no event will we be liable to you
for any damages, including lost profits, lost savings or other
incidental or consequential damages arising out of your use or inability
to use the program, or any other claim by any other party.
Note that DL VIEWER is a stand alone program, and not associated
with a particular group of animations or pictures.
+270
View File
@@ -0,0 +1,270 @@
DLOCK.TXT -- DOCUMENTATION FOR DLOCK.EXE AND ITS SOURCE FILES
INTRODUCTION
DLOCK is a Data LOCK program that uses the Diamond encryption algorithm. It
also tests the correct implementation of the Diamond and Diamond Lite
encryption algorithms in the enclosed library files.
Although DLOCK is useful as it stands, it is probably of more use as a
library of source code to use to build encryption into other applications.
Diamond and Diamond Lite are 100% roylty free algorithms, derived from the
MPJ and MPJ2 encryption algorithms.
I've studied too much cryptography to make a brash claim of security for any
algorithm, but my confidence level in Diamond and Diamond Lite is very high
because of the failure of anyone I've dared to break MPJ to do so for several
years. See the challenge section below.
When used to encrypt or decrypt files, DLOCK places no special headers or
other identification on the ciphertext files. This is good for security, but
bad for user friendliness. It always processes from one file to another, so
that you can verify that the encryption or decryption is good before deleting
the original. This is very important, since a single character typo in the
pass phrase is enough to render a file total garbage.
LEGAL NOTICES
Documentation files, executable files, and source code files not marked
otherwise are Copyright (C) 1994 Michael Paul Johnson. All rights reserved.
There is NO WARRANTY expressed or implied for any of this. Diamond and
Diamond Lite are Trade Marks of Michael Paul Johnson. Other trade marks
mentioned herein belong to their owners and are mentioned for identification
purposes only.
Some cryptographic, cryptanalytic, and key management software and technical
data is subject to export controls and other legal restrictions. Contact
competent legal authority for more information. It is your responsibility to
comply with all currently valid laws and treaties that apply to you. Do not
use this software or technical data for any illegal activity.
As far as is permitted by law, permission is hereby granted to copy and use
the copyrighted portions of this distribution for any legal use, provided
that the documentation is kept unmodified and the software is used in
accordance with the GNU Library General Public License as published by the
Free Software Foundation, version 2.
CRC.H, CRC.CPP, DIAMOND.H, and DIAMOND.CPP are in the Public Domain.
SYSTEM REQUIREMENTS
Two compiled versions are included in this distribution: MS-DOS executable
and Sun SparcStation binary. If you wish to use this program on another
platform, you may recompile the provided source code for that platform.
COMMAND LINE SYNTAX
To test Diamond and Diamond Lite against the validation data in DIAMOND.DAT:
DLOCK /T
To encrypt a file:
DLOCK /E [/S] infilename outfilename [/Ppass phrase | /Kkeyfile]
/E = Encrypt.
/S = Silent mode (minimal screen output).
/P = Pass phrase follows on the command line. The pass phrase is case
sensitive, and every character counts. Embedded spaces are OK. /P, if used,
MUST be the lase command line parameter, since all characters after it are
considered to be part of the passphrase.
/K = Get the pass phrase from the file name provided. The passphrase in a
key file may include ANY binary data, up to 256 bytes.
Note that if /P or /K is not used, then DLOCK looks for the passphrase in the
environment variable DLOCK_KEY. If no passphrase is found there, then DLOCK
will prompt you to enter the passphrase at the keyboard. Spaces and other
special characters are allowed in the passphrase.
For example,
DLOCK /E MARCH.WK1 MARCH.ENC /PNone of YoUr BuSiness! Really!
encrypts MARCH.WK1 with the passphrase "None of YoUr BuSiness! Really!",
placing the results in MARCH.ENC. If you wish to get rid of the plain text
version, use another utility to overwrite and delete the original.
To decrypt a file:
DLOCK /D [/S] infilename outfilename [/Ppass phrase | /Kkeyfile]
Switches used here are the same as for encryption, except that the /D (for
Decrypt) replaces /E.
For example,
DLOCK /D MARCH.ENC MARCH.WK1 /PNone of YoUr BuSiness! Really!
decrypts the file encrypted above.
Command line switches are not case sensitive, and may start with - or /.
There should be a space or tab between adjacent switches. Except for /P,
which must be last, the switches may occur in any order (before, between, or
after the file names).
HOW DLOCK WORKS
When encrypting or decrypting files, DLOCK uses a 10-round Diamond block
cipher in cipher block chaining with ciphertext feedback mode (CBC). This
means that any regularities in the plain text are completely obscured in the
cipher text. The original file length is exactly preserved. See the source
code and the accompanying documents for details.
ADVANTAGES OF DLOCK
1. To the best of my knowledge, no one has broken Diamond (or its
predecessors, MPJ and MPJ2), yet. See the US$271.82 challenge, below.
2. The block chaining mode is time-tested and well respected.
3. Complete source code is included for your examination and to facilitate
porting to other platforms.
4. The cipher text is the same size as the plain text.
5. It is free.
6. You are free to use the algorithms and/or code in this distribution to
incorporate encryption into your own applications, without payment of
royalties or delays.
7. Diamond and Diamond Lite, when incorporated into a system that weakens
the effective key length and resists modification by the user to the
satisfaction of the NSA, may be exportable. Contact the Department of State
and the NSA for details and additional requirements.
8. DLOCK allows easy validation of implementations of Diamond and Diamond
Lite.
9. If you don't like the way DLOCK works and you can program in C or C++,
you can fix it to your liking.
10. The author is easy to contact via email (m.p.johnson@ieee.org).
11. The encryption is too strong to be generally exportable. There are no
intentional weaknesses or trap doors in the algorithm or the program.
12. Identical files, encrypted with identical keys, always yield identical
ciphertext. This is good for validating algorithms.
DISADVANTAGES OF DLOCK
1. Key management is all manual.
2. Encryption of multiple files is cumbersome unless you use an archiving
utility (like PKZIP, LHA, ARJ, etc.) first.
3. No one is getting rich on your purchase of this product, so it doesn't
help the economy, much.
4. The ciphertext reveals the size of the plain text (but not its contents).
5. Identical files, encrypted with identical keys, always yield identical
ciphertext. This is bad for resistance to traffic analysis.
6. No 7-bit ASCII armoring (uuencoding or radix-64 encoding) is built in for
EMAIL purposes -- use another utility to do that.
7. The encryption is too strong to be exportable without a lot of hassles
and controls on the destinations.
8. If you forget your passphrase, your encrypted data is as good as gone. I
can't get it back, no matter how important it was.
DATA COMPRESSION
DLOCK doesn't compress data, but if you compress your data before encrypting
it (i.e. with PKZIP, ARJ, etc.), you will decrease the size of the ciphertext
and improve security. Attempted compression after encryption does neither.
RECOMPILING DLOCK
You don't really need to recompile DLOCK unless you want to modify it or port
it to another platform. I compiled DLOCK.EXE with Borland C++ 4.0, using the
commands in MAKDLOCK.BAT. This batch file also applies PKLITE compression,
but that is optional. I compiled the Unix version of DLOCK on a Netcom
interactive host machine with the command:
c++ -DUNIX -o dlock dlock.c diamond.c crc.c
VERIFYING THAT YOUR VERSION HASN'T BEEN TAMPERED WITH
If you have PGP, you can check my detached signatures on the files in this
distribution with the file VALIDATE.BAT, which should look like:
pgp challeng.sig challeng.enc
pgp copying.sig copying.txt
pgp crc_cpp.sig crc.cpp
pgp crc_h.sig crc.h
pgp def.sig def.h
pgp diamondc.sig diamond.cpp
pgp diamondd.sig diamond.dat
pgp diamondh.sig diamond.h
pgp diamondp.sig diamond.ps
pgp diamondt.sig diamond.txt
pgp dlocksun.sig dlock
pgp dlockcpp.sig dlock.cpp
pgp dlockexe.sig dlock.exe
pgp dlocktxt.sig dlock.txt
pgp makdlock.sig makdlock.bat
pgp thesis.sig thesis.txt
If you don't have a copy of PGP, you can buy a copy from Viacrypt or get the
freeware version from numerous sites, including the Colorado Catacombs BBS
(303-938-9654) or ftp, see ftp:csn.org//mpj/README.MPJ.
THE US$271.82 CHALLENGE
OK, US$271.82 is not enough to pay for the time it would take to do serious
cryptanalysis of the Diamond Encryption Algorithm, but it is enough to prove
that data encrypted with DLOCK is secure against the average hacker. The
file CHALLENG.ENC was encrypted with DLOCK.EXE. If you are the first person
to (1) decrypt CHALLENGE.ENC and (2) follow the instructions in the decrypted
file to claim your prize before midnight UTC, 29 April 1997, then you will
get US$271.82 of my hard-earned money. To claim this prize, you must reveal
how you deciphered the ciphertext. You must also not break the law
(including any currently valid export laws) in the process of earning this
prize. If the ciphertext is not broken, I get to keep my money.
The plain text that CHALLENGE.ENC was encoded from is plain, uncompressed,
7-bit ASCII with both CR and LF at the ends of lines. It contains English
text, including instructions on how to claim the prize and contact the
author.
THE FAIR CHALLENGE
The US$271.82 challenge given above is probably unfair, unless I really goofed
badly in the implementation of DLOCK or the invention of the Diamond
Encryption Algorithm. On the other hand, if you find what you think is a
weakness or error in either DLOCK or Diamond (other than the disadvantages
listed above), please let me know. There is no cash reward for such
information, but I will use the information to help improve the encryption
programs that I write.
CONTACTING THE AUTHOR
You can reach me by email at m.p.johnson@ieee.org, CompuServe 71331,2332, or
at Mike Johnson, PO BOX 1151, LONGMONT CO 80502-1151, USA.
Check for the latest version of this program on the Colorado Catacombs BBS,
303-938-9654, or for ftp from csn.org//mpj or ftp.netcom.com//pub/mpj.
REGISTRATION
This program is free, so registration is not required. However, if you would
like to be added to my list of users to be notified of upgrades and related
products, or if you would like to make a donation to advance the cause of
free privacy protection software, feel free to contact me at the above
address.
+88
View File
@@ -0,0 +1,88 @@
Programming PC DMA Controller (8237)
Josh Cohen
CSC 390 Special Topics
H. Barada
The process, described in detail later, for programming DMA
transfers is somewhat complex.
General Steps:
Set up a buffer to read from or write to.
Disable the channel you wish to set up.
Set the Page Register to the page which you want to transfer.
Clear the Byte Pointer.
Set Base Address register to the address of the beginning of the buffer.
Set the Base Word Count register to number of words you wish to transfer.
Set the DMA transfer Mode.
Enable DMA channel to start transfer.
Details
Registers of the 8237 DMA controller
The DMA controller has several channels. Channel 1 is best for
user transfers as some others are used by the system.
Address Description
00Ah Channel mask (enable/disable)
083h Page Register
00Ch Clear Byte pointer flipflop
002h Base Address 16 bit register
003h Base Word count 16 bit register
00Bh Transfer mode register
To set up DMA controller
Set up a buffer to read from or write to.
Since the DMA controller does everything in 64k blocks, it is best to
try to align the buffer to the segment edge, I.e. Segment A offset 0.
This can be difficult depending on the language which we use.
Disable the channel you wish to set up.
If we use channel 1 we send 05h to address 00A (page register)
Set the Page Register 00A to the page which you want to transfer.
The pages are 64k blocks in main memory. We must setup multiple
transfers if we wish to transfer more than 64k since the controller is
only able to do 64k at a time.
The pages are 00h to FFh starting with 0000-FFFF. Notice that these are
the same pages that we call segments. When we specify addresses we are
only talking about the offsets from the segment, not the entire address.
Clear the Byte Pointer.
The clear byte pointer register is a flip flop. Writing to the register
clears it, the actual data which we write is ignored.
Write any value to 00Ch
Set Base Address register to the address of the beginning of the buffer.
To do this we write the offset from the segment edge of the starting
address of our buffer, this will be 0 if we have aligned the buffer to
the segment edge.
Write this offset to 002h
Set the Base Word Count register to number of words you wish to transfer.
This register gets the number of words which we wish to transfer.
Usually this will be bytes.
Write this number to 003h
Set the DMA transfer Mode.
This register controls the mode of transfer, it will vary upon the
device which we want to transfer to. In our case, using the
ThunderBoard Sound Card the possible modes are:
49h Non-continuous playback
59h Continuous playback
45h Non-continous record
55h Continuous record
By playback we mean transfer data from memory out to the card
By record we mean transfer data from the card to memory.
Notice that we are sending out or receiving data from the bus. The
computer really does not care or know where the data is going or coming
from. We must also set up the device we are transferring with. In this
case it is the ThunderBoard. See the next document on how to do that.
Enable DMA channel to start transfer.
Now that we have correctly set up the DMA controller for the transfer,
we can enble the channel. However, we must set up the card to receive
or send the data first. Usually, in practice, the card is set up before
the DMA controller.
+353
View File
@@ -0,0 +1,353 @@
DMPEG V1.1
Public Domain MPEG decoder
by Stefan Eckart
June 1993
1. Features
===========
DMPEG is another MPEG decoder/player for the PC:
- decodes (nearly) the full MPEG video standard
(I,P,B frames, frame size up to at least 352x288)
- can save decoded sequence in 8 or 24bit raw file for
fast off-line display (two pass mode)
- optional on-screen display during decoding
- several dithering options for 8 bit displays:
ordered dither, Floyd-Steinberg, grayscale
- selectable color-space
- runs under DOS, 640KB RAM, no MS-Windows or '386 required
- compact (small code / small data models, 16 bit arithmetic)
- supports VGA, many Super-VGAs (including VESA) and
some TrueColor SVGAs
2. Introduction
===============
DMPEG is a Public Domain decoder for files containing MPEG video
sequences. MPEG is a standardized format for compressed storage of video
(and audio), similar in concept to JPEG for individual images. It,
however, provides higher compression by exploiting the similarity of
consecutive images of a sequence, so called interframe coding. As with
JPEG, the compression factor depends on the source material and the
desired quality of the coded sequence. A compression to less than 5% of
the original material is not uncommon.
DMPEG supports the full MPEG video standard, except D-frame sequences.
Decoding is not very fast, therefore a two-pass mode was implemented:
during the first pass the sequence is decoded and stored in an unencoded
file which then can be played at maximum speed during the second pass.
Of course DMPEG also has a one-pass mode where the sequence is displayed
immediately but at lower speed. The speed is about one seventh of that
of the Xing MPEG decoder (see appendix A). The Xing player, however, can
only decode I frame sequences of size 160x120 and needs a '386. I
suggest to use DMEG in addition to Xing's MPEG.EXE 320x200 DOS player.
The latter is appropriate for real-time display of '160x120, I-frame
only' Xing files, DMPEG is more suitable for larger size 'real' MPEGs
containing I, P and B type, 352x288 sized frames or for faster and
better quality 'off-line' display of the 160x120 MPEGs. Try it on one of
the larger MPEG files (see appendix, my recommendation: flowg.mpg) to
see that MPEG can also be used (and is intended) for storing really
sharp, virtually noise-free sequences.
To give an impression of the attainable speeds, here are some figures
measured on a 386DX/33 with 4MB RAM and a Conner 3104 100 MB hard disk.
The decoding time for flowg.mpg (352x240) was about 4 sec per frame, 9
minutes for 150 frames. waterski.mpg (336x208 and higher compression)
required only 2.4 sec per frame. A decoded 150 frame raw data file is
12 MB long and can be displayed at 5.2 frames/s. 160x120 MPEGs reach
22 frames/s while the decoding speed is 1.9 sec/frame. The display frame
rate is limited by the transfer speed from hard disk to memory (about
550 kByte/s on my PC). If you have enough RAM, you can obtain much
higher speed by playing from a large RAM-disk (e.g 23 frames/s for a
352x240 sequence).
This program is Public Domain and I don't take any responsibility
regarding its fitness, usefulness etc. (#include
<your_favourite_disclaimer>). Comments, bug reports, questions to:
Stefan Eckart
Kagerstr. 4
D-81669 Muenchen
Germany
email: stefan@lis.e-technik.tu-muenchen.de
Any feedback is welcome.
3. Usage
========
dmpeg [options] input.mpg [output.raw]
dmpeg [options] input.raw
input.mpg any MPEG DIS 11172 compliant non multiplexed compression
layer video stream (D frame streams unsupported)
output.raw the decoded and dithered 8 or 24bit raw output file;
if omitted: output to screen only
input.raw previously decoded raw file to be displayed at maximum speed
Options:
-q quiet mode; no text output (except error messages)
-v verbosity level; can be increased by repeating this option;
enables display of decoded information (start codes, frame size,
quantization scales etc.), can't be combined with the -s option
-dx dithering options:
-d0 ordered, saturation dominant 4x4 dither (default)
-d1 Floyd-Steinberg error-diffusion / blue-noise-shaping (2 weights)
-d2 Floyd-Steinberg error-diffusion / blue-noise-shaping (4 weights)
-d3 undithered grayscale output
-d4 24 bit true color output
-p0 use full color range palette
-p1 use restricted color range palette (default)
-sn select graphics adapter:
-s0 either standard VGA or Super-VGA in 320x200x256 mode (default)
(options -d0..3) or a TrueColor VGA with VESA BIOS in
320x200x16M mode (option -d4)
-s1 VESA BIOS, either 640x480x256 (-d0..3) or 640x480x16M (-d4)
-s2 ET4000 \
-s3 ET3000 |
-s4 Video 7 |
-s5 Paradise | 640x480x256
-s6 Trident | (options -d0..3 only)
-s7 Chips & Technologies |
-s8 ATI |
-s9 Orchid |
-s10 Oaktech /
-lx delay (x=0..65535, default 0), used only for offline display
-b use 8 bit transfer (default: 16 bit) into (S)VGA memory
Options can be combined. Example:
dmpeg -d2s0 flowg.mpg flowg.raw
decodes MPEG file flowg.mpg to raw file flowg.raw using FS4 dithering
and displays it on the screen in 320x200x256 mode.
dmpeg -vvv flowg.mpg flowg.raw
as above but using ordered dither and printing much information about
startcodes, headers and parameters.
All SVGA drivers use the 640x480x256 display mode and require at least
512 kB of video memory. If your graphics card is not listed, the best
you can do (besides trying all drivers in the hope that one of them
might work) is to obtain a VESA BIOS extension for your card and use
mode -s1. A collection of such drivers had been posted to
comp.binaries.ibm.pc and is also available at
ftp.rahul.net:/pub/bryanw/pc/vesadrv2.zip (anonymous ftp).
All drivers except the standard VGA, ET4000, the VESA driver in
conjunction with the mentioned public domain VESA BIOS extension TSR for
the ET4000 and the TrueColor driver with a Cirrus Logic VGA are
untested. I'm very interested in email feedback which drivers work and
which don't.
The -l option controls playback speed. It is implemented as a simple
delay loop without synchronization to a timer or vertical retrace.
The -b option is probably superfluous. I don't have much experience in
PC graphics programming and since I saw some example driver routines
using bytewise transfer (rep movsb) instead of wordwise (rep movsw) I
preferred to include this as a fudge factor. You should try it only in
case of problems. Speed is reduced considerably if you activate this
switch (at least for cards with 16 bit bus interface).
Decoding can be terminated by pressing any key.
Offline display can be controlled with the following keys:
any key except
space, return
or escape halt display at current frame and step one frame
forward each time a key is pressed
space step one frame backwards
return continue display
escape quit program
4. Technical information
========================
The player is a rather straightforward implementation of the MPEG spec
[1]. The IDCT is based on the Chen-Wang 11 multiplication algorithm [2]
which was coded in assembler but does not use tables for multiplication.
Blocks with not more than two non-zero coefficients use a non-separated
direct multiply-accumulate 2D-IDCT, which turned out to be faster than a
'fast' algorithm in this (quite common) case. Dithering is pretty
standard. Main difference to the Berkeley decoder (except for the fewer
number of supported algorithms) is the use of 256 instead of 128 colors,
the (default) option to use a restricted color-space and the
implementation of a color saturation dominant ordered dither. This leads
to a somewhat superior quality of the dithered image.
Restricted color-space means that the U and V components are clipped to
+/-0.25 (instead of +/-0.5) and the display color-space points are
distributed over this restricted space. Since the distance between
color-space points is thus reduced by a factor of two, the color
resolution is doubled at the expense of not being able to represent
fully saturated colors.
Saturation dominant ordered dither is a method by which a color, lying
somewhere between the points of the display color-space, is approximated
by primarily alternating between two points of constant hue instead of
constant saturation. This yields subjectivly better quality due to the
lower sensitivity of the human viewing system to saturation changes than
to hue changes (the same reasoning as used by the PAL TV standard to
improve on NTSC). The improvement is particularly visible in dark brown
or redish areas.
5. File formats
===============
If you want to write your own player or to post-process the results,
here is the format of the 8 bit raw file:
Byte
0..7 compatibility bytes (to be ignored)
8..9 image width (MSB first)
10..11 image height (MSB first)
12..31 compatibility / unused
32..799 color table, R[0],G[0],B[0], ... R[255],G[255],B[255]
800.. image data in natural order (top left to bottom right,
all frames concatenated without any gaps or repeated
headers)
The format of 24bit true color files (-d4 option) is:
0..7 compatibility bytes (to be ignored)
8..9 image width (MSB first)
10..11 image height (MSB first)
12..31 compatibility / unused
32.. image data (3 bytes per pixel: B,G,R, top left to bottom
right, all frames concatenated without any gaps or repeated
headers)
The 8 bit format happens to be compatible with the raw format used by a
shareware program called Image Alchemy. In fact you can use that program
to view the first frame of the sequence and to convert it into other
formats.
6. Changes
==========
This is a list of major changes relative to version 1.0.
- speed improved by a factor of two through recoding of the IDCT and
interframe prediction routines in assembler and optimization of the
dithering algorithms
- support of TrueColor VGAs with VESA BIOS (only tested with Cirrus
Logic)
- DMPEG and DMPLAY merged into one program
- SVGA / TrueColor support for immediate display during decoding
- increased robustness against errors in the file to be decoded:
program tries to resynchronize on the next slice/frame header
instead of terminating
- format of the 24 bit raw file changed (B,G,R instead of R,G,B)
7. References
=============
1. Coding of moving pictures and associated audio for digital storage
media up to about 1,5 Mbit/s, Draft International Standard ISO/IEC
DIS 11172, 1992.
2. Chen, Wang, IEEE ASSP-32, pp. 803-816, Aug. 1984.
Appendix A: Related Software
============================
This list is probably incomplete, but it's all I'm aware of. Of course
there are programs for other systems as well (Mac, Amiga etc.).
cmpeg an MPEG encoder for the PC (DOS, 640K, no '386 req.)
for Targa, PBMPLUS and Alchemy RAW images
Author: myself
mpeg_play MPEG Video Software Decoder (Version 2.0; Jan 27, 1993)
Authors: Lawrence A. Rowe, Ketan Patel, and Brian Smith
Computer Science Division-EECS, Univ. of Calif. at
Berkeley
toe.cs.berkeley.edu:/pub/multimedia/mpeg/mpeg-2.0.tar.Z
mpgplay Online port of mpeg_play for DOS
by: Giampero Caprino, scompx@milano.oas.olivetti.com
(evaluation version, works only with Xing files)
mpeg386.exe Offline port of mpeg_play for DOS
by: Greg Ennis, 93gke@cs.williams.edu
(based on mpgplay, works only with Xing files)
mpegwin Online port of mpeg_play for MS-Windows
by: Michael Simmons, msimmons@ecel.uwa.edu.au
toe.cs.berkeley.edu:/pub/multimedia/mpeg/Ports/mpegw*
(HiColor & TrueColor support, Shareware)
mplay.exe,
mpeg.exe DOS MPEG players from Xing Technologies
(very high speed, but decodes only a small subset of the
MPEG standard)
MPEGv1.1/1.2alpha
MPEG Software Encoder/Decoder
Authors: Portable Video Research Group (PVRG)
havefun.stanford.edu:/pub/mpeg/MPEGv*.tar.Z
mpgcodec PVRG encoder/decoder for PC compiled with GNU gcc
('386 required)
posted in alt.binaries.pictures.utilities
APPENDIX B: MPEG files
======================
Two good sources for MPEG files:
toe.cs.berkeley.edu:/pub/multimedia/mpeg/movies
havefun.stanford.edu:/pub/mpeg
High quality MPEGs you simply can't afford to miss:
tennis.mpg
flowg.mpg
bike.mpg
--
Stefan Eckart, stefan@lis.e-technik.tu-muenchen.de, June 1993.
File diff suppressed because it is too large Load Diff
+393
View File
@@ -0,0 +1,393 @@
Documentaion for SBDSP - SoundBlaster APT Demodulation Program
This program and documentation are the property of the Dallas Remote Imaging
Group (BBS 214 394 7438). If it is used on other systems, this copyright
notice must be kept in this documentation. This program may NOT be sold or
marketed in any form. All rights are reserved by the Dallas Remote Imaging
Group (1992).
Dallas Remote Imaging Group
PO BOX 117088
Carrollton, Texas 75011-7088
BBS 214-394-7438
FAX 214-492-7747
Rev DRG5193Beta
----------------------------
Introduction:
The SoundBlaster and SoundBlaster Pro audio I/O cards from Creative
Labs, Inc. are very popular accessories found in many IBM PC compatible
computer systems. Although the boards are usually used only to provide
music and sound output for computer games, they also support audio input
into the computer. The standard SoundBlaster supports mono audio I/O
and is available in the $100 price range. The Pro model supports stereo
and adds a CD/ROM (SCSI) interface. It costs around $250 dollars.
The boards can digitize sound at high speed and, using one of the
computer's DMA (direct memory access) channels, transfer the sound
samples directly into computer memory. Once in memory the sound samples
are written to disk. It is this ability to digitize and record sound
that enables the SoundBlasters to be used for the reception and decoding
of APT satellite signals.
The output of a radio receiver tuned to an APT signal is just a 2400 Hz
audio tone. As the satellite scans the earth and clouds, it varies the
amplitude of the tone in proportion the the brightness of the area that
it is currently observing.
-------
What it does:
If you viewed the contents of the .VOC sample file produced by the
SoundBlaster VREC program with your favorite image processing program,
it would not look at all like a weather satellite photo. The .VOC file
is like an exposed roll of film. Its contents must first be "developed"
before you can view the image. The process of "devloping" the .VOC
file contents into a weather satellite image is called DEMODULATION.
Demodulation converts the recorded values of the samples of the 2400 Hz
APT sine wave into their corresponding pixel values. The desired image
pixel values actually represent the amplitude of each peak in the
APT sine wave signal.
Signal sampling theory states that if you are to do anything meaningful
with a digitally sampled signal then you must sample the signal at least
twice as fast as the highest frequency component of the signal. The
2400 Hz APT signal needs to be sampled at least 4800 times a second.
Because the APT signal is not a constant tone, it has freqency
components much beyind 2400 Hz. Also the laws of thermodynamics (and
life) say that nothing is perfect as theory predicts and you really need
to sample at a higher rate.
If we sample the APT signal at exactly 4 times its 2400 Hz
carrier frequency (i.e at 9600 samples per second), each input sample
will be eactly 90 degrees (360/4) in phase apart from its adjacent
samples. Using the following trigonometry identities it turns out to be
particularly easy to accurately demodulate the APT samples:
cos(x) = sin(90-x)
sin(x)*sin(x) + cos(x)*cos(x) = 1
By substituting the first equation into the last equation we get:
sin(x)*sin(x) + sin(90-x)*sin(90-x) = 1
Because each recorded sample of the 2400 Hz APT sine wave is 90
degrees apart from the next sample we can calculate the pixel value as:
pixel = sqrt((sample[t]*sample[t]) + (sample[t-1]*sample[t-1]))
The demodulation program just needs to read the .VOC sample file, throw
away the file header information, adjust the samples for clock/DMA
rate errors and DC offsets, calculate the pixel values from adjacent
pairs of sample values, scale the results to values from 0 to 255, and
finally write the resulting pixel values to the image file.
This could be a very time consuming process when you consider that a
typical 14 minute capture has about 8 million input samples and that
multiples, adds, and square roots are all operations that take lots
of CPU time. This is particularly true if floating point arithmetic is
used.
To make the demodulation program run very quickly a table of all 65536
possible combinations of adjacent 8-bit sample values is pre-computed
according to the above formula. All the demodulation software then has
to do in order to convert the recorded APT samples into their pixel
values is look up the proper table entry. No time consuming floating
point arithmetic need be used once the demodulator table has been built.
Reading and writing 8 megabyte files is always a time consuming process.
By always reading and writing the sample and image files in multiples of
512 bytes, the demodulation software takes full advantage of the
behavior of the DOS file system.
-------
Problems, problems, problems:
Although the SoundBlaster is quite good at adding a little zip to the
odd computer game, it is far from being a precision signal processing
system. Using the SoundBlaster card for APT reception presents many
problems. Fortunately software techniques may be used to overcome
the problems and yield APT images that rival the best commercial
systems.
Using the SoundBlaster for APT demodulation presents two main types
of problems:
1) Sample inaccuacies and offsets
2) Clock rate and missing sample errors
Sampling a perfect sine wave with a perfect board in a perfect world
should yield a series of samples with an average sample value of zero.
Unfortunately the SoundBlaster circuitry usually adds a small DC offset
to the recorded sample values. This DC offset can cause noise and
"beat" patterns to appear in the demodulated image file.
To remove the effects of any DC offset in the sample values, the
demodulation software calculates the average sample value in each block
of input samples. This sample bias is then subtracted from each input
sample.
The demodulation program is currently a bit paranoid about things and
re-calculates the sample bias for each input block. It would be a
bit faster to calculate the value for only the first block. If the
input level to the SoundBlaster board is properly adjusted, the sample
value offset does not seem to change between blocks.
For easy demodulation of the APT signal we need to sample at 9600
samples per second. If the resulting image is to be properly
synchronized to the satellite data this needs to be EXACTLY 9600 samples
per second. PRECISELY EXACTLY 9600 samples per second. How exact?
A typical fourteen minute satellite pass requires an accuracy of around
one part per 10 million... 9600.0000 samples per second.
Typically a satellite scans one line of pixels every 1/2 second (120
lines per minute). At a sample rate of 9600 samples per second, a 14
minute satellite pass generates about 8 megabytes of data. If the
sample clock rate is only accurate to a mere one part per million, the
resulting image will be skewed 8 pixels from top to bottom. Although 8
pixels of skew across of screen of 4800 pixel lines is only about a .1
percent skew, it is noticeable if you are looking for it or are wanting
to do some quantitative analysis of the satellite orbit from the doppler
bow.
How accurate is the SoundBlaster clock you ask? It turns out the
closest that you can set the sample rate is around 9620 samples per
second... an accuracy of around one part in a few hundred... not even
close. To make matters worse the clocks on any two SoundBlaster boards
can easily differ by parts per thousand. Clock errors of this magnitude
cause the image to appear like a TV set that has lost sync. The image
is an unreadable mess of slanted bars.
The DMA circuitry on the SoundBlaster boards can automatically transfer
blocks of up to 32768 signal samples into the computer's memory without
using any CPU time. Once a block of samples has been DMAed into memory,
the recording software starts DMAing the next block of samples into
another memory area. While the second block of samples is being
received, the recording software writes the first block to the
computer's hard disk. The process alternates in a ping-pong fashion
between reading samples into one buffer while writing the other buffer's
data to disk.
Unfortunately a few signal samples are lost in the time between the end
of one DMA block and the startup of the next DMA block. To make matters
worse the number of samples lost depends on the computer system's CPU
type and clock rate. Faster systems loose fewer pixels between blocks.
Also number of pixels lost seems to depend upon whether the block is an
ODD or EVEN numbered block.
Fortunately it is possible to compensate for the errors in the clock
rate and the samples lost between DMA blocks. The demodulation program
compensates for the pixels lost betwwen DMA blocks by duplicating the
last few samples of each DMA block. The user can independently specify
the number of samples to add to (or even remove from) the odd and even
numbered DMA blocks with the /O and /E command line parameters.
The sample clock rate error is compensated for in two stages. The first
stage is the coarse adjustment factor. This factor causes every n'th
input sample to be removed (or duplicated). By throwing away
every 601'st sample, the 9620 samples per second that the SoundBlaster
produces is cut down to ABOUT 9600 samples per second. The coarse
adjustment factor can be changed by using the /C command line parameter.
The second clock rate adjustment factor is the fine tuning factor. It
is used to zero in the exact timing value. It adjusts out any
residual skew in the image caused by variations in individual
SoundBlaster board clock generators. The fine adjustment factor
works just like the coarse adjustment factor. It causes every n'th
input sample to be removed (or duplicated). It may be specified with
the /F command line parameter.
-----------------------------
Doing it:
The first step is to connect your satellite receiver to the microphone
input of the SoundBlaster. You must be very careful to set the
amplitude of the receiver output low enough so that it does not
overdrive the SoundBlaster. If you overdrive the card its automatic
gain control (AGC) circuitry will attempt to compensate. This will
cause streaking in the resulting images.
To properly set the receiver level use the VEDIT2 program supplied with
the SoundBlaster card. Select the SCAN INPUT item from the RECORD menu.
This will show a graphical representation of the input signal. While
monitoring a good satellite pass adjust the receiver level until none of
the signal peaks touch the top or bottom margins of the graph. Leave a
little safety margin (1/8 inch) just to be safe.
Once the receiver level has been set, the next step is to record a
satellite pass to disk. This is done with the VREC program supplied
with the SoundBlaster card.
For the SoundBlaster Pro use the command:
vrec c:cap /a:mic /m:mono /f:low /s:9620 /l:15 /t:840
where:
c:cap - is the name of the file that you want to write the samples.
Remember the sample file will be quite large. Around 600 Kb
per minute of recording. In this case the samples will be
written to the file C:\CAP.VOC
/a:mic - selects the MICROPHONE input.
/m:mono - selects MONO recording.
/f:low - sets the LOWPASS recording filter.
/s:9620 - sets the recording sample rate to 9620 samples per second.
Note the if you ask for values less that /S:9619 the VREC
program rounds the value down to around 9500 samples per
second. /S:9620 is the smallest value that actually
selects a sample clock greater than 9600 Hz.
/l:15 - sets the microphone level to full open. Use the receiver
output level control to adjust the recording level.
(I don't think this is what this does or is necessary
any more. It is left over from early attempts to get
rid of hum in the image caused by a bad cable)
/t:840 - says to record for 840 seconds (14 minutes). This value
can be adjusted to whatever length is desired.
After a satellite pass has been recorded and written to disk as a .VOC
sound sample file, the next step is to demodulate the .VOC sample file
into an image file. Use the command:
sbdsp c:cap.voc c:cap.img
This will read the recorded sample file C:CAP.VOC and write the
resulting image to the file C:CAP.IMG (remember that these files will
be about 8 Megabytes EACH). If you do not specify the output file name,
the demodulation program will ask if it is OK to write the output image
over the data in the .VOC file. This is a VERY time consuming process,
but can be useful if you are short on disk space. Note that if you
choose to overwrite the input data file, you cannot experiment with the
various timing adjustments or interrupt the demodulation program.
Once the input file has been demodulated you can use your favorite
image processing program (such as IMDISP, APTCAP, or SATVIEW) to view
the resulting image. The file written by the demodulation program is
raw binary 8-bit gray scale image. Each line is 4800 pixels wide. A 14
minute pass has 1680 scan lines. (Because of the timing adjustments, etc
the output image may be short a few lines).
---
Tweaking in the timing:
What you should see is the APT image complete with the normal "doppler
bow" curve. The curve in the image is due the speed of light. Since
light travels at 186,000 miles per second, each pixel of image shift in
the doppler bow (1/9600 of a second) represents about 19.4 miles of
satellite movement relative to the receiver.
As the satellite approaches the receiver the radio signal has to travel
less and less distance to reach the receiver. As the satellite moves
away the radio signal takes longer and longer to reach the receiver.
The point in the doppler bow where the curve changes slope
is the closest point of approach of the satellite pass.
In a properly adjusted image, the shape of the doppler bow curve
should appear symmetrical about the closest point of satellite approach.
If the image is slanted more towards the left or right, or appears like
a TV image that has lost sync then you will need to adjust one or
more of the timing adjustment factors.
(For further information, contact the software developers at:
Dallas Remote Imaging Group BBS - 214-394-7438 FAX 214 492 7747
Usually only the fine timing adjustment (/F) needs to be set. To get an
idea of the magnitude of the adjustment needed, count or estimate the
number of pixels that the image slants. (Hint: use the pan and zoom
features of your image display program. If your display program
re-sizes the image to fit the screen, remember to count pixels in the
FILE, not those on the screen). Divide the total file size by the
number of pixels that the image slants from top to bottom.
adjustment factor = (file size / pixels of image slant)
The more the severe image slant is, the SMALLER the timing adjustment
factor value. Subtle image slants are typically corrected with large
valued adjustment factors (say 50,000 - 500,000). Adjustment factors in
the thousands would be used for images that slant a good portion of the
width of the screen. Even more severe slants first should be corrected
by tweaking the /C (coarse) timing adjustment.
Images that slant to the left use a positive adjustment count.
Images that slant to the right use a negative adjustment count.
->| |<- estimate the number of pixels of image slant
| |
| ---------- ----------
| / / \ \
| / image / \ image \
| / / \ \
| ---------- -----------
Use /F+value Use /F-value
The loss of pixels between DMA sample blocks shows up as small
periodic jags in the image of a pixel or so every 6-8 scan lines.
Experiment with the /O and /E command line options may be to minimize
these remaining jaggies. For these options, larger values produce
greater effect. The maximum DMA adjustment factor possible is +/- 255.
Only + values should be needed here. The software supports - values
just in case...
The image may look OK except for one or more large and sudden shifts or
discontinuities. These shifts usually occur on systems with slower hard
drives or CPU's. The cause is usually the excessive time it takes DOS
to extend or otherwise allocate disk space as it writes the .VOC file.
If this occurs in your images, it can usually be fixed by recording the
sample file to a freshly "defragmented" disk. Use a disk optimizer
program like Norton Utilities or PC Tools to pack the sample file hard
disk drive before running the VREC recording program.
Once the proper timing adjustment factors have been determined for a
particular computer, they should not need to be changed (except possibly
for a drift in the SoundBlaster sample clock rate with temperature).
A batch file can be created that will automatically use the appropriate
timing factors.
--------
Development team at:
Dallas Remote Imaging Group
PO BOX 117088
Carrollton, Texas 75011-7088
FAX 214 492 7747
================================================================================
============================================================================
DALLAS REMOTE IMAGING GROUP BBS =====>> 214-394-7438
FAX 214-492-7747
VOICE 214-394-7325
DEDICATED TO SATELLITE IMAGERY, SATELLITE TRACKING, NASA,
DIGITAL SIGNAL PROCESSING, IMAGE PROCESSING,
AMATEUR RADIO, AND ELECTRONIC INTELLIGENCE
PCBoard SUPPORTS 6 Lines (USR Dual Standard V.32bis V.42 24 hrs. Daily)
E-MAIL FOR Weather Satellite Report and InterNet UUCP News Groups
ON-LINE HAMCALL APPLICATION - LOOKUP HAM CALLSIGNS
On-Line SATTRAK Satellite Tracking Routines
On-Line SHOP Satellite Resource Center - On-line Ordering
On-Line BALLTRAK Balloon Launch and Tracking Program
THOUSANDS OF IMAGE FILES OF SATELLITE IMAGE AND NASA VOYAGER IMAGES
SATELLITE TRACKING PROGRAMS, IMAGE PROCESSING, DSP, ATV, SSTV, FAX
============================================================================

+57
View File
@@ -0,0 +1,57 @@
DRIP Version 2.00
Release Package
DRIP is a program intended solely for its entertainment value, generally
derived from running the program surreptitiously on another person's
machine.
When DRIP runs, it produces no messages or other signs of its activity,
installing itself inline with INT 8, the clock interrupt. It remains
totally dormant until SCROLL LOCK is depressed, then remaining active
until SCROLL LOCK is depressed again. When active, each time the clock
interrupt executes (about every 1/22 second), it decrements a timer
value which is a pseusdorandom value of varying maximum limit to see if
it DRIP is due to run. If so, it examines the screen memory to locate a
character on the screen which has free space beneath it. That character
is moved downscreen until it either falls off the screen entirely, or
encounters another character in its fall and comes to rest over it.
The result is that randomly selected characters on the screen appear
to 'fall off the screen'.
The interval between activations of the program is a pseudorandom function
with a maximum value which decreases by a half every 64 characters moved, so
that by the time a few hundred characters have been moved, it is running
reasonably continuously.
DRIP is capable of moving one character on the screen at a time. However,
for a variation, DRIP may be run more than once, installing a copy of itself
each time it is run. The result is that there will be a maximum number of
simultaneously moving characters equal to the number of installed copies.
DRIP is totally transparent to any running programs (except, perhaps the
few that mess around with the clock interrupt). It has no effect
whatever on the running system when not activated, and minimal effect
(a slight execution time burden on the clock interrupt) when it is
active. It has been tested on CORONA, COMPAQ, and IBM machines, including
various video cards and modes. The only objectionable effect seen to date
is slight screen 'snow' during the burst of screen ram activity when
DRIP is hunting for a character to move when it runs, this occuring
on some inexpensive display adaptors. Most machines' displays
handled the activities of DRIP without complaint.
DRIP was written and is released as a generalized giggle for the PC
user community. It may be freely copied and distributed for its intended
purpose. UNDER NO CIRCUMSTANCES SHOULD MODIFICATIONS BE MADE TO DRIP
AND THE RESULT RELEASED TO OTHERS, NOR MAY DRIP BE SOLD FOR PROFIT.
Every effort has been undertaken to produce and release a fully
debugged and safe program. It has been carefull written and extensively
tested. However, the final responsibility is up to the user to ensure
that DRIP runs correctly with particular programs, and to ensure that
his copy of DRIP is itself intact. The author assumes no responsibility
for consequences arising from the use of DRIP.
G. Masters May, 1987 Thousand Oaks, CA
<end of document>


Some files were not shown because too many files have changed in this diff Show More