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