diff --git a/Makefile b/Makefile index fa84310..37e0284 100644 --- a/Makefile +++ b/Makefile @@ -17,10 +17,13 @@ vectorTable.o: vectorTable.asm zone.o: zone.asm $(ASM) $(ASMFLAGS) -o $@ $< -zone.hex: float.o vectorTable.o zone.o linker.cmd - $(LINK) $(LINKFLAGS) -o $@ float.o vectorTable.o zone.o +boot.o: boot.asm + $(ASM) $(ASMFLAGS) -o $@ $< + +zone.hex: float.o vectorTable.o zone.o boot.o linker.cmd + $(LINK) $(LINKFLAGS) -o $@ float.o vectorTable.o zone.o boot.o clean: - rm -f float.o vectorTable.o zone.o zone.hex + rm -f float.o vectorTable.o zone.o boot.o zone.hex .PHONY: all clean diff --git a/boot.asm b/boot.asm index 2866a8a..92c0e4a 100644 --- a/boot.asm +++ b/boot.asm @@ -1,2 +1,13 @@ ; SPDX-License-Identifier: MPL-2.0 ; SPDX-FileCopyrightText: (c) 2025 A.M. Rowsell +.section "boot","acrx" +.global zone_setup +.global os_warm_boot +.extern os_main_loop + +zone_setup: + ld sp, 0x6FFF + jp os_main_loop + +os_warm_boot: + ret diff --git a/linker.cmd b/linker.cmd index 5fa51f2..787408d 100644 --- a/linker.cmd +++ b/linker.cmd @@ -3,6 +3,7 @@ SECTIONS { .zone 0xA000 : { *(.zone) *(zone) } + .boot 0xC3C3 : { *(.boot) *(boot) } .text 0xE000 : { *(.text) *(.float) *(float) } .vectors 0xF000 : { *(.vectors) } .data 0x7000 : { *(.data) } diff --git a/vectorTable.asm b/vectorTable.asm index b4362ce..8efc329 100644 --- a/vectorTable.asm +++ b/vectorTable.asm @@ -14,4 +14,5 @@ os_vectors: .word os_getch_vec .word os_outbyte_vec .word os_inbyte_vec - .zero 248 + .word os_warm_boot + .zero 246 diff --git a/zone.asm b/zone.asm index 6c1f782..1935aac 100644 --- a/zone.asm +++ b/zone.asm @@ -9,6 +9,7 @@ .global os_getch_vec .global os_outbyte_vec .global os_inbyte_vec +.global os_main_loop zone_start: ret @@ -24,3 +25,6 @@ os_outbyte_vec: os_inbyte_vec: ret + +os_main_loop: + jp os_main_loop