***************************************************************************** * * * Documentation for the BeerMon V0.45 update release. Date: 19-Mar-93 * * * * - (C) 1990,1991,1992,1993 by Carnivore/BeerMacht * * * * "With my art I am the fist in the face of god" * * * * DISCLAIMER * * * * This program is FREEWARE, this means that you can copy it freely as long * * as you don't ask any more money for it than a nominal fee for copying. * * If you want to distribute this program you should keep this document and * * the schematics with it. This program cannot be used for commercial * * purposes without written permission from the author. The author is not * * responsible for any loss of data, damages to software or hardware that * * may result directly or indirectly from the use of this program. * * * * This version and all updates are published by * TRSI * * * * ***************************************************************************** It is done. The BEERMACHT presents the BeerMon, which seems to contain some outstanding features other known monitors don't have. Any hints, comments, bug reports or opinions are highly appreciated and can be made in those german BBS the users "BEERMACHT" or "CARNIVORE" appear in, prefered in these ones: INTERFACE +49 208 xxxxx (get the numbers somewhere) or THE CAULDRON +49 202 xxxxx (get the number somewhere) or ICEHOUSE +49 203 xxxxx (get the numbers somewhere) or WESTPOINT +49 211 xxxxx (get the numbers somewhere) or LAST RESORT +49 211 xxxxx (get the numbers somewhere) or BEERKRUG +49 2102 xxxxxx (just for very private usership) or PUNGENT STENCH +49 2102 xxxxxx (even more private usership :-) Now let's start with the documentation... The BeerMon is another kind of monitor compared to those of the past like C-monitor, Amon, etc. He is a monitor of the nasty type because he makes no use of any library, device or even Kickstart stuff, in fact you may rip out the Kickstart ROM once the BeerMon is running. The BeerMon includes a full screen editor which is of use in most cases. So if you got the taste of gore now here's the most important thing. If you build the hardware add-on which is described in the schematics you are able to break any program just with reset and you are able to access any byte of memory untouched. This works because the hardware contains expansion memory in which backup of workspace memory is moved. Into this memory expansion the monitor can be loaded by executing the "init"-command on this disk. If you aren't able to build this board (blame on you), you could also use the BeerMon with in some cases reduced capabilities. The executable is completely position independent and may be started just by JMPing to the startaddress to which he has been loaded. Or you set this funky bus error vector at $8 with the exception entry of the BeerMon and the magic button (see schematics) brings you to paradise. Well, this should only be a hint how to be more powerful than only starting the BeerMon from CLI, which is also possible but not the most advanced and consistent method. Note the fact, that the BeerMon has never been designed for CLI usage and therefor may have some disadvantages when you return to the CLI. So the choice is yours... ························· SUMMARY OF CHANGES ······························ - CHANGES made until V0.45 (mar 1993) - the BeerMon automagically handles ECS/AGA differences. Patching is no longer needed to obtain a BeerMon version for activated AGA chipsets. - removed an ancient bug in disk drive startup code. - the disk drive heads are repositioned before leaving the BeerMon. - removed obsolete check for $aabb at offset 8 of the header when sending SNES/MD data to Super Magicom copier (as requested by 6Pack .-). - on startup and after every warmstart ('go' command etc.) the BeerMon code and static data are checked for modification. If something is wrong a corresponding message informs you about this situation. - the command 'S' checks if the file would fit on the current disk and only saves data, if there is enough free space. - the internal mfm-routines were optimised and provide faster block and file operations now. - added command 'verify' which toggles disk verify on and off. - all dos-related operations now allow the user to select between retry, ignore and abort, if a read or write error occured. Please note, that if a write error disappeares after a retry operation, it's likely that the defective area of the disk now is within the unused mfm gap and may show again the next time you attempt to write to this track. - added command 'custom', which displays a list with addresses and the corresponding names of the custom chip registers - fixed BRK instruction in 6502/65SC802/65SC816 assembler and disassembler. In fact this is a 2-byte instruction with immediate byte operand now. Note that on the 6502 this was just a 1-byte instruction. - implemented 'reserved' instruction $42 of 6502/65SC802/65SC816 assembler and disassembler as 'wdm' with immediate byte operand. That's how it was described in a textfile I recently read. - the 6502/65SC802/65SC816 disassembler now comments the special SNES hardware registers. - the exception handler now knows about additional MC68040 stack frames. - added commands 'settt0', 'settt1', 'settc', 'setsrp', 'setcrp', 'setdrp' and 'setmmusr' to support immediate changes to the MMU configuration, if either a MC68851 or a MC68030 MMU is available. The command 'mmu' now reports the current configuration instead of the values of startup time. the following changes were proposed by Kelly van Vliet from Holland: - 'cop' command added, which searches for copperlists. - 'imp' and 'exp' commands added, which crunch and decrunch memory using the well known 'imploder'-algorithm. The file "explode.S" on this disk represents the decruncher's sourcecode, which you may use for your own purposes. - the prompt '>' can no longer be deleted using the backspace key - in disassembly, instructions which cause an unconditional change of program flow (bra, jmp, rte, rts, rtm, rtd, rtr) are followed by a separating line - 'type' command added, which allows viewing textfiles without having to load them to a specified memory address. The cursor advances to the beginning of the next line, if a line feed ($0A) occured, or the end of the line was reached. Text output can be canceled using the ESC-key and does not advance, as long as the right mousebutton is pressed. - the keyfunction shift-cursorright no longer puts the cursor into the last column. Now the cursor is moved behind the last character of the current line or right behind the instruction, if disassembly is active. - the BeerMon now is entirely position independent. For that reason the relocation procedure is no longer needed. As a result, the exception entry point is now located $16 bytes behind the regular entry point. Of course you may still find the tool 'hunkwizard' useful to remove the hunkstructure of the executable file. - the function keys no longer add a return character to the end of a string. If you define a function key using the command 'K' or the preferences editor BMPE and want a return at the end of a string, you now have to supply a trailing '|' character. - the command 'K' has been redefined to allow both " and ' to specify the string. As a result you may include strings embedded in "" withing a function key definition (e.g. K F1 'f 0 80000 "DEFJ"'). - the command '?' now accepts string parameters of 1 to 4 characters length, which are embedded in either "" or '' quotes. The ASCII notation of the result is also reported. - added command 'fmode' which selects the way, results of the commands 'c' and 'f' are reported. Possible modes are table (as in the past), hexdump or ASCII dump. - added commands 'bin', 'binw', 'binl', 'bint', 'binq' for binary dump with 8, 16, 32, 48 or 64 bits per line. As usual the dump can be edited. - the key combination shift-Ins (key "0" on numeric pad) toggles between overwrite mode and insert mode - added command 'match' for displaying and clearing a 100-entry matchbuffer. This matchbuffer contains the resulting addresses of the search and compare commands. - in disassembly, the address of a instruction is highlighted in the following cases: - a breakpoint is defined at this address. - a search or compare command succeeded within this instruction, the result is part of the matchbuffer. - fixed mouse-blanking bug within the command 'bpl'. - the command 'info' now also reports how many bytes may be saved on the current disk (which depends on the selected filesystem). - BMPE updated to V0.13 using GadToolsBox 1.4 - removed AGA modes from 'Mode' cycle gadget, because it became obsolte. - added checkbox for toggling disk verify. - now reflects the modified function key defaults. - added workbench startup code, it may be started by icon now. - previous preferences files may be used without changes. - CHANGES made until V0.44 (oct 1992) - BMPE updated to V0.12 using GadToolsBox 1.4 - cycle gadgets work with OS3.0, too. - added STD/AA chipset selection to the 'Mode' cycle gadget. - preferences file format remains unchanged. - added support for the A4000 AA chipset. Due to the differences in copperlist definitions, the BeerMon executable must be patched using the BMPE tool. The distributed version is set up in standard (including ECS) mode. If you are lucky to own AA chips, you must select one of the AA modes using the 'Mode' cycle gadget. If you use the ECS mode of the AA chipset, you must use a BeerMon, which has been set up for the standard chipset, of course. - redefinded the meaning of "FORCE PAL" and "FORCE NTSC" in BMPE: Both modify the BeamCon0 register of the AGNUS chip, which is vital one if you normally use a mode with a horizontal scan rate other than 15KHz, like e.g. productivity mode. The contents of this register can't be read out, which resulted in a disastrous display, when you left the BeerMon, because the scan rate remained at 15 KHz. Now the BeerMon does some magic stuff, tickeling intuition to rewrite BeamCon0 after leaving the BeerMon and going back to the shell. In the "AUTO" modes, BeamCon0 isn't modified at all, so this one doesn't need this "magic", but is unsuitable for scan rates other than 15KHz. So ONLY use one of the "FORCE" modes, if your WB is configured in a mode, other than PAL or NTSC. - fixed detection of MC68040 - improved handling of MC68040 copyback mode - on the A3000 and A4000 the GARY chip is now set up for DSACK-timeout, so you won't get any BUS error exceptions, when you access unpopulated memory locations, like you do outside the BeerMon. When leaving the BeerMon, the previous state is restored. - added movement in disassembly, hexdumps, ASCII dumps and copper dumps in whole screen pages using shift-cursorup and shift-cursordown keys. - added 'famiplay' command which transfers organised binary data to a Super Magic Drive console copier connected to the parallel port. See cable wiring at the end of this file. - changed 'ramsey' command to include chip version info (A3000/A4000 only). - added 'gary' command which reports information on the GARY chip installed (A3000/A4000 only). - added MC68040/68881/2 floating point instructions to disassembler. refer to the file M68881.asm for further information on these: - FMOVE.f ,FPn - FSMOVE.f ,FPn - FDMOVE.f ,FPn - FMOVE.f FPm,FPn - FMOVE.f FPn, - FMOVE.P FPn,{#k} - FMOVE.P FPm,{Dn} - FMOVE.L FPcr, - FMOVE.L ,FPcr - FMOVEM.X Dn, - FMOVEM.X ,Dn - FMOVEM.X list, - FMOVEM.X ,list - FMOVEM.L creglist, - FMOVEM.L ,creglist with k being a signed factor in the range -64..63. with Dn being any data register. with FPcr being one of the FPU control registers: FPCR, FPSR, FPIAR. with list being a combination of FPU data registers FPn separated by "/" or "-". with creglist being a combination of FPU control registers FPCR, FPSR, FPIAR separated by "/". with FPm, FPn being any floating point register. with f being one of b, w, l, s, d, x, p in -mode and b, w, l, s in register mode. - CHANGES made until V0.43 (aug 1992) - split up 'C' command into bitsum, bootsum, datasum and kicksum commands - added 'megasum' command, which calculates checksums of Sega Megadrive ROM images - added 'famisum' command, which calculates checksums of Famicon ROM images and reports some information on the ROM image. - added 'smdplay' and 'rawplay' commands which transfer organised and raw binary data to a Super Magic Drive console copier connected to the parallel port. See cable wiring at the end of this file. - added 'smd2raw' command which converts Super Magic Drive data to raw binary data - added complete 6502/65SC802/65SC816 assembler and disassembler for those who are interested in the machinecode of the SNES/Super Famicon game console. Disassemble the file 'G65816' using the 'u' command to view all possible instructions of these CPUs. CHANGES made until V0.42 (july 1992) - added support for the HD-compatible disk drive Chinon FB357A, which is used in recent A3000 models. If such a drive is detected, all standard DD disks inserted are treated as before, while HD disks are handled with twice the standard number of sectors per track. All disk-related commands like 'format', 's' and 'S' take care of this difference. As a side effect, the internal disk-DMA buffer constantly is twice as big as before. - the 'M' command has been redesigned to allow the HD bitmap information to fit also on a NTSC screen. The disktype,filesystem and diskinformation previously reported by this command can now accessed with the new 'info' command. - the disassembler now supports the complete set of -addressing modes. Located on this disk is a file named NewModes.asm, which shows most of the additions. Here is a small excerpt: - move.l ([address16,pc],Rn.s*k,od.w),Dn - move.l ([address16,pc],Rn.s*k,od),Dn - move.l ([address32,pc],Rn.s*k,od.w),Dn - move.l ([address32,pc],Rn.s*k,od),Dn - move.l ([address16,zpc],Rn.s*k,od.w),Dn - move.l ([address16,zpc],Rn.s*k,od),Dn - move.l ([address32,zpc],Rn.s*k,od.w),Dn - move.l ([address32,zpc],Rn.s*k,od),Dn - move.l ([id.w,An],Rn.s*k,od.w),Dn - move.l ([id.w,An],Rn.s*k,od),Dn - move.l ([id,An],Rn.s*k,od.w),Dn - move.l ([id,An],Rn.s*k,od),Dn - move.l ([address16,pc,Rn.s*k],od.w),Dn - move.l ([address16,pc,Rn.s*k],od),Dn - move.l ([address32,pc,Rn.s*k],od.w),Dn - move.l ([address32,pc,Rn.s*k],od),Dn - move.l ([address16,zpc,Rn.s*k],od.w),Dn - move.l ([address16,zpc,Rn.s*k],od),Dn - move.l ([address32,zpc,Rn.s*k],od.w),Dn - move.l ([address32,zpc,Rn.s*k],od),Dn - move.l ([id.w,An,Rn.s*k],od.w),Dn - move.l ([id.w,An,Rn.s*k],od),Dn - move.l ([id,An,Rn.s*k],od.w),Dn - move.l ([id,An,Rn.s*k],od),Dn with address16 being an address which can be reached using 16 Bit offset with address32 being an address using 32 Bit offset with id and od being values in 16 or 32 Bit format with Rn.s*k being either an address- or a data register of either word or longword size and scaled with the optional scale factor of 2,4 or 8. NOTE:zpc represents a programcounter which is assumed to be 0 for the address calculation. Each item inside the outer brackets can be omitted to create a new addressing mode like e.g.: - move.l ([address16,pc]),Dn - move.l ([An],Rn.s*k),Dn - move.l ([]),Dn NOTE:because of the obvious complexity of these modes and the parsing code needed, the assembler doesn't support them until major rework is done. Besides you are advised to get yourself the Programmers Reference Manual M68000PM/AD from a Motorola distributor. This unique manual gives many informations on the MC68000/68010/68020/68030/68040/68851 and MC68881/68882 instructions. Possibly you'll enjoy the MC68030UM/AD User Manual as well, because it contains complete informations on all addressing modes. - added CPU32 instructions to assembler and disassembler: - BGND - LPSTOP #value - TBLU.s Dm:Dn,Dx - TBLUN.s Dm:Dn,Dx - TBLS.s Dm:Dn,Dx - TBLSN.s Dm:Dn,Dx - TBLU.s ,Dx - TBLUN.s ,Dx - TBLS.s ,Dx - TBLSN.s ,Dx ;s=b/w/l NOTE: CPU32 is an universal CPU core compatible to the MC680x0 family, which gets used in the MC683xx controller series. - added MC68040 instructions to assembler and disassembler: - PFLUSHN (An) - PFLUSHAN - MOVE16 (address),(An) - MOVE16 (address),(An)+ - MOVE16 (An),(address) - MOVE16 (An)+,(address) - added MC68040/68881/2 floating point instructions to disassembler. refer to the file M68881.asm for further information on these: - FABS.f op1 FSABS.f op1 FDABS.f op1 - FACOS.f op1 - FADD.f op2 FSADD.f op2 FDADD.f op2 - FASIN.f op1 - FATAN.f op1 - FATANH.f op1 - FCMP.f op2 - FCOS.f op1 - FCOSH.f op1 - FDIV.f op2 FSDIV.f op2 FDDIV.f op2 - FETOX.f op1 - FGETEXP.f op1 - FGETMAN.f op1 - FINT.f op1 - FINTRZ.f op1 - FLOG10.f op1 - FLOG2.f op1 - FLOGN.f op1 - FLOGNP1.f op1 (Devpac V3.02 has a bug here) - FMOD.f op2 - FMUL.f op2 FSMUL.f op2 FDMUL.f op2 - FNEG.f op1 FSNEG.f op1 FSNEG.f op1 - FREM.f op2 - FSCALE.f op2 - FSGLDIV.f op2 - FSGLMUL.f op2 - FSIN.f op1 - FSINCOS.f ,FPc:FPs FSINCOS.f FPm,FPc:FPs - FSINH.f op1 - FSQRT.f op1 FSSQRT.f op1 FDSQRT.f op1 - FSUB.f op2 FSSUB.f op2 FDSUB.f op2 - FTAN.f op1 - FTANH.f op1 - FTENTOX.f op1 - FTST.f FTST.f FPm - FTWOTOX.f op1 with FPm, FPc, FPs being any floating point register with op1 being one of: ,FPm - FPm,FPc - FPm with op2 being one of: ,FPm - FPm,FPc with f being one of b, w, l, s, d, x, p in -mode and b, w, l, s in register mode. - fixed assembly and disassembly of these instructions: - PTESTR (An) (Bug in Devpac V3.02) - PTESTW (An) (Bug in Devpac V3.02) CHANGES made until V0.41 (may 1992) - hardware schematics needed some changes: (see HardIFF and HardIFF2) - 74F138 input G1 must be tied to _R/W instead of R/_W (Thanx Taipan/UFO) - both pins 30 and 32 of the RAMs should be connected to +5V, as some static RAMS use pin 30 as a second chip-select input. - support for international filesystem (new OS2.0 DOSTypes DOS\2 and DOS\3) added to all filesystem related commands. The following commands have visibly changed: - 'format', see commandlist for changes in parameters - 'install', see commandlist for changes in parameters - 'M', now also reports the filesystem (not international/international) NOTE: the BeerMon recognises the filesystem of a disk by examining the bootblock. Within AmigaDOS (read:outside the BeerMon), DOS\2 and DOS\3 disks can ONLY be used with OS 2.0 or higher. - completely rewritten clockchip handling, both the standard (A500/A2000) MSM6242 RS clockchip and the new A3000/A4000 clockchip can be used for creation date of files and disks, if they are detected and they seem to be functional. The century leap is also handled, so you may use the BeerMon until the end of the year 2077 :-) - presense of a MC68040 is detected - added MC68040 instructions to assembler and disassembler: - MOVEC reg,Rn with reg being one of SRP,URP,TC,DTT0,DTT1,ITT0,ITT1 - MOVEC Rn,reg with reg being one of SRP,URP,TC,DTT0,DTT1,ITT0,ITT1 - CINVA mode with mode being one of NC,DC,IC,BC - CPUSHA mode with mode being one of NC,DC,IC,BC - CINVP mode,(An) with mode being one of NC,DC,IC,BC - CPUSHP mode,(An) with mode being one of NC,DC,IC,BC - CINVL mode,(An) with mode being one of NC,DC,IC,BC - CPUSHL mode,(An) with mode being one of NC,DC,IC,BC - MOVE16 (Am)+,(An)+ - PTESTR (An) - PTESTW (An) - PFLUSH (An) - PFLUSHA! (named this way instead of PFLUSHA because of name conflict with the incompatible MC68851/MC68030-MMU PFLUSHA instruction) - added MC68851 MMU (only) instructions to assembler and disassembler: - PVALID An, - PFLUSHR - PFLUSHS #n,#m - PFLUSHS Dn,#m - PFLUSHS reg,#m with reg being either SFC or DFC - PRESTORE - PSAVE - PScc - PBcc.s address ,s=w/l - PDBcc Dn,address - PTRAPcc - PTRAPcc.s #value ,s=w/l where cc is one of the MMU conditioncodes: bs,bc,ls,lc,ss,sc,as,ac,ws,wc,is,ic,gs,gc,cs,cc - PMOVE mmur, with mmur being one of PSR,PCSR,CAL,VAL,SCC,AC - PMOVE ,mmur with mmur being one of PSR,PCSR,CAL,VAL,SCC,AC - added FPU instructions to assembler and disassembler: - FBcc.s address ,s=w/l where cc is one of the FPU conditioncodes: f,eq,ogt,oge,olt,ole,ogl,or,un,ueq,ugt,uge,ult,ule,ne,t sf,seq,gt,ge,lt,le,gl,gle,ngle,ngl,nle,nlt,nge,ngt,sne,st - changed disassembly of short branches from Bcc.S to Bcc.B, because this is the official syntax. the assembler accepts both versions. - 'vc' command parameter handling fixed. - assembler/disassembler validation sources ported from OMA2.0 assembler to Devpac V3.02 (because of horrid OMA bugs :-) - BMPE preferences editor was redesigned with GadToolsBox V1.3, so the version bumped to V0.11 CHANGES made until V0.40 (march 1992) - external preferences editor BMPE added, which allows you to define your personal - screenmode (PAL/NTSC, Force PAL, Force NTSC) - colours (back- and foreground RGB values in hexadecimal notation) - keymap (german or american layout) - key repeat rate (fast, medium, slow) - cpu-restrictions (standard or economy, use economy ONLY if you own a 'crippled' CPU MC68EC030 such as the infamous VXL board, which is known to miss a MMU) - 10 functionkeys The settings can be saved and loaded according to the Prefs path you specify. A modify-function then performs the patching of BeerMon executables, which are not older than this version V0.40 NOTE: BMPE NEEDS OS 2.0! - the gadtools.library and the GadToolsBox are too good to be ignored, and it's time to upgrade to OS2.0 anyway :-) - added patch area to BeerMon, which gets used by BMPE - the MMU related commands now tell you if you don't have one (just in case you didn't know it :-) - 'mmu' command reports DRP contents, if a MC68851 MMU is installed - added MMU instructions to assembler and disassembler: - PMOVE DRP, (MC68851 MMU only) - PMOVE ,DRP (MC68851 MMU only) - 'r' command now only reports those registers and flags , which are allowed with the detected CPU - occupy and exor commands changed, you now may use o, ow, ol, e, ew or el according to your intention to use a byte, word or longword argument - history function now ignores empty commandlines ^ö^ HI - when aborting the 'fi' function, the current address is reported. " PBA! - the help key now increments the help page each time it is pressed - checksum command 'C' now also calculates 256/512 KB kickstart checksums - 'i' command now shows full $100 bytes of the original vector table. CHANGES made until V0.39 (february 1992) - shift-tab keyfunction added, deletes all characters from current cursor upto the right border - history has been added: shift-keypad-8/2 (up/down) recalls upto 10 lines - cursor movement extended: shift-keypad-7/1 (home/end) places cursor in the first column of the first/last row - nop command added, it simply sets the specified number of NOP instructions - mmuon and mmuoff commands added. These allow enabling/disabling of address translations (so you may examine the A3000 ROM or deactivate other MMU setups) BTW:keep your hands of those low cost turboboards using the MC68EC030 or even the MC68EC040, sooner of later you'll regret that this CPU doesn't have a MMU! - finally adding/listing/removing of breakpoints added - completely rewritten exception handler; now works on MC68000/10/20/30 CPU and also handles FPU/MMU exceptions - cls added, clears the screen - find instruction command added. This allows you searching for special instructions using the * and ? joker. Just try something like 'fi fc0000 fc1000 "move*d?,a"' - MOVE ,SR will be disassembled correctly again. CHANGES made until V0.38 (january 1992) - presence of a MC68851 MMU or a MC68030-built-in-MMU is detected - 'r' command now also explains the CACR settings - 'R' command added, reports FPU registers in hex and scientific notation - 'mmu' command added, reports MMU registers and their bit settings - 'ramsey' command added, (only useful if you have an A3000) - renamed the 'keymap' command back to 'k', someone really seems to use it :-) - fixed a V0.36+ bug: 'x' easily crashed on machines without MC68030 - effective address info ('dv') no longer ignores index scaling - FDxx Dx,label displacement bug fixed (another bug in OMA2.0) - added FPU instructions to assembler and disassembler: - FNOP - FMOVECR #m,FPn with m being one of 0,$b-$f,$30-$3f - added MMU instructions to assembler and disassembler: - PMOVE mmur, with mmur being one of SRP,CRP,TT0,TT1,TC,MMUSR - PMOVE ,mmur with mmur being one of SRP,CRP,TT0,TT1,TC,MMUSR - PMOVEFD ,mmur with mmur being one of SRP,CRP,TT0,TT1,TC - PFLUSH #n,#m - PFLUSH Dn,#m - PFLUSH reg,#m with reg being either SFC or DFC - PFLUSHA - PLOADR #n, - PLOADW #n, - PTESTR #n,,#m,An - PTESTW #n,,#m,An - lowmem for workspace and hunk-copymem routine moved from $c0 to $100 to allow handling of FPU and MMU traps in a future version - if EXEC isn't corrupted, any even VBR value is allowed NOTE:you MUSTN'T change VBR within a routine executed with 'g' NOTE:if you change the VBR with 'r', it won't be set until 'g' is used - fixed bug in resident list display (/9), occured if bit 31 was set. - on startup, the completion of the current blitter operation is waited for. CHANGES made until V0.37 (december 1991) - the OS2.0 hardlink feature is now fully supported with both OFS and FFS. hardlinks and dirlinks are reported when using the 'dir' command. the commands 'cd','del','L' work with and without links in the usual way. - Workspace and BackupMem allocation procedure has been changed due to popular demand. Don't miss reading the decription of the 'W' command. - finally the BeerMon both works on PAL and NTSC Amigas. The NTSC mode is derived from bit 12 of VPOSR, so the agnus jumper is considered and not the BeamCon0 settings. - the presence of 1.5 MB graphics memory is detected, which is a possible configuration on the A500 plus. - the presence of a FPU and its type (MC68881/2) is reported - fixed bug where 'dir f' reported hashchainkey instead of the fileheaderextension key. - exit function 'X' now clears the Chip memory, because the OS2.0 doesn't do it anymore. The fillvalue is $ffffffff. - CloseLibrary-bug in OS2.04 bootblock removed. CHANGES made until V0.36 (november 1991) - fixed bug in ASCII-edit part of the 'm' function - fixed filesystem bug (fileheaderextension blocks were not 'official' style) - renamed some ECS registers (the new hardware reference manual is out now :-) - relaxed CIA timing values (any A1000ers out there with MatsuShit(a) drive?) - major assembler/disassembler update from old Motorola syntax to new one quick docs: offset(An) changed to (offset,An) offset(An,Rm.s) changed to (offset,An,Rm.s) ,s=w/l address(PC) changed to (address,PC) offset(PC,Rn.s) changed to (address,PC,Rn.s) ,s=w/l address changed to (address) address.w changed to (address).w - scaling now is possible: (address,An,Rm.s*k) ,k=1,2,4,8 - added FPU instructions: FDBcc Dx,address FRESTORE FSAVE FTRAPcc FTRAPcc.s #value ,s=w/l FScc where cc is one of the FPU conditioncodes: f,eq,ogt,oge,olt,ole,ogl,or,un,ueq,ugt,uge,ult,ule,ne,t sf,seq,gt,ge,lt,le,gl,gle,ngle,ngl,nle,nlt,nge,ngt,sne,st - disassembler suppresses leading 0's (e.g. '4' instead of '$0000004') - moved column of disassembler operands ('ftrapngle.l #k' looks so nice :-) - now detects and supports MC68000/10/20/30 - vbr,sfc,dfc,msp,cacr,caar are handled correctly if they are available (vbr should remain 0 until the ultimate solution has been figured out) - support for A2000A clockchip ($d80000) had to be removed, because it trapped on my A3000 - no more interference of backupmem-search with CPU data caching - support for 2MB chipmem. if available, the screen defaults to $1f4000 - cleaned up grabbing of the system a bit and the return to CLI a bit more. (but you still shouldn't use it with enforcer :-) - improved mouse-acceleration in memory view mode ('b') - power-led blink removed (wasn't that difficult...) - the reset command ('X') now works with Kick 1.2/1.3/2.04 CHANGES made since V0.28 (june 1990) upto this version 0.35 (oct 1991) - the BeerMon status is now: (C) by Carnivore/BeerMacht, but FREEWARE. - dramatic increase in scrolling speed - finally debugged 'del' function - minor debugging of (dis)assembler - diskroutines now use timer instead of delay loops. - FastFileSystem and OldFileSystem support for disks - Copper-assembler/disassembler with symbolic ECS registers - text-snapping with right mousebutton - second screen, swapping with 'shift-help' - a help-function with 'help' - added MC68010 instructions NOTE: currently on startup the VBR register MUST be set to zero (default). So don't use a 'MoveVBR'-type programm. The new registers are currently ignored, if you execute a program. You need to set them by yourself (e.g. MOVEC a0,vbr) - added MC68020 instructions (currently without extended and coprocessor instructions). Disassemble the file 'DemoCode' to get an idea of it. The sourcecode to 'DemoCode' is part of this distribution. - added 32 bit support for most functions - invalid syncs are reported - syncs can be determined (or guessed?) - format and install commands added - time and date infos are set when using format, save - start and endaddress are saved as a filecomment and are shown using the dir command. So typing 'L' + return loads the file to the propper address. - more info is given using the 'dir f' command - scrolling backwards is added, usefull in disassembly (CPU/Copper) and the memory dump commands - nice pic on startup (well, it uses no valueable ram, it's my DMAbuffer :-) - the code grew more and more, therefor a complete new hardware design, now offering 256 KB of static memory. With it $BFDxxx, $BFExxx and $DFFxxx register values appear at $F3Dxxx! BeerMon may support this feature some day. - on reset-entry, available Zorro-II(I) boards can be configured with the config command (well, there is still no HD-support, should I add the ability to use AMAX-HDdrivers? Uummmphh, not now ;-) - Bcc.L (MC68000) has been changed to Bcc.W (because .L implies the MC68020+ 32 bit offset branches) - the sourcecode isn't part of this distribution anymore, portions of it may or may not be released, if someone asks me for it. and more to mention, but I'm a bit lasy... so wait for the next update (more frequent than in the past) and spend me some beer if we happen to meet :-) ··········································································· now some general notes about the BeerMon... the mouse: enables you to set the cursor (left mousebutton). Pressing the right mousebutton stops any textoutput on screen, until it is released again. If you press the right mousebutton when no function is activated, the string below the mousepointer is copied to the current cursor position. escape key: aborts any command (even load/save...) tab key: sets the cursor to next item of data in a block (skips spaces, is useful in directory and hexdump). shift-tab deletes all characters between the current cursor position and ending with the last column. help key: a brief command summary, pressing it multiple times advances the page. shift-help swap screens 1 and 2 backspace behaves as usual shift-backspace clears screen del behaves as usual shift-del inserts spaces shift-keypad-8 goes backwards inside the history buffer. The history depth is 10 lines. shift-keypad-2 goes forwards inside the history buffer shift-keypad-0 toggles between overwrite mode and insert mode shift-cursor moves the cursor to the limit of the selected direction, with the exception of shift-cursorright, where the cursor is placed behind the last character of the current line. if the cursor has already been at the upper or lower limit, the following commands are executed in pagemode: ASCII dump, hex dump, binary dump, copper dump, MC680x0 and 6502/65SC802/65SC816 disassemblers. shift-keypad-7 moves the cursor to the first column of the first row shift-keypad-1 moves the cursor to the first column of the last row muliate: the standard mode which you usualy would enter, without freezing. freezing: is in work, not yet finished, but seems to become funky. the display: currently in pal, but there will be other options in future. the keymap: defaults to german keymap, but can be changed with "k" CPU: currently MC68000/10/20/30/40 are tested, the MC68010+ might get useful in future due to the vector base capability to trick some protections vomiting on the those pointers around $000xxx (full tracing of every prg may become possible). agnus: new angus chip is recognized and may be used with 1, 1.5 or 2MB chip memory (-> play sound, workspace). well, now we come to the command list, < > means optional parameter(s)... ----------------------------------------------------------------------------- m gives a hexdump as well as display in ASCII of specified or following memory locations. Both can be edited using the cursor. a gives a display of specified or following memory locations in ASCII. This can easily be edited using the cursor. bin gives a binary dump with 8 bits per line of specified or following memory locations. This can easily be edited using the cursor. binw gives a binary dump with 16 bits per line of specified or following memory locations. This can easily be edited using the cursor. binl gives a binary dump with 32 bits per line of specified or following memory locations. This can easily be edited using the cursor. bint gives a binary dump with 48 bits per line of specified or following memory locations. This can easily be edited using the cursor. binq gives a binary dump with 64 bits per line of specified or following memory locations. This can easily be edited using the cursor. ? value <...> returns the result of a calculation. If there is no preceeding character, "value" is interpreted as a hexadecimal value. If the preceeding character is a '#', the value is interpreted as a decimal value. If "value" is embedded in either "" or '' quotes, it is interpreted as an ASCII parameter. The operations can be one of the following: + add to - subtract * multiply by / divide by ! or with & and with = exor with < shift left "value" times > shift right "value" times The result is returned as a hexadecimal, decimal and binary values and in its ASCII representation. c addr1 addr2 addr3 compares the memory beginning with "addr1" and ending with "addr2"-1 with the memory locations starting at "addr3". The result is a list of all memory locations which are different. The address of such a memory region will be stored in the matchbuffer, as long as there is a free entry. t addr1 addr2 addr3 tranfers the memory beginning with "addr1" and ending with "addr2"-1 to the memory locations starting at "addr3" imp addr1 addr2 compresses the memory region beginning with "addr1" and ending with "addr2"-1. The parameter "mode" in the range from 0 to b selects the implode quality, which influences the time needed for operation. If no parameter "mode" is specified, a default mode "0" is used. While imploding a progress indicator shows the number of bytes to go and the bytes which were already saved. Imploding can be aborted by pressing the "esc"-key. If the memory region cannot be imploded, a message will be given. After imploding the total number of saved bytes and the location of the imploded data is reported. Please note that this command always modifies the specified memory region. exp addr decompresses the memory region beginning with "addr", if seems to contain valid imploded data. After exploding the location of the exploded data is reported. If you want to use imploded data for your own purposes, you may use the sourcecode named "explode.S" on this disk. nop addr num fills the memory beginning with "addr" with the specified number "num" of NOP instructions ($4E71). o addr1 addr2 byte fills the memory beginning with "addr1" and ending with "addr2"-1 with the specified one-byte value "byte". ow addr1 addr2 word fills the memory beginning with "addr1" and ending with "addr2"-1 with the specified two-byte value "word". ol addr1 addr2 long fills the memory beginning with "addr1" and ending with "addr2"-1 with the specified four-byte value "long". e addr1 addr2 byte performs an exor operation with the memory beginning with "addr1" and ending with "addr2"-1 using the specified one-byte value "byte". ew addr1 addr2 word performs an exor operation with the memory beginning with "addr1" and ending with "addr2"-1 using the specified two-byte value "word". el addr1 addr2 word performs an exor operation with the memory beginning with "addr1" and ending with "addr2"-1 using the specified four-byte value "long". f addr1 addr2 byte <...> searches for one to 14 bytes beginning with "addr1" and ending with "addr2"-1. The result is a list of all memory locations where the specified byte or sequence can be found. The address of the sequence will be stored in the matchbuffer, as long as there is a free entry. f addr1 addr2 "text" searches for a text of up to 14 characters length beginning with "addr1" and ending with "addr2"-1. The result is a list of all memory locations where the specified text can be found. The address of the sequence will be stored in the matchbuffer, as long as there is a free entry. fmode [0|1|2] selects the way the results of the commands 'f' and 'c' are displayed. A parameter '0' selects tabular output of the addresses. A parameter '1' selects hexadecimal output similar to the command 'm'. A parameter '2' selects ASCII output similar to the command 'a'. fi addr1 addr2 "pattern*?" searches for a fragment of disassembled instructions beginning with "addr1" and ending with "addr2"-1. An ending '*' joker is obsolete. Example: if you use the pattern "*q.w*1,(?,?0,d1.w)" any occurence of these instruction could be shown: ADDQ.W #1,(2,A0,D1.W) as well as SUBQ.W #1,(9,D0,D1.W) When the 'fi' function is aborted, the current address is shown. The address of the instruction will be stored in the matchbuffer, as long as there is a free entry. F addr searches for all conditional branch-instructions relatively accessing the specified address. Any occurence is shown in disassembled form. Possible instructions would be: BEQ.B/W $xx BRA.B/W $xx BSR.B/W $xx DBF Dn,$xx ... The address of the instruction will be stored in the matchbuffer, as long as there is a free entry. F addr pc searches for all instructions accessing the specified address using the pc-relative addressing-mode. Any occurence is shown in disassembled form. Possible instructions would be: LEA $xx(PC),Ax JSR $xx(PC) MOVE.B/W/L $xx(PC),xx ... The address of the instruction will be stored in the matchbuffer, as long as there is a free entry. p addr1 addr2 plays DMA-sound using the chip memory locations beginning with "addr1" and ending with "addr2". The current address of the sound DMA is shown while playing the sound. If no period is specified a period of $100 is used. The length of sounddata to be played is not limited to 128 KB. r displays current CPU-register contents and flags if no parameters are given. Only those registers and flags which are valid for the installed cpu are shown. If register and value are specified the register is modified accordingly. Possible registers are: D0 - D7 A0 - A7 VBR (new with MC68010 - shouldn't be changed without reason) SFC (new with MC68010) DFC (new with MC68010) CACR (new with MC68020, extended with MC68030 - see note) CAAR (MC68020 and MC68030 only) USP ISP (formerly SSP on MC68000) MSP (new with MC68020 - note, that EXEC doesn't initialize this one) SR (extended with MC68020) - see note) note: SR explanation (MC68000+) 680x0 bit - function 0 #15 - T1, Trace 1 2 #14 - T0, Trace 0 0 #13 - S, Supervisor Stackpointer 2 #12 - M, Master Stackpointer 0 #10 - \ 0 ..#8 - / Interrupt Mask 0 #4 - X, Extend Flag 0 #3 - N, Negative Flag 0 #2 - Z, Zero Flag 0 #1 - V, Overflow Flag 0 #0 - C, Carry Flag note:CACR explanation (MC68020) bit - function #3 - CI, Clear Instruction Cache \ #2 - CEI, Clear Entry in Instruction Cache /reads back 0 #1 - FI, Freeze Instruction Cache #0 - EI, Enable Instruction Cache note:CACR explanation (MC68030) #13 - WA, Write Allocate (should be set) #12 - DBE, Data Burst Enable #11 - CD, Clear Data Cache \ #10 - CED, Clear Entry in Data Cache /reads back 0 #9 - FD, Freeze Data Cache #8 - ED, Enable Data Cache #4 - IBE, Instruction Burst Enable #3 - CI, Clear Instruction Cache \ #2 - CEI, Clear Entry in Instruction Cache /reads back 0 #1 - FI, Freeze Instruction Cache #0 - EI, Enable Instruction Cache note:CACR explanation (MC68040) #31 - DE, Enable Data Cache #15 - IE, Enable Instruction Cache R displays current FPU-register contents. Reported are: FP0 - FP7 in 96(80) bit extended real notation. Signed scientific notation with SNAN/NAN/INFINITY is also reported, if a FPU MC68881/2 is installed. FPCR exception mask, mode control bit - function #15 - BSUN, Branch/Set on UNordered #14 - SNAN, Signalling Not A Number #13 - OPERR, OPerand ERRor #12 - OVFL, OVerFLow #11 - UNFL, UNderFLow #10 - DZ, Divide by Zero #9 - INEX2, INEXact operation #8 - INEX1, INEXact decimal input #7 - \ 0 0 1 #6 - /PRECision 0 eXtended 1 Single 0 Double #5 - \ 0 0 1 1 #4 - /RND, round 0 Next 1 Zero 0 Minus 1 Plus FPSR condition code,quotient byte,exception,accrued exception bit - function #27 - N, Negative #26 - Z, Zero #25 - I, Infinite #24 - NAN, Not A Number #23 - S, quotient Sign #22 - Q, Quotient ... #16 - byte (7 least significant bits) #15 - BSUN, Branch/Set on UNordered #14 - SNAN, Signalling Not A Number #13 - OPERR, OPerand ERRor #12 - OVFL, OVerFLow #11 - UNFL, UNderFLow #10 - DZ, Divide by Zero #9 - INEX2, INEXact operation #8 - INEX1, INEXact decimal input #7 - IOP, Invalid OPeration (BSUN|SNAN|OPERR) #6 - OVFL, OVerFLow #5 - UNFL, UNderFLow (UNFL|INEX2) #4 - DZ, Divide by Zero #3 - INEX, INEXact operation (INEX1|INEX2|OVFL) FPIAR floating point instruction address register mmu displays current MC68851/68030 MMU-register contents. Reported are: TT0,TT1 - Transparent Translation bit - function #31 - \ ... #24 - /LAB, Logical Address Base #23 - \ ... #16 - /LAM, Logical Address Mask #15 - E, Enable #10 - CI, Cache Inhibit #9 - R/W, Read/Write #8 - RWM, Read/Write Mask #6 - \ ... #4 - /FC, Function Code #2 - \ ... #0 - /FCM, Function Code Mask TC Translation Control bit - function #31 - E, Enable #25 - SRE, Supervisor Root Enable #24 - FCL, Function Code Lookup enable #23 - \ ... #20 - /PS, Pagesize (¼..32KB) #19 - \ ... #16 - /IS, Initial Shift (0..15) #15 - \ ... #12 - /TIA, Table Index A (1..15) #11 - \ ... #8 - /TIB, Table Index B (0..15) #7 - \ ... #4 - /TIC, Table Index C (0..15) #3 - \ ... #0 - /TID, Table Index D (0..15) (DRP - Dma Root Pointer, MC68851 MMU only) CRP,SRP - Cpu, Supervisor Root Pointer bit - function #63 - L/U, Lower/Upper limit #62 - \ ... #48 - /LMT, Limit #33 - \ ... #32 - /DT, Descriptor Type #31 - \ ....#4 - /TA, Table Address MMUSR - MMU Status Register bit - function #15 - B, Bus error #14 - L, Limit error #13 - S, Supervisor only #11 - W, Write protected #10 - I, Invalid #9 - M, Modified #6 - T, Transparent translation #2 - \ ... #0 - /N, Number of levels ramsey displays current RAMSEY configuration (A3000/A4000 only). Reported are: Page Detect Mode:(on/off) Burst Mode:(on/off) Burst Wrap Mode:(on/off) Chips onboard:(256KBit*4/1MBit*1/1MBit*4/4MBit*4) Refresh Rate:(154/238/380/off)cycles Ramsey Version:($0d/$0e) gary displays current GARY configuration (A3000/A4000 only). Reported are: Timeout:(disabled/Bus Error/DSACK) Keyboard Reset Enable:(on/off) Gary Version ID:($00/$90) bs addr adds a memory location to the list of breakpoints, if the location specified is even, hasn't been set yet and if it is a valid RAM location. Breakpoints may also be placed in MMU-protected RAM, but not in ROM. Up to 10 breakpoints at one time are possible. bl shows the breakpoint locations in disassembly. bc addr removes a specified memory location from the list of breakpoints. If the parameter 0 is used, all breakpoints will be removed. g addr executes a subroutine at the specified memory location. The CPU/MMU/FPU-registers are set before execution and the resulting register contents are displayed after the execution. All CPU/MMU/FPU- exceptions are controlled and the memory location where it occured is displayed. Take care, that the active stackpointer doesn't trash important data. Before the execution the specified breakpoint locations are prepared and available CPU cache is cleared (not disabled!). After the execution the previous instructions will be restored. When an exception occurs, the stackpointer is corrected, so executing lea ($40000),a7 illegal results in the expected register display, though the code has been started via 'JSR'. mmuoff disables the MMU (if you are lucky to own one :-). This affects all memory operations like viewing, editing, disassembling, saving - but NOT program execution, which uses the MMU setup, visible with 'mmu'. With this command you may e.g. examine the A3000 built-in alpha ROM or change MMU-protected RAM). If you don't have a MMU, you will be told. mmuon enables the MMU. If the current MMU setup is mangled, or has never been initialised this could result in a MMU exception. If you don't have a MMU, you will be told. settt0 value this command places the specified value into the TT0 register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. settt1 value this command places the specified value into the TT1 register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. settc value this command places the specified value into the TC register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. setsrp value1 value2 this command places the specified values into the SRP register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. setcrp value1 value2 this command places the specified values into the CRP register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. setdrp value1 value2 this command places the specified values into the DRP register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MC68851 MMU, you will be told. setmmusr value this command places the specified values into the MMUSR register of the MMU. This may cause disastrous crashes if you don't know what you're doing. If you don't have a MMU, you will be told. x exits the monitor. If the monitor has been invoked from CLI, he returns to it. If the monitor is located in the module a reset is performed. If the monitor is invoked by a freeze mechanism, the freezed program is continued. X exits the monitor and performs a complete hardware-reset including clearing of the memory. B rgb1 rgb2 changes the background and foreground colors of the display. W displays the current workspace locations if no parameter is specified. In case a parameter is specified and there is backup memory either in the module or in special memory areas, the workspace is changed to the specified chip memory location. The previous memory locations used as a workspace are restored using the backupmemory contents saved while startup. If there is no module installed the monitor first checks, if execbase checksums are valid. If they are, the memlist is scanned for a chunk of graphics memory being big enough to hold the screen and the diskDMAbuffer. The text 'Scr(SYS)' reflects this case. If none is found or execbase seems corrupted, absolute memory is used; conflicts of possible code/workspace overlay are handled correctly. The text 'Scr(ABS)' reflects this case. The above is valid for exchange memory, too. The corresponding texts are 'Exg(SYS)' and 'Exg(ABS)'. If the chunk in the memlist is more than big enough, the workspace is placed at the end of it. Currently the following locations are scanned for memory expansions during startup, if no chunk of fast memory being big enough is found using the memlist, or if execbase seems corrupted. $f00000 $200000 $c00000 $80000 If there is no backup memory found or you pressed right mousebutton during startup, no backupmemory is used and therefor the original contents cannot be restored when changing the workspace or exiting. The workspace memory which is used for screenbitmap and disk drive DMA-buffers defaults to $74000 in absolute mode, if there is a 8371 agnus. With 1 MB continous ram below $100000 and a big agnus chip, the workspace defaults to $f4000. With 1.5 MB continous ram below $180000 and a big agnus chip, the workspace defaults to $174000. With 2 MB continous ram below $200000 and a big agnus chip, the workspace defaults to $1f4000. If the absolute workspace would overlay with the memory in which the monitor is located, the absolute workspace is placed just before the programcode. Keep in mind, that if any absolute memory is used, returning to the shell is rather risky, because unexpected things *may* happen. i displays the contents of the CPU-exceptionvectors, DMA- and interrupt-registers determined during startup. The vectors are changed within the monitor to prevent executed programs from creating any alerts and gurus. match <0> displays the contents of the matchbuffer, if no parameter is specified. In case of an parameter '0', the matchbuffer is cleared. d disassembles the memory locations beginning with "addr1" and ending with "addr2"-1 if they are specified. The disassembly can be edited using the cursor. Instructions, which cause an unconditional change of program flow are followed by a separating line. If no valid instruction is given the line is not accepted and not altered in memory. The address of an instruction, whose address is part of the breakpoint- or matchbuffer is highlighted. dm changes the way offsets are displayed in disassembly between decimal and hexadecimal form. ds changes the way offsets are displayed in disassembly between signed and unsigned form. dv toggles the calculation of the effective address on the right part of the disassembly. In the worst case of abnormally large instructions (movem), you may want to toggle this function off. Note that currently predecrement and postincrement is ignored. n addr invokes the built-in MC680x0 line-assembler at the specified address. The current instruction is displayed. N addr invokes the built-in 6502/65SC802/65SC816 line-assembler at the specified address. The current instruction is displayed. auto enables automatic immediate operand size selection for 65SC802/65SC816 instructions. This function is of use in both assembly and disassembly, because it remembers previous SEP #$xx and REP #$xx instructions. Note that the functionality depends on a linear flow of code. The default size is 16 bit for accumulator and index registers. accu [8|16] forces accumulator immediate operand size to either 8 or 16 bits and disables automatic immediate operand size selection. index [8|16] forces index register immediate operand size to either 8 or 16 bits and disables automatic immediate operand size selection. u disassembles the memory locations in 6502/65SC802/65SC816 mode beginning with "addr1" and ending with "addr2"-1 if they are specified. The instrucions are shown in hexadecimal, mnemonic and ASCII notation. The effect of SEP #$xx and REP #$xx instruction on immediate opperands is commented. The special SNES hardware registers are commented, if they are accessed in absolute and absolute/indexed addressing modes. The disassembly can be edited using the cursor. If no valid instruction is given the line is not accepted and not altered in memory. K defines commands or command sequences to be executed when pressing one of the function keys. The parameter "fn" may be one between f1 - f10. The "|" sign results in a return key being written into the input buffer and is also needed for the last command in a sequence, if you want it being automatically executed. Both quoting characters " and ' can be used to define the string. If no parameters are specified the current function key settings are displayed. D selects another diskdrive. The parameter "n" may be one between 0 and 3 where 0 corresponds to DF0. The current directory is set to the root directory. If the specified diskdrive is not available the drive 0 is selected. If no parameter is specified the current diskdrive is returned. dir first reports the name of the disk or the current subdirectory and the number of free and used blocks. The filelist of the current directory including the comment and the size in bytes and blocks is returned. Existing hardlinks are reported with the corresponding object refered to. Note that linked files and directories do support their own datestamp, but don't support their own protection bits and file comments If the option f is given, the time and date of creation, the protection bits, the file/dirheader key, the fileextension key and the first datablock key is also returned. If the disk is not a dos disk or if any other errors occur a corresponding message is returned. bootsum addr calculates and sets the checksum of an AmigaDOS bootblock located at the specified address. The previous and the new checksums are returned. datasum addr calculates and sets the checksum of an AmigaDOS datablock located at the specified address. The previous and the new checksums are returned. bitsum addr calculates and sets the checksum of an AmigaDOS bitmapblock located at the specified address. The previous and the new checksums are returned. kicksum addr calculates and sets the checksum of a kickstart image. The specified locations are checked to represent a valid kickstart image, and the size of it is determined (256/512 KB). The previous and the new checksums are returned. megasum addr calculates and sets the checksum of a SEGA Megadrive ROM image. The specified locations are checked to represent a valid ROM image. The previous and the new checksums are returned. famisum addr calculates and sets the checksum of a SNES (Super Famicon) ROM image. The specified locations are checked to represent a valid ROM image. The previous and the new checksums are returned. Additional module information ist reported. famiplay addr transfers the datablock beginning with the specified location to a Super Magic Drive copier unit connected the parallel port, if it passes an integrity check. If the unit does not respond in time, a timeout error is reported. During transfer the current address and the number of blocks to go is shown. The transfer can be aborted using the escape key. The datablock represents a SNES (super Famicon) module with Super Magic Drive header and organisation. Refer to the section near the end for information on the supported cable wiring. smdplay addr transfers the datablock beginning with the specified location to a Super Magic Drive copier unit connected the parallel port, if it passes an integrity check. If the unit does not respond in time, a timeout error is reported. During transfer the current address and the number of blocks to go is shown. The transfer can be aborted using the escape key. The datablock represents a SEGA Megadrive module with Super Magic Drive header and organisation. Refer to the section near the end for information on the supported cable wiring. rawplay addr transfers the datablock beginning with the specified location to a Super Magic Drive copier unit connected the parallel port, if it passes an integrity check. If the unit does not respond in time, a timeout error is reported. During transfer the current address and the number of blocks to go is shown. The transfer can be aborted using the escape key. The datablock represents a SEGA Megadrive module in raw binary format without any headers. Refer to the section near the end for information on the supported cable wiring. smd2raw addr converts the specified datablock in Super Magic Drive format into raw binary format, if it passes an integrity check. During conversion the current address and the number of blocks to go is shown. The resulting data starts with addr and ends with addr+modulesize followed by $200 bytes of memory filled with $55. v changes the syncword for all disk file and track operations to the specified value. The value is checked for consistency and invalid syncs are noted, but not ignored. If no parameter is specified the current syncword setting is returned. vc tries to find out the sync marks on the specified track of the selected drive, or on track 0, if no track is specified. (NOTE: this function needs major rework...) l addr cyl reads the specified number of AmigaDOS cylinders to the specified memory locations from the selected diskdrive beginning with cylinder "cyl". If no parameter "num" is specified only one cylinder will be read. Note the difference between cylinders and tracks: a disk contains 83 cylinders and 166 tracks. The length of one cylinder is 2 sides * 11 sectors * $200 bytes = $2c00 bytes in DD mode and 2 sides * 22 sectors * $200 bytes = $5800 bytes in HD mode. While reading tracks a list is displayed reporting which cylinder, head and sector has just been read to which address. If there is an error which couldn't be recovered with upto three internal retries for each sector, the user may select between retry, ignore and abort to handle this situation. s addr cyl writes cylinders to the selected diskdrive. l addr sec s reads the specified number of AmigaDOS sectors to the specified memory locations from the selected diskdrive beginning with sector "sec". If no parameter "num" is specified only one sector will be read. s addr sec s writes sectors to the selected diskdrive. L filename addr loads an AmigaDOS file named "filename" and located in the current directory to the specified address "addr". The filename can be quoted to include spaces. If the disk has been changed, the current directory is set to the root directory. While loading the current loadaddress is displayed. If there is any error a corresponding message is returned. Both OFS and FFS disks are supported. The OS2.0 link-feature is supported, too. S filename addr1 addr2 saves an AmigaDOS file named "filename" into the current direcory. Saving begins with "addr1" and ends with "addr2"-1. If there is not enough free space on the current disk, the operation is aborted. While saving the current saveaddress is displayed. If there is any error a corresponding message is returned. The time and date information is set, if there is a clockchip (either A500/A2000 or A3000/A4000 version) installed and the chip appears functional. Otherwise the the creation time is reset to 00:00:00 on 01-Jan-78. type filename types an AmigaDOS file named "filename" located in the current directory onto the screen. The filename can be quoted to include spaces. If the disk has been changed, the current directory is set to the root directory. If a line feed character ($0A) occurs within the file, the cursor is put into the first column of the next line. If there is any error a corresponding message is returned. cd : sets the root directory as the current directory. cd subdir sets the specified subdirectory named "subdir" as the current directory. This is only valid for the disk which is currently installed in the selected diskdrive. Before any file- or dosoperation is done with a changed disk the current directory is reset to the rootdirectory. The OS2.0 link-feature is supported, too. mk subdir creates a subdirectory named "subdir" in the current directory of the selected diskdrive. del "name" deletes a file named "name" and being located in the current directory of the selected diskdrive. If "name" is a subdirectory it is also deleted if it has been empty. Linked files and directories are handled correctly. M returns the block allocation map of an AmigaDOS disk inserted in the current diskdrive. A filled squar indicates that a sector is currently allocated and in use. The upper part represents head 0 with sectors incrementing from 0 to 10 in DD mode and from 0 to 21 in HD mode, while the lower part represents head 1. info reports the drivemode (DD or HD). The sector of the bitmap is also displayed and if the disk is validated or not. No writing fileoperation can be performed without a validated disk. The type of the filesystem is reported, too (DOSType, OFS or FFS and non international or international). In addition, the number of free bytes is reported. verify toggles disk verification. If switched on, any track written to disk will be checked for write errors. If there is an error, the user may select between retry, ignore and abort to handle this situation. format "name" <0/1/2/3> initialises the disk in the selected drive. No verification is done. If the option q is specified, only the boot- and root-tracks are formatted. The disk won't be installed. If no third parameter is given, the disk is initialised as a standard OFS disk, otherwise the parameter selects the filesystem between: 0: non international OldFilingSystem (DOSType DOS\0) 1: non international FastFilingSystem (DOSType DOS\1) 2: international OldFilingSystem (DOSType DOS\2) 3: international FastFilingSystem (DOSType DOS\3) The default '0' is readable with any version of AmigaDOS. All other filing systems need OS2.0 to be recognised as a valid disk outside the BeerMon. A HD disk inserted in a Chinon FB357A HD diskdrive will be formatted with 3520 sectors representing 1.76 MB. install <0/1/2/3/4> installs the disk in the selected drive. If no parameter is specified, a WB2.x bootblock is installed, whose DOSType is determined by examining the DOSType entry of the previous bootblock. If this entry is invalid, the disk is rejected. The previous bootblock is ignored, if the optional parameter is specified, which selects between: 0: non international OldFilingSystem (DOSType DOS\0) WB2.x 1: non international FastFilingSystem (DOSType DOS\1) WB2.x 2: international OldFilingSystem (DOSType DOS\2) WB2.x 3: international FastFilingSystem (DOSType DOS\3) WB2.x 4: non international OldFilingSystem (DOSType DOS\0) WB1.3 The last version is rather antique and should only be used if you have to ensure that the CLI screen is opened early, when using OS2.0. Take care not to change the filesystem of a disk already containing files, or they are likely to become unreadable . Use the 'M' command to find out the type of such a disk. cls clears the screen. time returns the current time and date, if there is a clockchip located at the ususal location (either A500/A2000 or A3000/A4000 version). / [0..9] returns info on several system structures. Needs some rework. cop searches for a valid copper instruction list beginning with "addr1" and ending with "addr2"-1. If no parameter is specified, the whole chip memory area is scanned. If a copperlist is considered valid, the start and end address of this area is reported. V disassembles the copperinstructions at the memory locations beginning with "addr1" and ending with "addr2"-1, if they are specified. The disassembly includes symbolic register names and can be edited using the cursor. If no valid instruction is given the line is not accepted and not altered in memory. The new ECS and AGA registers are handled, too. Examples of valid instructions: -Move #$8201,BplCon0 -dc.l $1800fff -EndList -Wait $0c,$00,1,$7f,$7f -Skip $0c,$00,1,$7f,$7f custom displays a table with name and the corresponding address of each custom chip register. The new ECS and AGA registers are handled, too. If the screen is filled, you can advance to the next page by pressing the right mouse button. The command can be aborted by pressing the escape key. h start end generates an object module including the data beginning with "start" and ending with "end"-1. A code transfer routine is added using the destination address "addr" or the parameter "start" if it is not specified. The program is executed using the parameter "jmp" or the parameter "start" if it is not specified. The transfer routine disables DMA transfer, changes interrupt masks and flags and loads the active stackpointer (which mostly is the USP) with the value $80000. The generated module may (and should) be edited according to your needs before being saved to disk. b shows memory locations beginning with "addr" in form of a bitmap. Moving the mouse up increases the startaddress. The right mousebutton toggles between Medres and Lores screenresolution. The escape key exits the bitplane display. This is no IFF-searcher and is only intended to get a quick overview about memory contents such as free space, code, diskbuffers, bitplanes, bobs or sounddata. The memory locations need not to be in chipmemory but may be any valid memory location below $c80000. You may also display memory locations beginning with $f00000. Take care of not displaying any locations without ram installed such e.g. $b00000. P toggles printer output. If a printer is connected to the centronics port and online. Any text output is both displayed on the screen and sent to the printer if this function is enabled. k toggles the current keymap between german keymap and usa keymap. As a default setting the german keymap is used. config performs an autoconfig procedure for Zorro-II and Zorro-III expansions inside the lower 16MB address space. This enables you to use Zorro type RAM-expansions (e.g. at $200000) after you entered the module via reset (CTRL-A-A) or you performed the MC680x0 RESET-instruction. ***************************************************************************** The supported Super Magic Drive cable wiring: Amiga Parallel Port Super Magic Drive D0 2 ---------------------- 2 D0 D1 3 ---------------------- 3 D1 D2 4 ---------------------- 4 D2 D3 5 ---------------------- 5 D3 D4 6 ---------------------- 6 D4 D5 7 ---------------------- 7 D5 D6 8 ---------------------- 8 D6 D7 9 ---------------------- 9 D7 GND 17 ---------------------- 17 GND BUSY 11 ---------------------- 11 BUSY SEL 13 ---------------------- 1 STROBE *** So that's all, share, spread and enjoy the word and also the disk. Greetings rush out to my friends around in TRSI, ESCape, the incredible FakeBuster, CodX, SMF, PBA, Kelly van Vliet and anybody elso who has been involved, or just deserves it. The next update will be released every now and then, if enough changes or additions have been made, so don't hesitate to give suggestions and/or bugreports. signed: Carnivore/BeerMacht 19.03.1993