home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / arc / Packer / StoneCracker / docs / stc.doc next >
Text File  |  1994-04-26  |  30KB  |  816 lines

  1. =-=-=-=-=-=-=-=-=-=-=-=> StoneCracker v4.10.3 <=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2.  
  3. This new version is major bugfix. No big changes or improvments have done.
  4. New much faster stc.library is also included!
  5.  
  6.     · Fixed some bugs:
  7.       - When trying to save decrunched (lib)executable to a writeprotected
  8.         disk, Stc won't crash anymore
  9.       - Added '** StoneCracker: User aborted.. ' message, when user aborts
  10.         single file crunching in commandline
  11.       - If iconify fails Stc won't crash
  12.       - Stc verified file overwriting only once with the same file. Now
  13.         checked every time.
  14.  
  15.     · PAL/NTSC check - now larger filerequesters are possible under PAL
  16.     · Dest dir (when presented) is also used with single file saving (huuray,
  17.       I forgor to add this to previous version.. :(
  18.       (Note that load/save requesters use the same filerequester)
  19.     · Some slight modification to code.. Not visible to a user
  20.     · New stc.library version 3.322 have faster decrunchers and _much_ faster
  21.       crunching! Separate library for 68020/30/40 is not included!
  22.     · Stc shows the library version it's using.
  23.  
  24.   --> INCLUDED AUTODOCS & INCLUDE FILES FOR PROGRAMMERS!!!!
  25.  
  26.     · Explained (professional) kill system decruncher a bit better. A4
  27.       register contains info about CPU type. See 2.2.2.3!
  28.  
  29.  
  30.  
  31.  
  32.  
  33. =-=-=-=-=-=-=-=-=-=-=-=> StoneCracker v4.10.3 <=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  34.  
  35.                                 Contents
  36.  
  37.  
  38.  
  39. 1 General info
  40. 1.1 Disclaimer
  41. 1.2 Copyright & Distribution
  42. 1.3 Introduction to StoneCracker
  43. 1.4 Requirements
  44. 1.5 Contents of the package
  45. 1.6 The future
  46.  
  47. 2 GUI Settings
  48. 2.1 Filetypes
  49.     2.1.1 Executable programs
  50.     2.1.2 Data files
  51.     2.1.3 Absolute programs
  52. 2.2 Decrunchers
  53.     2.2.1 E-Decrunchers for Executables
  54.           2.2.1.1 Build In
  55.           2.2.1.2 Library
  56.     2.2.2 A-Decrunchers for Absolutes
  57.           2.2.2.1 Normal
  58.           2.2.2.2 Plain
  59.           2.2.2.3 Professional
  60.     2.2.3 Absolute decruncher defs
  61.           2.2.3.1 Load address
  62.           2.2.3.2 Jump address
  63.           2.2.3.3 Decr address - decruncher address
  64.           2.2.3.4 USP address - user stackpointer address
  65.           2.2.3.5 SSP address - system stackpointer address
  66.           2.2.3.6 SR - status register
  67. 2.3 Packmode
  68. 2.4 Seclen - security length
  69. 2.5 DataID
  70. 2.6 Dest dir - destination directory
  71. 2.7 Save prefs - save preferences
  72.  
  73. 3 Using GUI
  74. 3.1 Information gadgets
  75.     3.1.1 File name
  76.     3.1.2 File length
  77.     3.1.3 Processed length
  78.     3.1.4 Crunched length
  79. 3.2 Output window
  80. 3.3 Load file
  81. 3.4 Save file
  82. 3.5 Delete file
  83. 3.6 Iconify
  84. 3.7 Quit
  85. 3.8 Shortcuts
  86.  
  87. 4 Using commandline
  88. 4.1 What I can do from commandline?
  89. 4.2 List of options
  90.     4.2.1 Filetypes -fe, -fel, -fa, -fap, -fak
  91.     4.2.2 Packmode -p0, -p1, -p2, -p3, -p4
  92.     4.2.3 Absolute decruncher defs
  93.           4.2.3.1 Load address -L
  94.           4.2.3.2 Jump address -J
  95.           4.2.3.3 Decr address - decruncher address -D
  96.           4.2.3.4 USP address - user stackpointer address -U
  97.           4.2.3.5 SSP address - system stackpointer address -S
  98.           4.2.3.6 SR - status register -R
  99.     4.2.4 Other options
  100.           4.2.4.1 Overwriting file -o0, -o1
  101.           4.2.4.2 DataID -i
  102.           4.2.4.3 Online info -d, ?
  103. 4.3 Multifile crunching
  104.  
  105. 5 Advanced info
  106. 5.1 Tips for using StoneCracker
  107. 5.2 Decrunch info header & decrunching
  108. 5.3 Hunk preprocessor
  109. 5.4 Includes & autodocs for stc.library
  110.  
  111.  
  112.              Don't get confused b'cos of my bad Engleesh!!
  113.     
  114.  
  115. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  116.                                 Document
  117.  
  118.  
  119.  
  120. 1 General info
  121.  
  122. 1.1     Disclaimer
  123.  
  124.         The author cannot be held liable for the suitability or accuracy
  125.         of this manual  and/or the program(s) it describes. Any damage
  126.         directly or indirectly caused by the use or misuse of this manual
  127.         and/or the program it describes is the sole responsibility of the
  128.         user her/him self.
  129.  
  130.  
  131.  
  132. 1.2     Copyright & Distribution
  133.  
  134.         StoneCracker v4.10.3 professional - written in C
  135.         (c) 1991-94 Jouni 'Mr.Spiv' Korhonen of StoneWare SoftWorks
  136.  
  137.         Stc.library v3.303 upwards - written entirely in assembly
  138.         (c) 1993-94 jouni 'Mr.Spiv' Korhonen of StoneWare SoftWorks
  139.                     & Marcus 'Cozine' Ottosson (optimizations!)
  140.  
  141.         Really big thanks must go to Marcus who did real hardcore
  142.         optimizations to both decrunchers and crunchroutine!
  143.  
  144.     Note! New address:
  145.  
  146.                         Jouni Korhonen
  147.                         Salpausseläntie 8 B 10
  148.                         11100 Riihimäki
  149.                         Finland
  150.  
  151.                         Email: jikorhon@cc.helsinki.fi
  152.  
  153.  
  154.         Reqtools.library  (c) Nico François
  155.  
  156.         GadToolsBox  (c) 1992-93 Jaba Development
  157.  
  158.         StoneCracker (just Stc for now on) (c) StoneWare SoftWorks. All
  159.         rights reserved. This program is Public Domain as long as you
  160.         don't make any money with it.
  161.  
  162.         If you are interested in using this program in your commercial
  163.         products just contact me (use Email for faster reply).
  164.  
  165.         If you like this cruncher very much send some money, so I could
  166.         purchase a real accelerator or A1200.. 8^}
  167.  
  168.  
  169.  
  170. 1.3     Introduction to StoneCracker
  171.  
  172.         What Stc actually is? Stc is an executable/data/absolute file
  173.         cruncher, not an archiver. Powerpacker, Imploder and the others
  174.         do the same job as Stc but not so efficiently. Stc was designed
  175.         to fulfil my own needs and includes those features I think useful.
  176.  
  177.         Algorithm used in Stc is called S404. Some LZ variant I think but
  178.         entirely developed by me and you can notice it (slow & bad
  179.         efficiency). The name is actually a verion number, where S means
  180.         StoneCracker and 404 means v4.04. S404 uses 66Kb for a look ahead
  181.         buffer and 24Kb for a hash table to speedup crunching.
  182.  
  183.         Although S404 can't compete with well written LZH, lh5, etc
  184.         algorithms it still does the best result when compared to other
  185.         single file crunchers (Powerpacker, Imploder, Spike, Crm, etc).
  186.         It's faster and more efficient. Next version S405 already exists!
  187.         And it crunches slightly better (1Kb better per 150Kb).
  188.  
  189.         There are two versions of stc.library: stc.library for 68000/010
  190.         CPUs and stc020.library for 68020++ CPUs. If your Amiga has 68020++
  191.         Stc tries first open stc020.library instead of stc.library. The
  192.         difference between these libraries are that stc020.library uses
  193.         new addressing modes and takes the advantage of odd addresses. No
  194.         significant speed increasement though but faster anyway.
  195.  
  196.         You can use Stc either from commandline or GUI.
  197.  
  198.         From commandline multifile crunching with asterix '*' is possible
  199.         and from GUI with multiselect thru filerequester.
  200.  
  201.         Stc detects all S403 & S404 crunched files automatically and can
  202.         decrunch them.
  203.  
  204.         Cache support with all decrunchers. VBR check with kill OS
  205.         decruncher.
  206.  
  207.         Fast decrunchers! Thanks to Marcus!
  208.  
  209.         I used A2000c 000/28MHz (poor man's accelerator) + kick2.04 + 5Mb
  210.         ram + 140Mb HD. I had 3Mb but I ran out of memory when compiling
  211.         the main C program 8^}  (Køøl.. And the program size is just 31Kb)
  212.  
  213.  
  214.  
  215. 1.4     Requirements
  216.  
  217.         Stc works ok on stock A500. 512Kb will do but atleast 1Mb and
  218.         fast memory are more comfortable. There's no separate NTSC mode.
  219.         The custom screen is always opened to fit into NTSC (sorry PAL
  220.         users).
  221.  
  222.         Tested in KickStarts 1.3, 2.04 and 3.0.
  223.  
  224.         If you are using KickStart 1.3 remeber to use 1.3 version of
  225.         reqtools.library and gadtools13.library.
  226.  
  227.  
  228.  
  229. 1.5     Contents of the package
  230.  
  231.         This package should include atleast these files:
  232.  
  233.          · stc                                  ; main program
  234.          · stc.info
  235.  
  236.          · libs/stc.library                     ; any kick, any CPU
  237.          · libs/reqtools.library                ; kick2.0+
  238.          · libs13/reqtools.library              ; kick1.3+
  239.          · libs13/gadtools13.library            ; kick1.3+
  240.  
  241.          · docs/stc.doc                         ; this file
  242.          · docs/stcautodocs.doc                 ; about stc.library
  243.  
  244.          · sources/optidec.s                    ; optimised S404 decruncher
  245.          · sources/cache.s                      ; set caches properly
  246.  
  247.          · include/clib/stc_protos.h            ; for programmers
  248.          · include/libraries/stc.h
  249.          · include/libraries/stc.i
  250.          · include/libraries/stc_lib.i
  251.          · include/pragmas/stc_pragmas.h
  252.          · include/proto/stc.h
  253.  
  254.  
  255. 1.6     The future
  256.  
  257.         If I ever release a new version of Stc, it will probably be based
  258.         on some already existing algorithm. (I found some interesting
  259.         sources from several ftp sites ;^)
  260.  
  261.         Of course it all depends on users. If there are no users there won't
  262.         be new versions either.
  263.  
  264.  
  265.  
  266. 2 GUI Settings
  267.  
  268. 2.1     Filetypes
  269.  
  270. 2.1.1   Executable programs
  271.  
  272.         Executable programs are normal program files that you can run
  273.         from CLI or WorkBench. When you load any file, Stc first does
  274.         a filetype check for that file. If hunk_header is found from
  275.         the file Stc goes on with loading and hunk processing.
  276.         If there aren't hunk_header, filetype is internally changed to
  277.         data and Stc goes on with loading and crunching.
  278.  
  279.         Hunk processing means that the standard hunk structure of the
  280.         file is converted to Stc's own shorter form. Note! If your
  281.         program includes any debug, symbol, name or external hunks they
  282.         are deleted.
  283.  
  284.         At the moment Stc's hunk processor can handle following hunk
  285.         types: hunk_header, hunk_code, hunk_data, hunk_bss, hunk_reloc32,
  286.         hunk_symbol, hunk_debug, hunk_external, hunk_name and hunk_end.
  287.         Other hunk types will cause an error.
  288.  
  289.         For more info about Stc's hunk processor read 5.3.
  290.  
  291. 2.1.2   Data files
  292.  
  293.         When filetype data is selected, Stc doesn't care about the
  294.         contents of the file. Also no decruncher is attached to the
  295.         crunched file. Standard fileheader is attached to the file.
  296.         For more info read 5.2.
  297.  
  298. 2.1.3   Absolute programs
  299.  
  300.         Absolute programs are sign of *really* *bad* programming habbit on
  301.         Amiga. You better know what you are doing! Loaded file is handled
  302.         as a data file and a decruncher is attached to the crunched file.
  303.         The decruncher makes it possible to execute your absolute program
  304.         and after loading decrunch it into certain memory location.
  305.         Stc supports caches & VBR with absolute decrunchers.
  306.  
  307.  
  308.  
  309. 2.2     Decrunchers
  310.  
  311. 2.2.1   E-Decrunchers for executables
  312.  
  313. 2.2.1.1 Build in decruncher attaches a decruncher and a relocator to the
  314.         crunched file. Then it's possible to run crunched program as it
  315.         wasn't crunched. After decrunching the relocator allocates all
  316.         needed memory blocks for the program and the moves & relocates
  317.         the program run there.
  318.  
  319.         Before running decrunched & relocated program, both instruction and
  320.         data caches are flushed and the memory for crunched data is
  321.         freed. Build in decruncher works with all kickstarts.
  322.  
  323. 2.2.1.2 Library decruncher does everything that build in decruncher does
  324.         but needs to find stc.library from your system (libs drawer). The
  325.         advantage of the library decruncher is that it's much shorter
  326.         (just the opening code for stc.library and one function call)
  327.         and b'cos the routines in the library are highly optimized,
  328.         whole decrunching & relocating process takes much less time.
  329.  
  330. 2.2.2   A-Decrunchers for absolutes
  331.  
  332. 2.2.2.1 Normal decruncher is quite simple. It just decrunches your program
  333.         into certain memory location and runs it. The decruncher needs
  334.         only load address (see 2.2.3.1) and jump address (see 2.2.3.2).
  335.  
  336.         After decrunching both instruction and data caches are flushed.
  337.         Note! Exec function ClearCacheU() is used for that. So if you have
  338.         taken over the OS... BanG may happen!
  339.  
  340. 2.2.2.2 Plain decruncher is actually not a decruncher b'cos you can't run
  341.         it from CLI or WorkBench. Plain decruncher doesn't include any
  342.         hunks stuff (not runable..) or cachecode. Otherwise it works just
  343.         like normal decruncher.
  344.  
  345. 2.2.2.3 Professional decruncher is useful when you need to take over the OS
  346.         or decrunch your (long) program into very low memory. Following
  347.         things are done before decrunching:
  348.                 - CPU to supervisor (Exec function SuperVisor() )
  349.                 - All interrupts off ($7fff to IntEna)
  350.                 - All DMAs off ($7fff to DmaCon)
  351.                 - All internal drives are turned off
  352.                 - If 68010++ exists VBR is set to 0
  353.                 - USP is relocated (see 2.2.3.4)
  354.                 - SSP is relocated (see 2.2.3.5)
  355.                 - Decruncher code is moved (see 2.2.3.3)
  356.                 - If 68020++ exists caches are flushed (no OS anymore)
  357.         And after decrunching:
  358.                 - If 68020++ exists caches are flushed (no OS anymore)
  359.                 - Status register is modified (see 2.2.3.6)
  360.  
  361.                 - NOTE! A4 register contains info about the CPU. If
  362.                   A4 = $ffffffff your CPU is 68020/030/040 and if
  363.                   A4 = $00000000 your CPU is 68000/010.
  364.  
  365.         If decrunched program would overwrite even parts of the crunched
  366.         data then cruncher data is move in memory so that decrunching is
  367.         possible without lockups.
  368.  
  369. 2.2.3   Absolute decruncher defs
  370.  
  371. 2.2.3.1 Load address (in hexadecimales) is the memory location you want
  372.         your program to be decrunched.
  373.  
  374. 2.2.3.2 Jump address (in hexadecimals) is the start (run here) address of
  375.         your program.
  376.  
  377. 2.2.3.3 Decruncher address (in hexadecimals) is the memory location you
  378.         want to place the decruncher code. Used only with professional
  379.         decruncher (see 2.2.2.3).
  380.  
  381.         Don't place inside your stack memory or program memory. The code
  382.         is 284 (=$11c) bytes long.
  383.  
  384. 2.2.3.4 USP = user stackpointer address (in hexadecimals) is the top
  385.         memory location for your user stack. Used only wirh professional
  386.         decruncher.
  387.  
  388. 2.2.3.5 SSP = system stackpointer address (in hexadecimals) is the top
  389.         memory location for your system stack. SSP is used by the pro
  390.         decruncher, interrupts, traps etc. whenever the supervisor bit is
  391.         set in the status register (see 2.2.3.6). Used only with
  392.         professional decruncher.
  393.  
  394. 2.2.3.6 SR = status register is loaded with this value after decrunching.
  395.         Used only with professional decruncher.
  396.  
  397.  
  398.  
  399. 2.3     Packmode
  400.  
  401.         There are five packmodes available. The number 16K, 8K, etc means
  402.         the maximum distance S404 crunchroutine tries to find equal
  403.         strings. The higher the packmode value is the better the crunch
  404.         result is. Though with small files lower packmode value may give
  405.         better result than the highest value (testing.. testing..).
  406.  
  407.         The packmode doesn't affect to memory usage during crunching or
  408.         decrunching but the lower the packmode is the faster the cruncher
  409.         is.
  410.  
  411.  
  412.  
  413. 2.4     Seclen - security length
  414.  
  415.         This value has quite important role. Better way to say security
  416.         length is overlap distance. If source (crunched) and destination
  417.         (uncrunched) data overlap, the destination must be atleast
  418.         'security length' bytes in higher memory than the source. It will
  419.         guarantee 100% safe decrunching.
  420.  
  421.         Also if crunching fails at the begining of the file, increasing
  422.         the security length may solve the problem.
  423.  
  424.  
  425.  
  426. 2.5     DataID
  427.  
  428.         DataID is a string that is automatically added into every crunched
  429.         data file. For example is dataID is 'argh' then '.argh' is added
  430.         into crunched data files. If there isn't dataID nothing is added.
  431.  
  432.  
  433.  
  434. 2.6     Dest dir - Destination directory
  435.  
  436.         Destination directory is only used when you select multiple files
  437.         from the filerequester. Crunched & decrunched files are
  438.         automatically saved to destination directory. Empty destination
  439.         directory is equal to the directory you selected the files.
  440.  
  441.  
  442.  
  443. 2.7     Save prefs - save preferences
  444.  
  445.         Save preferences save the currect state of GUI gadgets and dataID
  446.         string into S: (s drawer) as stc.cfg.
  447.  
  448.         Stc.cfg is automatically loaded when GUI is used.
  449.  
  450.  
  451.  
  452. 3 Using GUI
  453.  
  454.         GUI aka Graphical User Interface. The GUI was originally developed
  455.         with Gadtoolsbox and after slight modifications it also works with
  456.         kick1.3 (uses gadtools13.library then).
  457.  
  458.         Here's a short list of different gadgets and what you can do with
  459.         them.
  460.  
  461. 3.1     Information gadgets
  462.  
  463. 3.1.1   File name shows the name of the loaded file (in buffer). If this
  464.         text gadget is empty there's no file in buffer.
  465.  
  466. 3.1.2   File length is the size in bytes of the file in the buffer.
  467.  
  468. 3.1.3   Processed length shows the file length after precossing hunks.
  469.         For data and absolute files processed length is the same as the
  470.         file length.
  471.  
  472. 3.1.4   Crunched length
  473.  
  474.         File length after crunching. The length also includes 16 bytes of
  475.         decrunch info header (see 5.2). 
  476.  
  477.  
  478.  
  479. 3.2     Output window
  480.  
  481.         The output window (console) on the right side of the screen is
  482.         mostly used to output some system messages. Some error messages
  483.         include '(de:???)' where 'de' means 'dos error'.
  484.  
  485.  
  486.  
  487. 3.3     Load file
  488.  
  489.         When you press this gadget a filerequester shows up and you can
  490.         select one or more files to crunch or decrunch.
  491.  
  492.         If you selected multiple files they are automatically saved to
  493.         destination directory. Also decrunching multiple files is
  494.         possible.
  495.  
  496.  
  497.  
  498. 3.4     Save file
  499.  
  500.         When you press this gadget a (save)filerequester shows up and you
  501.         can select or write a save file name and path.
  502.  
  503.         Note that if you selected multiple files only the last crunched &
  504.         decrunched file remains in buffer. The other ones are saved
  505.         automatically to the destination directory (see 2.6).
  506.  
  507.  
  508.  
  509. 3.5     Delete file
  510.  
  511.         When you press this gadget a filerequester shows up and you can
  512.         select one or more files to delete.
  513.  
  514.  
  515.  
  516. 3.6     Iconify
  517.  
  518.         Iconify will free all buffers, close some libraries, close window
  519.         and screens and free used resources.
  520.  
  521.         A little window is opened and when you press right mousebutton
  522.         over it Stc will restart.
  523.  
  524.  
  525.  
  526. 3.7     Quit
  527.  
  528.         Exit this marvellous program.
  529.  
  530.  
  531.  
  532. 3.8     Shortcuts
  533.  
  534.         Almost every gadget can also be used thru keyboard. Shortcut keys
  535.         are marked with underscore.
  536.  
  537.  
  538.  
  539. 4 Using commandline
  540.  
  541. 4.1     What I can do from commandline?
  542.  
  543.         Stc can do everything from commandline that from GUI except for
  544.         decrunching. Actually you have more possibilities b'cos you
  545.         don't have to always select from predefined values.
  546.  
  547.         It's possible to crunch multiple files at one time. Multifile
  548.         crunching is a bit limited though. Read 4.3 for more info.
  549.  
  550.         You can abort crunching any time with CTRL-C!
  551.  
  552.         The structure of commandline is as follows:
  553.  
  554.         stc [-<options>] [sourcefile(s)] [destdir]
  555.          ^        ^       ^               ^
  556.          |        |       |               |
  557.          |        |       |               +-----> Destination directory is
  558.          |        |       |                       not needed if you want
  559.          |        |       +--> Files to load.     save crunched files into
  560.          |        |            Asterix '*' may    same directory you loaded
  561.          |        |            be used.           files from.
  562.          |        |
  563.          |        +--> These are case sensitive. None is compulsory.
  564.          |
  565.          +--> Program name
  566.  
  567.         Note! There can be only one sourcefile name at the time!
  568.         And if there's no destdir, sourcedir is used as a destdir.
  569.  
  570.  
  571.  
  572. 4.2     List of options
  573.  
  574.     Note! All options are case sensitive and may be placed
  575.         everywhere in commandline.
  576.  
  577. 4.2.1   Filetypes
  578.  
  579.         -fe  (default) sets filetype executable and decruncher will be
  580.              build in.
  581.         -fel sets filetype executable and decruncher will be library.
  582.         -fd  sets filetype data.
  583.         -fa  sets filetype absolute and decruncher will be normal. Only
  584.              load address (see 2.2.3.1 & 4.2.3) and jump address (see
  585.              2.2.3.2 & 4.2.3) are needed.
  586.         -fap sets filetype absolute and decruncher is plain. Only load
  587.              address (see 2.2.3.1 & 4.2.3) and jump address (see 2.2.3.2 &
  588.              4.2.3) are needed.
  589.         -fak sets filetype absolute and decruncher will be professional.
  590.              All absolute decruncher defs are needed (see 2.2.3 & 4.2.3).
  591.  
  592. 4.2.2   Packmode
  593.  
  594.         -p0  (default) sets packmode 16K (14 bits). (see 2.3)
  595.         -p1  sets packmode 8K (13 bits). (see 2.3)
  596.         -p2  sets packmode 4K (12 bits). (see 2.3)
  597.         -p3  sets packmode 2K (11 bits). (see 2.3)
  598.         -p4  sets packmode 1K (10 bits). (see 2.3)
  599.  
  600. 4.2.3   Absolute decruncher defs
  601.  
  602. 4.2.3.1 Load address
  603.  
  604.         With -L option you define the decrunch memory location for your
  605.         program. E.g -L3f002 will decrunch your program starting from
  606.         address $3f002. Given value is always haxadecimal. (see 2.2.3.1)
  607.  
  608. 4.2.3.2 Jump address
  609.  
  610.         With -J option you define the start address of your program that
  611.         the decruncher calls after decrunching. E.g -J40000 jump into
  612.         address $40000 after decrunching. (see 2.2.3.2)
  613.  
  614.         Note! If you don't define jump address, Stc assumes it's the same
  615.         as load address.
  616.  
  617. 4.2.3.3 Decr address - decruncher address
  618.  
  619.         This option affects only to the professinal decruncher!
  620.  
  621.         With -D option you define the location of the decruncher code.
  622.         E.g -D100 moves decruncher to address $100.
  623.         (see 2.2.3.3)
  624.  
  625.         Decruncher address defaults to $100.
  626.  
  627. 4.2.3.4 USP address - user stackpointer address
  628.  
  629.         This option affect only to the professional decruncher!
  630.  
  631.     With -U option you define the location of user stackpointer. E.g
  632.         -U20000 moves the top of USP to address $20000. The stack is
  633.         reloaded with defined value before decrunching. The decruncher
  634.         uses SSP - system stackpointer so it doesn't matter even if the
  635.         decruncher code is over the stack area.
  636.         (see 2.2.3.4)
  637.  
  638. 4.2.3.5 SSP address - system stackpointer address
  639.  
  640.         This option affect only to the professional decruncher!
  641.  
  642.     With -S option you define the location of system stackpointer.
  643.         E.g -S20000 moves the top of SSP to address $20000. The stack is
  644.         reloaded with defined value before decrunching. The decruncher
  645.         uses SSP during decrunching!
  646.     (see 2.2.3.5)
  647.  
  648. 4.2.3.6 SR - status register
  649.  
  650.         This option affect only to the professional decruncher!
  651.  
  652.         With -R option you define the state of status register. E.g
  653.         -R2010 forces CPU to supervisor mode and sets C flag.
  654.  
  655.         Note! Reloading is done just before jumping into your program!
  656.  
  657.  
  658.  
  659. 4.2.4   Other options
  660.  
  661. 4.2.4.1 Overwriting file
  662.  
  663.     With option -o1 (default) Stc always checks the destination
  664.         directory if there is a file with a same name as your file.
  665.         If there is you are asked whether to overwrite it or not.
  666.  
  667.         -o0 option overwrites without any warning. Very useful if
  668.         you are crunching multiple files.
  669.  
  670. 4.2.4.2 DataID
  671.  
  672.         With -i option you can define the dataID string that is added
  673.         to every crunched data file's name. Default string is 'stc'.
  674.         Maximum string length is seven chars.
  675.  
  676.         E.g -ijouni adds '.jouni' to crunched data files. If you want
  677.         to save data files without any ID string use -i alone.
  678.  
  679. 4.2.4.3 Online info
  680.  
  681.         There are two short help texts included into Stc. With ? you
  682.         get a quick reference of all commandline options and witd -d
  683.         option you get a list of internal defults and an example how
  684.         to use commandline.
  685.  
  686.  
  687.  
  688. 4.3     Multifile crunching
  689.  
  690.         You can crunch multiple files in one shot. It's quite limited
  691.         though. If the source filename includes asterix '*' Stc tries to
  692.         replace the asterix '*' with any string, character or nothing.
  693.         Note! There can be only one source filename at the time.
  694.  
  695.         The destination directory defaults to source directory. So you
  696.         don't have to define any destination directory. If you define a
  697.         destination directory Stc tries to find it and if the directory
  698.         isn't found Stc asks you to generate one.
  699.  
  700.  
  701.  
  702. 5 Advanced info
  703.  
  704. 5.1     Tips for using StoneCracker
  705.  
  706.         · If you press enter in GUI load address string gadget will be
  707.           activated.
  708.  
  709.         · Loaded file remains in buffer until you load a new one and start
  710.           loading it. (GUI)
  711.  
  712.         · 'Abort crunching' gadget cancels all files if you had selected
  713.           multiple files to crunch. (GUI)
  714.  
  715.  
  716.  
  717. 5.2     Decrunch info header & decrunching
  718.  
  719.         Every file crunched with Stc4.02a or Stc4.10.3 has following header
  720.         (16 bytes) at the beginning of the crunched data:
  721.  
  722.             "S404" or "S403"    ; cruncher version - string
  723.             Security length     ; overlap size - longword
  724.             Original length     ; decrunched length - longword
  725.             Crunched length     ; crunched length - longword
  726.                .                ; crunched data starts
  727.                .
  728.                .
  729.  
  730.         Security length is always 16 + something.
  731.  
  732.         There are also two control words at the end of crunched data. For
  733.         historical reasons it's quite wierd. I'll explain it with a 
  734.         following picture:
  735.  
  736.         <<- Lower memory                           Higher memory ->>
  737.  
  738.                   +------------ Crunched length ------------+
  739.                   |                                         |
  740.         InfoHeader|......................LastWord|BitCounter|MaxBits
  741.                             ^                 ^       ^         ^
  742.                             |                 |       |         |
  743.             Crunched data --+                 |       |         |
  744.                                               |       |         |
  745.                          Last crunched word --+       |         |
  746.                                                       |         |
  747.            How many used bits there are in LastWord --+         |
  748.                                                                 |
  749.                          Efficiency (packmode - only in S404) --+
  750.  
  751.         If both crunched data and destination memory overlap there must
  752.         be atleast 'Security length' distance between the start of the
  753.         crunched data and the start of the destination memory:
  754.  
  755.         <<- Lower memory                               Higher memory ->>
  756.  
  757.                   <<<-------------- Decrunching direction --------------
  758.  
  759.         InfoHeader|......................LastWord|BitCounter|MaxBits
  760.         ^
  761.         |             |<------------ Destination memory starts here ....
  762.         |             |
  763.         +-- SecLen ---+
  764.         |
  765.         +---------------> Crunched data starts here..
  766.  
  767.  
  768.  
  769. 5.3     Hunk preprocessor
  770.  
  771.         Every executable file is first preprocessed before crunching.
  772.         Processed files are always shorter than originals. Preprocessor
  773.         does the following to hunks:
  774.  
  775.           · All debug hunks generated by compiler are deleted (no way to
  776.             get them back!).
  777.           · There are no Hunk_ends
  778.           · Hunk header info at the beginning of the file is modified to
  779.             a shorter form:
  780.                   1 longword = (total number of hunks)-1 (=n)
  781.                 n+1 longwords = hunksizes & memory type (as normally)
  782.           · Hunk_code is converted to %01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.L
  783.                                          +-------- datasize>>2 -------+
  784.           · Hunk_data is converted to %11xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.L
  785.                                          +-------- datasize>>2 -------+
  786.           · Hunk_bss is converted to %100000000000000000.W
  787.           · Hunk_reloc start with %000000000000000000.W and then
  788.             Repeat until (number of relocentries) = 0
  789.               1 word = number of relocentries (null if no relocs anymore)
  790.               1 word = relocate hunk number..
  791.               1 longword = %bbbbbbbbxxxxxxxxxxxxxxxxxxxxxxxx.L
  792.                             ^       +----- First reloc ----+
  793.                             |
  794.                             +--> Number of bytes to add to 'First reloc'
  795.                                    2       = 3 bytes per relocentry
  796.                                    4 or 6  = 2 bytes per relocentry
  797.                                    8 or 10 = 1 byte per relocentry
  798.                                    ?       = only one relocentry
  799.               followed by (number of relocentries) %bbbbbbbb reloc-
  800.               entries..
  801.           · End of processed hunks is %1111111111111111.W
  802.  
  803.  
  804.  
  805. 5.4     Includes & autodocs for stc.library
  806.  
  807.         There are proper include files for standard assemblers (atleast
  808.         DevPac and AsmOne understand them) and SAS/C.
  809.  
  810.         Btw.. include files for stc.library are a messish pile of shit!
  811.  
  812.  
  813.  
  814. MOVEQ #0,d0
  815. RTS                     ; succesful exit
  816.