diff --git a/arch/sparc32/build.xml b/arch/sparc32/build.xml
index 0667a36..d2eadce 100644
--- a/arch/sparc32/build.xml
+++ b/arch/sparc32/build.xml
@@ -15,7 +15,6 @@
-
diff --git a/arch/sparc64/build.xml b/arch/sparc64/build.xml
index 040718b..21edf08 100644
--- a/arch/sparc64/build.xml
+++ b/arch/sparc64/build.xml
@@ -14,7 +14,6 @@
-
diff --git a/arch/sparc64/forthload.c b/arch/sparc64/forthload.c
deleted file mode 100644
index 2f2324e..0000000
--- a/arch/sparc64/forthload.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* tag: forth source loader
- *
- * Copyright (C) 2004 Stefan Reinauer
- *
- * See the file "COPYING" for further information about
- * the copyright and warranty status of this work.
- */
-
-#include "config.h"
-#include "kernel/kernel.h"
-#include "libopenbios/bindings.h"
-#include "libopenbios/sys_info.h"
-#include "libc/diskio.h"
-#include "boot.h"
-#define printk printk
-#define debug printk
-
-static char *forthtext=NULL;
-static int fd;
-
-int forth_load(const char *filename)
-{
- char magic[2];
- unsigned long forthsize;
- int retval = -1;
-
- /* Mark the saved-program-state as invalid */
- feval("0 state-valid !");
-
- fd = open_io(filename);
- if (!fd)
- goto out;
-
- if (read_io(fd, magic, 2) != 2) {
- debug("Can't read magic header\n");
- retval = LOADER_NOT_SUPPORT;
- goto out;
- }
-
- if (magic[0] != '\\' || magic[1] != ' ') {
- debug("No forth source image\n");
- retval = LOADER_NOT_SUPPORT;
- goto out;
- }
-
- /* Calculate the file size by seeking to the end of the file */
- seek_io(fd, -1);
- forthsize = tell(fd);
- forthtext = malloc(forthsize+1);
- seek_io(fd, 0);
-
- printk("Loading forth source ...");
- if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) {
- printk("Can't read forth text\n");
- goto out;
- }
- forthtext[forthsize]=0;
- printk("ok\n");
-
- close_io(fd);
-
- // Initialise saved-program-state
- PUSH((ucell)forthtext);
- feval("saved-program-state >sps.entry !");
- PUSH((ucell)forthsize);
- feval("saved-program-state >sps.file-size !");
- feval("forth saved-program-state >sps.file-type !");
-
- feval("-1 state-valid !");
-
- retval=0;
-
-out:
- //if (forthtext)
- // free(forthtext);
- return retval;
-}
diff --git a/arch/x86/boot.c b/arch/x86/boot.c
index 835f1c7..0a45c5b 100644
--- a/arch/x86/boot.c
+++ b/arch/x86/boot.c
@@ -12,17 +12,20 @@
#include "arch/common/nvram.h"
#include "libc/diskio.h"
#include "libopenbios/sys_info.h"
+#include "libopenbios/elf_load.h"
+#include "libopenbios/forth_load.h"
#include "boot.h"
struct sys_info sys_info;
static int try_path(const char *path, char *param)
{
+ void *boot_notes = NULL;
ucell valid, address, type, size;
int image_retval = 0;;
/* ELF Boot loader */
- elf_load(&sys_info, path, param);
+ elf_load(&sys_info, path, param, &boot_notes);
feval("state-valid @");
valid = POP();
if (valid)
@@ -32,7 +35,7 @@ static int try_path(const char *path, char *param)
linux_load(&sys_info, path, param);
/* Forth loader */
- forth_load(&sys_info, path, param);
+ forth_load(path);
feval("state-valid @");
valid = POP();
if (valid)
diff --git a/arch/x86/boot.h b/arch/x86/boot.h
index 9ef4fda..0488ce4 100644
--- a/arch/x86/boot.h
+++ b/arch/x86/boot.h
@@ -6,12 +6,6 @@
* the copyright and warranty status of this work.
*/
-/* forthload.c */
-int forth_load(struct sys_info *info, const char *filename, const char *cmdline);
-
-/* elfload.c */
-int elf_load(struct sys_info *info, const char *filename, const char *cmdline);
-
/* linux_load.c */
int linux_load(struct sys_info *info, const char *file, const char *cmdline);
diff --git a/arch/x86/build.xml b/arch/x86/build.xml
index 50ccff8..8317209 100644
--- a/arch/x86/build.xml
+++ b/arch/x86/build.xml
@@ -14,7 +14,6 @@
-
diff --git a/arch/x86/forthload.c b/arch/x86/forthload.c
deleted file mode 100644
index cb3e1ce..0000000
--- a/arch/x86/forthload.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* tag: forth source loader
- *
- * Copyright (C) 2004 Stefan Reinauer
- *
- * See the file "COPYING" for further information about
- * the copyright and warranty status of this work.
- */
-
-#include "config.h"
-#include "kernel/kernel.h"
-#include "libopenbios/bindings.h"
-#include "libopenbios/sys_info.h"
-#include "libc/diskio.h"
-#include "boot.h"
-#define printk printk
-#define debug printk
-
-static char *forthtext=NULL;
-static int fd;
-
-int forth_load(struct sys_info *info, const char *filename, const char *cmdline)
-{
- char magic[2];
- unsigned long forthsize;
- int retval = -1;
-
- /* Mark the saved-program-state as invalid */
- feval("0 state-valid !");
-
- fd = open_io(filename);
- if (!fd)
- goto out;
-
- if (read_io(fd, magic, 2) != 2) {
- debug("Can't read magic header\n");
- retval = LOADER_NOT_SUPPORT;
- goto out;
- }
-
- if (magic[0] != '\\' || magic[1] != ' ') {
- debug("No forth source image\n");
- retval = LOADER_NOT_SUPPORT;
- goto out;
- }
-
- /* Calculate the file size by seeking to the end of the file */
- seek_io(fd, -1);
- forthsize = tell(fd);
- forthtext = malloc(forthsize+1);
- seek_io(fd, 0);
-
- printk("Loading forth source ...");
- if (read_io(fd, forthtext, forthsize) != forthsize) {
- printk("Can't read forth text\n");
- goto out;
- }
- forthtext[forthsize]=0;
- printk("ok\n");
-
- close_io(fd);
-
- // Initialise saved-program-state
- PUSH((ucell)forthtext);
- feval("saved-program-state >sps.entry !");
- PUSH((ucell)forthsize);
- feval("saved-program-state >sps.file-size !");
- feval("forth saved-program-state >sps.file-type !");
-
- feval("-1 state-valid !");
-
-out:
- //if (forthtext)
- // free(forthtext);
- return retval;
-}
diff --git a/config/scripts/switch-arch b/config/scripts/switch-arch
index c145e86..1d93016 100755
--- a/config/scripts/switch-arch
+++ b/config/scripts/switch-arch
@@ -150,7 +150,8 @@ for RULES_ARCH in $*; do
;;
x86)
- select_prefix i486
+ #select_prefix i486
+ select_prefix x86_64
CFLAGS="-fno-builtin -m32"
AS_FLAGS="-Wa,-32"
;;
diff --git a/include/libopenbios/forth_load.h b/include/libopenbios/forth_load.h
new file mode 100644
index 0000000..b0223c0
--- /dev/null
+++ b/include/libopenbios/forth_load.h
@@ -0,0 +1,22 @@
+/*
+ * Creation Date: <2010/03/22 18:00:00 mcayland>
+ * Time-stamp: <2010/03/22 18:00:00 mcayland>
+ *
+ *
+ *
+ * Forth loader
+ *
+ * Copyright (C) 2010 Mark Cave-Ayland (mark.cave-ayland@siriusit.co.uk)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation
+ *
+ */
+
+#ifndef _H_FORTHLOAD
+#define _H_FORTHLOAD
+
+extern int forth_load(const char *filename);
+
+#endif /* _H_FORTHLOAD */
\ No newline at end of file
diff --git a/libopenbios/build.xml b/libopenbios/build.xml
index 055aea3..d2dd9ce 100644
--- a/libopenbios/build.xml
+++ b/libopenbios/build.xml
@@ -17,6 +17,7 @@
+
diff --git a/arch/sparc32/forthload.c b/libopenbios/forth_load.c
similarity index 93%
rename from arch/sparc32/forthload.c
rename to libopenbios/forth_load.c
index 2f2324e..76fee6b 100644
--- a/arch/sparc32/forthload.c
+++ b/libopenbios/forth_load.c
@@ -11,13 +11,13 @@
#include "libopenbios/bindings.h"
#include "libopenbios/sys_info.h"
#include "libc/diskio.h"
-#include "boot.h"
+#include "libopenbios/forth_load.h"
#define printk printk
#define debug printk
-static char *forthtext=NULL;
static int fd;
+static char *forthtext=NULL;
int forth_load(const char *filename)
{
char magic[2];
@@ -50,15 +50,13 @@ int forth_load(const char *filename)
seek_io(fd, 0);
printk("Loading forth source ...");
- if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) {
+ if ((size_t)read_io(fd, forthtext, forthsize) != forthsize) {
printk("Can't read forth text\n");
goto out;
}
forthtext[forthsize]=0;
printk("ok\n");
- close_io(fd);
-
// Initialise saved-program-state
PUSH((ucell)forthtext);
feval("saved-program-state >sps.entry !");