Compare commits

...

10 Commits

Author SHA1 Message Date
InvisibleUp b2840d5f1c Remove unused code
If I'm to have any hope of cleaning this up, I want to start from as
simple of a place as I can.
2023-04-01 18:45:21 -07:00
InvisibleUp ad7240e54b Add VSCode debug configuration 2023-04-01 18:17:50 -07:00
InvisibleUp 30ded064a5 Remove floppy disk hack
I don't want it and I have more pressing concerns at the moment
2023-04-01 17:44:25 -07:00
InvisibleUp 33d075812a Just include m68kops.c in the directory. It's fine.
The only thing is that you'll need to re-run the makefile if you change a
config option. But really, it's fine.
2023-04-01 16:52:57 -07:00
InvisibleUp 98db4595f1 Add application manifest
needed for 1:1 pixel sizing
2023-04-01 16:45:26 -07:00
InvisibleUp e15a387047 More readme tweaks 2023-04-01 15:49:44 -07:00
InvisibleUp b82ae9498c Update the disclaimer at the top of the README 2023-04-01 15:43:32 -07:00
InvisibleUp 35961b3152 Merge branch 'master' of github.com:InvisibleUp/minivmac 2023-04-01 15:42:13 -07:00
InvisibleUp 98a152bf7b Fix compilation errors for MSVC 2023-04-01 15:37:43 -07:00
InvisibleUp 4a075815b3 Fix compilation issues on Windows 2023-04-01 14:31:34 -07:00
90 changed files with 36788 additions and 58819 deletions

29
.gitignore vendored
View File

@ -1,11 +1,28 @@
# C/C++
*.exe
*.obj
.vscode/*
bld
*.pdb
# Mini vMac
*.dsk
*.ROM
*.kdev4
*.pdb
build/
# Visual Studio
.vs/*
make/
.vs/
# Visual Studio Code
.vscode/*
!.vscode/launch.json
!.vscode/tasks.json
# KDevelop 4
*.kdev4
# Meson
build/
builddir/
subprojects/
# Working files
_work/

20
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(Windows) Launch",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/microvmac.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build/",
"environment": [],
"console": "externalTerminal",
"preLaunchTask": "${defaultBuildTask}"
}
]
}

23
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,23 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: compile with Meson",
"command": "meson",
"args": [
"compile",
],
"options": {
"cwd": "${workspaceFolder}/build"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
}
],
"version": "2.0.0"
}

View File

@ -1,6 +1,6 @@
# µvMac 0.37.0
***THIS CODEBASE IS INCOMPLETE AND DOES NOT CURRENTLY COMPILE TO A USABLE PRODUCT. ALSO, IT IS NOT UNDER ACTIVE DEVELOPMENT.***
***THIS CODEBASE IS INCOMPLETE, MAY NEVER BE COMPLETE, AND DOES NOT CURRENTLY COMPILE TO A USABLE PRODUCT.***
Forked from Mini vMac v36.4 by Paul C. Pratt (http://www.gryphel.com/c/minivmac), which was forked from vMac by Philip "PC" Cummins (http://www.vmac.org/main.html)
@ -9,11 +9,20 @@ Forked from Mini vMac v36.4 by Paul C. Pratt (http://www.gryphel.com/c/minivmac)
This fork was created to clean up and modernize the code base, make the project easier to compile and hack on, and allow for much easier user configuration. The intent of Mini vMac was to create a "emulator collection" of many very optimized "variations" of the same codebase. I consider this much more trouble than it's worth, and intend to focus more on maintainability and accuracy.
## How to Compile
1. Install the SDL2 libraries (on Ubuntu/Debian, this is `sudo apt install libsdl2-dev`)
µvMac uses the Meson build system. See https://mesonbuild.com/ for instructions on how to download and use it.
1. Install the SDL2 libraries (On Ubuntu/Debian, this is `sudo apt install libsdl2-dev`. On Windows, see below.)
2. `git clone --recursive` this repository
3. Run `meson build`
3. Run `meson setup build`
4. Navigate to the `build/` directory and run `meson compile`
5. Add `vMac.ROM` to the build directory and run the program!
5. Add `vMac.ROM` (and possibly libsdl2.dll) to the build directory and run the program!
On Windows systems, you may need to run the following commands for SDL to work:
```
mkdir subprojects/
meson wrap install sdl2
```
## Supported Platforms
@ -33,6 +42,18 @@ Here's an incomplete list of platforms that can, in theory, be targeted. These a
![System 7.1 running on an emulated Macintosh Plus](docs/macplus.png)
![System 7.1 running on an emulated Macintosh II](docs/macii.png)
<details>
<summary>Future features; not representative of final product</summary>
The below images are mockups of an upcoming feature, the configuration manager. This replaces Control Mode in Mini vMac, and also appears when you start the emulator.
![Mockup of the config manager's initial screen](docs/bootdlg_start.png)
![Mockup of the config manager's device selection screen](docs/bootdlg_model.png)
The configuration manager will require resources from a ROM. Here's the screen you get when you start up for the first time, without a ROM.
![Flashing ? on a ROM chip, and a message asking you to find a ROM](docs/norom-mockup.gif)
</details>
## Legal Info
You can redistribute µvMac and/or modify it under the terms

View File

@ -1,226 +0,0 @@
#include <stdint.h>
// General notes:
// Max VRAM on Mac II(x) is 2MiB
// Supported Macintosh models
typedef enum MacModel {
mdl_Twig43, // Twiggy prototype (ROM 4.3T 07/04/83)
mdl_Twiggy, // Twiggy prototype (later)
mdl_m128K, // 128K
mdl_m512K, // 512K
mdl_m512Ke, // 512K Enhanced
mdl_Plus, // Plus
mdl_SE, // SE
mdl_SEFDHD, // SEFDHD
mdl_Classic, // Classic
mdl_PB100, // PowerBook 100
mdl_II, // II
mdl_IIx // IIx
} MacModel_t;
// Supported ROM types
typedef enum MacROM {
rom_Twig43, // ROM 4.3T 07/04/83
rom_Twiggy, // Twiggy prototype (later)
rom_64K, // 128K/512K
rom_128K, // 512Ke/Plus
rom_SE, // Mac SE w/ 800k drive
rom_II, // Mac II w/ 800k drive
rom_IIx, // Mac II FDHD, IIx, IIcx
rom_PB100, // PowerBook 100
rom_Classic // Mac Classic
} MacROM_t;
typedef enum M68KType {
m68000,
m68020,
m68020FPU
} M68KType_t;
// ROM information. Duplicate MacROMs are alternate ROMS also supported
struct MacROMInfo {
MacROM_t rom;
uint32_t cksum;
uint32_t size;
};
const struct MacROMInfo MacROMInfoTable[] = {
{rom_Twig43, 0x27F4E04B, 1 << 16},
{rom_Twiggy, 0x2884371D, 1 << 16},
{rom_64K, 0x28BA61CE, 1 << 16}, // Mac 128K (?)
{rom_64K, 0x28BA4E50, 1 << 16}, // Mac 512K (?)
{rom_128K, 0x4D1EEEE1, 1 << 17}, // v1, 'Lonely Hearts'
{rom_128K, 0x4D1EEAE1, 1 << 17}, // v2, 'Lonely Heifers'
{rom_128K, 0x4D1F8172, 1 << 17}, // v3, 'Loud Harmonicas'
{rom_SE, 0xB2E362A8, 1 << 18},
{rom_II, 0x97851DB6, 1 << 18}, // v1
{rom_II, 0x9779D2C4, 1 << 18}, // v2
{rom_IIx, 0x97221136, 1 << 18},
{rom_PB100, 0x96645F9C, 1 << 18}
};
// Model information
// We're using base models for RAM and such; no addons
struct MacModelInfo {
MacModel_t MacModel;
MacROM_t MacROM;
M68KType_t M68KType;
uint32_t RAMaSize; // RAM in first address space (?)
uint32_t RAMbSize;
uint32_t RAMvidSize; // External video RAM size
uint32_t ROMBase;
uint16_t hres;
uint16_t vres;
uint8_t bpp;
uint8_t MaxATTListN; // ???
float ClockSpeed;
bool ADB; // ADB keyboards/mice are used
bool RTC; // Real-time clock
bool PMU; // Power management unit (PB100, Mac Classic?)
bool VIA2; // Versatile Interface Adapter v2 (Mac II series, below uses VIA1)
bool ASC; // Apple Sound Chip (Mac II or PB100)
bool MMU; // True if memory mapper is present (???)
bool VidMem; // Needs external video memory on NuBus port
};
const struct MacModelInfo MacModelInfoTable[] = {
// Twiggy, ROM 4.3
{
.MacModel = mdl_Twig43,
.MacROM = rom_Twig43,
.M68KType = m68000,
.RAMaSize = 2 << 16,
.RAMbSize = 0,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// Twiggy
{
.MacModel = mdl_Twiggy,
.MacROM = rom_Twiggy,
.M68KType = m68000,
.RAMaSize = 2 >> 16,
<<AMbSize = 0,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// 128K
{
.MacModel = mdl_m128K,
.MacROM = rom_64K,
.M68KType = m68000,
.RAMaSize = 2 >> 16,
.RAMbSize = 0,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// 512K
{
.MacModel = mdl_m512K,
.MacROM = rom_64K,
.M68KType = m68000,
.RAMaSize = 2 >> 19,
.RAMbSize = 0,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// 512Ke
{
.MacModel = mdl_m512Ke,
.MacROM = rom_128K,
.M68KType = m68000,
.RAMaSize = 2 >> 19,
.RAMbSize = 0,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// Plus
{
.MacModel = mdl_Plus,
.MacROM = rom_128K,
.M68KType = m68000,
.RAMaSize = 2 >> 19, // same RAM for SE, SEFDHD, Classic
.RAMbSize = 2 >> 19,
.RAMvidSize = 0,
.hres = 512,
.vres = 384,
.bpp = 1,
.MaxATTListN = 16,
.ClockSpeed = 1,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
// II
{
.MacModel = mdl_II,
.MacROM = rom_II,
.M68KType = m68020FPU,
.RAMaSize = 2 >> 20, // same RAM for IIx
.RAMbSize = 0,
.RAMvidSize = 2 >> 20, // 1 MB max for NuBus (256K for PB100)
.hres = 640,
.vres = 480,
.bpp = 8,
.MaxATTListN = 20,
.ClockSpeed = 2,
.ADB = false,
.RTC = false,
.PMU = false,
.VIA2 = false,
.ASC = false,
.MMU = false,
},
};

27
lib/M68K/.gitignore vendored
View File

@ -1,27 +0,0 @@
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile
*.moved-aside
DerivedData
.DS_Store
Thumbs.db
.svn
.BridgeSort
*.bak
.~*
*.orig
# Make output
*.o
m68kmake
m68kops.?
sim
tags

View File

@ -45,7 +45,7 @@ extern unsigned char m68ki_cycles[][0x10000];
extern void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */
extern void m68ki_build_opcode_table(void);
//#include "m68kops.h"
#include "m68kops.h"
#include "m68kcpu.h"
#include "m68kfpu.c"

View File

@ -9,7 +9,11 @@
#define GDBSTUB_PORT 4014
#include <assert.h>
#ifdef _WIN32
#include <winsock2.h>
#else
#include <arpa/inet.h>
#endif
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

View File

