From 4cb081d5494fbe611427cb50fe4417eb4eb2f95f Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 25 Jan 2015 15:54:08 +0000 Subject: [PATCH] z80: define PROGLOAD in the asm side of things, also tidy PROG_BASE to match C PROGBASE This gives us the foundation to do relocation handling by passing the start of user code its address in IY --- Kernel/lib/z80fixedbank.s | 4 ++-- Kernel/lowlevel-z80.s | 3 +++ Kernel/platform-micropack/kernel.def | 3 +++ Kernel/platform-msx1/kernel.def | 5 ++++- Kernel/platform-msx2/kernel.def | 3 +++ Kernel/platform-mtx/kernel.def | 3 ++- Kernel/platform-n8vem-mark4/kernel.def | 3 +++ Kernel/platform-nc100/kernel.def | 3 +++ Kernel/platform-p112/kernel.def | 3 +++ Kernel/platform-pcw8256/kernel.def | 3 +++ Kernel/platform-trs80/kernel.def | 3 ++- Kernel/platform-ubee/kernel.def | 3 ++- Kernel/platform-z80pack-lite/kernel.def | 2 ++ Kernel/platform-z80pack/kernel.def | 3 ++- Kernel/platform-z80pack32/kernel.def | 3 +++ Kernel/platform-zx128/kernel.def | 3 ++- 16 files changed, 42 insertions(+), 8 deletions(-) diff --git a/Kernel/lib/z80fixedbank.s b/Kernel/lib/z80fixedbank.s index ea1c68eb..067b7d00 100644 --- a/Kernel/lib/z80fixedbank.s +++ b/Kernel/lib/z80fixedbank.s @@ -278,8 +278,8 @@ _dofork: ; Assumption - fits into a fixed number of whole 256 byte blocks ; bankfork: - ld b, #(U_DATA_STASH - PROG_BASE)/256 - ld hl, #PROG_BASE ; base of memory to fork (vectors included) + ld b, #(U_DATA_STASH - PROGBASE)/256 + ld hl, #PROGBASE ; base of memory to fork (vectors included) bankfork_1: push bc ; Save our counter and also child offset push hl diff --git a/Kernel/lowlevel-z80.s b/Kernel/lowlevel-z80.s index 14a5b390..76a55cdc 100644 --- a/Kernel/lowlevel-z80.s +++ b/Kernel/lowlevel-z80.s @@ -248,6 +248,9 @@ _doexec: ld (U_DATA__U_INSYS), a ex de, hl + + ; for the relocation engine - tell it where it is + ld iy, PROGLOAD ei jp (hl) diff --git a/Kernel/platform-micropack/kernel.def b/Kernel/platform-micropack/kernel.def index 3cb92539..8fe7a39d 100644 --- a/Kernel/platform-micropack/kernel.def +++ b/Kernel/platform-micropack/kernel.def @@ -4,3 +4,6 @@ U_DATA .equ 0x7D00 ; (this is struct u_data from kern U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. Z80_TYPE .equ 0 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-msx1/kernel.def b/Kernel/platform-msx1/kernel.def index ccff40f2..676999da 100644 --- a/Kernel/platform-msx1/kernel.def +++ b/Kernel/platform-msx1/kernel.def @@ -11,4 +11,7 @@ Z80_TYPE .equ 1 ; Where is the character font preloaded for us on this box -VRAM_CH .equ 1 \ No newline at end of file +VRAM_CH .equ 1 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-msx2/kernel.def b/Kernel/platform-msx2/kernel.def index dd2b6e5a..97fb7dc8 100644 --- a/Kernel/platform-msx2/kernel.def +++ b/Kernel/platform-msx2/kernel.def @@ -6,3 +6,6 @@ U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. ; as far as I can tell either is allowed by the spec Z80_TYPE .equ 1 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-mtx/kernel.def b/Kernel/platform-mtx/kernel.def index 6ab4982a..86af82fc 100644 --- a/Kernel/platform-mtx/kernel.def +++ b/Kernel/platform-mtx/kernel.def @@ -5,7 +5,8 @@ U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. U_DATA_STASH .equ 0xBD00 ; BD00-BFFF -PROG_BASE .equ 0x0000 +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 Z80_TYPE .equ 0 diff --git a/Kernel/platform-n8vem-mark4/kernel.def b/Kernel/platform-n8vem-mark4/kernel.def index 96be4779..720ce1ba 100644 --- a/Kernel/platform-n8vem-mark4/kernel.def +++ b/Kernel/platform-n8vem-mark4/kernel.def @@ -15,3 +15,6 @@ MARK4_IO_BASE .equ 0x80 ; No standard clock speed for the Mark IV board, but this is a common choice. USE_FANCY_MONITOR .equ 1 ; disabling this saves around approx 0.5KB CPU_CLOCK_KHZ .equ 36864 ; 18.432MHz * 2 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-nc100/kernel.def b/Kernel/platform-nc100/kernel.def index 6e508044..2b24a77b 100644 --- a/Kernel/platform-nc100/kernel.def +++ b/Kernel/platform-nc100/kernel.def @@ -4,3 +4,6 @@ U_DATA .equ 0xF000 ; (this is struct u_data from kern U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. Z80_TYPE .equ 0 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-p112/kernel.def b/Kernel/platform-p112/kernel.def index 4bf522f7..22927591 100644 --- a/Kernel/platform-p112/kernel.def +++ b/Kernel/platform-p112/kernel.def @@ -15,3 +15,6 @@ Z80_TYPE .equ 2 ; (18.432MHz) but this made the machine unstable. USE_FANCY_MONITOR .equ 1 ; disabling this saves around 0.5KB CPU_CLOCK_KHZ .equ 16000 ; 16MHz is the stock crystal + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-pcw8256/kernel.def b/Kernel/platform-pcw8256/kernel.def index 67fe1f15..e115c644 100644 --- a/Kernel/platform-pcw8256/kernel.def +++ b/Kernel/platform-pcw8256/kernel.def @@ -4,3 +4,6 @@ U_DATA .equ 0xF000 ; (this is struct u_data from kern U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. Z80_TYPE .equ 0 ; FIXME: check + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-trs80/kernel.def b/Kernel/platform-trs80/kernel.def index 3291d854..36405363 100644 --- a/Kernel/platform-trs80/kernel.def +++ b/Kernel/platform-trs80/kernel.def @@ -5,6 +5,7 @@ U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. U_DATA_STASH .equ 0x7D00 ; BD00-BFFF -PROG_BASE .equ 0x0000 +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 Z80_TYPE .equ 1 diff --git a/Kernel/platform-ubee/kernel.def b/Kernel/platform-ubee/kernel.def index 04e570c9..ba8d4a07 100644 --- a/Kernel/platform-ubee/kernel.def +++ b/Kernel/platform-ubee/kernel.def @@ -5,6 +5,7 @@ U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. U_DATA_STASH .equ 0x7D00 ; BD00-BFFF -PROG_BASE .equ 0x0000 +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 Z80_TYPE .equ 1 diff --git a/Kernel/platform-z80pack-lite/kernel.def b/Kernel/platform-z80pack-lite/kernel.def index 6e508044..86b4a534 100644 --- a/Kernel/platform-z80pack-lite/kernel.def +++ b/Kernel/platform-z80pack-lite/kernel.def @@ -4,3 +4,5 @@ U_DATA .equ 0xF000 ; (this is struct u_data from kern U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. Z80_TYPE .equ 0 +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-z80pack/kernel.def b/Kernel/platform-z80pack/kernel.def index e6a5a3ce..7bf48f2f 100644 --- a/Kernel/platform-z80pack/kernel.def +++ b/Kernel/platform-z80pack/kernel.def @@ -5,6 +5,7 @@ U_DATA__TOTALSIZE .equ 0x300 ; 256+256+256 bytes. U_DATA_STASH .equ 0xED00 ; ED00-EFFF -PROG_BASE .equ 0 +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 Z80_TYPE .equ 0 diff --git a/Kernel/platform-z80pack32/kernel.def b/Kernel/platform-z80pack32/kernel.def index 9859fe92..668c489e 100644 --- a/Kernel/platform-z80pack32/kernel.def +++ b/Kernel/platform-z80pack32/kernel.def @@ -8,3 +8,6 @@ U_STASH_LOW .equ 0x7D00 ; 7D00-BFFF Z80_TYPE .equ 0 + +PROGBASE .equ 0x0000 +PROGLOAD .equ 0x0100 diff --git a/Kernel/platform-zx128/kernel.def b/Kernel/platform-zx128/kernel.def index de19e2a2..25add17f 100644 --- a/Kernel/platform-zx128/kernel.def +++ b/Kernel/platform-zx128/kernel.def @@ -7,7 +7,8 @@ U_DATA_STASH .equ 0xFD00 ; BD00-BFFF Z80_TYPE .equ 1 -PROG_BASE .equ 0xC000 +PROGBASE .equ 0xC000 +PROGLOAD .equ 0xC000 ; ; Ways we may boot -- 2.34.1