diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/Makefile linux-2.0.29/Makefile
--- linux.vanilla/Makefile      Sat Feb  8 18:54:36 1997
+++ linux-2.0.29/Makefile       Thu Mar 20 20:12:47 1997
@@ -29,7 +29,7 @@
HOSTCC         =gcc -I$(HPATH)
HOSTCFLAGS     =-O2 -fomit-frame-pointer

-CROSS_COMPILE  =
+CROSS_COMPILE  = m68k-linux-

AS     =$(CROSS_COMPILE)as
LD     =$(CROSS_COMPILE)ld
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/Makefile linux-2.0.29/arch/m68k/Makefile
--- linux.vanilla/arch/m68k/Makefile    Sat Oct 19 12:33:13 1996
+++ linux-2.0.29/arch/m68k/Makefile     Fri Mar 21 12:12:58 1997
@@ -28,7 +28,7 @@
LD += -m m68klinux
ifneq ($(COMPILE_ARCH),$(ARCH))
       # prefix for cross-compiling binaries
-       CROSS_COMPILE = m68k-linuxaout-
+       CROSS_COMPILE = m68k-linux-
endif
endif

@@ -45,7 +45,11 @@
ifdef CONFIG_KERNEL_ELF
LINKFLAGS = -Ttext 0x1000
else
+ifdef CONFIG_MAC
+LINKFLAGS = -omagic -e __start
+else
LINKFLAGS = -qmagic -Ttext 0xFE0
+endif
endif

CFLAGS := $(CFLAGS) -pipe
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/console/fbcon.c linux-2.0.29/arch/m68k/console/fbcon.c
--- linux.vanilla/arch/m68k/console/fbcon.c     Sat Oct  5 14:23:56 1996
+++ linux-2.0.29/arch/m68k/console/fbcon.c      Mon Mar 24 14:29:50 1997
@@ -24,6 +24,7 @@
 *          with work by Guenther Kelleter
 *                       Martin Schaller
 *                       Andreas Schwab
+ *                      Alan Cox
 *
 *
 * This file is subject to the terms and conditions of the GNU General Public
@@ -68,6 +69,8 @@

#include <asm/system.h>

+#include <asm/setup.h> /*AC DEBUG */
+
#include "../../../drivers/char/vt_kern.h"   /* vt_cons and vc_resize_con() */


@@ -89,6 +92,7 @@
#undef CONFIG_FBCON_2PLANE
#undef CONFIG_FBCON_4PLANE
#undef CONFIG_FBCON_8PLANE
+#undef CONFIG_FBCON_4PACKED
#undef CONFIG_FBCON_8PACKED
#undef CONFIG_FBCON_16PACKED
#undef CONFIG_FBCON_24PACKED
@@ -100,6 +104,20 @@

#define CONFIG_FBCON_MONO

+/* Mac support */
+
+#ifdef CONFIG_MAC
+#ifndef CONFIG_FBCON_4PACKED
+#define CONFIG_FBCON_4PACKED
+#endif
+#ifndef CONFIG_FBCON_8PACKED
+#define CONFIG_FBCON_8PACKED
+#endif
+#ifndef CONFIG_FBCON_16PACKED
+#define CONFIG_FBCON_16PACKED
+#endif
+#endif
+
/* Amiga support */

#ifdef CONFIG_AMIGA
@@ -159,8 +177,8 @@
#endif


-struct fb_info *fb_info;
-struct display *disp;
+static struct fb_info *fb_info;
+static struct display *disp;


/* ++Geert: Sorry, no hardware cursor support at the moment;
@@ -223,7 +241,7 @@
    *    Interface used by the world
    */

-static u_long fbcon_startup(u_long kmem_start, char **display_desc);
+/*static */u_long fbcon_startup(u_long kmem_start, char **display_desc);
static void fbcon_init(struct vc_data *conp);
static int fbcon_deinit(struct vc_data *conp);
static int fbcon_changevar(int con);
@@ -378,6 +396,23 @@


   /*
+    *    4bpp packed pixels (eg the MAC toby board)
+    */
+
+#ifdef CONFIG_FBCON_4PACKED
+static void bmove_4_packed(struct display *p, int sy, int sx, int dy, int dx,
+                       int height, int width);
+static void clear_4_packed(struct vc_data *conp, struct display *p, int sy, int sx,
+                       int height, int width);
+static void putc_4_packed(struct vc_data *conp, struct display *p, int c, int y,
+                      int x);
+static void putcs_4_packed(struct vc_data *conp, struct display *p, const char *s,
+                       int count, int y, int x);
+static void rev_char_4_packed(struct display *p, int x, int y);
+#endif /* CONFIG_FBCON_4PACKED */
+
+
+   /*
    *    8 bpp Packed Pixels
    */

@@ -454,70 +489,76 @@


