;
;  MACRO.ASM
;
DOMACRO	RTS
DOMEND	RTS
;
;  DATA.ASM
;
DSETUP	LDY	#STRMAX
	LDA	#' '
CLRSTR	STA	DATBUF-1,Y
	DEY
	BNE	CLRSTR
	LDY	TXTPTR
	RTS
;
DEFWP	JSR	DSETUP
DEFWPL	JSR	EVALAB
	LDA	VALUE
	LDX	LEN
	STA	DATBUF,X
	INX
	LDA	VALUE+1
	STA	DATBUF,X
	INX
	STX	LEN
	DEY
	LDA	(TEXTP),Y
	INY
	CMP	#','
	BEQ	DEFWPL
	BNE	EXITWS
;
GETTTL	JSR	DSETUP
	LDA	#2
	BNE	TTLS
GETSTL	JSR	DSETUP
	LDA	#1
TTLS	BIT	TTLFLG
	BEQ	DOTTL
	LDX	PASSNO
	BNE	IGNTTL
DOTTL	TAX
	LDA	TTLCODE,X
	ORA	TTLFLG
	STA	TTLFLG
	BNE	DEFBPE
;
DEFCOP	JSR	DSETUP
	LDA	#$80
	BMI	DEFBEN
;
DEFBP	JSR	DSETUP
DEFBPE	LDA	#0
DEFBEN	STA	MODE
	LDX	#0
DEFBLP	LDA	(TEXTP),Y
	CMP	#$27	;STARTING QUOTE?
	BEQ	QTSTR
	CPX	#STRMAX
	BCS	TOLONG
	CMP	#EOL
	BEQ	TOLONG
	JSR	EVALAB
	LDA	VALUE
	LDX	LEN
	STA	DATBUF,X
	INX
	DEY
ENDBS	STX	LEN
	LDA	MODE
	ORA	DATBUF-1,X		;SET THE HIGH BIT OF THE LAST CHAR
	STA	DATBUF-1,X
	LDA	(TEXTP),Y
	INY
	CMP	#','
	BEQ	DEFBLP
EXITBS	BIT	TTLFLG
	BMI	LDTITL
	BVS	LDSTTL
EXITWS	LDX	#6
CPYTXT	LDA	DATBUF-1,X
	STA	OPCODE-1,X
	DEX
	BNE	CPYTXT
	STX	MODE
	JSR	DATOBJ
IGNTTL	CLC
	RTS
;
QTSTR	INY
	LDA	(TEXTP),Y
	CMP	#$27	;END QUOTE?
	BEQ	CLQUOT
	CMP	#EOL
	BEQ	TOLONG
	STA	DATBUF,X
	INX
	CPX	#STRMAX
	BCC	QTSTR
;
TOLONG	LDA	#'S'
	STA	ADRERR
	DEY			;INSURE WE SEE EOL LATER
;
CLQUOT	INY
	BNE	ENDBS
;
LDTITL	LDX	#60
LDTITA	LDA	DATBUF-1,X
	STA	TITLE-1,X
	DEX
	BNE	LDTITA
TTLXIT	STX	LEN
	LDA	#$80
	STA	ISVAL
	LDA	TTLFLG
	AND	#3
	STA	TTLFLG
	RTS
;
LDSTTL	LDX	#60
LDSTTA	LDA	DATBUF-1,X
	STA	SUBTTL-1,X
	DEX
	BNE	LDSTTA
	BEQ	TTLXIT
;
DOEJECT	JSR	DSETUP
	LDA	CURLINE
	BEQ	ALREADY
	LDA	#$FF
	STA	CURLINE		;FORCE A PAGE EJECT
ALREADY	JSR	IFARG
	BCC	NOARG
	JSR	EVALAB
	LDA	VALUE+1
	BNE	TERROR
	LDA	VALUE
	BMI	TERROR
	STA	LPP
NOARG	CLC
	RTS
;
IFARG	JSR	NXTFLD
	CMP	#EOL
	BEQ	NOARG
	CMP	#';'
	BEQ	NOARG
