changeset 243:2f069a0b487e

Implement EI, DI and IM in the Z80 core
author Mike Pavone <pavone@retrodev.com>
date Sun, 28 Apr 2013 14:32:45 -0700
parents d3b84b2a4397
children df8a36bf5e1d
files z80_to_x86.c z80_to_x86.h
diffstat 2 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/z80_to_x86.c	Sun Apr 28 14:05:02 2013 -0700
+++ b/z80_to_x86.c	Sun Apr 28 14:32:45 2013 -0700
@@ -221,13 +221,13 @@
 
 void z80_print_regs_exit(z80_context * context)
 {
-	printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\nSP: %X\n", 
+	printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\nSP: %X\n\nIM: %d, IFF1: %d, IFF2: %d\n", 
 		context->regs[Z80_A], context->regs[Z80_B], context->regs[Z80_C],
 		context->regs[Z80_D], context->regs[Z80_E], 
 		(context->regs[Z80_H] << 8) | context->regs[Z80_L], 
 		(context->regs[Z80_IXH] << 8) | context->regs[Z80_IXL], 
 		(context->regs[Z80_IYH] << 8) | context->regs[Z80_IYL], 
-		context->sp);
+		context->sp, context->im, context->iff1, context->iff2);
 	puts("--Alternate Regs--");
 	printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\n", 
 		context->alt_regs[Z80_A], context->alt_regs[Z80_B], context->alt_regs[Z80_C],
@@ -643,11 +643,23 @@
 			dst = zcycles(dst, 4 * inst->immed);
 		}
 		break;
-	/*case Z80_HALT:
+	//case Z80_HALT:
 	case Z80_DI:
+		dst = zcycles(dst, 4);
+		dst = mov_irdisp8(dst, 0, CONTEXT, offsetof(z80_context, iff1), SZ_B);
+		dst = mov_irdisp8(dst, 0, CONTEXT, offsetof(z80_context, iff2), SZ_B);
+		break;
 	case Z80_EI:
+		//TODO: Implement interrupt enable latency of 1 instruction afer EI
+		dst = zcycles(dst, 4);
+		dst = mov_irdisp8(dst, 1, CONTEXT, offsetof(z80_context, iff1), SZ_B);
+		dst = mov_irdisp8(dst, 1, CONTEXT, offsetof(z80_context, iff2), SZ_B);
+		break;
 	case Z80_IM:
-	case Z80_RLC:
+		dst = zcycles(dst, 4);
+		dst = mov_irdisp8(dst, inst->immed, CONTEXT, offsetof(z80_context, im), SZ_B);
+		break;
+	/*case Z80_RLC:
 	case Z80_RL:
 	case Z80_RRC:
 	case Z80_RR:
--- a/z80_to_x86.h	Sun Apr 28 14:05:02 2013 -0700
+++ b/z80_to_x86.h	Sun Apr 28 14:32:45 2013 -0700
@@ -35,6 +35,8 @@
 	uint32_t          current_cycle;
 	uint8_t           alt_flags[ZF_NUM];
 	uint8_t *         mem_pointers[ZNUM_MEM_AREAS];
+	uint8_t           iff1;
+	uint8_t           iff2;
 	native_map_slot * static_code_map;
 	native_map_slot * banked_code_map;
 	void *            options;