On Friday 18 Nov 2005 23:27, Hollis Blanchard wrote: > On Friday 18 November 2005 16:37, Timothy Baldwin wrote:
> > > 2005-08-29 Timothy Baldwin <[EMAIL PROTECTED]> > > * boot/arm/RISC_OS/!Run,feb: New file. > > What on earth is this file...? :) A script which loads the GRUB kernel. > > > * kern/arm/RISC_OS/init.c: Likewise. > > I'm a little confused about this "RISC_OS" naming. Is "RISC_OS" the name of > the firmware that GRUB runs above? If not, I don't think that's an > appropriate name. The firmware is called "RISC OS", not to be confused with "RISC/os". Putting spaces in the filenames is asking for trouble. RISC OS is a co-operative multitasking operating system and is the firmware in the systems on which it runs. 2005-08-29 Timothy Baldwin <[EMAIL PROTECTED]> * boot/arm/RISC_OS/!Run,feb: New file. * kern/arm/aif_header.lds: Likewise. * kern/arm/aif_header.S: Likewise. * kern/arm/dl.c: Likewise. * kern/arm/RISC_OS/init.c: Likewise. * kern/arm/RISC_OS/misc.c: Likewise. * kern/arm/RISC_OS/startup.S: Likewise. * normal/arm/setjmp.S: Likewise. * include/grub/arm/libgcc.h: Likewise. * include/grub/arm/RISC_OS/console.h: Likewise. * include/grub/arm/RISC_OS/misc.h: Likewise. * include/grub/arm/RISC_OS/swis.h: Likewise. * include/grub/arm/RISC_OS/time.h: Likewise. * include/grub/arm/setjmp.h: Likewise. * conf/arm-RISC_OS.rmk: Likewise. * include/grub/misc.h (grub_align): New macro. (memset): New prototype. * Makefile.in (RMKFILES): Add arm-RISC_OS.rmk and common.rmk to list. * configure.ac: Add tests for ARM and -std=gnu99 gcc option. -- Member AFFS, WYLUG, SWP (UK), UAF, RESPECT, StWC No to software patents! Victory to the iraqi resistance!
diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/boot/arm/RISC_OS/!Run,feb grub2-RISC_OS/boot/arm/RISC_OS/!Run,feb --- grub2-split/boot/arm/RISC_OS/!Run,feb 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/boot/arm/RISC_OS/!Run,feb 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,33 @@ +| !Run - start grub on RISC OS. + +| GRUB -- GRand Unified Bootloader +| Copyright (C) 2005 Free Software Foundation, Inc. +| +| 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; either version 2 of the License, or +| (at your option) any later version. +| +| This program is distributed in the hope that it will be useful, +| but WITHOUT ANY WARRANTY; without even the implied warranty of +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +| GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License +| along with this program; if not, write to the Free Software +| Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +| Record this directory +Set Grub$Dir <Obey$Dir> +Set Alias$Grub Run |<Grub$Dir> + +| Set text window to full screen and use default colours. +Echo <20><26><12> +Pointer 0 + +| Ensure we have enough memory +Wimpslot 256K 256K + +| Start grub +Run <Grub$Dir>.grub_RO %*0 diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/conf/arm-RISC_OS.rmk grub2-RISC_OS/conf/arm-RISC_OS.rmk --- grub2-split/conf/arm-RISC_OS.rmk 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/conf/arm-RISC_OS.rmk 2005-11-18 15:53:05.000000000 +0000 @@ -0,0 +1,64 @@ +# -*- makefile -*- + +COMMON_ASFLAGS = -nostdinc -fno-builtin -Wa,--gstabs +COMMON_CFLAGS = -fno-builtin -ffixed-r10 -mapcs-frame -mpoke-function-name + +pkgdata_DATA = $(srcdir)/boot/arm/RISC_OS/!Run,feb + +# Images. +pkgdata_IMAGES = grub_RO,ff8 + +# For grub_RO.img. +grub_RO_ff8_SOURCES = kern/arm/aif_header.S \ + kern/main.c kern/device.c kern/parser.c \ + kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \ + kern/misc.c kern/loader.c kern/rescue.c kern/term.c \ + kern/partition.c kern/env.c symlist.c \ + kern/arm/dl.c kern/arm/RISC_OS/startup.S\ + kern/arm/RISC_OS/init.c kern/arm/RISC_OS/misc.c \ + term/arm/RISC_OS/console.c term/arm/RISC_OS/console-asm.S \ + +grub_RO_ff8_HEADERS = arg.h boot.h device.h disk.h dl.h elf.h env.h err.h \ + file.h fs.h kernel.h loader.h misc.h mm.h net.h partition.h \ + pc_partition.h rescue.h symbol.h term.h types.h parser.h \ + arm/libgcc.h \ + arm/RISC_OS/misc.h \ + arm/RISC_OS/time.h + +grub_RO_ff8_CFLAGS = $(COMMON_CFLAGS) +grub_RO_ff8_ASFLAGS = $(COMMON_ASFLAGS) +grub_RO_ff8_LDFLAGS = `$(CC) -print-libgcc-file-name` $(srcdir)/kern/arm/aif_header.lds -nostdlib -Wl,-N,-Ttext,8000 + +MOSTLYCLEANFILES += symlist.c grub_RO_syms.lst +DEFSYMFILES += grub_RO_syms.lst + +symlist.c: $(addprefix include/grub/,$(grub_RO_ff8_HEADERS)) gensymlist.sh + sh $(srcdir)/gensymlist.sh $(filter %.h,$^) > $@ + +grub_RO_syms.lst: $(addprefix include/grub/,$(grub_RO_ff8_HEADERS)) genkernsyms.sh + sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@ + + + +# Utilities. +noinst_UTILITIES = genmoddep + + +# For genmoddep. +genmoddep_SOURCES = util/genmoddep.c + +# Modules. +pkgdata_MODULES = normal.mod +# For normal.mod. + +normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \ + normal/completion.c normal/context.c normal/execute.c \ + normal/function.c normal/lexer.c normal/main.c normal/menu.c \ + normal/menu_entry.c normal/misc.c grub_script.tab.c \ + normal/script.c normal/arm/setjmp.S +normal_mod_CFLAGS = $(COMMON_CFLAGS) +normal_mod_ASFLAGS = $(COMMON_ASFLAGS) +normal_mod_LDFLAGS = $(COMMON_LDFLAGS) + + +include $(top_srcdir)/conf/common.mk \ No newline at end of file diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/configure.ac grub2-RISC_OS/configure.ac --- grub2-split/configure.ac 2005-11-08 18:39:52.000000000 +0000 +++ grub2-RISC_OS/configure.ac 2005-11-18 15:26:26.000000000 +0000 @@ -24,6 +24,7 @@ case "$host_cpu" in i[[3456]]86) host_cpu=i386 ;; x86_64) host_cpu=i386 amd64=1 ;; powerpc) ;; + arm) ;; sparc64) ;; *) AC_MSG_ERROR([unsupported CPU type]) ;; esac @@ -31,6 +32,7 @@ esac case "$host_cpu"-"$host_vendor" in i386-*) host_vendor=pc ;; powerpc-*) host_vendor=ieee1275 ;; + arm-*) host_vendor=RISC_OS ;; sparc64-*) host_vendor=ieee1275 ;; *) AC_MSG_ERROR([unsupported machine type]) ;; esac @@ -66,6 +68,23 @@ if test "x$default_CFLAGS" = xyes; then tmp_CFLAGS="$tmp_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops" fi + # C99. + AC_CACHE_CHECK([whether -std=gnu99 works], c99_flag, [ + CFLAGS=-std=gnu99 + AC_TRY_COMPILE(, , c99_flag=yes, c99_flag=no) + ]) + if test "x$c99_flag" = xyes; then + tmp_CFLAGS="$tmp_CFLAGS -std=gnu99" + fi + + AC_CACHE_CHECK([whether -fstd=gnu9x works], c9x_flag, [ + CFLAGS=-fstd=gnu9x + AC_TRY_COMPILE(, , c9x_flag=yes, c9x_flag=no) + ]) + if test "x$c9x_flag" = xyes; then + tmp_CFLAGS="$tmp_CFLAGS -fstd=gnu9x" + fi + # Force no alignment to save space on i386. if test "x$host_cpu" = xi386; then AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/libgcc.h grub2-RISC_OS/include/grub/arm/libgcc.h --- grub2-split/include/grub/arm/libgcc.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/libgcc.h 2005-11-18 15:30:37.000000000 +0000 @@ -0,0 +1,27 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +void EXPORT_FUNC (__clear_cache) (void *start, void *end); +void EXPORT_FUNC (__udivsi3) (void); +void EXPORT_FUNC (__umodsi3) (void); +void EXPORT_FUNC (__divsi3) (void); +void EXPORT_FUNC (__modsi3) (void); +void EXPORT_FUNC (__ashldi3) (void); +void EXPORT_FUNC (__lshrdi3) (void); +void EXPORT_FUNC (__muldi3) (void); diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/RISC_OS/console.h grub2-RISC_OS/include/grub/arm/RISC_OS/console.h --- grub2-split/include/grub/arm/RISC_OS/console.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/RISC_OS/console.h 2005-11-18 18:50:02.000000000 +0000 @@ -0,0 +1,43 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef GRUB_CONSOLE_MACHINE_HEADER +#define GRUB_CONSOLE_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#include <grub/types.h> +#include <grub/symbol.h> +#include <grub/term.h> + +/* These are global to share code between C and asm. */ +void grub_console_real_putchar (int c); +int EXPORT_FUNC (grub_console_checkkey) (void); +int EXPORT_FUNC (grub_console_getkey) (void); +grub_uint16_t grub_console_getxy (void); +int grub_console_get_and_set_cursor_key_state (int); +int grub_console_convert (int c); +extern grub_uint16_t grub_console_getwh (void); + +/* Initialize the console system. */ +void grub_console_initialise (void); +int grub_console_in_taskwindow (void); +#endif + +#endif /* ! GRUB_CONSOLE_MACHINE_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/RISC_OS/misc.h grub2-RISC_OS/include/grub/arm/RISC_OS/misc.h --- grub2-split/include/grub/arm/RISC_OS/misc.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/RISC_OS/misc.h 2005-11-18 16:13:50.000000000 +0000 @@ -0,0 +1,79 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005 Free Software Foundation, Inc. + * + * GRUB 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef GRUB_MISC_MACHINE_HEADER +#define GRUB_MISC_MACHINE_HEADER 1 + +#include <grub/types.h> +#include <grub/err.h> +#include <grub/symbol.h> + +typedef struct grub_RISC_OS_error +{ + unsigned number; + char message[]; +} *grub_RISC_OS_error_t; + +/* Number of last RISC OS error passed to grub_RISC_OS_error_convert */ +extern unsigned EXPORT_VAR (grub_RISC_OS_errno); + +/* ISO C */ +typedef struct +{ + int pad[9]; +} grub_RISC_OS_FILE; + +#define SEEK_SET 0 +#define SEEK_END 2 + +extern unsigned EXPORT_VAR (grub_RISC_OS_clib_errno); + +/* ISO C functions */ +grub_RISC_OS_FILE *grub_RISC_OS_fopen (const char *path, const char *mode); +int grub_RISC_OS_fclose (grub_RISC_OS_FILE * fp); +int grub_RISC_OS_fseek (grub_RISC_OS_FILE * stream, long offset, int whence); +grub_ssize_t grub_RISC_OS_fread (void *ptr, grub_ssize_t size, + grub_ssize_t nmemb, + grub_RISC_OS_FILE * stream); +long grub_RISC_OS_ftell (grub_RISC_OS_FILE * stream); +void *grub_RISC_OS_malloc (grub_size_t size); +void *grub_RISC_OS_realloc (void *ptr, grub_size_t size); +void grub_RISC_OS_free (void *ptr); +void *EXPORT_FUNC (grub_RISC_OS_system) (const char *); + +/* SharedCLibrary functions */ +grub_RISC_OS_error_t *EXPORT_FUNC (grub_RISC_OS_kernel_setenv) (const char + *name, + const char + *value); + +grub_err_t EXPORT_FUNC (grub_RISC_OS_error_convert) (grub_RISC_OS_error_t, + grub_err_t); +grub_err_t +EXPORT_FUNC (grub_RISC_OS_error_convert_zero) (grub_RISC_OS_error_t, + grub_err_t); +grub_err_t EXPORT_FUNC (grub_RISC_OS_clib_error) (grub_err_t); +grub_RISC_OS_error_t grub_RISC_OS_kernel_last_oserror (void); + +int EXPORT_FUNC (grub_RISC_OS_get_swi_number) (const char *); + +extern unsigned grub_RISC_OS_version, grub_RISC_OS_81C710_present; +extern const char *grub_RISC_OS_dealer; + +#endif /* ! GRUB_MISC_MACHINE_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/RISC_OS/swis.h grub2-RISC_OS/include/grub/arm/RISC_OS/swis.h --- grub2-split/include/grub/arm/RISC_OS/swis.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/RISC_OS/swis.h 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,83 @@ +/* swis.h - RISC OS SWI Numbers */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * 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; either version 2 of the License or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not write to the Free Software + * Foundation Inc. 675 Mass Ave Cambridge MA 02139 USA. + */ + +#ifndef GRUB_MACHINE_SWI_HEADER +#define GRUB_MACHINE_SWI_HEADER 1 + +#define X(x) ((x) | 0x20000) + +#define Cache_Control 0x280 +#define Cache_Flush 0x284 +#define ColourTrans_ReturnColourNumber 0x40744 +#define FileCore_DescribeDisc 0x40545 +#define FileCore_DiscOp 0x40540 +#define FileCore_DiscOp64 0x4054E +#define FileCore_Drives 0x40542 +#define FileCore_MiscOp 0x40549 +#define FileCore_SectorOp 0x4054A +#define Hourglass_Off 0x406C1 +#define Hourglass_On 0x406C0 +#define Hourglass_Smash 0x406C2 +#define OS_Args 0x09 +#define OS_BreakPt 0x17 +#define OS_Byte 0x06 +#define OS_Claim 0x1F +#define OS_Release 0x20 +#define OS_ChangeDynamicArea 0x2A +#define OS_ChangeEnvironment 0x40 +#define OS_CLI 0x05 +#define OS_ConvertHex8 0xD4 +#define OS_EnterOS 0x16 +#define OS_Exit 0x11 +#define OS_File 0x08 +#define OS_Find 0x0D +#define OS_FSControl 0x29 +#define OS_GBPB 0x0C +#define OS_GenerateError 0x2B +#define OS_GetEnv 0x10 +#define OS_LeaveOS 0x7C +#define OS_IntOff 0x14 +#define OS_Memory 0x68 +#define OS_Module 0x1E +#define OS_ReadArgs 0x49 +#define OS_ReadC 0x04 +#define OS_ReadDynamicArea 0x5C +#define OS_ReadMonotonicTime 0x42 +#define OS_ReadSysInfo 0x58 +#define OS_ReadUnsigned 0x21 +#define OS_ReadVduVariables 0x31 +#define OS_RemoveCursors 0x36 +#define OS_Reset 0x6A +#define OS_ServiceCall 0x30 +#define OS_SWINumberFromString 0x39 +#define OS_SynchroniseCodeAreas 0x006E +#define OS_Write0 0x02 +#define OS_WriteC 0x00 +#define OS_WriteI 0x100 +#define OS_WriteN 0x46 +#define OS_WriteS 0x01 +#define SharedCLibrary_LibInitAPCS_32 0x80683 +#define SharedCLibrary_LibInitAPCS_R 0x80681 +#define TaskWindow_TaskInfo 0x43380 + +#define Service_PreReset 0x45 +#define ERROR_NO_SUCH_SWI 0x1E6 + +#endif /* GRUB_MACHINE_SWI_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/RISC_OS/time.h grub2-RISC_OS/include/grub/arm/RISC_OS/time.h --- grub2-split/include/grub/arm/RISC_OS/time.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/RISC_OS/time.h 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,33 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003, 2004 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef KERNEL_TIME_HEADER +#define KERNEL_TIME_HEADER 1 + +#ifdef GRUB_UTIL +# include <time.h> +# define GRUB_TICKS_PER_SECOND CLOCKS_PER_SEC +#else +# define GRUB_TICKS_PER_SECOND 100 +#endif + +/* Return the real time in ticks. */ +grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void); + +#endif /* ! KERNEL_TIME_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/setjmp.h grub2-RISC_OS/include/grub/arm/setjmp.h --- grub2-split/include/grub/arm/setjmp.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/setjmp.h 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,25 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef GRUB_SETJMP_CPU_HEADER +#define GRUB_SETJMP_CPU_HEADER 1 + +typedef unsigned long grub_jmp_buf[10]; + +#endif /* ! GRUB_SETJMP_CPU_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/arm/types.h grub2-RISC_OS/include/grub/arm/types.h --- grub2-split/include/grub/arm/types.h 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/include/grub/arm/types.h 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,35 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004 Free Software Foundation, Inc. + * + * GRUB 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef GRUB_TYPES_CPU_HEADER +#define GRUB_TYPES_CPU_HEADER 1 + +/* The size of void *. */ +#define GRUB_HOST_SIZEOF_VOID_P 4 + +/* The size of long. */ +#define GRUB_HOST_SIZEOF_LONG 4 + +/* The size of a page. */ +#define GRUB_HOST_PAGE_SIZE (0x400) + +/* ARM is little-endian. (Or big-endian!! - but we don't support that yet) */ +#undef GRUB_HOST_WORDS_BIGENDIAN + +#endif /* ! GRUB_TYPES_CPU_HEADER */ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/misc.h grub2-RISC_OS/include/grub/misc.h --- grub2-split/include/grub/misc.h 2005-10-24 11:23:46.000000000 +0100 +++ grub2-RISC_OS/include/grub/misc.h 2005-11-18 15:26:26.000000000 +0000 @@ -29,6 +29,7 @@ #define grub_dprintf(condition, fmt, args...) grub_real_dprintf(__FILE__, __LINE__, condition, fmt, ## args); /* XXX: If grub_memmove is too slow, we must implement grub_memcpy. */ #define grub_memcpy(d,s,n) grub_memmove ((d), (s), (n)) +#define grub_align(align, val) (((val) + ((align) - 1)) & ~((align) - 1)) void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); @@ -40,6 +41,7 @@ char *EXPORT_FUNC(grub_strncat) (char *d /* Prototypes for aliases. */ void *EXPORT_FUNC(memmove) (void *dest, const void *src, grub_size_t n); void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n); +void *EXPORT_FUNC(memset) (void *s, int c, grub_size_t n); int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/include/grub/powerpc/libgcc.h grub2-RISC_OS/include/grub/powerpc/libgcc.h --- grub2-split/include/grub/powerpc/libgcc.h 2005-02-13 18:54:57.000000000 +0000 +++ grub2-RISC_OS/include/grub/powerpc/libgcc.h 2005-11-18 15:30:45.000000000 +0000 @@ -17,7 +17,6 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -void EXPORT_FUNC (memset) (void); void EXPORT_FUNC (__adddf3) (void); void EXPORT_FUNC (__addsf3) (void); void EXPORT_FUNC (__ashldi3) (void); diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/aif_header.lds grub2-RISC_OS/kern/arm/aif_header.lds --- grub2-split/kern/arm/aif_header.lds 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/aif_header.lds 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,23 @@ +/* aif_header.lds - Calculate values for AIF header */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Timothy Baldwin. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +grub_text_size = __data_start - _start; +grub_data_size = _edata - __data_start; +grub_bss_size = _end - _edata; diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/aif_header.S grub2-RISC_OS/kern/arm/aif_header.S --- grub2-split/kern/arm/aif_header.S 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/aif_header.S 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,60 @@ +/* aif_header.S - AIF header */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Timothy Baldwin. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * aword with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <config.h> +#include <grub/symbol.h> + + .align + .global _start +_start: nop + nop + bl zeroinit + bl grub_arm_startup +lock: b lock @ "Program exit instruction" (never reached) + .word grub_text_size +dsize: .word grub_data_size + .word 0 @ Debug data size +zisize: .word grub_bss_size + .word 0 @ No Debug data + .word _start + .word 0 @ Workspace for self-moving image (not used) + .word 32 @ Yes, we work in 32bit PC modes. +dstart: .word __data_start + .word 0, 0 @ Unused + nop @ Initialise debugger (NOT!!) + +zeroinit: + ldr r0, dstart + ldr r1, dsize + add r0, r0, r1 + ldr r4, zisize + + @ Zero BSS area + mov r1, #0 +1: str r1, [r0], #4 + subs r4, r4, #4 + bcs 1b + mov pc, lr + + + .ltorg + .org _start + 128 + + @ Size of appended modules diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/dl.c grub2-RISC_OS/kern/arm/dl.c --- grub2-split/kern/arm/dl.c 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/dl.c 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,114 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2005 Free Software Foundation, Inc. + * + * GRUB 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <grub/dl.h> +#include <grub/elf.h> +#include <grub/misc.h> +#include <grub/err.h> + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf32_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2LSB || e->e_machine != EM_ARM) + return grub_error (GRUB_ERR_BAD_MODULE, + "invalid arch specific ELF magic"); + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) +{ + Elf32_Ehdr *e = ehdr; + Elf32_Shdr *s; + Elf32_Sym *symtab; + Elf32_Word entsize; + unsigned i; + + /* Find a symbol table. */ + for (i = 0, s = (Elf32_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; i++, s = (Elf32_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + + if (i == e->e_shnum) + return grub_error (GRUB_ERR_BAD_MODULE, "no symtab found"); + + symtab = (Elf32_Sym *) ((char *) e + s->sh_offset); + entsize = s->sh_entsize; + + for (i = 0, s = (Elf32_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; i++, s = (Elf32_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_REL) + { + grub_dl_segment_t seg; + + /* Find the target segment. */ + for (seg = mod->segment; seg; seg = seg->next) + if (seg->section == s->sh_info) + break; + + if (seg) + { + Elf32_Rel *rel, *max; + + for (rel = (Elf32_Rel *) ((char *) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; rel < max; rel++) + { + Elf32_Word *addr; + Elf32_Sym *sym; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (Elf32_Word *) ((char *) seg->addr + rel->r_offset); + sym = (Elf32_Sym *) ((char *) symtab + + entsize * ELF32_R_SYM (rel->r_info)); + + switch (ELF32_R_TYPE (rel->r_info)) + { + case R_ARM_ABS32: + *addr += sym->st_value; + break; + + case R_ARM_PC24: + *addr = + (*addr & 0xFF000000) | + ((*addr + + ((sym->st_value - + ((Elf32_Word) addr)) >> 2)) & 0x00FFFFFF); + break; + default: + return grub_error (GRUB_ERR_BAD_MODULE, + "unsupported reloc type"); + } + } + } + } + + return GRUB_ERR_NONE; +} diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/RISC_OS/init.c grub2-RISC_OS/kern/arm/RISC_OS/init.c --- grub2-split/kern/arm/RISC_OS/init.c 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/RISC_OS/init.c 2005-11-18 19:00:19.000000000 +0000 @@ -0,0 +1,94 @@ +/* init.c - RISC OS Initialisation */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <grub/kernel.h> +#include <grub/mm.h> +#include <grub/misc.h> +#include <grub/machine/console.h> +#include <grub/env.h> +#include <grub/arm/RISC_OS/misc.h> + +extern const char *grub_RISC_OS_kernel_command_string (void); + +static unsigned grub_arm_linux_sysid; +static const char *grub_machine_type_name; + +extern unsigned grub_arm_machine_serial_number[2]; + + +static inline void +new_init (void) +{ + /* RISC OS version >= 3.5 */ + + if (grub_RISC_OS_dealer + && grub_strcmp (grub_RISC_OS_dealer, "Riscstation") == 0) + { + grub_arm_linux_sysid = 46; + grub_machine_type_name = "RiscStation"; + } + else + { + grub_arm_linux_sysid = 1; + grub_machine_type_name = "RiscPC"; + } + + /* FIXME: Identify Bush Internet TV */ + /* FIXME: Identify Iynoix PC */ + +} + +static inline void +old_init (void) +{ + /* RISC OS version < 3.5 */ + + if (grub_RISC_OS_81C710_present) + { + grub_arm_linux_sysid = 11; + grub_machine_type_name = "A5000"; + } + else + { + grub_arm_linux_sysid = 10; + grub_machine_type_name = "Archimedes"; + } +} + + +void +grub_machine_init () +{ + grub_console_initialise (); + grub_env_set ("prefix", "(host)/<Grub$Dir>"); + + if (grub_RISC_OS_version < 0xA5) + old_init (); + else + new_init (); + + char buf[20]; + + grub_sprintf (buf, "%d", grub_arm_linux_sysid); + grub_env_set ("grub_arm_linux_sysid", buf); + + grub_env_set ("grub_machine_type_name", grub_machine_type_name); + +} diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/RISC_OS/misc.c grub2-RISC_OS/kern/arm/RISC_OS/misc.c --- grub2-split/kern/arm/RISC_OS/misc.c 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/RISC_OS/misc.c 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,110 @@ +/* misc.h - misc RISC OS bits */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005 Free Software Foundation, Inc. + * + * 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; either version 2 of the License or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not write to the Free Software + * Foundation Inc. 675 Mass Ave Cambridge MA 02139 USA. + */ + +#include <grub/arm/RISC_OS/misc.h> +#include <grub/misc.h> +#include <grub/mm.h> + +unsigned grub_RISC_OS_errno; + +grub_err_t +grub_RISC_OS_error_convert (grub_RISC_OS_error_t err, grub_err_t n) +{ + grub_RISC_OS_errno = err->number; + + switch (grub_RISC_OS_errno) + { + case 0xD6: + n = GRUB_ERR_FILE_NOT_FOUND; + break; + case 1052: + n = GRUB_ERR_BAD_FS; + break; + default: + break; + } + grub_dprintf ("error_convert RISC OS = 0x%x GRUB = %d\n", grub_RISC_OS_errno, n) + return grub_error (n, "%s", err->message); +} + +unsigned +grub_RISC_OS_error_convert_zero (struct grub_RISC_OS_error *err, + grub_err_t err2) +{ + grub_RISC_OS_error_convert (err, err2); + return 0; +} + +grub_err_t +grub_RISC_OS_clib_error (grub_err_t err) +{ + return grub_RISC_OS_error_convert (grub_RISC_OS_kernel_last_oserror (), + err); +} + +void * +grub_memalign (grub_size_t align, grub_size_t size) +{ + void **mem = grub_RISC_OS_malloc (size + align + sizeof (void *)); + if (mem == 0) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + return 0; + } + void **result = (void **) grub_align (align, (unsigned) (mem + 1)); + result[-1] = mem; + return result; +} + +void * +grub_malloc (grub_size_t size) +{ + void **result = grub_RISC_OS_malloc (size + sizeof (void *)); + if (result == 0) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + return 0; + } + *result = result; + return result + 1; +} + +void * +grub_realloc (void *ptr, grub_size_t size) +{ + void **ptr2 = ptr; + void **result = + grub_RISC_OS_realloc (ptr2 ? ptr2[-1] : 0, size + sizeof (void *)); + if (result == 0) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory"); + return 0; + } + *result = result; + return result + 1; +} + +void +grub_free (void *ptr) +{ + void **ptr2 = ptr; + if (ptr2) + grub_RISC_OS_free (ptr2[-1]); +} diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/kern/arm/RISC_OS/startup.S grub2-RISC_OS/kern/arm/RISC_OS/startup.S --- grub2-split/kern/arm/RISC_OS/startup.S 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/kern/arm/RISC_OS/startup.S 2005-11-18 16:11:39.000000000 +0000 @@ -0,0 +1,323 @@ +/* startup.S - RISC OS Initialisation*/ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <config.h> +#include <grub/symbol.h> +#include <grub/arm/RISC_OS/swis.h> + + + .bss + VARIABLE(grub_RISC_OS_81C710_present) + .space 4 + VARIABLE(grub_arm_machine_serial_number) + .space 8 + VARIABLE(grub_RISC_OS_version) + .space 4 + VARIABLE(grub_RISC_OS_dealer) + .space 4 + .text + +div0: .word 0 + .asciz "Division by zero" +c_str: .asciz "C" + +load_library: + @ FIXME: Versions? And do we need the floating point emulator? + .asciz "RMEnsure SharedCLibrary 3.75 RMLoad System:Modules.Clib" + .align + + .global grub_arm_startup +grub_arm_startup: + swi X(Hourglass_On) + + adr r0, load_library + swi OS_CLI + + ldr r9, =grub_RISC_OS_81C710_present + mov r0, #129 + mov r1, #0 + mov r2, #255 + swi OS_Byte + str r1, [r9, #12] + cmp r1, #0xA3 + blo 1f @ Avoid RISC OS 2 OS_ReadSysInfo bug + + mov r0, #9 + mov r1, #3 + swi X(OS_ReadSysInfo) + strvc r0, [r9, #16] + + mov r0, #2 + swi X(OS_ReadSysInfo) + stmvcia r9, {r1, r3, r4} + +1: swi OS_GetEnv + mov r2, r1 @ r2 <- End of heap + adr r0, stubs + ldr r1, =_end @ r1 <- Start of heap + mov r3, #-1 @ Docs say so... + movs r4, #0 @ Likewise + mov r5, #-1 @ Likewise + mov r6, #64 << 16 @ 64K stack + teq pc, pc + orreq r6, r6, #1 @ What is this for? (copied from gccsdk) + swi X(SharedCLibrary_LibInitAPCS_32) + bvc 1f @ Branch if no error + + @ If error was "SWI value out of range for module SharedCLibrary" + @ and we are in 26-bit PC mode try APCS R, otherwise raise error. + teq pc, pc + swieq OS_GenerateError + ldr r14, [r0] + ldr r13, =0x800E85 + teq r14, r13 + swine OS_GenerateError + adr r0, stubs + swi SharedCLibrary_LibInitAPCS_R +1: mov r4, r0 + adr r0, kernel_init_block + mov r3, #0 + b grub_RISC_OS_kernel_init + +stubs: .word 1 + .word kernel_vectors + .word kernel_vectors_end + .word kernel_statics + .word kernel_statics_end + .word 2 + .word clib_vectors + .word clib_vectors_end + .word clib_statics + .word clib_statics_end + .word -1 + + .bss +kernel_vectors: + .space 48 * 4 +kernel_vectors_end: +clib_vectors: + .space 183 * 4 +clib_vectors_end: + +kernel_statics: + .space 0x31C +kernel_statics_end: +clib_statics: + .space 0xB48 +clib_statics_end: + + .macro kernel, label, entry + .global grub_RISC_OS_kernel_\label + grub_RISC_OS_kernel_\label = kernel_vectors + \entry * 4 + .endm + + .macro clib, label, entry + .global grub_RISC_OS_\label + grub_RISC_OS_\label = clib_vectors + \entry * 4 + .endm + + kallocExtendsWS = kernel_statics + 0x115 + + .global grub_RISC_OS_clib_errno + grub_RISC_OS_clib_errno = clib_statics + + kernel init, 0 + kernel command_string, 7 + kernel system, 22 + kernel last_oserror, 21 + kernel setenv, 24 + + clib malloc, 68 + clib free, 67 + clib realloc, 69 + clib system, 74 + clib atexit, 71 + clib exit, 72 + clib _clib_initialise, 20 + clib _clib_main, 18 + clib _backtrace, 21 + + clib fopen, 87 + clib fclose, 85 + clib fread, 114 + clib fseek, 117 + clib fwrite, 115 + clib ftell, 119 + + clib TrapHandler, 0 + clib UncaughtTrapHandler, 1 + clib EventHandler, 2 + clib UnhandledEventHandler, 3 + + .text + + + .global system + system = grub_RISC_OS_system + +kernel_init_block: + .word 0x8000, rts_block, rts_block_end + +rts_block: + .word rts_block_end - rts_block + .word 0x8000, 0x7FFFFFFC, c_str, c_init, 0 + .word grub_RISC_OS_TrapHandler + .word grub_RISC_OS_UncaughtTrapHandler + .word grub_RISC_OS_EventHandler + .word grub_RISC_OS_UnhandledEventHandler +rts_block_end: + + + +c_init: str lr, [sp, #-4]! + ldr a1, =kallocExtendsWS + mov a2, #1 + strb a2, [a1] + bl grub_RISC_OS__clib_initialise + adr a1, c_run + teq a1, a1 + teq pc, pc + ldmnefd sp!, {pc}^ + ldr pc, [sp], #4 + +c_run: adr a1, atexit_wrapper + bl grub_RISC_OS_atexit + mov a1, #17 + bl grub_RISC_OS_set_escape_char + bl grub_RISC_OS_kernel_command_string + ldr a2, =grub_main + bl grub_RISC_OS__clib_main +FUNCTION(grub_stop) + mov a1, #0 + b grub_RISC_OS_exit + +atexit_wrapper: + str lr, [sp, #-4]! + bl grub_machine_fini + mov a1, #27 + bl grub_RISC_OS_set_escape_char + swi X(Hourglass_Off) + teq a1, a1 + teq pc, pc + ldmnefd sp!, {pc}^ + ldr pc, [sp], #4 + + .global __div0 +__div0: adr r0, div0 + swi OS_GenerateError + + +FUNCTION(grub_arch_modules_addr) + mov a1, #0x8000 +FUNCTION(grub_mm_init_region) +FUNCTION(grub_machine_fini) + mov pc, lr + +FUNCTION(grub_RISC_OS_set_escape_char) + mov r1, r0 + mov r2, #0 + mov r0, #220 + swi OS_Byte + mov pc, lr + +FUNCTION(grub_get_rtc) + swi OS_ReadMonotonicTime + mov pc, lr + + + .global __clear_cache +__clear_cache: + stmfd sp!, {r0-r2, lr} + mov r2, r1 + mov r1, r0 + mov r0, #1 + swi X(OS_SynchroniseCodeAreas) + ldmfd sp!, {r0-r2, pc}^ + +FUNCTION(grub_arch_sync_caches) + add r2, r1, r0 + mov r1, r0 + mov r0, #0 + swi X(OS_SynchroniseCodeAreas) + mov pc, lr + +rc5pc_off: + .asciz "%rc5pc off" + .align + +FUNCTION(grub_reboot) + adr r0, rc5pc_off + swi X(OS_CLI) + swi OS_EnterOS + mov r0, #23 @ Unmount filesystems + swi OS_FSControl + swi X(OS_Reset) +1: bvc 1b + ldr r1, [r0] + eor r1, r1, #ERROR_NO_SUCH_SWI & 0xff00 + teq r1, #ERROR_NO_SUCH_SWI & 0x00ff + swine OS_GenerateError + + @ If above call failed, we are running on an Archimedies. + mov r0, #200 + mov r1, #2 + swi OS_Byte @ Set Full Reset + teqp pc, #0x08000003 @ SVC Mode with IRQ disabled. + mov r1, #Service_PreReset + swi X(OS_ServiceCall) +1: bvs 1b + teqp pc, #0x0C000003 @ SVC Mode with interrupts disabled. + + @ Copy word from start of ROM to address 0, then execute it. + mov r0, #0x03800000 + ldr r1, [r0] + str r1, [r0, -r0] + mov pc, #0 + + +FUNCTION(grub_RISC_OS_get_swi_number) + mov r1, a1 + swi X(OS_SWINumberFromString) + movvs a1, #0 + mov pc, lr + +FUNCTION(grub_RISC_OS_save_file) + mov r5, r3 + mov r4, r2 + mov r2, r1 + mov r1, r0 + mov r0, #10 + swi OS_File + mov pc, lr + +FUNCTION(grub_RISC_OS_CLI) + @ May be called in SVC mode. + mov ip, lr + swi X(OS_CLI) + mov pc, ip + + .data +VARIABLE(grub_end_addr) + .word _end + + .bss +VARIABLE(grub_total_module_size) + .space 4 + diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/Makefile.in grub2-RISC_OS/Makefile.in --- grub2-split/Makefile.in 2005-11-17 19:12:30.000000000 +0000 +++ grub2-RISC_OS/Makefile.in 2005-11-18 15:46:37.000000000 +0000 @@ -72,7 +72,7 @@ LIBLZO = @LIBLZO@ ### General variables. RMKFILES = $(addprefix conf/,common.rmk i386-pc.rmk powerpc-ieee1275.rmk \ - sparc64-ieee1275.rmk) + sparc64-ieee1275.rmk arm-RISC_OS.rmk) MKFILES = $(patsubst %.rmk,%.mk,$(RMKFILES)) DATA = $(pkgdata_IMAGES) $(pkgdata_MODULES) $(pkgdata_PROGRAMS) \ diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/normal/arm/setjmp.S grub2-RISC_OS/normal/arm/setjmp.S --- grub2-split/normal/arm/setjmp.S 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/normal/arm/setjmp.S 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,33 @@ +/* setjmp.S - setjmp and longjmp */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * aword with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <config.h> +#include <grub/symbol.h> + +FUNCTION(grub_setjmp) + stmia a1, {v1-v6, sl, fp, sp, lr} + mov a1, #0 + mov pc, lr + +FUNCTION(grub_longjmp) + ldmia a1, {v1-v6, sl, fp, sp, lr} + movs a1, a2 + moveq a1, #1 + mov pc, lr diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/term/arm/RISC_OS/console-asm.S grub2-RISC_OS/term/arm/RISC_OS/console-asm.S --- grub2-split/term/arm/RISC_OS/console-asm.S 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/term/arm/RISC_OS/console-asm.S 2005-11-18 15:26:26.000000000 +0000 @@ -0,0 +1,84 @@ +/* console-asm.S - RISC OS Console */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004 Timothy Baldwin. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <config.h> +#include <grub/symbol.h> +#include <grub/arm/RISC_OS/swis.h> + + .align + +FUNCTION(grub_console_real_putchar) + swi OS_WriteC + mov pc, lr + +FUNCTION(grub_console_getxy) + mov r0, #165 + swi OS_Byte + orr r0, r2, r1, lsl #8 + mov pc, lr + +FUNCTION(grub_console_getkey) + swi X(Hourglass_Smash) + swi OS_ReadC + mov r1, r0 + swi X(Hourglass_On) + mov r0, r1 + b grub_console_convert + +FUNCTION(grub_console_checkkey) + swi X(Hourglass_Smash) + mov r0, #129 @ Read key with time limit + mov r1, #0 @ Timeout low byte + mov r2, #0 @ Timeout high byte ( < 0x80 ) + swi OS_Byte + teq r2, #0 @ r2 = 0 if key read + movne r1, #-1 @ r1 = key if read + swi X(Hourglass_On) + mov r0, r1 + b grub_console_convert + +FUNCTION(grub_console_get_and_set_cursor_key_state) + mov r1, a1 + mov r0, #4 + swi OS_Byte + mov a1, r1 + mov pc, lr + +FUNCTION(grub_console_in_taskwindow) + mov r0, #0 + swi X(TaskWindow_TaskInfo) + movvs r0, #0 + mov pc, lr + +FUNCTION(grub_console_getwh) + sub sp, sp, #20 + adr r0, vdu_variables + mov r1, sp + swi OS_ReadVduVariables + ldmia sp!, {a1-a4, ip} + sub a1, a3, a1 @ width = right - left + add a1, a1, #1 @ + 1 + sub a2, a2, a4 @ height = bottom - top + add a2, a2, #1 @ + 1 + orr a1, a2, a1, lsl #8 @ result = (width << 8) | height + mov pc, lr + +vdu_variables: + .word 0x84, 0x85, 0x86, 0x87, -1 diff -purN -x '*.mk' -x '*~' -x autom4te.cache -x configure -x '.#*' -x '*.orig' -x '*.rej' -x CVS grub2-split/term/arm/RISC_OS/console.c grub2-RISC_OS/term/arm/RISC_OS/console.c --- grub2-split/term/arm/RISC_OS/console.c 1970-01-01 01:00:00.000000000 +0100 +++ grub2-RISC_OS/term/arm/RISC_OS/console.c 2005-11-18 18:54:08.000000000 +0000 @@ -0,0 +1,190 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003 Free Software Foundation, Inc. + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <grub/arm/RISC_OS/console.h> +#include <grub/term.h> +#include <grub/types.h> + + +static void +grub_console_putchar (grub_uint32_t c) +{ + /* Map some unicode characters to the RISC OS font, if possible. */ + switch (c) + { + case 0x2190: /* left arrow */ + c = 0x1b; + break; + case 0x2191: /* up arrow */ + c = 0x18; + break; + case 0x2192: /* right arrow */ + c = 0x1a; + break; + case 0x2193: /* down arrow */ + c = 0x19; + break; + case 0x2501: /* horizontal line */ + c = '-'; + break; + case 0x2503: /* vertical line */ + c = '|'; + break; + case 0x250F: /* upper-left corner */ + c = '+'; + break; + case 0x2513: /* upper-right corner */ + c = '+'; + break; + case 0x2517: /* lower-left corner */ + c = '+'; + break; + case 0x251B: /* lower-right corner */ + c = '+'; + break; + + default: + //c = '?'; + break; + + } + if (c > 0x100) + c = '?'; + + grub_console_real_putchar (c); +} + +static void +grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y) +{ + grub_console_real_putchar (31); + grub_console_real_putchar (x); + grub_console_real_putchar (y); +} + +static void +grub_console_cls (void) +{ + grub_console_real_putchar (12); +} + +static void +nulls (void) +{ + for (int i = 8; i != 0; --i) + { + grub_console_real_putchar (0); + } +} + +static void +grub_console_setcursor (int on) +{ + grub_console_real_putchar (23); + grub_console_real_putchar (1); + grub_console_real_putchar (on); + nulls (); +} + +static grub_term_color_state colourstate; + +static void +grub_console_setcolourstate (grub_term_color_state state) +{ + state &= 2; + if (colourstate == state) + return; + colourstate = state; + grub_console_real_putchar (23); + grub_console_real_putchar (17); + grub_console_real_putchar (5); + nulls (); +} + +static int old_cursor_key_state; + +static grub_err_t +grub_console_init (void) +{ + old_cursor_key_state = grub_console_get_and_set_cursor_key_state (1); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_console_fini (void) +{ + grub_console_get_and_set_cursor_key_state (old_cursor_key_state); + return GRUB_ERR_NONE; +} + +int +grub_console_convert (int c) +{ + switch (c) + { + case 136: + c = 2; + break; + case 137: + c = 6; + break; + case 138: + c = 14; + break; + case 139: + c = 16; + break; + } + return c; +} + +static grub_ssize_t +grub_console_getcharwidth (grub_uint32_t c) +{ + (void) c; + return 1; +} + +static struct grub_term grub_console_term = { + .name = "console", + .init = grub_console_init, + .fini = grub_console_fini, + .putchar = grub_console_putchar, + .checkkey = grub_console_checkkey, + .getkey = grub_console_getkey, + .getwh = grub_console_getwh, + .getxy = grub_console_getxy, + .gotoxy = grub_console_gotoxy, + .cls = grub_console_cls, + .setcolorstate = grub_console_setcolourstate, + .setcolor = 0, + .setcursor = grub_console_setcursor, + .flags = 0, + .next = 0, + .getcharwidth = grub_console_getcharwidth, +}; + +void +grub_console_initialise (void) +{ + if (grub_console_in_taskwindow ()) + grub_console_term.flags = GRUB_TERM_DUMB; + grub_term_register (&grub_console_term); + grub_term_set_current (&grub_console_term); +}
pgpVRD5BQw9sp.pgp
Description: PGP signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel