scene.org File Archive

File download

<root>­/­resources­/­tools­/­snes/snasm12.lzh

File size:
92 893 bytes (90.72K)
File date:
2021-10-29 05:45:02
Download count:
all-time: 258

file_id.diz

  ----------------------------------------------------------------------
-* SNasm 65816 Assembler V1.1Beta, Copyright (c) 1992,93 Michael Dailly *-
  ----------------------------------------------------------------------








	This Assembler was written off and on for just over two months, so
please forgive any errors or bugs you find in this version. I do however
wish to hear about them. Here are some "BASIC" instuctions for use. More
readable documentation will be written when the assembler is finished AND
when I find the time.

		Also included is an upload program.
	 This upload will send and run binnary files to a magicom


		All commands are suported

	    Addr mode  			comment

		#expresion		imm mode
		expresion		Zero page (if less then 256)
		<expresion		Zero page (force)
		expresion		Absolute value
		|expresion		Absolute value (force)
		>expresion		24bit (must use a ">")
		(expresion)		Zero Page (if less than 256)
		(<expresion)	Zero Page (force)
		(expresion)		absolute (if >255)
		(|expresion)	absolute (force)              jmp ($0101)
		(|expresion)	absolute (force)              jmp ($01)
		[$00]			24bit indirect (zero page)

          0-9			Dec
          $A-$F			Hex
          %0-%1			Bin
          A-Z[A-Z0-9_][:]	Label
          @A-Z[A-Z0-9_][:]	Local label



 SNasm commands
----------------

	;comment till end of line

	Org	<Expresion>					NO forward ref allowed

	End								end of source file

	DB	<expresion>,"string",....	(1 byte)
	DW	<expresion>,<expresion>,..	(2 bytes)
	DT	<expresion>,<expresion>,..	(3 bytes)
	DL	<expresion>,<expresion>,..	(4 bytes)
	DS	<expresion>					(skip ? bytes)

	Label[:]	equ	<expresion>
	Label[:]	set	<expresion>		(can be redefined)
	Label[:]	rb	<expresion>
	Label[:]	rw	<expresion>
	Label[:]	rt	<expresion>
	Label[:]	rl	<expresion>

	Label[:]					set to current PC
	@Label[:]					Local labels, till next "Label[:]"
								NOTE: this is NOT allowed
								Label1:         ; then on the next line
								@Local1:

								It Must be
								Label2:		nop 	; or any other
								@Local2:			; instruction


	RsSet	[Expresion] 		if no expresion, default is 0.
								ie.
								{
									RsSet			; or
									RsSet	$200	; set _Rs to $200
								}

	longA	On/Off				set Acc to 8 or 16 bit (on=16 bit)
	longI	On/Off				set Index regs to 8 or 16 bit (on=16 bit)
								(no code output)
								ie.
								{
									rep	#$20	; A=16bit
									lda	#$0101	; return in 16bit mode
									rts
									longA	off	; assembler switches mode
									lda	#$01	; continue in 8 bit mode.
								}

	Include	"Path+FileName"		include a file for assembly

	Read	"Path+FileName"		includes on pass 1 only.
								this is IDEAL for equate and macro
								files, as pass 2 skips these anyway!

	LIB		"Path+FileName"		include a Pre-assembled LIB file.
								Used for Bulk equates that DONT
								change. (Like hardware equates.)

	IncBin	"Path+FileName"		Include a Binnary file (like graphics).

	Rept	<Number>			Set repeat loop	(Not nested yet)
	Endr						endloop


	Message "Text",Expr,[...]	Like a basic PRINT
	Message 0					prints a 0
	Message Lab					prints value of label Lab
	Message "Lab=",Lab			prints "Lab="+value of Lab
	Message "Lab=",Lab," more"	etc... This is great for debuging.


	Label MACRO					Please NOTE!
		|						These are VERY basic just now
	Basic Code					NO labels, OR operands
		|						BASIC code insertion ONLY
	  ENDM						Labels are allowed, but will be
								throw up an error if the macro is used
								twice. (redefined label)
								If a BRANCH is required. use PC+? or PC-?

	PATH	"path"				This sets a BASE PATH for all
								includes,inbins,reads and lib commands
								it is just prepended to the filename
								so PATH "658:frame/" and READ "equ.i"
								will give READ "658:frame/equ.i"


Build In Macros
---------------
	A8Bit			Writes a Sep #$20. And set A to 8 bit
	I8Bit			Writes a Sep #$10. And set I to 8 bit
	AI8Bit			Writes a Sep #$30. And set both to 8 bit
	A8BitC			Writes a Sep #$21. And set A to 8 bit
				also SETS carry

	A16Bit			Writes a Rep #$20. And set A to 16 bit
	I16Bit			Writes a Rep #$10. And set I to 16 bit
	AI16Bit			Writes a Rep #$30. And set both to 16 bit
	A16BitC			Writes a Rep #$21. And set A to 16 bit
				also CLEARS carry

SNasm Expresions
----------------
	+				Add
	-				Subtract
	*				Xply
	/				Div
	Xor				xor value
	()				sub calculation
	SHL <count>		Shift left
	SHR <count>		Shift right
	$				Hex
	%				Bin
	&				And
	AND				And
	!				Or
	OR				Or
	~				Not
	NOT				Not
	[A-Z][A-Z0-9_]	Label
	@[A-Z][A-Z0-9_]	Local Label
	_RS				current RS counter (not in just yet)
	PC				current address
					(before current instruction has been assembled)
					(ie  "LAB1: jsr PC" just calls the label LAB1 )

some notes
----------
	1)	Rep and Sep automaticly set longA & LongI

	2)	The Pound sign (£) is not available for use.
		( C= put the pound sign up at ASCII 160 something.
		  only 0..127 is suported )

  	3)	ASL A	and
		ASL	will give the same command. (the "A" is optional)
			(same for INC,ASL,etc..)

	4)	The assembler is NOT case sensitive,
		However case is held in quotes. ie. "Hello" and not "HELLO"

	5)	#expresion.  If I or A is in 8 bit, and the expresion >255
			     The value is CLIPPED. (a warning is shown)
                             (expresion & $FF)

	6)	Rept loops are if fact fairly slow, so only use them if
		really needed.
		If they are used for table gen. then try and incbin
		the result instead, and gen the table elsewhere.


 SNasm command line
--------------------
	<InputName >	Base Source filename (ie "test.s")
	<OutputName>	Output filename	(ie "ram:test.dat")
	[ErrorFile]		All errors are written to this file (optional)
		-LIB		this dumps the symbol table in a form that can be
					used with the LIB command.


  Thats about it. Please let me know of any problems or suggestions you
may have. I am always willing to try something new!
   Hope its fast enough for you, it should be okay. I use it on an A500
and it's fairly fast, so it should be pritty nippy on a 1200 up.