[comp.sources.amiga] v90i276: Terminator 1.0 - virus killer, Part01/01

amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (10/11/90)

Submitted-by: RWALLACE@vax1.tcd.ie
Posting-number: Volume 90, Issue 276
Archive-name: util/terminator-1.0/part01

[ uuencoded executable enclosed  ...tad ]

This is a highly effective program to defend your system against boot block
viruses.

The Terminator can be run from the CLI or Workbench. A window will come up
with a selection of commands. Typing a number from 0 to 3 will
protect/sterilize that floppy drive, typing Q will quit the program. The
way The Terminator works is simple: It puts code in the boot block of the
designated disk which causes the screen to flash red and yellow stripes for
a fraction of a second on boot-up. The screen remains yellow for another
couple of seconds of the boot process. If a virus infects that disk it will
overwrite this code and the screen will no longer flash on boot-up. This
provides warning of the virus infection.

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  Terminator.c Terminator.doc Terminator.uu Terminator0.uu
#   Terminator1.uu bootcode.a
# Wrapped by tadguy@abcfd20 on Wed Oct 10 20:32:38 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Terminator.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Terminator.c'\"
else
echo shar: Extracting \"'Terminator.c'\" \(2440 characters\)
sed "s/^X//" >'Terminator.c' <<'END_OF_FILE'
X/*
XThe Terminator virus killer by Russell Wallace
XSee documentation file for details
XCompiled with Aztec C v3.4a using precompiled INCLUDE files and 16-bit ints
XOther module bootcode.o must be assembled with the Aztec assembler as
Xdetailed in the file bootcode.a
XNB - Must be linked with data/BSS in chip memory using +CDB with Aztec
Xlinker, because trackdisk.device buffers have to be in chip memory
X*/
X
Xstruct MsgPort *diskport;
Xstruct IOStdReq *diskreq;
Xstruct FileHandle *window;
Xint unit;   /* Disk drive 0..3 */
Xchar buffer[2];   /* Drive number */
Xlong code[256];   /* Buffer for boot block code */
Xextern long bootcode[20];   /* 80 bytes of actual code in separate module */
X
Xmain (argc,argv)
Xint argc;
Xchar **argv;
X{
X    int i;
X    for (i=0;i<20;i++)
X	code[i]=bootcode[i];	/* Copy boot code into buffer */
X	    /* This is so memory after actual code will contain zeros */
X    if (!(window=Open ("CON:0/50/640/120/The Terminator v1.0",MODE_NEWFILE)))
X	exit (30);
X    print ("The Terminator virus killer by Russell Wallace 6 Feb 1989\n\
XWARNING - DO NOT USE ON A DISK WITH A CUSTOM BOOT BLOCK!\n");
XRETYPE:
X    print ("\
XEnter a number from 0 to 3 to protect/sterilize that floppy drive\n\
Xor type Q to quit: ");
X    Read (window,buffer,2L);
X    buffer[1]=0;
X    if (buffer[0]=='q' || buffer[0]=='Q')
X    {
X	Close (window);
X	return;
X    }
X    unit=buffer[0]-'0';
X    if (unit<0 || unit>3)
X	goto RETYPE;
X    print ("Installing boot code on drive ");
X    print (buffer);
X    print ("...\n");
X
X	/* Initialize for use of trackdisk.device */
X
X    if (!(diskport=CreatePort (0L,0L)))
X    {
X	Close (window);
X	exit (30);
X    }
X    if (!(diskreq=CreateStdIO (diskport)))
X    {
X	DeletePort (diskport);
X	Close (window);
X	exit (29);
X    }
X    if (OpenDevice (TD_NAME,(long)unit,diskreq,0L))
X    {
X	DeleteStdIO (diskreq);
X	DeletePort (diskport);
X	Close (window);
X	exit (28);
X    }
X
X	/* Write stuff */
X
X    diskreq->io_Length=1024;
X    diskreq->io_Data=code;
X    diskreq->io_Command=CMD_WRITE;
X    diskreq->io_Offset=0;
X    DoIO (diskreq);
X
X	/* Force update of track buffer to disk */
X
X    diskreq->io_Command=CMD_UPDATE;
X    DoIO (diskreq);
X
X	/* Turn motor off */
X
X    diskreq->io_Length=0;
X    diskreq->io_Command=TD_MOTOR;
X    DoIO (diskreq);
X
X	/* Clean up and go back to menu */
X
X    CloseDevice (diskreq);
X    DeleteStdIO (diskreq);
X    DeletePort (diskport);
X    goto RETYPE;
X}
X
Xprint (s)
Xchar *s;
X{
X    Write (window,s,(long)strlen (s));
X}
END_OF_FILE
if test 2440 -ne `wc -c <'Terminator.c'`; then
    echo shar: \"'Terminator.c'\" unpacked with wrong size!
