X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=cyclone68000.git;a=blobdiff_plain;f=app.h;h=15ab06c558a46d8512945967f1202add87bc996c;hp=4a236300d1c6fe1ed944b739c7ec5ef68aeb778c;hb=ee2d42257a2d52072f6b163f8ec279503241e9de;hpb=cfe17eee41a12da11f69660c2764813e94d871ea diff --git a/app.h b/app.h index 4a23630..15ab06c 100644 --- a/app.h +++ b/app.h @@ -24,6 +24,13 @@ #include "Disa/Disa.h" // Ea.cpp +enum EaRWType { + earwt_sign_extend = 1, + earwt_zero_extend, + earwt_shifted_up, + earwt_msb_dont_care, +}; + extern int earead_check_addrerr; extern int eawrite_check_addrerr; extern int g_jmp_cycle_table[]; @@ -32,12 +39,11 @@ extern int g_lea_cycle_table[]; extern int g_pea_cycle_table[]; extern int g_movem_cycle_table[]; int Ea_add_ns(int *tab, int ea); // add nonstandard EA cycles -int EaCalc(int a,int mask,int ea,int size,int top=0,int sign_extend=1); // 6 -int EaRead(int a,int v,int ea,int size,int mask,int top=0,int sign_extend=1); // 7 -int EaCalcRead(int r_ea,int r,int ea,int size,int mask,int sign_extend=1); // 6 -int EaCalcReadNoSE(int r_ea,int r,int ea,int size,int mask); +int EaCalc(int a,int mask,int ea,int size,EaRWType type=earwt_sign_extend); // 6 +int EaRead(int a,int v,int ea,int size,int mask,EaRWType type=earwt_sign_extend,int set_nz=0); // 8 +int EaCalcRead(int r_ea,int r,int ea,int size,int mask,EaRWType type=earwt_sign_extend,int set_nz=0); // 7 int EaCanRead(int ea,int size); -int EaWrite(int a,int v,int ea,int size,int mask,int top=0,int sign_extend_ea=1); +int EaWrite(int a,int v,int ea,int size,int mask,EaRWType type=earwt_sign_extend); int EaCanWrite(int ea); int EaAn(int ea); @@ -49,15 +55,22 @@ extern const char * const Sarm[4]; // Sign-extend ARM Extensions for operand siz extern int Cycles; // Current cycles for opcode extern int pc_dirty; // something changed PC during processing extern int arm_op_count; // for stats -void ot(const char *format, ...); +void ot(const char *format, ...) +#ifdef __GNUC__ + __attribute__((format(printf, 1, 2))); +#endif + ; void ltorg(); int MemHandler(int type,int size,int addrreg=0,int need_addrerr_check=1); -void FlushPC(void); +void FlushPC(int force=0); // OpAny.cpp extern int g_op; extern int opend_op_changes_cycles, opend_check_interrupt, opend_check_trace; int OpGetFlags(int subtract,int xbit,int sprecialz=0); +void OpGetFlagsNZ(int rd); +void SignExtend(int rd, int rs, int size); +void ZeroExtend(int rd, int rs, int size); void OpUse(int op,int use); void OpStart(int op,int sea=0,int tea=0,int op_changes_cycles=0,int supervisor_check=0); void OpEnd(int sea=0,int tea=0);