home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d555 / thea64package.lha / TheA64Package / A64Utils.lzh / Doc / Converter < prev    next >
Text File  |  1991-10-02  |  28KB  |  694 lines

  1.  
  2.  
  3.  
  4.  
  5. CONVERTER
  6.  
  7.     Included with The A64 Package are two utilities "Optimize" and
  8.     "Convert."  These utilities are designed to make A64 run C64
  9.     programs faster.  The speed increases gained with these utilities
  10.     can range from slightly faster than normal to too fast to use and
  11.     the average result will be A64 running twice as fast as normal.
  12.     Both of these utilities work with map dump files created with
  13.     A64.  It is suggested that you familiarize yourself with this
  14.     feature of A64 before continuing (See LOAD MAP and SAVE MAP in
  15.     THE CODE MENU section).
  16.  
  17.  
  18. A64's SPEED
  19.  
  20.     A64 is written entirely in assembly language so that it can run
  21.     C64 programs at the fastest possible speed, but even with the
  22.     Amiga running 7 times faster than the C64, A64 sometimes has
  23.     trouble doing everything it has to at 100% speed.  Sometimes this
  24.     slow down will be barely noticeable and other times it will be
  25.     painfully apparent.  There are many things that can be done to
  26.     make C64 programs run faster, by reading through the A64 Prefs
  27.     section of the manual you will notice that many Prefs settings
  28.     effect A64's speed, usually the speed increase gained with each
  29.     setting is small, but when all of the settings are set to their
  30.     optimum settings the total speed increase can be great.  Even
  31.     with all of the Prefs settings A64 may still not run some C64
  32.     programs fast enough, so we developed two utilities to help make
  33.     A64 run faster, "Optimize" and "Convert."
  34.  
  35.  
  36. OPTIMIZE
  37.  
  38.     Believe it or not, many C64 programs spend a great deal of time
  39.     sitting in loops doing absolutely nothing, but wasting time.
  40.     This is done to keep C64 programs from performing some operations
  41.     too fast.  For example, if the C64 were to move a sprite across
  42.     the screen as fast as it was able the sprite would become a blur.
  43.     So programmers put delay loops in their programs to slow things
  44.     down.  For example, moving the sprite again, the program would
  45.     work like this: move the sprite, wait, move the sprite, wait...
  46.     As you can tell this process of waiting wastes a great deal of
  47.     time.  The Optimize utility allows you to remove many of these
  48.     waits from a C64 Program.
  49.  
  50.     The Optimize utility must be run from the Shell and its usage is
  51.     as follows:
  52.  
  53.         Optimize <source map> [dest map]
  54.  
  55.  
  56.  
  57.  
  58.                                                                  4-1
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.         <source map> is a required parameter, it is the name of the
  69.                      map dump file that you want to optimize.
  70.         [dest map]   is an optional parameter, it is the name of the
  71.                      file that you want Optimize to write the
  72.                      optimized map dump to.  If this parameter is not
  73.                      specified Optimize will overwrite <source map>
  74.                      with the optimized map dump.
  75.  
  76.     The Optimize utility will load the specified map dump file and
  77.     search it for delay loops.  When Optimize finds a delay loop, the
  78.     delay loop will be displayed as a disassembly listing and you
  79.     will be asked if Optimize should remove the delay.  Enter Y for
  80.     yes, remove the delay or N for no, don't remove the delay.  After
  81.     Optimize is done it will save the new map dump with the name you
  82.     specified.  You can then load the optimized map dump file with
  83.     A64 Prefs' LOAD MAP feature.
  84.  
  85.     The reason you are asked if the delay should be removed is that
  86.     there may be times when you don't want to remove all of the
  87.     delays in a C64 program.  Removing some delays can cause some C64
  88.     programs to run too fast.  If you encounter this problem you'll
  89.     have to experiment with removing some delays and not others until
  90.     you find the one(s) that are making A64 run too fast.  This is
  91.     not hard to do, because most C64 programs that use delays usually
  92.     don't use more than four or five of them.  Because you may have
  93.     to run Optimize on a map dump file several times, it is suggested
  94.     that you specify a [dest map] until you get the C64 program
  95.     running acceptably.
  96.  
  97.     NOTE: We have barely scratched the surface in realizing
  98.           Optimize's full potential for speeding up C64 programs.
  99.           In future versions we can expect many more speed
  100.           increases with a greater range of programs.
  101.  
  102.  
  103. HOW A64 RUNS A PROGRAM
  104.  
  105.     To A64, all Commodore 64 programs are actually machine language
  106.     programs.  Even a BASIC program can be considered to be machine
  107.     language, because A64 doesn't actually run the BASIC code, it
  108.     instead runs the C64's BASIC ROM which in turn runs the BASIC
  109.     program and the BASIC ROM is machine language.
  110.  
  111.     Machine language programs are made up of opcodes.  Opcodes are
  112.     machine language instructions that tell the computer to perform
  113.     some tiny operation, like move a value from one place to another
  114.     or perform some kind of operation to a value.  It takes many,
  115.     many opcodes to perform even the simplest operations on your
  116.     computer.
  117.  
  118.     The opcodes of a machine language program are executed by the
  119.  
  120.  
  121.                                                                  4-2
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.     computer's microprocessor.  The Amiga and the C64 use different
  132.     microprocessors so their machine languages are different.  This
  133.     is one of the reasons why you usually can't take a program
  134.     written for one computer and run it on a different computer.
  135.  
  136.     Because the Amiga uses a different microprocessor than the C64,
  137.     the Amiga can not directly run a C64's machine language.  To
  138.     run a C64 machine language program on the Amiga, the program must
  139.     be interpreted.  Meaning a Amiga program must fetch each C64
  140.     machine language opcode and then execute a set of instructions
  141.     that simulate the operations of the C64's opcode.  This is how
  142.     A64 runs a C64 program, it continuously fetches and simulates
  143.     C64 opcodes.  As you might imagine, this process of interpreting
  144.     the C64's opcodes is very time consuming.  A64 must be able to
  145.     interpret thousands of C64 opcodes per second and still handle
  146.     graphics, I/O and other miscellaneous functions.
  147.  
  148.  
  149. CONVERT
  150.           
  151.     The Convert utility allows you to convert the C64 machine
  152.     language stored in a map dump file into Amiga machine language.
  153.     This conversion process eliminates a great deal of work that A64
  154.     would normally have to do "on the fly."  A64 will no longer have
  155.     to interpret the C64 machine language because it will already be
  156.     in a form that A64 understands, pure Amiga machine language.
  157.     This conversion process will result in A64 running a C64 program
  158.     anywhere from 2 to 5 times faster than it normally would. 
  159.  
  160.     NOTE: The Convert utility is fairly complex and it is geared
  161.           toward the more experienced C64 user.  To use the Convert
  162.           utility it is recommended that you have at least a basic
  163.           understanding of 6510 machine language and of the C64's
  164.           architecture.
  165.  
  166.     To explain how to use the Convert utility we will show its usage
  167.     and then explain each parameter.  The Convert utility must be run
  168.     from the Shell and its usage is as follows:
  169.  
  170.         Convert <MapDump> [-OOutput] [-AAddr file] [-L] [-Bxxx] [-P]
  171.  
  172. MAPDUMP PARAMETER
  173.  
  174.     The <MapDump> parameter is required, it is the name of the map
  175.     dump file that you want Convert to use for the conversion.
  176.     
  177. OUPUT PARAMETER
  178.  
  179.     The [-OOutput] parameter is optional, it is the name of the file
  180.     that you want Convert to write the converted code to.  If this
  181.     parameter is not specified then Convert will output the converted
  182.  
  183.  
  184.                                                                  4-3
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.     code to the file <MapDump>.conv.  This output file is the file
  195.     that can be loaded with A64 Prefs LOAD CODE menu option.
  196.  
  197. ADDR FILE PARAMETER
  198.  
  199.     The [-AAddr file] parameter is optional, it is the name of the
  200.     address file that Convert will use to aid it in the conversion
  201.     process.  If this parameter is not specified then Convert will
  202.     assume that the address file is named <MapDump>.addr.
  203.  
  204.     The address file is the key to how Convert works.  The C64 memory
  205.     map contains 64k of RAM.  This RAM is addressed at $0000 - $FFFF.
  206.     Whenever the C64 loads a program it stores the program somewhere
  207.     in this 64k of RAM, but very few programs use the entire 64k for
  208.     storing actual program code.  Convert uses the address file to
  209.     determine what sections of the 64k RAM it should convert and what
  210.     sections it should ignore.  You must create an address file for
  211.     every program that you wish to convert.  If you have a basic
  212.     understanding of 6510 machine language creating address files is
  213.     relatively simple.
  214.  
  215. WHAT IS AN ADDRESS FILE
  216.  
  217.     Address files are simple text files that you must create
  218.     yourself.  They can be made with any text editor or word
  219.     processor that can save files in pure ASCII.  Like its name
  220.     implies address files are files that contain addresses.  These
  221.     addresses are used by Convert to determine what it should and
  222.     should not convert.  These addresses can be broken down into
  223.     two catagories: addresses to include in the conversion and
  224.     addresses to exclude from the conversion.
  225.  
  226.     Here is an example of part of an actual address file:
  227.  
  228.         ; Address file for H.E.R.O.
  229.  
  230.         #$8000-$8fff       ; <- these are the addresses to include
  231.         #$9000-$9fff
  232.  
  233.         !$8000-$8008       ; <- these are the addresses to exclude
  234.         !$81ff-$8206
  235.  
  236.     The first thing you must specify in an address files is what
  237.     addresses Convert must include in the conversion process.
  238.     Addresses to be included begin with the # symbol and specify the
  239.     start and end address of the section of the C64 memory map to be
  240.     included.  Because of the way that Convert actually converts the
  241.     C64 code your include addresses should always start on even 4k
  242.     boundaries and be 4k in size, this is not absolutely required,
  243.     but is strongly recommended.
  244.  
  245.  
  246.  
  247.                                                                  4-4
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.     Include addresses must be specified in address order and can be
  258.     listed in either hexadecimal or decimal.  Addresses are assumed
  259.     to be decimal unless they begin with the $ symbol.
  260.  
  261.     After all the include addresses are specified you then must
  262.     specify what addresses within the included sections to exclude.
  263.     Addresses to be excluded begin with the ! symbol and specify the
  264.     start and end address of the section of the C64 memory map to be
  265.     excluded.  These addresses are always within an included area.
  266.     There are three instances where you would want to exclude
  267.     addresses from the included sections:
  268.  
  269.         1. The C64 program has data imbedded in its code.
  270.         2. The C64 program is using undefined opcodes.
  271.         3. The C64 program is using self-modifying code.
  272.  
  273.     Exclude addresses must be specified in address order and can be
  274.     listed in either hexadecimal or decimal.  Addresses are assumed
  275.     to be decimal unless they begin with the $ symbol.
  276.  
  277.     Creating address files is not as complex as it may appear, by
  278.     using A64Mon and the List option in Convert (discussed below)
  279.     finding the addresses to put in the address file is simple.  For
  280.     a step by step example of converting a C64 program and creating
  281.     an address file see CONVERTING A C64 PROGRAM.
  282.  
  283. THE -L PARAMETER
  284.  
  285.     The -L parameter is optional, it is used to create listing files
  286.     that help in the conversion process of a C64 program.  When you
  287.     specify the -L option Convert will generate a listing file for
  288.     each included section listed in the address file.  A listing file
  289.     contains a disassembly of the included section with some comments
  290.     that help determine what areas of an included area should be
  291.     excluded.  As already stated, Convert creates a listing file for
  292.     each included section, these listing files can be very large and
  293.     if you specify a very large area of the memory map to be included
  294.     as one chunk you could generate a file that is too large to be 
  295.     read.  This is one of the reasons why it is recommended that when
  296.     you specify areas to be included that they are no bigger than 4k.
  297.     A listing file for a 4k section will be approximately 35k to 45k
  298.     in size.  Also if you include the entire 64k in an address file
  299.     the resulting listing file(s) could easily fill an 880k floppy.
  300.  
  301. THE -B PARAMETER
  302.  
  303.     The -B parameter is optional, it is used to tell Convert how much
  304.     of the Amiga's memory to reserve for the conversion process.
  305.     Converted code files can be very large, they average 40 to 50k
  306.     per 4k section of the 64 memory map.  If you tried to convert the
  307.     entire 64k map the resulting code file would be over 800k in
  308.  
  309.  
  310.                                                                  4-5
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.     size!  luckily it is rare to even have to convert half of the
  321.     memory map so code files of this size are not needed.  Convert
  322.     normally allocates 50k per 4k included section which is more than
  323.     sufficient for final converted code files, but during the initial
  324.     conversion process you will likely get code buffer overflow
  325.     errors until you start excluding addresses.  To get Convert to
  326.     successfully go through the initial conversion process you may
  327.     have to specify a larger than 50k block size.  The block size is
  328.     specified by -Bxxx and xxx can be 24 to 128, which represents
  329.     how many kilobytes of memory to set aside for each included 4k
  330.     section.
  331.  
  332. THE -P PARAMETER
  333.  
  334.     Convert is capable of outputting code that is specifically
  335.     generated for either the 68000 microprocessor or for the 68010,
  336.     68020 or 68030 microprocessor.  The -P option is used to tell
  337.     Convert that it should create the code for a microprocessor
  338.     other than the 68000.  If your Amiga has a 68010, 68020 or 68030
  339.     installed you must specify this option or A64 will not run the
  340.     converted code module.  Likewise if you have a 68000 installed
  341.     you should not specify the -P option or A64 will refuse to run
  342.     the converted code.
  343.  
  344. CONVERTING A C64 PROGRAM
  345.  
  346.     We realize that the Convert utility appears to be very complex,
  347.     but once you successfully convert a C64 program you'll see that
  348.     it is not too difficult to do.  And once you see the speed
  349.     increases that can be gained with converted code we're sure that
  350.     you'll want to convert as many C64 programs as possible.
  351.  
  352.     We will help guide you through your first code conversion by
  353.     listing step by step what you should do.  This example assumes
  354.     that you are either using a floppy based system with an external
  355.     drive and an A64 WorkBench as outlined in the GETTING STARTED
  356.     section or that you are using a hard disk.  If you are using a
  357.     floppy based system you should have a newly formatted blank disk
  358.     ready.  If you are using a hard disk you may want to create a
  359.     directory on your hard disk specifically for map dumps and
  360.     converted code files.  A good example would be to create a
  361.     directory named Maps in TheA64Package directory.  For this
  362.     example we will be using the C64 program Archon.  If you do not
  363.     have Archon you should still be able to follow this example using
  364.     some other program.  
  365.  
  366.     The first thing we must do is create a map dump file for the
  367.     program we wish to convert.  Run A64 and then load the C64
  368.     program to be saved.  When the C64 program is done with all
  369.     loading enter A64 Prefs.  Select SAVE MAP in the CODE MENU.
  370.     Save the map dump file with the name Archon.map (assuming you
  371.  
  372.  
  373.                                                                  4-6
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.     are using Archon) to either the blank formatted disk or to
  384.     the directory on your hard disk.  Now that we have a map dump
  385.     file we are ready to start the conversion process.
  386.  
  387.     Located in the A64Utilities drawer of The A64 Package is a
  388.     complete address file for Archon called Archon.addr.  You should
  389.     copy this file to where you saved the map dump file.  By using
  390.     the map dump file and this address file you can now create a
  391.     converted code file for Archon by typing the following:
  392.  
  393.         cd <directory>
  394.         Convert Archon.map
  395.  
  396.     When Convert is done you can then load the outputted file
  397.     Archon.conv with the A64 Prefs' LOAD CODE feature, but this does
  398.     not show you how to create your own address files.
  399.  
  400.     We will now explain how and why the Archon.addr file contains the
  401.     addresses it does and how to make your own address files.
  402.  
  403.     Using a text editor or word processor (you can use NotePad on your
  404.     WorkBench) open the Archon.addr file.  Here is a partial listing
  405.     of the address file.
  406.  
  407.         ; Address file for Archon
  408.  
  409.         #$6000-$6fff       ; <- These are the addresses to include
  410.         #$7000-$7fff       ;    Notice that the include addresses
  411.         #$8000-$8fff       ;    always start on a 4k boundary and are
  412.         #$9000-$9fff       ;    always 4k in size
  413.         #$a000-$afff
  414.         #$c000-$cfff
  415.  
  416.         !$6000-$60ff       ; <- These are the addresses to exclude
  417.         !$6323-$632c       ;    Notice how the exclude addresses are
  418.         !$67a0-$67b6       ;    always within an included block
  419.         !$6a4f-$6afd
  420.         !$6d27-$6d37
  421.  
  422.     The first thing to do when creating an address file is to
  423.     determine where in the memory map the C64 program is and then
  424.     to specify these addresses to be included in the conversion.
  425.     Convert always works with 4k blocks of the memory map so the
  426.     include addresses will always be a combination of up to 16
  427.     possible blocks (4k x 16 = 64k).  The 16 possible 4k blocks that
  428.     can be included are:
  429.  
  430.         $0000-$0fff     $1000-$1fff     $2000-$2fff     $3000-$3fff
  431.         $4000-$4fff     $5000-$5fff     $6000-$6fff     $7000-$7fff
  432.         $8000-$8fff     $9000-$9fff     $a000-$afff     $b000-$bfff
  433.         $c000-$cfff     $d000-$dfff     $e000-$efff     $f000-$ffff
  434.  
  435.  
  436.                                                                  4-7
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.     It is very simple to determine what 4k blocks to include by using
  447.     A64Mon.  The goal is to try and eliminate as many as the 4k
  448.     blocks as possible.  The first thing to do is determine how the
  449.     C64's memory map is configured.  This is done with the MemCntrl
  450.     command in A64Mon.  When using this command with Archon loaded we
  451.     can tell that Archon leaves the Kernal ROM switched in so we can
  452.     eliminate the 4k blocks at $e000-$efff and $f000-$ffff.  If
  453.     Archon had also switched out BASIC we could have eliminated the
  454.     4k blocks at $a000-$afff and $b000-$bfff.  The next thing to do
  455.     is search through the remaining blocks with the Disasm command in
  456.     A64Mon.  Start disassembling at the start of each 4k block.  It
  457.     is usually not necessary to disassemble the entire 4k block
  458.     before you can determine if the block should be included or
  459.     excluded.  If you see many undefined opcodes (undefined opcodes
  460.     are shown by ???) or large sections that contain the same opcode,
  461.     for example many BRKs, then the block can be excluded.  Don't
  462.     worry if you exclude some code or include some data, Convert is
  463.     very flexible.  The goal is to include as much code as possible.
  464.     There are other A64Mon commands that can also be useful for
  465.     finding what blocks to include and exclude.  The IntVec command
  466.     can be used to determine where a program's interrupts are
  467.     located.  Interrupts code should be included whenever possible.
  468.     As we can see Archon's IRQs are at $637e so the $6000-$6fff block
  469.     should definitely be included.  Archon NMIs are in the Kernal ROM
  470.     so they can be ignored.  Another command that can be useful is
  471.     VICDump command.  The VICDump command will tell us what graphics
  472.     bank a C64 program is using.  The C64 is capable of storing
  473.     graphics data in one of four possible 16k banks.  These 16k banks
  474.     are: bank 0 at $0000-$3fff, bank 1 at $4000-$7fff, bank 2 at
  475.     $8000-$bfff and bank 3 at $c000-$ffff.  A C64 program is less
  476.     likely to use the graphics bank area to store code because it
  477.     needs the memory for graphics data, but this is not always the
  478.     case as we can see in Archon, which uses graphics bank 1 and
  479.     stores code in the second half of it.
  480.  
  481.     When you are done determining what 4k blocks to include you are
  482.     ready to start converting the code.  The next thing to do is
  483.     determine what sections within the included areas should not be
  484.     converted.  The way this is done is run Convert on the map dump
  485.     file using just the include addresses in the address file and
  486.     specifying the -L option.  For the following example you should
  487.     comment out all of the exclude addresses in the Archon address
  488.     file.  To comment a line in an address file insert a ; at the
  489.     start of the line.  When you are done you should now have an
  490.     address file that only specifies addresses to include.  Now run
  491.     Convert as follows:
  492.  
  493.         Convert Archon.map -L -B60
  494.  
  495.     The conversion process will now be slower than last time because
  496.     Convert will now create a listing file for each included 4k
  497.  
  498.  
  499.                                                                  4-8
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.     block.  When Convert is done it will print how many warnings
  510.     and errors occurred during the conversion.  You should have 1462
  511.     warnings and 0 errors.  Convert will also say that the conversion
  512.     was successful.  As long as there are no errors then the
  513.     converted code can be loaded with the LOAD CODE menu option in
  514.     A64 Prefs, but as long as there are warnings the possibility
  515.     exists for A64 to experience problems running the converted code.
  516.     The goal is to get Convert to convert the program with 0 warnings
  517.     and 0 errors.  The way to get rid of the warnings is to make
  518.     Convert exclude the addresses that are creating the warnings.
  519.  
  520.     In each listing file created by Convert is a disassembly of a an
  521.     included block.  Also listed in these files will be any warnings
  522.     that occurred during the conversion.  There are two types of
  523.     warnings that can appear in the listing files.  The first type of
  524.     warning signifies that Convert found either data or an undefined
  525.     opcode in the included section.  This type of warning will appear
  526.     in the listing files like this:
  527.  
  528.     WARNING: Undefined opcode or data $xx at PC $xxxx.
  529.  
  530.     This type of warning is the more common of the two types and will
  531.     not create problems if the address that is listed is not
  532.     excluded, but will result in the converted code being much bigger
  533.     than it has to be.  In the case of Archon the converted code is
  534.     243k with all the warnings removed and is 326k without the
  535.     warnings removed, a difference of 83k.  For this reason it is
  536.     recommended that you exclude the addresses listed in these
  537.     warnings.
  538.  
  539.     The second type of warning signifies that Convert found that the
  540.     C64 program is using self-modifying code.  This type of warning
  541.     will appear in the listing files like this:
  542.     
  543.     WARNING: Program writing to converted code at PC $xxxx to $xxxx.
  544.  
  545.     This type of warning can create problems for A64 if the second
  546.     address listed is not excluded.  Converted code can not handle
  547.     self-modifying code and the second address listed should be
  548.     excluded.  Failing to exclude this address should not cause A64
  549.     to crash when the converted code is run, but may result in A64
  550.     not running the C64 program correctly.
  551.  
  552.     Now that we know what the warnings are, lets remove them.  Using
  553.     a text editor or word processor open the first listing file named
  554.     Archon.6000-6FFF.list.  Right away we can see many undefined
  555.     opcode or data warnings.  By looking at the start of the listing
  556.     file we can see that this block does not start with valid 6510
  557.     code and by searching through the file we can see that actual
  558.     code does not start until $6100.  So we have our first exclude
  559.     line for our address file: !$6000-$60ff.  This is how we get rid
  560.  
  561.  
  562.                                                                  4-9
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.     of the undefined opcode or data warning, by excluding the
  573.     addresses where the warning occurred.  The second type of warning
  574.     has to be removed differently.  Now open of the last listing file
  575.     Archon.C000-CFFF.list.  If you search down in the file to PC
  576.     $C0CD you will see an instance of the second type of warning that
  577.     looks like this:
  578.  
  579.     WARNING: Program writing to converted code at PC $C0CD to $C561.
  580.  
  581.     To get rid of the problem that this warning signifies we have to
  582.     exclude the second address $C561, not the first address $C0CD.
  583.     If you search down in the file some more to PC $C561 you'll see
  584.     a line like this:
  585.  
  586.     C561 01 20    ORA ($20,X)
  587.      
  588.     This is the line that has to be excluded, the addresses $6561-
  589.     $6562 happen to fall at the end of some data so the whole section
  590.     can be excluded with the line: !$c53b-$c562.  
  591.  
  592.     Its as simple as that.  Just search each listing file for all the
  593.     warnings and exclude the addresses shown in the warnings.  It
  594.     helps to have some prior knowledge of 6510 assembly language, but
  595.     by looking at the address file for Archon and by looking at the
  596.     warnings in the listing files you should get a good idea of what
  597.     should be excluded.  Remember, Convert is very flexible.  If you
  598.     exclude more than you should, it is ok.  
  599.  
  600.     NOTE: You can also use the Optimize utility in conjunction with
  601.           Convert for even greater speed increases.  You should run
  602.           Optimize on the map dump file before starting the
  603.           conversion process.
  604.  
  605.  
  606. WHAT CAN AND CAN'T BE CONVERTED
  607.  
  608.     Almost any C64 machine language program can be converted, but
  609.     there are two things to be aware of.  Programs that use multiple
  610.     loads should be converted with caution.  If a program loads
  611.     different code over an area that you have previously converted we
  612.     can guarantee that you will have problems running the C64
  613.     program.  Also, Convert can not catch all instances of
  614.     self-modifying code.  If the self-modifying is done using one of
  615.     the 6510's indirect addressing modes Convert can not catch it.
  616.     This problem is very hard to find and correct.  If you find a
  617.     C64 program that runs fine under A64, but when converted it fails
  618.     to run correctly there is a good chance that you have included
  619.     some code that is being self-modified.  To correct the problem
  620.     you'll either have to try to track down the self-modifying code
  621.     be examining the listing files or experiment with not including
  622.     some blocks until you eliminate the problem.
  623.  
  624.  
  625.                                                                  4-10
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.     BASIC programs can not be converted.
  636.  
  637. NOTE TO CONVERTERS    
  638.  
  639.     We realize that Convert is not for everyone.  We hope that the
  640.     people who are able to use Convert will make their address files
  641.     available in the PD so everyone can benefit.  If you have
  642.     created some address files send them to us.  We will do our best
  643.     to provide as many address files as possible to all users of The
  644.     A64 Package.
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.                                                                  4-11
  689.  
  690.  
  691.  
  692.  
  693.  
  694.