[comp.sys.amiga.tech] Resident routines.

sirius@recondo.UUCP (Mike Stilson) (06/14/89)

(Asking for this information is probably one of the larger sins an amiga
programmer can do, but what the hell...)

Does anyone out there have a good example of installing/setting up a resident
program?  So far I've managed to disassemble a virus and the ramdrive.device
to try to figure it out.  The info in the includes helps a little.  What I
need is an example of how to put it there.  I've managed to use the cool and
cold capture pointers, but they aren't what I need.  (Is WarmCapture ever
called?)  Any help would be appreciated...  (This isn't for a virus, it's for
a little utility I'm working on.  Trust me ]B-> )


--
Mike 'Sirius' Stilson      -      Sirius Software
UUCP:    sirius@recondo.UUCP
BITNET:  sirius%recondo@uunet.UU.NET
MA-BELL: (412) 793-1242 or (412) 793-5765
USNail:  1312 Universal Rd.   Penn Hills, PA  15235-3936

ccemdd@rivm.UUCP (Marco Dedecker) (06/15/89)

In article <0903.AA0903@recondo>, sirius@recondo.UUCP (Mike Stilson) writes:
> (Asking for this information is probably one of the larger sins an amiga
> programmer can do, but what the hell...)
> 
> Does anyone out there have a good example of installing/setting up a resident
> program?  So far I've managed to disassemble a virus and the ramdrive.device
> to try to figure it out.  The info in the includes helps a little.  What I
> need is an example of how to put it there.  I've managed to use the cool and
> cold capture pointers, but they aren't what I need.  (Is WarmCapture ever
> called?)  Any help would be appreciated...  (This isn't for a virus, it's for
> a little utility I'm working on.  Trust me ]B-> )
> 
> --
> Mike 'Sirius' Stilson      -      Sirius Software

Try checking out the program called 'guardian', or the bootblock from the
system Z viruskiller, they stay resident using the KickTagPtr.

Using the KickTagPtr is probably what you want for your utility.

About the WarmCapture, it is never called !! (probably reserved for use in 
future releases, or whatever)

This is all I can do for you, since I haven't had time to check this place
out myself. 

Good luck,

Marco Dedecker

shadow@pawl.rpi.edu (Deven T. Corzine) (06/17/89)

In article <1380@rivm05.UUCP> ccemdd@rivm.UUCP (Marco Dedecker) writes:
>In article <0903.AA0903@recondo>, sirius@recondo.UUCP (Mike Stilson) writes:

>>(Asking for this information is probably one of the larger sins an
>>amiga programmer can do, but what the hell...)

>>Does anyone out there have a good example of installing/setting up a
>>resident program?  So far I've managed to disassemble a virus and
>>the ramdrive.device to try to figure it out.  The info in the
>>includes helps a little.  What I need is an example of how to put it
>>there.  I've managed to use the cool and cold capture pointers, but
>>they aren't what I need.  (Is WarmCapture ever called?)  Any help
>>would be appreciated...  (This isn't for a virus, it's for a little
>>utility I'm working on.  Trust me ]B-> )

Check in the 1.3 Includes & Autodocs RKM under SumKickData() and a
couple others in the Autodocs for the exec.library.  It gives enough
information that you should be able to create resident modules.  (As
opposed to using the *Capture vectors)

>Try checking out the program called 'guardian', or the bootblock from
>the system Z viruskiller, they stay resident using the KickTagPtr.

(i.e. resident modules)

>Using the KickTagPtr is probably what you want for your utility.

It's cleaner than the *Capture vectors, and multiple applications can
use it in peaceful coexistence...

>About the WarmCapture, it is never called !! (probably reserved for
>use in future releases, or whatever)

This is strange, I have heard elsewhere also that WarmCapture is never
called.  Yet, the Exec code *does* have a call for the WarmCapture
vector.  Immediately after CoolCapture is called, InitCode() is called
to initialize all the resident modules, immediately followed by a
check (for non-zero, as with the other *Capture vectors) and a call
for WarmCapture.  What follows is clearing all registers and an
endless loop, calling Debug().  (and getting ExecBase again)  So, the
code IS there.

My guess is that AmigaDOS is stopping WarmCapture from being run.  I
see several possibilitie.  One, when the resident module for DOS
executes, it does not return.  This seems unlikely, as it would keep
subsequent resident modules in the chain from initializing.  However,
AmigaDOS harbors some serious brain-damage, so I wouldn't put it past
it.

Two, AmigaDOS changes the WarmCapture vector to point to a RemTask(0L)
call.  (The initial startup code becomes task "exec.library" when
multitasking is initialized.)  This seems most likely, as it will
prevent Debug() from running next, dumping the machine into ROM-Wack.

Three, AmigaDOS could RemTask(FindTask("exec.library")), but that
seems cumbersome and rather dangerous.

So, odds are that the reason WarmCapture is never call is that
AmigaDOS preempts it to keep the machine from falling into ROM-Wack.

This is, as I said, something of a guess, extrapolated from what
knowledge and information I DO have onhand, but it is an educated
guess.  Any CATS-type folks care to comment?  (or confirm or deny?)

>This is all I can do for you, since I haven't had time to check this
>place out myself.

That's about all I can do.

Deven
--
shadow@[128.113.10.2]   <shadow@pawl.rpi.edu> Deven T. Corzine (518) 272-5847
shadow@[128.113.10.201] <shadow@acm.rpi.edu>  2346 15th St.    Pi-Rho America
deven@rpitsmts.bitnet   <userfxb6@rpitsmts>   Troy, NY 12180-2306  <<tionen>>
"Simple things should be simple and complex things should be possible." - A.K.