view os9/mc09/c.txt @ 120:fbb3301a2564

TL1 source fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jan 2019 17:33:04 +0900
parents 990add11e9f8
children
line wrap: on
line source


*
* micro-C driver under FLEX
*
*	12-Dec-81	M.Ohta,H.Tezuka
*

	ORG	$100

_00000
	LDX	$CC2B		LOAD MEM END
	LEAS	1,X
	
	JSR	$CD24		CR/LF
	
	LEAS	-256,S		ALLOCATE WORK AREA
	LEAU	128,S		POINT TO CONTENT OF ARGUMENT VECTOR

	STU	,S
	BSR	_0C004		GET ARGV[0]
	CLRA			ARGC*2
_0C000	ADDA	#2		INCREMENT ARGC
	STU	A,S
	PSHS	A
	BSR	_0C009		GET NEXT ARGV
	PULS	A
	CMPU	#-1
	BNE	_0C000
	STU	A,S

	LEAU	128,S
	TFR	A,B
_0C001	LDX	A,S
	PSHU	X
	SUBA	#2
	BNE	_0C001
	LDX	,S
	PSHU	X
	LEAS	,U
	LSRB
	CLRA
	PSHS	D,U		push argc,argv
	LEAY	_99999,PCR	clear globals
	LDX	#_GLOBALS
_0C002	BEQ	_0C003
	CLR	,Y+
	LEAX	-1,X
	BRA	_0C002

_0C003	LEAY	_99999,PCR
	LBSR	_INITIALIZE	call initializer
	LBSR	_main
exit	JSR	$D403		FMS close
	JMP	$CD03		WARMS

_0C004	LDX	$CC14
_0C005	CMPX	#$C080
	BEQ	_0C007
	LDB	,-X
	CMPB	#$0D
	BEQ	_0C006
	CMPB	$CC02
	BNE	_0C005
_0C006	LEAX	1,X
_0C007	LDB	,X+
	CMPB	#' 
	BEQ	_0C008
	STB	,U+
	CMPX	#$CC02
	BLO	_0C007
_0C008	CLR	,U+
	RTS

_0C009	JSR	$CD27
	CMPA	#' 
	BEQ	_0C009
	CMPA	#$0D
	BEQ	_0C013
	CMPA	$CC02
	BEQ	_0C013
_0C010	CMPA	#'"
	BEQ	_0C014
	CMPA	#''
	BEQ	_0C014
	CMPA	#' 
	BEQ	_0C012
	CMPA	#$0D
	BEQ	_0C012
	CMPA	$CC02
	BEQ	_0C012
	STA	,U+
_0C011	JSR	$CD27
	BRA	_0C010

_0C012	CLR	,U+
	RTS

_0C013	LDU	#-1
	RTS

_0C014	PSHS	A
	LDX	$CC14
_0C015
	LDA	,X+
	CMPA	#$0D
	BEQ	_0C016
	CMPA	,S
	BEQ	_0C017
	STA	,U+
	BRA	_0C015

_0C016	LEAX	-1,X
_0C017	STX	$CC14
	PULS	A
	BRA	_0C011

*
* run time support
*

FMS	LDX	2,S
	LDA	5,S
	STA	,X
	LDA	7,S
	TST	59,X
	BMI	_FMS1
	CMPA	#$0A
	BNE	_FMS0
	LDA	#$0D
_FMS0	CMPA	#$09
	BNE	_FMS1
	LDA	#$20
_FMS1	JSR	$D406
	BNE	_FMSERR
	TFR	A,B
	TST	59,X
	BMI	_FMS9
	CMPB	#$0D
	BNE	_FMS8
	LDB	#$0A
_FMS8	CMPB	#$09
	BNE	_FMS9
	LDB	#$20
_FMS9	CLRA
	RTS
	
_FMSERR LDD	#-1
	RTS
	
GETCH	PSHS	X,Y,U
	JSR	$CD15		get character
	TFR	A,B
	ANDB	#$7F
	CMPB	#26		control-Z ?
	BNE	_0G001
	LDD	#-1
	PULS	X,Y,U,PC

_0G001	CMPB	#$0D
	BNE	_0G002
	LDB	#$0A
_0G002	CLRA
	PULS	X,Y,U,PC
