;-------- asm800.m -- source for asm800 symbol init. file ----------
;
;	This file is processed with m4 to get asm/asm800.
;


code:	macro
	$'section code x
	endm
data:	macro
	$'section data
	endm
bss:	macro
	$'section bss b c w
	endm
abs:	macro
	$'section abs a
	endm
	$'2case code data bss abs

cseg:	macro
	$'section code x
	endm
dseg:	macro
	$'section data
	endm
	$'2case cseg dseg

common:	macro #1
	cond	('#1'[0])<>'/'
	$'section #1, m
	org	0
	else		;kludge to eliminate slashes
$''c1 	set	$'macbeg
$''c2 	set	$'macend
$'macbeg set	'/'
$'macend set	'/'
	common	#1
$'macbeg set	$''c1
$'macend set	$''c2
	endc
	endm
	$'2case common



iff:	macro	#1
	if	!(#1)
	endm
iff:	84
	$'2case	iff
if1:	macro
	if	$'pass=1
	endm
if1:	84
	$'2case	if1
if2:	macro
	if	$'pass=2
	endm
if2:	84
	$'2case	if2
ifdef:	macro	#1
	if	!fwd(#1)
	endm
ifdef:	84
	$'2case	ifdef
ifndef:	macro	#1
	if	fwd(#1)
	endm
ifndef:	84
	$'2case	ifndef
ifnb:	macro	#1
	if	! nul "#1"
	endm
ifnb:	84
	$'2case	ifnb
ifb:	macro	#1
	if	nul #1
	endm
ifb:	84
	$'2case	ifb
ifidn:	macro	#1,#2
	if	"#1" SEQ "#2"
	endm
ifidn:	84
	$'2case	ifidn
ifdif:	macro	#1,#2
	if	"#1" SNE "#2"
	endm
ifdif:	84
	$'2case	ifdif



.radix	macro	#n
 $'base: set	 #n
	endm
	$'2case	.radix

$'lmac	macro	#var,#op		;list control macro
$''lm1	set	$'blanksep
$'blanksep set	0
	if def $''#op
	  $''#op #var
	else
	  .error "undefined list option #op"
	endif
$'blanksep set	$''lm1
	endm
$''on	macro	#var
	   #var:   set  #var^1
 	endm
$''off	macro	#var
	   #var:   set	#var&-2
 	endm
$''push	macro	#var
	   #var:   set	#var+#var+(#var&1)
 	endm
$''pop	macro	#var
	   #var:   set	#var/2
	endm
$''	macro	#var
	   #var:   set  #var^1	;default: on
	endm

	$'2case	$''on $''off $''push $''pop

list	macro	#1
	$'lmac	$'list,#1
	endm
wlist	macro	#1
	$'lmac	$'wlist,#1
	endm
clist	macro	#1
	$'lmac	$'clist,#1
	endm
mlist	macro	#1
	$'lmac	$'mlist,#1
	endm
xlist	macro	#1
	$'lmac	$'xlist,#1
	endm
	$'2case	list wlist clist mlist xlist

.list:	macro
	$'list: 	set	$'list^1
	endm
.xlist:	macro
	$'list: 	set	$'list&(-2)
	endm
.lfcond:	macro
	$'clist:	set	$'clist^1
	endm
.sfcond:	macro
	$'clist:	set	$'clist&(-2)
	endm
.tfcond:	macro
	$'clist:	set	($'clist)xor(1)
	endm
	$'2case	.list .xlist .lfcond .sfcond .tfcond

.lall:	macro
	$'mlist:	set	$'mlist^1
	$'xlist:	set	$'xlist^1
	endm
.sall:	macro
	$'mlist:	set	$'mlist&(-2)
	$'xlist:	set	$'xlist&(-2)
	endm
.xall:	macro
	$'mlist:	set	$'mlist&(-2)
	$'xlist:	set	$'xlist^1
	endm
	$'2case .lall .sall .xall

;------ RIO assembler directive -------------

$''star	macro	#1,#2,#3,#4,#5,#6,#7,#8,#9
$''op	set	'#1'[0]^20h
	cond	$''op='e'
	  page
	else
	cond	$''op='h'
	  subttl "#2 #3 #4 #5 #6 #7 #8 #9"
	  page
	else
	cond	$''op='l'
	  list	#2
	else
	cond	$''op='m'
	  mlist	#2
	else
	cond	$''op='c'
	  clist	#2
	else
	cond	$''op='w'
	  wlist	#2
	else
	cond	$''op='i'
	  $''incl "#2"
	endc
	endc
	endc
	endc
	endc
	endc
	endc
	endm

:*	macro	#1,#2,#3,#4,#5,#6,#7,#8,#9
$''star1	set	$'blanksep
$'blanksep	set	1	;in case not RIO
	$''star	#1 #2 #3 #4 #5 #6 #7 #8 #9
$'blanksep	set	$''star1
	endm



.epuid:	macro	n
$'epuid	set	n
	endm
	$'2case .epuid

;------ compatibility macros ----------------

$''PRECS  macro #2,#6,#7
:not		$'prec	#2
:NOT		$'prec	#2
:.not.		$'prec	#2
:.NOT.		$'prec	#2
:\		$'prec	#2

:and		$'prec	#6
:AND		$'prec	#6
:.and.		$'prec	#6
:.AND.		$'prec	#6
:&		$'prec	#6

:or		$'prec	#7
:OR		$'prec	#7
:.or.		$'prec	#7
:.OR.		$'prec	#7
:^		$'prec	#7

:xor		$'prec	#7
:XOR		$'prec	#7
:.xor.		$'prec	#7
:.XOR.		$'prec	#7
	endm
		
.z800		macro		;normal mode

$'symlen	set	127
$'ucase		set	0
$'dotsep	set	0
$'blanksep	set	0
$'x'		set	0
$'stresc	set	05Cx
$'base		set	0Ax
$'zbase		set	0Ax
$'sbase		set	10x

$'s1len		set	10d
$'s1ord		set	'M'
$'s2len		set	10d
$'s2ord		set	'M'
$'adrlen	set	2
$'adrord	set	'L'

$'macbeg	set	'{'
$'macend	set	'}'
$'macquote	set	'!'
$'maccat	set	 0
$'maceval	set	'%'

		$''PRECS 2, 6, 7
		endm

.z80		macro		;RIO compat. mode

$'symlen	set	6
$'ucase		set	0
$'dotsep	set	1
$'blanksep	set	1
$'x'		set	0
$'stresc	set	0
$'base		set	0Ax
$'zbase		set	0Ax
$'sbase		set	0

$'s1len		set	2
$'s1ord		set	'L'
$'s2len		set	2
$'s2ord		set	'L'
$'adrlen	set	2
$'adrord	set	'L'

$'macbeg	set	"'"
$'macend	set	"'"
$'macquote	set	 0
$'maccat	set	 0
$'maceval	set	 0

		$''PRECS 2, 6, 7
		endm

.mac80		macro		;Macro 80 compat. mode

$'symlen	set	6
$'ucase		set	1
$'dotsep	set	0
$'blanksep	set	0
$'x'		set	1
$'stresc	set	0
$'base		set	0Ax
$'zbase		set	0Ax
$'sbase		set	0

$'s1len		set	2
$'s1ord		set	'M'
$'s2len		set	2
$'s2ord		set	'M'
$'adrlen	set	2
$'adrord	set	'L'

$'macbeg	set	"<"
$'macend	set	">"
$'macquote	set	"!"
$'maccat	set	"&"
$'maceval	set	"%"
$'opcopt	set	1

		$''PRECS 9,9,10
		endm

		$'2case	.z800 .z80 .mac80

;------ initialization ----------------

	.Z800

;------ Assertion macro for testing --------

$''assert macro #x, #m
	if !(#x)
	error	"#m"
	endif
	endm
	$'2case $''assert

;=========== end of initialization file =======
