home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / c / setcpu.txt < prev    next >
Text File  |  1995-02-27  |  21KB  |  454 lines

  1.  
  2.              SetCPU V1.60
  3.             by Dave Haynie
  4.             June 15, 1990
  5.  
  6.     SetCPU V1.60 is a program designed for identification and
  7. modification of system parameters roughly related to different versions 
  8. of the Motorola 68000 family processors.  The program will identify the 
  9. various types of processors and coprocessors in any 680x0 system.  It also
  10. makes an attempt to correctly identify an incorrectly designed but still
  11. possibly functional 68020 system, several of which are known to exist as
  12. Amiga coprocessor boards.  It contains MMU code to locate kernel ROM in
  13. write protected 32 bit ROM.
  14.  
  15.     In any case, the syntax of the program is given as follows:
  16.  
  17.     SetCPU [INST|DATA] [[NO]CACHE|[NO]BURST] [CONFIG n]  [BITS n] [TRAP n]
  18.            [KICKROM path|dfN: [DELAY n] [KEEPEXEC]] [CARDROM path] [VERBOSE]
  19.            [[NO]FASTROM [path] [KEYPATCH n] [HEAD] [NOSTACK]] [ROMBOOT]
  20.            [CHECK 680x0|68851|6888x|MMU|FPU|MMUON|MMUROM|MMUALIEN]
  21.  
  22. where "[]" indicates an optional parameter, "|" indicates a choice of
  23. parameters.  Typing "SetCPU ?" will retrieve this same syntax diagram.
  24. Typing SetCPU alone will result in the SYSTEM configuration being 
  25. send to the console, my current system returns this:
  26.  
  27.     SYSTEM: 68030 68882 FASTROM (INST: CACHE NOBURST) (DATA: CACHE NOBURST)
  28.  
  29. This indicates I have a 68030/68882 system, I've previously installed the 
  30. FASTROM translation, and both caches are turned on.  Issuing the command
  31. "SetCPU FASTOM CACHE" would recreate such a setup.  Note that any parameters
  32. that don't make sense to the real system configuration, such as asking to
  33. modify the data cache on a 68020 system or install the FASTROM translation 
  34. on a 68000 system are just ignored.
  35.  
  36. [0] CHANGES
  37.  
  38.     Since the V1.50 release of SetCPU, the following changes have been
  39. made to the SetCPU program:
  40.  
  41.     - FASTROM now supports loading of a ROM image file.
  42.  
  43.     - The patch manager has been removed, except for the KEYPATCH
  44.       option.
  45.  
  46.     - ROMs beyond 256K are now supported, from both file and special
  47.       KickStart disk.
  48.  
  49.     - ROM images are supported assembled for various memory locations,
  50.       so that Commodore's developer files assembled at $00F00000, for
  51.       example, will work.  SetCPU determines the size, base, and
  52.       jump address of a ROM independently.
  53.  
  54.     - ExecBase can be erased on KICKROM resets to prevent Chip RAM
  55.       sizing problems and other OS switching errors.
  56.  
  57.     - A programmable KICKROM DELAY option allows KICKROM to work on
  58.       better on some machines with extremely slow 8520 startup times.
  59.  
  60.     - Caching for any Bridge Card memory will always be disabled.
  61.  
  62.     - The system stack, if found in Chip memory, is relocated to Fast
  63.       memory for FASTROM translations.
  64.  
  65.     - Some 2.0 functions are activated when run under the 2.0 OS, so
  66.       that most if not all of the basic SetCPU functions operate 
  67.       properly.
  68.  
  69.     - The MMU code is intelligent enough to avoid trashing an MMU setup
  70.       not generated by SetCPU.
  71.  
  72. [1] DISTRIBUTION
  73.  
  74.     This program is placed in the public domain, and may be used or
  75. distributed as you like.
  76.  
  77.  
  78. [2] CPU IDENTIFICATION
  79.  
  80.     There are two basic types of functions performed by SetCPU.  The 
  81. first of these is CPU system identification and cache control.  SetCPU will 
  82. tell about the type of CPU setup in your machine, which consists of the CPU
  83. itself and sometimes FPU or MMU coprocessors.  If the CPU supports caches,
  84. SetCPU will let you switch these caches, and associated cache line burst mode,
  85. on and off.  Finally, SetCPU can be used in a Startup-Sequence or other script
  86. to make decisions based on the system that's running.  This is quite useful 
  87. with accelerator cards like the Commodore A2620 that let you boot the machine
  88. with either 68020 or 68000 in charge.  The individual CPU group commands are 
  89. given below in detail:
  90.  
  91. [NO]CACHE
  92.     This command will switch on or off 68020 and 68030 caches.  If not 
  93.     qualified, it'll act on both instruction and data caches of the 68030.
  94.  
  95. [NO]BURST
  96.     This command will switch on or off the burst cache line fill request 
  97.     of the 68030.  If not qualified, it'll act on both instruction and 
  98.     data caches.
  99.  
  100. INST
  101.     This qualifies a CACHE or BURST operation to restrict its application
  102.     to the instruction cache only.
  103.  
  104. DATA
  105.     This qualifies a CACHE or BURST operation to restrict its application
  106.     to the data cache only.
  107.  
  108. CHECK 
  109.     This option lets you check for the existence of a particular CPU 
  110.     system component in a script.  It works like this:
  111.  
  112.         SetCPU CHECK 68020
  113.         If WARN
  114.             echo "No 68020 here!"
  115.         Else
  116.             echo "Sho nuff got a 68020 here!"
  117.         Endif
  118.  
  119.     The arguments to CHECK can be any of:
  120.  
  121.         68000        Matches the obvious
  122.         68010        "
  123.         68020        "
  124.         68030        "
  125.         68040        "
  126.         68851        "
  127.         68881        "
  128.         68882        "
  129.         FPU        Matches 68881, 68882, or 68040
  130.         MMU        Matches 68851, 68030, or 68040
  131.             MMUON        Matches any case in which the MMU is enabled
  132.         MMUROM        Matches an active SetCPU ROM translation
  133.         MMUALIEN    Matches any MMU setup no created by SetCPU
  134.  
  135. If any cache parameter doesn't apply to the system in use, it'll just be
  136. ignored.  Use the data cache and all burst modes with caution.  Some 
  137. 68030 systems aren't designed to correctly support the data cache, so
  138. switching it on may cause an instant system crash.  Even on systems that
  139. correctly support the 68030 data cache, some device drivers, especially
  140. those for DMA devices, may not work properly with the data cache enabled.
  141. You may wish to check with your system vendors to make sure before using
  142. the data cache in your standard system setup.  The Commodore A2091's device
  143. driver does correctly support data caching.  However, the use of the data
  144. cache is not recommended without an MMU setup, such as FASTROM or one of
  145. the KICK setups, invoked.  The Amiga OS uses memory that's the same in
  146. both Supervisor and User modes of the 680x0.  This requires the setting
  147. of the 68030's Write Allocate bit for safe operation, and SetCPU will
  148. always insure that Write Allocate is set.  However, this mode causes the
  149. data cache to be updated on longword writes even for locations that are
  150. driven noncacheable in hardware.  So data caching without a proper MMU
  151. setup can cause problems with some I/O devices.  With the MMU setup, 
  152. SetCPU will map the standard Amiga I/O regions as noncachable.
  153.  
  154.     SetCPU may report a "FPU Logic Error" on certain 68020 systems.  
  155. This is indicating a hardware problem with that board's floating point 
  156. coprocessor decoding, which results in the FPU responding to the MMU 
  157. addresses as well as its own.  SetCPU knows how to handle such a board,
  158. but future software using the MMU may not, so it's a good idea to report
  159. this problem to the board vendor for repair.
  160.  
  161.  
  162. [3] ROM TRANSLATIONS
  163.  
  164.     The second thing that SetCPU V1.60 manages are ROM translations.  
  165. Using the MMU on systems so equipped, it can locate the Kernel ROM in the
  166. much faster 32 bit wide memory provided on many 32 bit systems.  It can
  167. also boot a ROM based system with an alternate version of KickStart.
  168. Most of the options here relate to MMU translation setup and various 
  169. modifications of the basic translation premise.
  170.  
  171.     As of this release, SetCPU's MMU configurations will support
  172. memory outside of the 68000's 24 bit address space, when it is present.
  173. Such memory will be automatically recognized and supported by SetCPU if
  174. it is linked into the free memory lists when SetCPU builds its FASTROM
  175. or KICKROM.  Alternatively, the number of significant bits of address
  176. in the system can be specified by the BITS command, and SetCPU will
  177. build the appropriate MMU table for such a system.
  178.  
  179.     Another feature of this release is support for ROM images of either 
  180. 256K or 512K in size.  KickROMs may be assembled for locations other than the
  181. $00FC0000 or $00F80000 base used by physical systems.  SetCPU will compute
  182. the size, base address, and start address for any KickROM image.  ROM
  183. images can now be loaded from disk for FASTROM translations as well as
  184. KICKROM translations, though a FASTROM image must be the same KickStart
  185. release as the current ROM in the system.  This facility's main purpose is
  186. to support loading of patched ROMs with the necessity of rebooting via
  187. KICKROM.  As a result of this, the only patch now done by SetCPU itself is
  188. the optional KEYPATCH, which may be required for proper operation of the
  189. accelerated ROM code on some systems. 
  190.  
  191.  
  192. [NO]FASTROM
  193.     This activates the FASTROM translation on or off an MMU equipped 
  194.     system.  When switching on, it first allocates at least 256K of 
  195.     memory for the ROM image, then at least 512 bytes of memory for the
  196.     MMU table.  It copies the ROM into the image area, then applies the 
  197.     translation by pointing the MMU at the table and activating it.  The 
  198.     NOFASTROM option will switch off the MMU and reclaim the memory used 
  199.     for the ROM image and MMU table.  If any other program set up the MMU
  200.     for something, invoking this option could be a very bad thing to do.
  201.     In general, until there's some level of OS support for the MMU in 
  202.     Amiga systems, you're really safe using only one MMU tool at a time.
  203.     If you have an A2620 or A2630 system, this option will always get 32
  204.     bit memory for you; if not, you'll have to make sure that your 32 bit
  205.     memory is the first MEMF_FAST memory in the memory list for it to be 
  206.     used for the ROM image.  Also, that ROM image will be allocated as far
  207.     back on that memory list as possible unless the "HEAD" option is 
  208.     specified.  The SetCPU "SYSTEM" line will report this setup as a
  209.     "FASTROM" setup.
  210.  
  211. Suboptions are:
  212.  
  213.     file
  214.         Specifying a file with a valid ROM image will load that ROM
  215.         image instead of the system's physical ROM image.  The one
  216.         restriction is that the disk-loaded ROM image must be the
  217.         same ROM revision as the current system ROM.  If they aren't
  218.         the same revision, the KICKROM option can be used instead,
  219.         but that'll require a reboot.  This option can be used to
  220.         load a patched version of the current ROM without reboot in
  221.         most cases. 
  222.  
  223.     KEYPATCH n
  224.         This will patch the keyboard scanning routine for machines 
  225.         that have Cherry keyboards (small function keys).  The "n"
  226.         parameter allows a variable delay between 1 and 100 to be
  227.         specified; the delay depends on the keyboard, but should
  228.         be pretty independent of CPU speed.
  229.  
  230.     NOSTACK
  231.         This will prevent the attempted translation of supervisor
  232.         stack into 32 bit memory.  By default, such translation will
  233.         be done if the supervisor stack is found in Chip memory.
  234.     
  235.  
  236. CARDROM path
  237.  
  238.     When used in conjunction with the FASTROM option, this allows ROMs
  239.     from expansion cards to be located in fast memory as well.  The
  240.     path should reference a file containing lists of expansion cards
  241.     that should be translated if found.  It's necessary to read this
  242.     from a user-defined file, rather than from the expansion environment
  243.     itself, since an expansion device's ROM could be located close to
  244.     that device's registers; there's no way for SetCPU to know it's
  245.     safe to translate a card ROM image unless you tell it.  On my system
  246.     I read a file called CardROMList, which currently contains the single
  247.     line:
  248.  
  249.         0x202 0x01 0x10000 0x8000 0x4000 CBM_2090A_Disk_Controller
  250.  
  251.     All the numbers given are in C language hex format.  The parameters
  252.     are, in order, the device's manufacturer code, product code, the
  253.     device's size (in bytes), the ROM's offset from the configured board's
  254.     base address (in bytes), and the size of the ROM area to be
  255.     translated (in bytes).  The final item is text string to identify
  256.     the device; this'll be displayed by the VERBOSE option if the ROM
  257.     translation does in fact take place.  The "_" characters in the
  258.     name will be translated to " " characters.  Note that the CardROM
  259.     translations are currently based on 16K chunks, and SetCPU will
  260.     ignore requests for translations of less than 16K, and round down to
  261.     16K boundaries for larger translation requests.  
  262.  
  263. HEAD
  264.     This option causes the SetCPU memory allocator to attempt memory
  265.     allocation for its translated objects from the start of 32 bit
  266.     memory instead from the end, as it usually does.  Allocation from 
  267.     the end usually results in less fragmentation than from the start
  268.     (due to the alignment restrictions of MMU objects), though this
  269.     option is useful when dealing with merged memory lists.  It is
  270.     ignored when the ROM image and tables are in chip/$00C00000 memory.
  271.  
  272. KICKROM path|dfN:
  273.  
  274.     The KickROM option allows the system to be restarted with an
  275.     alternate ROM image.  This can be from a KickStart disk in a
  276.     specified floppy drive, or from a given file name.  If the
  277.     ROM image is accessible, this command will cause the system to
  278.     be immediately rebooted into the new OS.  Note that pre-1.3
  279.     versions of the Amiga operating system will probably have some
  280.     trouble with expansion cards, especially autoboot cards.  For
  281.     that reason there's the CONFIG 0 option, which is explained
  282.     later.
  283.  
  284.     The KICKROM command will reboot the machine with the new OS, but
  285.     that ROM image will be physically located in either memory at
  286.     $00C00000, if it's available, otherwise it'll use Chip memory.  Once 
  287.     the new OS has started up, issuing either "SetCPU FASTROM ..." or
  288.     "SetCPU KICKROM..." will cause that image to be moved into fast
  289.     memory, and the slow memory will be given back to the system.  The
  290.     SetCPU "SYSTEM" line will report a 16 bit KICKROM image as a
  291.     "SLOWKICK", and a 32 bit KICKROM image as a "FASTKICK".  A machine
  292.     running from a SLOWKICK kernel can't be re-KICKROMed, but can be
  293.     from a FASTKICK kernel.
  294.  
  295. Suboptions are:
  296.  
  297.     DELAY n
  298.         This option sets the delay after reset before any code is
  299.         run.  The parameter may be set from 0 to 100, where 0 sets
  300.         no delay.  The default value is 10, which sets the delay
  301.         value used in SetCPU V1.50.  The need for a delay depends
  302.         on the machine you're on.  If your machine hangs after
  303.         SetCPU loads KickStart, there's a real good chance that
  304.         you need a longer delay.
  305.  
  306.     KEEPEXEC
  307.         Normally, KICKROM will clear the ExecBase pointer, to cause a
  308.         the new version of the ROM to be rebuild from a cold boot
  309.         condition.  This option prevents that clearing action.
  310.         
  311. CONFIG n
  312.     This option controls if and how expansion devices are recognized on 
  313.     a KICKROM boot.  At the default configuration level, level 2, the
  314.     expansion cards are left alone, allowing the new Kernel to try and
  315.     configure them.  Since some older operating system will choke on 
  316.     autoboot devices, this option will allow suppression of them for the
  317.     rebooting process.  When requesting a KICKROM boot, a CONFIG level
  318.     of 0 or 1 will prevent the devices from being recoginzed.
  319.  
  320.     Once rebooted in the new OS, moving from a SLOW    to a FAST Kick image,
  321.     as described above, the CONFIG status will be honored.  If the
  322.     devices weren't suppressed, nothing special happens.  If they were,
  323.     they'll stay suppressed, and you very likely won't have the memory
  324.     to support a FAST Kick image.  Specifying a CONFIG level of 2 at
  325.     this point will attempt to configure the devices without autobooting.
  326.     At level 1, the devices will be made visable to the system again,
  327.     but nothing will be done with them.
  328.  
  329.     As of the latest release, CONFIG 0 appears to be required with the 
  330.     1.2 operating system, at least if there's any autoboot device, even if
  331.     you're attempting to move from a slow to fast kick image.  The next 
  332.     release will attempt to allow 1.2 to configure non-autobooting devices
  333.     at this point.
  334.  
  335. TRAP n
  336.     This option controls the level of error trapping handled for 
  337.     you by the SetCPU system.  The numeric parameter is actually 
  338.     optional for compatibility with SetCPU V1.4.  If no TRAP is 
  339.     specified, the default level 2 is enacted.  If the TRAP command is 
  340.     given without a parameter, trap level 0 will be setup.  
  341.  
  342.     Trap level 0 causes the MMU to look at all 32 bits of address;
  343.     access to any memory outside of the 24 bit space will result
  344.     in an exception, which if unhandled, results in a GURU 2.  Trap
  345.     level 1 will set up the MMU to only look at 24 bits of address space. 
  346.     Trap level 2 works like level 1, but additionally sets up a trap
  347.     handler for the Bus Error exception (which usually surfaces as a
  348.     GURU #2).  For normal operation (eg, running other people's code),
  349.     Trap level 2 is probably what you want.  For final testing of your
  350.     own code, levels 0 or 1 can catch things which would go unnoticed
  351.     on a 68000 machine, such as writing to ROM space or out of the 24
  352.     bit address space.
  353.  
  354.     The exception handler used for level 2 trapping catches things like
  355.     writes to protected areas of memory.  It just tells the bus machine
  356.     not to complete the write, and signals no error.  There's a slight
  357.     chance that this won't be enough repair for a program doing something
  358.     really outlandish -- at that point, running at level 1 will let the
  359.     GURU happen, which might help if you're debugging your own code.  
  360.     Other that that, there's probably nothing you can do to get such a
  361.     program working with the MMU turned on, other than having it fixed.
  362.     The other thing to consider is that this exception handler could
  363.     conflict with another system-level handler installed by a GOMF-like
  364.     program.  That shouldn't cause a big problem, since you'll the one
  365.     that was installed later, both of which presumably trap the error,
  366.     but it's something to be aware of.
  367.  
  368.     Under V1.3 and earlier releases, a DOS bug can cause invalid accesses,
  369.     which cause the exception, when running the EndCLI or NewCLI/NewShell 
  370.     programs; running at level 1 or 2 will avoid gurus with these commands.
  371.  
  372.  
  373. BITS    n
  374.     This option forces the MMU table for KICKROM or FASTROM to be built
  375.     to support a specific number of bits, regardless of the actual bits
  376.     apparently used by the system.  Valid significant bits range from 24
  377.     through 32.
  378.  
  379. ROMBOOT
  380.     This option forces a reset to physical ROM without hanging the system,
  381.     even when the MMU is active.
  382.  
  383. VERBOSE    
  384.     This option more fully describes the system translations. 
  385.  
  386.  
  387. [4] ROM FILE FORMATS
  388.  
  389.     The 256K KickStart disk the KICKROM option will look for is the
  390. standard Commodore KickStart format, which is a standard format floppy
  391. with the work "KICK" at the start of the disk, followed by 512 blocks of
  392. 512 bytes each, a plain dump of the ROM image.  512K KickStart disks 
  393. look just the same, only, of course, with 512K of ROM.  The KickStart
  394. loader will actually check the first 32 blocks of disk for the start of
  395. ROM.
  396.  
  397.     The size of the KickStart image is determined by the first longword
  398. of the file.  Optionally, disk files can contain two extra longwords at the
  399. beginning of the file, the first being a $00000000, second the expected 
  400. size of the ROM image.  That expected size will be compared with the expected
  401. based on the first longword in the ROM image and the actual length of the
  402. loaded file, in the case of a disk file rather than a KickStart. The base
  403. address and starting address are determined from the ROM image, and SetCPU
  404. will attempt to use them.  Some ROM images can cause a conflict with other
  405. system resources.
  406.  
  407. [5] CREDITS
  408.  
  409.     While this program is an entirely original work, nothing happens in
  410. vaccuum, this one included.  I'd like to mention folks who, directly or
  411. indirectly, helped make this thing happen, by providing example MMU code,
  412. suggestions, and incentives.  These folks include Neil Katin, Jez San,
  413. GVP Inc., Dale Luck, Bryce Nesbitt, Andy Finkel, and the other Commodore-Amiga 
  414. software people, and the Commodore-Amiga Technical Support folks.
  415.  
  416. [6] POTENTIAL BUGS AND OTHER NOTES
  417.  
  418.     I should point out here that much of what SetCPU does is of a rather
  419. dubious nature.  Everything that's possible to do correctly under the 2.0 
  420. release of the OS, including CPU/FPU identifications and cache control, is
  421. done via the approved 2.0 methods when running in 2.0, and via my own tricks
  422. when run under 1.3 or earlier releases.  
  423.  
  424.     While it's impossible for an application to correctly use the MMU under
  425. 1.3 or 2.0, SetCPU attempts to be intelligent about its use of the MMU.  It 
  426. will check for the use of the MMU by an agent other than SetCPU, and refuse to
  427. modify the current MMU setup if such an alien MMU setup is found.  For systems
  428. with an unused MMU, SetCPU will do it's best to be safe about the modifications
  429. it makes to the memory map.  There may be problems with this program's MMU
  430. code on the Amiga 3000, but based on the SuperKickStart and CPU programs that
  431. are shipped with the first A3000s, this should not be of immediate concern,
  432. since the A3000 comes with equivalent functionality.  Should an A3000-safe 
  433. version of SetCPU eventually become needed, I'll make the attempt to track
  434. down any A3000 bugs I can find.  Just because you help design a machine doesn't
  435. necessarily mean you have one to code and test on at home.
  436.  
  437.     Finally, if you wish to contact me regarding bug reports, new
  438. releases, contributions of cash or macadamia nuts, or pretty much anything
  439. else, I can be reached at the below addresses.  
  440.  
  441.  
  442.             -Dave Haynie
  443.  
  444.         Logical Address:
  445.              PLINK:        hazy
  446.              bix:        hazy
  447.              usenet:    {uunet,rutgers}!cbmvax!daveh
  448.  
  449.         Physical Address:
  450.  
  451.              284 Memorial Drive
  452.              Gibbstown, NJ
  453.              08027
  454.