{"id":497,"date":"2012-07-01T19:32:27","date_gmt":"2012-07-01T17:32:27","guid":{"rendered":"http:\/\/lallafa.de\/blog\/?page_id=497"},"modified":"2012-07-01T19:32:27","modified_gmt":"2012-07-01T17:32:27","slug":"vamos","status":"publish","type":"page","link":"https:\/\/lallafa.de\/blog\/amiga-projects\/amitools\/vamos\/","title":{"rendered":"vamos"},"content":{"rendered":"<h3>The virtual AmigaOS runtime (aka Wine for Amiga \ud83d\ude42<\/h3>\n<p>vamos is a tool that allows to run AmigaOS m68k binaries directly on  your Mac. It emulates the AmigaOS by providing implementations for some  functions of the Exec and DOS library. It will run typical console  binaries that do not rely on user interface (intuition) or graphics  stuff. Its main focus is to run old compilers and assemblers to have  some sort of &#8220;cross&#8221; compilers. This approach will not run any  applications or games using direct hardware register access &#8211; for this a  machine emulator like P-UAE is the tool you will need&#8230;<\/p>\n<p>vamos uses the native <a href=\"http:\/\/caesar.logiqx.com\/php\/library.php?id=musashi\">Musashi m68k CPU Emulator<\/a> written in C to run m68k code. I added a simply memory interface that  provides some RAM space for the program code and added an interface for  python to trap library calls and emulate their behavior in Mac OS.<\/p>\n<h5>Features<\/h5>\n<ul>\n<li>Fast m68k CPU emulation with Musashi CPU Emulator<\/li>\n<li>Supports native library loading for application libs (e.g. SAS sc1.library)<\/li>\n<li>Dos Library supports: Locks, Files (Open, Read, Write, Seek, Close)<\/li>\n<li>Exec Library supports: AllocMem\/Vec, LoadLibrary<\/li>\n<li>Many useful tracing and logging features<\/li>\n<\/ul>\n<h4>1. Installation<\/h4>\n<p>vamos contains a native library for the CPU\/memory emulation. This  library needs to be compiled first. All other code is python and runs  directly out of the box.<\/p>\n<p>Build the library with:<\/p>\n<pre>cd musashi\r\nmake<\/pre>\n<p>This will create <strong>libmusashi.so|.dylib<\/strong> in this directory. Now you are ready to run vamos from the top-level directory!<\/p>\n<h4>2. Setup<\/h4>\n<p>vamos uses a configuration file as source for setup information. It is usually named <strong>.vamosrc<\/strong> and is first searched in the $HOME directory and then in the current directory. You can also use the <strong>-c <\/strong>option to specify an own config file. The config file uses the syntax of the well-known .ini files.<\/p>\n<p>Additionally, you can specify the parameters also on the command  line. These will overwrite the settings specified in a config file.<\/p>\n<p>In the source archive see <strong>config\/sample_vamosrc<\/strong> for an example config file.<\/p>\n<h5>2.1 Volumes<\/h5>\n<p>vamos works internally with AmigaOS compatible file and path names.  An AmigaOS absolute path is usually rooted in a volume  (&#8220;volname:abs\/path\/file&#8221;). vamos automatically translates these paths to  Mac system paths for file access. This is done by specifying a volume  to system path mapping.<\/p>\n<p>In the config file the section <strong>volumes<\/strong> contains this mapping:<\/p>\n<pre>[volumes]\r\nsystem=~\/amiga\/wb310\r\nhome=~\r\nwork=~\/amiga\/work\r\nshared=$HOME\/amiga\/shared<\/pre>\n<p>This example defines the volume names <strong>system:<\/strong>. <strong>home:<\/strong>, <strong>work:<\/strong>, and <strong>shared:<\/strong> and assigns them native paths on my Mac.<\/p>\n<p>Note that the native path may contain ~ for your home directory. Even <strong>$ENV<\/strong> environment variable access is possible.<\/p>\n<p>You can also specify volumes on the command line with:<\/p>\n<pre>.\/vamos -V system:~\/amiga\/wb310 -V work:. ..<\/pre>\n<p>By default vamos defines the <strong>root:<\/strong> volume name to be root of your file system (\/). So every Mac system path can be mapped to an Amiga path.<\/p>\n<p>If multiple volumes share subtrees in the file system then the Amiga  volume is always assigned from the longest path match. E.g. in our  example above the path <strong>~\/amiga\/wb310\/c<\/strong> is covered by <strong>system:<\/strong> and <strong>home:<\/strong> volume. The mapper then takes the longest match and thus this path is converted to <strong>system:c<\/strong>.<\/p>\n<h5>2.2 Assigns<\/h5>\n<p>AmigaOS also allows to use assigns to introduce some kind of virtual  volume names that map to other amiga paths. Many applications use this  mechanism to find their install directory (sc:) or things like includes  (include:) or libs (lib:).<\/p>\n<p>vamos adapts this mechanism and allows to define assigns yourself in  the config file or on the command line. The config file needs a section <strong>assigns<\/strong>:<\/p>\n<pre>[assigns]\r\nsc=shared:sc\r\ninclude=sc:include\r\nlib=sc:lib\r\nc=system:c,sc:c<\/pre>\n<p>Note: an assign might reference other assigns and also allows to specify multiple expansions seperated with commas.<\/p>\n<p>Note2: assigns always map to amiga paths and never directly to system  paths. Mac system paths are only allowed when defining volumes.<\/p>\n<p>On the command line assigns are given by -a options:<\/p>\n<pre>.\/vamos -a c:system:c -a lib:sc:lib ...<\/pre>\n<p>If an assign is specified in the config file and later on the command  line then the original assign in the config file is overwritten. You  can extend an assign by writing a plus sign right at the beginning of  the mapping:<\/p>\n<pre>.\/vamos -a c:+cool:c<\/pre>\n<p>This example will extend the c: assign that might be already defined in the config file and does not replace it.<\/p>\n<h5>2.2 Auto Assign<\/h5>\n<p>If an amiga path cannot be mapped to a Mac system path (because it  uses undefined volume or assign names) then vamos will abort. You will  then have to restart vamos and specify the required assign or volume  mappings.<\/p>\n<p>vamos also provides a feature called Auto Assign. If enabled then you  assign a single amiga path prefix. If vamos then finds an unknown  assign it will not abort vamos but implicitly map the assign to a  directory in the given path prefix.<\/p>\n<p>In the config file write this:<\/p>\n<pre>[path]\r\nauto_assign=system:<\/pre>\n<p>On the command line give the -A option:<\/p>\n<pre>.\/vamos -A system:<\/pre>\n<p>With this auto assign in place the unknown assign <strong>t:<\/strong> will be mapped to the amiga path <strong>system:t<\/strong><\/p>\n<h4>3. Usage Examples<\/h4>\n<p>Pick an amiga binary (e.g. here I use the <a href=\"http:\/\/aminet.net\/package\/dev\/asm\/A68kGibbs\">A68k assembler from aminet<\/a>) and run it:<\/p>\n<pre>&gt; .\/vamos a68k\r\nSource file name is missing.\r\n\r\n68000 Assembler - version 2.71 (April 16, 1991)\r\nCopyright 1985 by Brian R. Anderson\r\nAmigaDOS conversion copyright 1991 by Charlie Gibbs.\r\n\r\nUsage: a68k &lt;source file&gt;\r\n [-d[[!]&lt;prefix&gt;]]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-o&lt;object file&gt;]\r\n [-e[&lt;equate file&gt;]]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-p&lt;page depth&gt;]\r\n [-f]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-q[&lt;quiet interval&gt;]]\r\n [-g]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-s]\r\n [-h&lt;header file&gt;]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-t]\r\n [-i&lt;include dirlist&gt;]\u00c2\u00a0\u00c2\u00a0 [-w[&lt;hash size&gt;][,&lt;heap size&gt;]]\r\n [-k]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-x]\r\n [-l[&lt;listing file&gt;]]\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [-y]\r\n [-m&lt;small data offset&gt;] [-z[&lt;debug start&gt;][,&lt;debug end&gt;]]\r\n [-n]\r\n\r\nHeap size default:\u00c2\u00a0 -w2047,1024<\/pre>\n<p>Yehaw! What has happened? Vamos loaded the amiga binary and ran it in  the m68k Emulation&#8230; The output you see was generated as output by  a68k.<\/p>\n<p>Let&#8217;s enable some <strong>verboseness<\/strong> during operation:<\/p>\n<pre>&gt; .\/vamos -v a68k\r\n19:14:26.661\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 setting up main memory with 1024 KiB RAM: top=100000\r\n19:14:26.661\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 loading binary: test_bin\/a68k\r\n19:14:26.663\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 args:\r\n (2)\r\n19:14:26.692\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 setting up m68k\r\n19:14:26.694\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 start cpu: 002004\r\n...\r\n19:14:26.705\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 main:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 done (284836 cycles in 0.0025s -&gt; 114.19 MHz, trap time 0.0083s)<\/pre>\n<p>Wow! The m68k in the emulation is running really fast: 114 MHz. The  trap time mentioned there is the time spent in the Library emulation of  vamos written in Python&#8230;<\/p>\n<p>You can have more info during runtime by <strong>enabling logging<\/strong> channels with -l switch:<\/p>\n<pre>&gt; .\/vamos -l dos:info,exec:info a68k\r\n19:18:10.840\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 exec:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 open exec.library V39\r\n19:18:10.840\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 dos fs handler port: fd0000\r\n19:18:10.843\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 exec:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 SetSignals: new_signals=00000000 signal_mask=00003000 old_signals=00000000\r\n19:18:10.845\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 open dos.library V39\r\n19:18:10.845\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 exec:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 OpenLibrary: 'dos.library' V0 -&gt; [Lib:'dos.library',V0]\r\n19:18:10.845\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 Input: [FH:''(ami='&lt;STDIN&gt;',sys='',nc=False)@fe0000=B@3f8000]\r\n19:18:10.845\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 Output: [FH:''(ami='&lt;STDOUT&gt;',sys='',nc=False)@fe002c=B@3f800b]\r\n19:18:10.845\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 Open: name='*' (old\/1005\/rb) -&gt; [FH:''(ami='*',sys='',nc=False)@fe0058=B@3f8016]\r\n19:18:10.846\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 exec:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 SetSignals: new_signals=00000000 signal_mask=00003000 old_signals=00000000\r\nSource file name is missing.\r\n19:18:10.846\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 dos:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 Write([FH:''(ami='*',sys='',nc=False)@fe0058=B@3f8016], 00ffa0, 29) -&gt; 29\r\n19:18:10.846\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 exec:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 SetSignals: new_signals=00000000 signal_mask=00003000 old_signals=00000000\r\n...<\/pre>\n<p>Now you see what library calls occurred and how they were handled by vamos.<\/p>\n<p>Use -L &lt;file&gt; to redirect the logging into a file instead of stdout.<\/p>\n<p>You can even look deeper inside the workings of vamos by enabling<strong> memory tracing<\/strong> with -t (and -T for vamos&#8217; own memory accesses during traps) (You have  to specify -t\/-T to enable memory tracing at all and then you will need  to enable the according logging channels to see the traces). Memory  tracing will catch each memory access of the CPU emulation and redirects  it to vamos. This is very slow! So enable it only for debugging:<\/p>\n<pre>&gt; .\/vamos -t -T -l mem:info a68k\r\n19:23:36.033\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f7c6: 4e70\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +00020a exec.library] -306 [51]\r\n19:23:36.033\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f7c8: 4e75\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +00020c exec.library] -304 [50]\r\n19:23:36.033\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f6d0: 4e70\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +000114 exec.library] -552 [92]\r\n19:23:36.035\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f6d2: 4e75\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +000116 exec.library] -550 [91]\r\n19:23:36.035\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(4): 00fa0c: 0000f4d8\u00c2\u00a0 Struct\u00c2\u00a0 [@00f5bc +000450 exec.library] ExecLibrary+276 = ThisTask(Task*)+0\r\n19:23:36.035\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(4): 00f570: 00000000\u00c2\u00a0 Struct\u00c2\u00a0 [@00f4d8 +000098 ThisTask] Process+152 = pr_CurrentDir(BPTR)+0\r\n19:23:36.036\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(4): 00f584: 00003d22\u00c2\u00a0 Struct\u00c2\u00a0 [@00f4d8 +0000ac ThisTask] Process+172 = pr_CLI(BPTR)+0\r\n19:23:36.036\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(4): 00f584: 00003d22\u00c2\u00a0 Struct\u00c2\u00a0 [@00f4d8 +0000ac ThisTask] Process+172 = pr_CLI(BPTR)+0\r\n19:23:36.036\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(4): 00f498: 00003d32\u00c2\u00a0 Struct\u00c2\u00a0 [@00f488 +000010 CLI] CLI+16 = cli_CommandName(BSTR)+0\r\n19:23:36.037\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f832: 4e70\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +000276 exec.library] -198 [33]\r\n19:23:36.037\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00f834: 4e75\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00f5bc +000278 exec.library] -196 [32]\r\n19:23:36.043\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0\u00c2\u00a0 INFO:\u00c2\u00a0 R(2): 00ff28: 4e70\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 TRAP\u00c2\u00a0 [@00fb74 +0003b4 dos.library] -54 [9]\r\n...<\/pre>\n<p>Now you can see every trapped library call and even access to in  memory structures&#8230; That&#8217;s very convenient for debugging! It even  labels every memory location with a source description (library, code  segment) and shows symbolic names of structure entries&#8230;<\/p>\n<p>The lowest level is memory debugging on level debug. Then _every_ access to memory is logged:<\/p>\n<pre>&gt; .\/vamos -t -T -l mem:debug a68k\r\n19:26:47.022\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(4): 000000: 00001ff8\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@000000 +000000 zero_page]\r\n19:26:47.022\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(4): 000004: 00002004\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@000000 +000004 zero_page]\r\n19:26:47.022\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 002004: 48e7\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000000 a68k:0:code]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 002006: 7efe\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000002 a68k:0:code]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001ff4: 00fc0000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000ff4 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001ff0: 00fc0000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000ff0 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fec: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fec stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fe8: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fe8 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fe4: 00fc0000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fe4 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fe0: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fe0 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fdc: 0000f484\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fdc stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fd8: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fd8 stack]\r\n19:26:47.023\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fd4: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fd4 stack]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fd0: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fd0 stack]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fcc: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fcc stack]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fc8: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fc8 stack]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 W(4): 001fc4: 00000000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@001000 +000fc4 stack]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 002008: 2448\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000004 a68k:0:code]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 00200a: 2400\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000006 a68k:0:code]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 00200c: 49f9\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000008 a68k:0:code]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(4): 00200e: 0000d9c4\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +00000a a68k:0:code]\r\n19:26:47.024\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 002012: 2c78\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +00000e a68k:0:code]\r\n19:26:47.025\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(2): 002014: 0004\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@002004 +000010 a68k:0:code]\r\n19:26:47.025\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 mem:\u00c2\u00a0 DEBUG:\u00c2\u00a0 R(4): 000004: 0000f8f8\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 [@000000 +000004 zero_page]\r\n...<\/pre>\n<p>This output is very useful to see all code fetches and have a look  what code is running now. Use a hunktool disassembly side-by-side to  check out whats going on or going wrong \ud83d\ude09<\/p>\n<p>You can use the -c option to limit the program execution to a given number of cycles to keep the output short&#8230;<\/p>\n<p>That&#8217;s it for now! Have fun playing with vamos!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The virtual AmigaOS runtime (aka Wine for Amiga \ud83d\ude42 vamos is a tool that allows to run AmigaOS m68k binaries directly on your Mac. It emulates the AmigaOS by providing implementations for some functions of the Exec and DOS library. &hellip; <a href=\"https:\/\/lallafa.de\/blog\/amiga-projects\/amitools\/vamos\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":375,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-497","page","type-page","status-publish","hentry"],"jetpack_shortlink":"https:\/\/wp.me\/PiBMF-81","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/pages\/497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/comments?post=497"}],"version-history":[{"count":3,"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/pages\/497\/revisions"}],"predecessor-version":[{"id":767,"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/pages\/497\/revisions\/767"}],"up":[{"embeddable":true,"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/pages\/375"}],"wp:attachment":[{"href":"https:\/\/lallafa.de\/blog\/wp-json\/wp\/v2\/media?parent=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}