diff --git a/AltairZ80/m68k/m68kconf.h b/AltairZ80/m68k/m68kconf.h
index 4aec2f6e..06a526d4 100644
--- a/AltairZ80/m68k/m68kconf.h
+++ b/AltairZ80/m68k/m68kconf.h
@@ -89,8 +89,8 @@
* If off, all interrupts will be autovectored and all interrupt requests will
* auto-clear when the interrupt is serviced.
*/
-#define M68K_EMULATE_INT_ACK OPT_OFF
-#define M68K_INT_ACK_CALLBACK(A) your_int_ack_handler_function(A)
+#define M68K_EMULATE_INT_ACK OPT_SPECIFY_HANDLER
+#define M68K_INT_ACK_CALLBACK(A) m68k_cpu_irq_ack(A)
/* If ON, CPU will call the breakpoint acknowledge callback when it encounters
@@ -108,8 +108,8 @@
/* If ON, CPU will call the output reset callback when it encounters a reset
* instruction.
*/
-#define M68K_EMULATE_RESET OPT_OFF
-#define M68K_RESET_CALLBACK() your_reset_handler_function()
+#define M68K_EMULATE_RESET OPT_SPECIFY_HANDLER
+#define M68K_RESET_CALLBACK() m68k_cpu_pulse_reset()
/* If ON, CPU will call the callback when it encounters a cmpi.l #v, dn
* instruction.
@@ -147,8 +147,8 @@
* want to properly emulate the m68010 or higher. (moves uses function codes
* to read/write data from different address spaces)
*/
-#define M68K_EMULATE_FC OPT_OFF
-#define M68K_SET_FC_CALLBACK(A) your_set_fc_handler_function(A)
+#define M68K_EMULATE_FC OPT_SPECIFY_HANDLER
+#define M68K_SET_FC_CALLBACK(A) m68k_cpu_set_fc(A)
/* If ON, CPU will call the pc changed callback when it changes the PC by a
* large value. This allows host programs to be nicer when it comes to
@@ -203,6 +203,17 @@
#endif /* M68K_COMPILE_FOR_MAME */
+#include "m68ksim.h"
+
+#define m68k_read_memory_8(A) m68k_cpu_read_byte(A)
+#define m68k_read_memory_16(A) m68k_cpu_read_word(A)
+#define m68k_read_memory_32(A) m68k_cpu_read_long(A)
+
+#define m68k_write_memory_8(A, V) m68k_cpu_write_byte(A, V)
+#define m68k_write_memory_16(A, V) m68k_cpu_write_word(A, V)
+#define m68k_write_memory_32(A, V) m68k_cpu_write_long(A, V)
+
+
/* ======================================================================== */
/* ============================== END OF FILE ============================= */
/* ======================================================================== */
diff --git a/AltairZ80/m68k/m68kcpu.h b/AltairZ80/m68k/m68kcpu.h
index a16d1227..f2c8bf43 100755
--- a/AltairZ80/m68k/m68kcpu.h
+++ b/AltairZ80/m68k/m68kcpu.h
@@ -69,9 +69,6 @@ extern "C" {
typedef signed char sint8; /* ASG: changed from char to signed char */
typedef signed short sint16;
typedef signed int sint32; /* AWJ: changed from long to int */
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32; /* AWJ: changed from long to int */
/* signed and unsigned int must be at least 32 bits wide */
typedef signed int sint;
@@ -154,7 +151,7 @@ typedef uint32 uint64;
#define EXCEPTION_RESET 0
#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */
#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */
-#define EXCEPTION_ILLEGAL_INSTRUCTION 4
+#define EXCEPTION_ILLEGAL_INSTRUCTION_M68K 4
#define EXCEPTION_ZERO_DIVIDE 5
#define EXCEPTION_CHK 6
#define EXCEPTION_TRAPV 7
@@ -2010,11 +2007,11 @@ static inline void m68ki_exception_illegal(void)
}
#endif /* M68K_EMULATE_ADDRESS_ERROR */
- m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION);
- m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION);
+ m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION_M68K);
+ m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION_M68K);
/* Use up some clock cycles and undo the instruction's cycles */
- USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]);
+ USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION_M68K] - CYC_INSTRUCTION[REG_IR]);
}
/* Exception for format errror in RTE */
diff --git a/AltairZ80/m68k/softfloat/mamesf.h b/AltairZ80/m68k/softfloat/mamesf.h
index c4195039..06f0132a 100644
--- a/AltairZ80/m68k/softfloat/mamesf.h
+++ b/AltairZ80/m68k/softfloat/mamesf.h
@@ -4,6 +4,7 @@
#ifdef LSB_FIRST
#define LITTLEENDIAN
#else
+#undef BIGENDIAN
#define BIGENDIAN
#endif
@@ -23,9 +24,6 @@
*----------------------------------------------------------------------------*/
typedef sint8 flag;
-typedef sint8 int8;
-typedef sint16 int16;
-typedef sint32 int32;
typedef sint64 int64;
/*----------------------------------------------------------------------------
diff --git a/AltairZ80/m68k/softfloat/softfloat-macros b/AltairZ80/m68k/softfloat/softfloat-macros
index 5de9031d..fcf8210d 100644
--- a/AltairZ80/m68k/softfloat/softfloat-macros
+++ b/AltairZ80/m68k/softfloat/softfloat-macros
@@ -451,9 +451,9 @@ static inline void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr
bits32 aHigh, aLow, bHigh, bLow;
bits64 z0, zMiddleA, zMiddleB, z1;
- aLow = a;
+ aLow = (bits32)a;
aHigh = a>>32;
- bLow = b;
+ bLow = (bits32)b;
bHigh = b>>32;
z1 = ( (bits64) aLow ) * bLow;
zMiddleA = ( (bits64) aLow ) * bHigh;
@@ -661,7 +661,7 @@ static int8 countLeadingZeros64( bits64 a )
else {
a >>= 32;
}
- shiftCount += countLeadingZeros32( a );
+ shiftCount += countLeadingZeros32( (bits32)a );
return shiftCount;
}
diff --git a/AltairZ80/m68ksim.c b/AltairZ80/m68ksim.c
index 1006febd..10d40442 100644
--- a/AltairZ80/m68ksim.c
+++ b/AltairZ80/m68ksim.c
@@ -244,6 +244,8 @@ void m68k_clear_memory(void ) {
void m68k_cpu_reset(void) {
WRITE_LONG(m68k_ram, 0, 0x00006000); // SP
WRITE_LONG(m68k_ram, 4, 0x00000200); // PC
+ m68k_init();
+ m68k_set_cpu_type(M68K_CPU_TYPE_68000);
m68k_pulse_reset(); // also calls MC6850_reset()
m68k_CPUToView();
}
diff --git a/Visual Studio Projects/AltairZ80.vcproj b/Visual Studio Projects/AltairZ80.vcproj
index 6bbab8f3..aa19fad6 100644
--- a/Visual Studio Projects/AltairZ80.vcproj
+++ b/Visual Studio Projects/AltairZ80.vcproj
@@ -279,6 +279,10 @@
RelativePath="..\AltairZ80\m68k\m68kops.c"
>
+
+
diff --git a/makefile b/makefile
index 8bbf0345..4cfb92d4 100644
--- a/makefile
+++ b/makefile
@@ -1853,6 +1853,7 @@ ALTAIRZ80 = ${ALTAIRZ80D}/altairz80_cpu.c ${ALTAIRZ80D}/altairz80_cpu_nommu.c \
${ALTAIRZ80D}/s100_if3.c ${ALTAIRZ80D}/s100_adcs6.c \
${ALTAIRZ80D}/m68k/m68kcpu.c ${ALTAIRZ80D}/m68k/m68kdasm.c ${ALTAIRZ80D}/m68k/m68kasm.c \
${ALTAIRZ80D}/m68k/m68kopac.c ${ALTAIRZ80D}/m68k/m68kopdm.c \
+ ${ALTAIRZ80D}/m68k/softfloat/softfloat.c \
${ALTAIRZ80D}/m68k/m68kopnz.c ${ALTAIRZ80D}/m68k/m68kops.c ${ALTAIRZ80D}/m68ksim.c
ALTAIRZ80_OPT = -I ${ALTAIRZ80D}