mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
some documentation for sim65
This commit is contained in:
parent
4642421da4
commit
69c7acb3bc
@ -7,7 +7,7 @@
|
||||
|
||||
<abstract>
|
||||
sim65 is a simulator for 6502 and 65C02 CPUs. It allows to test target
|
||||
independed code.
|
||||
independent code.
|
||||
</abstract>
|
||||
|
||||
<!-- Table of contents -->
|
||||
@ -18,8 +18,8 @@ independed code.
|
||||
<sect>Overview<p>
|
||||
|
||||
|
||||
sim65 is the only solution as part of the toolchain to execute code. The
|
||||
binary needs to be compiled with <tt/--target sim6502/ or <tt/--target sim65c02/.
|
||||
sim65 is used as part of the toolchain to test 6502 or 65C02 code.
|
||||
The binary to test needs to be compiled with <tt/--target sim6502/ or <tt/--target sim65c02/.
|
||||
|
||||
|
||||
<sect>Usage<p>
|
||||
@ -104,6 +104,59 @@ PVExit ($01)
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect>Creating a Test in C<p>
|
||||
|
||||
For a C test compiled and linked with <tt/--target sim65/ the
|
||||
command line arguments to <tt/sim65/ will be passed to <tt/main/,
|
||||
and the return value from <tt/main/ will become sim65's exit code.
|
||||
The <tt/exit/ function may also be used to terminate with an exit code.
|
||||
|
||||
Exit codes are limited to 8 bits.
|
||||
|
||||
In addition to this, the simulator provides a set of built-in functions
|
||||
for simple file input and output:
|
||||
|
||||
<tscreen><verb>
|
||||
int open (const char* name, int flags, ...);
|
||||
int __fastcall__ close (int fd);
|
||||
int __fastcall__ read (int fd, void* buf, unsigned count);
|
||||
int __fastcall__ write (int fd, const void* buf, unsigned count);
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect>Creating a Test in Assembly<p>
|
||||
|
||||
Assembly tests may similarly be assembled ant linked with <tt/--target sim65/,
|
||||
and the sim65 library provides an <tt/exit/ symbol that the program may <tt/JMP/
|
||||
to terminate with the current A register value as an exit code.
|
||||
|
||||
Without using the provided target library, there are some relevant internal details:
|
||||
|
||||
<itemize>
|
||||
|
||||
<item>The binary input file has a 1 byte header. A value of 0 indicates 6502 simulation,
|
||||
and 1 indicates 65C02.
|
||||
|
||||
<item>The rest of the input file, after the header, will be loaded at <tt/$0200/,
|
||||
and execution will begin at <tt/$0200/.
|
||||
|
||||
<item>The entire 64 kilobyte address space is writeable RAM.
|
||||
Aside from the loaded binary, the reset vector at <tt/$FFFC/ will be
|
||||
pre-loaded with <tt/$0200/ as the start address.
|
||||
|
||||
<item>The <tt/exit/ address is <tt/$FFF1/.
|
||||
Jumping to this address will terminate execution with the A register value as an exit code.
|
||||
|
||||
<item>The built-in functions are provided by 6 "paravirtualization" hooks present at
|
||||
<tt/$FFF0-$FFF5/. Except for <tt/exit/, a <tt/JSR/ to one of these
|
||||
addresses will return immediately after performing a special function,
|
||||
intended only for use with the sim65 target C library.
|
||||
|
||||
<item><tt/IRQ/ and <tt/NMI/ events will not be generated, though <tt/BRK/
|
||||
can be used if the IRQ vector at <tt/$FFFE/ is manually prepared by the test code.
|
||||
|
||||
</itemize>
|
||||
|
||||
|
||||
<sect>Copyright<p>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user