pouët.net

Go to bottom

ASM64 by High Society [web]

asm64 - the first multi-pass assembler for the n64(tm) (mips(tm) r4xxx)

                                            by    Stage of HiGH SOCiETY

Starting point   : 20.03.1997

win32 V.995      : 5.10.1997 


*****************************************************************************
Note that this is "own-risc" software. The author is not responsible for
the use or misuse of this program. All trademarks are ofcourse owned be their
respective owners.;)

                        THIS IS NO SHRINK-TO-FIT-SOFTWARE!
*****************************************************************************



Attention: If you do not know how to use this software, don't use it!

What kind of software is it?

asm64 is freeware unless you want money for it!

What's it?

asm64 is a three-pass-assembler, developed for the MIPS r4xxx processor
found in some sgi(tm) workstations, but nowadays also found in most video-
consoles (if they come from big-n). asm64 is a three-pass-assembler and the
reason for taking 3 passes is for letting include (.include) files, and I
really didn't know how to handle instead! But take a closer look yourself!



What's it for?

asm64 might be used to code fascinating demos & intros, whole games, or
- ?? - the first table-calculation for the n64.
Use it for whatever u want (and ofcoz whatever it can) and if you're happy
using it I'll be happy too!


Complete command listing
*****************************************************************************

OPCODES
*******

All opcodes implemented. Must be lowercase.
But please take care: Some opcodes may differ from your manual.

<break>         must have a parameter: a 20bit value.
<syscall>       --"--
<teq>           must have a third parameter : a 10bit value
<tge>           --"--
<tgeu>          --"--
<tlt>           --"--
<tltu>          --"--
<tne>           --"--

Why? Because all these commands have the possibility to contain data!
If you don't need it: $0 might be the solution!


OPERANDS
********

Are going like this:

Registers       Value  5bit with/without leading r      like 	r01,$01,%0100
Immediates      Value 16bit with/without leading #
Offsets         Value 16bit                                  	-$10, START (=label)
Shift-Amounts   Value  5bit with/without leading #
Targets         value 26bit                                   	$19201, START (=label)
Base/Offsets    dualvalue offset(base)                  	$10(r02)
                          16bit (register)

OPERATORS
*********

equ	defines value for constant (like "REG01 equ $01")
+	plus
-	minus
*	multiply
/	divide
|	boolean or
&	boolean and

()	parathensis

                        Big thx's to ZEN for his code!


NUMERIC SYSTEMS
***************

%       is for binary numbers.
$       is for hexadecimal numbers.


LABELS
******

End with ":" (doublepoint) like	"startup:"
Must not exceed 32 characters can contain A-z,"_",0-9


CONSTANTS
*********

Must not exceed 32 characters can contain A-z,"_",0-9

NOTE!
Labels and Constants are both treatened as "symbols" and so you can't use
a name for a label AND for a constant.
You might want to type your Constants uppercase for better readability and
it'll be possible that I only allow uppercase constants in future!?!?!?
And:
Don't let your symbols begin with "__" (double underscore/line) 'cause in the
upcoming (when?) developing libraries there will be much reserved names
beginning with "__".


PSEUDO-OPCODES
**************

Are many and like....

.org   n        defines base address (max 32bit) (<- now only supports 31bit) 
.file  "file"   inserts <file> at current address
.nochangebytes  makes a BIGENDIAN target-file (01 02 03 04)
.changebytes    makes a ...		      (02 01 04 03)
.byte   n,...   stores n BYTES at current position
		    Actually the only which supports string in quotes
		    like .byte "hello world"
.hword  n,...   stores n HWORDS (16bit) at current address
.word   n,...   stores n WORDS  (32bit) at current address
.block  n,m     create memory block with n*BYTE m
.align2         stores null-bytes till address is divisible by 2
.align4         --"--                                          4
.align8         --"--                                          8
.wantsize n     stores null-bytes till file-size is n
.v64header	    enables generating of a doctorV64 header...
.romname "xx.."	only when generating v64header: Name of rom  (max 20byte)
.romid   "xx"   only..........................: ID   of rom  (max 2byte)
.romcountry "x" only..........................: CountryCode  (max 1byte)
.manufacturer "x"
		    only..........................: Maker-ID     (max 1byte)


SOURCE_AFFECTING PSEUDO-OPCODES
*******************************

.include "file" To include some of your file(s) for declaration or startup-
                code!


REMARKS
*******

Remarks begin with ";" and end each line.

*****************************************************************************


What can you do to help me?
***************************

First, I need information for ROM-Headers to implement them with pseudo-
opcodes. Please contact me if you know more than I do. (Wich isn't really much!)



What will the future bring?
***************************

If the world keeps on turning the next future will bring you

a "win95 developing environment" ;-)

More rom-formats (if anyone provides me the information)

macros

more pseudo-opcodes (like #define -yep)

a hundred bugfixes (no, hopefully not!)


*****************************************************************************

Please contact me for any information except "Do u have commercial roms?"
We just want to stay legal guyz.....

If you have self-made roms, I'm ofcourse interested. I also suggest you to
tell me whether you like this tool or not!

Newest versions are available on:
http://members.ping.at/stage/asm64.html

The only real THANKYOUs go out to Actraiser and his stunning dextrose site,
Jovis, Asgard and Hartec, and especially to Zen, everyone on the channels!

Yours, Stage

eMail: stage@ping.at

Go to top