Reorganize patch files, add Visual Studio support for bins
3
.gitignore
vendored
@ -6,4 +6,5 @@ bld
|
||||
*.ROM
|
||||
*.kdev4
|
||||
*.pdb
|
||||
build/
|
||||
build/
|
||||
.vs/*
|
@ -36,9 +36,12 @@ add_library(
|
||||
hw_disk OBJECT
|
||||
src/HW/DISK/IWMEMDEV.c
|
||||
src/HW/DISK/SONYEMDV.c
|
||||
src/PATCHES/SONYDRV.c
|
||||
)
|
||||
target_include_directories(hw_disk PRIVATE src/ cfg/)
|
||||
target_include_directories(hw_disk PRIVATE src/ cfg/ rsrc/)
|
||||
target_include_directories(hw_disk PRIVATE src/HW/DISK/)
|
||||
configure_file(rsrc/SONYDRV.bin SONYDRV.bin COPYONLY)
|
||||
configure_file(rsrc/SONYICO.bin SONYICO.bin COPYONLY)
|
||||
|
||||
add_library(
|
||||
hw_kbrd OBJECT
|
||||
@ -90,6 +93,7 @@ target_include_directories(hw_scc PRIVATE src/HW/SCC/)
|
||||
add_library(
|
||||
hw_screen OBJECT
|
||||
src/HW/SCREEN/SCRNEMDV.c
|
||||
src/PATCHES/SCRNHACK.c
|
||||
)
|
||||
target_include_directories(hw_screen PRIVATE src/ cfg/)
|
||||
target_include_directories(hw_screen PRIVATE src/HW/SCREEN/)
|
||||
@ -170,13 +174,13 @@ add_library(
|
||||
src/UI/WIN32/OSGLUWIN.c
|
||||
src/UI/WIN32/SOUND.c
|
||||
src/UI/WIN32/TIMEDATE.c
|
||||
src/UI/WIN32/main.rc
|
||||
rsrc/WIN32/main.rc
|
||||
)
|
||||
target_include_directories(ui_win32 PRIVATE cfg/ src/)
|
||||
target_include_directories(ui_win32 PRIVATE cfg/ src/ rsrc/)
|
||||
target_include_directories(ui_win32 PRIVATE src/UI/ src/UI/WIN32/)
|
||||
configure_file(src/UI/WIN32/ICONAPPW.ico ICONAPPW.ico COPYONLY)
|
||||
configure_file(src/UI/WIN32/ICONDSKW.ico ICONDSKW.ico COPYONLY)
|
||||
configure_file(src/UI/WIN32/ICONROMW.ico ICONROMW.ico COPYONLY)
|
||||
configure_file(rsrc/WIN32/ICONAPPW.ico ICONAPPW.ico COPYONLY)
|
||||
configure_file(rsrc/WIN32/ICONDSKW.ico ICONDSKW.ico COPYONLY)
|
||||
configure_file(rsrc/WIN32/ICONROMW.ico ICONROMW.ico COPYONLY)
|
||||
target_link_libraries(ui_win32 PUBLIC winmm ole32 uuid)
|
||||
|
||||
#add_library(
|
||||
@ -200,7 +204,6 @@ target_include_directories(microvmac PRIVATE cfg/ src/)
|
||||
set_target_properties(microvmac PROPERTIES C_STANDARD 99 C_STANDARD_REQUIRED True)
|
||||
#target_link_libraries(microvmac INTERFACE tgt_macplus) # temporary
|
||||
target_link_libraries(microvmac PRIVATE incbin ui_win32)
|
||||
configure_file(src/PATCHES/SONY.bin SONY.bin COPYONLY)
|
||||
|
||||
# temporary, because "INTERFACE" isn't working how I expect it to
|
||||
target_link_libraries(
|
||||
|
49
Makefile
@ -1,49 +0,0 @@
|
||||
# Makefile
|
||||
# Currently only builds Mac Plus emulator for Windows x64 or Linux X11
|
||||
|
||||
CC := gcc
|
||||
CCFLAGS := -O2 -Wall -Wmissing-prototypes -Wno-uninitialized -Wundef -Wstrict-prototypes -Icfg/ -Isrc/
|
||||
|
||||
.PHONY: linux windows clean
|
||||
|
||||
SrcFiles := \
|
||||
src/PROGMAIN.c \
|
||||
src/GLOBGLUE.c \
|
||||
src/HW/M68K/M68KITAB.c \
|
||||
src/HW/M68K/MINEM68K.c \
|
||||
src/HW/VIA/VIAEMDEV.c \
|
||||
src/HW/DISK/IWMEMDEV.c \
|
||||
src/HW/SCC/SCCEMDEV.c \
|
||||
src/HW/RTC/RTCEMDEV.c \
|
||||
src/PATCHES/ROMEMDEV.c \
|
||||
src/HW/SCSI/SCSIEMDV.c \
|
||||
src/HW/DISK/SONYEMDV.c \
|
||||
src/HW/SCREEN/SCRNEMDV.c \
|
||||
src/HW/MOUSE/MOUSEMDV.c \
|
||||
src/HW/KBRD/KBRDEMDV.c \
|
||||
src/HW/SOUND/SNDEMDEV.c \
|
||||
src/UTIL/DATE2SEC.c \
|
||||
src/UI/COMOSGLU.c \
|
||||
src/UI/CONTROLM.c \
|
||||
|
||||
Win32Files := \
|
||||
src/UI/WIN32/OSGLUWIN.c \
|
||||
src/UI/WIN32/INTLKBRD.c \
|
||||
src/UI/WIN32/DBGLOG.c \
|
||||
src/UI/WIN32/KEYBOARD.c \
|
||||
src/UI/WIN32/SOUND.c \
|
||||
src/UI/WIN32/TIMEDATE.c \
|
||||
|
||||
windows :
|
||||
mkdir -p "bld/"
|
||||
windres -i "src/UI/WIN32/main.rc" --input-format=rc -o "bld/main.res" -O coff --include-dir "src/"
|
||||
$(CC) -o "microvmac.exe" $(SrcFiles) $(Win32Files) \
|
||||
"bld/main.res" $(CCFLAGS) -mwindows -lwinmm -lole32 -luuid
|
||||
|
||||
linux :
|
||||
mkdir -p "bld/"
|
||||
$(CC) -o "microvmac.exe" $(SrcFiles) "src/UI/UNIX/OSGLUXWN.c" $(CCFLAGS) -lX11 -ldl
|
||||
|
||||
clean :
|
||||
rm -r "bld/"
|
||||
rm "microvmac.exe"
|
@ -10,7 +10,7 @@
|
||||
#ifndef EMCONFIG_H
|
||||
#define EMCONFIG_H
|
||||
|
||||
//#define CurEmMd kEmMd_Plus
|
||||
#define CurEmMd kEmMd_Plus
|
||||
|
||||
#define MaxATTListN 32
|
||||
#define IncludeExtnPbufs 1
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
BIN
rsrc/SONYICO.bin
Normal file
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
rsrc/WIN32/main.aps
Normal file
33
rsrc/WIN32/main.rc
Normal file
@ -0,0 +1,33 @@
|
||||
//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
// Icons
|
||||
ICO_APP ICON DISCARDABLE "ICONAPPW.ico"
|
||||
ICO_DSK ICON DISCARDABLE "ICONDSKW.ico"
|
||||
ICO_ROM ICON DISCARDABLE "ICONROMW.ico"
|
||||
|
||||
// Binary data
|
||||
SONY_DRV RCDATA "SONYDRV.bin"
|
||||
SONY_ICO RCDATA "SONYICO.bin"
|
||||
|
||||
// Version information
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 0,37,0,0
|
||||
PRODUCTVERSION 0,37,0,0
|
||||
FILESUBTYPE 0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "InvisibleUp\0"
|
||||
VALUE "Comments", ""
|
||||
VALUE "FileDescription", "A 68k Macintosh emulator\0"
|
||||
VALUE "FileVersion", "v0.37.0\0"
|
||||
VALUE "InternalName", "microvmac\0"
|
||||
VALUE "LegalCopyright", "©1996-2020 various contributors. Licensed under the GPL v2.\0"
|
||||
VALUE "OriginalFilename", "microvmac.exe\0"
|
||||
VALUE "ProductName", "micro vMac\0"
|
||||
VALUE "ProductVersion", "v0.37.0\0"
|
||||
END
|
||||
END
|
||||
END
|
@ -19,6 +19,7 @@
|
||||
|
||||
#include "CNFGRAPI.h"
|
||||
#include "EMCONFIG.h"
|
||||
#include "SYSDEPNS.h"
|
||||
|
||||
#define kEmMd_Twig43 0
|
||||
#define kEmMd_Twiggy 1
|
||||
|
@ -25,174 +25,13 @@
|
||||
Support for "Twiggy" Mac by Mathew Hybler.
|
||||
*/
|
||||
|
||||
#ifndef AllFiles
|
||||
#include "EMCONFIG.h"
|
||||
#include "SYSDEPNS.h"
|
||||
#include "GLOBGLUE.h"
|
||||
#include "UI/MYOSGLUE.h"
|
||||
#include "UTIL/ENDIANAC.h"
|
||||
#include "EMCONFIG.h"
|
||||
#include "GLOBGLUE.h"
|
||||
#endif
|
||||
|
||||
#include "incbin/incbin.h"
|
||||
#include "PATCHES/ROMEMDEV.h"
|
||||
|
||||
// Temporarily disable due to CMake errors
|
||||
/*#define UseSonyPatch \
|
||||
((CurEmMd <= kEmMd_Classic) || (CurEmMd == kEmMd_II) \
|
||||
|| (CurEmMd == kEmMd_IIx))*/
|
||||
|
||||
#ifndef UseLargeScreenHack
|
||||
#define UseLargeScreenHack 0
|
||||
#endif
|
||||
|
||||
#if UseSonyPatch
|
||||
/*
|
||||
Replacement for .Sony driver
|
||||
68k machine code, compiled from mydriver.a
|
||||
*/
|
||||
INCBIN(SonyDriver, "SONY.bin");
|
||||
#endif
|
||||
|
||||
#if UseSonyPatch
|
||||
LOCALVAR const uint8_t disk_icon[] = {
|
||||
0x7F, 0xFF, 0xFF, 0xF0,
|
||||
0x81, 0x00, 0x01, 0x08,
|
||||
0x81, 0x00, 0x71, 0x04,
|
||||
0x81, 0x00, 0x89, 0x02,
|
||||
0x81, 0x00, 0x89, 0x01,
|
||||
0x81, 0x00, 0x89, 0x01,
|
||||
0x81, 0x00, 0x89, 0x01,
|
||||
0x81, 0x00, 0x89, 0x01,
|
||||
0x81, 0x00, 0x89, 0x01,
|
||||
0x81, 0x00, 0x71, 0x01,
|
||||
0x81, 0x00, 0x01, 0x01,
|
||||
0x80, 0xFF, 0xFE, 0x01,
|
||||
0x80, 0x00, 0x00, 0x01,
|
||||
0x80, 0x00, 0x00, 0x01,
|
||||
0x80, 0x00, 0x00, 0x01,
|
||||
0x80, 0x00, 0x00, 0x01,
|
||||
0x83, 0xFF, 0xFF, 0xC1,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x06, 0x30, 0x21,
|
||||
0x84, 0x06, 0x60, 0x21,
|
||||
0x84, 0x06, 0xC0, 0x21,
|
||||
0x84, 0x07, 0x80, 0x21,
|
||||
0x84, 0x07, 0x00, 0x21,
|
||||
0x84, 0x06, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x84, 0x00, 0x00, 0x21,
|
||||
0x7F, 0xFF, 0xFF, 0xFE,
|
||||
|
||||
/* mask */
|
||||
|
||||
0x3F, 0xFF, 0xFF, 0xF0,
|
||||
0x7F, 0xFF, 0xFF, 0xF0,
|
||||
0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x7F, 0xFF, 0xFF, 0xFC,
|
||||
0x3F, 0xFF, 0xFF, 0xFC,
|
||||
|
||||
/* empty pascal string */
|
||||
0x00, 0x00,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if CurEmMd <= kEmMd_Twig43
|
||||
#define Sony_DriverBase 0x1836
|
||||
#elif CurEmMd <= kEmMd_Twiggy
|
||||
#define Sony_DriverBase 0x16E4
|
||||
#elif CurEmMd <= kEmMd_128K
|
||||
#define Sony_DriverBase 0x1690
|
||||
#elif CurEmMd <= kEmMd_Plus
|
||||
#define Sony_DriverBase 0x17D30
|
||||
#elif CurEmMd <= kEmMd_Classic
|
||||
#define Sony_DriverBase 0x34680
|
||||
#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx)
|
||||
#define Sony_DriverBase 0x2D72C
|
||||
#endif
|
||||
|
||||
#define kVidMem_Base 0x00540000
|
||||
|
||||
#if UseSonyPatch
|
||||
LOCALPROC Sony_Install(void)
|
||||
{
|
||||
uint8_t * pto = Sony_DriverBase + ROM;
|
||||
|
||||
MoveBytes((anyp)gSonyDriverData, (anyp)pto, gSonyDriverSize);
|
||||
#if CurEmMd <= kEmMd_Twiggy
|
||||
do_put_mem_long(pto + 0x14, 0x4469736B);
|
||||
/* 'Disk' instead of 'Sony' */
|
||||
#if CurEmMd <= kEmMd_Twig43
|
||||
do_put_mem_word(pto + 0xEA, 0x0C8A);
|
||||
#else
|
||||
do_put_mem_word(pto + 0xEA, 0x0B74);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
pto += gSonyDriverSize;
|
||||
|
||||
do_put_mem_word(pto, kcom_callcheck);
|
||||
pto += 2;
|
||||
do_put_mem_word(pto, kExtnSony);
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kExtn_Block_Base); /* pokeaddr */
|
||||
pto += 4;
|
||||
|
||||
disk_icon_addr = (pto - ROM) + kROM_Base;
|
||||
MoveBytes((anyp)disk_icon, (anyp)pto, sizeof(disk_icon));
|
||||
pto += sizeof(disk_icon);
|
||||
|
||||
#if UseLargeScreenHack
|
||||
{
|
||||
uint8_t * patchp = pto;
|
||||
|
||||
#include "PATCHES/SCRNHACK.h"
|
||||
}
|
||||
#endif
|
||||
|
||||
(void) pto; /* avoid warning about unused */
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef DisableRomCheck
|
||||
#define DisableRomCheck 1
|
||||
#endif
|
||||
|
||||
#ifndef DisableRamTest
|
||||
#define DisableRamTest 1
|
||||
#endif
|
||||
|
||||
#ifdef CurAltHappyMac
|
||||
#include "HPMCHACK.h"
|
||||
#endif
|
||||
@ -266,9 +105,8 @@ GLOBALFUNC bool ROM_Init(void)
|
||||
|
||||
/* do_put_mem_word(862 + ROM, 0x4E71); */ /* shorten set memory */
|
||||
|
||||
#if UseSonyPatch
|
||||
Sony_Install();
|
||||
#endif
|
||||
//ScreenHack_Install(); in above fcn temporarily
|
||||
|
||||
#ifdef ln2mtb
|
||||
ROMscrambleForMTB();
|
||||
|
@ -17,6 +17,21 @@
|
||||
#ifndef ROMEMDEV_H
|
||||
#define ROMEMDEV_H
|
||||
|
||||
|
||||
#ifndef UseLargeScreenHack
|
||||
#define UseLargeScreenHack 0
|
||||
#endif
|
||||
#ifndef DisableRomCheck
|
||||
#define DisableRomCheck 1
|
||||
#endif
|
||||
#ifndef DisableRamTest
|
||||
#define DisableRamTest 1
|
||||
#endif
|
||||
|
||||
#define kVidMem_Base 0x00540000
|
||||
|
||||
|
||||
EXPORTFUNC bool ROM_Init(void);
|
||||
|
||||
|
||||
#endif
|
411
src/PATCHES/SCRNHACK.c
Normal file
@ -0,0 +1,411 @@
|
||||
/*
|
||||
PATCHES/SCRNHACK.h
|
||||
|
||||
Copyright (C) 2007 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
SCReeN Hack
|
||||
|
||||
Patch ROM to support other screen sizes.
|
||||
*/
|
||||
|
||||
#include "EMCONFIG.h"
|
||||
#include "SYSDEPNS.h"
|
||||
#include "UI/MYOSGLUE.h"
|
||||
#include "UTIL/ENDIANAC.h"
|
||||
#include "EMCONFIG.h"
|
||||
#include "GLOBGLUE.h"
|
||||
#include "incbin/incbin.h"
|
||||
#include "PATCHES/ROMEMDEV.h"
|
||||
|
||||
void ScreenHack_Install(uint8_t *pto)
|
||||
{
|
||||
uint8_t * patchp = pto;
|
||||
if (!UseLargeScreenHack) {return; }
|
||||
|
||||
#if CurEmMd <= kEmMd_128K
|
||||
do_put_mem_long(112 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(260 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(292 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 24))
|
||||
/ 8);
|
||||
|
||||
/* sad mac, error code */
|
||||
do_put_mem_word(330 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(342 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(350 + ROM, vMacScreenWidth / 4 * 3 - 1);
|
||||
/* sad mac, blink pixels */
|
||||
do_put_mem_word(358 + ROM, vMacScreenWidth - 4);
|
||||
|
||||
do_put_mem_word(456 + ROM,
|
||||
(vMacScreenHeight * vMacScreenWidth / 32) - 1 + 32);
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 862 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(892 + ROM, vMacScreenHeight - 1);
|
||||
do_put_mem_word(894 + ROM, vMacScreenWidth - 1);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(1388 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(1406 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(1966 + ROM, vMacScreenWidth / 8 - 4);
|
||||
do_put_mem_word(1982 + ROM, vMacScreenWidth / 8);
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(2008 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(2020 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(2052 + ROM, vMacScreenWidth / 8 - 2);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 3448 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(3452 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(3572 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(3578 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(3610 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(3616 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 3646 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(3646 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(3832 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(3838 + ROM, vMacScreenWidth);
|
||||
/* do_put_mem_word(7810 + ROM, vMacScreenHeight); */
|
||||
|
||||
#elif CurEmMd <= kEmMd_Plus
|
||||
|
||||
do_put_mem_long(138 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(326 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(356 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 24))
|
||||
/ 8);
|
||||
|
||||
/* sad mac, error code */
|
||||
do_put_mem_word(392 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(404 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(412 + ROM, vMacScreenWidth / 4 * 3 - 1);
|
||||
/* sad mac, blink pixels */
|
||||
do_put_mem_long(420 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 17) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_word(494 + ROM,
|
||||
(vMacScreenHeight * vMacScreenWidth / 32) - 1);
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 1132 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(1140 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(1172 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(1176 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(2016 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(2034 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_word(2574 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(2576 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(3810 + ROM, vMacScreenWidth / 8 - 4);
|
||||
do_put_mem_word(3826 + ROM, vMacScreenWidth / 8);
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(3852 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(3864 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(3894 + ROM, vMacScreenWidth / 8 - 2);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 7372 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave), A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x, D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(7376 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(7496 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(7502 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(7534 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(7540 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 7570 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(7570 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(7784 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(7790 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(7810 + ROM, vMacScreenHeight);
|
||||
|
||||
#if 0
|
||||
/*
|
||||
Haven't got these working. Alert outlines ok, but
|
||||
not contents. Perhaps global position of contents
|
||||
stored in system resource file.
|
||||
*/
|
||||
|
||||
/* perhaps switch disk alert */
|
||||
do_put_mem_word(10936 + ROM, vMacScreenHeight / 2 - 91);
|
||||
do_put_mem_word(10938 + ROM, vMacScreenWidth / 2 - 136);
|
||||
do_put_mem_word(10944 + ROM, vMacScreenHeight / 2 - 19);
|
||||
do_put_mem_word(10946 + ROM, vMacScreenWidth / 2 + 149);
|
||||
|
||||
do_put_mem_word(11008 + ROM, ?);
|
||||
do_put_mem_word(11010 + ROM, ?);
|
||||
|
||||
/* DSAlertRect */
|
||||
do_put_mem_word(4952 + ROM, vMacScreenHeight / 2 - 107);
|
||||
do_put_mem_word(4954 + ROM, vMacScreenWidth / 2 - 236);
|
||||
do_put_mem_word(4958 + ROM, vMacScreenHeight / 2 + 19);
|
||||
do_put_mem_word(4960 + ROM, vMacScreenWidth / 2 + 236);
|
||||
|
||||
do_put_mem_word(5212 + ROM, vMacScreenHeight / 2 - 101);
|
||||
do_put_mem_word(5214 + ROM, vMacScreenWidth / 2 - 218);
|
||||
#endif
|
||||
|
||||
#elif CurEmMd <= kEmMd_Classic
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 1482 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(1490 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(1546 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(1550 + ROM, vMacScreenWidth);
|
||||
|
||||
do_put_mem_word(2252 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(2254 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(3916 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(3934 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_long(4258 + ROM, kVidMem_Base);
|
||||
do_put_mem_word(4264 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(4268 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(4272 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_long(4276 + ROM, vMacScreenNumBytes);
|
||||
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(4490 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(4504 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(4528 + ROM, vMacScreenWidth / 8);
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(4568 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(4586 + ROM, vMacScreenWidth / 8);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 101886 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(101890 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(102010 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(102016 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(102048 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(102054 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 102084 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x, D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5, D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1, A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(102084 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(102298 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(102304 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(102324 + ROM, vMacScreenHeight);
|
||||
|
||||
#endif
|
||||
}
|
@ -1,397 +1,3 @@
|
||||
/*
|
||||
PATCHES/SCRNHACK.h
|
||||
#include <stdint.h>
|
||||
|
||||
Copyright (C) 2007 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
SCReeN Hack
|
||||
|
||||
Patch ROM to support other screen sizes.
|
||||
*/
|
||||
|
||||
|
||||
#if CurEmMd <= kEmMd_128K
|
||||
do_put_mem_long(112 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(260 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(292 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 24))
|
||||
/ 8);
|
||||
|
||||
/* sad mac, error code */
|
||||
do_put_mem_word(330 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(342 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(350 + ROM, vMacScreenWidth / 4 * 3 - 1);
|
||||
/* sad mac, blink pixels */
|
||||
do_put_mem_word(358 + ROM, vMacScreenWidth - 4);
|
||||
|
||||
do_put_mem_word(456 + ROM,
|
||||
(vMacScreenHeight * vMacScreenWidth / 32) - 1 + 32);
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 862 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(892 + ROM, vMacScreenHeight - 1);
|
||||
do_put_mem_word(894 + ROM, vMacScreenWidth - 1);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(1388 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(1406 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(1966 + ROM, vMacScreenWidth / 8 - 4);
|
||||
do_put_mem_word(1982 + ROM, vMacScreenWidth / 8);
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(2008 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(2020 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(2052 + ROM, vMacScreenWidth / 8 - 2);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 3448 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(3452 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(3572 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(3578 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(3610 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(3616 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 3646 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(3646 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(3832 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(3838 + ROM, vMacScreenWidth);
|
||||
/* do_put_mem_word(7810 + ROM, vMacScreenHeight); */
|
||||
|
||||
#elif CurEmMd <= kEmMd_Plus
|
||||
|
||||
do_put_mem_long(138 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(326 + ROM, kVidMem_Base);
|
||||
do_put_mem_long(356 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 24))
|
||||
/ 8);
|
||||
|
||||
/* sad mac, error code */
|
||||
do_put_mem_word(392 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(404 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(412 + ROM, vMacScreenWidth / 4 * 3 - 1);
|
||||
/* sad mac, blink pixels */
|
||||
do_put_mem_long(420 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 + 17) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_word(494 + ROM,
|
||||
(vMacScreenHeight * vMacScreenWidth / 32) - 1);
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 1132 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(1140 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(1172 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(1176 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(2016 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(2034 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_word(2574 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(2576 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(3810 + ROM, vMacScreenWidth / 8 - 4);
|
||||
do_put_mem_word(3826 + ROM, vMacScreenWidth / 8);
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(3852 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(3864 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(3894 + ROM, vMacScreenWidth / 8 - 2);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 7372 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave), A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x, D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(7376 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(7496 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(7502 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(7534 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(7540 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 7570 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(7570 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(7784 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(7790 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(7810 + ROM, vMacScreenHeight);
|
||||
|
||||
#if 0
|
||||
/*
|
||||
Haven't got these working. Alert outlines ok, but
|
||||
not contents. Perhaps global position of contents
|
||||
stored in system resource file.
|
||||
*/
|
||||
|
||||
/* perhaps switch disk alert */
|
||||
do_put_mem_word(10936 + ROM, vMacScreenHeight / 2 - 91);
|
||||
do_put_mem_word(10938 + ROM, vMacScreenWidth / 2 - 136);
|
||||
do_put_mem_word(10944 + ROM, vMacScreenHeight / 2 - 19);
|
||||
do_put_mem_word(10946 + ROM, vMacScreenWidth / 2 + 149);
|
||||
|
||||
do_put_mem_word(11008 + ROM, ?);
|
||||
do_put_mem_word(11010 + ROM, ?);
|
||||
|
||||
/* DSAlertRect */
|
||||
do_put_mem_word(4952 + ROM, vMacScreenHeight / 2 - 107);
|
||||
do_put_mem_word(4954 + ROM, vMacScreenWidth / 2 - 236);
|
||||
do_put_mem_word(4958 + ROM, vMacScreenHeight / 2 + 19);
|
||||
do_put_mem_word(4960 + ROM, vMacScreenWidth / 2 + 236);
|
||||
|
||||
do_put_mem_word(5212 + ROM, vMacScreenHeight / 2 - 101);
|
||||
do_put_mem_word(5214 + ROM, vMacScreenWidth / 2 - 218);
|
||||
#endif
|
||||
|
||||
#elif CurEmMd <= kEmMd_Classic
|
||||
|
||||
/* screen setup, main */
|
||||
{
|
||||
pto = 1482 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
}
|
||||
do_put_mem_word(1490 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(1546 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(1550 + ROM, vMacScreenWidth);
|
||||
|
||||
do_put_mem_word(2252 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(2254 + ROM, vMacScreenWidth);
|
||||
|
||||
/* blink floppy, disk icon */
|
||||
do_put_mem_long(3916 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* blink floppy, question mark */
|
||||
do_put_mem_long(3934 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
|
||||
do_put_mem_long(4258 + ROM, kVidMem_Base);
|
||||
do_put_mem_word(4264 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(4268 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(4272 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_long(4276 + ROM, vMacScreenNumBytes);
|
||||
|
||||
/* sad mac, mac icon */
|
||||
do_put_mem_long(4490 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 16))
|
||||
/ 8);
|
||||
/* sad mac, frown */
|
||||
do_put_mem_long(4504 + ROM, kVidMem_Base
|
||||
+ (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
|
||||
+ (vMacScreenWidth / 2 - 8))
|
||||
/ 8);
|
||||
do_put_mem_word(4528 + ROM, vMacScreenWidth / 8);
|
||||
/* blink floppy and sadmac, position */
|
||||
do_put_mem_word(4568 + ROM, vMacScreenWidth / 8);
|
||||
do_put_mem_word(4586 + ROM, vMacScreenWidth / 8);
|
||||
|
||||
/* cursor handling */
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 101886 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x088C);
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(101890 + ROM, 0x7000 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
do_put_mem_word(102010 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(102016 + ROM, vMacScreenWidth - 32);
|
||||
do_put_mem_word(102048 + ROM, vMacScreenHeight - 16);
|
||||
do_put_mem_word(102054 + ROM, vMacScreenHeight);
|
||||
#if vMacScreenWidth >= 1024
|
||||
pto = 102084 + ROM;
|
||||
do_put_mem_word(pto, 0x4EB9); /* JSR */
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kROM_Base + (patchp - ROM));
|
||||
pto += 4;
|
||||
|
||||
do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x, D5 */
|
||||
patchp += 2;
|
||||
do_put_mem_long(patchp, (vMacScreenWidth / 8));
|
||||
patchp += 4;
|
||||
do_put_mem_word(patchp, 0xC2C5); /* MulU D5, D1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1, A1 */
|
||||
patchp += 2;
|
||||
do_put_mem_word(patchp, 0x4E75); /* RTS */
|
||||
patchp += 2;
|
||||
#else
|
||||
do_put_mem_word(102084 + ROM, 0x7A00 + (vMacScreenWidth / 8));
|
||||
#endif
|
||||
|
||||
/* set up screen bitmap */
|
||||
do_put_mem_word(102298 + ROM, vMacScreenHeight);
|
||||
do_put_mem_word(102304 + ROM, vMacScreenWidth);
|
||||
do_put_mem_word(102324 + ROM, vMacScreenHeight);
|
||||
|
||||
#endif
|
||||
void ScreenHack_Install(uint8_t *pto);
|
95
src/PATCHES/SONYDRV.c
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
Replacement for .Sony driver
|
||||
68k machine code, compiled from mydriver.a
|
||||
Included in the resource file for WIN32 builds
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#ifdef _WINDOWS
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "incbin/incbin.h"
|
||||
|
||||
#include "EMCONFIG.h"
|
||||
#include "GLOBGLUE.h"
|
||||
#include "UTIL/ENDIANAC.h"
|
||||
#include "UI/MYOSGLUE.h"
|
||||
#include "PATCHES/SONYDRV.h"
|
||||
#include "PATCHES/SCRNHACK.h"
|
||||
|
||||
// Include binaries
|
||||
#ifndef _WINDOWS
|
||||
INCBIN(SonyDriver, "SONYDRV.bin");
|
||||
INCBIN(SonyIcon, "SONYICO.bin");
|
||||
#endif
|
||||
|
||||
void Sony_LoadDriver(uint8_t *pto, int *size)
|
||||
{
|
||||
#if defined(gSonyDriverData)
|
||||
memcpy(pto, gSonyDriverData, gSonyDriverSize);
|
||||
*size = gSonyDriverSize;
|
||||
#elif defined(_WINDOWS)
|
||||
HRSRC hDrvInfo = FindResource(NULL, "SONY_DRV", RT_RCDATA);
|
||||
HGLOBAL hDrv = LoadResource(NULL, hDrvInfo);
|
||||
DWORD sDrv = SizeofResource(NULL, hDrvInfo);
|
||||
void *pDrv = LockResource(hDrv);
|
||||
memcpy(pto, pDrv, sDrv);
|
||||
*size = sDrv;
|
||||
#else
|
||||
#error("Unsupported platform/compiler")
|
||||
#endif
|
||||
}
|
||||
|
||||
void Sony_LoadIcon(uint8_t *pto)
|
||||
{
|
||||
disk_icon_addr = (pto - ROM) + kROM_Base;
|
||||
#if defined(gSonyIconData)
|
||||
memcpy(pto, gSonyIcon, gSonyIconSize;
|
||||
pto += sizeof(gSonyIconSize);
|
||||
#elif defined(_WINDOWS)
|
||||
HRSRC hIcoInfo = FindResource(NULL, "SONY_ICO", RT_RCDATA);
|
||||
HGLOBAL hIco = LoadResource(NULL, hIcoInfo);
|
||||
DWORD sIco = SizeofResource(NULL, hIcoInfo);
|
||||
void *pIco = LockResource(hIco);
|
||||
memcpy(pto, pIco, sIco);
|
||||
pto += sizeof(sIco);
|
||||
#else
|
||||
#error("Unsupported platform/compiler")
|
||||
#endif
|
||||
}
|
||||
|
||||
void Sony_TwiggyPatch(uint8_t *pto)
|
||||
{
|
||||
if (CurEmMd == kEmMd_Twiggy || CurEmMd == kEmMd_Twig43) {
|
||||
/* 'Disk' instead of 'Sony' */
|
||||
do_put_mem_long(pto + 0x14, 0x4469736B);
|
||||
if (CurEmMd == kEmMd_Twig43) {
|
||||
do_put_mem_word(pto + 0xEA, 0x0C8A);
|
||||
} else {
|
||||
do_put_mem_word(pto + 0xEA, 0x0B74);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Sony_CallPatch(uint8_t *pto, int drvSize)
|
||||
{
|
||||
pto += drvSize;
|
||||
do_put_mem_word(pto, kcom_callcheck);
|
||||
pto += 2;
|
||||
do_put_mem_word(pto, kExtnSony);
|
||||
pto += 2;
|
||||
do_put_mem_long(pto, kExtn_Block_Base); /* pokeaddr */
|
||||
pto += 4;
|
||||
}
|
||||
|
||||
void Sony_Install(void)
|
||||
{
|
||||
uint8_t * pto = Sony_DriverBase + ROM;
|
||||
int drvSize = 0;
|
||||
if (!UseSonyPatch) { return; }
|
||||
Sony_LoadDriver(pto, &drvSize);
|
||||
Sony_TwiggyPatch(pto);
|
||||
Sony_CallPatch(pto, drvSize);
|
||||
Sony_LoadIcon(pto);
|
||||
// yeah this sucks but it's so awful and intertwined that i have no choice
|
||||
ScreenHack_Install(pto);
|
||||
}
|
19
src/PATCHES/SONYDRV.h
Normal file
@ -0,0 +1,19 @@
|
||||
#define UseSonyPatch \
|
||||
((CurEmMd <= kEmMd_Classic) || (CurEmMd == kEmMd_II) \
|
||||
|| (CurEmMd == kEmMd_IIx))
|
||||
|
||||
#if CurEmMd <= kEmMd_Twig43
|
||||
#define Sony_DriverBase 0x1836
|
||||
#elif CurEmMd <= kEmMd_Twiggy
|
||||
#define Sony_DriverBase 0x16E4
|
||||
#elif CurEmMd <= kEmMd_128K
|
||||
#define Sony_DriverBase 0x1690
|
||||
#elif CurEmMd <= kEmMd_Plus
|
||||
#define Sony_DriverBase 0x17D30
|
||||
#elif CurEmMd <= kEmMd_Classic
|
||||
#define Sony_DriverBase 0x34680
|
||||
#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx)
|
||||
#define Sony_DriverBase 0x2D72C
|
||||
#endif
|
||||
|
||||