@ -78,7 +78,13 @@ unsigned int m68k_read_memory_16(unsigned int address)
}
// Return raw data
uint16_t result = __builtin_bswap16(*(uint16_t *)(r->usebase + address));
uint16_t result;
#ifdef _MSC_VER
result = _byteswap_ushort(*(uint16_t *)(r->usebase + address));
#else
// gcc-likes
result = __builtin_bswap16(*(uint16_t *)(r->usebase + address));
#endif
//fprintf(stderr, "read16 %X -> %X\n", address, result);
return result;
}
@ -104,7 +110,12 @@ unsigned int m68k_read_memory_32(unsigned int address)
}
// Return raw data
uint32_t result = __builtin_bswap32(*(uint32_t *)(r->usebase + address));
uint32_t result;
#ifdef _MSC_VER
result = _byteswap_ulong(*(uint32_t *)(r->usebase + address));
#else
result = __builtin_bswap32(*(uint32_t *)(r->usebase + address));
#endif
//fprintf(stderr, "read32 %X -> %X\n", address, result);
return result;
}
@ -168,7 +179,11 @@ void m68k_write_memory_8(unsigned int address, unsigned int value)
void m68k_write_memory_16(unsigned int address, unsigned int value)
{
ATTer *r = get_address_realblock1(true, address);
#ifdef _MSC_VER
value = _byteswap_ushort(value);
#else
value = __builtin_bswap16(value);
#endif
// check for bus error
//assert (r != NULL);
@ -192,7 +207,11 @@ void m68k_write_memory_16(unsigned int address, unsigned int value)
void m68k_write_memory_32(unsigned int address, unsigned int value)
{
ATTer *r = get_address_realblock1(true, address);
#ifdef _MSC_VER
value = _byteswap_ulong(value);
#else
value = __builtin_bswap32(value);
#endif
// check for bus error
//assert(r != NULL);
@ -263,20 +282,6 @@ void put_vm_long(uint32_t addr, uint32_t l) {
m68k_write_memory_32(addr, l);
}
void DiskInsertedPsuedoException(CPTR newpc, uint32_t data)
{
/*uint sr;
sr = m68ki_init_exception();
m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_1010);
m68ki_jump_vector(newpc);
// push data onto... something?
m68k_set_reg(M68K_REG_A7, m68k_get_reg(NULL, M68K_REG_A7) - 4);
m68k_write_memory_32(m68k_get_reg(NULL, M68K_REG_A7), data);*/
return;
}
// purely for debugging purposes
void m68k_instruction_hook(uint32_t pc)
{

36562
lib/M68K/m68kops.c Normal file

File diff suppressed because it is too large Load Diff

22
lib/M68K/m68kops.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef M68KOPS__HEADER
#define M68KOPS__HEADER
/* ======================================================================== */
/* ============================ OPCODE HANDLERS =========================== */
/* ======================================================================== */
/* Build the opcode handler table */
void m68ki_build_opcode_table(void);
extern void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */
extern unsigned char m68ki_cycles[][0x10000];
/* ======================================================================== */
/* ============================== END OF FILE ============================= */
/* ======================================================================== */
#endif /* M68KOPS__HEADER */

View File

@ -46,7 +46,7 @@ conf = configuration_data({
# Version information
'kStrAppName': '"micro vMac"',
'kAppVariationStr': '"0.37.0"',
'kStrCopyrightYear': '"2020"',
'kStrCopyrightYear': '"2023"',
'kMaintainerName': '"InvisibleUp"',
'kStrHomePage': '"https://github.com/invisibleup/minivmac/"',
'kBldOpts': '"obsolete"'
@ -57,10 +57,22 @@ configure_file(
)
# Dependencies
lSDL2 = dependency('SDL2')
lSDL2 = dependency('SDL2', static: true)
# Windows resources
# todo: gate this off if not on Windows
windows = import('windows')
WIN_RSRC = windows.compile_resources(
'rsrc/WIN32/main.rc',
depend_files: [
'rsrc/WIN32/app.manifest',
'rsrc/WIN32/ICONAPPW.ico',
'rsrc/WIN32/ICONDSKW.ico',
'rsrc/WIN32/ICONROMW.ico',
]
)
# Hardware libraries
# Some are temporarily disabled while I get CMake up and running
HW_SRC = {
'ADB': [
@ -68,8 +80,6 @@ HW_SRC = {
],
'DISK': [
'src/HW/DISK/IWMEMDEV.c',
'src/HW/DISK/SONYEMDV.c',
'src/PATCHES/SONYDRV.c'
],
'KBRD': [
'src/HW/KBRD/KBRDEMDV.c',
@ -77,10 +87,10 @@ HW_SRC = {
'M68K': [
'lib/M68K/m68kcpu.c',
'lib/M68K/m68kdasm.c',
'lib/M68K/m68kops.c',
'lib/M68K/softfloat/softfloat.c',
'lib/M68K/m68khooks.c',
'lib/M68K/m68kgdb.c',
'lib/M68K/m68kops.c',
#'lib/M68K/m68kgdb.c',
],
'MOUSE': [
'src/HW/MOUSE/MOUSEMDV.c',
@ -96,7 +106,6 @@ HW_SRC = {
],
'SCREEN': [
'src/HW/SCREEN/SCRNEMDV.c',
'src/PATCHES/SCRNHACK.c',
],
'SCSI': [
'src/HW/SCSI/SCSIEMDV.c',
@ -116,10 +125,8 @@ HW_SRC = {
'VIDCARD': [
'src/HW/VIDCARD/VIDEMDEV.c',
],
'RAM': [
],
'ROM': [
'src/HW/ROM/ROMEMDEV.c',
'src/HW/ROM/ROMEMDEV.c'
]
}
@ -159,8 +166,6 @@ EMU_SRC = [
'src/PROGMAIN.c',
'src/GLOBGLUE.c',
'src/CFGMAN.c',
'src/PATCHES/ROMEMDEV.c',
'src/UTIL/DATE2SEC.c',
'src/LANG/INTLCHAR.c',
'src/tomlc99/toml.c'
]
@ -174,8 +179,9 @@ EMU_INC = include_directories([
# Just gonna do an SDL2 Mac Plus for now
executable(
'microvmac',
sources: MAC_SRC['Plus'] + UI_SRC + EMU_SRC,
sources: MAC_SRC['Plus'] + UI_SRC + EMU_SRC + WIN_RSRC,
dependencies: [lSDL2],
include_directories: EMU_INC,
#gui_app: true
)

View File

@ -1,14 +0,0 @@
#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
};

View File

@ -1,14 +0,0 @@
#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,
};

View File

@ -1,14 +0,0 @@
#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
};

View File

@ -1,14 +0,0 @@
#define HMAC_HORROR_WIDTH 16
#define HMAC_HORROR_HEIGHT 10
static unsigned char HMAC_HORROR_BITS[] = {
0x38, 0x38,
0x44, 0x44,
0x44, 0x44,
0x44, 0x44,
0x38, 0x38,
0x03, 0x80,
0x03, 0x80,
0x03, 0x80,
0x03, 0x80,
0x03, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_LADY_WIDTH 16
#define HMAC_LADY_HEIGHT 10
static unsigned char HMAC_LADY_BITS[] = {
0x38, 0x38,
0x45, 0x44,
0x55, 0x54,
0x45, 0x44,
0x39, 0x38,
0x03, 0x00,
0x00, 0x00,
0x00, 0x00,
0x07, 0x80,
0x03, 0x00
};

View File

@ -1,14 +0,0 @@
#define HMAC_MOUSTACHE_WIDTH 16
#define HMAC_MOUSTACHE_HEIGHT 10
static unsigned char HMAC_MOUSTACHE_BITS[] = {
0x00, 0x00,
0x11, 0x10,
0x11, 0x10,
0x01, 0x00,
0x01, 0x00,
0x03, 0x00,
0x1F, 0xE0,
0x00, 0x00,
0x08, 0x40,
0x07, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_NERDY_WIDTH 16
#define HMAC_NERDY_HEIGHT 10
static unsigned char HMAC_NERDY_BITS[] = {
0x38, 0x38,
0x45, 0x45,
0xD7, 0xD6,
0x45, 0x44,
0x39, 0x38,
0x03, 0x00,
0x00, 0x00,
0x00, 0x00,
0x0F, 0xC0,
0x00, 0x00
};

View File

@ -1,14 +0,0 @@
#define HMAC_PIRATE_WIDTH 16
#define HMAC_PIRATE_HEIGHT 10
static unsigned char HMAC_PIRATE_BITS[] = {
0x00, 0x81,
0x00, 0x7E,
0x11, 0x7E,
0x11, 0x3C,
0x01, 0x3C,
0x01, 0x18,
0x03, 0x00,
0x00, 0x00,
0x08, 0x40,
0x07, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_SLEEPY_WIDTH 16
#define HMAC_SLEEPY_HEIGHT 10
static unsigned char HMAC_SLEEPY_BITS[] = {
0x00, 0x00,
0x1C, 0x70,
0x22, 0x88,
0x00, 0x00,
0x1C, 0x70,
0x08, 0x20,
0x00, 0x00,
0x00, 0x00,
0x03, 0x80,
0x00, 0x00
};

View File

@ -1,14 +0,0 @@
#define HMAC_SLY_WIDTH 16
#define HMAC_SLY_HEIGHT 10
static unsigned char HMAC_SLY_BITS[] = {
0x00, 0x00,
0x08, 0x20,
0x14, 0x50,
0x00, 0x00,
0x00, 0x00,
0x20, 0x08,
0x3F, 0xF8,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00
};

View File

@ -1,14 +0,0 @@
#define HMAC_SUNGLASSES_WIDTH 16
#define HMAC_SUNGLASSES_HEIGHT 10
static unsigned char HMAC_SUNGLASSES_BITS[] = {
0x00, 0x00,
0xFF, 0xFE,
0x7D, 0x7C,
0x7D, 0x7C,
0x39, 0x38,
0x03, 0x00,
0x00, 0x00,
0x1F, 0xF0,
0x00, 0x00,
0x00, 0x00
};

View File

@ -1,14 +0,0 @@
#define HMAC_SURPRISE_WIDTH 16
#define HMAC_SURPRISE_HEIGHT 10
static unsigned char HMAC_SURPRISE_BITS[] = {
0x1C, 0x70,
0x22, 0x88,
0x41, 0x04,
0x49, 0x24,
0x41, 0x04,
0x22, 0x88,
0x1C, 0x70,
0x01, 0x00,
0x03, 0x80,
0x03, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_TONGUE_WIDTH 16
#define HMAC_TONGUE_HEIGHT 10
static unsigned char HMAC_TONGUE_BITS[] = {
0x00, 0x00,
0x1E, 0x78,
0x00, 0x00,
0x00, 0x00,
0x20, 0x04,
0x3F, 0xFC,
0x05, 0x40,
0x05, 0x40,
0x04, 0x40,
0x03, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_YUCK_WIDTH 16
#define HMAC_YUCK_HEIGHT 10
static unsigned char HMAC_YUCK_BITS[] = {
0x00, 0x00,
0x18, 0x30,
0x04, 0x40,
0x02, 0x80,
0x00, 0x00,
0x00, 0x00,
0x1F, 0xF0,
0x15, 0x50,
0x04, 0x40,
0x03, 0x80
};

View File

@ -1,14 +0,0 @@
#define HMAC_ZOMBIE_WIDTH 16
#define HMAC_ZOMBIE_HEIGHT 10
static unsigned char HMAC_ZOMBIE_BITS[] = {
0x70, 0x7C,
0x88, 0x82,
0x88, 0x8A,
0xA8, 0x8A,
0x70, 0x82,
0x00, 0x42,
0x00, 0x3C,
0x1E, 0x00,
0x3F, 0x00,
0x3F, 0x00
};

Binary file not shown.

Binary file not shown.

36
rsrc/WIN32/app.manifest Normal file
View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Supports Windows Vista / Server 2008 -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Supports Windows 7 / Server 2008 R2 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Supports Windows 8 / Server 2012 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Supports Windows 8.1 / Server 2012 R2 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Supports Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">system</dpiAwareness>
</windowsSettings>
</application>
</assembly>

Binary file not shown.

View File

@ -1,14 +1,15 @@
//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#include "winresrc.h"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// Application manifest
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.manifest"
// 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
@ -24,7 +25,7 @@ BEGIN
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 "LegalCopyright", "(c)1996-2023 various contributors. Licensed under the GPL v2.\0"
VALUE "OriginalFilename", "microvmac.exe\0"
VALUE "ProductName", "micro vMac\0"
VALUE "ProductVersion", "v0.37.0\0"

View File

@ -7,6 +7,7 @@
/* Load or create config and prepare for use */
#pragma once
#include <stdint.h>
bool Config_TryInit();

View File

@ -109,7 +109,7 @@ GLOBALPROC customreset(void)
//SCC_Reset();
SCSI_Reset();
VIA_Reset();
Sony_Reset();
//Sony_Reset();
Extn_Reset();
#if CurEmMd <= kEmMd_Plus
WantMacReset = true;
@ -531,10 +531,10 @@ LOCALPROC Extn_Access(uint32_t Data, CPTR addr)
break;
#endif
case kExtnDisk:
ExtnDisk_Access(p);
//ExtnDisk_Access(p);
break;
case kExtnSony:
ExtnSony_Access(p);
//ExtnSony_Access(p);
break;
default:
put_vm_word(p + ExtnDat_result,
@ -546,7 +546,7 @@ LOCALPROC Extn_Access(uint32_t Data, CPTR addr)
break;
case kDSK_QuitOnEject:
/* obsolete, kept for compatibility */
Sony_SetQuitOnEject();
//Sony_SetQuitOnEject();
break;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@
#else
#define SONYEMDV_H
#endif
/*
EXPORTPROC ExtnDisk_Access(CPTR p);
EXPORTPROC ExtnSony_Access(CPTR p);
@ -29,3 +29,4 @@ EXPORTPROC Sony_EjectAllDisks(void);
EXPORTPROC Sony_Reset(void);
EXPORTPROC Sony_Update(void);
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
/*
DISAM68K.h
Copyright (C) 2010 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.
*/
/*
DISAssemble Motorola 68K instructions.
*/
#ifndef DIS1M68K_H
#define DIS1M68K_H
EXPORTPROC DisasmOneOrSave(uint32_t pc);
EXPORTPROC m68k_WantDisasmContext(void);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,275 +0,0 @@
/*
M68KITAB.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.
*/
#ifndef M68KITAB_H
#define M68KITAB_H
enum {
// 68000
kIKindTst,
kIKindCmpB,
kIKindCmpW,
kIKindCmpL,
kIKindBccB,
kIKindBccW,
kIKindBraB,
kIKindBraW,
kIKindDBcc,
kIKindDBF,
kIKindSwap,
kIKindMoveL,
kIKindMoveW,
kIKindMoveB,
kIKindMoveAL,
kIKindMoveAW,
kIKindMoveQ,
kIKindAddB,
kIKindAddW,
kIKindAddL,
kIKindSubB,
kIKindSubW,
kIKindSubL,
kIKindLea,
kIKindPEA,
kIKindA,
kIKindBsrB,
kIKindBsrW,
kIKindJsr,
kIKindLinkA6,
kIKindMOVEMRmML,
kIKindMOVEMApRL,
kIKindUnlkA6,
kIKindRts,
kIKindJmp,
kIKindClr,
kIKindAddA,
kIKindAddQA,
kIKindSubA,
kIKindSubQA,
kIKindCmpA,
kIKindAddXB,
kIKindAddXW,
kIKindAddXL,
kIKindSubXB,
kIKindSubXW,
kIKindSubXL,
kIKindAslB,
kIKindAslW,
kIKindAslL,
kIKindAsrB,
kIKindAsrW,
kIKindAsrL,
kIKindLslB,
kIKindLslW,
kIKindLslL,
kIKindLsrB,
kIKindLsrW,
kIKindLsrL,
kIKindRxlB,
kIKindRxlW,
kIKindRxlL,
kIKindRxrB,
kIKindRxrW,
kIKindRxrL,
kIKindRolB,
kIKindRolW,
kIKindRolL,
kIKindRorB,
kIKindRorW,
kIKindRorL,
kIKindBTstB,
kIKindBChgB,
kIKindBClrB,
kIKindBSetB,
kIKindBTstL,
kIKindBChgL,
kIKindBClrL,
kIKindBSetL,
kIKindAndI,
kIKindAndEaD,
kIKindAndDEa,
kIKindOrI,
kIKindOrDEa,
kIKindOrEaD,
kIKindEor,
kIKindEorI,
kIKindNot,
kIKindScc,
kIKindNegXB,
kIKindNegXW,
kIKindNegXL,
kIKindNegB,
kIKindNegW,
kIKindNegL,
kIKindEXTW,
kIKindEXTL,
kIKindMulU,
kIKindMulS,
kIKindDivU,
kIKindDivS,
kIKindExg,
kIKindMoveEaCCR,
kIKindMoveSREa,
kIKindMoveEaSR,
kIKindOrISR,
kIKindAndISR,
kIKindEorISR,
kIKindOrICCR,
kIKindAndICCR,
kIKindEorICCR,
kIKindMOVEMApRW,
kIKindMOVEMRmMW,
kIKindMOVEMrmW,
kIKindMOVEMrmL,
kIKindMOVEMmrW,
kIKindMOVEMmrL,
kIKindAbcd,
kIKindSbcd,
kIKindNbcd,
kIKindRte,
kIKindNop,
kIKindMoveP0,
kIKindMoveP1,
kIKindMoveP2,
kIKindMoveP3,
kIKindIllegal,
kIKindChkW,
kIKindTrap,
kIKindTrapV,
kIKindRtr,
kIKindLink,
kIKindUnlk,
kIKindMoveRUSP,
kIKindMoveUSPR,
kIKindTas,
kIKindFdflt,
kIKindStop,
kIKindReset,
// 68020
kIKindCallMorRtm,
kIKindBraL,
kIKindBccL,
kIKindBsrL,
kIKindEXTBL,
kIKindTRAPcc,
kIKindChkL,
kIKindBkpt,
kIKindDivL,
kIKindMulL,
kIKindRtd,
kIKindMoveCCREa,
kIKindMoveCEa,
kIKindMoveEaC,
kIKindLinkL,
kIKindPack,
kIKindUnpk,
kIKindCHK2orCMP2,
kIKindCAS2,
kIKindCAS,
kIKindMoveS,
kIKindBitField,
// MMU
kIKindMMU,
// FPU
kIKindFPUmd60,
kIKindFPUDBcc,
kIKindFPUTrapcc,
kIKindFPUScc,
kIKindFPUFBccW,
kIKindFPUFBccL,
kIKindFPUSave,
kIKindFPURestore,
kIKindFPUdflt,
kNumIKinds
};
enum {
kAMdRegB,
kAMdRegW,
kAMdRegL,
kAMdIndirectB,
kAMdIndirectW,
kAMdIndirectL,
kAMdAPosIncB,
kAMdAPosIncW,
kAMdAPosIncL,
kAMdAPosInc7B,
kAMdAPreDecB,
kAMdAPreDecW,
kAMdAPreDecL,
kAMdAPreDec7B,
kAMdADispB,
kAMdADispW,
kAMdADispL,
kAMdAIndexB,
kAMdAIndexW,
kAMdAIndexL,
kAMdAbsWB,
kAMdAbsWW,
kAMdAbsWL,
kAMdAbsLB,
kAMdAbsLW,
kAMdAbsLL,
kAMdPCDispB,
kAMdPCDispW,
kAMdPCDispL,
kAMdPCIndexB,
kAMdPCIndexW,
kAMdPCIndexL,
kAMdImmedB,
kAMdImmedW,
kAMdImmedL,
kAMdDat4,
kNumAMds
};
struct DecOpXR {
/* expected size : 4 bytes */
uint16_t MainClas;
uint16_t Cycles;
};
typedef struct DecOpXR DecOpXR;
struct DecArgR {
/* expected size : 2 bytes */
uint8_t AMd;
uint8_t ArgDat;
};
typedef struct DecArgR DecArgR;
struct DecOpYR {
/* expected size : 4 bytes */
DecArgR v[2];
};
typedef struct DecOpYR DecOpYR;
struct DecOpR {
/* expected size : 8 bytes */
DecOpXR x;
DecOpYR y;
} align_8;
typedef struct DecOpR DecOpR;
#define GetDcoCycles(p) ((p)->x.Cycles)
#define SetDcoMainClas(p, xx) ((p)->x.MainClas = (xx))
#define SetDcoCycles(p, xx) ((p)->x.Cycles = (xx))
EXPORTPROC M68KITAB_setup(DecOpR *p);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,52 +0,0 @@
/*
MINEM68K.h
Copyright (C) 2004 Bernd Schmidt, 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.
*/
#ifndef MINEM68K_H
#define MINEM68K_H
EXPORTPROC MINEM68K_Init(
uint8_t *fIPL);
#if SmallGlobals
EXPORTPROC MINEM68K_ReserveAlloc(void);
#endif
EXPORTPROC m68k_IPLchangeNtfy(void);
EXPORTPROC DiskInsertedPsuedoException(CPTR newpc, uint32_t data);
EXPORTPROC m68k_reset(void);
EXPORTFUNC int32_t GetCyclesRemaining(void);
EXPORTPROC SetCyclesRemaining(int32_t n);
EXPORTPROC m68k_go_nCycles(uint32_t n);
/*
general purpose access of address space
of emulated computer. (memory and
memory mapped hardware.)
*/
EXPORTFUNC uint8_t get_vm_byte(CPTR addr);
EXPORTFUNC uint16_t get_vm_word(CPTR addr);
EXPORTFUNC uint32_t get_vm_long(CPTR addr);
EXPORTPROC put_vm_byte(CPTR addr, uint8_t b);
EXPORTPROC put_vm_word(CPTR addr, uint16_t w);
EXPORTPROC put_vm_long(CPTR addr, uint32_t l);
EXPORTPROC SetHeadATTel(ATTep p);
EXPORTFUNC ATTep FindATTel(CPTR addr);
#endif

View File

@ -1,94 +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.
Bitmaps from http://www.bigmessowires.com/mac-rom-inator/
*/
#include <string.h>
#include "SYSDEPNS.h"
#include "UI/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);
}

View File

@ -1,117 +0,0 @@
/*
ROMEMDEV.c
Copyright (C) 2007 Philip Cummins, 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.
*/
/*
Read Only Memory EMulated DEVice
Checks the header of the loaded ROM image, and then patches
the ROM image.
This code descended from "ROM.c" in vMac by Philip Cummins.
Support for "Twiggy" Mac by Mathew Hybler.
*/
#include "EMCONFIG.h"
#include "SYSDEPNS.h"
#include "GLOBGLUE.h"
#include "UI/MYOSGLUE.h"
#include "UTIL/ENDIANAC.h"
#include "PATCHES/ROMEMDEV.h"
#include "PATCHES/SCRNHACK.h"
#include "PATCHES/SONYDRV.h"
#ifdef CurAltHappyMac
#include "HPMCHACK.h"
#endif
#ifdef ln2mtb
LOCALPROC ROMscrambleForMTB(void)
{
int32_t j;
uint8_t * p = ROM;
uint8_t * p2 = ROM + (1 << ln2mtb);
for (j = kROM_Size / (1 << ln2mtb) / 2; --j >= 0; ) {
int32_t i;
for (i = (1 << ln2mtb); --i >= 0; ) {
uint8_t t0 = *p;
uint8_t t1 = *p2;
*p++ = t1;
*p2++ = t0;
}
p += (1 << ln2mtb);
p2 += (1 << ln2mtb);
}
}
#endif
GLOBALFUNC bool ROM_Init(void)
{
#if DisableRomCheck
/* skip the rom checksum */
#if CurEmMd <= kEmMd_Twig43
/* no checksum code */
#elif CurEmMd <= kEmMd_Twiggy
do_put_mem_word(0x136 + ROM, 0x6004);
#elif CurEmMd <= kEmMd_128K
do_put_mem_word(0xE2 + ROM, 0x6004);
#elif CurEmMd <= kEmMd_Plus
do_put_mem_word(0xD7A + ROM, 0x6022);
#elif CurEmMd <= kEmMd_Classic
do_put_mem_word(0x1C68 + ROM, 0x6008);
#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx)
do_put_mem_word(0x2AB0 + ROM, 0x6008);
#endif
#endif /* DisableRomCheck */
#if DisableRamTest
#if CurEmMd <= kEmMd_128K
#elif CurEmMd <= kEmMd_Plus
do_put_mem_word(3752 + ROM, 0x4E71);
/* shorten the ram check read */
do_put_mem_word(3728 + ROM, 0x4E71);
/* shorten the ram check write */
#elif CurEmMd <= kEmMd_Classic
do_put_mem_word(134 + ROM, 0x6002);
do_put_mem_word(286 + ROM, 0x6002);
#elif (CurEmMd == kEmMd_II) || (CurEmMd == kEmMd_IIx)
do_put_mem_word(0xEE + ROM, 0x6002);
do_put_mem_word(0x1AA + ROM, 0x6002);
#endif
#endif /* DisableRamTest */
#ifdef CurAltHappyMac
PatchHappyMac();
#endif
/* do_put_mem_word(862 + ROM, 0x4E71); */ /* shorten set memory */
//Sony_Install();
//ScreenHack_Install(); in above fcn temporarily
#ifdef ln2mtb
ROMscrambleForMTB();
#endif
return true;
}

View File

@ -1,34 +0,0 @@
/*
PATCHES/ROMEMDEV.h
Copyright (C) 2003 Philip Cummins, 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.
*/
#ifndef ROMEMDEV_H
#define ROMEMDEV_H
#ifndef DisableRomCheck
#define DisableRomCheck 1
#endif
#ifndef DisableRamTest
#define DisableRamTest 1
#endif
#define kVidMem_Base 0x00540000
EXPORTFUNC bool ROM_Init(void);
#endif

View File

@ -1,443 +0,0 @@
/*
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"
#include "HW/SCREEN/SCRNEMDV.h"
static void ScreenHack_Install_64K(uint8_t **pto)
{
uint8_t *patchp = *pto;
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));
}
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));
}
/* 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); */
}
// Currently not functional
static void ScreenHack_Install_128K(uint8_t **pto)
{
uint8_t *patchp = *pto;
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));
}
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));
}
/* 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
}
void ScreenHack_Install_256K(uint8_t **pto)
{
uint8_t *patchp = *pto;
/* 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));
}
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));
}
/* 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);
}
void ScreenHack_Install(uint8_t **pto)
{
if (!UseLargeScreenHack) { return; }
switch(CurEmMd) {
case kEmMd_Twiggy:
case kEmMd_Twig43:
case kEmMd_128K:
ScreenHack_Install_64K(pto);
break;
case kEmMd_512Ke:
case kEmMd_Plus:
ScreenHack_Install_128K(pto);
break;
case kEmMd_SE:
case kEmMd_SEFDHD:
case kEmMd_Classic:
ScreenHack_Install_256K(pto);
break;
default:
// unsupported
break;
}
}

View File

@ -1,3 +0,0 @@
#include <stdint.h>
void ScreenHack_Install(uint8_t **pto);

View File

@ -1,75 +0,0 @@
/*
Replacement for .Sony driver
68k machine code, compiled from mydriver.a
Included in the resource file for WIN32 builds
*/
#include <stdint.h>
#include <string.h>
#include "incbin/incbin.h"
#include "EMCONFIG.h"
#include "GLOBGLUE.h"
#include "UTIL/ENDIANAC.h"
#include "UI/MYOSGLUE.h"
#include "PATCHES/SONYDRV.h"
#include "PATCHES/ROMEMDEV.h"
//#include "PATCHES/SCRNHACK.h"
// temporary screenhack stuff
#include "HW/SCREEN/SCRNEMDV.h"
// Include binaries
INCBIN(SonyDriver, "rsrc/SONYDRV.bin");
INCBIN(SonyIcon, "rsrc/SONYICO.bin");
void Sony_LoadDriver(uint8_t *pto, int *size)
{
memcpy(pto, gSonyDriverData, gSonyDriverSize);
*size = gSonyDriverSize;
}
void Sony_LoadIcon(uint8_t *pto, int *icoSize)
{
disk_icon_addr = (pto - ROM) + kROM_Base;
memcpy(pto, gSonyIconData, gSonyIconSize);
*icoSize = gSonyIconSize;
}
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)
{
do_put_mem_word(pto, kcom_callcheck);
do_put_mem_word(pto+2, kExtnSony);
do_put_mem_long(pto+4, kExtn_Block_Base); /* pokeaddr */
}
void Sony_Install(void)
{
uint8_t * pto = Sony_DriverBase + ROM;
int drvSize, icoSize;
if (!UseSonyPatch) { return; }
Sony_LoadDriver(pto, &drvSize);
Sony_TwiggyPatch(pto);
pto += drvSize;
Sony_CallPatch(pto, drvSize);
pto += 8;
Sony_LoadIcon(pto, &icoSize);
pto += icoSize;
// currently broken
//ScreenHack_Install(&pto);
}

View File

@ -1,19 +0,0 @@
#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
void Sony_Install();

View File

@ -31,7 +31,7 @@
#include "HW/DISK/IWMEMDEV.h"
#include "HW/SCC/SCCEMDEV.h"
#include "HW/RTC/RTCEMDEV.h"
#include "PATCHES/ROMEMDEV.h"
#include "HW/ROM/ROMEMDEV.h"
#include "HW/SCSI/SCSIEMDV.h"
#include "HW/DISK/SONYEMDV.h"
#include "HW/SCREEN/SCRNEMDV.h"
@ -80,16 +80,6 @@ const DevMethods_t DEVICES[] = {
.timebegin = NULL,
.timeend = NULL,
},
// ROM
{
.init = ROM_Init,
.reset = NULL,
.starttick = NULL,
.endtick = NULL,
.subtick = NULL,
.timebegin = NULL,
.timeend = NULL,
},
// Memory
{
.init = AddrSpac_Init,
@ -133,8 +123,8 @@ const DevMethods_t DEVICES[] = {
// Sony disk drive
{
.init = NULL,
.reset = Sony_Reset,
.starttick = Sony_Update,
.reset = NULL,
.starttick = NULL,
.endtick = NULL,
.subtick = NULL,
.timebegin = NULL,
@ -251,7 +241,7 @@ LOCALPROC EmulatedHardwareZap(void)
LOCALPROC DoMacReset(void)
{
Sony_EjectAllDisks();
//Sony_EjectAllDisks();
EmulatedHardwareZap();
}
@ -325,7 +315,7 @@ LOCALPROC SixtiethSecondNotify(void)
//if (EmADB) { ADB_Update(); }
Screen_RaiseVBlank();
Sony_Update();
//Sony_Update();
#if EmLocalTalk
LocalTalkTick();

View File

@ -16,6 +16,7 @@
/*
CONTROL Mode
(at this point just a few stubs for alerts)
*/
#include "SYSDEPNS.h"
@ -24,13 +25,12 @@
#include "STRCONST.h"
#include "ERRCODES.h"
#include "LANG/INTLCHAR.h"
#include "UI/COMOSGLU.h"
#include "UI/MYOSGLUE.h"
#include "UTIL/ENDIANAC.h"
#include "UI/CONTROLM.h"
#include <SDL2/SDL.h>
#include <SDL.h>
#include "UI/SDL2/OSGLUSD2.h"
/* Constants and globals */

View File

@ -28,7 +28,6 @@
#ifndef MYOSGLUE_H
#define MYOSGLUE_H
#include "UTIL/DATE2SEC.h"
#include "HW/KBRD/KEYCODES.h"
#include "ERRCODES.h"

View File

@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "EMCONFIG.h"
#include "SYSDEPNS.h"

View File

@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "EMCONFIG.h"
#include "SYSDEPNS.h"

View File

@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "SYSDEPNS.h"
#include "UTIL/ENDIANAC.h"

View File

@ -24,7 +24,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "SYSDEPNS.h"
#include "UTIL/ENDIANAC.h"

View File

@ -2,7 +2,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "UI/MYOSGLUE.h"
/* --- defines and macros and such --- */

View File

@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "SYSDEPNS.h"
#include "UTIL/ENDIANAC.h"

View File

@ -2,7 +2,7 @@
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <SDL2/SDL.h>
#include <SDL.h>
#include "CNFGRAPI.h"
#include "SYSDEPNS.h"
#include "UTIL/ENDIANAC.h"

View File

@ -2,8 +2,8 @@
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_pixels.h>
#include <SDL.h>
#include <SDL_pixels.h>
#include "CNFGRAPI.h"
#include "SYSDEPNS.h"
#include "UTIL/ENDIANAC.h"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,192 +0,0 @@
/*
AppIcon.r
Copyright (C) 2003 Philip Cummins, Richard F. Bannister,
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.
*/
#if SmallIconAPIAvail
resource 'ics#' (AppIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"0000 1FF8 2004 2FF4 2814 2A94 2B14 2A14"
$"2814 2FF4 2004 2004 20F4 2004 1FF8 1FF8",
/* [2] */
$"0000 1FF8 3FFC 3FFC 3FFC 3FFC 3FFC 3FFC"
$"3FFC 3FFC 3FFC 3FFC 3FFC 3FFC 1FF8 1FF8"
}
};
#endif
#if ColorIconAPIAvail
resource 'ics8' (AppIconId, purgeable) {
$"0000 0000 0000 0000 0000 0000 0000 0000"
$"0000 00FF FFFF FFFF FFFF FFFF FF00 0000"
$"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000"
$"0000 FF2B FCFC FCFC FCFC FCFC 2BFF 0000"
$"0000 FF2B FC2A 2A2A 2A2A 2A00 2BFF 0000"
$"0000 FF2B FC2A EC2A EC2A 2A00 2BFF 0000"
$"0000 FF2B FC2A ECEC 2A2A 2A00 2BFF 0000"
$"0000 FF2B FC2A EC2A 2A2A 2A00 2BFF 0000"
$"0000 FF2B FC2A 2A2A 2A2A 2A00 2BFF 0000"
$"0000 FF2B FA00 0000 0000 0000 2BFF 0000"
$"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000"
$"0000 FF2B E32B 2B2B 2B2B 2B2B 2BFF 0000"
$"0000 FF2B D82B 2B2B FFFF FFFF 2BFF 0000"
$"0000 FF2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000"
$"0000 00FD FDFD FDFD FDFF FFFF FF00 0000"
$"0000 00FF FFFF FFFF FFFF FFFF FF"
};
#endif
#if ColorIconAPIAvail
resource 'ics4' (AppIconId, purgeable) {
$"0000 0000 0000 0000 000F FFFF FFFF F000"
$"00FC CCCC CCCC CF00 00FC EEEE EEEE CF00"
$"00FC ED0D 0D0C CF00 00FC E060 60D0 CF00"
$"00FC ED66 0D0C CF00 00FC E060 D0D0 CF00"
$"00FC ED0D 0D0C CF00 00FC D0C0 C0C0 CF00"
$"00FC CCCC CCCC CF00 00FC 8CCC CCCC CF00"
$"00FC 3CCC FFFF CF00 00FC CCCC CCCC CF00"
$"000F FFFF FFFF F000 000F FFFF FFFF F0"
};
#endif
resource 'ICN#' (AppIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"0000 0000 07FF FFE0 0800 0010 0800 0010"
$"08FF FF10 0900 0090 0918 1890 0918 3090"
$"0918 6090 0918 C090 0919 8090 091B 0090"
$"091E 0090 091C 0090 0918 0090 0910 0090"
$"0900 0090 08FF FF10 0800 0010 0800 0010"
$"0800 0010 0800 0010 0800 FF10 0800 0010"
$"0800 0010 0800 0010 0800 0010 07FF FFE0"
$"0400 0020 0400 0020 0400 0020 07FF FFE0",
/* [2] */
$"0000 0000 07FF FFE0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 0FFF FFF0"
$"0FFF FFF0 0FFF FFF0 0FFF FFF0 07FF FFE0"
$"07FF FFE0 07FF FFE0 07FF FFE0 07FF FFE0"
}
};
#if ColorIconAPIAvail
resource 'icl8' (AppIconId, purgeable) {
$"0000 0000 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 0000 0000 0000"
$"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF FFFF FFFF FF00 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B FCFC FCFC FCFC FCFC"
$"FCFC FCFC FCFC FCFC 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2A2A 2A2A 2A2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A"
$"2A2A 2AEC EC2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A"
$"2A2A ECEC 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A"
$"2AEC EC2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A"
$"ECEC 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2AEC"
$"EC2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A ECEC"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC ECEC EC2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC ECEC 2A2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC EC2A 2A2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2AEC 2A2A 2A2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2BFC 2A2A 2A2A 2A2A 2A2A"
$"2A2A 2A2A 2A2A 2A2A 002B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 0000 0000 0000 0000"
$"0000 0000 0000 0000 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"FFFF FFFF FFFF FFFF 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"0000 0000 0000 0000 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2BE3 E32B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2BD8 D82B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 FF2B 2B2B 2B2B 2B2B 2B2B 2B2B"
$"2B2B 2B2B 2B2B 2B2B 2B2B 2BFF 0000 0000"
$"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF FFFF FFFF FF00 0000 0000"
$"0000 0000 00FF FBFB FBFB FBFB FCFC FCFC"
$"FCFD FDFD FDFD FDFD FDFD FF00 0000 0000"
$"0000 0000 00FF FAFA FAFA FAFA FAFA FBFB"
$"FCFC FCFC FDFD FDFD FDFD FF00 0000 0000"
$"0000 0000 00FF F9F9 F9F9 F9F9 F9F9 FAFA"
$"FAFB FBFC FCFC FCFD FDFD FF00 0000 0000"
$"0000 0000 00FF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF FFFF FFFF FF"
};
#endif
#if ColorIconAPIAvail
resource 'icl4' (AppIconId, purgeable) {
$"0000 0000 0000 0000 0000 0000 0000 0000"
$"0000 0FFF FFFF FFFF FFFF FFFF FFF0 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC EEEE EEEE EEEE EEEE CCCF 0000"
$"0000 FCCE 0D0D 0D0D 0D0D 0D0D 0CCF 0000"
$"0000 FCCE D0D6 60D0 D0D6 60D0 CCCF 0000"
$"0000 FCCE 0D06 6D0D 0D66 0D0D 0CCF 0000"
$"0000 FCCE D0D6 60D0 D660 D0D0 CCCF 0000"
$"0000 FCCE 0D06 6D0D 660D 0D0D 0CCF 0000"
$"0000 FCCE D0D6 60D6 60D0 D0D0 CCCF 0000"
$"0000 FCCE 0D06 6D66 0D0D 0D0D 0CCF 0000"
$"0000 FCCE D0D6 6660 D0D0 D0D0 CCCF 0000"
$"0000 FCCE 0D06 660D 0D0D 0D0D 0CCF 0000"
$"0000 FCCE D0D6 60D0 D0D0 D0D0 CCCF 0000"
$"0000 FCCE 0D06 0D0D 0D0D 0D0D 0CCF 0000"
$"0000 FCCE D0D0 D0D0 D0D0 D0D0 CCCF 0000"
$"0000 FCCC 0C0C 0C0C 0C0C 0C0C 0CCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC FFFF FFFF CCCF 0000"
$"0000 FCCC CCCC CCCC 0C0C 0C0C CCCF 0000"
$"0000 FCC8 8CCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCC3 3CCC CCCC CCCC CCCC CCCF 0000"
$"0000 FCCC CCCC CCCC CCCC CCCC CCCF 0000"
$"0000 0FFF FFFF FFFF FFFF FFFF FFF0 0000"
$"0000 0FEE EEEE EEEE EEFF FFFF FFF0 0000"
$"0000 0FDD DDDD DDEE EEEE EEFF FFF0 0000"
$"0000 0FDD DDDD DDDD DEEE EEEE EEF0 0000"
$"0000 0FFF FFFF FFFF FFFF FFFF FFF0"
};
#endif

View File

@ -1,192 +0,0 @@
/*
DskIcon.r
Copyright (C) 2003 Philip Cummins, Richard F. Bannister,
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.
*/
#if SmallIconAPIAvail
resource 'ics#' (DskIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"7FE0 4030 4028 403C 4004 4004 4004 4FC4"
$"4AA4 4BA4 4824 4BA4 4AA4 4FE4 4004 7FFC",
/* [2] */
$"7FE0 7FF0 7FF8 7FFC 7FFC 7FFC 7FFC 7FFC"
$"7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC"
}
};
#endif
#if ColorIconAPIAvail
resource 'ics8' (DskIconId, purgeable) {
$"00FF FFFF FFFF FFFF FFFF FF00 0000 0000"
$"00FF 0000 0000 0000 0000 FFFF 0000 0000"
$"00FF 0000 0000 0000 0000 FF2A FF00 0000"
$"00FF 0000 0000 0000 0000 FFFF FFFF 0000"
$"00FF 0000 0000 0000 0000 00FA FAFF 0000"
$"00FF 0000 0000 0000 0000 0000 00FF 0000"
$"00FF 0000 0000 0000 0000 0000 00FF 0000"
$"00FF 0000 E0E0 E0E0 E0E0 0000 00FF 0000"
$"00FF 0000 E054 AB2A AB54 E000 00FF 0000"
$"00FF 0000 E054 ABAB AB54 E000 00FF 0000"
$"00FF 0000 E054 5454 5454 E000 00FF 0000"
$"00FF 0000 E054 ABAB AB54 E000 00FF 0000"
$"00FF 0000 E054 AB2A AB54 E000 00FF 0000"
$"00FF 0000 E0FF E0E0 E0E0 E000 00FF 0000"
$"00FF 0000 0000 0000 0000 0000 00FF 0000"
$"00FF FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif
#if ColorIconAPIAvail
resource 'ics4' (DskIconId, purgeable) {
$"0FFF FFFF FFF0 0000 0F00 0000 00FF 0000"
$"0F00 0000 00FC F000 0F00 0000 00FF FF00"
$"0F00 0000 000D DF00 0F00 0000 0000 0F00"
$"0F00 0000 0000 0F00 0F00 FFFF FF00 0F00"
$"0F00 FCE0 ECF0 0F00 0F00 FCEE ECF0 0F00"
$"0F00 FCCC CCF0 0F00 0F00 FCEE ECF0 0F00"
$"0F00 FCE0 ECF0 0F00 0F00 FFFF FFF0 0F00"
$"0F00 0000 0000 0F00 0FFF FFFF FFFF FF"
};
#endif
resource 'ICN#' (DskIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"1FFF F800 1000 0C00 1000 0A00 1000 0900"
$"1000 0880 1000 0840 1000 0820 1000 0FF0"
$"1000 0010 1000 0010 1000 0010 1000 0010"
$"1000 0010 10FF FC10 1120 9210 1121 5110"
$"1121 5110 1121 5110 1120 9110 111F E110"
$"1100 0110 1100 0110 111F F110 1120 0910"
$"1120 0910 1122 8910 1123 0910 1122 0910"
$"1120 0910 10FF FE10 1000 0010 1FFF FFF0",
/* [2] */
$"1FFF F800 1FFF FC00 1FFF FE00 1FFF FF00"
$"1FFF FF80 1FFF FFC0 1FFF FFE0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
}
};
#if ColorIconAPIAvail
resource 'icl8' (DskIconId, purgeable) {
$"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FF00 0000 0000 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FFFF 0000 0000 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FF2A FF00 0000 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FF2A 2AFF 0000 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FF2A 2A2A FF00 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FF2A 2A2A 2AFF 0000 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FF2A 2A2A 2A2A FF00 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 FFFF FFFF FFFF FFFF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 00FA FAFA FAFA FAFF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 00FF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 00FF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 00FF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 00FF 0000 0000"
$"0000 00FF 0000 00F5 E0FF E0E0 E0E0 E0E0"
$"E0E0 E0E0 E0E0 0000 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFA"
$"FFFA 2AAB 5454 E000 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF"
$"00FF 2AAB 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF"
$"00FF 2AAB 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFF"
$"00FF 2AAB 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2AFA"
$"FFFA 2AAB 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 54AB ABAB ABAB"
$"ABAB AB54 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 5454 5454 5454"
$"5454 5454 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 5454 5454 5454"
$"5454 5454 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 54AB ABAB ABAB"
$"ABAB ABAB 5454 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A"
$"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A"
$"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A EC2A"
$"EC2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A ECEC"
$"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A EC2A"
$"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00E0 5454 AB2A 2A2A 2A2A"
$"2A2A 2A2A AB54 54E0 0000 00FF 0000 0000"
$"0000 00FF 0000 00F5 FFFF E0E0 E0E0 E0E0"
$"E0E0 E0E0 FFE0 E0F5 0000 00FF 0000 0000"
$"0000 00FF 0000 0000 0000 0000 0000 0000"
$"0000 0000 0000 0000 0000 00FF 0000 0000"
$"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif
#if ColorIconAPIAvail
resource 'icl4' (DskIconId, purgeable) {
$"000F FFFF FFFF FFFF FFFF F000 0000 0000"
$"000F 0000 0000 0000 0000 FF00 0000 0000"
$"000F 0000 0000 0000 0000 F0F0 0000 0000"
$"000F 0000 0000 0000 0000 FC0F 0000 0000"
$"000F 0000 0000 0000 0000 F0C0 F000 0000"
$"000F 0000 0000 0000 0000 FC0C 0F00 0000"
$"000F 0000 0000 0000 0000 F0C0 C0F0 0000"
$"000F 0000 0000 0000 0000 FFFF FFFF 0000"
$"000F 0000 0000 0000 0000 0DDD DDDF 0000"
$"000F 0000 0000 0000 0000 0000 000F 0000"
$"000F 0000 0000 0000 0000 0000 000F 0000"
$"000F 0000 0000 0000 0000 0000 000F 0000"
$"000F 0000 0000 0000 0000 0000 000F 0000"
$"000F 0000 FFFF FFFF FFFF FF00 000F 0000"
$"000F 000F CCEC 0C0D FD0E CCF0 000F 0000"
$"000F 000F CCE0 C0CF 0FCE CCCF 000F 0000"
$"000F 000F CCEC 0C0F 0F0E CCCF 000F 0000"
$"000F 000F CCE0 C0CF 0FCE CCCF 000F 0000"
$"000F 000F CCEC 0C0D FD0E CCCF 000F 0000"
$"000F 000F CCCE EEEE EEEC CCCF 000F 0000"
$"000F 000F CCCC CCCC CCCC CCCF 000F 0000"
$"000F 000F CCCC CCCC CCCC CCCF 000F 0000"
$"000F 000F CCCE EEEE EEEE CCCF 000F 0000"
$"000F 000F CCEC 0C0C 0C0C ECCF 000F 0000"
$"000F 000F CCE0 C0C0 C0C0 ECCF 000F 0000"
$"000F 000F CCEC 0C6C 6C0C ECCF 000F 0000"
$"000F 000F CCE0 C066 C0C0 ECCF 000F 0000"
$"000F 000F CCEC 0C6C 0C0C ECCF 000F 0000"
$"000F 000F CCE0 C0C0 C0C0 ECCF 000F 0000"
$"000F 0000 FFFF FFFF FFFF FFF0 000F 0000"
$"000F 0000 0000 0000 0000 0000 000F 0000"
$"000F FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif

View File

@ -1,192 +0,0 @@
/*
RomIcon.r
Copyright (C) 2003 Philip Cummins, Richard F. Bannister,
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.
*/
#if SmallIconAPIAvail
resource 'ics#' (RomIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"7FE0 4030 4028 403C 4004 5FC4 5FC4 5FC4"
$"5FC4 4004 5FC4 5FC4 5FC4 5FC4 4004 7FFC",
/* [2] */
$"7FE0 7FF0 7FF8 7FFC 7FFC 7FFC 7FFC 7FFC"
$"7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC"
}
};
#endif
#if ColorIconAPIAvail
resource 'ics8' (RomIconId, purgeable) {
$"00FF FFFF FFFF FFFF FFFF FF00 0000 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 FFFF 0000 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 FF2B FF00 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 FFFF FFFF 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5FF FFFF FFFF FFFF F5F5 F5FF 0000"
$"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000"
$"00FF FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif
#if ColorIconAPIAvail
resource 'ics4' (RomIconId, purgeable) {
$"0FFF FFFF FFF0 0000 0F0C 0C0C 0CFF 0000"
$"0FC0 C0C0 C0FC F000 0F0C 0C0C 0CFF FF00"
$"0FC0 C0C0 C0C0 CF00 0F0F FFFF FF0C 0F00"
$"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00"
$"0FCF FFFF FFC0 CF00 0F0C 0C0C 0C0C 0F00"
$"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00"
$"0FCF FFFF FFC0 CF00 0F0F FFFF FF0C 0F00"
$"0FC0 C0C0 C0C0 CF00 0FFF FFFF FFFF FF"
};
#endif
resource 'ICN#' (RomIconId, purgeable) {
{ /* array: 2 elements */
/* [1] */
$"1FFF FC00 1000 0600 1000 0500 1000 0480"
$"1000 0440 1000 0420 1000 07F0 1000 0010"
$"1155 5010 12AA A810 13FF F810 13FF F810"
$"13FF F810 13FF F810 13FF F810 13FF F810"
$"12AA A810 1155 5010 1000 0010 1155 5010"
$"12AA A810 13FF F810 13FF F810 13FF F810"
$"13FF F810 13FF F810 13FF F810 12AA A810"
$"1155 5010 1000 0010 1000 0010 1FFF FFF0",
/* [2] */
$"1FFF FC00 1FFF FE00 1FFF FF00 1FFF FF80"
$"1FFF FFC0 1FFF FFE0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
$"1FFF FFF0 1FFF FFF0 1FFF FFF0 1FFF FFF0"
}
};
#if ColorIconAPIAvail
resource 'icl8' (RomIconId, purgeable) {
$"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF 0000 0000 0000 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF FF00 0000 0000 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF 2BFF 0000 0000 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF 2B2B FF00 0000 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF 2B2B 2BFF 0000 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF 2B2B 2B2B FF00 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5FF FFFF FFFF FFFF 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF"
$"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00"
$"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00"
$"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF"
$"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF"
$"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00"
$"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 FF00 FF00 FF00 FF00 FF00"
$"FF00 FF00 FFF5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5FF F5FF F5FF F5FF F5FF"
$"F5FF F5FF F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
$"F5F5 F5F5 F5F5 F5F5 F5F5 F5FF 0000 0000"
$"0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF"
$"FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif
#if ColorIconAPIAvail
resource 'icl4' (RomIconId, purgeable) {
$"000F FFFF FFFF FFFF FFFF FF00 0000 0000"
$"000F 0C0C 0C0C 0C0C 0C0C 0FF0 0000 0000"
$"000F C0C0 C0C0 C0C0 C0C0 CFCF 0000 0000"
$"000F 0C0C 0C0C 0C0C 0C0C 0FCC F000 0000"
$"000F C0C0 C0C0 C0C0 C0C0 CFCC CF00 0000"
$"000F 0C0C 0C0C 0C0C 0C0C 0FCC CCF0 0000"
$"000F C0C0 C0C0 C0C0 C0C0 CFFF FFFF 0000"
$"000F 0C0C 0C0C 0C0C 0C0C 0C0C 0C0F 0000"
$"000F C0CF CFCF CFCF CFCF C0C0 C0CF 0000"
$"000F 0CF0 F0F0 F0F0 F0F0 FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0F0 F0F0 F0F0 F0F0 F0C0 C0CF 0000"
$"000F 0C0F 0F0F 0F0F 0F0F 0C0C 0C0F 0000"
$"000F C0C0 C0C0 C0C0 C0C0 C0C0 C0CF 0000"
$"000F 0C0F 0F0F 0F0F 0F0F 0C0C 0C0F 0000"
$"000F C0F0 F0F0 F0F0 F0F0 F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CFF FFFF FFFF FFFF FC0C 0C0F 0000"
$"000F C0FF FFFF FFFF FFFF F0C0 C0CF 0000"
$"000F 0CF0 F0F0 F0F0 F0F0 FC0C 0C0F 0000"
$"000F C0CF CFCF CFCF CFCF C0C0 C0CF 0000"
$"000F 0C0C 0C0C 0C0C 0C0C 0C0C 0C0F 0000"
$"000F C0C0 C0C0 C0C0 C0C0 C0C0 C0CF 0000"
$"000F FFFF FFFF FFFF FFFF FFFF FFFF"
};
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +0,0 @@
/*
main.r
Copyright (C) 2003 Philip Cummins, Richard F. Bannister,
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.
*/
#include "CNFGRSRC.h"
/* Alerts Constants */
#define kStandardAlert 128
resource 'DITL' (kStandardAlert, purgeable) {
{ /* array DITLarray: 2 elements */
/* [1] */
{177, 293, 197, 351},
Button {
enabled,
"OK"
},
/* [2] */
{10, 72, 162, 353},
StaticText {
disabled,
"^0\n\n^1^2^3"
}
}
};
resource 'ALRT' (kStandardAlert, "Non Fatal Error", purgeable) {
{40, 43, 249, 405},
kStandardAlert,
{ /* array: 4 elements */
/* [1] */
OK, visible, sound1,
/* [2] */
OK, visible, sound1,
/* [3] */
OK, visible, sound1,
/* [4] */
OK, visible, sound1
},
alertPositionMainScreen
};

View File

@ -1,17 +0,0 @@
# Deprecated targets
Targets that I'm not in a position to maintain right now. Perhaps they'll come
back from the dead one day. (MACOSX especially; I don't own any computer that
runs that at the moment...)
Do not expect any of these targets to build.
- `MACOSX`: macOS / Mac OS X
- `NDS`: Nintendo DS
- `OLDMAC`: Classic Mac OS
- `UNIX`: raw X11
- `XPLAT/OSGLUGTK.c`: GTK (Linux)
- `XPLAT/OSGLUSDL.c`: SDL 1.2 (or lower?); might be useful for archaic systems
While compatibility with old/esoteric operating systems is neat, the primary
focus will be on SDL2 moving forwards.

File diff suppressed because it is too large Load Diff

View File

@ -1,79 +0,0 @@
/* --- sending debugging info to file --- */
#include <windows.h>
#include <tchar.h>
#include "SYSDEPNS.h"
#include "UI/WIN32/OSGLUWIN.h"
#if dbglog_HAVE
LOCALVAR HANDLE dbglog_File = INVALID_HANDLE_VALUE;
LOCALFUNC bool dbglog_open0(void)
{
TCHAR pathName[_MAX_PATH];
TCHAR Child0[] = TEXT("\\dbglog.txt");
size_t newlen;
if (GetAppDir(pathName)) {
newlen = _tcslen(pathName) + _tcslen(Child0);
if (newlen + 1 < _MAX_PATH) {
_tcscat(pathName, Child0);
dbglog_File = CreateFile(
pathName, /* pointer to name of the file */
GENERIC_READ + GENERIC_WRITE,
/* access (read-write) mode */
0, /* share mode */
NULL, /* pointer to security descriptor */
OPEN_ALWAYS, /* how to create */
FILE_ATTRIBUTE_NORMAL, /* file attributes */
NULL /* handle to file with attributes to copy */
);
if (INVALID_HANDLE_VALUE == dbglog_File) {
/* report error (how?) */
} else if (SetFilePointer(
dbglog_File, /* handle of file */
0, /* number of bytes to move file pointer */
nullpr,
/* address of high-order word of distance to move */
FILE_BEGIN /* how to move */
) != 0)
{
/* report error (how?) */
}
}
}
return (INVALID_HANDLE_VALUE != dbglog_File);
}
LOCALPROC dbglog_write0(char *s, uimr L)
{
DWORD BytesWritten;
if (INVALID_HANDLE_VALUE != dbglog_File) {
if (! WriteFile(dbglog_File, /* handle of file to read */
(LPVOID)s, /* address of buffer that receives data */
(DWORD)L, /* number of bytes to read */
&BytesWritten, /* address of number of bytes read */
nullpr) /* address of structure for data */
|| ((uint32_t)BytesWritten != L))
{
/* report error (how?) */
}
}
}
LOCALPROC dbglog_close0(void)
{
if (INVALID_HANDLE_VALUE != dbglog_File) {
if (! SetEndOfFile(dbglog_File)) {
/* report error (how?) */
}
(void) CloseHandle(dbglog_File);
dbglog_File = INVALID_HANDLE_VALUE;
}
}
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,435 +0,0 @@
#include <windows.h>
#include "SYSDEPNS.h"
#include "CNFGGLOB.h"
#include "CNFGRAPI.h"
#include "HW/KBRD/KEYCODES.h"
#include "UI/COMOSGLU.h"
#include "UI/WIN32/OSGLUWIN.h"
#include "UI/CONTROLM.h"
#include "UTIL/ENDIANAC.h"
/* keyboard */
static uint8_t WinKey2Mac[256];
static inline void AssignOneMacKey(uint8_t WinKey, uint8_t MacKey)
{
WinKey2Mac[WinKey] = MacKey;
}
bool InitWinKey2Mac(void)
{
memset(WinKey2Mac, MKC_None, sizeof(WinKey2Mac));
AssignOneMacKey('A', MKC_A);
AssignOneMacKey('S', MKC_S);
AssignOneMacKey('D', MKC_D);
AssignOneMacKey('F', MKC_F);
AssignOneMacKey('H', MKC_H);
AssignOneMacKey('G', MKC_G);
AssignOneMacKey('Z', MKC_Z);
AssignOneMacKey('X', MKC_X);
AssignOneMacKey('C', MKC_C);
AssignOneMacKey('V', MKC_V);
AssignOneMacKey('B', MKC_B);
AssignOneMacKey('Q', MKC_Q);
AssignOneMacKey('W', MKC_W);
AssignOneMacKey('E', MKC_E);
AssignOneMacKey('R', MKC_R);
AssignOneMacKey('Y', MKC_Y);
AssignOneMacKey('T', MKC_T);
AssignOneMacKey('1', MKC_1);
AssignOneMacKey('2', MKC_2);
AssignOneMacKey('3', MKC_3);
AssignOneMacKey('4', MKC_4);
AssignOneMacKey('6', MKC_6);
AssignOneMacKey('5', MKC_5);
AssignOneMacKey(myVK_Equal, MKC_Equal);
AssignOneMacKey('9', MKC_9);
AssignOneMacKey('7', MKC_7);
AssignOneMacKey(myVK_Subtract, MKC_Minus);
AssignOneMacKey('8', MKC_8);
AssignOneMacKey('0', MKC_0);
AssignOneMacKey(myVK_RightBracket, MKC_RightBracket);
AssignOneMacKey('O', MKC_O);
AssignOneMacKey('U', MKC_U);
AssignOneMacKey(myVK_LeftBracket, MKC_LeftBracket);
AssignOneMacKey('I', MKC_I);
AssignOneMacKey('P', MKC_P);
AssignOneMacKey(VK_RETURN, MKC_Return);
AssignOneMacKey('L', MKC_L);
AssignOneMacKey('J', MKC_J);
AssignOneMacKey(myVK_SingleQuote, MKC_SingleQuote);
AssignOneMacKey('K', MKC_K);
AssignOneMacKey(myVK_SemiColon, MKC_SemiColon);
AssignOneMacKey(myVK_BackSlash, MKC_formac_BackSlash);
AssignOneMacKey(myVK_Comma, MKC_Comma);
AssignOneMacKey(myVK_Slash, MKC_formac_Slash);
AssignOneMacKey('N', MKC_N);
AssignOneMacKey('M', MKC_M);
AssignOneMacKey(myVK_Period, MKC_Period);
AssignOneMacKey(VK_TAB, MKC_Tab);
AssignOneMacKey(VK_SPACE, MKC_Space);
AssignOneMacKey(myVK_Grave, MKC_formac_Grave);
AssignOneMacKey(VK_BACK, MKC_BackSpace);
AssignOneMacKey(VK_ESCAPE, MKC_formac_Escape);
AssignOneMacKey(VK_MENU, MKC_formac_Command);
AssignOneMacKey(VK_LMENU, MKC_formac_Command);
AssignOneMacKey(VK_RMENU, MKC_formac_RCommand);
AssignOneMacKey(VK_SHIFT, MKC_formac_Shift);
AssignOneMacKey(VK_LSHIFT, MKC_formac_Shift);
AssignOneMacKey(VK_RSHIFT, MKC_formac_RShift);
AssignOneMacKey(VK_CAPITAL, MKC_formac_CapsLock);
AssignOneMacKey(VK_APPS, MKC_formac_ROption);
AssignOneMacKey(VK_LWIN, MKC_formac_Option);
AssignOneMacKey(VK_RWIN, MKC_formac_ROption);
AssignOneMacKey(VK_CONTROL, MKC_formac_Control);
AssignOneMacKey(VK_LCONTROL, MKC_formac_Control);
AssignOneMacKey(VK_RCONTROL, MKC_formac_RControl);
AssignOneMacKey(VK_F1, MKC_formac_F1);
AssignOneMacKey(VK_F2, MKC_formac_F2);
AssignOneMacKey(VK_F3, MKC_formac_F3);
AssignOneMacKey(VK_F4, MKC_formac_F4);
AssignOneMacKey(VK_F5, MKC_formac_F5);
AssignOneMacKey(VK_F6, MKC_F6);
AssignOneMacKey(VK_F7, MKC_F7);
AssignOneMacKey(VK_F8, MKC_F8);
AssignOneMacKey(VK_F9, MKC_F9);
AssignOneMacKey(VK_F10, MKC_F10);
AssignOneMacKey(VK_F11, MKC_F11);
AssignOneMacKey(VK_F12, MKC_F12);
AssignOneMacKey(VK_DECIMAL, MKC_Decimal);
AssignOneMacKey(VK_DELETE, MKC_Decimal);
/* AssignOneMacKey(VK_RIGHT, 0x42); */
AssignOneMacKey(VK_MULTIPLY, MKC_KPMultiply);
AssignOneMacKey(VK_ADD, MKC_KPAdd);
/* AssignOneMacKey(VK_LEFT, 0x46); */
AssignOneMacKey(VK_NUMLOCK, MKC_Clear);
/* AssignOneMacKey(VK_DOWN, 0x48); */
AssignOneMacKey(VK_DIVIDE, MKC_KPDevide);
/* AssignOneMacKey(VK_RETURN, MKC_formac_Enter); */
/* AssignOneMacKey(VK_UP, 0x4D); */
AssignOneMacKey(VK_DIVIDE, MKC_KPDevide);
AssignOneMacKey(VK_SUBTRACT, MKC_KPSubtract);
AssignOneMacKey(VK_SEPARATOR, MKC_KPEqual);
AssignOneMacKey(VK_NUMPAD0, MKC_KP0);
AssignOneMacKey(VK_NUMPAD1, MKC_KP1);
AssignOneMacKey(VK_NUMPAD2, MKC_KP2);
AssignOneMacKey(VK_NUMPAD3, MKC_KP3);
AssignOneMacKey(VK_NUMPAD4, MKC_KP4);
AssignOneMacKey(VK_NUMPAD5, MKC_KP5);
AssignOneMacKey(VK_NUMPAD6, MKC_KP6);
AssignOneMacKey(VK_NUMPAD7, MKC_KP7);
AssignOneMacKey(VK_NUMPAD8, MKC_KP8);
AssignOneMacKey(VK_NUMPAD9, MKC_KP9);
AssignOneMacKey(VK_LEFT, MKC_Left);
AssignOneMacKey(VK_RIGHT, MKC_Right);
AssignOneMacKey(VK_DOWN, MKC_Down);
AssignOneMacKey(VK_UP, MKC_Up);
AssignOneMacKey(myVK_PRIOR, MKC_formac_PageUp);
AssignOneMacKey(myVK_NEXT, MKC_formac_PageDown);
AssignOneMacKey(myVK_END, MKC_formac_End);
AssignOneMacKey(myVK_HOME, MKC_formac_Home);
AssignOneMacKey(myVK_INSERT, MKC_formac_Help);
AssignOneMacKey(myVK_DELETE, MKC_formac_ForwardDel);
AssignOneMacKey(myVK_HELP, MKC_formac_Help);
AssignOneMacKey(myVK_SNAPSHOT, MKC_Print);
AssignOneMacKey(myVK_SCROLL, MKC_ScrollLock);
AssignOneMacKey(myVK_PAUSE, MKC_Pause);
AssignOneMacKey(myVK_OEM_102, MKC_AngleBracket);
InitKeyCodes();
#if ItnlKyBdFix
InitCheckKeyboardLayout();
#endif
return true;
}
LOCALPROC DoKeyCode(int i, bool down)
{
uint8_t key = WinKey2Mac[ItnlKyBdFix ? VkMapA[i] : i];
if (MKC_None != key) {
Keyboard_UpdateKeyMap2(key, down);
}
}
#if EnableGrabSpecialKeys
LOCALVAR bool HaveSetSysParam = false;
#endif
LOCALPROC CheckTheCapsLock(void)
{
DoKeyCode(VK_CAPITAL, (GetKeyState(VK_CAPITAL) & 1) != 0);
}
#if EnableGrabSpecialKeys
LOCALVAR bool VK_LWIN_pressed = false;
LOCALVAR bool VK_RWIN_pressed = false;
void CheckForLostKeyUps(void)
{
if (HaveSetSysParam) {
/* check for lost key ups */
if (VK_LWIN_pressed) {
if ((GetAsyncKeyState(VK_LWIN) & 0x8000) == 0) {
DoKeyCode(VK_LWIN, false);
VK_LWIN_pressed = false;
}
}
if (VK_RWIN_pressed) {
if ((GetAsyncKeyState(VK_RWIN) & 0x8000) == 0) {
DoKeyCode(VK_RWIN, false);
VK_RWIN_pressed = false;
}
}
}
}
#endif
LOCALPROC DoVKcode0(int i, bool down)
{
#if EnableGrabSpecialKeys
if (HaveSetSysParam) {
/* will need to check for lost key ups */
if (VK_LWIN == i) {
VK_LWIN_pressed = down;
} else if (VK_RWIN == i) {
VK_RWIN_pressed = down;
}
}
#endif
DoKeyCode(i, down);
}
void DoVKcode(int i, uint8_t flags, bool down)
{
switch (i) {
#if MKC_formac_Control != MKC_formac_RControl
case VK_CONTROL:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_RControl : MKC_formac_Control,
down);
break;
#endif
#if MKC_formac_RCommand != MKC_formac_Command
case VK_MENU:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_RCommand : MKC_formac_Command,
down);
break;
#endif
case VK_RETURN:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_Enter : MKC_Return,
down);
break;
case myVK_HOME:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_Home : MKC_KP7,
down);
break;
case VK_UP:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_Up : MKC_KP8,
down);
break;
case myVK_PRIOR:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_PageUp : MKC_KP9,
down);
break;
case VK_LEFT:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_Left : MKC_KP4,
down);
break;
case myVK_CLEAR:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_Clear : MKC_KP5,
down);
break;
case VK_RIGHT:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_Right : MKC_KP6,
down);
break;
case myVK_END:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_End : MKC_KP1,
down);
break;
case VK_DOWN:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_Down : MKC_KP2,
down);
break;
case myVK_NEXT:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_PageDown : MKC_KP3,
down);
break;
case myVK_INSERT:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_Help : MKC_KP0,
down);
break;
case myVK_DELETE:
Keyboard_UpdateKeyMap2(TestBit(flags, 0)
? MKC_formac_ForwardDel : MKC_Decimal,
down);
break;
case VK_CAPITAL:
CheckTheCapsLock();
break;
default:
if ((i >= 0) && (i < 256)) {
DoVKcode0(i, down);
}
break;
}
}
bool WantCmdOptOnReconnect = false;
void ReconnectKeyCodes3(void)
{
int i;
CheckTheCapsLock();
if (WantCmdOptOnReconnect) {
WantCmdOptOnReconnect = false;
for (i = 0; i < 256; ++i) {
if ((GetKeyState(i) & 0x8000) != 0) {
if ((VK_CAPITAL != i)
&& (VK_RETURN != i))
{
DoVKcode0(i, true);
}
}
}
}
}
void DisconnectKeyCodes3(void)
{
DisconnectKeyCodes2();
SetCurMouseButton(false);
}
#if EnableGrabSpecialKeys
static HHOOK hKeyHook = NULL;
#endif
#if EnableGrabSpecialKeys
typedef struct {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
DWORD dwExtraInfo;
} _KBDLLHOOKSTRUCT;
#endif
#if EnableGrabSpecialKeys
LRESULT CALLBACK LowLevelKeyboardProc(
int nCode, /* hook code */
WPARAM wParam, /* message identifier */
LPARAM lParam /* pointer to structure with message data */
);
#endif
#if EnableGrabSpecialKeys
LRESULT CALLBACK LowLevelKeyboardProc(
int nCode, /* hook code */
WPARAM wParam, /* message identifier */
LPARAM lParam /* pointer to structure with message data */
)
{
if (nCode == HC_ACTION) {
_KBDLLHOOKSTRUCT *p = (_KBDLLHOOKSTRUCT *)lParam;
if (p->vkCode != VK_CAPITAL) {
switch (wParam) {
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
DoVKcode(p->vkCode, p->flags, true);
return 1;
break;
case WM_KEYUP:
case WM_SYSKEYUP:
DoVKcode(p->vkCode, p->flags, false);
return 1;
break;
}
}
}
return CallNextHookEx(hKeyHook, /* handle to current hook */
nCode, /* hook code passed to hook procedure */
wParam, /* value passed to hook procedure */
lParam /* value passed to hook procedure */
);
}
#endif
#if EnableGrabSpecialKeys
#define _WH_KEYBOARD_LL 13
#define _SPI_SETSCREENSAVERRUNNING 0x0061
#endif
#if EnableGrabSpecialKeys
LOCALVAR UINT nPreviousState;
#endif
#if EnableGrabSpecialKeys
void GrabSpecialKeys(void)
{
if ((hKeyHook == NULL) && ! HaveSetSysParam) {
/* this works on Windows XP */
hKeyHook = SetWindowsHookEx(
_WH_KEYBOARD_LL, /* type of hook to install */
(HOOKPROC)LowLevelKeyboardProc,
/* address of hook procedure */
AppInstance, /* handle to application instance */
0 /* identity of thread to install hook for */
);
if (hKeyHook == NULL) {
/* this works on Windows 95/98 */
SystemParametersInfo(_SPI_SETSCREENSAVERRUNNING, TRUE,
&nPreviousState, 0);
HaveSetSysParam = true;
}
}
}
void UnGrabSpecialKeys(void)
{
if (hKeyHook != NULL) {
(void) UnhookWindowsHookEx(hKeyHook);
hKeyHook = NULL;
}
if (HaveSetSysParam) {
SystemParametersInfo(_SPI_SETSCREENSAVERRUNNING, FALSE,
&nPreviousState, 0);
HaveSetSysParam = false;
}
}
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,150 +0,0 @@
#ifndef OSGLUWIN_H
#define OSGLUWIN_H
#include "SYSDEPNS.h"
#include "CNFGRAPI.h"
#include "CNFGGLOB.h"
#include "UI/COMOSGLU.h"
#include "UI/CONTROLM.h"
#include "UI/WIN32/SOUND.h"
/* Define the undefined */
#ifndef ItnlKyBdFix
#define ItnlKyBdFix 0
#endif
#ifdef UNICODE
#define UseUni 1
#else
#define UseUni 0
#endif
#ifndef InstallFileIcons
#define InstallFileIcons 0
#endif
#ifndef EnableGrabSpecialKeys
#define EnableGrabSpecialKeys (MayFullScreen && GrabKeysFullScreen)
#endif /* EnableGrabSpecialKeys */
/* Resource Ids */
#define IDI_VMAC 256
#if InstallFileIcons
#define IDI_ROM 257
#define IDI_DISK 258
#endif
/* API differences */
bool GetAppDir(LPTSTR pathName);
/* Utilities (move?) */
#define TestBit(i, p) (((unsigned long)(i) & PowOf2(p)) != 0)
/* Parameter buffers */
#if IncludePbufs
#define PbufHaveLock 1
HGLOBAL PbufDat[NumPbufs];
#endif
/* Main window info */
extern HWND MainWnd;
HINSTANCE AppInstance;
int WndX;
int WndY;
extern bool UseFullScreen;
extern bool UseMagnify;
#if MayFullScreen
short hOffset;
short vOffset;
#endif
void ToggleWantFullScreen(void);
/* cursor */
extern bool HaveCursorHidden;
extern bool WantCursorHidden;
extern bool MouseCaptured;
void SetCurMouseButton(bool v);
/* Keyboard */
#ifdef ItnlKyBdFix
uint8_t VkMapA[256];
void InitCheckKeyboardLayout(void);
void CheckKeyboardLayout(void);
#endif
/* these constants weren't in the header files I have */
#define myVK_Subtract 0xBD
#define myVK_Equal 0xBB
#define myVK_BackSlash 0xDC
#define myVK_Comma 0xBC
#define myVK_Period 0xBE
#define myVK_Slash 0xBF
#define myVK_SemiColon 0xBA
#define myVK_SingleQuote 0xDE
#define myVK_LeftBracket 0xDB
#define myVK_RightBracket 0xDD
#define myVK_Grave 0xC0
/* some new ones, need to check if in all header versions */
#define myVK_PRIOR 0x21
#define myVK_NEXT 0x22
#define myVK_END 0x23
#define myVK_HOME 0x24
#define myVK_INSERT 0x2D
#define myVK_DELETE 0x2E
#define myVK_HELP 0x2F
#define myVK_SCROLL 0x91
#define myVK_SNAPSHOT 0x2C
#define myVK_PAUSE 0x13
#define myVK_CLEAR 0x0C
#define myVK_OEM_8 0xDF
#define myVK_OEM_102 0xE2
extern bool WantCmdOptOnReconnect;
void DoVKcode(int i, uint8_t flags, bool down);
void DisconnectKeyCodes3(void);
void ReconnectKeyCodes3(void);
bool InitWinKey2Mac(void);
#if EnableGrabSpecialKeys
void GrabSpecialKeys(void);
void UnGrabSpecialKeys(void);
void CheckForLostKeyUps(void);
#endif
/* --- time, date, location --- */
#define dbglog_TimeStuff (0 && dbglog_HAVE)
extern uint32_t TrueEmulatedTime;
#define InvTimeDivPow 16
#define InvTimeDiv (1 << InvTimeDivPow)
#define InvTimeDivMask (InvTimeDiv - 1)
#define InvTimeStep 1089590 /* 1000 / 60.14742 * InvTimeDiv */
DWORD LastTime;
DWORD NextIntTime;
void IncrNextTime(void);
void InitNextTime(void);
bool UpdateTrueEmulatedTime(void);
bool CheckDateTime(void);
bool Init60thCheck(void);
void Timer_Suspend(void);
void Timer_Resume(void);
#endif // OSGLUWIN_H

