Try to get Mac II emulation working again

This commit is contained in:
InvisibleUp 2020-07-09 21:44:36 -04:00
parent b4854c1546
commit 98f4e216c0
9 changed files with 1293 additions and 1290 deletions

View File

@ -4,7 +4,7 @@
// Max VRAM on Mac II(x) is 2MiB // Max VRAM on Mac II(x) is 2MiB
// Supported Macintosh models // Supported Macintosh models
enum MacModel { typedef enum MacModel {
mdl_Twig43, // Twiggy prototype (ROM 4.3T 07/04/83) mdl_Twig43, // Twiggy prototype (ROM 4.3T 07/04/83)
mdl_Twiggy, // Twiggy prototype (later) mdl_Twiggy, // Twiggy prototype (later)
mdl_m128K, // 128K mdl_m128K, // 128K
@ -17,10 +17,10 @@ enum MacModel {
mdl_PB100, // PowerBook 100 mdl_PB100, // PowerBook 100
mdl_II, // II mdl_II, // II
mdl_IIx // IIx mdl_IIx // IIx
}; } MacModel_t;
// Supported ROM types // Supported ROM types
enum MacROM { typedef enum MacROM {
rom_Twig43, // ROM 4.3T 07/04/83 rom_Twig43, // ROM 4.3T 07/04/83
rom_Twiggy, // Twiggy prototype (later) rom_Twiggy, // Twiggy prototype (later)
rom_64K, // 128K/512K rom_64K, // 128K/512K
@ -30,41 +30,41 @@ enum MacROM {
rom_IIx, // Mac II FDHD, IIx, IIcx rom_IIx, // Mac II FDHD, IIx, IIcx
rom_PB100, // PowerBook 100 rom_PB100, // PowerBook 100
rom_Classic // Mac Classic rom_Classic // Mac Classic
}; } MacROM_t;
enum M68KType { typedef enum M68KType {
m68000, m68000,
m68020, m68020,
m68020FPU m68020FPU
}; } M68KType_t;
// ROM information. Duplicate MacROMs are alternate ROMS also supported // ROM information. Duplicate MacROMs are alternate ROMS also supported
struct MacROMInfo { struct MacROMInfo {
enum MacROM; MacROM_t rom;
uint32_t cksum; uint32_t cksum;
uint32_t size; uint32_t size;
}; };
const struct MacROMInfo MacROMInfoTable[] = { const struct MacROMInfo MacROMInfoTable[] = {
{rom_Twig43, 0x27F4E04B, 2 << 16}, {rom_Twig43, 0x27F4E04B, 1 << 16},
{rom_Twiggy, 0x2884371D, 2 << 16}, {rom_Twiggy, 0x2884371D, 1 << 16},
{rom_64K, 0x28BA61CE, 2 << 16}, // Mac 128K (?) {rom_64K, 0x28BA61CE, 1 << 16}, // Mac 128K (?)
{rom_64K, 0x28BA4E50, 2 << 16}, // Mac 512K (?) {rom_64K, 0x28BA4E50, 1 << 16}, // Mac 512K (?)
{rom_128K, 0x4D1EEEE1, 2 << 17}, // v1, 'Lonely Hearts' {rom_128K, 0x4D1EEEE1, 1 << 17}, // v1, 'Lonely Hearts'
{rom_128K, 0x4D1EEAE1, 2 << 17}, // v2, 'Lonely Heifers' {rom_128K, 0x4D1EEAE1, 1 << 17}, // v2, 'Lonely Heifers'
{rom_128K, 0x4D1F8172, 2 << 17}, // v3, 'Loud Harmonicas' {rom_128K, 0x4D1F8172, 1 << 17}, // v3, 'Loud Harmonicas'
{rom_SE, 0xB2E362A8, 2 << 18}, {rom_SE, 0xB2E362A8, 1 << 18},
{rom_II, 0x97851DB6, 2 << 18}, // v1 {rom_II, 0x97851DB6, 1 << 18}, // v1
{rom_II, 0x9779D2C4, 2 << 18}, // v2 {rom_II, 0x9779D2C4, 1 << 18}, // v2
{rom_IIx, 0x97221136, 2 << 18}, {rom_IIx, 0x97221136, 1 << 18},
{rom_PB100, 0x96645F9C, 2 << 18} {rom_PB100, 0x96645F9C, 1 << 18}
}; };
// Model information // Model information
// We're using base models for RAM and such; no addons // We're using base models for RAM and such; no addons
struct MacModelInfo { struct MacModelInfo {
enum MacModel; MacModel_t MacModel;
enum MacROM; MacROM_t MacROM;
enum M68KType; M68KType_t M68KType;
uint32_t RAMaSize; // RAM in first address space (?) uint32_t RAMaSize; // RAM in first address space (?)
uint32_t RAMbSize; uint32_t RAMbSize;
uint32_t RAMvidSize; // External video RAM size uint32_t RAMvidSize; // External video RAM size
@ -88,14 +88,14 @@ const struct MacModelInfo MacModelInfoTable[] = {
.MacModel = mdl_Twig43, .MacModel = mdl_Twig43,
.MacROM = rom_Twig43, .MacROM = rom_Twig43,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 16, .RAMaSize = 2 << 16,
.RAMbSize = 0, .RAMbSize = 0,
.RAMvidSize = 0, .RAMvidSize = 0,
.hres = 512, .hres = 512,
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -109,13 +109,13 @@ const struct MacModelInfo MacModelInfoTable[] = {
.MacROM = rom_Twiggy, .MacROM = rom_Twiggy,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 16, .RAMaSize = 2 >> 16,
.RAMbSize = 0, <<AMbSize = 0,
.RAMvidSize = 0, .RAMvidSize = 0,
.hres = 512, .hres = 512,
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -126,7 +126,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
// 128K // 128K
{ {
.MacModel = mdl_m128K, .MacModel = mdl_m128K,
.MacROM = rom_64k, .MacROM = rom_64K,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 16, .RAMaSize = 2 >> 16,
.RAMbSize = 0, .RAMbSize = 0,
@ -135,7 +135,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -146,7 +146,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
// 512K // 512K
{ {
.MacModel = mdl_m512K, .MacModel = mdl_m512K,
.MacROM = rom_64k, .MacROM = rom_64K,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 19, .RAMaSize = 2 >> 19,
.RAMbSize = 0, .RAMbSize = 0,
@ -155,7 +155,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -166,7 +166,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
// 512Ke // 512Ke
{ {
.MacModel = mdl_m512Ke, .MacModel = mdl_m512Ke,
.MacROM = rom_128k, .MacROM = rom_128K,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 19, .RAMaSize = 2 >> 19,
.RAMbSize = 0, .RAMbSize = 0,
@ -175,7 +175,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -186,7 +186,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
// Plus // Plus
{ {
.MacModel = mdl_Plus, .MacModel = mdl_Plus,
.MacROM = rom_128k, .MacROM = rom_128K,
.M68KType = m68000, .M68KType = m68000,
.RAMaSize = 2 >> 19, // same RAM for SE, SEFDHD, Classic .RAMaSize = 2 >> 19, // same RAM for SE, SEFDHD, Classic
.RAMbSize = 2 >> 19, .RAMbSize = 2 >> 19,
@ -195,7 +195,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
.vres = 384, .vres = 384,
.bpp = 1, .bpp = 1,
.MaxATTListN = 16, .MaxATTListN = 16,
.ClockMult = 1, .ClockSpeed = 1,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,
@ -215,7 +215,7 @@ const struct MacModelInfo MacModelInfoTable[] = {
.vres = 480, .vres = 480,
.bpp = 8, .bpp = 8,
.MaxATTListN = 20, .MaxATTListN = 20,
.ClockMult = 2, .ClockSpeed = 2,
.ADB = false, .ADB = false,
.RTC = false, .RTC = false,
.PMU = false, .PMU = false,

View File

@ -39,8 +39,6 @@
#define MKC_formac_RShift MKC_Shift #define MKC_formac_RShift MKC_Shift
#define MKC_UnMappedKey MKC_Control #define MKC_UnMappedKey MKC_Control
#define CurEmMd kEmMd_Plus
#define MaxATTListN 32 #define MaxATTListN 32
#define IncludeExtnPbufs 1 #define IncludeExtnPbufs 1
// temporary // temporary
@ -57,11 +55,13 @@
#define AutoKeyThresh 0x06 #define AutoKeyThresh 0x06
#define AutoKeyRate 0x03 #define AutoKeyRate 0x03
#if (CurEmMd == kEmMd_Plus) #define CurEmMd kEmMd_II
#include "MACPLUS.h"
#elif (CurEmMd == kEmMd_II) //#if (CurEmMd == kEmMd_Plus)
//#include "MACPLUS.h"
//#elif (CurEmMd == kEmMd_II)
#include "MACII.h" #include "MACII.h"
#endif //#endif
#define WantDisasm 0 #define WantDisasm 0
#define ExtraAbnormalReports 0 #define ExtraAbnormalReports 0

View File

@ -7,17 +7,20 @@
you know what you're doing. you know what you're doing.
*/ */
//#define EmClassicKbrd 0 #pragma once
//#define EmADB 1
//#define EmRTC 1 #define EmClassicKbrd 0
//#define EmPMU 0 #define EmADB 1
//#define EmVIA2 1 #define EmRTC 1
#define EmPMU 0
#define EmVIA2 1
#define Use68020 1 #define Use68020 1
#define EmFPU 1 //#define EmFPU 1 //temporarily disable, because it's broken
#define EmFPU 0
#define EmMMU 0 #define EmMMU 0
#define EmASC 1 #define EmASC 1
#define kMyClockMult 2 #define ClockMult 2
#define WantCycByPriOp 0 #define WantCycByPriOp 0
#define WantCloserCyc 0 #define WantCloserCyc 0
@ -36,6 +39,11 @@
#define EmVidCard 1 #define EmVidCard 1
#define kVidROM_Size 0x000800 #define kVidROM_Size 0x000800
#define RomFileName "MacII.ROM"
#define kRomCheckSum1 0x97851DB
#define kRomCheckSum2 0x9779D2C
#define kROM_Size (1 << 18)
/* the Wire variables are 1/0, not true/false */ /* the Wire variables are 1/0, not true/false */
enum { enum {

View File

@ -78,6 +78,7 @@ HW_SRC = {
# 'src/HW/M68K/DISAM68K.c', # 'src/HW/M68K/DISAM68K.c',
'src/HW/M68K/M68KITAB.c', 'src/HW/M68K/M68KITAB.c',
'src/HW/M68K/MINEM68K.c', 'src/HW/M68K/MINEM68K.c',
# 'src/HW/M68K/FPCPEMDV.c',
], ],
'MOUSE': [ 'MOUSE': [
'src/HW/MOUSE/MOUSEMDV.c', 'src/HW/MOUSE/MOUSEMDV.c',
@ -99,9 +100,11 @@ HW_SRC = {
'src/HW/SCSI/SCSIEMDV.c', 'src/HW/SCSI/SCSIEMDV.c',
], ],
'SOUND': [ 'SOUND': [
# 'src/HW/SOUND/ASCEMDEV.c',
'src/HW/SOUND/SNDEMDEV.c', 'src/HW/SOUND/SNDEMDEV.c',
], ],
'SOUND_ASC': [
'src/HW/SOUND/ASCEMDEV.c',
],
'VIA1': [ 'VIA1': [
'src/HW/VIA/VIAEMDEV.c', 'src/HW/VIA/VIAEMDEV.c',
], ],
@ -113,21 +116,19 @@ HW_SRC = {
], ],
} }
MAC_SRC_COMMON = HW_SRC['DISK'] + HW_SRC['M68K'] + HW_SRC['RTC'] + HW_SRC['SOUND'] + HW_SRC['VIA1'] MAC_SRC_COMMON = HW_SRC['DISK'] + HW_SRC['M68K'] + HW_SRC['RTC'] + HW_SRC['SOUND'] + HW_SRC['VIA1'] + HW_SRC['SCREEN'] + HW_SRC['SCC'] + HW_SRC['SCSI'] + HW_SRC['MOUSE']
# Macintosh definitions # Macintosh definitions
MAC_SRC = { MAC_SRC = {
'Plus': 'Plus':
MAC_SRC_COMMON + MAC_SRC_COMMON +
HW_SRC['SCREEN'] +
HW_SRC['SCC'] +
HW_SRC['SCSI'] +
HW_SRC['MOUSE'] +
HW_SRC['KBRD'], HW_SRC['KBRD'],
'II': 'II':
MAC_SRC_COMMON + MAC_SRC_COMMON +
HW_SRC['VIDCARD'] + HW_SRC['VIDCARD'] +
HW_SRC['ADB'], HW_SRC['ADB'] +
HW_SRC['VIA2'] +
HW_SRC['SOUND_ASC']
} }
# User interface definitions # User interface definitions
@ -165,7 +166,7 @@ EMU_INC = include_directories([
# Just gonna do an SDL2 Mac Plus for now # Just gonna do an SDL2 Mac Plus for now
executable( executable(
'microvmac', 'microvmac',
sources: MAC_SRC['Plus'] + UI_SRC + EMU_SRC, sources: MAC_SRC['II'] + UI_SRC + EMU_SRC,
dependencies: [lSDL2], dependencies: [lSDL2],
include_directories: EMU_INC, include_directories: EMU_INC,
) )

View File

@ -18,8 +18,6 @@
Apple Desktop Bus EMulated DEVice Apple Desktop Bus EMulated DEVice
*/ */
#if EmADB
#ifndef AllFiles #ifndef AllFiles
#include "EMCONFIG.h" #include "EMCONFIG.h"
#include "SYSDEPNS.h" #include "SYSDEPNS.h"
@ -214,5 +212,3 @@ GLOBALPROC ADB_Update(void)
} }
} }
} }
#endif

1222
src/HW/M68K/FPCPEMDV.c Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -262,28 +262,28 @@ LOCALVAR struct regstruct
#ifdef r_regs #ifdef r_regs
register struct regstruct *g_regs asm (r_regs); struct regstruct *g_regs asm (r_regs);
#define V_regs (*g_regs) #define V_regs (*g_regs)
#else #else
#define V_regs regs #define V_regs regs
#endif #endif
#ifdef r_pc_p #ifdef r_pc_p
register uint8_t * g_pc_p asm (r_pc_p); uint8_t * g_pc_p asm (r_pc_p);
#define V_pc_p g_pc_p #define V_pc_p g_pc_p
#else #else
#define V_pc_p V_regs.pc_p #define V_pc_p V_regs.pc_p
#endif #endif
#ifdef r_MaxCyclesToGo #ifdef r_MaxCyclesToGo
register int32_t g_MaxCyclesToGo asm (r_MaxCyclesToGo); int32_t g_MaxCyclesToGo asm (r_MaxCyclesToGo);
#define V_MaxCyclesToGo g_MaxCyclesToGo #define V_MaxCyclesToGo g_MaxCyclesToGo
#else #else
#define V_MaxCyclesToGo V_regs.MaxCyclesToGo #define V_MaxCyclesToGo V_regs.MaxCyclesToGo
#endif #endif
#ifdef r_pc_pHi #ifdef r_pc_pHi
register uint8_t * g_pc_pHi asm (r_pc_pHi); uint8_t * g_pc_pHi asm (r_pc_pHi);
#define V_pc_pHi g_pc_pHi #define V_pc_pHi g_pc_pHi
#else #else
#define V_pc_pHi V_regs.pc_pHi #define V_pc_pHi V_regs.pc_pHi
@ -8202,13 +8202,6 @@ LOCALIPROC DoCodeMMU(void)
} }
#endif #endif
#if EmFPU
#include "FPMATHEM.h"
#include "FPCPEMDV.h"
#endif
#if HaveGlbReg #if HaveGlbReg
LOCALPROC Em_Swap(void) LOCALPROC Em_Swap(void)
{ {

View File

@ -91,7 +91,7 @@ LOCALPROC WarnMsgUnsupportedROM(void)
MacErr_t ROM_IsValid(void) MacErr_t ROM_IsValid(void)
{ {
if(CheckRomCheckSum) { /*if(CheckRomCheckSum) {
uint32_t CheckSum = Calc_Checksum(); uint32_t CheckSum = Calc_Checksum();
if (CheckSum != do_get_mem_long(ROM)) { if (CheckSum != do_get_mem_long(ROM)) {
@ -107,7 +107,7 @@ MacErr_t ROM_IsValid(void)
WarnMsgUnsupportedROM(); WarnMsgUnsupportedROM();
return mnvm_miscErr; return mnvm_miscErr;
} }
} }*/
ROM_loaded = true; ROM_loaded = true;
SpeedStopped = false; SpeedStopped = false;