--- skyeye-v1/arch/arm/common/armvirt.c 2006-08-04 12:40:40.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/common/armvirt.c 2006-10-16 22:59:46.000000000 -0400 @@ -452,6 +452,30 @@ } } +/* BKG */ +int ARMul_ICE_ReadHalfWord(ARMul_State * state, ARMword address, ARMword *presult) +{ + ARMword data; + fault_t fault; + fault = GetHalfWord (state, address, &data); + if (fault) { + *presult=-1; fault=1; return fault; + }else{ + *presult=data; fault=0; return fault; + } +} + +int ARMul_ICE_ReadWord(ARMul_State * state, ARMword address, ARMword *presult) +{ + ARMword data; + fault_t fault; + fault = GetWord (state, address, &data); + if (fault) { + *presult=-1; fault=1; return fault; + }else{ + *presult=data; fault=0; return fault; + } +} ARMword ARMul_ReadByte (ARMul_State * state, ARMword address) @@ -646,6 +670,24 @@ else return 0; } +int ARMul_ICE_WriteHalfWord (ARMul_State * state, ARMword address, ARMword data) +{ + fault_t fault; + fault = PutHalfWord (state, address, data); + if (fault) + return 1; + else + return 0; +} +int ARMul_ICE_WriteWord (ARMul_State * state, ARMword address, ARMword data) +{ + fault_t fault; + fault = PutWord (state, address, data); + if (fault) + return 1; + else + return 0; +} /***************************************************************************\ * Write Byte (but don't tell anyone!) * \***************************************************************************/ --- skyeye-v1/utils/debugger/arch_reg.c 2006-08-04 13:56:45.000000000 -0400 +++ skyeye-v1-bkg/utils/debugger/arch_reg.c 2006-10-16 23:17:36.000000000 -0400 @@ -128,6 +128,16 @@ { int i; int fault=0; + /* BKG */ + if (size == 2) { + unsigned short temp = (*((unsigned short *) buffer)); + fault=arch_instance->ICE_write_halfword(addr, temp); + } else + if (size == 4) { + unsigned int temp = (*((unsigned int *) buffer)); + fault=arch_instance->ICE_write_word(addr, temp); + } else + /* end BKG */ for (i = 0; i < size; i++) { fault=arch_instance->ICE_write_byte(addr + i, buffer[i]); if(fault) return -1; @@ -141,6 +151,14 @@ int i; int fault=0; unsigned char v; + /* BKG */ + if (size == 2) { + fault=arch_instance->ICE_read_halfword(addr, buffer); + } else + if (size == 4) { + fault=arch_instance->ICE_read_word(addr, buffer); + } else + /* end BKG */ for (i = 0; i < size; i++) { fault=arch_instance->ICE_read_byte(addr + i, &v); if(fault) return -1; --- skyeye-v1/utils/config/skyeye_config.h 2006-08-04 12:40:41.000000000 -0400 +++ skyeye-v1-bkg/utils/config/skyeye_config.h 2006-10-16 22:48:44.000000000 -0400 @@ -262,6 +262,10 @@ //chy 2006-04-15 int (*ICE_write_byte) (WORD addr, uint8_t data); int (*ICE_read_byte)(WORD addr, uint8_t *pv); + int (*ICE_write_halfword) (WORD addr, uint16_t data); // BKG + int (*ICE_read_halfword)(WORD addr, uint16_t *pv); // BKG + int (*ICE_write_word) (WORD addr, uint32_t data); // BKG + int (*ICE_read_word)(WORD addr, uint32_t *pv); // BKG int (*parse_cpu) (const char *param[]); int (*parse_mach) (machine_config_t * mach, const char *param[]); int (*parse_mem) (int num_params, const char *params[]); --- skyeye-v1/Makefile 2006-08-04 14:33:20.000000000 -0400 +++ skyeye-v1-bkg/Makefile 2006-10-08 13:30:53.000000000 -0400 @@ -22,6 +22,8 @@ #if you want to add DBCT Acceleration Function In X86 32bit system AND gcc version = 3.x.x, comment below line NO_DBCT = 1 +NO_LCD = 1 + prefix = /usr/local exec_prefix = ${prefix} --- skyeye-v1/utils/main/skyeye.c 2006-08-04 14:24:37.000000000 -0400 +++ skyeye-v1-bkg/utils/main/skyeye.c 2006-10-16 22:47:51.000000000 -0400 @@ -96,6 +96,10 @@ arch_instance->get_pc = skyeye_config.arch->get_pc; arch_instance->ICE_write_byte = skyeye_config.arch->ICE_write_byte; arch_instance->ICE_read_byte = skyeye_config.arch->ICE_read_byte; + arch_instance->ICE_write_halfword = skyeye_config.arch->ICE_write_halfword; // BKG + arch_instance->ICE_read_halfword = skyeye_config.arch->ICE_read_halfword; // BKG + arch_instance->ICE_write_word = skyeye_config.arch->ICE_write_word; // BKG + arch_instance->ICE_read_word = skyeye_config.arch->ICE_read_word; // BKG arch_instance->init (); //chy:2003-08-19, after mach_init, because ARMul_Reset should after ARMul_SelectProcess --- skyeye-v1/utils/config/skyeye_types.h 2006-04-15 05:25:06.000000000 -0400 +++ skyeye-v1-bkg/utils/config/skyeye_types.h 2006-10-16 22:46:34.000000000 -0400 @@ -14,5 +14,10 @@ //chy 2004-04-15 int (*ICE_write_byte) (WORD addr, uint8_t v); int (*ICE_read_byte)(WORD addr, uint8_t *pv); + int (*ICE_write_halfword) (WORD addr, uint16_t v); // BKG + int (*ICE_read_halfword)(WORD addr, uint16_t *pv); // BKG + int (*ICE_write_word) (WORD addr, uint32_t v); // BKG + int (*ICE_read_word)(WORD addr, uint32_t *pv); // BKG + } generic_arch_t; #endif --- skyeye-v1/arch/arm/common/armsupp.c 2006-08-04 12:40:40.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/common/armsupp.c 2006-10-13 22:29:01.000000000 -0400 @@ -775,6 +775,7 @@ return TRUE; } else if (!state->NirqSig && !IFLAG) { + printf("[IntP] "); ARMul_Abort (state, ARMul_IRQV); return TRUE; } --- skyeye-v1/arch/arm/common/armemu.c 2006-08-04 13:56:45.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/common/armemu.c 2006-10-13 23:15:56.000000000 -0400 @@ -593,6 +593,7 @@ break; } else if (!state->NirqSig && !IFLAG) { + //printf("."); /* BKG */ ARMul_Abort (state, ARMul_IRQV); /*added energy_prof statement by ksh in 2004-11-26 */ //chy 2005-07-28 for standalone @@ -4164,6 +4165,7 @@ break; case TRAP_IRQ: { + printf("[TIRQ] "); //TEA_OUT(printf("TRAP_IRQ\n")); state->Reg[15] += INSN_SIZE; ARMul_Abort (state, ARMul_IRQV); --- skyeye-v1/arch/arm/common/arminit.c 2006-08-04 12:40:40.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/common/arminit.c 2006-10-17 10:18:26.000000000 -0400 @@ -572,6 +572,7 @@ SETABORT (IBIT, state->prog32Sig ? IRQ32MODE : IRQ26MODE, esize); + // printf("[Abort IRQV at 0x%x] \n",state->Reg[15]); /* BKG */ break; case ARMul_FIQV: /* FIQ */ //chy 2003-09-02 the if sentence seems no use @@ -591,6 +592,7 @@ } else ARMul_SetR15 (state, R15CCINTMODE | vector); + // printf("[Vector now set to 0x%x] \n",state->Reg[15]); /* BKG */ #if 0 if (ARMul_ReadWord (state, ARMul_GetPC (state)) == 0) { /* No vector has been installed. Rather than simulating whatever --- skyeye-v1/arch/arm/mach/skyeye_mach_s3c44b0.c 2006-08-04 12:40:41.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/mach/skyeye_mach_s3c44b0.c 2006-10-17 12:59:22.000000000 -0400 @@ -122,6 +122,8 @@ ARMword requests = io.intpnd & (~io.intmsk & INT_MASK_INIT); state->NfiqSig = (requests & io.intmod) ? LOW : HIGH; state->NirqSig = (requests & ~io.intmod) ? LOW : HIGH; + //printf("[IntUD %d - 0x%x & 0x%x = 0x%x]\n",state->NirqSig, +// io.intpnd,~io.intmsk,requests); /* BKG */ } static void s3c44b0_set_interrupt (unsigned int irq) @@ -129,13 +131,18 @@ /*if (ENABLE_IRQ){ io.i_ispr = (1 << interrupt); } */ + // printf("[SetInt %d] ",irq); if (ENABLE_IRQ | ENABLE_FIQ) { io.intpnd |= (1 << irq); + } else { + //printf("[DISABLED]\n"); /* BKG */ } } static void s3c44b0_io_reset (ARMul_State * state) { + printf("IO RESET\n"); + printf("IN %s\n",__FUNCTION__); memset (&s3c44b0_io, 0, sizeof (s3c44b0_io)); io.syscfg = 0x01; /*Interrupt register reset */ @@ -253,6 +260,7 @@ } // s3c44b0_update_int(state); } +#error BKG put this here #else /*s3c44b0 io_do_cycle*/ void @@ -299,6 +307,7 @@ io.urxh0 = io.urxh1 = (int) buf; io.utrstat0 |= UART_LSR_DR; io.utrstat1 |= UART_LSR_DR; + io.ufstat0 = (io.ufstat0 & 0xfff0) | 1; /* BKG */ if ((io.ucon0 & 0x3) == 0x1) { s3c44b0_set_interrupt (INT_URXD0); s3c44b0_update_int (state); @@ -343,8 +352,8 @@ switch (addr) { case SYSCFG: data = io.syscfg; - printf ("%s (addr = 0x%08x), pc:%x, NumInstrs:%x\n", - __FUNCTION__, addr, state->pc, state->NumInstrs); +// printf ("%s (addr = 0x%08x), pc:%x, NumInstrs:%x\n", +// __FUNCTION__, addr, state->pc, state->NumInstrs); //printf("instr:%x\n",state->loaded); break; /*Interrupt */ @@ -359,6 +368,7 @@ break; case INTMSK: data = io.intmsk; + // printf("Read INTMSK returning 0x%x\n",data); BKG break; case I_PSLV: data = io.i_pslv; @@ -449,10 +459,12 @@ break; case URXH0: data = io.urxh0; + io.ufstat0 &= 0xfff0; /* BKG */ io.utrstat0 &= ~UART_LSR_DR; break; case URXH1: data = io.urxh1; + io.ufstat1 &= 0xfff0; /* BKG */ io.utrstat1 &= ~UART_LSR_DR; break; case UBRDIV0: @@ -491,7 +503,7 @@ case TCNTO5: break; default: - SKYEYE_DBG ("%s (addr = 0x%08x)\n", __FUNCTION__, addr); +// SKYEYE_DBG ("%s (addr = 0x%08x)\n", __FUNCTION__, addr); break; } return data; @@ -511,8 +523,10 @@ s3c44b0_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data) { s3c44b0_io_write_word (state, addr, data); +/* printf ("SKYEYE: s3c44b0_io_write_halfword error\n"); skyeye_exit (-1); +*/ } void @@ -534,6 +548,8 @@ break; case INTMSK: io.intmsk = data; + s3c44b0_update_int (state); /* BKG */ + // printf("Write INTMSK Setting 0x%x\n",io.intmsk); BKG break; case I_PSLV: io.i_pslv = data; @@ -551,14 +567,17 @@ io.i_ispr = data; break; */ case I_ISPC: - io.intpnd &= (~data & INT_MASK_INIT); + // printf("[IntWrite 0x%x From 0x%x",data,io.intpnd); /* BKG */ + io.intpnd &= (~data); //io.i_ispr = 0; - //s3c44b0_update_int(state); + // printf(" to 0x%x] ",io.intpnd); /* BKG */ + s3c44b0_update_int(state); /* BKG UNCOMMNTED */ break; /*case F_ISPR: io.f_ispr = data; break; */ case F_ISPC: + // printf("[FIntWrite 0x%x] ",data); io.intpnd &= (~data & INT_MASK_INIT); //s3c44b0_update_int(state); break; @@ -617,6 +636,7 @@ write (skyeye_config.uart.fd_out, &c, 1); io.utrstat0 |= UART_LSR_THRE | UART_LSR_TEMT; if ((io.ucon0 & 0xc) == 0x04) { + //printf("[TXI] "); /* BKG */ s3c44b0_set_interrupt (INT_UTXD0); s3c44b0_update_int (state); } @@ -684,8 +704,8 @@ io.tcntb[5] = data; //* 480; break; default: - SKYEYE_DBG ("%s(0x%08x) = 0x%08x\n", __FUNCTION__, addr, - data); +// SKYEYE_DBG ("%s(0x%08x) = 0x%08x\n", __FUNCTION__, addr, +// data); break; } @@ -698,7 +718,7 @@ state->lateabtSig = HIGH; state->Reg[1] = 178; - + printf("IN %s\n",__FUNCTION__); this_mach->mach_io_do_cycle = s3c44b0_io_do_cycle; this_mach->mach_io_reset = s3c44b0_io_reset; this_mach->mach_io_read_word = s3c44b0_io_read_word; --- skyeye-v1/arch/arm/common/arm_arch_interface.c 2006-06-10 12:23:28.000000000 -0400 +++ skyeye-v1-bkg/arch/arm/common/arm_arch_interface.c 2006-10-16 23:11:01.000000000 -0400 @@ -100,6 +100,25 @@ static int arm_ICE_read_byte (WORD addr, uint8_t *pv){ return (ARMul_ICE_ReadByte (state, (ARMword) addr, (ARMword *)pv)); } + +/* BKG */ +static uint16_t arm_ICE_read_halfword (WORD addr, uint16_t *pv){ + return (ARMul_ICE_ReadHalfWord (state, (ARMword) addr, (ARMword *)pv)); +} +static int +arm_ICE_write_halfword (WORD addr, uint16_t v) +{ + return (ARMul_ICE_WriteHalfWord (state, (ARMword) addr, (ARMword) v)); +} + +static uint16_t arm_ICE_read_word (WORD addr, uint32_t *pv){ + return (ARMul_ICE_ReadWord (state, (ARMword) addr, (ARMword *)pv)); +} +static int +arm_ICE_write_word (WORD addr, uint32_t v) +{ + return (ARMul_ICE_WriteWord (state, (ARMword) addr, (ARMword) v)); +} extern void at91_mach_init (); extern void ep7312_mach_init (); extern void lh79520_mach_init (); @@ -376,6 +395,10 @@ arm_arch.step_once = arm_step_once; arm_arch.ICE_write_byte = arm_ICE_write_byte; arm_arch.ICE_read_byte = arm_ICE_read_byte; + arm_arch.ICE_write_halfword = arm_ICE_write_halfword; + arm_arch.ICE_read_halfword = arm_ICE_read_halfword; + arm_arch.ICE_write_word = arm_ICE_write_word; + arm_arch.ICE_read_word = arm_ICE_read_word; arm_arch.parse_cpu = arm_parse_cpu; arm_arch.parse_mach = arm_parse_mach; arm_arch.parse_mem = arm_parse_mem; --- skyeye-v1/device/skyeye_device.c 2005-10-10 01:04:10.000000000 -0400 +++ skyeye-v1-bkg/device/skyeye_device.c 2006-10-09 16:51:44.000000000 -0400 @@ -113,7 +113,7 @@ mod_set->initialized = 1; } if ((dev_mod = find_module (conf->type, mod_set)) == NULL) { - SKYEYE_ERR ("can't find device module: %s\n", conf->type); + SKYEYE_ERR ("can't find device module: %s for %s\n", conf->type,dev_name); return 1; } mc->devices = realloc (mc->devices,