View File

@ -1,292 +0,0 @@
/* --- sound --- */
#include "OSGLUWIN.h"
#if SoundEnabled
#include "UI/WIN32/SOUND.h"
tpSoundSamp TheSoundBuffer = nullpr;
HWAVEOUT hWaveOut = NULL;
void FillWithSilence(tpSoundSamp p, int n, trSoundSamp v)
{
int i;
for (i = n; --i >= 0; ) {
*p++ = v;
}
}
void Sound_BeginPlaying(void)
{
#if dbglog_SoundStuff
fprintf(stderr, "Sound_BeginPlaying\n");
#endif
}
void Sound_Start(void)
{
if (hWaveOut == NULL) {
WAVEFORMATEX wfex;
MMRESULT mmr;
int i;
tpSoundSamp p;
WAVEHDR *pwh;
wfex.wFormatTag = WAVE_FORMAT_PCM;
wfex.nChannels = 1;
wfex.nSamplesPerSec = SOUND_SAMPLERATE;
wfex.nAvgBytesPerSec = SOUND_SAMPLERATE;
#if 3 == kLn2SoundSampSz
wfex.nBlockAlign = 1;
wfex.wBitsPerSample = 8;
#elif 4 == kLn2SoundSampSz
wfex.nBlockAlign = 2;
wfex.wBitsPerSample = 16;
#else
#error "unsupported audio format"
#endif
wfex.cbSize = 0;
mmr = waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfex, 0,
0 /* (DWORD) AppInstance */, CALLBACK_NULL);
if (mmr != MMSYSERR_NOERROR) {
/*
not recursive:
MacMsg("waveOutOpen failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
} else {
p = TheSoundBuffer;
pwh = whdr;
for (i = 0; i < kSoundBuffers; ++i) {
pwh->lpData = (LPSTR)p;
pwh->dwBufferLength = kOneBuffSz;
pwh->dwBytesRecorded = 0;
pwh->dwUser = 0;
pwh->dwFlags = 0;
pwh->dwLoops = 0;
mmr = waveOutPrepareHeader(hWaveOut, pwh,
sizeof(WAVEHDR));
if (mmr != MMSYSERR_NOERROR) {
/*
not recursive:
MacMsg("waveOutPrepareHeader failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
} else {
pwh->dwFlags |= WHDR_DONE;
}
p += kOneBuffLen;
++pwh;
}
TheFillOffset = 0;
ThePlayOffset = 0;
TheWriteOffset = 0;
MinFilledSoundBuffs = kSoundBuffers;
wantplaying = false;
}
}
}
void Sound_Stop(void)
{
MMRESULT mmr;
int i;
wantplaying = false;
if (hWaveOut != NULL) {
DWORD StartTime = GetTickCount();
for (i = 0; i < kSoundBuffers; ++i) {
while (((whdr[i].dwFlags & WHDR_DONE) == 0)
&& ((uint32_t)(GetTickCount() - StartTime) < 1000))
{
Sleep(1);
}
mmr = waveOutUnprepareHeader(hWaveOut, &whdr[i],
sizeof(WAVEHDR));
if (mmr != MMSYSERR_NOERROR) {
/*
not recursive:
MacMsg("waveOutUnprepareHeader failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
}
}
mmr = waveOutClose(hWaveOut);
if (mmr != MMSYSERR_NOERROR) {
/*
MacMsg("waveOutClose failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
}
hWaveOut = NULL;
}
}
void SoundCheckVeryOften(void)
{
if ((hWaveOut != NULL) && (wantplaying)) {
label_retry:
{
uint16_t FilledSoundBuffs;
uint16_t ToPlaySize = TheFillOffset - ThePlayOffset;
uint16_t CurPlayBuffer =
(ThePlayOffset >> kLnOneBuffLen) & kSoundBuffMask;
if ((ToPlaySize > kOneBuffLen)
&& ((whdr[CurPlayBuffer].dwFlags & WHDR_DONE) != 0))
{
ThePlayOffset += kOneBuffLen;
goto label_retry;
}
FilledSoundBuffs = ToPlaySize >> kLnOneBuffLen;
if (FilledSoundBuffs < MinFilledSoundBuffs) {
MinFilledSoundBuffs = FilledSoundBuffs;
}
if (FilledSoundBuffs < 2) {
MMRESULT mmr;
uint16_t PrevPlayOffset = ThePlayOffset - kOneBuffLen;
uint16_t PrevPlayBuffer =
(PrevPlayOffset >> kLnOneBuffLen) & kSoundBuffMask;
uint16_t LastPlayedOffset =
((TheFillOffset >> kLnOneBuffLen) << kLnOneBuffLen)
- 1;
FillWithSilence(
TheSoundBuffer + (PrevPlayOffset & kAllBuffMask),
kOneBuffLen,
*(TheSoundBuffer
+ (LastPlayedOffset & kAllBuffMask)));
mmr = waveOutWrite(
hWaveOut, &whdr[PrevPlayBuffer], sizeof(WAVEHDR));
if (mmr != MMSYSERR_NOERROR) {
whdr[PrevPlayBuffer].dwFlags |= WHDR_DONE;
/*
not recursive:
MacMsg("waveOutWrite failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
}
ThePlayOffset = PrevPlayOffset;
goto label_retry;
}
}
}
}
#if 4 == kLn2SoundSampSz
void ConvertSoundBlockToNative(tpSoundSamp p)
{
int i;
for (i = kOneBuffLen; --i >= 0; ) {
*p++ -= 0x8000;
}
}
#else
#define ConvertSoundBlockToNative(p)
#endif
void Sound_FilledBlocks(void)
{
while (0 != ((TheWriteOffset - TheFillOffset) >> kLnOneBuffLen)) {
uint16_t CurFillBuffer =
(TheFillOffset >> kLnOneBuffLen) & kSoundBuffMask;
bool IsOk = false;
ConvertSoundBlockToNative((tpSoundSamp)
whdr[CurFillBuffer].lpData);
if (hWaveOut != NULL) {
MMRESULT mmr = waveOutWrite(hWaveOut,
&whdr[CurFillBuffer], sizeof(WAVEHDR));
if (mmr == MMSYSERR_NOERROR) {
IsOk = true;
}
}
if (! IsOk) {
/*
not recursive:
MacMsg("waveOutWrite failed",
"Sorry, Mini vMac encountered errors"
" and cannot continue.", true);
*/
whdr[CurFillBuffer].dwFlags |= WHDR_DONE;
}
TheFillOffset += kOneBuffLen;
}
}
void Sound_WroteABlock(void)
{
if (wantplaying) {
Sound_FilledBlocks();
} else if (((TheWriteOffset - ThePlayOffset) >> kLnOneBuffLen) < 12)
{
/* just wait */
} else {
Sound_FilledBlocks();
wantplaying = true;
Sound_BeginPlaying();
}
}
void Sound_EndWrite(uint16_t actL)
{
TheWriteOffset += actL;
if (0 == (TheWriteOffset & kOneBuffMask)) {
/* just finished a block */
Sound_WroteABlock();
}
}
tpSoundSamp Sound_BeginWrite(uint16_t n, uint16_t *actL)
{
uint16_t ToFillLen = kAllBuffLen - (TheWriteOffset - ThePlayOffset);
uint16_t WriteBuffContig =
kOneBuffLen - (TheWriteOffset & kOneBuffMask);
if (WriteBuffContig < n) {
n = WriteBuffContig;
}
if (ToFillLen < n) {
/* overwrite previous buffer */
TheWriteOffset -= kOneBuffLen;
}
*actL = n;
return TheSoundBuffer + (TheWriteOffset & kAllBuffMask);
}
void Sound_SecondNotify(void)
{
if (hWaveOut != NULL) {
if (MinFilledSoundBuffs > DesiredMinFilledSoundBuffs) {
#if dbglog_SoundStuff
dbglog_writeln("MinFilledSoundBuffs too high");
#endif
IncrNextTime();
} else if (MinFilledSoundBuffs < DesiredMinFilledSoundBuffs) {
#if dbglog_SoundStuff
dbglog_writeln("MinFilledSoundBuffs too low");
#endif
++TrueEmulatedTime;
}
MinFilledSoundBuffs = kSoundBuffers;
}
}
#endif

