summaryrefslogtreecommitdiff
path: root/tools/spasm/readme.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tools/spasm/readme.txt')
-rw-r--r--tools/spasm/readme.txt120
1 files changed, 120 insertions, 0 deletions
diff --git a/tools/spasm/readme.txt b/tools/spasm/readme.txt
new file mode 100644
index 0000000..8baa290
--- /dev/null
+++ b/tools/spasm/readme.txt
@@ -0,0 +1,120 @@
+nv-SPASM 0.34.1
+(c) 2014-2015 Giuseppe Gatta, a.k.a. nextvolume <tails92@gmail.com>
+-------------------------
+
+1. What is this?
+2. Features
+3. How to use
+4. License
+
+1. What is this?
+--------------------------
+
+nv-SPASM is a stand-alone MIPS assembler that can output either a little-endian flat binary file
+or Sony PlayStation PS-X EXE executable (the default).
+
+It is simple and lightweight, and it is ideal for people who just want to play around
+with assembly without bothering with too many details which would arise with
+more advanced tools, such as those provided by the GNU project.
+
+nv-SPASM is also meant to be compatible with the Hitmen group's SPASM assembler,
+which was an early tool for PlayStation homebrew programmers who had no access
+to more advanced software development kits, such as Net Yaroze or PsyQ.
+
+While to most a tool like SPASM isn't as useful as it was back in the day, due to the
+availability of freely usable software development kits like the PSXSDK, as already
+mentioned before there are still some use cases for which it's more feasible
+to use nv-SPASM instead of more advanced tools.
+
+And, why not? nv-SPASM is easier to hack and to learn from than more advanced,
+complex designs.
+
+You could use it as the assembler for your virtual machine, or even embed this assembler inside it.
+
+1. What is this not?
+--------------------------
+
+nv-SPASM isn't a complex and full-fledged macro assembler; in fact it does not
+even support macros currently.
+
+You can't easily mix code written in a high-level language with assembly code
+with nv-SPASM, as nv-SPASM is unable to output object files that can be linked
+against other object files.
+
+nv-SPASM does not currently support complex expressions, just very simple ones.
+
+2. Features
+--------------------------
+
+- Complete MIPS R3000 instruction set support, with the following pseudo-instructions
+ implemented:
+
+ - B - unconditional branch
+ - LA, LI - load label/integer inside a register (LA and LI are the same thing in nv-SPASM)
+ - NOP - No operation
+ - MOVE - Copy the contents of a register into another
+ - SUBI - Subtract immediate from register
+ - SUBIU - Subtract immediate unsigned from register
+ - BEQZ - Branch if register is Equal to Zero
+ - BNEZ - Branch if register is Not Equal to Zero
+ - BAL - unconditional branch-and-link
+ - ORG - move start address to the desired address
+ it relocates every instruction, and must be the first instruction.
+ - INCLUDE - include a source file
+ - INCBIN - include a binary file
+ - DCB - declare a block of bytes
+ - DB - declare bytes and/or strings
+ - DH - declare half-words and/or strings
+ - DW - declare words and/or strings
+ - ALIGN - align incoming code to the specified boundary
+
+- Compatibility with the Hitmen group's SPASM assembler and thus the possibility
+ of assembling software developed with it, barring bugs in nv-SPASM or the fact
+ that the original source code may depend on bugs in the Hitmen's SPASM assembler
+ in order to assemble correctly.
+
+- Very simple expression support, single operator, two operands.
+ For laymen, this means that while for instance 3+3 is rendered as 6,
+ 3+3+2 is rendered as 5, as if it were 3+2.
+ This is coherent with the original SPASM assembler.
+ Supported operators are +, -, >>, <<, & and |
+
+- Automatic generation of Sony PlayStation PS-X EXE executables.
+
+- Symbol names (labels) can be treated just like normal numerical values,
+ the numerical value being either the program counter value at the moment
+ the label was met by the assembler, or a value set with an EQU or = statement.
+
+
+3. How to use
+--------------------------
+
+nv-SPASM is really simple to use, and does not need any special explanation.
+Therefore, it will suffice to report its usage banner.
+
+nv-spASM version 0.34.1 (c) 2014-2015 nextvolume
+Assembler for the Sony PlayStation
+
+Usage: ./spasm [options] infile outfile
+
+Options: -b create binary file instead of PS-X EXE
+ -N do not pad executable
+ -S be case sensitive on file paths
+
+4. License
+--------------------------
+
+It is permitted to do (almost) anything with the nv-SPASM code and documentation.
+The only restriction is that all existing copyright notices must remain intact, and
+modifed versions must ship with the corresponding modified source code.
+
+fcaseopen.c is (C) 2009 Keith Bauer. Read fcaseopen.c for the license (BSD-style)
+
+5. Useful information
+--------------------------
+
+Hitmen's official website <http://www.hitmen-console.org>
+- The README file for Hitmen's original SPASM assembler is a good read,
+ as this assembler tries to closely follow it.
+- The GreenTro source code is another good resource, as it was developed with SPASM,
+ and thus it can be considered an example to write nv-SPASM assembly source code.