nuclear@0: | vi:filetype=gas68k: nuclear@0: .global start nuclear@0: .global halt_cpu nuclear@1: .extern main nuclear@0: nuclear@1: .section .text.startup nuclear@1: nuclear@1: | enter supervisor mode (assumes VBR=0) nuclear@1: move.l #super, 0x80 nuclear@1: trap #0 nuclear@1: super: nuclear@1: ori.w #0x0300, %sr | disable interrupts nuclear@1: nuclear@0: | zero the .bss section nuclear@0: move.l #_bss_start, %a0 nuclear@0: move.l #_bss_end, %a1 nuclear@0: cmp.l %a0, %a1 nuclear@0: beq.s 1f | skip zeroing if the section is empty nuclear@0: 0: clr.l (%a0)+ nuclear@0: cmp.l %a0, %a1 nuclear@0: bne.s 0b nuclear@0: 1: nuclear@0: | setup the stack nuclear@0: move.l #_stacktop, %sp nuclear@1: andi.w #0xf8ff, %sr | enable interrupts nuclear@0: nuclear@1: jsr main nuclear@1: 0: bra.b 0b nuclear@0: nuclear@0: halt_cpu: nuclear@0: stop #0x2700