View File

@ -1,56 +0,0 @@
#ifndef WIN32_SOUND_H
#define WIN32_SOUND_H
#include <windows.h>
#define kLn2SoundBuffers 4 /* kSoundBuffers must be a power of two */
#define kSoundBuffers (1 << kLn2SoundBuffers)
#define kSoundBuffMask (kSoundBuffers - 1)
#define DesiredMinFilledSoundBuffs 3
/*
if too big then sound lags behind emulation.
if too small then sound will have pauses.
*/
#define kLnOneBuffLen 9
#define kLnAllBuffLen (kLn2SoundBuffers + kLnOneBuffLen)
#define kOneBuffLen (1UL << kLnOneBuffLen)
#define kAllBuffLen (1UL << kLnAllBuffLen)
#define kLnOneBuffSz (kLnOneBuffLen + kLn2SoundSampSz - 3)
#define kLnAllBuffSz (kLnAllBuffLen + kLn2SoundSampSz - 3)
#define kOneBuffSz (1UL << kLnOneBuffSz)
#define kAllBuffSz (1UL << kLnAllBuffSz)
#define kOneBuffMask (kOneBuffLen - 1)
#define kAllBuffMask (kAllBuffLen - 1)
#define dbhBufferSize (kAllBuffSz + kOneBuffSz)
#define dbglog_SoundStuff (0 && dbglog_HAVE)
#define dbglog_SoundBuffStats (0 && dbglog_HAVE)
extern tpSoundSamp TheSoundBuffer;
uint16_t ThePlayOffset;
uint16_t TheFillOffset;
bool wantplaying;
uint16_t MinFilledSoundBuffs;
uint16_t TheWriteOffset;
extern HWAVEOUT hWaveOut;
WAVEHDR whdr[kSoundBuffers];
#define SOUND_SAMPLERATE /* 22050 */ 22255
/* = round(7833600 * 2 / 704) */
void FillWithSilence(tpSoundSamp p, int n, trSoundSamp v);
void Sound_BeginPlaying(void);
void Sound_Start(void);
void Sound_Stop(void);
void SoundCheckVeryOften(void);
void ConvertSoundBlockToNative(tpSoundSamp p);
void Sound_FilledBlocks(void);
void Sound_WroteABlock(void);
void Sound_EndWrite(uint16_t actL);
tpSoundSamp Sound_BeginWrite(uint16_t n, uint16_t *actL);
void Sound_SecondNotify(void);
#endif

