19f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
29f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#define	MEM_END	0x00800000	/* Memory size 8Mb */
39f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
49f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#undef CRT_DEBUG
59f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
69f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer.macro	PUTC CHAR
79f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#ifdef CRT_DEBUG
89f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	moveq	#\CHAR, %d7
99f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	jsr	putc
109f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#endif
119f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer.endm
129f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
139f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.global	_start
149f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.global _rambase
159f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.global _ramvec
169f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.global	_ramstart
179f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.global	_ramend
189f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
199f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.data
209f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
219f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
229f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer *	Set up the usable of RAM stuff
239f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
249f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer_rambase:
259f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.long	0
269f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer_ramvec:
279f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.long	0
289f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer_ramstart:
299f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.long	0
309f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer_ramend:
319f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.long	0
329f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
339f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	.text
349f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
359f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer_start:
369f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
379f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
389f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer * Setup initial stack
399f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
409f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	/* disable all interrupts */
419f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movew	#0x2700, %sr
429f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	#-1, 0xfffff304
439f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	#MEM_END-4, %sp
449f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
459f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'\r'
469f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'\n'
479f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'A'
489f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'B'
499f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
509f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
519f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer *	Determine end of RAM
529f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
539f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
549f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	#MEM_END, %a0
559f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	%a0, _ramend
569f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
579f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'C'
589f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
599f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
609f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer *	Move ROM filesystem above bss :-)
619f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
629f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
639f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	moveal	#_sbss, %a0			/* romfs at the start of bss */
649f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	moveal	#_ebss, %a1			/* Set up destination  */
659f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	%a0, %a2			/* Copy of bss start */
669f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
679f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	8(%a0), %d1			/* Get size of ROMFS */
689f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	addql	#8, %d1				/* Allow for rounding */
699f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	andl	#0xfffffffc, %d1	/* Whole words */
709f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
719f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	addl	%d1, %a0			/* Copy from end */
729f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	addl	%d1, %a1			/* Copy from end */
739f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	%a1, _ramstart		/* Set start of ram */
749f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
759f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer1:
769f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	-(%a0), %d0			/* Copy dword */
779f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movel	%d0, -(%a1)
789f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	cmpl	%a0, %a2			/* Check if at end */
799f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	bne	1b
809f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
819f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'D'
829f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
839f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
849f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer * Initialize BSS segment to 0
859f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
869f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
879f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	lea	_sbss, %a0
889f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	lea	_ebss, %a1
899f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
909f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	/* Copy 0 to %a0 until %a0 == %a1 */
919f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer2:	cmpal	%a0, %a1
929f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	beq	1f
939f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	clrl	(%a0)+
949f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	bra	2b
959f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer1:
969f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
979f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'E'
989f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
999f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
1009f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer * Load the current task pointer and stack
1019f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
1029f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1039f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	lea	init_thread_union, %a0
1049f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	lea	0x2000(%a0), %sp
1059f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1069f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'F'
1079f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'\r'
1089f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	PUTC	'\n'
1099f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1109f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
1119f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer * Go
1129f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
1139f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1149f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	jmp	start_kernel
1159f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1169f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer/*
1179f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer * Local functions
1189f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer */
1199f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer
1209f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#ifdef CRT_DEBUG
1219f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungererputc:
1229f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	moveb	%d7, 0xfffff907
1239f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer1:
1249f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	movew	0xfffff906, %d7
1259f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	andw	#0x2000, %d7
1269f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	beq	1b
1279f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer	rts
1289f5757476dc1c8eabc51e7d14722a2646bc2cb9dGreg Ungerer#endif
129