*************************************************************************
*	C-RunTime Routine 4						*
*	main(unchar *cmdline)						*
*	何も初期化しない版						*
*	ファイル／メモリー関係関数使用不可				*
*	大きな配列もとれない						*
*************************************************************************
* Copyright 1992 SHARP/Hudson	(1992/03/03)
* Arranged  1993,96 AIG-SOFT	(1996/01/14)

	* 外部宣言シンボル
	.xdef	__main			* startup main
	.xdef	__cmdline		* コマンドライン
	.xdef	_environ		* 親の環境
	
	* 外部参照シンボル
	.xref	_main			* user's main
	.xref	DOSINIT

	.include	doscall.mac

	.text
	.dc.b	'X68 C-Library',0
	.even

__main:
	jsr	DOSINIT			* Human68K v3.x対応
	*
	lea	_stack,sp		* work
	
	addq.w	#1,a2			* コマンドラインの１バイト目はその長さなので外す
	move.l	a2,__cmdline		* コマンド・ライン アドレス セット
	addq.w	#4,a3			* 環境の長さ４バイト分を飛ばす
	move.l	a3,_environ		* 環境アドレス セット
	
	* a0=プログラムメモリ管理ポインタ
	* a1=プログラム終了アドレス+1(.data,.bssを含む）
	
	lea	16(a0),a0		* メモリー管理ポインタ分を飛ばす
	sub.l	a0,a1			* 当プログラム・サイズ
	move.l	a1,-(sp)		* 確保する領域サイズ セット
	move.l	a0,-(sp)		* 確保する領域の先頭アドレス セット
	DOS	_SETBLOCK		* 空き領域確保
	addq.w	#8,sp
	tst.l	d0
	bmi	_memerr			* 領域が確保できない時＝エラー
	
	* ユーザーメインルーチン読みだし
	move.l	__cmdline,-(sp)
	jsr	_main			* ユーザーmain()呼び出し
	* EXIT2するのでスタック補正省略
	move.w	d0,-(sp)
	DOS	_EXIT2


* メモリー不足時のエラー終了
_memerr:
	pea	errmsg
	DOS	_PRINT
	* EXIT2するのでスタック補正省略
	move.w	#127,-(sp)
	DOS	_EXIT2

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

	.data
	.even
errmsg:		.dc.b	'メモリー不足',$0D,$0A,0

	.even
	.bss
_environ:	.ds.l	1		* 親の環境 = 自分の環境
__cmdline:	.ds.l	1		* コマンドライン

	.stack
_stack:		.ds.l	$4000

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

	.end	__main