View File

@ -1,167 +0,0 @@
#include "OSGLUWIN.h"
/* --- time, date, location --- */
uint32_t TrueEmulatedTime = 0;
LOCALVAR uint32_t TimeSecBase;
LOCALVAR DWORD TimeMilliBase;
LOCALVAR uint32_t NextFracTime;
bool HaveSetTimeResolution = false;
// API wrapper defines
/*
Timer resolution, as used by timeBeginPeriod(), in milliseconds.
Setting TimeResolution to 1 seems to drastically slow down
the clock in Virtual PC 7.0.2 for Mac. Using 3 is more polite
anyway, and should not cause much observable difference.
(note that 1/60 of a frame is 16.7 milliseconds)
*/
#ifndef TimeResolution
#define TimeResolution 3
#endif
/*
Windows NT: The default precision of the timeGetTime function can be five
milliseconds or more, depending on the machine. You can use the
timeBeginPeriod and timeEndPeriod functions to increase the precision of
timeGetTime. If you do so, the minimum difference between successive values
returned by timeGetTime can be as large as the minimum period value set using
timeBeginPeriod and timeEndPeriod. Use the QueryPerformanceCounter and
QueryPerformanceFrequency functions to measure short time intervals at a high
resolution. (MSDN for Visual Studio '97)
(TODO: use QueryPerformanceCounter instead? Always works on WinXP+)
*/
#define GetTimeMillisec timeGetTime
void IncrNextTime(void)
{
NextFracTime += InvTimeStep;
NextIntTime += (NextFracTime >> InvTimeDivPow);
NextFracTime &= InvTimeDivMask;
}
void InitNextTime(void)
{
NextIntTime = LastTime;
NextFracTime = 0;
IncrNextTime();
}
bool UpdateTrueEmulatedTime(void)
{
DWORD LatestTime;
int32_t TimeDiff;
LatestTime = GetTimeMillisec();
if (LatestTime != LastTime) {
LastTime = LatestTime;
TimeDiff = (LatestTime - NextIntTime);
/* this should work even when time wraps */
if (TimeDiff >= 0) {
if (TimeDiff > 256) {
/* emulation interrupted, forget it */
++TrueEmulatedTime;
InitNextTime();
#if dbglog_TimeStuff
dbglog_writelnNum(
"emulation interrupted",
TrueEmulatedTime
);
#endif
} else {
do {
++TrueEmulatedTime;
IncrNextTime();
TimeDiff = (LatestTime - NextIntTime);
} while (TimeDiff >= 0);
}
return true;
} else if (TimeDiff < -256) {
/* clock goofed if ever get here, reset */
#if dbglog_TimeStuff
dbglog_writeln("clock set back");
#endif
InitNextTime();
}
}
return false;
}
// Check that emulated clock equals real clock
bool CheckDateTime(void)
{
uint32_t NewMacDateInSecond;
NewMacDateInSecond =
((uint32_t)(LastTime - TimeMilliBase)) / 1000 + TimeSecBase;
if (CurMacDateInSeconds != NewMacDateInSecond) {
CurMacDateInSeconds = NewMacDateInSecond;
return true;
} else {
return false;
}
}
// Initialize emulated RTC check
bool Init60thCheck(void)
{
SYSTEMTIME s;
TIME_ZONE_INFORMATION r;
DWORD v;
DWORD t;
GetLocalTime(&s);
t = GetTimeMillisec();
TimeSecBase = Date2MacSeconds(
s.wSecond, s.wMinute, s.wHour,
s.wDay, s.wMonth, s.wYear
);
TimeMilliBase = t - s.wMilliseconds;
if (AutoTimeZone) {
v = GetTimeZoneInformation(&r);
if ((v != 0xFFFFFFFF) && (v != TIME_ZONE_ID_UNKNOWN)) {
int32_t dlsBias = \
(v != TIME_ZONE_ID_DAYLIGHT) ? r.StandardBias : r.DaylightBias;
CurMacDelta = \
(((uint32_t)(- (r.Bias + dlsBias) * 60)) & 0x00FFFFFF)
| (((v != TIME_ZONE_ID_DAYLIGHT) ? 0 : 0x80) << 24 );
}
}
LastTime = GetTimeMillisec();
InitNextTime();
OnTrueTime = TrueEmulatedTime;
(void) CheckDateTime();
return true;
}
void Timer_Suspend(void)
{
// If using higher-precision timer, stop
if (HaveSetTimeResolution) {
(void) timeEndPeriod(TimeResolution);
HaveSetTimeResolution = false;
}
}
void Timer_Resume(void)
{
TIMECAPS tc;
// Try to use higher-precision timer
if (
timeGetDevCaps(&tc, sizeof(TIMECAPS)) == TIMERR_NOERROR &&
(TimeResolution >= tc.wPeriodMin) &&
(TimeResolution <= tc.wPeriodMax) &&
timeBeginPeriod(TimeResolution) == TIMERR_NOERROR
) {
HaveSetTimeResolution = true;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,365 +0,0 @@
/*
UTIL/BPFILTER.h
Copyright (C) 2012 Michael Fort, 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.
*/
/*
Berkeley Packet Filter for localtalk emulation
*/
/* BPF and devices */
static unsigned char device_address[6] = {
0
};
static unsigned int device_buffer_size = 0;
static int fd = -1; /* BPF file descriptor */
static struct bpf_version bpf_version;
static struct bpf_program bpf_program;
static struct bpf_insn insns[] =
{
/* Program for BPF to filter out non-LTOE packets */
BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 12),
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0x809B, 0, 1),
BPF_STMT(BPF_RET + BPF_K, 65535),
BPF_STMT(BPF_RET + BPF_K, 0),
};
GLOBALVAR uint8_t * LT_TxBuffer = NULL;
/* Transmit state */
GLOBALVAR uint16_t LT_TxBuffSz = 0;
/*
Transmit buffer that is reused from tx packet to tx packet.
The 's' byte represents the source mac address (ours) and we don't
have to initialize it because the MAC device will automatically
fill it in for us. The four 'p' bytes represent the process number
of this Mini vMac application. It helps differentiate packets
between two applications running on the same machine. It is not
used at this time. There is a small chance two applications could
get the same LLAP/SDLC address to start with and would not work
correctly (1 in 254). The 'S' bytes are the size of the LLAP packet
since it can be smaller than the minimum sized Ethernet frame.
The process number is replaced at initialization. The size is
updated just before sending to BPF. All LLAP data is inserted
starting at byte 20.
*/
static unsigned char tx_buffer[20 + LT_TxBfMxSz] =
"\xFF\xFF\xFF\xFF\xFF\xFFssssss\x80\x9BppppSS";
/* Receive state */
GLOBALVAR uint8_t * LT_RxBuffer = NULL;
/* When data pending, this is used */
GLOBALVAR uint32_t LT_RxBuffSz = 0;
/* When data pending, this is used */
/* Macro used by only the get_sockaddrs function for readability. */
#define ROUNDUP(a, size) \
(((a) & ((size) - 1)) ? (1 + ((a) | ((size) - 1))) : (a))
/*
Utility function needed for walking the addresses of the
kernel route lookup
*/
LOCALPROC get_sockaddrs(int addrs, struct sockaddr* sa,
struct sockaddr** rti_info)
{
int loop;
int incr;
for (loop = 0; loop < RTAX_MAX; loop++) {
if (addrs & (1 << loop)) {
rti_info[loop] = sa;
incr = sa->sa_len ? ROUNDUP(sa->sa_len, sizeof(uint32_t))
: sizeof(uint32_t);
sa = (struct sockaddr*)((unsigned long int)sa + incr);
} else {
rti_info[loop] = NULL;
}
}
}
/*
This ugly function does a lot of steps to prepare the BPF
for our use.
1. Find the ethernet interface that the default route uses.
2. Determine the maximum number of BPF devices can exist.
3. Search for a usable BPF device and open it.
4. Set the BPF device to use our ethernet interface.
5. Get the proper buffer size to use with the BPF device.
6. Set some useful modes of operation on the BPF device.
7. Install a program on the device that filters out non-LTOE
packets.
*/
LOCALFUNC int get_ethernet(void)
{
int result;
int size;
struct rt_msghdr* message;
struct sockaddr_in* addrs;
struct sockaddr* sa_list[RTAX_MAX];
int loop;
char filename[64];
struct ifreq ifreq;
int enable = 1;
struct kinfo_proc kp;
size_t len = sizeof(kp);
int max = 4;
char device[32];
/* Get a socket to routed for IPv4 */
fd = socket(PF_ROUTE, SOCK_RAW, AF_INET);
if (fd == -1) {
return false;
}
/* Allocate a message */
size = sizeof(struct rt_msghdr) + 16 * sizeof(struct sockaddr_in);
message = (struct rt_msghdr*)malloc(size);
if (! message) {
close(fd);
return false;
}
memset(message, 0, size);
addrs = (struct sockaddr_in*)(message + 1);
/* Fill in the request */
message->rtm_msglen = size;
message->rtm_version = RTM_VERSION;
message->rtm_type = RTM_GET;
message->rtm_addrs
= RTA_DST | RTA_GATEWAY | RTA_NETMASK | RTA_IFP | RTA_IFA;
addrs->sin_len = sizeof(struct sockaddr_in);
addrs->sin_family = AF_INET;
addrs->sin_addr.s_addr = 0; /* 0.0.0.0 is default route */
/* Send the message to the kernel */
result = write(fd, message, size);
if (result < 0) {
close(fd);
free(message);
return false;
}
/* Read the result from the kernel */
result = read(fd, message, size);
if (result < 0) {
close(fd);
free(message);
return false;
}
/* Close the route socket */
close(fd);
/* Get pointer to the result then parse it */
struct sockaddr* sa = (struct sockaddr*)
((unsigned long int)message + sizeof(struct rt_msghdr));
get_sockaddrs(message->rtm_addrs, sa, sa_list);
/* Must have a LINK (Ethernet) */
if ((! sa_list[RTAX_IFP])
|| (sa_list[RTAX_IFP]->sa_family != AF_LINK))
{
return false;
}
int namelen = ((struct sockaddr_dl*)sa_list[RTAX_IFP])->sdl_nlen;
#if 0
int addrlen = ((struct sockaddr_dl*)sa_list[RTAX_IFP])->sdl_alen;
#endif
strncpy(device,
&((struct sockaddr_dl*)sa_list[RTAX_IFP])->sdl_data[0],
namelen);
device[namelen] = 0;
memcpy(device_address,
&((struct sockaddr_dl*)sa_list[RTAX_IFP])->sdl_data[namelen],
6);
memcpy(&(tx_buffer[6]),
&((struct sockaddr_dl*)sa_list[RTAX_IFP])->sdl_data[namelen],
6);
result = sysctlbyname("debug.bpf_maxdevices", &kp, &len, NULL, 0);
if (result == -1) {
return false;
}
max = *((int *)&kp);
for (loop = 0; loop < max; loop++) {
sprintf(filename, "/dev/bpf%d", loop);
fd = open(filename, O_RDWR | O_NONBLOCK | O_EXLOCK);
if (fd >= 0) {
/* sprintf(buffer, "using %s\n", filename); */
break;
}
}
if (fd <= 0) {
return false;
}
memset(&ifreq, 0, sizeof(struct ifreq));
strncpy(ifreq.ifr_name, device, IFNAMSIZ);
result = ioctl(fd, BIOCSETIF, &ifreq);
if (result) {
return false;
}
result = ioctl(fd, BIOCGBLEN, &device_buffer_size);
if (result) {
return false;
}
result = ioctl(fd, BIOCPROMISC, &enable);
if (result) {
return false;
}
result = ioctl(fd, BIOCSSEESENT, &enable);
if (result) {
return false;
}
result = ioctl(fd, BIOCSHDRCMPLT, &enable);
if (result) {
return false;
}
result = ioctl(fd, BIOCIMMEDIATE, &enable);
if (result) {
return false;
}
result = ioctl(fd, BIOCVERSION, &bpf_version);
if (result) {
return false;
}
bpf_program.bf_len = 4;
bpf_program.bf_insns = insns;
result = ioctl(fd, BIOCSETF, &bpf_program);
if (result) {
return false;
}
return true;
}
LOCALVAR unsigned char *RxBuffer = NULL;
/*
External function needed at startup to initialize the LocalTalk
functionality.
*/
LOCALFUNC int InitLocalTalk(void)
{
/* Perform a lot of stuff to get access to the Ethernet */
get_ethernet();
/*
Save the process id in the transmit buffer as it may be used
later to uniquely identify the sender to identify collisions
in dynamic llap node address assignment.
*/
*((uint32_t*)(&tx_buffer[14])) = htonl(getpid());
LT_TxBuffer = (uint8_t *)&tx_buffer[20];
RxBuffer = malloc(device_buffer_size);
if (NULL == RxBuffer) {
return false;
}
/* Initialized properly */
return true;
}
GLOBALOSGLUPROC LT_TransmitPacket(void)
{
int count;
/*
Write the length in the packet. This is needed because
Ethernet has a minimum 60 bytes length, which the MAC chip
will enforce on TX. Without the size, a simple 3 byte LLAP
packet would look like a (60 - 14 =) 46 byte LLAP packet.
*/
*((uint16_t*)(&tx_buffer[18])) = htons(LT_TxBuffSz);
/* Send the packet to Ethernet */
count = write(fd, tx_buffer, 20 + LT_TxBuffSz);
(void)count; /* unused */
}
LOCALVAR unsigned char* NextPacket = NULL;
LOCALVAR unsigned char* EndPackets = NULL;
LOCALPROC LocalTalkTick0(void)
{
/* Get a single buffer worth of packets from BPF */
unsigned char* device_buffer = RxBuffer;
int bytes = read(fd, device_buffer, device_buffer_size);
if (bytes > 0) {
/* Maybe multiple packets in this buffer */
#if 0
dbglog_WriteNote("SCC founds packets from BPF");
#endif
NextPacket = device_buffer;
EndPackets = device_buffer + bytes;
}
}
GLOBALOSGLUPROC LT_ReceivePacket(void)
{
label_retry:
if (NextPacket == NULL) {
LocalTalkTick0();
if (NextPacket != NULL) {
goto label_retry;
}
} else if (NextPacket >= EndPackets) {
#if 0
dbglog_WriteNote("SCC finished set of packets from BPF");
#endif
NextPacket = NULL;
goto label_retry;
} else {
unsigned char* packet = NextPacket;
/* Get pointer to BPF header */
struct bpf_hdr* header = (struct bpf_hdr *)packet;
/* Advance to next packet in buffer */
NextPacket += BPF_WORDALIGN(header->bh_hdrlen
+ header->bh_caplen);
/* Get clean references to data */
int ethernet_length = header->bh_caplen - 14;
int llap_length = htons(*((uint16_t*)(packet
+ header->bh_hdrlen + 18)));
unsigned char* start = packet + header->bh_hdrlen + 20;
if (llap_length <= ethernet_length) {
/* Start the receiver */
LT_RxBuffer = (uint8_t *)start;
LT_RxBuffSz = llap_length;
} else {
goto label_retry;
}
}
}

