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