;
TERROR	SEC
	RTS
;
TTLCODE	=	*-1
	DB	$41,$82
;
;  DIREC.ASM
;
;  HANDLE ASSEMBLER DIRECTIVES (Byte 2 of opcode table > 0x40)
;
ASSDIR	DEC	LEN
	AND	#$3F
	CMP	#DIRTBH-DIRTBL
	TAX
	LDA	DIRTBH,X
	PHA
	LDA	DIRTBL,X
	PHA
	RTS

DIRTBL	DB	LOW[ASSORG-1]
	DB	LOW[ASSEQU-1]
	DB	LOW[ASSEND-1]
	DB	LOW[ASSDEFS-1]
	DB	LOW[ASSLIST-1]
	DB	LOW[ASSINCL-1]
	DB	LOW[GETTTL-1]
	DB	LOW[GETSTL-1]
	DB	LOW[DEFWP-1]
	DB	LOW[DEFBP-1]
	DB	LOW[DEFCOP-1]
	DB	LOW[DOEJECT-1]
	DB	LOW[DOMACRO-1]
	DB	LOW[DOMEND-1]

DIRTBH	DB	HIGH[ASSORG-1]
	DB	HIGH[ASSEQU-1]
	DB	HIGH[ASSEND-1]
	DB	HIGH[ASSDEFS-1]
	DB	HIGH[ASSLIST-1]
	DB	HIGH[ASSINCL-1]
	DB	HIGH[GETTTL-1]
	DB	HIGH[GETSTL-1]
	DB	HIGH[DEFWP-1]
	DB	HIGH[DEFBP-1]
	DB	HIGH[DEFCOP-1]
	DB	HIGH[DOEJECT-1]
	DB	HIGH[DOMACRO-1]
	DB	HIGH[DOMEND-1]
;
ASSORG	JSR	EVALAB
	LDA	VALUE
	LDX	PC
	STA	PC
	STX	VALUE
	LDA	VALUE+1
	LDX	PC+1
	STA	PC+1
	STX	VALUE+1
	INC	ISVAL
	RTS
;
ASSEQU	JSR	EVALAB
	INC	ISVAL
	RTS
;
ASSEND	LDA	(TEXTP),Y
	CMP	#';'
	BEQ	NOENDV
	CMP	#EOL
	BEQ	NOENDV
	JSR	EVALAB
	DEY
	LDA	(TEXTP),Y
	INY
	CMP	#','
	BNE	RUNEND
	LDA	VALUE
	STA	INIPT
	LDA	VALUE+1
	STA	INIPT+1
	DEC	INIFLG
	BNE	ASSEND
;
RUNEND	LDA	VALUE
	STA	ENTPT
	LDA	VALUE+1
	STA	ENTPT+1
	DEC	ENTPTF
NOENDV	DEC	ENDFLG
	RTS
;
ASSDEFS	JSR	EVALAB
	LDA	VALUE
	STA	LEN
	LDA	VALUE+1
	STA	LEN+1
	LDA	#$FF
	STA	MODE
	RTS
;
BMPFIL	STX	FILE
CMTXIT	JMP	COMMNT
;
ASSINCL	LDX	#0
ASSINL	LDA	(TEXTP),Y
	CMP	#'z'+1
	BCS	ICLXIT
	CMP	#'.'
	BCC	ICLXIT
	STA	FNBUF,X
	INY
	INX
	CPX	#FNSIZE
	BNE	ASSINL
;
ICLXIT	LDA	#EOL
	STA	FNBUF,X
	JSR	BLDFNB
	CLC
	LDA	FILE
	ADC	#$10
	BMI	TMINCF
	TAX
	LDA	#LOW[FNBUF]
	LDY	#HIGH[FNBUF]
	JSR	OPENIN
	BPL	BMPFIL
;
TMINCF	LDA	#'I'
	STA	ADRERR
	BNE	CMTXIT
;
ASSLIST	EQU	CMTXIT	;NOT IMPLEMENTED YET