*
PUTCH	LDD	2,S
	PSHS	D,X,Y,U
	TFR	B,A
	CMPA	#$09
	BNE	_0P001
	LDA	#$20
_0P001	CMPA	#$0A
	BNE	_0P002
	JSR	$CD24		put CR/LF
	PULS	D,X,Y,U,PC

_0P002	JSR	$CD18		put character
	PULS	D,X,Y,U,PC
*
PUTCH2	LDD	2,S
	PSHS	D
	LDA	$CC22
	PSHS	A
	LDA	#$FF
	STA	$CC22
	LDD	1,S
	PSHS	D
	BSR	PUTCH
	LEAS	2,S
	PULS	A
	STA	$CC22
	PULS	D,PC
*
_00001	PSHS	D,X,Y		multiply
	
	LDA	,S
	LDB	3,S
	MUL
	STB	4,S
	
	LDD	1,S
	MUL
	STB	5,S
	
	LDA	1,S
	LDB	3,S
	MUL
	ADDA	4,S
	ADDA	5,S
	
	LEAS	6,S
	RTS
*
_00002	CLR	,-S		signed divide
	
	CMPX	#0
	BPL	_02000
	
	COM	,S
	
	EXG	D,X
	LBSR	_00020
	EXG	D,X

_02000	TSTA
	BPL	_02001
	
	COM	,S
	
	LBSR	_00020
	
_02001	LBSR	_00010
	TFR	X,D
	TST	,S+
	BPL	_02002
	
	LBSR	_00020
	
_02002	RTS
*
_00003	LBSR	_00010		unsigned divide
	TFR	X,D
	RTS
*
_00004	CLR	,-S		signed modulous
	
	CMPX	#0
	BPL	_04000
	
	EXG	D,X
	BSR	_00020
	EXG	D,X

_04000	TSTA
	BPL	_04001
	
	COM	,S
	BSR	_00020
	
_04001	BSR	_00010
	
	TST	,S+
	BPL	_04002
	
	BSR	_00020
	
_04002	RTS
*
_00005	BSR	_00010		unsigned modulous

	RTS
*
_00006	CMPX	#0		signed left shift
	BMI	_06001
 
_06000	BEQ	_06009
	LSLB
	ROLA
	LEAX	-1,X
	BRA	_06000
	
_06001	BEQ	_06009
	ASRA
	RORB
	LEAX	1,X
	BRA	_06001
	
_06009	RTS
*
_00007	CMPX	#0		unsined left shift
	BMI	_07001
	
_07000	BEQ	_07009
	LSLB
	ROLA
	LEAX	-1,X
	BRA	_07000
	
_07001	BEQ	_07009
	LSRA
	RORB
	LEAX	1,X
	BRA	_07001
	
_07009	RTS
*
_00008	CMPX	#0		sined right shift
	BMI	_08001
	
_08000	BEQ	_08009
	ASRA
	RORB
	LEAX	-1,X
	BRA	_08000
	
_08001	BEQ	_08009
	LSLB
	ROLA
	LEAX	1,X
	BRA	_08001
	
_08009	RTS
*
_00009	CMPX	#0		unsined right shift
	BMI	_09001
	
_09000	BEQ	_09009
	LSRA
	RORB
	LEAX	-1,X
	BRA	_09000
	
_09001	BEQ	_09009
	LSLB
	ROLA
	LEAX	1,X
	BRA	_09001
	
_09009	RTS
*
_00020	NEGA			negate D reg
	NEGB
	SBCA	#0
	RTS
*
_00010	PSHS	D,X		divide subroutine
	
	CLRA
	CLRB
	
	LDX	#17
	
_00011	SUBD	2,S
	BCC	_00012
	
	ADDD	2,S
	
_00012	ROL	1,S
	ROL	,S
	ROLB
	ROLA
	
	LEAX	-1,X
	BNE	_00011
	
	RORA
	RORB
	
	COM	1,S
	COM	,S
	PULS	X
	
	LEAS	2,S
	RTS
*
* micro-C user program
*
*	OPT	LIST
	INCLUDE	"c.out"		include compilers output
*	OPT	NOL
*
*
*
_99999	EQU	*		global vars allocated here
*
	END	_00000