nuclear@4: | vi:filetype=gas68k: nuclear@0: .text nuclear@0: .extern main nuclear@0: nuclear@0: .global start nuclear@0: .global halt_cpu nuclear@0: start: nuclear@1: jsr disable_intr nuclear@0: nuclear@12: | write SEGA to 0xa14000 to convience the TMSS to run us nuclear@12: move.l 0x100, %d0 nuclear@12: move.l %d0, 0xa14000 nuclear@12: nuclear@0: | copy .data section from ROM to RAM nuclear@0: move.l #_data_lma, %a0 nuclear@0: move.l #_data_start, %a1 nuclear@0: move.l #_data_end, %a2 nuclear@0: cmp.l %a1, %a2 nuclear@0: beq.s 1f | skip data copy if the section is empty nuclear@0: 0: move.l (%a0)+, (%a1)+ nuclear@0: cmp.l %a1, %a2 nuclear@0: bne.s 0b nuclear@0: 1: nuclear@0: 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 bss 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: nuclear@0: | setup the stack pointer stack nuclear@0: move.l #_stacktop, %sp nuclear@0: | now that we have a stack, we can enable interrupts nuclear@1: jsr enable_intr nuclear@0: nuclear@0: jsr main nuclear@0: halt_cpu: nuclear@0: stop #0x2700