Commit my changes, version set to 0.099
[cyclone68000.git] / Cyclone / app.h
index 082b109..3528b7b 100644 (file)
@@ -1,49 +1,67 @@
 \r
 // This file is part of the Cyclone 68000 Emulator\r
 \r
-// Copyright (c) 2011 FinalDave (emudave (at) gmail.com)\r
+// Copyright (c) 2004,2011 FinalDave (emudave (at) gmail.com)\r
+// Copyright (c) 2005-2011 GraÅžvydas "notaz" Ignotas (notasas (at) gmail.com)\r
 \r
 // This code is licensed under the GNU General Public License version 2.0 and the MAME License.\r
 // You can choose the license that has the most advantages for you.\r
 \r
 // SVN repository can be found at http://code.google.com/p/cyclone68000/\r
 \r
+\r
 #include <stdio.h>\r
 #include <stdarg.h>\r
 #include <stdlib.h>\r
 #include <string.h>\r
 \r
+#ifndef CONFIG_FILE\r
+#define CONFIG_FILE "config.h"\r
+#endif\r
+#include CONFIG_FILE\r
+\r
 // Disa.c\r
-#include "../Pico/Disa.h"\r
+#include "Disa/Disa.h"\r
 \r
 // Ea.cpp\r
-int EaCalc(int a,int mask,int ea,int size);\r
-int EaRead(int a,int v,int ea,int size,int top=0);\r
+extern int earead_check_addrerr;\r
+extern int eawrite_check_addrerr;\r
+extern int g_jmp_cycle_table[];\r
+extern int g_jsr_cycle_table[];\r
+extern int g_lea_cycle_table[];\r
+extern int g_pea_cycle_table[];\r
+extern int g_movem_cycle_table[];\r
+int Ea_add_ns(int *tab, int ea); // add nonstandard EA cycles\r
+int EaCalc(int a,int mask,int ea,int size,int top=0,int sign_extend=1); // 6\r
+int EaRead(int a,int v,int ea,int size,int mask,int top=0,int sign_extend=1); // 7\r
+int EaCalcRead(int r_ea,int r,int ea,int size,int mask,int sign_extend=1); // 6\r
+int EaCalcReadNoSE(int r_ea,int r,int ea,int size,int mask);\r
 int EaCanRead(int ea,int size);\r
-int EaWrite(int a,int v,int ea,int size,int top=0);\r
+int EaWrite(int a,int v,int ea,int size,int mask,int top=0,int sign_extend_ea=1);\r
 int EaCanWrite(int ea);\r
+int EaAn(int ea);\r
 \r
 // Main.cpp\r
-extern int *CyJump; // Jump table\r
-extern int ms; // If non-zero, output in Microsoft ARMASM format\r
-extern char *Narm[4]; // Normal ARM Extensions for operand sizes 0,1,2\r
-extern char *Sarm[4]; // Sign-extend ARM Extensions for operand sizes 0,1,2\r
-extern int Cycles; // Current cycles for opcode\r
-extern int Amatch; // If one, try to match A68K timing\r
-extern int Accu; // Accuracy\r
-extern int Debug; // Debug info\r
+extern int *CyJump;   // Jump table\r
+extern int  ms;       // If non-zero, output in Microsoft ARMASM format\r
+extern const char * const Narm[4]; // Normal ARM Extensions for operand sizes 0,1,2\r
+extern const char * const Sarm[4]; // Sign-extend ARM Extensions for operand sizes 0,1,2\r
+extern int  Cycles;   // Current cycles for opcode\r
+extern int  pc_dirty; // something changed PC during processing\r
+extern int  arm_op_count; // for stats\r
 void ot(const char *format, ...);\r
 void ltorg();\r
-void CheckInterrupt();\r
-int MemHandler(int type,int size);\r
+int MemHandler(int type,int size,int addrreg=0,int need_addrerr_check=1);\r
+void FlushPC(void);\r
 \r
 // OpAny.cpp\r
-int OpGetFlags(int subtract,int xbit);\r
+extern int g_op;\r
+extern int opend_op_changes_cycles, opend_check_interrupt, opend_check_trace;\r
+int OpGetFlags(int subtract,int xbit,int sprecialz=0);\r
 void OpUse(int op,int use);\r
-void OpFirst();\r
-void OpStart(int op);\r
-void OpEnd();\r
-int OpBase(int op);\r
+void OpStart(int op,int sea=0,int tea=0,int op_changes_cycles=0,int supervisor_check=0);\r
+void OpEnd(int sea=0,int tea=0);\r
+int OpBase(int op,int size,int sepa=0);\r
 void OpAny(int op);\r
 \r
 //----------------------\r
@@ -54,9 +72,13 @@ int OpAddq(int op);
 int OpArithReg(int op);\r
 int OpMul(int op);\r
 int OpAbcd(int op);\r
+int OpNbcd(int op);\r
 int OpAritha(int op);\r
 int OpAddx(int op);\r
 int OpCmpEor(int op);\r
+int OpCmpm(int op);\r
+int OpChk(int op);\r
+int GetXBit(int subtract);\r
 \r
 // OpBranch.cpp\r
 void OpPush32();\r
@@ -79,12 +101,13 @@ int OpExt(int op);
 int OpSet(int op);\r
 int OpAsr(int op);\r
 int OpAsrEa(int op);\r
+int OpTas(int op, int gen_special=0);\r
 \r
 // OpMove.cpp\r
 int OpMove(int op);\r
 int OpLea(int op);\r
 void OpFlagsToReg(int high);\r
-void OpRegToFlags(int high);\r
+void OpRegToFlags(int high,int srh_reg=0);\r
 int OpMoveSr(int op);\r
 int OpArithSr(int op);\r
 int OpPea(int op);\r
@@ -92,3 +115,8 @@ int OpMovem(int op);
 int OpMoveq(int op);\r
 int OpMoveUsp(int op);\r
 int OpExg(int op);\r
+int OpMovep(int op);\r
+int OpStopReset(int op);\r
+void SuperEnd(void);\r
+void SuperChange(int op,int srh_reg=-1);\r
+\r