376 lines
16 KiB
Plaintext
376 lines
16 KiB
Plaintext
33
|
|
|
|
|
|
#33 : 063 CIA/TRICKS
|
|
|
|
|
|
|
|
|
|
<=-=*=---------------------------=*=-=>
|
|
The C.I.A Files
|
|
Intermediate Level Tricks with
|
|
Tricky Dick
|
|
|
|
Typed by The Camel Jockey
|
|
Revised by Bets C.
|
|
Apple Manor (716) 654-POOF!
|
|
<=-=*=---------------------------=*=-=>
|
|
|
|
Avoiding D.O.S Lang. Card Clobber
|
|
|
|
D.O.S. 3.3 has particularly pesky subroutine which stores a $00 in the
|
|
first byte of the language card whenever we do a PR#6. This in turn makes
|
|
D.O.S. think that the language card is empty. So if you happen to have
|
|
INTERGER BASIC (or some other program) there, and then boot up from the
|
|
keyboard, you alwas have to reboot your System Master and hang around while
|
|
it reloaeds INTEGER. Most of the time, however, a perfectly good image of
|
|
INTEGER is still in the language card in spite of the LANGUAGE NOT AVAILABLE
|
|
message you get when you ry to call it.
|
|
|
|
Fixing this is a piece of cake. Just read in track $00, sector $09, and
|
|
write 3 'EA' over the '8D 00 E0' in line $D0, leaving it looking like
|
|
this.
|
|
|
|
D0: C0 A9 00 EA EA EA 4C 44
|
|
|
|
Then write it back to the disk. Any disk with this patch in its D.O.S.
|
|
will leave INTEGER in peace when
|
|
booting.
|
|
|
|
Important Note
|
|
|
|
I know it seems obvious, but don't forget to reboot the D.O.S. you've
|
|
just altered with the following patches if you want to see them in
|
|
action.
|
|
|
|
Switching the HELLO file
|
|
|
|
To make this simple alteration, read in track $01, sector $09. Starting
|
|
with byte $75 in line $70, you will see the name of the HELLO program. If
|
|
you want another file on the disk to run automatically on boot-up, put the
|
|
cursor over the first byte of the HELLo file's name (a
|
|
'C8' for 'H' on most disks), and hey in SHIFT 2 (the " character). Now type
|
|
in the new file's name and press down the CTRL, SHIFT and @ keys together,
|
|
returning to normal operation. If the name of the new file is shorter than
|
|
that of th old one, there will be some unwanted characters tacked on at the
|
|
end. Be sure to type 'A0's' (ASCII for spaces) over these before writing the
|
|
sector back to the
|
|
disk.
|
|
|
|
Using a Binary or EXEC HELLO file
|
|
|
|
Normally, when D.O.S. finishes booting into RAM, it issues a RUN
|
|
command to start the HELLO program. However, if you used the foregoing method
|
|
to switch HELLO to a machine language or EXEC file, you will obviously want
|
|
D.O.S. to issue the correct BRUN or EXEC command on boot up. To do this
|
|
read in track $00, secor $0D and change byte $42 from a
|
|
'06' to:
|
|
|
|
(1) a '34' to BRUN a binary hello
|
|
program;
|
|
|
|
(2) a '14' to EXEC and EXEC file.
|
|
|
|
Now write the sector back to the disk. You may wish to make this and th
|
|
e
|
|
foregoing patch on a COPY of your CIA disk so that it's BRUN's Tricky Dick
|
|
immediatly on boot-up. If you do, you should leave line $40 looking like the
|
|
example
|
|
below.
|
|
|
|
40: 03 A9 34 05 AD 62 2A
|
|
\
|
|
Binary HELLO flag
|
|
|
|
Loading a Program between D.O.S
|
|
and its Buffers
|
|
|
|
Having carried out the preceeding two operations, you might decide that
|
|
it would also be useful to place your program in some secure spot in memory
|
|
where subsequent loading and running of other files cannot overwrite it. The
|
|
best was of doing this is to move D.O.S. buffers down and load your program
|
|
on top of them. A simple D.O.S. patch will insure their complete safety
|
|
even if D.O.S. is coldstarted.
|
|
|
|
To set things up, read track $00, sector
|
|
$0C
|
|
|
|
00: D3 1C 81 1E 75 2A
|
|
^^ ^^
|
|
|
|
The next step is to subtract the length of your program in bytes from
|
|
$1CD3, the number shown in reverse at the beginning of line $00. So if your
|
|
file was, say, $200 (decimal 512) bytes long, you'd have to work out that
|
|
$1CD3 - $200 = $1AD3. You should now reverse the high and low bytes of this
|
|
result in the classical 6502 manner, type them over the
|
|
'D3 1C', and write the whole works to the
|
|
disk.
|
|
|
|
00: D3 1A 81 1E BD 1E 75 2A
|
|
|
|
What happens is, the '1A D3' gets changed to '9A D3' on boot up, moving
|
|
the buffers down the required abount. This allows you to fix your program to
|
|
run $9D00 - $200 = 9B00 in
|
|
RAM.
|
|
|
|
Eliminating the Pause during a
|
|
CATALOG
|
|
|
|
If you manage to accumulate a large number of files on a single disk, yo
|
|
u
|
|
may find it useful to have continuous scrolling during a CATALOG. If so.
|
|
read in track $01, sector $0D of the disk whose D.O.S. you wish to provide
|
|
this service. Then simply change byte $34 from a
|
|
'CE' to a '60' as shown below.
|
|
|
|
30: 8D 20 ED FD 60 9D 33 D0
|
|
\
|
|
Changed byte
|
|
|
|
Write this block to the disk and you will find, after rebooting, that th
|
|
e
|
|
patched version of D.O.S. will not stop after each screenful of file names
|
|
during a CATALOG, but will scroll rapidly through to the end of the list. If
|
|
you have an autostart monitor, you can use CTRL S to stop/start the
|
|
listing.
|
|
|
|
Changing the "DISK VOLUME"
|
|
Catalog Message
|
|
|
|
In order to personalize your disk, you might like to have some message
|
|
other than "DISK VOLUME 254" appear when a CATALOG is executed. If so, read
|
|
track $02, sector $02 and change the "DISK VOLUME" message (written
|
|
backwards!) that begins at byte $B0. If you write over the space ($A0) at
|
|
byte $AF, you can squeeze in up to 12 characters by hitting SHIFT 2 (the
|
|
" sign) and typing them in backwards. So if your new heading is to be say
|
|
"Sammy's Disk", lines $A8 - $B8 would look like the illustration
|
|
below.
|
|
|
|
First byte of entry
|
|
!
|
|
A8:C9 C1 C2 D3 D2 C1 C2 CB:IABSRABK:
|
|
B0:D3 C9 C4 A0 D3 A7 D9 CD:SID S'YM:
|
|
B8:CD C1 D3 04 11 0F 04 00:MASDQOD@:
|
|
!
|
|
Last byte of entry
|
|
|
|
If you carried out the preceeding instructions, and rebooted, you should
|
|
get the following heading on each
|
|
CATALOG.
|
|
|
|
SAMMY'S DISK254
|
|
|
|
This looks a bit messy, so to get rid of the '254', read in track $01,
|
|
sector $0C and type 3 'EA's' over bytes $C0-$C2, ending up
|
|
with:
|
|
|
|
C0: EA EA EA 20 2F AE 20 2F
|
|
|
|
After writing this back to the disk and rebooting, your catalog message
|
|
will blaze forth in its most pristine
|
|
form.
|
|
|
|
Putting Headings on the
|
|
Catalog Track
|
|
|
|
There are few more frustrating experiences than searching through dozens
|
|
of disks for a program you urgently need, realizing that you have overlooked
|
|
it, and then having to start the whole tedious business from scratch once
|
|
again. Some order can be brought to disk choas by inserting heading on the
|
|
catalog track and making sure the type of files that they apply to are placed
|
|
underneath. For example, it might be useful to get the following display
|
|
upon CATALOG a
|
|
disk.
|
|
|
|
T 000 GAMES
|
|
T 000 -----
|
|
*B 062 PIRATE'S SWAG
|
|
*B 071 ROBIN HOOD'S LOOT
|
|
|
|
With a newly initialized disk in the drive, type in the following
|
|
sequence: SAVE XXXXX SAVE YYYYY DELETE XXXXX DELETE YYYYY. Then examine
|
|
track $11, sector $0F and you will see the 'X' and 'Y' strings just beneath
|
|
the HELLO entry. The 'X's' will most likely be in line $30. So start by
|
|
placing the cursor on the 'FF' in the line above (byte $2E) and type in
|
|
'24 00 00'. This should leave your cursor on the first of the 5
|
|
'D8's' (ASCII for 'X') in line 30.
|
|
|
|
Now you can press SHIFT 2 and type in the letters G A M E S, leaving the
|
|
string 'C7 C1 CD C5 D3' in place of the 'D8's'. Be sure to finish this
|
|
sequesnce by pressing CTRL SHIFT P (CTRL @) to get back into normal mode.
|
|
Lines $28 and $30 should look like
|
|
this.
|
|
|
|
28:A0 A0 A0 A0 02 00 24 00: B@$@:
|
|
30:00 C7 C1 CD C5 D3 A0 A0:@GAMES :
|
|
|
|
The next step is to press 'M' 3 times to bring your bursor over the
|
|
'13' at the end of the string of 'A0's in line $48. Type in 'A0 00'. This
|
|
should bring your to the beginning of the deleted entry for the 'Y' program.
|
|
|
|
Now you have only to repeat the above process. In other words, just
|
|
type '24 00 00' over the 'FF 0F 02' in line $50. Then follow this with a
|
|
SHIFT 2 and hit the '-' key 5 times, leaving a trail of 'AD's' over th
|
|
'D9's'. After CTRL @, move straight down to the '14 02' and replace this
|
|
with an 'A0 00'. Finally check everything and write the sector back to the
|
|
disk. Reboot and do a CATALOG to make sure the heading got set up O.K.
|
|
|
|
If you want a flashing instead of a normal heading, press SHIFT 7 (the
|
|
' character) before typing in the heading's letters. Inverse characters can
|
|
be obtained by changing the normalscreen ASCII numbers as
|
|
follows:
|
|
|
|
Numbers beginning with a 'C'....
|
|
|
|
change the 'C' to a 'O'
|
|
|
|
|
|
Numbers beginning with a 'D'....
|
|
|
|
change the 'D' to a '1'
|
|
|
|
|
|
'A0' (a space)....
|
|
|
|
change the 'A' to a '2'
|
|
|
|
If you change the ASCII for "GAMES" in this manner, you would end up
|
|
with:
|
|
|
|
30: 00 07 01 05 13 A0 A0 :@GAMES :
|
|
|
|
You can now transfer your favorite games to the disk and they will
|
|
automatically appear beneath the heading. If after doing this you still have
|
|
some space left over, you can easily use the same procedure to shove anothr
|
|
heading underneath the games on the catalog. Further files can be add below
|
|
this, and so on.
|
|
|
|
By the way, when you SAVEed the 'X' and 'Y' files, 4 sectors were set
|
|
aside by D.O.S. to store their nonexistent data. Subsequently DELETEing
|
|
them readjusted the bit maps to reclaim this wasted space.
|
|
|
|
Another point to take note of was the '24' we put in the dummy files'
|
|
track pointer byte. This was done to prevent the catalog heading from being
|
|
accidently DELETEd. If you now try to access "GAMES" with any D.O.S.
|
|
command you will get an I/O ERROR, since track $24 cannot be reached on te
|
|
Apple drives (the '-'s' are safe in any case because they are illegal catalog
|
|
|
|
characters).
|
|
|
|
Hiding the HELLO File on the Catalog
|
|
|
|
If you used the foreoing method to create headings and want to get the
|
|
word "HELLO" out of the way-or you simply want to conceal the existence of
|
|
your HELLO program during a CATALOG - you can make it do a dissappearing act
|
|
as follows. First, read in track $11, sector $0F and put the cursor over the
|
|
first 'A0' after the HELLO file's name. Then type in 19 '88's' and check
|
|
your work by counting up the inverse 'H's' which will have appeared in the
|
|
ASCII value for CTRL H.
|
|
|
|
Having done this, you now need to let D.O.S. in on your little secret
|
|
so that it can recognize HELLO on boot-up. So what you now have to do is
|
|
change the D.O.S. record of the HELLO file's as described a couple of
|
|
sections back under "Switching the HELLO file". Follow those instructions to
|
|
read in track $01, sector $09 and add 19 '88's' after the HELLO program's
|
|
name. The program will run automatically when you boot the disk, but of
|
|
course, D.O.S. will ignore any direct commands referring to HELLO, since
|
|
HELLO now contains 19 extra control characters.
|
|
|
|
A couple of points are worth noting here. First of all, it seems that
|
|
19 '88's' is always the correct formula, regardless of the file name's length
|
|
(but you can't hide files whose names are longer than 11 letters due to the
|
|
30 character maximum permitted by D.O.S.). Secondly, the reason this method
|
|
works is that CTRL H's output backspaces to the monitor. So what happens is
|
|
that the HELLO file's name gets printed for a tiny fraction of a second, too
|
|
quick for anyone to spot it. Then along comes the next filename to completel
|
|
y
|
|
overwrite
|
|
it.
|
|
|
|
Changing D.O.S. Error Messages
|
|
|
|
If you feel capable of a more elequent trun of phrase then the author of
|
|
Apple D.O.S., you might like to change the wording of some of the D.O.S.
|
|
error messages. These begin on track $01, sector $08, byte $75, and end on
|
|
the next sector ($09), byte $3D. So let's assume, for example, that you want
|
|
to change I/O ERROR message to CRASH OUT (clearly a far more decriptive
|
|
choice). Start by reading in track $01, sector $08. The message starts in
|
|
line
|
|
$C8.
|
|
|
|
C8:41 54 43 C8 49 2F 4F 20:ATCHI/O :
|
|
^^
|
|
|
|
Position the cursor over the '49', press SHIFT 7 (the ' sign) to go into
|
|
normal ASCII mode, and type "CRASH OU". Now press CTRL @, followed by SHIFT
|
|
2 (the " sign) to switch to high ASCII (the last character is in high ASCII
|
|
to flag the end of the message). Type in the final 'T' and write the sector
|
|
back. Boot the disk, leave the drive door open, and type "LOAD HELLO". Your
|
|
altered message should quickly appear.
|
|
|
|
This can be done with any of the error messages. Just remember to end
|
|
up with high ASCII character, and make sure your own message's does not
|
|
exceed the one you are
|
|
replacing.
|
|
|
|
Some Ideas for Advanced Programmers
|
|
|
|
Here are a few Tricky Dick tidbits that you assembly language programmer
|
|
s
|
|
may find useful. And even if you don't know your way around an assembler too
|
|
well yet, some of these may prove helpful.
|
|
|
|
When you have one of the C.I.A. modeules in memory, hitting CTRL E
|
|
causes Tricky Dick to jump to it and begin execution. This feature makes it
|
|
possible for you to install your own programs and access it with the same
|
|
instructions. Furtermore, you can easily interface your code with Tricky
|
|
Dick to call Tricky's internal routines.
|
|
|
|
The first thing Tricky Dick does on CTRL E is attempt to distinguish a
|
|
C.I.A. module from left-over garbage in RAM. In order to do this, it EOR's
|
|
the byte at $8000 with the one at $8001, then CMP's this with the byte at
|
|
$8002. If a match is found, it JSR's to $8003 where the modules' code
|
|
begins. If a match does not occur, a tone is sounded and normal operation is
|
|
resumed. To use the CTRL E hook, you need to assemble your programs to run
|
|
at this address and set up the first 3 bytes accordingly.
|
|
|
|
Tricky Dick contains both a 3.3 and a 3.2 RWTS. The 3.3 version begins
|
|
at $3800, and the 3.2 at $3000. They both use the same IOB which starts at
|
|
$815, and share the device characteristics table which starts at $826. The
|
|
information on these two lists is in exactly the same order you would
|
|
normally expect. A JSR to $121f invokes a subroutine which looks at $82A to
|
|
determine which D.O.S. version has been selected, then calls the
|
|
appropriate RWTS. Reading or writing with the RWTS will be done using the
|
|
D.O.S. marks shown in Tricky Dick's display. Tricky Dick stores its sector
|
|
data into a buffer starting at $2E00.
|
|
|
|
If you want to BSAVE Tricky Dick any patches or changes to it, use
|
|
A$803, L$3800.
|
|
|
|
You can call each of the 3 versions of RWTS in the machine
|
|
independently. Thus, you could, for example, use the D.O.S. RWTS at $B800
|
|
to read a disk, and one of the Tricky Dick RWTS's to write it out again or
|
|
vice versa. With Tricky Dick and a module in memory, there is still free
|
|
core from $4000 to $7FFF for use as a buffer or anything else. After your
|
|
program has done its thing, it can return control to Tricky Dick at any time
|
|
with an
|
|
RTS.
|
|
|
|
Moving Closer to the Disk
|
|
|
|
Well, that just about loses this file on Tricky Dick for now, though I'l
|
|
l
|
|
be returning to some of this utility's more sophisticated capabilities when I
|
|
show you how to work on copy protected disks. However, without a little help
|
|
from the other members of the C.I.A., there are just some jobs taht Tricky
|
|
can't do. You'll find that for some of the work you'll be wanting to carry
|
|
out, you're ging to need to delve into the most inaccessible parts both of
|
|
normal and abnormal disks - and make complete sense of all the information
|
|
they contain. That's why you need to meet The Linguist.
|
|
|
|
-----* APPLE MANOR (716) 654-POOF!
|
|
|
|
|
|
[5] #36 Library #8
|
|
|
|
<1-58/Last-33> <?/Q/A |