#ifdef CONFIG_FBCON_MONO
-struct display_switch dispsw_mono = {
+static struct display_switch dispsw_mono = {
   bmove_mono, clear_mono, putc_mono, putcs_mono, rev_char_mono
};
#endif /* CONFIG_FBCON_MONO */

#ifdef CONFIG_FBCON_ILBM
-struct display_switch dispsw_ilbm = {
+static struct display_switch dispsw_ilbm = {
   bmove_ilbm, clear_ilbm, putc_ilbm, putcs_ilbm, rev_char_ilbm
};
#endif /* CONFIG_FBCON_ILBM */

#ifdef CONFIG_FBCON_PLANES
-struct display_switch dispsw_plan = {
+static struct display_switch dispsw_plan = {
   bmove_plan, clear_plan, putc_plan, putcs_plan, rev_char_plan
};
#endif /* CONFIG_FBCON_PLANES */

#ifdef CONFIG_FBCON_2PLANE
-struct display_switch dispsw_2_plane = {
+static struct display_switch dispsw_2_plane = {
   bmove_2_plane, clear_2_plane, putc_2_plane, putcs_2_plane, rev_char_2_plane
};
#endif /* CONFIG_FBCON_2PLANE */

#ifdef CONFIG_FBCON_4PLANE
-struct display_switch dispsw_4_plane = {
+static struct display_switch dispsw_4_plane = {
   bmove_4_plane, clear_4_plane, putc_4_plane, putcs_4_plane, rev_char_4_plane
};
#endif /* CONFIG_FBCON_4PLANE */

#ifdef CONFIG_FBCON_8PLANE
-struct display_switch dispsw_8_plane = {
+static struct display_switch dispsw_8_plane = {
   bmove_8_plane, clear_8_plane, putc_8_plane, putcs_8_plane, rev_char_8_plane
};
#endif /* CONFIG_FBCON_8PLANE */

+#ifdef CONFIG_FBCON_4PACKED
+static struct display_switch dispsw_4_packed = {
+   bmove_4_packed, clear_4_packed, putc_4_packed, putcs_4_packed, rev_char_4_packed
+};
+#endif /* CONFIG_FBCON_4PACKED */
+
#ifdef CONFIG_FBCON_8PACKED
-struct display_switch dispsw_8_packed = {
+static struct display_switch dispsw_8_packed = {
   bmove_8_packed, clear_8_packed, putc_8_packed, putcs_8_packed, rev_char_8_packed
};
#endif /* CONFIG_FBCON_8PACKED */

#ifdef CONFIG_FBCON_16PACKED
-struct display_switch dispsw_16_packed = {
+static struct display_switch dispsw_16_packed = {
   bmove_16_packed, clear_16_packed, putc_16_packed, putcs_16_packed,
   rev_char_16_packed
};
#endif /* CONFIG_FBCON_16PACKED */

#ifdef CONFIG_FBCON_CYBER
-struct display_switch dispsw_cyber = {
+static struct display_switch dispsw_cyber = {
   bmove_cyber, clear_cyber, putc_cyber, putcs_cyber, rev_char_cyber
};
#endif /* CONFIG_FBCON_CYBER */


-static u_long fbcon_startup(u_long kmem_start, char **display_desc)
+/* static */u_long fbcon_startup(u_long kmem_start, char **display_desc)
{
   int irqres = 0;
-
+
   fb_info = mach_fb_init(&kmem_start);
   disp = fb_info->disp;
   *display_desc = fb_info->modename;
   fb_info->changevar = &fbcon_changevar;
-
+
#ifdef CONFIG_AMIGA
   if (MACH_IS_AMIGA) {
      cursor_blink_rate = AMIGA_CURSOR_BLINK_RATE;
@@ -664,6 +705,11 @@
         p->dispsw = &dispsw_cyber;
      else
#endif /* CONFIG_FBCON_CYBER */
+#ifdef CONFIG_FBCON_4PACKED
+      if (p->var.bits_per_pixel == 4)
+         p->dispsw = &dispsw_4_packed;
+      else
+#endif /* CONFIG_FBCON_8PACKED */
#ifdef CONFIG_FBCON_8PACKED
      if (p->var.bits_per_pixel == 8)
         p->dispsw = &dispsw_8_packed;
@@ -1475,6 +1521,10 @@
   int unit = conp->vc_num;
   struct display *p = &disp[unit];

+   /* Avoid flickering if there's no real change. */
+   if (p->cursor_x == conp->vc_x && p->cursor_y == conp->vc_y &&
+       (mode == CM_ERASE) == !cursor_on)
+      return 0;
   if (CURSOR_UNDRAWN ())
      p->dispsw->rev_char(p, p->cursor_x, real_y(p, p->cursor_y));
   p->cursor_x = conp->vc_x;
@@ -1861,7 +1911,7 @@
 *      - Color Interleaved Planes � la Amiga
 *      - Color Normal Planes
 *      - Color Interleaved Planes � la Atari (2, 4 and 8 planes)
- *      - Color Packed Pixels (8 and 16 bpp)
+ *      - Color Packed Pixels (4, 8 and 16 bpp)
 *      - Cybervision Color Packed Pixels (accelerated)
 */

@@ -3292,6 +3342,170 @@

/* ====================================================================== */

+#ifdef CONFIG_FBCON_4PACKED
+
+   /*
+    *    4 bpp Packed Pixels:
+    *          IFF the font is even pixel aligned (that is to say each
+    *          character start is a byte start in the pixel pairs). That
+    *          avoids us having to mask bytes and means we won't be here
+    *          all week. On a MacII that matters _lots_
+    */
+
+static u_short nibbletab_4_packed[]={
+0x0000,0x000f,0x00f0,0x00ff,
+0x0f00,0x0f0f,0x0ff0,0x0fff,
+0xf000,0xf00f,0xf0f0,0xf0ff,
+0xff00,0xff0f,0xfff0,0xffff};
+
+static void bmove_4_packed(struct display *p, int sy, int sx, int dy, int dx,
+                           int height, int width)
+{
+       int bytes = p->next_line, linesize = bytes * p->fontheight, rows;
+       u_char *src,*dst;
+
+       if (sx == 0 && dx == 0 && width * 4 == bytes) {
+               mymemmove(p->screen_base + dy * linesize,
+                         p->screen_base + sy * linesize,
+                         height * linesize);
+       }
+       else {
+               if (dy < sy || (dy == sy && dx < sx)) {
+                       src = p->screen_base + sy * linesize + sx * 4;
+                       dst = p->screen_base + dy * linesize + dx * 4;
+                       for (rows = height * p->fontheight ; rows-- ;) {
+                               mymemmove(dst, src, width * 4);
+                               src += bytes;
+                               dst += bytes;
+                       }
+               }
+               else {
+                       src = p->screen_base + (sy+height) * linesize + sx * 4
+                               - bytes;
+                       dst = p->screen_base + (dy+height) * linesize + dx * 4
+                               - bytes;
+                       for (rows = height * p->fontheight ; rows-- ;) {
+                               mymemmove(dst, src, width * 4);
+                               src -= bytes;
+                               dst -= bytes;
+                       }
+               }
+       }
+}
+
+
+static void clear_4_packed(struct vc_data *conp, struct display *p, int sy,
+                           int sx, int height, int width)
+{
+       u_char *dest0,*dest;
+       int bytes=p->next_line,lines=height * p->fontheight, rows, i;
+       u_long bgx;
+
+       if(p->screen_base!=0xFDD00020)
+               mac_boom(1);
+       dest = p->screen_base + sy * p->fontheight * bytes + sx * 4;
+
+       bgx=attr_bgcol_ec(p,conp);
+       bgx |= (bgx << 4);      /* expand the colour to 32bits */
+       bgx |= (bgx << 8);
+       bgx |= (bgx << 16);
+
+       if (sx == 0 && width * 4 == bytes) {
+               for (i = 0 ; i < lines * width ; i++) {
+                       ((u_long *)dest)[0]=bgx;
+                       dest+=4;
+               }
+       } else {
+               dest0=dest;
+               for (rows = lines; rows-- ; dest0 += bytes) {
+                       dest=dest0;
+                       for (i = 0 ; i < width ; i++) {
+                               /* memset ?? */
+                               ((u_long *)dest)[0]=bgx;
+                               dest+=4;
+                       }
+               }
+       }
+}
+
+
+static void putc_4_packed(struct vc_data *conp, struct display *p, int c, int y,
+                          int x)
+{
+       u_char *dest,*cdat;
+       int bytes=p->next_line,rows;
+       ulong eorx,fgx,bgx;
+
+       c &= 0xff;
+
+       dest = p->screen_base + y * p->fontheight * bytes + x * 4;
+       cdat = p->fontdata + c * p->fontheight;
+
+       fgx=15;/*attr_fgcol(p,conp)&0x0F;*/
+       bgx=attr_bgcol(p,conp)&0x0F;
+       fgx |= (fgx << 4);
+       fgx |= (fgx << 8);
+       bgx |= (bgx << 4);
+       bgx |= (bgx << 8);
+       eorx = fgx ^ bgx;
+
+       for (rows = p->fontheight ; rows-- ; dest += bytes) {
+               ((u_short *)dest)[0]=
+                       (nibbletab_4_packed[*cdat >> 4] & eorx) ^ bgx;
+               ((u_short *)dest)[1]=
+                       (nibbletab_4_packed[*cdat++ & 0xf] & eorx) ^ bgx;
+       }
+}
+
+
+static void putcs_4_packed(struct vc_data *conp, struct display *p,
+                           const char *s, int count, int y, int x)
+{
+       u_char *cdat, c, *dest, *dest0;
+       int rows,bytes=p->next_line;
+       u_long eorx, fgx, bgx;
+
+       dest0 = p->screen_base + y * p->fontheight * bytes + x * 4;
+       fgx=15/*attr_fgcol(p,conp)*/;
+       bgx=attr_bgcol(p,conp);
+       fgx |= (fgx << 4);
+       fgx |= (fgx << 8);
+       fgx |= (fgx << 16);
+       bgx |= (bgx << 4);
+       bgx |= (bgx << 8);
+       bgx |= (bgx << 16);
+       eorx = fgx ^ bgx;
+       while (count--) {
+               c = *s++;
+               cdat = p->fontdata + c * p->fontheight;
+
+               for (rows = p->fontheight, dest = dest0; rows-- ; dest += bytes) {
+                       ((u_short *)dest)[0]=
+                       (nibbletab_4_packed[*cdat >> 4] & eorx) ^ bgx;
+                       ((u_short *)dest)[1]=
+                       (nibbletab_4_packed[*cdat++ & 0xf] & eorx) ^ bgx;
+               }
+               dest0+=4;
+       }
+}
+
+
+static void rev_char_4_packed(struct display *p, int x, int y)
+{
+       u_char *dest;
+       int bytes=p->next_line, rows;
+
+       dest = p->screen_base + y * p->fontheight * bytes + x * 4;
+       for (rows = p->fontheight ; rows-- ; dest += bytes) {
+               ((u_long *)dest)[0] ^= 0x0f0f0f0f;
+       }
+}
+
+#endif /* CONFIG_FBCON_4PACKED */
+
+/* ====================================================================== */
+
+
#ifdef CONFIG_FBCON_8PACKED

   /*
@@ -3766,8 +3980,13 @@
    *    The console `switch' structure for the frame buffer based console
    */

+unsigned long precookie=0x0DEC0DED;
+
struct consw fb_con = {
   fbcon_startup, fbcon_init, fbcon_deinit, fbcon_clear, fbcon_putc,
   fbcon_putcs, fbcon_cursor, fbcon_scroll, fbcon_bmove, fbcon_switch,
   fbcon_blank, fbcon_get_font, fbcon_set_font
};
+
+unsigned long postcookie=0xC0DEBA5E;
+
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/kernel/console.c linux-2.0.29/arch/m68k/kernel/console.c
--- linux.vanilla/arch/m68k/kernel/console.c    Sat Oct  5 14:24:06 1996
+++ linux-2.0.29/arch/m68k/kernel/console.c     Mon Mar 24 11:16:58 1997
@@ -123,6 +123,8 @@
#include <asm/system.h>
#include <asm/bitops.h>

+#include <asm/setup.h>
+
#include "../../../drivers/char/kbd_kern.h"
#include "../../../drivers/char/vt_kern.h"
#include "../../../drivers/char/consolemap.h"
@@ -2215,11 +2217,12 @@
       console_driver.throttle = con_throttle;
       console_driver.unthrottle = con_unthrottle;

+
       if (tty_register_driver(&console_driver))
               panic("Couldn't register console driver\n");

       kmem_start = conswitchp->con_startup (kmem_start, &display_desc);
-
+
       timer_table[BLANK_TIMER].fn = blank_screen;
       timer_table[BLANK_TIMER].expires = 0;
       if (blankinterval) {
@@ -2252,6 +2255,8 @@

       gotoxy(currcons,0,0);
       csi_J(currcons, 0);
+       mac_debugging_penguin(3);
+
       printable = 1;
       update_screen(fg_console);
       sw->con_cursor(vc_cons[currcons].d, CM_DRAW);
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/kernel/head.S linux-2.0.29/arch/m68k/kernel/head.S
--- linux.vanilla/arch/m68k/kernel/head.S       Sat Oct  5 14:24:07 1996
+++ linux-2.0.29/arch/m68k/kernel/head.S        Tue Mar 25 16:12:41 1997
@@ -143,13 +143,20 @@

#define is_not_amiga(lab) moveq &MACH_AMIGA,%d7; cmpl %d4,%d7; jne lab
#define is_not_atari(lab) moveq &MACH_ATARI,%d7; cmpl %d4,%d7; jne lab
+#define is_not_mac(lab) moveq &MACH_MAC,%d7; cmpl %d4,%d7; jne lab

#define is_040_or_060(lab) btst &D6B_0460,%d6; jne lab
#define is_not_040_or_060(lab) btst &D6B_0460,%d6; jeq lab
#define is_060(lab) btst &D6B_060,%d6; jne lab
#define is_not_060(lab) btst &D6B_060,%d6; jeq lab

+#define CONFIG_MAC
+
.text
+#ifdef CONFIG_MAC
+ENTRY(_true_stext)
+.equ   .,SYMBOL_NAME(_true_stext)+PAGESIZE
+#endif
ENTRY(_stext)
/*
 * Version numbers of the bootinfo interface
@@ -172,6 +179,69 @@

ENTRY(_start)

+
+#ifdef CONFIG_MAC
+#      lea     _fb_con,%a0
+#      movel   #_fbcon_startup,a0@
+
+       /*
+        *      Yes this isnt the clean way to do it. I need to revise
+        *      my 68k asm.
+        */
+       movel   %d5,%a0
+       movel   %a4, %d1
+       andl    #0xFFFF,%d1     /* rows */
+loopy:
+       movel   %a3, %d0
+loopx:
+       moveb   #0x55, %a0@+
+       dbra    %d0,loopx
+       dbra    %d1,loopy
+       /*
+        *      Check we have top of video right
+        */
+       movel   %a3,%d0
+       movel   %d5,%a0
+       addl    %d0,%d0
+       addl    %d0,%d0
+       addl    %d0,%d0
+       addl    %d0,%d0
+loopw:
+       moveb   #00, %a0@+
+       dbra    %d0,loopw
+
+       /*
+        *      Save the boot info
+        */
+       lea     %pc@(SYMBOL_NAME(boot_info)),%a0
+       movel   #MACH_MAC,%a0@(BI_machtype)
+       movel   %sp@-, %d0
+       movel   %d0, %a0@(BI_args)
+       movel   %d4,%d0
+       andl    #3,%d0
+       movel   #33,%d0 /* 68020+FPU hardcode */
+       movel   %d0, %a0@(BI_cputype)
+       movel   %a4, %a0@(BI_dimensions)
+       movel   %d5, %a0@(BI_videoaddr)
+       movel   %a3, %a0@(BI_videorow)
+       movel   %a2, %a0@(BI_videodepth)
+       lea     %pc@(SYMBOL_NAME(_stext):w),%sp
+       movel   #0, %a0@(BI_memory+MI_addr)
+       movel   #5242880, %a0@(BI_memory+MI_size)
+       jbsr Lserial_init
+
+
+       putr()
+       putc('L')
+       putc('i')
+       putc('n')
+       putc('u')
+       putc('x')
+       putc('.')
+       putr()
+
+
+#else
/*
 * Setup initial stack pointer
 */
@@ -187,6 +257,8 @@
1:     moveb   %a0@+,%a1@+
       dbra    %d0,1b

+#endif
+
/*
 * Record the CPU and machine type.
 */
@@ -206,6 +278,7 @@
       jra     2f
1:     /* '020 or '030: d6 := no CPU bit, cache mode unused */
       moveq   #0,%d6
+       movel   %d6, 0xFD008020 /* ac check */

2:     lea     %pc@(SYMBOL_NAME(m68k_pgtable_cachemode)),%a0
       moveq   #0,%d0
@@ -248,8 +321,7 @@
/*
 * Save physical start address of kernel
 */
-       lea     %pc@(SYMBOL_NAME(_stext)-PAGESIZE:w),%a0
-       movel   %a0,%d5
+       movel   #0,%d5
#ifdef HACKER_KERNEL
       lea     %pc@(Lkernel_start),%a0
       movel   %d5,%a0@
@@ -275,6 +347,7 @@

       putc('C')

+
/*
 * Initialize the pointer tables referred to above.  They either point
 * to page tables in the case of the 680[46]0 or contain early
@@ -405,6 +478,7 @@
       putc('I')

       moveq   #_PAGE_NOCACHE030+_PAGE_PRESENT,%d0
+       orl     #0x80000000, %d0
       movel   %d0,%a5@(0x40<<2)

       jra     Lmapphys
@@ -474,6 +548,119 @@
Lnotami:
#endif

+#ifdef CONFIG_MAC
+       is_not_mac(Lnotmac)
+
+/*
+ * Setup a mapping of the 0xFC range for 32M of physical address space
+ * at virtual address 0xFC000000, using early termination page descriptors
+ * for the 68030, and proper page tables for the 680[46]0.  Set this area
+ * as non-cacheable. (040/060 one still wrong XXX)
+ */
+
+       putc('H')
+
+       is_040_or_060(Lspmac68040)
+
+       /*
+        * for the 68030, just setup a translation to map in the
+        * 32M of physical address space at virtual address 0x80000000
+         * using an early termination page descriptor.
+        */
+
+       putc('I')
+
+       /*
+        *      Nubus space
+        */
+
+       moveq   #_PAGE_NOCACHE030+_PAGE_PRESENT,%d0
+       orl     #0xFC000000,%d0
+       movel   %d0,%a5@(0x7E<<2)
+
+       /*
+        *      IO space identity at 0x50-> for now
+        */
+
+       moveq   #_PAGE_NOCACHE030+_PAGE_PRESENT,%d0
+       orl     #0x50000000,%d0
+       movel   %d0,%a5@(0x28<<2)
+
+       /*
+        *      MAC onboard video
+        */
+
+       moveq   #_PAGE_NOCACHE030+_PAGE_PRESENT,%d0
+       orl     #0x60000000,%d0
+       movel   %d0,%a5@(0x30<<2)
+
+       jra     Lmapphys
+
+Lspmac68040:
+
+       /*
+        * for the 680[46]0, use another pointer table, and allocate 4 more
+        * page tables.  Initialize the pointer table to point to the
+        * page tables.  Then initialize the page tables to point to
+        * the first 16M of memory, with no caching (noncachable/serialized).
+        */
+
+       /* clear the mac pointer table */
+       lea     %a4@(PTR_TABLE_SIZE<<2),%a4
+       moveq   #PTR_TABLE_SIZE-1,%d1
+1:     clrl    %a0@+
+       dbra    %d1,1b
+
+       /* allocate 4 pages for 64 page tables */
+       movel   %a6,%a3
+       addw    #4*PAGESIZE,%a6
+
+       /* initialize the pointer table */
+       movel   %a4,%a0
+       movel   %a3,%a1
+       addql   #_PAGE_TABLE,%a1        /* base descriptor */
+       movel   #PAGE_TABLE_SIZE<<2,%d2 /* increment */
+       moveq   #TABLENR_16MB-1,%d1
+
+1:     movel   %a1,%a0@+
+       addl    %d2,%a1
+       dbra    %d1,1b
+
+       /* ensure that the root table points to the pointer table */
+       movel   %a4,%a0
+       addql   #_PAGE_TABLE,%a0
+       movel   %a0,%a5@(0x40<<2)
+
+       /*
+        * initialize the page tables
+        * descriptor bits include noncachable/serialized and global bits.
+        */
+       movel   %a3,%a0
+       movew   #_PAGE_GLOBAL040+_PAGE_NOCACHE_S+_PAGE_PRESENT,%a1
+       movel   #PAGESIZE,%d2
+       movew   #(PAGE_TABLE_SIZE*TABLENR_16MB)-1,%d1
+
+1:     movel   %a1,%a0@+
+       addl    %d2,%a1
+       dbra    %d1,1b
+
+       /*
+        * Finally, since we just allocated 4 page tables, make sure that
+        * the virtual mapping of the 4 page tables indicates
+        * noncachable/serialized.
+        */
+       moveq   #3,%d0
+1:     movel   %a2@,%d1        /* a2 already points to root table offset */
+       andw    #_CACHEMASK040,%d1
+       orw     %d6,%d1
+       movel   %d1,%a2@+
+       dbra    %d0,1b
+
+       jra     Lmapphys
+
+Lnotmac:
+#endif
+
#ifdef CONFIG_ATARI
       is_not_atari(Lnotatari)

@@ -591,6 +778,7 @@
 * an Amiga since the first 16M is already identity mapped on the Amiga.
 */
Lmapphys:
+
       putc('J')

#ifdef CONFIG_AMIGA
@@ -680,6 +868,7 @@
Lmapphysnotamiga:
#endif

+
#ifdef CONFIG_ATARI
       is_not_atari(Lmapphysnotatari)

@@ -773,14 +962,64 @@
Lmapphysnotatari:
#endif

+#ifdef CONFIG_MAC
+       is_not_mac(Lmapphysnotmac)
+
+       putc('L')
+
+       is_040_or_060(Lmacmmu68040)
+
+       lea     %pc@(Lmmu),%a3
+       movel   %d5,%d0
+       /* We always follow this path as the kernel is at 0x0000 after
+          the MacBoot has finished */
+       lea     LdoneMMUenable:w,%a0
+       movel   #0x80000002,%a3@
+       movel   %a5,%a3@(4)
+       .long   0xf0134800      /* pmove %a3@,%srp */
+       .long   0xf0134c00      /* pmove %a3@,%crp */
+       .long   0xf0002400      /* pflusha */
+       /*
+        * enable,super root enable,4096 byte pages,7 bit root index,
+        * 7 bit pointer index, 6 bit page table index.
+        */
+       movel   #0x82c07760,%a3@
+       .long   0xf0134000      /* pmove %a3@,%tc (enable the MMU) */
+       jmp     %a0@
+
+Lmacmmu68040:
+       movel   %d5,%d0
+       lea     LdoneMMUenable:w,%a0
+       jra     2f
+2:     nop
+       .word   0xf518          /* pflusha */
+       .long   0x4e7bd807      /* movec %a5,%srp */
+       .long   0x4e7bd806      /* movec %a5,%urp */
+       movel   #TC_ENABLE+TC_PAGE4K,%d0
+       /*
+        * this value is also ok for the 68060, we don`t use the cache
+        * mode/protection defaults
+        */
+       .long   0x4e7b0003      /* movec %d0,%tc (enable the MMU) */
+       jmp     %a0@
+3:     moveq   #0,%d0
+       .long   0x4e7b0004      /* movec %d0,%itt0 */
+       tstl    %a1
+       jra     LdoneMMUenable
+
+Lmapphysnotmac:
+#endif
+
LdoneMMUenable:

+
/*
 * Fixup the addresses for the kernel pointer table and availmem.
 * Convert them from physical addresses to virtual addresses.
 */

-       putc('M')
+
+/*     putc('M')*/

       /*
        * d5 contains physaddr of kernel start
@@ -794,7 +1033,7 @@
       subl    %d5,%a6
       movel   %a6,SYMBOL_NAME(availmem) /* first available memory address */

-       putc('N')
+/*     putc('N')*/

#if 0
       putr()
@@ -823,10 +1062,24 @@
/*
 * Enable caches
 */
+       lea     %pc@(SYMBOL_NAME(boot_info)),%a0
+       movel   %a0@(BI_videoaddr),%a0
+       movel   #2048,%d0
+1:
+       moveb   #0x33,%a0@+
+       dbra    %d0,1b
       is_040_or_060(Lcache680460)

       movel   #CC3_ENABLE_DB+CC3_CLR_D+CC3_ENABLE_D+CC3_ENABLE_IB+CC3_CLR_I+CC3_ENABLE_I,%d0
       movec   %d0,%cacr
+
+       lea     %pc@(SYMBOL_NAME(boot_info)),%a0
+       movel   %a0@(BI_videoaddr),%a0
+       movel   #2048,%d0
+1:
+       moveb   #0xFF,%a0@+
+       dbra    %d0,1b
+
       jra     1f

Lcache680460:
@@ -854,7 +1107,7 @@
       lea     SYMBOL_NAME(init_user_stack)+PAGESIZE,%sp

/* jump to the kernel start */
-       putr()
+/*     putr()*/

       jbsr    SYMBOL_NAME(start_kernel)

@@ -903,6 +1156,25 @@
 * from the MFP or a serial port of the SCC
 */

+#ifdef CONFIG_MAC
+#define USE_SCC
+
+scc_initable_mac:
+       .byte   9,12            /* Reset */
+       .byte   4,0x44          /* x16, 1 stopbit, no parity */
+       .byte   3,0xc0          /* receiver: 8 bpc */
+       .byte   5,0xe2          /* transmitter: 8 bpc, assert dtr/rts */
+       .byte   9,0             /* no interrupts */
+       .byte   10,0            /* NRZ */
+       .byte   11,0x50         /* use baud rate generator */
+       .byte   12,10,13,0      /* 9600 baud */
+       .byte   14,2,14,3       /* use master clock for BRG, enable */
+       .byte   3,0xc1          /* enable receiver */
+       .byte   5,0xea          /* enable transmitter */
+       .byte   -1
+       .even
+#endif
+
#ifdef CONFIG_ATARI
/* #define USE_PRINTER */
/* #define USE_SCC */
@@ -1002,7 +1274,16 @@
       orb     #1,LMFP_TDCDR
       bset    #1,LMFP_TSR
#endif
+#endif
4:
+#ifdef defined(CONFIG_MAC)
+       lea     #50F04000,%a0
+       lea     %pc@(scc_initable_mac:w),%a1
+2:     moveb   %a1@+,%d0
+       jmi     3f
+       moveb   %d0,%a0@
+       moveb   %a1@+,%a0@
+       jra     2b
#endif
9:
       rts
@@ -1025,6 +1306,16 @@
       jeq     1b
       jra     9f
2:
+#endif
+#ifdef CONFIG_MAC
+#if 0
+       /* should check if MAC .. - note this base is for a MacII and later ! */
+       lea     0x50F04000,%a1
+3:     btst    #2,%a1@(0)
+       jeq     3b
+#endif
+       moveb   %d7,%a1@(4)
+       jra     9f
#endif
#ifdef CONFIG_ATARI
       cmpil   #MACH_ATARI,%d4
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/kernel/ints.c linux-2.0.29/arch/m68k/kernel/ints.c
--- linux.vanilla/arch/m68k/kernel/ints.c       Sat Oct  5 14:24:07 1996
+++ linux-2.0.29/arch/m68k/kernel/ints.c        Tue Mar 25 14:45:51 1997
@@ -25,6 +25,7 @@
 *           which must be served                               /Roman Zippel
 */

+#include <linux/config.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/kernel_stat.h>
@@ -178,7 +179,7 @@
                       panic("Can't process interrupt vector %ld\n", vec);
               return;
       }
-
+
       vec -= VEC_SPUR;
       kstat.interrupts[vec]++;
       irq_list[vec].handler(vec, irq_list[vec].dev_id, fp);
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/kernel/setup.c linux-2.0.29/arch/m68k/kernel/setup.c
--- linux.vanilla/arch/m68k/kernel/setup.c      Sat Oct  5 14:24:07 1996
+++ linux-2.0.29/arch/m68k/kernel/setup.c       Tue Mar 25 16:13:26 1997
@@ -127,6 +127,10 @@

       memory_start = availmem;
       memory_end = 0;
+
+       /* AC MAC HACK */
+       if(boot_info.num_memory==0)
+               boot_info.num_memory=1;

       for (i = 0; i < boot_info.num_memory; i++)
               memory_end += boot_info.memory[i].size & MASK_256K;
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/kernel/traps.c linux-2.0.29/arch/m68k/kernel/traps.c
--- linux.vanilla/arch/m68k/kernel/traps.c      Sat Oct  5 14:24:07 1996
+++ linux-2.0.29/arch/m68k/kernel/traps.c       Mon Mar 24 14:53:42 1997
@@ -770,6 +770,7 @@
       for (i = 0; i < 10; i++)
               printk("%04x ", 0xffff & ((short *) fp->ptregs.pc)[i]);
       printk ("\n");
+       while(1);       /* AC trap */
}

void bad_super_trap (struct frame *fp)
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/Makefile linux-2.0.29/arch/m68k/mac/Makefile
--- linux.vanilla/arch/m68k/mac/Makefile        Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/Makefile Mon Mar 24 17:45:24 1997
@@ -0,0 +1,15 @@
+#
+# Makefile for Linux arch/m68k/atari source directory
+#
+# Note! Dependencies are done automagically by 'make dep', which also
+# removes any old dependencies. DON'T put your own dependencies here
+# unless it's something special (ie not a .c file).
+#
+# Note 2! The CFLAGS definitions are now in the main makefile...
+
+EXTRA_CFLAGS := -Wa,-m68020
+
+O_TARGET := mac.o
+O_OBJS  := config.o ksyms.o bootparse.o macfb.o macints.o via6522.o
+
+include $(TOPDIR)/Rules.make
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/bootparse.c linux-2.0.29/arch/m68k/mac/bootparse.c
--- linux.vanilla/arch/m68k/mac/bootparse.c     Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/bootparse.c      Tue Mar 25 18:16:37 1997
@@ -0,0 +1,89 @@
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <asm/setup.h>
+
+/*
+ *     Booter vars
+ */
+
+int boothowto;
+
+
+/*
+ *     Called early to parse the environment (passed to us from the booter)
+ *     into a bootinfo struct. Will die as soon as we have our own booter
+ */
+
+#define atol(x)        simple_strtoul(x,NULL,0)
+
+void parse_booter(char *env)
+{
+       char *name;
+       char *value;
+       while(*env)
+       {
+               name=env;
+               value=name;
+               while(*value!='='&&*value)
+                       value++;
+               if(*value=='=')
+                       *value++=0;
+               env=value;
+               while(*value)
+                       value++;
+#if 0
+               if(strcmp(name,"VIDEO_ADDR")==0)
+                       boot_info.bi_mac.videoaddr=atol(value);
+               if(strcmp(name,"ROW_BYTES")==0)
+                       boot_info.bi_mac.videorow=atol(value);
+               if(strcmp(name,"SCREEN_DEPTH")==0)
+                       boot_info.bi_mac.videodepth=atol(value);
+               if(strcmp(name,"DIMENSIONS")==0)
+                       boot_info.bi_mac.dimensions=atol(value);
+#endif
+               if(strcmp(name,"BOOTTIME")==0)
+                       boot_info.bi_mac.boottime=atol(value);
+               if(strcmp(name,"GMTBIAS")==0)
+                       boot_info.bi_mac.gmtbias=atol(value);
+               if(strcmp(name,"BOOTERVER")==0)
+                       boot_info.bi_mac.bootver=atol(value);
+               if(strcmp(name,"MACOS_VIDEO")==0)
+                       boot_info.bi_mac.videological=atol(value);
+               if(strcmp(name,"MACOS_SCC")==0)
+                       boot_info.bi_mac.scc=atol(value);
+               if(strcmp(name,"MACHINEID")==0)
+                       boot_info.bi_mac.id=atol(value);
+               if(strcmp(name,"MEMSIZE")==0)
+                       boot_info.bi_mac.memsize=atol(value);
+               if(strcmp(name,"SERIAL_MODEM_FLAGS")==0)
+                       boot_info.bi_mac.serialmf=atol(value);
+               if(strcmp(name,"SERIAL_MODEM_HSKICLK")==0)
+                       boot_info.bi_mac.serialhsk=atol(value);
+               if(strcmp(name,"SERIAL_MODEM_GPICLK")==0)
+                       boot_info.bi_mac.serialgpi=atol(value);
+               if(strcmp(name,"SERIAL_PRINT_FLAGS")==0)
+                       boot_info.bi_mac.printf=atol(value);
+               if(strcmp(name,"SERIAL_PRINT_HSKICLK")==0)
+                       boot_info.bi_mac.printhsk=atol(value);
+               if(strcmp(name,"SERIAL_PRINT_GPICLK")==0)
+                       boot_info.bi_mac.printgpi=atol(value);
+               if(strcmp(name,"PROCESSOR")==0)
+                       boot_info.bi_mac.cpuid=atol(value);
+               if(strcmp(name,"ROMBASE")==0)
+                       boot_info.bi_mac.rombase=atol(value);
+               if(strcmp(name,"TIMEDBRA")==0)
+                       boot_info.bi_mac.timedbra=atol(value);
+               if(strcmp(name,"ADBDELAY")==0)
+                       boot_info.bi_mac.adbdelay=atol(value);
+       }
+       /* Fill in the base stuff */
+       boot_info.machtype=MACH_MAC;
+       /* Read this from the macinfo we got ! */
+       boot_info.cputype=CPU_68020|FPUB_68881;
+/*     boot_info.memory[0].addr=0;
+       boot_info.memory[0].size=boot_info.bi_mac.memsize;*/
+       boot_info.num_memory=1;         /* On a MacII */
+       boot_info.ramdisk_size=0;       /* For now */
+       *boot_info.command_line=0;
+ }
+
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/config.c linux-2.0.29/arch/m68k/mac/config.c
--- linux.vanilla/arch/m68k/mac/config.c        Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/config.c Tue Mar 25 14:17:18 1997
@@ -0,0 +1,190 @@
+/*
+ *  linux/arch/m68k/mac/config.c
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+
+/*
+ * Miscellaneous linux stuff
+ */
+
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/mm.h>
+#include <linux/kd.h>
+#include <linux/tty.h>
+#include <linux/console.h>
+#include <linux/interrupt.h>
+
+#include <asm/setup.h>
+
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/pgtable.h>
+#include <asm/machdep.h>
+
+#include "via6522.h"
+
+void *mac_env;         /* Loaded by the boot asm */
+
+extern void (*kd_mksound)(unsigned int, unsigned int);
+
+void mac_get_model(char *str)
+{
+       strcpy(str,"Macintosh");
+}
+
+extern void mac_reset();
+
+void mac_bang(int irq, void *vector, struct pt_regs *p)
+{
+       mac_reset();
+}
+
+void mac_sched_init(void (*vector)(int, void *, struct pt_regs *))
+{
+       via_init_clock(vector);
+       request_irq(1, via1_irq, IRQ_FLG_LOCK, "via1", via1_irq);
+       request_irq(6, mac_bang, IRQ_FLG_LOCK, "offswitch", mac_bang);
+}
+
+int mac_keyb_init(void)
+{
+       return 0;
+}
+
+int mac_kbdrate(struct kbd_repeat *k)
+{
+       return 0;
+}
+
+void mac_kbd_leds(unsigned int leds)
+{
+       ;
+}
+
+
+unsigned long mac_gettimeoffset (void)
+{
+       return 0L;
+}
+
+void mac_mksound( unsigned int count, unsigned int ticks )
+{
+       ;
+}
+
+
+void mac_waitbut (void)
+{
+       ;
+}
+
+extern struct consw fb_con;
+extern struct fb_info *mac_fb_init(long *);
+extern void mac_video_setup(char *, int *);
+
+void mac_debug_init (void)
+{
+       ;
+}
+
+
+extern void mac_init_IRQ(void);
+extern int mac_request_irq (unsigned int, void (*)(int, void *,
+                               struct pt_regs *),
+                               unsigned long, const char *, void *);
+extern int mac_free_irq(unsigned int, void *);
+extern void mac_enable_irq(unsigned int);
+extern void mac_disable_irq(unsigned int);
+extern int mac_get_irq_list(char *);
+extern void mac_default_handler(int irq);
+
+
+void (*mac_handlers[8])(int, void *, struct pt_regs *)=
+{
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler,
+       mac_default_handler
+};
+
+void config_mac(void)
+{
+    int xd,yd;
+    int y;
+    unsigned char c=0xF0;
+    unsigned char *bp=(unsigned char *)boot_info.bi_mac.videoaddr;
+
+    parse_booter(mac_env);
+
+    xd=boot_info.bi_mac.dimensions;
+
+    yd=xd>>16;
+    xd&=0xFFFF;
+
+    if(xd<512||yd <256|| boot_info.bi_mac.videoaddr!=0xFDD00020)
+    {
+       boot_info.bi_mac.videoaddr=0xFDD00020;
+       mac_boom(9);
+    }
+
+    for(y=0;y<16;y++)
+    {
+       memset(bp+y*boot_info.bi_mac.videorow,
+               0x00,boot_info.bi_mac.videorow);
+    }
+    memset(bp+y*boot_info.bi_mac.videorow,
+               0xFF,boot_info.bi_mac.videorow);
+
+    *bp=0xFF;
+    bp[boot_info.bi_mac.videorow-1]=0xFF;
+    bp[boot_info.bi_mac.videorow]=0xF0;
+    bp[boot_info.bi_mac.videorow*2-1]=0x0F;
+
+    for(y=17;y<yd;y++)
+    {
+       memset(bp+y*boot_info.bi_mac.videorow,
+               c,boot_info.bi_mac.videorow);
+       c^=0xFF;
+    }
+
+    mac_debugging_penguin(5);
+
+    mach_sched_init      = mac_sched_init;
+    mach_keyb_init       = mac_keyb_init;
+    mach_kbdrate         = mac_kbdrate;
+    mach_kbd_leds        = mac_kbd_leds;
+    mach_init_IRQ        = mac_init_IRQ;
+    mach_request_irq     = mac_request_irq;
+    mach_free_irq        = mac_free_irq;
+    mach_enable_irq      = mac_enable_irq;
+    mach_disable_irq     = mac_disable_irq;
+    mach_default_handler = mac_handlers;
+    mach_get_irq_list   = mac_get_irq_list;
+    mach_gettimeoffset   = mac_gettimeoffset;
+    mach_mksound         = mac_mksound;
+    mach_reset           = mac_reset;
+#ifdef CONFIG_BLK_DEV_FD
+    mach_floppy_init    = mac_floppy_init;
+    mach_floppy_setup   = mac_floppy_setup;
+#endif
+    conswitchp          = &fb_con;
+    waitbut             = mac_waitbut;
+    mach_fb_init         = mac_fb_init;
+    mach_max_dma_address = 0xffffffff;
+    mach_debug_init     = mac_debug_init;
+    mach_video_setup    = mac_video_setup;
+    kd_mksound          = mac_mksound;
+
+    /*
+     * Determine hardware present
+     */
+}
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/ksyms.c linux-2.0.29/arch/m68k/mac/ksyms.c
--- linux.vanilla/arch/m68k/mac/ksyms.c Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/ksyms.c  Fri Mar 14 12:34:34 1997
@@ -0,0 +1,13 @@
+#include <linux/module.h>
+#include <asm/ptrace.h>
+#include <asm/traps.h>
+
+static struct symbol_table mach_mac_symbol_table = {
+#include <linux/symtab_begin.h>
+#include <linux/symtab_end.h>
+};
+
+void mach_mac_syms_export(void)
+{
+       register_symtab(&mach_mac_symbol_table);
+}
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/mac.h linux-2.0.29/arch/m68k/mac/mac.h
--- linux.vanilla/arch/m68k/mac/mac.h   Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/mac.h    Fri Mar 21 14:43:30 1997
@@ -0,0 +1,74 @@
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0x0F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xF0,0x0F,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0x0F,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x00,0xF0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0x00,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xF0,0x00,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xF0,0x00,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xF0,0x00,0x0F,0x00,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x0F,0x00,0x00,0xF0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x0F,0x0F,0x00,0x00,0xF0,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xF0,0xF0,0x0F,0x0F,0x00,0xF0,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0x00,0xF0,0xF0,0x0F,0x0F,0x00,0xF0,0x0F,0x0F,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0x0F,0x0F,0x0F,0x00,0x0F,0x00,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0x00,0xF0,0x0F,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xF0,0xFF,0x00,0x0F,0x0F,0x0F,0x00,0x0F,0x00,0xF0,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0xF0,0x0F,0x0F,0x00,0x0F,0x0F,0xF0,0x0F,0x00,0x00,0xF0,0x00,0x0F,0x00,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0xF0,0xF0,0xF0,0x0F,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x0F,0x0F,0x00,0xF0,0x00,0x0F,0x00,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xFF,0xF0,0x0F,0x0F,0x00,0x0F,0x00,0xF0,0x00,0x00,0xF0,0xF0,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x0F,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x0F,0x0F,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0x0F,0x00,0x00,0x00,0xF0,0x0F,0x0F,0x00,0xF0,0xF0,0x0F,0x0F,0x0F,0x00,0x0F,0x00,
+0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x0F,0xFF,0x0F,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0xF0,0x0F,0x00,0x00,0xF0,0xF0,0x00,0xF0,0x00,0xF0,
+0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0x0F,0x00,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0x00,0xF0,0x00,
+0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xFF,0x00,0x00,0x0F,0xF0,0xF0,0xF0,0xF0,0x0F,0x00,0x0F,0x0F,0x00,0xF0,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x00,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x0F,0x0F,0xFF,0xFF,0x0F,0x0F,0xF0,0xFF,0x00,0x00,0x0F,0xFF,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0x0F,0xFF,0x0F,0x00,0x0F,0xF0,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0x00,0x0F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0xFF,0xFF,0x0F,0x0F,0xF0,0xFF,0x00,0x00,0x00,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xFF,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0xFF,0xF0,0xFF,0x0F,0xF0,0xF0,0xF0,0xF0,0x0F,0x00,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0x0F,0x00,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0x0F,
+0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0xFF,0xFF,0xF0,0xFF,0x0F,0xFF,0x0F,0x00,0x0F,0x0F,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x0F,0xF0,0x00,0x00,0xFF,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
+0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x0F,0xF0,0xFF,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,0x0F,0x0F,0x0F,0x0F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x0F,0xFF,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0xF0,0xF0,0x00,0xF0,0xF0,0xF0,0xF0,0xFF,0x0F,0x0F,0x0F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0xF0,0xF0,0x00,0xF0,0xFF,0x00,0x0F,0x00,0xF0,0x0F,0x0F,0x0F,0x0F,0xFF,0xF0,0xF0,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0xF0,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
+0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x00,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xFF,0x0F,
+0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,
+0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xF0,0x00,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0xF0,0x0F,0x00,0xF0,0xF0,0xF0,
+0xFF,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x0F,0x0F,0x00,0x00,0xFF,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xF0,0xFF,0x0F,0x0F,0x0F,
+0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF0,0xF0,0xFF,0x00,0xF0,0xF0,0x0F,0x00,0xF0,0xF0,0xF0,
+0x0F,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x0F,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,
+0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0x0F,0x00,0xF0,0xF0,0x0F,0x0F,0x0F,0x00,0xFF,0x0F,0x0F,0x00,0xF0,0xF0,0xFF,0x0F,0x00,0xF0,0xF0,0xF0,0x0F,0x0F,0x00,
+0x0F,0x0F,0x0F,0x00,0xF0,0x0F,0x00,0x00,0xF0,0xF0,0x00,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0xF0,0xF0,0x0F,0x0F,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x00,0x00,0x0F
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/macfb.c linux-2.0.29/arch/m68k/mac/macfb.c
--- linux.vanilla/arch/m68k/mac/macfb.c Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/macfb.c  Mon Mar 24 14:22:22 1997
@@ -0,0 +1,338 @@
+/*
+ *     We've been given MAC frame buffer info by the booter. Now go set it up
+ */
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/malloc.h>
+#include <linux/delay.h>
+
+#include <asm/setup.h>
+#include <asm/segment.h>
+#include <asm/pgtable.h>
+#include <asm/irq.h>
+
+#include <linux/fb.h>
+
+#define arraysize(x)    (sizeof(x)/sizeof(*(x)))
+
+static struct fb_var_screeninfo mac_fb_defined={
+       0,0,0,0,        /* W,H, W, H (virtual) load xres,xres_virtual*/
+       0,0,            /* virtual -> visible no offset */
+       8,              /* depth -> load bits_per_pixel */
+       0,              /* greyscale ? */
+       {0,0,0},        /* R */
+       {0,0,0},        /* G */
+       {0,0,0},        /* B */
+       {0,0,0},        /* transparency */
+       0,              /* standard pixel format */
+       FB_ACTIVATE_NOW,
+       274,195,        /* 14" monitor *Mikael Nykvist's anyway* */
+       FB_ACCEL_NONE,  /* The only way to accelerate a mac is .. */
+       0L,0L,0L,0L,0L,
+       0L,0L,0,        /* No sync info */
+       FB_VMODE_NONINTERLACED,
+       {0,0,0,0,0,0}
+};
+
+#define NUM_TOTAL_MODES                1
+#define NUM_PREDEF_MODES       1
+
+static struct display disp[MAX_NR_CONSOLES];
+static struct fb_info fb_info;
+static int node;
+
+struct mac_fb_par
+{
+       void *unused;
+};
+
+static int currcon = 0;
+static int current_par_valid = 0;
+struct mac_fb_par current_par;
+
+static int mac_xres,mac_yres,mac_depth, mac_xbytes, mac_vxres;
+static unsigned long mac_videobase;
+static unsigned long mac_videosize;
+
+
+static void mac_fb_encode_var(struct fb_var_screeninfo *var)
+{
+       int i=0;
+       var->xres=mac_xres;
+       var->yres=mac_yres;
+       var->xres_virtual=mac_vxres;
+       var->yres_virtual=var->yres;
+       var->xoffset=0;
+       var->yoffset=0;
+       var->bits_per_pixel = mac_depth;
+       var->grayscale=0;
+       var->transp.offset=0;
+       var->transp.length=0;
+       var->transp.msb_right=0;
+       var->nonstd=0;
+       var->activate=0;
+       var->height= -1;
+       var->width= -1;
+       var->accel=0;
+       var->vmode=FB_VMODE_NONINTERLACED;
+       var->pixclock=0;
+       var->sync=0;
+       var->left_margin=0;
+       var->right_margin=0;
+       var->upper_margin=0;
+       var->lower_margin=0;
+       var->hsync_len=0;
+       var->vsync_len=0;
+       for(i=0;i<arraysize(var->reserved);i++)
+               var->reserved[i]=0;
+       return;
+}
+
+
+static void mac_fb_get_par(struct mac_fb_par *par)
+{
+       *par=current_par;
+}
+
+static void mac_fb_set_par(struct mac_fb_par *par)
+{
+       current_par_valid=1;
+}
+
+static int fb_update_var(int con)
+{
+       return 0;
+}
+
+static int do_fb_set_var(struct fb_var_screeninfo *var, int isactive)
+{
+       mac_fb_encode_var(var);
+       return 0;
+}
+
+static void mac_fb_encode_fix(struct fb_fix_screeninfo *fix)
+{
+       int i;
+       strcpy(fix->id,"Macintosh");
+       fix->smem_start=mac_videobase;
+       fix->smem_len=mac_videosize;
+       fix->type = FB_TYPE_PACKED_PIXELS;
+       fix->visual = FB_VISUAL_PSEUDOCOLOR;
+       fix->xpanstep=0;
+       fix->ypanstep=0;
+       fix->ywrapstep=0;
+       fix->line_length=mac_xbytes;
+       for(i=0;i<arraysize(fix->reserved);i++)
+               fix->reserved[i]=0;
+       return;
+}
+
+
+
+static int mac_fb_get_fix(struct fb_fix_screeninfo *fix, int con)
+{
+       struct mac_fb_par par;
+       mac_fb_get_par(&par);
+       mac_fb_encode_fix(fix);
+       return 0;
+}
+
+static int mac_fb_get_var(struct fb_var_screeninfo *var, int con)
+{
+       struct mac_fb_par par;
+       if(con==-1)
+       {
+               mac_fb_get_par(&par);
+               mac_fb_encode_var(var);
+       }
+       else
+               *var=disp[con].var;
+       return 0;
+}
+
+static void mac_fb_set_disp(int con)
+{
+       struct fb_fix_screeninfo fix;
+
+       mac_fb_get_fix(&fix,con);
+       if (con == -1)
+               con=0;
+       disp[con].screen_base = (u_char *)fix.smem_start;
+       disp[con].visual = fix.visual;
+       disp[con].type = fix.type;
+       disp[con].type_aux = fix.type_aux;
+       disp[con].ypanstep = fix.ypanstep;
+       disp[con].ywrapstep = fix.ywrapstep;
+       disp[con].line_length = fix.line_length;
+       disp[con].next_line = fix.line_length;
+       disp[con].can_soft_blank = 0;
+       disp[con].inverse = 0;
+}
+
+static int mac_fb_set_var(struct fb_var_screeninfo *var, int con)
+{
+       int err;
+
+       if ((err=do_fb_set_var(var, 1)))
+               return err;
+       return 0;
+}
+
+static int mac_fb_get_cmap(struct fb_cmap *cmap, int kspc, int con)
+{
+       return -EINVAL;
+}
+
+static int mac_fb_set_cmap(struct fb_cmap *cmap, int kspc, int con)
+{
+       return -EINVAL;
+}
+
+static int mac_fb_pan_display(struct fb_var_screeninfo *var, int con)
+{
+       /* no panning */
+       return -EINVAL;
+}
+
+static int mac_fb_ioctl(struct inode *inode, struct file *file,
+       unsigned int cmd, unsigned long arg, int con)
+{
+       return -EINVAL;
+}
+
+static struct fb_ops mac_fb_ops = {
+       mac_fb_get_fix,
+       mac_fb_get_var,
+       mac_fb_set_var,
+       mac_fb_get_cmap,
+       mac_fb_set_cmap,
+       mac_fb_pan_display,
+       mac_fb_ioctl
+};
+
+void mac_video_setup(char *options, int *ints)
+{
+}
+
+static int macfb_switch(int con)
+{
+       do_fb_set_var(&disp[con].var,1);
+       currcon=con;
+       return 0;
+}
+
+/* 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off */
+
+static void macfb_blank(int blank)
+{
+       /* Not supported */
+}
+
+struct fb_info *mac_fb_init(long *mem_start)
+{
+       /* nubus_remap the video .. */
+       int err;
+
+       mac_xres=boot_info.bi_mac.dimensions&0xFFFF;
+       mac_yres=(boot_info.bi_mac.dimensions&0xFFFF0000)>>16;
+       mac_depth=boot_info.bi_mac.videodepth;
+       mac_xbytes=boot_info.bi_mac.videorow;
+       mac_vxres = (mac_xbytes/mac_depth)*8;
+       mac_videosize=mac_xbytes*mac_yres;
+       mac_videobase=boot_info.bi_mac.videoaddr;
+       mac_debugging_penguin(4);
+
+       /*
+        *      Fill in the available video resolution
+        */
+
+        mac_fb_defined.xres=mac_xres;
+        mac_fb_defined.yres=mac_yres;
+        mac_fb_defined.xres_virtual=mac_vxres;
+        mac_fb_defined.yres_virtual=mac_yres;
+        mac_fb_defined.bits_per_pixel=mac_depth;
+
+
+       /*
+        *      Let there be consoles..
+        */
+       err=register_framebuffer("Macintosh", &node, &mac_fb_ops, NUM_TOTAL_MODES, &mac_fb_defined);
+       if(err<0)
+       {
+               mac_boom(5);
+               return NULL;
+       }
+       fb_info.disp=disp;
+       fb_info.switch_con=&macfb_switch;
+       fb_info.updatevar=&fb_update_var;
+       fb_info.blank=&macfb_blank;
+       do_fb_set_var(&mac_fb_defined,1);
+       mac_fb_get_var(&disp[0].var, -1);
+       mac_fb_set_disp(-1);
+
+       return &fb_info;
+}
+
+static char that_penguin[]={
+#include "that_penguin.h"
+};
+
+void mac_debugging_penguin(int peng)
+{
+       unsigned char *pengoffset;
+       unsigned char *pptr;
+       unsigned char *pdptr=that_penguin;
+       int i;
+
+       pengoffset=(unsigned char *)(boot_info.bi_mac.videoaddr+
+                       64*boot_info.bi_mac.videorow)+40*peng;
+
+       pptr=pengoffset;
+
+       for(i=0;i<74;i++)
+       {
+               memcpy(pptr,pdptr,32);
+               pdptr+=32;
+               pptr+=boot_info.bi_mac.videorow;
+       }
+}
+
+static char kaboom_map[]={
+#include "mac.h"
+};
+
+static void mac_boom_boom(void)
+{
+       static unsigned char *boomoffset=NULL;
+       unsigned char *pptr;
+       unsigned char *pdptr=kaboom_map;
+       int i;
+
+       if(!boomoffset)
+               boomoffset=(unsigned char *)(boot_info.bi_mac.videoaddr+
+                       256*boot_info.bi_mac.videorow);
+       else
+               boomoffset+=32;
+
+       pptr=boomoffset;
+
+       for(i=0;i<74;i++)
+       {
+               memcpy(pptr,pdptr,32);
+               pdptr+=32;
+               pptr+=boot_info.bi_mac.videorow;
+       }
+}
+
+void mac_boom(int booms)
+{
+       int i;
+       for(i=0;i<booms;i++)
+               mac_boom_boom();
+       while(1);
+}
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/macints.c linux-2.0.29/arch/m68k/mac/macints.c
--- linux.vanilla/arch/m68k/mac/macints.c       Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/macints.c        Tue Mar 25 14:34:25 1997
@@ -0,0 +1,57 @@
+/*
+ *     Macintosh interrupts
+ *
+ *     2       - VIA1 ???
+ *     6       - Off switch
+ */
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/kernel_stat.h>
+
+#include <asm/system.h>
+#include <asm/irq.h>
+#include <asm/traps.h>
+
+asmlinkage void bad_interrupt(void);
+
+void mac_init_IRQ(void)
+{
+}
+
+/*
+ *     We have no machine specific interrupts on a macintoy
+ */
+
+int mac_request_irq (unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
+                              unsigned long flags, const char *devname, void *dev_id)
+{
+       return -EINVAL;
+}
+
+int mac_free_irq (unsigned int irq, void *dev_id)
+{
+       return -EINVAL;
+}
+
+void mac_enable_irq (unsigned int irq)
+{
+       ;
+}
+
+void mac_disable_irq (unsigned int irq)
+{
+       ;
+}
+
+int mac_get_irq_list (char *buf)
+{
+       return 0;
+}
+
+void mac_default_handler(int irq)
+{
+/*     printk("Unexpected IRQ %d\n",irq);*/
+}
+
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/that_penguin.h linux-2.0.29/arch/m68k/mac/that_penguin.h
--- linux.vanilla/arch/m68k/mac/that_penguin.h  Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/that_penguin.h   Fri Mar 21 13:44:53 1997
@@ -0,0 +1,74 @@
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x0F,0xFF,0xFF,0xF0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xF0,0xFF,0xFF,0x0F,0xF0,0xF0,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0x00,0xFF,0xFF,0x0F,0xFF,0x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xF0,0x0F,0xFF,0x0F,0xFF,0xF0,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x00,0x0F,0x0F,0xFF,0xF0,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x0F,0xF0,0x00,0x00,0xFF,0xF0,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0xF0,0xFF,0xFF,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xF0,0x00,0x0F,0xFF,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x0F,0xFF,0x00,0xFF,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0xF0,0x00,0x00,
+0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0xF0,0x00,0x00,
+0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,
+0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,
+0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0xF0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
+0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,
+0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
+0x00,0x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/via6522.c linux-2.0.29/arch/m68k/mac/via6522.c
--- linux.vanilla/arch/m68k/mac/via6522.c       Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/via6522.c        Tue Mar 25 15:38:06 1997
@@ -0,0 +1,184 @@
+/*
+ *     6522 Versatile Interface Adapter (VIA)
+ *
+ *     There are two of these on the Mac II. Some IRQ's are vectored
+ *     via them as are assorted bits and bobs - eg rtc, adb.
+ */
+
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+
+#include "via6522.h"
+
+unsigned char *via1=(unsigned char *)VIABASE;
+unsigned char *via2=(unsigned char *)VIABASE2;
+
+/*
+ *     VIA1 - hardwired vectors
+ */
+
+extern void via_wtf(int slot, void *via, struct pt_regs *regs);
+
+static struct via_irq_tab via1_func_tab=
+{
+       {
+               via_wtf,
+               via_wtf,
+               via_wtf/*adb_event*/,   /* The frontdesk bus events on a MacII anyway */
+               via_wtf,
+               via_wtf,
+               via_wtf,
+               via_wtf,        /* Slot 6 is replaced by the timer */
+               via_wtf
+       }
+};
+
+#define MAC_CLOCK_TICK         (783300/HZ)     /* ticks per HZ */
+#define MAC_CLOCK_LOW          (MAC_CLOCK_TICK&0xFF)
+#define MAC_CLOCK_HIGH         (MAC_CLOCK_TICK>>8)
+
+
+void via_init_clock(void (*func)(int, void *, struct pt_regs *))
+{
+       unsigned char c;
+
+       mac_debugging_penguin(6);
+
+       /*
+        *      Shut it down
+        */
+
+       via_write(via1,vIER, 0x7F);
+       via_write(via2,vIER, 0x7F);
+
+       /*
+        *      Kill the timers
+        */
+
+       via_write(via1,vT1LL,0);
+       via_write(via1,vT1LH,0);
+       via_write(via1,vT1CL,0);
+       via_write(via1,vT1CH,0);
+       via_write(via1,vT2CL,0);
+       via_write(via1,vT2CH,0);
+
+       /*
+        *      Now do via2
+        */
+
+       via_write(via2,vT1LL,0);
+       via_write(via2,vT1LH,0);
+       via_write(via2,vT1CL,0);
+       via_write(via2,vT1CH,0);
+       via_write(via2,vT2CL,0);
+       via_write(via2,vT2CH,0);
+
+       /*
+        *      Disable the timer latches
+        */
+
+       c=via_read(via1,vACR);
+       via_write(via1,vACR,c&0x3F);
+
+       c=via_read(via2,vACR);
+       via_write(via2,vACR,c&0x3F);
+
+       /*
+        *      Now start the clock - we want 100Hz
+        */
+
+       via_write(via1,vACR,via_read(via1,vACR)|0x40);
+
+       via_write(via1,vT1LL, MAC_CLOCK_LOW);
+       via_write(via1,vT1LH, MAC_CLOCK_HIGH);
+       via_write(via1,vT1CL, MAC_CLOCK_LOW);
+       via_write(via1,vT1CH, MAC_CLOCK_HIGH);
+
+       /*
+        *      And enable its interrupt
+        */
+
+       via_write(via1, vIER, via_read(via1, vIER)|0x80|(1<<6));
+
+       via1_func_tab.vector[6]=func;
+       mac_debugging_penguin(7);
+}
+
+
+static void via_irq(unsigned char *via, struct via_irq_tab *irqtab,
+       struct pt_regs *regs)
+{
+       unsigned char events=(via_read(via, vIFR)&via_read(via,vIER))&0x7F;
+       int i;
+
+       /*
+        *      Shouldnt happen
+        */
+
+       if(events==0)
+       {
+               printk("via_irq: nothing pending!\n");
+               return;
+       }
+
+       /*
+        *      Clear the pending flag
+        */
+
+       via_write(via, vIFR, events);
+
+       /*
+        *      Now see what bits are raised
+        */
+
+       for(i=0;i<7;i++)
+       {
+               if(events&(1<<i))
+                       (irqtab->vector[i])(i, via, regs);
+       }
+
+       /*
+        *      And done..
+        */
+}
+
+/*
+ *     System interrupts
+ */
+
+void via1_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+       via_irq(via1, &via1_func_tab, regs);
+}
+
+/*
+ *     Nubus interrupts
+ */
+
+void via2_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+#if 0
+       via_irq(via1, &nubus_func_tab, regs);
+#endif
+}
+
+/*
+ *     Unexpected via interrupt
+ */
+
+void via_wtf(int slot, void *via, struct pt_regs *regs)
+{
+       printk("Unexpected event %d on via %p\n",slot,via);
+}
+
+/*
+ *     The power switch - yes its software!
+ */
+
+void mac_reset(void)
+{
+       via_write(via2,vDirB,via_read(via2,vDirB)|0x04);
+       via_write(via2,vBufB,via_read(via2,vBufB)&~0x04);
+}
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mac/via6522.h linux-2.0.29/arch/m68k/mac/via6522.h
--- linux.vanilla/arch/m68k/mac/via6522.h       Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/arch/m68k/mac/via6522.h        Tue Mar 25 11:27:18 1997
@@ -0,0 +1,95 @@
+/*
+ *     6522 Versatile Interface Adapter (VIA)
+ *
+ *     There are two of these on the Mac II. Some IRQ's are vectored
+ *     via them as are assorted bits and bobs - eg rtc, adb. The picture
+ *     is a bit incomplete as the Mac documentation doesnt cover this well
+ */
+
+#define VIABASE                0x50F00000
+#define VIABASE2       0x50F02000
+
+/*
+ *     Not all of these are true post MacII I think
+ */
+
+#define VIA1A_vSccWrReq        0x80    /* SCC write */
+#define VIA1A_vRev8    0x40    /* Revision 8 board ??? */
+#define VIA1A_vHeadSel 0x20    /* Head select for IWM */
+#define VIA1A_vOverlay 0x10
+#define VIA1A_vSync    0x08
+#define VIA1A_vVolume  0x07    /* Audio volume mask */
+
+#define VIA1B_vSound   0x80    /* Audio on/off */
+#define VIA1B_vMystery 0x40
+#define VIA1B_vADBS2   0x20    /* ADB state 2 */
+#define VIA1B_vADBS1   0x10    /* ADB state 1 */
+#define VIA1B_vADBInt  0x08    /* ADB interrupt */
+#define VIA1B_vRTCEnb  0x04    /* Real time clock */
+#define VIA1B_vRTCClk  0x02
+#define VIA1B_vRTCData 0x01
+
+/*
+ *     VIA2 A register is the interrupt lines raised off the nubus
+ *     slots.
+ */
+
+#define VIA2A_vIRQE    0x20
+#define VIA2A_vIRQD    0x10
+#define VIA2A_vIRQC    0x08
+#define VIA2A_vIRQB    0x04
+#define VIA2A_vIRQA    0x02
+#define VIA2A_vIRQ9    0x01
+
+/*
+ *     Register B has the fun stuff in it
+ */
+
+#define VIA2B_vPower   0x04    /* Off switch */
+#define VIA2B_vBusLk   0x02
+#define VIA2B_vCDis    0x01
+
+extern __inline__ void via_write(unsigned char *via,int reg, int v)
+{
+       via[reg]=v;
+}
+
+extern __inline__ int via_read(unsigned char *via,int reg)
+{
+       return (int)via[reg];
+}
+
+extern unsigned char *via1,*via2;
+
+/*
+ *     6522 registers - see databook
+ */
+
+#define vBufB  0x0000
+#define vDirB  0x0400
+#define vDirA  0x0600
+#define vT1CL  0x0800
+#define vT1CH  0x0a00
+#define vT1LL  0x0c00
+#define vT1LH  0x0e00
+#define vT2CL  0x1000
+#define vT2CH  0x1200
+#define vSR    0x1400
+#define vACR   0x1600
+#define vPCR   0x1800
+#define vIFR   0x1a00
+#define vIER   0x1c00
+#define vBufA  0x1e00  /* register A */
+
+/*
+ *     VIA interrupt
+ */
+
+struct via_irq_tab
+{
+       void (*vector[8])(int, void *, struct pt_regs *);
+};
+
+extern void via1_irq(int, void *, struct pt_regs *);
+extern void via2_irq(int, void *, struct pt_regs *);
+
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/arch/m68k/mm/memory.c linux-2.0.29/arch/m68k/mm/memory.c
--- linux.vanilla/arch/m68k/mm/memory.c Wed Feb 19 14:44:42 1997
+++ linux-2.0.29/arch/m68k/mm/memory.c  Tue Mar 25 17:55:20 1997
@@ -288,8 +288,18 @@
       unsigned long voff = vaddr;
       unsigned long offset = 0;

+       if(boot_info.memory[0].size==0)
+       {
+               mac_boom(2);
+       }
+
       for (i = 0; i < boot_info.num_memory; i++)
       {
+#if 0
+               printk("Want %lx virtual, Try slot %d (%lx,%lx)\n",
+                       vaddr, i, boot_info.memory[i].addr,
+                               boot_info.memory[i].size);
+#endif
               if (voff < offset + boot_info.memory[i].size) {
#ifdef DEBUGPV
                       printk ("VTOP(%lx)=%lx\n", vaddr,
Binary files linux.vanilla/drivers/char/conmakehash and linux-2.0.29/drivers/char/conmakehash differ
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/include/asm-m68k/setup.h linux-2.0.29/include/asm-m68k/setup.h
--- linux.vanilla/include/asm-m68k/setup.h      Thu Feb 27 17:42:23 1997
+++ linux-2.0.29/include/asm-m68k/setup.h       Tue Mar 25 18:59:19 1997
@@ -185,6 +185,43 @@

#endif /* __ASSEMBLY__ */

+#ifndef __ASSEMBLY__
+
+struct bi_Macintosh
+{
+       unsigned long videoaddr;
+       unsigned long videorow;
+       unsigned long videodepth;
+       unsigned long dimensions;
+       unsigned long args;
+       unsigned long boottime;
+       unsigned long gmtbias;
+       unsigned long bootver;
+       unsigned long videological;
+       unsigned long scc;
+       unsigned long id;
+       unsigned long memsize;
+       unsigned long serialmf;
+       unsigned long serialhsk;
+       unsigned long serialgpi;
+       unsigned long printf;
+       unsigned long printhsk;
+       unsigned long printgpi;
+       unsigned long cpuid;
+       unsigned long rombase;
+       unsigned long adbdelay;
+       unsigned long timedbra;
+};
+
+#else
+
+#define BI_videoaddr   BI_un
+#define BI_videorow    BI_videoaddr+4
+#define BI_videodepth  BI_videorow+4
+#define BI_dimensions  BI_videodepth+4
+#define BI_args                BI_dimensions+4
+#endif
+
#define NUM_MEMINFO  4

#define MACH_AMIGA   1
@@ -241,8 +278,13 @@
#  define MACH_TYPE (MACH_ATARI)
#endif

+/*
+ *     FIXME:  When we have the booter we can multiarch this
+ */
+
#if defined(CONFIG_MAC)
-#  error Currently no Mac support!
+#  define MAC_TYPE (MACH_MAC)
+#  define MACH_IS_MAC (1)
#endif

#ifndef MACH_TYPE
@@ -336,6 +378,7 @@
       union {
               struct bi_Amiga bi_ami;         /* Amiga specific information */
               struct bi_Atari bi_ata;         /* Atari specific information */
+               struct bi_Macintosh bi_mac;     /* Mac specific information */
       } bi_un;
};
#define bi_amiga bi_un.bi_ami
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/include/linux/compile.h linux-2.0.29/include/linux/compile.h
--- linux.vanilla/include/linux/compile.h       Thu Jan  1 01:00:00 1970
+++ linux-2.0.29/include/linux/compile.h        Tue Mar 25 18:59:48 1997
@@ -0,0 +1,6 @@
+#define UTS_VERSION "#245 Tue Mar 25 18:59:46 GMT 1997"
+#define LINUX_COMPILE_TIME "18:59:46"
+#define LINUX_COMPILE_BY "alan"
+#define LINUX_COMPILE_HOST "blacksun"
+#define LINUX_COMPILE_DOMAIN "cymru.net"
+#define LINUX_COMPILER "gcc version 2.7.2.2"
diff --recursive --unified --new-file --exclude-from exclude linux.vanilla/init/main.c linux-2.0.29/init/main.c
--- linux.vanilla/init/main.c   Wed Dec  4 22:38:06 1996
+++ linux-2.0.29/init/main.c    Tue Mar 25 18:38:17 1997
@@ -39,6 +39,9 @@

#include <asm/bugs.h>

+#include <asm/setup.h> /*AC*/
+#include <linux/console.h> /*AC*/
+
/*
 * Versions of gcc older than that listed below may actually compile
 * and link okay, but the end product can have subtle run time bugs.
@@ -789,8 +792,15 @@

asmlinkage void start_kernel(void)
{
+       extern unsigned long precookie,postcookie;      /* AC*/
       char * command_line;

+       extern struct consw fb_con;
+       extern u_long fbcon_startup(u_long, char **);
+
+       if(fb_con.con_startup!=fbcon_startup)
+               mac_boom(1);
+
/*
 *     This little check will move.
 */
@@ -833,12 +843,16 @@
               memory_start += prof_len * sizeof(unsigned int);
               memset(prof_buffer, 0, prof_len * sizeof(unsigned int));
       }
+       mac_debugging_penguin(1);
       memory_start = console_init(memory_start,memory_end);
+/*     mac_debugging_penguin(2);*/
#ifdef CONFIG_PCI
       memory_start = pci_init(memory_start,memory_end);
#endif
       memory_start = kmalloc_init(memory_start,memory_end);
       sti();
+       printk("Memory start=%p, Memory end=%p\n",
+               memory_start,memory_end);
       calibrate_delay();
       memory_start = inode_init(memory_start,memory_end);
       memory_start = file_table_init(memory_start,memory_end);
Binary files linux.vanilla/scripts/mkdep and linux-2.0.29/scripts/mkdep differ