From 53eb5cac49615b64982a4d6de05d583b89c8fd78 Mon Sep 17 00:00:00 2001 From: InvisibleUp Date: Tue, 11 Feb 2020 00:09:00 -0500 Subject: [PATCH] Split up Happy Mac icons into XBMs --- .gitmodules | 3 + src/HPMCHACK.h | 261 --------------------- src/PATCHES/HAPPYMAC/HPMCHACK.h | 94 ++++++++ src/PATCHES/HAPPYMAC/aside.xbm | 14 ++ src/PATCHES/HAPPYMAC/cheese.xbm | 14 ++ src/PATCHES/HAPPYMAC/evil.xbm | 14 ++ src/PATCHES/HAPPYMAC/happy-mac-options.png | Bin 0 -> 10449 bytes src/PATCHES/HAPPYMAC/horror.xbm | 14 ++ src/PATCHES/HAPPYMAC/lady.xbm | 14 ++ src/PATCHES/HAPPYMAC/moustache.xbm | 14 ++ src/PATCHES/HAPPYMAC/nerdy.xbm | 14 ++ src/PATCHES/HAPPYMAC/pirate.xbm | 14 ++ src/PATCHES/HAPPYMAC/sleepy.xbm | 14 ++ src/PATCHES/HAPPYMAC/sly.xbm | 14 ++ src/PATCHES/HAPPYMAC/sunglasses.xbm | 14 ++ src/PATCHES/HAPPYMAC/surprise.xbm | 14 ++ src/PATCHES/HAPPYMAC/tongue.xbm | 14 ++ src/PATCHES/HAPPYMAC/yuck.xbm | 14 ++ src/PATCHES/HAPPYMAC/zombie.xbm | 14 ++ src/incbin | 1 + 20 files changed, 308 insertions(+), 261 deletions(-) create mode 100644 .gitmodules delete mode 100644 src/HPMCHACK.h create mode 100644 src/PATCHES/HAPPYMAC/HPMCHACK.h create mode 100644 src/PATCHES/HAPPYMAC/aside.xbm create mode 100644 src/PATCHES/HAPPYMAC/cheese.xbm create mode 100644 src/PATCHES/HAPPYMAC/evil.xbm create mode 100644 src/PATCHES/HAPPYMAC/happy-mac-options.png create mode 100644 src/PATCHES/HAPPYMAC/horror.xbm create mode 100644 src/PATCHES/HAPPYMAC/lady.xbm create mode 100644 src/PATCHES/HAPPYMAC/moustache.xbm create mode 100644 src/PATCHES/HAPPYMAC/nerdy.xbm create mode 100644 src/PATCHES/HAPPYMAC/pirate.xbm create mode 100644 src/PATCHES/HAPPYMAC/sleepy.xbm create mode 100644 src/PATCHES/HAPPYMAC/sly.xbm create mode 100644 src/PATCHES/HAPPYMAC/sunglasses.xbm create mode 100644 src/PATCHES/HAPPYMAC/surprise.xbm create mode 100644 src/PATCHES/HAPPYMAC/tongue.xbm create mode 100644 src/PATCHES/HAPPYMAC/yuck.xbm create mode 100644 src/PATCHES/HAPPYMAC/zombie.xbm create mode 160000 src/incbin diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..503d6fc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/incbin"] + path = src/incbin + url = https://github.com/graphitemaster/incbin diff --git a/src/HPMCHACK.h b/src/HPMCHACK.h deleted file mode 100644 index bbaaeb1..0000000 --- a/src/HPMCHACK.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - HPMCHACK.c - - Copyright (C) 2016 Steve Chamberlin, Paul C. Pratt - - You can redistribute this file and/or modify it under the terms - of version 2 of the GNU General Public License as published by - the Free Software Foundation. You should have received a copy - of the license along with this file; see the file COPYING. - - This file 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 - license for more details. -*/ - -/* - HaPpy MaCintosh Hack - - Patch the ROM for alternatives to the - Happy Macintosh icon displayed on boot - when a disk is inserted. -*/ - -#define kAHM_aside 0 -#define kAHM_cheese 1 -#define kAHM_evil 2 -#define kAHM_horror 3 -#define kAHM_lady_mac 4 -#define kAHM_moustache 5 -#define kAHM_nerdy 6 -#define kAHM_pirate 7 -#define kAHM_sleepy 8 -#define kAHM_sly 9 -#define kAHM_sunglasses 10 -#define kAHM_surprise 11 -#define kAHM_tongue 12 -#define kAHM_yuck 13 -#define kAHM_zombie 14 - -LOCALVAR const uint8_t my_HappyMac_icon[] = { -#if CurAltHappyMac == kAHM_aside - 0x00, 0x00, - 0x39, 0x38, - 0x21, 0x20, - 0x01, 0x00, - 0x01, 0x00, - 0x03, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x80, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_cheese - 0x10, 0x10, - 0x28, 0x28, - 0x00, 0x00, - 0x00, 0x00, - 0x3F, 0xF8, - 0x20, 0x08, - 0x20, 0x08, - 0x20, 0x08, - 0x10, 0x10, - 0x0F, 0xE0, -#endif -#if CurAltHappyMac == kAHM_evil - 0x00, 0x00, - 0x10, 0x10, - 0x08, 0x20, - 0x0C, 0x60, - 0x00, 0x00, - 0x20, 0x08, - 0x20, 0x08, - 0x1F, 0xF0, - 0x00, 0x00, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_horror - 0x38, 0x38, - 0x44, 0x44, - 0x44, 0x44, - 0x44, 0x44, - 0x38, 0x38, - 0x03, 0x80, - 0x03, 0x80, - 0x03, 0x80, - 0x03, 0x80, - 0x03, 0x80 -#endif -#if CurAltHappyMac == kAHM_lady_mac - 0x38, 0x38, - 0x45, 0x44, - 0x55, 0x54, - 0x45, 0x44, - 0x39, 0x38, - 0x03, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x07, 0x80, - 0x03, 0x00 -#endif -#if CurAltHappyMac == kAHM_moustache - 0x00, 0x00, - 0x11, 0x10, - 0x11, 0x10, - 0x01, 0x00, - 0x01, 0x00, - 0x03, 0x00, - 0x1F, 0xE0, - 0x00, 0x00, - 0x08, 0x40, - 0x07, 0x80 -#endif -#if CurAltHappyMac == kAHM_nerdy - 0x38, 0x38, - 0x45, 0x45, - 0xD7, 0xD6, - 0x45, 0x44, - 0x39, 0x38, - 0x03, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x0F, 0xC0, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_pirate - 0x00, 0x81, - 0x00, 0x7E, - 0x11, 0x7E, - 0x11, 0x3C, - 0x01, 0x3C, - 0x01, 0x18, - 0x03, 0x00, - 0x00, 0x00, - 0x08, 0x40, - 0x07, 0x80 -#endif -#if CurAltHappyMac == kAHM_sleepy - 0x00, 0x00, - 0x1C, 0x70, - 0x22, 0x88, - 0x00, 0x00, - 0x1C, 0x70, - 0x08, 0x20, - 0x00, 0x00, - 0x00, 0x00, - 0x03, 0x80, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_sly - 0x00, 0x00, - 0x08, 0x20, - 0x14, 0x50, - 0x00, 0x00, - 0x00, 0x00, - 0x20, 0x08, - 0x3F, 0xF8, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_sunglasses - 0x00, 0x00, - 0xFF, 0xFE, - 0x7D, 0x7C, - 0x7D, 0x7C, - 0x39, 0x38, - 0x03, 0x00, - 0x00, 0x00, - 0x1F, 0xF0, - 0x00, 0x00, - 0x00, 0x00 -#endif -#if CurAltHappyMac == kAHM_surprise - 0x1C, 0x70, - 0x22, 0x88, - 0x41, 0x04, - 0x49, 0x24, - 0x41, 0x04, - 0x22, 0x88, - 0x1C, 0x70, - 0x01, 0x00, - 0x03, 0x80, - 0x03, 0x80 -#endif -#if CurAltHappyMac == kAHM_tongue - 0x00, 0x00, - 0x1E, 0x78, - 0x00, 0x00, - 0x00, 0x00, - 0x20, 0x04, - 0x3F, 0xFC, - 0x05, 0x40, - 0x05, 0x40, - 0x04, 0x40, - 0x03, 0x80 -#endif -#if CurAltHappyMac == kAHM_yuck - 0x00, 0x00, - 0x18, 0x30, - 0x04, 0x40, - 0x02, 0x80, - 0x00, 0x00, - 0x00, 0x00, - 0x1F, 0xF0, - 0x15, 0x50, - 0x04, 0x40, - 0x03, 0x80 -#endif -#if CurAltHappyMac == kAHM_zombie - 0x70, 0x7C, - 0x88, 0x82, - 0x88, 0x8A, - 0xA8, 0x8A, - 0x70, 0x82, - 0x00, 0x42, - 0x00, 0x3C, - 0x1E, 0x00, - 0x3F, 0x00, - 0x3F, 0x00 -#endif -}; - -#if CurEmMd <= kEmMd_Twig43 -#define HappyMacBase 0xA34 -#elif CurEmMd <= kEmMd_Twiggy -#define HappyMacBase 0x8F4 -#elif CurEmMd <= kEmMd_128K -#define HappyMacBase 0x8A0 -#elif CurEmMd <= kEmMd_Plus -#define HappyMacBase 0xFD2 -#elif CurEmMd <= kEmMd_Classic -#define HappyMacBase 0x125C -#elif CurEmMd <= kEmMd_PB100 -#define HappyMacBase 0x2BB0 -#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) -#define HappyMacBase 0x1948 -#endif - -LOCALPROC PatchHappyMac(void) -{ -#if (CurEmMd == kEmMd_PB100) \ - || (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) - - int i; - uint8_t *dst = HappyMacBase + ROM + 0x18; - uint8_t *src = (uint8_t *)my_HappyMac_icon; - - for (i = 10; --i >= 0; ) { - ++dst; - *dst++ = *src++; - *dst++ = *src++; - ++dst; - } - -#else - MoveBytes((anyp)my_HappyMac_icon, - (anyp)(HappyMacBase + ROM), - sizeof(my_HappyMac_icon)); -#endif -} diff --git a/src/PATCHES/HAPPYMAC/HPMCHACK.h b/src/PATCHES/HAPPYMAC/HPMCHACK.h new file mode 100644 index 0000000..ff10025 --- /dev/null +++ b/src/PATCHES/HAPPYMAC/HPMCHACK.h @@ -0,0 +1,94 @@ +/* + HPMCHACK.c + + Copyright (C) 2016 Steve Chamberlin, Paul C. Pratt + + You can redistribute this file and/or modify it under the terms + of version 2 of the GNU General Public License as published by + the Free Software Foundation. You should have received a copy + of the license along with this file; see the file COPYING. + + This file 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 + license for more details. +*/ + +/* + HaPpy MaCintosh Hack + + Patch the ROM for alternatives to the + Happy Macintosh icon displayed on boot + when a disk is inserted. + + Bitmaps from http://www.bigmessowires.com/mac-rom-inator/ +*/ + +#include +#include "SYSDEPNS.h" +#include "COMOSGLU.h" + +// Enum of alternate icons +typedef enum AHM_types { + kAHM_aside, + kAHM_cheese, + kAHM_evil, + kAHM_horror, + kAHM_lady_mac, + kAHM_moustache, + kAHM_nerdy, + kAHM_pirate, + kAHM_sleepy, + kAHM_sly, + kAHM_sunglasses, + kAHM_surprise, + kAHM_tongue, + kAHM_yuck, + kAHM_zombie +} AHM_t; + +// Bitmap includes +#include "aside.xbm" +#include "cheese.xbm" +#include "evil.xbm" +#include "horror.xbm" +#include "lady.xbm" +#include "moustache.xbm" +#include "nerdy.xbm" +#include "pirate.xbm" +#include "sleepy.xbm" +#include "sly.xbm" +#include "sunglasses.xbm" +#include "surprise.xbm" +#include "tongue.xbm" +#include "yuck.xbm" +#include "zombie.xbm" + +// Lookup table +unsigned char * HMAC_BITS[] = { + HMAC_ASIDE_BITS, + HMAC_CHEESE_BITS +}; + +#if CurEmMd <= kEmMd_Twig43 +#define HappyMacBase 0xA34 +#elif CurEmMd <= kEmMd_Twiggy +#define HappyMacBase 0x8F4 +#elif CurEmMd <= kEmMd_128K +#define HappyMacBase 0x8A0 +#elif CurEmMd <= kEmMd_Plus +#define HappyMacBase 0xFD2 +#elif CurEmMd <= kEmMd_Classic +#define HappyMacBase 0x125C +#elif CurEmMd <= kEmMd_PB100 +#define HappyMacBase 0x2BB0 - 0x18 +#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx) +#define HappyMacBase 0x1948 - 0x18 +#endif + +LOCALPROC PatchHappyMac(AHM_t ahm) +{ + uint8_t *dst = ROM + HappyMacBase + 0x18; + uint8_t *src = HMAC_BITS[ahm]; + memcpy(dst, src, 20); +} diff --git a/src/PATCHES/HAPPYMAC/aside.xbm b/src/PATCHES/HAPPYMAC/aside.xbm new file mode 100644 index 0000000..74081ed --- /dev/null +++ b/src/PATCHES/HAPPYMAC/aside.xbm @@ -0,0 +1,14 @@ +#define HMAC_ASIDE_WIDTH 16 +#define HMAC_ASIDE_HEIGHT 10 +static unsigned char HMAC_ASIDE_BITS[] = { + 0x00, 0x00, + 0x39, 0x38, + 0x21, 0x20, + 0x01, 0x00, + 0x01, 0x00, + 0x03, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x07, 0x80, + 0x00, 0x00 +}; \ No newline at end of file diff --git a/src/PATCHES/HAPPYMAC/cheese.xbm b/src/PATCHES/HAPPYMAC/cheese.xbm new file mode 100644 index 0000000..a677c6f --- /dev/null +++ b/src/PATCHES/HAPPYMAC/cheese.xbm @@ -0,0 +1,14 @@ +#define HMAC_CHEESE_WIDTH 16 +#define HMAC_CHEESE_HEIGHT 10 +static unsigned char HMAC_CHEESE_BITS[] = { + 0x10, 0x10, + 0x28, 0x28, + 0x00, 0x00, + 0x00, 0x00, + 0x3F, 0xF8, + 0x20, 0x08, + 0x20, 0x08, + 0x20, 0x08, + 0x10, 0x10, + 0x0F, 0xE0, +}; \ No newline at end of file diff --git a/src/PATCHES/HAPPYMAC/evil.xbm b/src/PATCHES/HAPPYMAC/evil.xbm new file mode 100644 index 0000000..46daeca --- /dev/null +++ b/src/PATCHES/HAPPYMAC/evil.xbm @@ -0,0 +1,14 @@ +#define HMAC_EVIL_WIDTH 16 +#define HMAC_EVIL_HEIGHT 10 +static unsigned char HMAC_EVIL_BITS[] = { + 0x00, 0x00, + 0x10, 0x10, + 0x08, 0x20, + 0x0C, 0x60, + 0x00, 0x00, + 0x20, 0x08, + 0x20, 0x08, + 0x1F, 0xF0, + 0x00, 0x00, + 0x00, 0x00 +}; \ No newline at end of file diff --git a/src/PATCHES/HAPPYMAC/happy-mac-options.png b/src/PATCHES/HAPPYMAC/happy-mac-options.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcb1499423f3d622fe1b756f56824403e614dc9 GIT binary patch literal 10449 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