View File

@ -1,90 +0,0 @@
/*
UTIL/DATE2SEC.h
Copyright (C) 2003 Bradford L. Barrett, 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.
*/
/*
DATE 2(to) SEConds
convert year/month/day/hour/minute/second
to number of seconds since the beginning
of 1904, the format for storing dates
on the Macintosh.
The function jdate is from the program Webalizer
by Bradford L. Barrett.
*/
/*
The function jdate was found at the end of the file
webalizer.c in the program webalizer at
"www.mrunix.net/webalizer/".
Here is copyright info from the top of that file:
webalizer - a web server log analysis program
Copyright (C) 1997-2000 Bradford L. Barrett (brad@mrunix.net)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version, and provided that the above
copyright and permission notice is included with all distributed
copies of this or derived software.
*/
#include "SYSDEPNS.h"
#include "DATE2SEC.h"
uint32_t jdate(int day, int month, int year)
{
uint32_t days; /* value returned */
int mtable[] = {
0, 31, 59, 90, 120, 151,
181, 212, 243, 273, 304, 334
};
/*
First, calculate base number including leap
and Centenial year stuff
*/
days = (((uint32_t)year * 365) + day + mtable[month - 1]
+ ((year + 4) / 4) - ((year / 100) - (year / 400)));
/* now adjust for leap year before March 1st */
if ((year % 4 == 0)
&& (! ((year % 100 == 0) && (year % 400 != 0)))
&& (month < 3))
{
--days;
}
/* done, return with calculated value */
return (days + 5);
}
uint32_t Date2MacSeconds(int second, int minute, int hour,
int day, int month, int year)
{
uint32_t curjdate;
uint32_t basejdate;
curjdate = jdate(day, month, year);
basejdate = jdate(1, 1, 1904);
return (((curjdate - basejdate) * 24 + hour) * 60
+ minute) * 60 + second;
}