fi
# end of 'Terminator.c'
fi
if test -f 'Terminator.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Terminator.doc'\"
else
echo shar: Extracting \"'Terminator.doc'\" \(6067 characters\)
sed "s/^X//" >'Terminator.doc' <<'END_OF_FILE'
XThe Terminator virus killer v1.0 (C) Copyright 1989 by Russell Wallace.
XThis is a highly effective program to defend your system against boot block
Xviruses. First, I'll explain how boot block viruses work. Sectors 0 and 1
X(the first 1024 bytes) of a disk which can be inserted in response to the
XWorkbench prompt after resetting the Amiga contain code which gets executed
Xbefore anything else is done. This is useful for game title screens and the
Xlike. A virus lives on the boot block. It gets loaded into memory when the
Xmachine is booted up, and stays there until you turn the power off (most
Xviruses can survive reset). The original SCA virus would then write a copy
Xof itself into the boot block of any disk you used to boot the Amiga,
Xbefore it actually booted up. Thus the virus would spread slowly
Xthroughout your disk collection and whenever you gave a copy of an infected
Xdisk to anyone else you would give them the virus as well. More recent
Xviruses such as Byte Bandit, Byte Warrior etc. are far more virulent - they
Xinfect every disk you put in the drive, not just disks you boot from.
XUnlike the situation on the IBM and Macintosh, most Amiga viruses do no
Xdeliberate damage but they can still accidentally crash your system. More
Ximportantly if a program such as a game is using the boot block for
Xsomething and the virus writes a copy of itself into the boot block, it
Xwill destroy whatever is already there.
X
XThe Terminator can be run from the CLI or Workbench. A window will come up
Xwith a selection of commands. Typing a number from 0 to 3 will
Xprotect/sterilize that floppy drive, typing Q will quit the program. The
Xway The Terminator works is simple: It puts code in the boot block of the
Xdesignated disk which causes the screen to flash red and yellow stripes for
Xa fraction of a second on boot-up. The screen remains yellow for another
Xcouple of seconds of the boot process. If a virus infects that disk it will
Xoverwrite this code and the screen will no longer flash on boot-up. This
Xprovides warning of the virus infection. Eliminating the virus is slightly
Xmore complex. The basic idea is that you have to overwrite the virus code
Xin the boot block with something harmless - the normal method is to use the
XAmigaDOS INSTALL command to put normal boot code in, but you can simply use
XThe Terminator to replace the code to flash the screen on boot-up. The
Xproblem is that while the virus is in memory, it will probably block any
Xattempt to overwrite its code in the boot block. The solution is as
Xfollows: Turn your Amiga off and on again to clear the virus out of memory
X(most viruses can survive an ordinary reset). Boot up with a disk you are
Xsure is free of infection. Write-protecting disks will prevent
Xthem being infected, and using The Terminator on them before you
Xwrite-protect them will provide confirmation that the disk is still clean
Xon boot-up. Once you have rebooted with the clean disk, load up The
XTerminator and use it on all the infected disks to kill the virus.
X
XSo, to summarize: Use The Terminator on all your normal bootable disks. If
Xany of them ever stop flashing red and yellow stripes on the screen on
Xboot-up you have a virus. At least one of the disks should be
Xwrite-protected after using The Terminator on it to prevent it ever getting
Xinfected. Turn the power off and on again, re-boot with a write-protected
Xsystem disk, load up The Terminator and use it on all infected disks.
X
XOther virus killers such as VirusX are designed to detect specific viruses
Xin memory. This is fine for use against those viruses but if a new one or a
Xmutant strain of an old one is written which the virus killer does not know
Xabout, it will be useless. The Terminator will protect against any
Xboot block virus. It also does not consume any memory or disk space and
Xonly adds a fraction of a second to your boot up time, because it doesn't
Xput anything in your startup-sequence. Virus killers that look for
Xnonstandard boot blocks can give false alarms if they see a harmless
Xnonstandard boot block. The Terminator can't give any false alarms because
Xanything that overwrites the flashing screen code in the boot block without
Xyour knowledge is almost by definition a virus.
X
XWARNING: DO NOT USE THE TERMINATOR ON ANY DISKS WITH CUSTOM BOOT BLOCKS!
XMost games put code in the boot block. Using The Terminator on these disks
Xwill overwrite the boot block and destroy the game. Note that if any game
Xis still working after being infected with the virus, it must not have had
Xany code in the boot block otherwise the virus would have destroyed it, so
XThe Terminator can be used to kill the virus.
X
XThe Terminator may be freely used, copied and distributed. The source code
Xmay be used as a source of programming information. If you find it useful
X(e.g. if it saves your system from virus infection), I would appreciate it
Xif you would send a donation of about 10 pounds (US $15) to me:
XRussell Wallace, 24 Lower Georges St, Dunlaoghaire, Co. Dublin, Ireland.
XIn return I will send you a disk of my latest shareware/public domain
Xprograms including the latest version of The Terminator. When distributing
Xthis program please also distribute the source code. The reason for this is
Xthat there are several programs around which actually infect disks under the
Xpretense of killing viruses. The source code has to be available to prove
Xthat the program does what it says it does.
X
XThe Terminator provides an almost invulnerable defense against boot block
Xviruses - the only way anything could get past it unnoticed is if the virus
Xitself flashed the screen red and yellow if it noticed that The Terminator
Xwas there before it. The present version provides no protection against
Xviruses which attach themselves to program files. Later versions hopefully
Xwill. In order for this defense to be more effective please send me a copy
Xof any such virus you come across - even if you get infected by a boot
Xblock virus, please send me a copy before you wipe it out. I need viruses
Xto test my virus killer on.
X
XSo long, and happy virus hunting!
X
END_OF_FILE
if test 6067 -ne `wc -c <'Terminator.doc'`; then
    echo shar: \"'Terminator.doc'\" unpacked with wrong size!
