Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (02/10/90)
Submitted-by: mjl@alison.at (Martin J. Laubach) Posting-number: Volume 90, Issue 061 Archive-name: kernel/cvbr [ uuencoded executable included. ...tad ] This is a small tool that will move the exception vector table (on 68010 or higher). mjl #!/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: Vbr.Asm Vbr.uu vbr.doc # Wrapped by tadguy@xanth on Fri Feb 9 15:27:53 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Vbr.Asm' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Vbr.Asm'\" else echo shar: Extracting \"'Vbr.Asm'\" \(2540 characters\) sed "s/^X//" >'Vbr.Asm' <<'END_OF_FILE' X* X* Change the vector base register on 68010+ X* X* by Martin J. Laubach X* X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X X incdir "inc:include.i" X X include "exec/execbase.i" X include "exec/libraries.i" X include "exec/tasks.i" X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X X xdef main X X xref _AbsExecBase X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X Xcall macro X xref _LVO\1 X jsr _LVO\1(a6) X endm X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X Xstdout equr d7 XDosBase equr a5 XTask equr a4 X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X Xmain: move.l _AbsExecBase,a6 X lea DosName,a1 X moveq #0,d0 X call OpenLibrary ; Open DOSBase to chat with user X move.l d0,DosBase X tst.l d0 X beq exit X X move.l d0,a6 X call Output ; get stdout X move.l d0,stdout X X move.l d0,d1 X move.l #SignOn,d2 X moveq #SignOnEnd-SignOn,d3 X call Write ; say hello X X move.l _AbsExecBase,a6 X cmp.w #33,LIB_VERSION(a6) X bls noversion ; check for the right kickstart X X btst.b #AFB_68010,AttnFlags+1(a6) X beq novbr ; and the right processor X X move.l a5,a0 X lea getvbr,a5 X call Supervisor ; become SUPERMAN! X X tst.l d4 X bne.s already ; vbr already set X X move.l #$400,d0 X moveq #0,d1 X call AllocMem ; get memory block for vectors X move.l d0,Memory X beq.s nomem X X sub.l a0,a0 X move.l Memory,a1 X move.l #$400,d0 X call CopyMem ; now copy the exception vectors X X move.l Memory,d4 X move.l a5,a0 X lea setvbr,a5 X call Supervisor X Xexit0: move.l DosBase,a1 X move.l _AbsExecBase,a6 X call CloseLibrary ; clean up X Xexit: moveq #0,d0 X rts X Xgetvbr: move.l a0,a5 X movec.l vbr,d4 X rte X Xsetvbr: move.l a0,a5 X movec.l d4,vbr X rte X Xalready: X move.l d4,d5 X X moveq #0,d4 X move.l a5,a0 X lea setvbr,a5 X call Supervisor X X move.l d5,a0 X sub.l a1,a1 X move.l #$400,d0 X call CopyMem X X move.l d5,a1 X move.l #$400,d0 X call FreeMem X X move.l #Already,d2 X moveq #AlreadyEnd-Already,d3 X bra.s Panic X Xnomem: move.l #NoMem,d2 X moveq #NoMemEnd-NoMem,d3 X bra.s Panic X Xnovbr: move.l #ProcErr,d2 X moveq #ProcErrEnd-ProcErr,d3 X bra.s Panic X Xnoversion: X move.l #VerErr,d2 X moveq #VerErrEnd-VerErr,d3 XPanic: move.l DosBase,a6 X move.l stdout,d1 X call Write X bra.s exit0 X X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; X XMemory: dc.l 0 XOldTrap: dc.l 0 X XDosName: dc.b 'dos.library',0 XSignOn: dc.b 'cVBR (c) Copyright 1989 by Martin J. Laubach',10 XSignOnEnd: XVerErr: dc.b '*** You need at least version 1.2 of the OS ' X dc.b 'to use cVBR',10 XVerErrEnd: XProcErr: dc.b '*** You really should have an 68010 to run cVBR',10 XProcErrEnd: XNoMem: dc.b '*** You haven't got $400 more bytes...',10 XNoMemEnd: XAlready: dc.b '*** VBR already changed, reverting to normal',10 XAlreadyEnd: END_OF_FILE if test 2540 -ne `wc -c <'Vbr.Asm'`; then echo shar: \"'Vbr.Asm'\" unpacked with wrong size! fi # end of 'Vbr.Asm' fi if test -f 'Vbr.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Vbr.uu'\" else echo shar: Extracting \"'Vbr.uu'\" \(912 characters\) sed "s/^X//" >'Vbr.uu' <<'END_OF_FILE' Xbegin 664 Vbr XM```#\P`````````#``````````(```!\``````````````/I````?"QY````$ XM!$/Y```!%'``3J[]V"I`2H!G``"&+$!.KO_$+@`B`"0\```!('8M3J[_T"QY& XM````!`QN`"$`%&,``+P(+@```2EG``"H($U+^0```*).KO_B2H1F6"`\```$= XM`'(`3J[_.B/````!#&=XD<@B>0```0P@/```!`!.KOV0*#D```$,($U+^0``_ XM`*I.KO_B(DTL>0````1.KOYB<`!.=2I(3GI(`4YS*DA.>T@!3G,J!'@`($U+5 XM^0```*I.KO_B($63R2`\```$`$ZN_9`B12`\```$`$ZN_RXD/````<)V+6`<< XM)#P```&U=@U@$B0\```!A78P8`@D/````4UV."Q-(@=.KO_08(8`````````N XM`&1O<RYL:6)R87)Y`&-60E(@*&,I($-O<'ER:6=H="`Q.3@Y(&)Y($UA<G1IV XM;B!*+B!,875B86-H"BHJ*B!9;W4@;F5E9"!A="!L96%S="!V97)S:6]N(#$N* XM,B!O9B!T:&4@3U,@=&\@=7-E(&-60E(**BHJ(%EO=2!R96%L;'D@<VAO=6QDD XM(&AA=F4@86X@-C@P,3`@=&\@<G5N(&-60E(**BHJ(%EO=2!H879E;BHJ*B!6" XM0E(@86QR96%D>2!C:&%N9V5D+"!R979E<G1I;F<@=&\@;F]R;6%L"@````/L' XM````#``````````(````)@```$X```!H````<@```((```"*````N@```-X`& XK``#H````\@```/P````````#\@```^D````````#\@```^H````````#\MX`L X`` Xend Xsize 628 END_OF_FILE if test 912 -ne `wc -c <'Vbr.uu'`; then echo shar: \"'Vbr.uu'\" unpacked with wrong size! fi # end of 'Vbr.uu' fi if test -f 'vbr.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'vbr.doc'\" else echo shar: Extracting \"'vbr.doc'\" \(4210 characters\) sed "s/^X//" >'vbr.doc' <<'END_OF_FILE' X X X Page 1 cVBR's Documentation Page 1 X X X X X X X X X X X X X X X X X X RM X (c) Copyright 1989 by Martin J. Laubach X All rights reserved X X X X X X X X X 1. Introduction X X cVBR is a small tool that will move the exception vector table X of the CPU somewhere else than it's supposed to be. X X 2. How to X X Running vbr once will allocate some memory, copy the exception X and interrupt vector table, and then change the VBR to point X there. X X Running vbr a second time will copy the tables back where they X are supposed to be, and clear the VBR register. X X 3. Advantages X X There are two advantages I can think of: first, any program X that accesses the exception and/or interrupt vectors directly X instead of using the exec functions will cease to work -- X especially those dirty "hacker type" programs (sorry, folks). X This in my opinion, really *is* an advantage. X Second, when fast RAM is available, the new vector tables are X allocated there. This should result in faster interrupt and X exception processing, especially when there is a lot of DMA to X chip memory going on (disk accesses, blitter blittings, overscan X screens). X X X X X Advantages X X X Page 2 cVBR's Documentation Page 2 X X X 4. What X X In this archive, you should find the following files: X X vbr.doc .... What you are reading right now. X vbr.asm .... The source for rm. X vbr ........ The executable X X X 5. Where X X If you have any comments, ideas what could or should be X improved, bug reports or just like to chat a bit, please feel X free to contact me at one of the following addresses... I just X *love* receiving mail! X X Usenet: mjl@alison.at X ..!uunet!mcsun!tuvie!alison!mjl X X or X X FidoNet: "Martin Laubach" at 2:310/3.14 X X X Looking forward to reading from you, X X mjl X X X X 6. License X X This material is (c) Copyright 1989 by Martin J. Laubach -- All X rights reserved. X X It may be distributed freely as long as the following X restrictions are met: X X The distributor may charge a fee to recover distribution X costs. The fee for diskette distribution should not be more than X the cost to obtain the same diskette from Fred Fish. X X The distributor agrees to cease distributing the programs and X data involved if requested to do so by the author. X X You may copy and distribute verbatim copies of the program's X executable code and documentation as you receive it, in any X medium, provided that you conspicuously and appropriately X publish only the original, unmodified program, with all X copyright notices and disclaimers of warranty intact and X including all the accompanying documentation, example files and X anything else that came with the original. X X The author will not be liable for any damage arising from the X X X License X X X Page 3 cVBR's Documentation Page 3 X X X failure of this program to perform as described, or any X destruction of other programs or data residing on a system X attempting to run the program. While I know of no damaging X errors, the user of this program uses it at his or her own X risk. X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X License X X X Page 4 cVBR's Documentation Page 4 X X X 7. Road Map X X X X 1. Introduction .................................... 1 X 2. How to ........................................... 1 X 3. Advantages ...................................... 1 X 4. What ............................................ 1 X 5. Where ........................................... 2 X 6. License ......................................... 2 X 7. Road Map ......................................... 4 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Road Map X END_OF_FILE if test 4210 -ne `wc -c <'vbr.doc'`; then echo shar: \"'vbr.doc'\" unpacked with wrong size! fi # end of 'vbr.doc' 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@cs.odu.edu>. Mail comments to the moderator at <amiga-request@cs.odu.edu>. Post requests for sources, and general dicussion to comp.sys.amiga.