View File

@ -1,34 +0,0 @@
#ifndef DATE2SEC_H
#define DATE2SEC_H
#include "SYSDEPNS.h"
/* ************************************************************* */
/* */
/* JDATE - Julian date calculator */
/* */
/* Calculates the number of days since Jan 1, 0000. */
/* */
/* Originally written by Bradford L. Barrett (03/17/1988) */
/* Returns an unsigned long value representing the number of */
/* days since January 1, 0000. */
/* */
/* Note: Due to the changes made by Pope Gregory XIII in the */
/* 16th Centyry (Feb 24, 1582), dates before 1583 will */
/* not return a truely accurate number (will be at least */
/* 10 days off). Somehow, I don't think this will */
/* present much of a problem for most situations :) */
/* */
/* The number returned is adjusted by 5 to facilitate day of */
/* week calculations. The mod of the returned value gives the */
/* day of the week the date is. (ie: dow = days % 7) where */
/* dow will return 0=Sunday, 1=Monday, 2=Tuesday, etc... */
/* */
/* ************************************************************* */
uint32_t jdate(int day, int month, int year);
uint32_t Date2MacSeconds(
int second, int minute, int hour, int day, int month, int year
);
#endif

@ -1 +1 @@
Subproject commit b539e3f20ec443d7046153ed4623da277da89170
Subproject commit 894902820a3ea2f1ec470cd7fe338bde54045cf5