###### ### ## ###### ### ###### ###### _______|\ ### #### ### ### ## ### ### ## ### /|________ | > #### ######## ###### ### ###### #### < | | |ŻŻŻŻŻ|/ ### ### # ## ### ### ##### ### \|ŻŻŻŻŻ| | | | ###### ### ## ### ### ### ## ###### | | | |_________________________________________________________________| | | | | ZKickQuick V3.02 | |_____________________________________________________________________| ZKickQuick V3.02: No more waiting 5 seconds to reboot. ### ##### ##### ####### ____________|\ ### ### ## ### ### /|____________ | > ### ####### ###### ### < | | |ŻŻŻŻŻŻŻŻŻŻ|/ ### ### ## ### ### \|ŻŻŻŻŻŻŻŻŻŻ| | | | ###### ### ## ###### ### | | | | | | | | ##### ### ## ####### ###### ##### ##### ####### | | | | ### ## ### ## ### ### ## ### ## ### ### | | | | ### ## ### ## ### ###### ### ## ###### ### | | | | ### ## ### ## ### ### ### ## ### ### | | | | ##### ##### ### ### ##### ###### ### | | | |_________________________________________________________________| | | | | +31-721-57682 SYSOP: EMPIRE +31-721-57682 | |_____________________________________________________________________| ----------------------------------------------------------------------------- ZKick V3.02 -- Copyright (C) 1991 by Daniel Zenchelsky (V3.01 -> V3.02 Modifications by Klaus Rotter) This program may be freely copied, as long as all copyright notices are left intact and unchanged. ----------------------------------------------------------------------------- Overview -------- ZKick is a Kickstart 2.0 kickfile loader, similar to KickIt by Bryce Nesbitt, but with several advantages. First of all, ZKick will work in ANY Amiga with a 512K or larger ram board at ANY (*) memory location, no matter which slot it's in. Second, when ZKick loads Kickstart, it survives a reboot! When you hit CTRL-AMIGA-AMIGA, you are placed back in Kickstart 2.0. This feature can be disabled with the "-die" option. ZKick 3.0 is now able to relocate Kickstart 2.0 V37.175 to *ANY* location. It no longer requires ram at $200000. If you are using a previous version of Kickstart, ZKick can not relocate Kickstart and therefore you must have a 512K or greater ram board at $200000. NOTE: If you place Kickstart in the middle of a ram board, ZKick will divide the ram board into two logical devices. It will then tell you that it found more devices than physically exist. This is OK. NOTE: ZKick is only useful for developers who have an Amiga 500/2000 kickfile from Commodore. It will NOT work with a 3000 Kickstart file. (*) Due to the nature of BCPL, Kickstart 2.0 must be longword aligned. Theory of operation ------------------- ZKick works by building a table of expansion devices under Kickstart 1.3 (1.2), adding a ROMTag to the resident list, patching ColdCapture and CoolCapture, loading Kickstart 2.0 into memory at $200000 and reseting the machine. When 1.3 starts up, the ColdCapture routine skips the >512k chip ram test normally done by exec. Normally exec clears all of chip ram if it finds more than 512k of it. Then, the ColdCapture routine patches exec to keep it from stomping on the first few bytes of memory at $200000. Expansion library (still under 1.3) then configures all of the AutoConfig devices. Next, our ROMTag is executed, which detects that it is still under 1.3 and jumps to the start of Kickstart 2.0. Now we're running under Kickstart 2.0. Expansion library is the first thing executed, but it doesn't find any expansion devices because they were all configured by the 1.3 expansion library. Then the ROMTag is again executed. It adds all of the expansion devices previously configured by 1.3 expansion library to the 2.0 expansion library's ConfigDev list, and all of the memory boards to exec's memory list. From here on the normal startup is taken, during which each board is initialized. Requirements ------------ Setup A: 1) Using Kickstart 2.0 V37.175 2) Total memory must be 1.5M or greater. 3) There must be a 512k or greater ram board. OR Setup B: 1) Using Kickstart 2.0 V37.175 2) Total memory must be 1M or greater. 3) There must be a 512k or greater ram board at $C00000 (for example, an A501) OR Setup C: 1) Using another version of Kickstart 2.0 2) Total memory must be 1.5M or greater. 3) There must be a 512k or greater ram board at $200000 Usage ----- ZKick [options] kickfile Options ------- The "-v175" option enables Kickstart relocation. If you are not using Kickstart V37.175, DO NOT USE THIS OPTION! If you are using Kickstart V37.175, you must put this option before the "-c0" or "-start" option. NOTE: In order to relocate Kickstart 2.0 V37.175, I have created my own tools for determining all of the necessary relocation offsets, and included the proper offsets for V37.175 in ZKick. Although I am 99.99% sure that these are the correct offsets, they are in no way "official," and I can not and will not be held liable for any damage cause by using them. IF YOU USE THE "-v175" OPTION, YOU DO SO AT YOUR OWN RISK. However, I strongly believe that these offsets are correct, and if you have any problems, please let me know. The "-start " option allows the user to specify the starting location of Kickstart. You must have at least 512k of ram at the specified address. This option requires the "-v175" option, and is not compatible with the "-c0" option. The "-c0" option is used to load Kickstart into $C00000 memory, and will allow ZKick to be used on a 1 meg machine. Before using this command, you must remove $C00000 ram from the memory list by using "NoC0Ram." Specifically, it has the following effects: 1) sets the start address to $C00000, 2) doesn't check for ram at $C00000, 3) loads Kickstart directly into $C00000 with no buffering, and 4) patches Kickstart 2.0 to ignore $C00000 ram. This option requires the "-v175" option, and is not compatible with the "-start" option. Modification by KR: (Version 3.01 -> 3.02) Now Kickstart2.0 will not ignore *ANY* RAM at $C00000 if it is loaded using the -C0 option. It will only ignore RAM at address $C00000 to $C80000. If you have a 1.8MB RAM Board at $C00000, the memory at address $C80000 to $DBE800 will be auto-allocated. To do this I patched ZKick3.01, I only had to change a few bytes. The "-debug" option will let you see all kinds of debugging information. The "-print" option will cause ZKick to dump more debugging information to the printer. The "-die" option is used to tell ZKick not to survive reboots, so that when the machine is reset, the Kickstart ROM will be run instead. The "-mmu" option will cause ZKick to reset the MMU, if it exists. *NOTE* This is different than the previous versions. The "-noreset" option causes ZKick to skip the initial RESET and just jump into Kickstart. This option is useful with some GVP boards which do not pass the RESET signal properly. The "-nochecksum" option will keep ZKick from going to 1.3 if the Kickstart checksum is not valid. (Using the options "-noreset" and "-nochecksum" together will make ZKick behave as it did in version 2.01) KillZKick --------- Also included is the program KillZKick. KillZKick removes ZKick from memory, and reboots the system with the Kickstart ROM. NoC0Ram ------- NoC0Ram is a utility which removes $C00000 ram from the memory list. In order to do this, the machine is REBOOTED. YOU MUST USE NOC0RAM BEFORE LOADING KICKSTART INTO $C00000 RAM. It is necessary to remove this ram from the memory list before using ZKick, because if it is not removed, exec.library will put ExecBase into it, and ExecBase will then be erased when ZKick loads Kickstart. NoC0Ram will only reboot the system if you are running under 1.2/1.3 and if exec believes there is $C00000 ram. Therefore, it is safe to put in your startup-sequence, without fear of it continually rebooting the system. Troubleshooting --------------- If you can't get ZKick to work, make sure you're using a 500/2000 version of Kickstart, version 36.141 (Release 2.0) or higher. Try the following things before contacting me: 1) Try using "ZKick -noreset Kickfile" If this fails, set up your printer correctly and use the command "ZKick -debug -print Kickfile." Mail me a copy of the output along with a COMPLETE description of your hardware configuration, and hopefully I'll be able to determine the problem. Reaching me ----------- I can be reached on Bix as dzenc, on the internet as dzenc@gnu.ai.mit.edu, or on bitnet as dzenc%gnu.ai.mit.edu@mitvma.bitnet. Special thanks to ----------------- Dan Babcock for sending me an excellent article that he wrote which showed how to set up RomTag modules correctly, as well as his many ideas for bug fixes and improvements. Dave Haynie, for the MMU code which I pilfered from SetCPU. And my beta testers: Martin Allred Joanne Dow Frank Edwards Valentin Pepelea Erik Quackenbush Mike Thomas Apologies to anyone I missed. History ------- ZKick 3.01 fixes several MAJOR bugs that were in ZKick 3.0. ZKick 3.00 allows full relocation of Kickstart 2.0 V37.175, and now works on 1 Meg machines. ZKick 2.31 now properly chains the KickTag and KickMem vectors. This should increase compatibility with other boot surviving programs. ZKick 2.30 does a version check in its ColdCapture and CoolCapture routines. Before, it relied on the fact that they were only executed under 1.2/1.3. ZKick 2.24 hopefully fixes the mmu code! Now it should properly clear the mmu IF you use the "-mmu" option. Thanks to Christian Schneider for picking up my silly error. ZKick 2.23 adds support for delayed GURUs. Normally, exec pokes a "HELP" into location 0, stores the GURU info at $0100, and restarts the machine. When exec is restarted, it checks location zero for "HELP," stores the GURU info in ExecBase, and clears location 0. Later, exec pops up an alert. The problem is that ZKick starts Kickstart 2.0 before exec gets a chance to display the alert. ZKick now checks for a delayed GURU and pokes "HELP" back into location 0 before starting Kickstart 2.0. ZKick 2.22 changes the default behavior to NOT reseting the mmu, as many people said that they couldn't get it to work on 020/030 machines unless this option was off. ZKick 2.21 adds the "-print" option. ZKick 2.20 adds many new command line options. ZKick 2.10b fixes a problem which caused ZKick to configure each device twice. ZKick 2.10a fixes a typo in Zkick 2.10, which caused it not to recognize an MMU ('=' instead of '=='). ZKick 2.10 employs better error checking. In addition, if an MMU exists, it clears it before starting 2.0. ZKick 2.01 fixes a bug which caused ZKick not to work with most autoboot controllers. ZKick 2.0 is the first "public" release. -Dan ----------------------- P.S. This is my first attempt at assembler programming on the 68000. I hope you enjoy the results!!!