textfiles/apple/DOCUMENTATION/cia.tricks

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