Compare commits
10 Commits
cf288d5361
...
b2840d5f1c
Author | SHA1 | Date |
---|---|---|
InvisibleUp | b2840d5f1c | |
InvisibleUp | ad7240e54b | |
InvisibleUp | 30ded064a5 | |
InvisibleUp | 33d075812a | |
InvisibleUp | 98db4595f1 | |
InvisibleUp | e15a387047 | |
InvisibleUp | b82ae9498c | |
InvisibleUp | 35961b3152 | |
InvisibleUp | 98a152bf7b | |
InvisibleUp | 4a075815b3 |
|
@ -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/
|
|
@ -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}"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
29
README.md
29
README.md
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
};
|
|
@ -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
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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 */
|
||||
|
||||
|
34
meson.build
34
meson.build
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
};
|
|
@ -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,
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
|
@ -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
|
||||
};
|
BIN
rsrc/SONYDRV.bin
BIN
rsrc/SONYDRV.bin
Binary file not shown.
BIN
rsrc/SONYICO.bin
BIN
rsrc/SONYICO.bin
Binary file not shown.
|
@ -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.
|
@ -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"
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
/* Load or create config and prepare for use */
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
bool Config_TryInit();
|
||||
|
||||
|
|
|
@ -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
|
@ -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
|
@ -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
|
@ -1 +0,0 @@
|
|||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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
|
@ -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
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
#include <stdint.h>
|
||||
|
||||
void ScreenHack_Install(uint8_t **pto);
|
|
@ -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);
|
||||
}
|
|
@ -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();
|
|
@ -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();
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#ifndef MYOSGLUE_H
|
||||
#define MYOSGLUE_H
|
||||
|
||||
#include "UTIL/DATE2SEC.h"
|
||||
#include "HW/KBRD/KEYCODES.h"
|
||||
#include "ERRCODES.h"
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 --- */
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
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
|
@ -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
|
|
@ -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
|
|
@ -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
|
@ -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
|
||||
};
|
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
|
Loading…
Reference in New Issue