fi
# end of 'Terminator.doc'
fi
if test -f 'Terminator.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Terminator.uu'\"
else
echo shar: Extracting \"'Terminator.uu'\" \(4652 characters\)
sed "s/^X//" >'Terminator.uu' <<'END_OF_FILE'
Xbegin 644 Terminator
XM```#\P`````````#``````````(```,,0``!*0````$```/I```##$[Z`SY.'
XM5?_^0FW__C`M__Y(P.6`0>R``C(M__Y(P>6!0^R`IB.P"``8`%)M__X,;0`40
XM__YMUDAX`^Y(>@&Z3KH(_%!/*4"`EF8*/SP`'DZZ!VY43TAZ`<5.N@+`6$]("
XM>@(O3KH"MEA/2'@``DAL@(PO+("63KH(X$_O``Q"+("-#"P`<8",9P@,+`!1G
XM@(QF#B\L@)9.N@B"6$].74YU$"R`C$B`D'P`,#E`@(I*;("*;:P,;``#@(INS
XMI$AZ`BE.N@):6$](;(",3KH"4%A/2'H"-$ZZ`D983T*G0J=.N@C04$\I0(".4
XM9A0O+("63KH(*EA//SP`'DZZ!L943R\L@(Y.N@F66$\I0("29AXO+(".3KH),
XM*%A/+RR`EDZZ!_Q83S\\`!U.N@:85$]"IR\L@)(P+("*2,`O`$AZ`<].N@J`J
XM3^\`$$J`9R@O+("23KH)8%A/+RR`CDZZ".)83R\L@)9.N@>V6$\_/``<3KH&P
XM4E1/(&R`DB%\```$```D0>R`IB)L@)(C2``H(&R`DC%\``,`'"!L@))"J``L\
XM+RR`DDZZ";)83R!L@)(Q?``$`!PO+("23KH)GEA/(&R`DD*H`"0@;("2,7P`\
XM"0`<+RR`DDZZ"8)83R\L@)).N@>X6$\O+("23KH(REA/+RR`CDZZ"$Q83V``A
XM_FI#3TXZ,"\U,"\V-#`O,3(P+U1H92!497)M:6YA=&]R('8Q+C``5&AE(%1E%
XM<FUI;F%T;W(@=FER=7,@:VEL;&5R(&)Y(%)U<W-E;&P@5V%L;&%C92`V($9EG
XM8B`Q.3@Y"E=!4DY)3D<@+2!$3R!.3U0@55-%($].($$@1$E32R!7251(($$@A
XM0U535$]-($)/3U0@0DQ/0TLA"@!%;G1E<B!A(&YU;6)E<B!F<F]M(#`@=&\@4
XM,R!T;R!P<F]T96-T+W-T97)I;&EZ92!T:&%T(&9L;W!P>2!D<FEV90IO<B!TE
XM>7!E(%$@=&\@<75I=#H@`$EN<W1A;&QI;F<@8F]O="!C;V1E(&]N(&1R:79E:
XM(``N+BX*`'1R86-K9&ES:RYD979I8V4`3E4``"\M``A.N@2(6$](P"\`+RT`G
XM""\L@)9.N@8R3^\`#$Y=3G5A<$/L@%9%[(!6M<EF#C(\`1-K"'0`(L)1R?_\B
XM*4^`5BQX``0I3H!:2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.(
XMKOYH*4"`7F8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``C
XM?_Y.=4Y5```O"DAY``$``#`L@%+!_``&+P!.N@=R4$\I0(!B9A1"ITAY``$`.
XM`$ZZ!9103RYL@%9.=2!L@&)":``$(&R`8C%\``$`$")L@&(S?``!``H@;(!6'
XM("R`5I"H``10@"E`@&8@;(!F(+Q-04Y80J=.N@=`6$\D0$JJ`*QG+B\M``PO.
XM+0`(+PI.N@"R3^\`##E\``&`:B!L@&(`:(````0@;(!B`&B````*8$1(:@!<^
XM3KH'D%A/2&H`7$ZZ!RI83RE`@&P@;(!L2J@`)&<0(&R`;")H`"0O$4ZZ!)18L
XM3R\L@&PO"DZZ`EA03REL@&R`<$ZZ!(@@;(!B((!.N@28(&R`8B%```9G%DAX9
XM`^U(>@`L3KH$=%!/(&R`8B%```PO+(!P/RR`=$ZZ^R)<3T)G3KH"U%1/)%].-
XM74YU*@!.50``2.<,,"1M`!`@;0`(("@`K.6`*``@1"`H`!#E@"9`$!-(@$C`)
XMT*T`#%2`.4"`=D*G,"R`=DC`+P!.N@804$\I0(!X9@A,WPPP3EU.=1`32(`_)
XM`"!+4H@O""\L@'A.N@%$3^\`"DAZ`3H0$TB`2,#0K(!X+P!.N@%X4$\_+0`.1
XM+PHO+(!X3KH!1$_O``I";(!T)FR`>"1+$!-(@#H`L'P`(&<8NGP`"6<2NGP`:
XM#&<,NGP`#6<&NGP`"F8$4HM@V`P3`"!M>@P3`")F+E*+($M2BQ`02(`Z`&<>U
XM($I2BA"%NGP`(F80#!,`(F8$4HM@!D(J__]@`F#68#@@2U*+$!!(@#H`9R:ZB
XM?``@9R"Z?``)9QJZ?``,9Q2Z?``-9PZZ?``*9P@@2E**$(5@SB!*4HI"$$I%W
XM9@)3BU)L@'1@`/]:0A)"IS`L@'120$C`Y8`O`$ZZ!/I03RE`@'!F"$)L@'1@:
XM`/[D>@`F;(!X8!XP!4C`Y8`@;(!P(8L(`"\+3KH!-EA/4D!(P-?`4D6Z;(!TX
XM;=PP!4C`Y8`@;(!P0K`(`&``_J8@`$SO`P``!"`(,B\`#&`"$-E7R?_\9P92!
XM06`"0AA1R?_\3G4P/'__8`0P+P`,(&\`!$H89OQ32")O``A30!#95\C__&<"8
XM0A`@+P`$3G4@;P`$(`@B;P`($-EF_$YU3E4``$CG#C`D;0`(0J=(>@".3KH$X
XMR%!/*4"`FF8(3-\,<$Y=3G4@;0`,(F@`)"\I``1.N@3V6$\H`&=22'H`;2!$M
XM+R@`-DZZ!,A03R9`2H!G-$AX`^TO"TZZ`>Y03RP`9R0@!N6`*@`@125H``@`Q
XMI"5&`)Q(>`/M2'H`.$ZZ`<I03R5``*`O!$ZZ!)183R\L@)I.N@(26$]"K(":&
XM8(!I8V]N+FQI8G)A<GD`5TE.1$]7`"H`(&\`!"`(2AAF_)'`(`A3@$YU3E4`?
XM`$JL@)YG!B!L@)Y.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JLX
XM@&)G*'@`8`H_!$ZZ`-!43U)$N&R`4FWP,"R`4L'\``8O`"\L@&).N@-N4$]*Y
XMK("B9P8@;("B3I!*K(!\9PHO+(!\3KH!<%A/2JR`@&<*+RR`@$ZZ`6!83TJLI
XM@(1G"B\L@(1.N@%06$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].[
XM<TJL@&QF,$JL@'AG*#`L@'9(P"\`+RR`>$ZZ`O103S`L@'120$C`Y8`O`"\LZ
XM@'!.N@+>4$]@#DZZ`LHO+(!L3KH#.EA/("W__"YL@%9.=2@?3EU.=4Y5``!('
XMYPX@."T`"#`$P?P`!B1`U>R`8DI$;0JX;(!2;`1*DF80.7P``H"(</],WP1P*
XM3EU.=3`J``3`?(``9@@O$DZZ``Y83T*2<`!@X$[Z``(B+P`$+&R`7D[N_]PB&
XM+P`$+&R`7D[N_X(L;(!>3N[_RD[Z``),[P`&``0L;(!>3N[_XBQL@%Y.[O_$X
XM3OH``DSO``X`!"QL@%Y.[O_63OH``DSO``X`!"QL@%Y.[O_02.<!!$SO((``%
XM#"QL@%I.KO^43-\@@$YU(F\`!"QL@%I.[OX^3OH``B)O``0L;(!:3N[^8DY5J
XM``!(YP@@2'C__TZZ`-!83R@`L+S_____9@IP`$S?!!!.74YU2'D``0`!2'@`T
XM(DZZ`6!03R1`2H!F#"\$3KH!IEA/<`!@UB5M``@`"A5M``\`"15\``0`"$(J`
XM``X51``/0J=.N@%46$\E0``02JT`"&<*+PI.N@!:6$]@"DAJ`!1.N@%Z6$\@$
XM"F"23E4``"\*)&T`"$JJ``IG""\*3KH!EEA/%7P`_P`()7S_____`!1P`!`J0
XM``\O`$ZZ`2I83TAX`"(O"DZZ`0I03R1?3EU.=2)O``0L;(!:3N[^GB`O``0LT
XM;(!:3N[^MDY5``!(>``P+RT`"$ZZ`!I03TY=3G5.50``+RT`"$ZZ`$Q83TY=)
XM3G5.50``+PI*K0`(9@AP`"1?3EU.=4AY``$``2\M``Q.N@!@4$\D0$J`9@1PG
XM`&#@%7P`!0`(-6T`#@`2)6T`"``.(`I@RDY5```O"B1M``@@"F8&)%].74YU8
XM%7P`_P`()7S_____`!0E?/____\`&'``,"H`$B\`+PI.N@!&4$]@TD[Z``),W
XM[P`#``0L;(!:3N[_.DCG`P`B;P`,+&R`6DZN_CA,WP#`3G5.^@`"(F\`!"QLU
XM@%I.[O[:+&R`6D[N_WQ.^@`"(F\`!"`O``@L;(!:3N[_+B`O``0L;(!:3N[^G
XML"!O``0L;(!:3N[^C"!O``0@B%B00J@`!"%(``A.=2!O``1,[P(!``@B+P`0Z
XM+&R`6D[N_D0L;(!:(F\`!"`O``A.[OW8(F\`!"QL@%I.[OZ8(F\`!"QL@%I.-
XM[OZ&(&\`!"QL@%I.[OZ`3.\#```$+&R`FD[N_Z`@;P`$+&R`FD[N_Z8@;P`$Y
XM+&R`FD[N_[(``````^P````!`````0```[0````````#\@```^H````51$]3D
XM`(6PE>P```-P<%`R/`#(,_P/``#?\8!1R?_V,CP`R#/\#_``W_&`4<G_]E'(8
XM_]Y#^@`03J[_H"!`(&@`%G``3G5D;W,N;&EB<F%R>0``%``````#\@```^L`6
X'```!```#\J[_C
X``
Xend
Xsize 3292
END_OF_FILE
if test 4652 -ne `wc -c <'Terminator.uu'`; then
    echo shar: \"'Terminator.uu'\" unpacked with wrong size!
fi
# end of 'Terminator.uu'
fi
if test -f 'Terminator0.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Terminator0.uu'\"
else
echo shar: Extracting \"'Terminator0.uu'\" \(561 characters\)
sed "s/^X//" >'Terminator0.uu' <<'END_OF_FILE'
Xbegin 644 Terminator.doc.info
XMXQ```0``````S``>`"@`%0`$``,``0#"AC``````````````````````````;
XM````!`@`P>,0`````````,@````3```````````````````````H`!4``@`!;
XM>Z@#```````````````____,```____/```____/P``X`__/\``____````XU
XM`____``______``______``_A`#`?``______``Y`(``?``______``X``!`)
XM?``______``______``___X`?``______``______`````````````````#_3
XM___\``#````S``#````PP`#````P,`#'_``P#`#````__P#'_````P#``````
XM`P#``````P#`>_\_@P#``````P#&_W__@P#``````P#'__^_@P#``````P#`8
XM`````P#```'_@P#``````P#``````P#______P`````````````+.DUO<W0O>
X%36]S=`#`C
X``
Xend
Xsize 365
END_OF_FILE
if test 561 -ne `wc -c <'Terminator0.uu'`; then
    echo shar: \"'Terminator0.uu'\" unpacked with wrong size!
fi
# end of 'Terminator0.uu'
fi
if test -f 'Terminator1.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Terminator1.uu'\"
else
echo shar: Extracting \"'Terminator1.uu'\" \(1124 characters\)
sed "s/^X//" >'Terminator1.uu' <<'END_OF_FILE'
Xbegin 644 Terminator.info
XMXQ```0``````-0`5`#H`*P`%``,``0#!XX``````````````````````````0
XM`````[P``````````````#$````*```````````````````````Z`"H``@`!A
XM;$@#``````````!X<````````/_````````!@P````````,&`````````_P`J
XM```````"&`````````,P`````````<`````````!P````$````/``A``````D
XM!Z`````````$(`P```````0($`````$`"ZP0!````B`E@D`!```"$B8""3@`&
XM`$`0(Q"`H````($@RXH`@````OD(`@C````L@C\*``0``!$`"@D!```!`!:`=
XM"`````````7P`````0@P``@``````"`#"``````B@('X`````!```#``````$
XM!``#\`````(``!_X````````8!@`````@`#`,````````?_@```````#`,``;
XM``````(!@````````_X````````&&`````````1P````````!X`````````.K
XM`````````!L`````````/X`````````@P````````````````````#X`````X
XM`````````````````````````?```````````````````````````````(``Q
XM`````````````````````!```````8``````````````````````````````1
XM`R`0`````````$``````$``"`0`````0(A````````$@`P```````O@``@@`P
XM````@`,*`````!$```````````(```````````#P``````@``````````"``X
XM```````````@`````!````````````````````(```'@````````````````3
XM`````````````'^``````````````````````````````?@`````````````X
XM`````````````````@``````````````````````````````#```````````.
X%`````````
X``
Xend
Xsize 770
END_OF_FILE
if test 1124 -ne `wc -c <'Terminator1.uu'`; then
    echo shar: \"'Terminator1.uu'\" unpacked with wrong size!
fi
# end of 'Terminator1.uu'
fi
if test -f 'bootcode.a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bootcode.a'\"
else
echo shar: Extracting \"'bootcode.a'\" \(1048 characters\)
sed "s/^X//" >'bootcode.a' <<'END_OF_FILE'
X;Code for boot block to put red and yellow stripes on the screen
X;by Russell Wallace 6 Feb 1989
X;This code was assembled with Aztec Assembler 3.6a, linked then disassembled
X;with DisAsm. The hex dump of the code was typed into CMon, a boot checksum
X;was calculated and the 1K boot block was saved to a file. The first 80
X;bytes of the file were chopped off with Cut into another file and this was
X;then converted with my File2Manx program into an object file for linking
X;with the Aztec linker 3.4a. An involved process but you can assemble this
X;file then verify that the code produced is the same as the code placed in
X;the boot block by the program.
X
X_LVOFindResident		equ		-96
X
X		moveq		#80,d0
Xloop
X		move.w		#200,d1
Xloop1
X		move.w		#$0f00,$dff180	;Make screen red
X		dbf		d1,loop1
X		move.w		#200,d1
Xloop2
X		move.w		#$0ff0,$dff180	;Make screen yellow
X		dbf		d1,loop2
X		dbf		d0,loop
X
X		lea		dos_name,a1	;Do normal boot sequence
X		jsr		_LVOFindResident(a6)
X		move.l		d0,a0
X		move.l		22(a0),a0
X		moveq		#0,d0
X		rts
X
Xdos_name	dc.b		'dos.library',0
X
END_OF_FILE
if test 1048 -ne `wc -c <'bootcode.a'`; then
    echo shar: \"'bootcode.a'\" unpacked with wrong size!
fi
# end of 'bootcode.a'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.