SHUTUP! TECHNICAL INFO Written by Petter N Hagen See SHUTUP.DOC textfile for USERDOCS and legal hushmush. This file last changed: 28-09-92 17:56 ------------------------------------------------------------------ ABOUT THE ANNOYING DRIVE CLICKING What this little lousy hack does, is to set the TDBP_NOCLICK (bit 0) of the byte tdu_PubFlags in the trackdisk unit structure. A short while after this bit is changed, the clicking stops. The drive will still sense the disk change. The effect lasts until reboot, the bit is turned off again, or the trackdisk unit in question is expunged, the opened again. (The filesystem usually prevents an expunge, but the filesystem may be disabled in the bootmenu.) Why all this, and why the annoying clicking? Well, the Shugart Bus type of drive that the Amiga (and most PCs) use, have a line from the drived called DISK INSERTED, (active low if I remember right). This line is low when there's a disk in the drive. When the disk is ejected, it goes high immediately. The Amiga then knows that the disk is removed, and the volume entry for the disk is removed (if there aren't any locks on it), the icon goes away. The AmigaDOS filesystem handler then usually moves the heads to track zero, at the outer edge of the disk. (That's the crancky noise you hear.) But here's the mega-misfeature! The DISK INSERTED line doesn't go low again automatically after a disk has been inserted. The heads have to be stepped first! CLICK! The Amiga trackdisk.device first step the head inwards toward track 80, then outwards again, every other click. In v2.xx it has the option to only step the heads outwards. This changes the diskchange line as before, but the drive will not move the heads outside of track 0, and yes, there's no noise. WARNING! Some very old drives may still try to move the heads beyond track zero, and hit the physical stopper, making even more noise. But I have never encountered such a drive, not even on some very early 500s. But on some old 1000s maybe... Use the -c flag on these drives. This noclick feature should have been the default in the Kickstart ROM, I can't see why they decided not to. But if you are running kickstart 2.04 or later from RAM, either from disk with ZKICK (or others), or copied from ROM to RAM on an AMIGA with MMU, then you may change it permanently. There are at least two ways: ZKICK (or similar), loading from (hard)disk: -------------------------------------------- Use NEWZAP or some other program to directly change the kickstart image file on the disk. (WARNING! CHANGE A BACKUP FILE ONLY!!) Search for the instruction BCHG #$0001,xxxx(a3) (If you don't know how to get the hex code for this instruction, you should NOT be doing this. Leave it to someone who know.) You will only find one match in the entire 2.04 kickstart, a couple of 100 bytes after the text that says "trackdisk.device version xx" or something. Change it to: BSET #$0001,xxxx(a3) Then save back the file. If you have some way of correcting the checksum of the kickstart image, correct it. Otherwise the kickstart checksum fails (red screen) when you kickstartloader boots the kickstart. ZKICK usually panics before the kick2.xx reboot point, and coldstarts the 1.3 ROM instead. This can be avoided by issuing the NOCHECKSUM parameter to ZKICK. Unfortunately this doesn't work on my version, 3.01 of ZKICK. It was supposed to ignore that the checksum of the file was bad, and calculate a new checksum to give to the kickstarts resetroutine. However a check of the NOCHECKSUM flag has been forgotten. For ZKICK 3.01 insert the following in "kickpatch.asm" if you have the source and recompile (SAS C I think) Line 40: (insert this:) tst.l _NOCHECKSUM bne.s reloc ; this relocates 2.04 kick and cheksums the next lines reads: move.l _StartKick,a0 move.l #$80000,d1 jsr CheckSum tst.l d0 beq.s reloc I finally managed to recompile in DICE after changing most of the DMAKEFILE. (Use 1.3 includes & libs) *IMPORTANT* Remeber to force ZKICK to CHIP-RAM. But you may also change the executable: Change the "beq.s reloc" to "bra.s reloc". But try the NOCHECKSUM parameter first, your version may work. The advantages of this method, is that all the drives are affected, and there also is no clicking on the bootscreen. The MMU way: ---------------------------------------- Change the instuction mentioned above, after the kickstart image has been copied from ROM. This also works with 1.2/1.3 ROMS, if you find the instruction; it is somewhere else and has a different offset. By the way, for 2.xx ROMs it's easier to use SHUTUP instead of this method, since the computer actually boots off the ROM, and using SHUTUP is usually easier than changing the kickstart image. ========================================================================= ABOUT THE WILDSTAR OPTION If the RNB_WILDSTAR bit is set in the rn_Flags field in the dos root node, dos will use * as a wildcard synonym, ie list a* = list a#?. ========================================================================== ABOUT THE OPENSCREEN PATCHER The patcher is intelligent, it will check if it is already installed. If not it will take over the jump vector. If it is, only the mode of operation will be changed. After a call is processed, control will be passed to whatever had the vector before it. At removal, nothing will happen if the code that the vector points to is not identified as the patcher. This happens if it is not installed, or somebody else has got the vector after it. If it is the patchcode, the old vector will be restored, and the code will be unloaded. NOTE: Even if the library is checksummed (I use SetFunction), some resident virus checkers may pop up a warning. The vector is -$C6 or -198 decimal in intuition.library. (AutoCLI does not pop up a warning!) How it works: If 256 lines is wanted, the ns_Height is simply changed. But to set NTSC mode, the extended field has to be used to allow a ns_ViewMode of a LONGword. The newscreen structure is copied, and extended tags added, then the modified & elongated structure is passed to intuition.