//
// Virtual 6808 Header file
//
-// by James L. Hammons
+// by James Hammons
//
-// (c) 2004 Underground Software
+// (C) 2006 Underground Software
//
-
#ifndef __V6808_H__
#define __V6808_H__
-#include "types.h"
+#include <stdint.h>
// Useful defines
-#define FLAG_E 0x80 // ??? Entire ???
-#define FLAG_F 0x40 // ??? Fast IRQ ???
-
+#define FLAG_E 0x80 // ??? Entire ??? [No.]
+#define FLAG_F 0x40 // ??? Fast IRQ ??? [No.]
#define FLAG_H 0x20 // Half carry
#define FLAG_I 0x10 // IRQ
#define FLAG_N 0x08 // Negative
#define FLAG_V 0x02 // oVerflow
#define FLAG_C 0x01 // Carry
-#define V6808_ASSERT_LINE_RESET 0x0001 // v6808 RESET line
-#define V6808_ASSERT_LINE_IRQ 0x0002 // v6808 IRQ line
-#define V6808_ASSERT_LINE_NMI 0x0004 // v6808 NMI line
-#define V6808_STATE_SYNC 0x0008 // ??? v6808 SYNC line ???
-#define V6808_STATE_ILLEGAL_INST 0x0010 // Illegal instruction executed flag
-//#define V6809_START_DEBUG_LOG 0x0020 // Debug log go (temporary!)
+#define V6808_LINE_RESET 0x0001 // v6808 RESET line
+#define V6808_LINE_IRQ 0x0002 // v6808 IRQ line
+#define V6808_LINE_NMI 0x0004 // v6808 NMI line
+#define V6808_STATE_WAI 0x0008 // v6808 wait for IRQ line
+#define V6808_STATE_ILLEGAL_INST 0x0010 // Illegal instruction executed flag
+//#define V6809_START_DEBUG_LOG 0x0020 // Debug log go (temporary!)
// Useful structs
struct V6808REGS
{
- uint16 pc; // 6808 PC register
- uint16 x; // 6808 X index register
- uint16 s; // 6808 System stack pointer
- uint8 cc; // 6808 Condition Code register
- uint8 a; // 6808 A register
- uint8 b; // 6808 B register
- uint32 clock; // 6808 clock
-//uint32 _reserved;// uint8 (* Fetch)(uint16&); // Address of uint8 fetch routine
- uint8 (* RdMem)(uint16); // Address of uint8 read routine
- void (* WrMem)(uint16, uint8); // Address of uint8 write routine
- uint32 cpuFlags; // v6808 IRQ/RESET flags
+ uint16_t pc; // 6808 PC register
+ uint16_t x; // 6808 X index register
+ uint16_t s; // 6808 System stack pointer
+ uint8_t cc; // 6808 Condition Code register
+ uint8_t a; // 6808 A register
+ uint8_t b; // 6808 B register
+ uint64_t clock; // 6808 clock
+ uint8_t (* RdMem)(uint16_t); // Address of uint8 read routine
+ void (* WrMem)(uint16_t, uint8_t); // Address of uint8 write routine
+ uint32_t cpuFlags; // v6808 IRQ/RESET flags
+ uint32_t clockOverrun; // Amount of overflow between runs
};
// Function prototypes
-void Execute6808(V6808REGS *, uint32); // Function to execute 6808 instructions
-uint32 GetCurrentV6808Clock(void); // Get the clock of the currently executing CPU
+void Execute6808(V6808REGS *, uint32_t); // Function to execute 6808 instructions
+uint64_t GetCurrentV6808Clock(void); // Get the clock of the currently executing CPU
+//uint8 GetCCRegister(void); // Hmm.
#endif // __V6808_H__
+