--- trunk/src/cpus/cpu_alpha.c 2007/10/08 16:22:20 41 +++ trunk/src/cpus/cpu_alpha.c 2007/10/08 16:22:32 42 @@ -25,7 +25,7 @@ * SUCH DAMAGE. * * - * $Id: cpu_alpha.c,v 1.25 2007/03/26 02:01:35 debug Exp $ + * $Id: cpu_alpha.c,v 1.27 2007/06/07 15:36:24 debug Exp $ * * Alpha CPU emulation. * @@ -41,20 +41,27 @@ #include #include "cpu.h" +#include "interrupt.h" #include "machine.h" #include "memory.h" #include "misc.h" #include "settings.h" #include "symbol.h" +#include "timer.h" #define DYNTRANS_8K #define DYNTRANS_PAGESIZE 8192 #include "tmp_alpha_head.c" +extern int native_code_translation_enabled; + /* Alpha symbolic register names: */ static char *alpha_regname[N_ALPHA_REGS] = ALPHA_REG_NAMES; +void alpha_irq_interrupt_assert(struct interrupt *interrupt); +void alpha_irq_interrupt_deassert(struct interrupt *interrupt); + /* * alpha_cpu_new(): @@ -113,6 +120,23 @@ CPU_SETTINGS_ADD_REGISTER64(alpha_regname[i], cpu->cd.alpha.r[i]); + /* Register the CPU interrupt pin: */ + { + struct interrupt template; + + memset(&template, 0, sizeof(template)); + template.line = 0; + template.name = cpu->path; + template.extra = cpu; + template.interrupt_assert = alpha_irq_interrupt_assert; + template.interrupt_deassert = alpha_irq_interrupt_deassert; + interrupt_handler_register(&template); + } + + if (native_code_translation_enabled) + cpu->sampling_timer = timer_add(CPU_SAMPLE_TIMER_HZ, + alpha_timer_sample_tick, cpu); + return 1; } @@ -195,6 +219,22 @@ } +/* + * alpha_irq_interrupt_assert(): + * alpha_irq_interrupt_deassert(): + */ +void alpha_irq_interrupt_assert(struct interrupt *interrupt) +{ + struct cpu *cpu = (struct cpu *) interrupt->extra; + cpu->cd.alpha.irq_asserted = 1; +} +void alpha_irq_interrupt_deassert(struct interrupt *interrupt) +{ + struct cpu *cpu = (struct cpu *) interrupt->extra; + cpu->cd.alpha.irq_asserted = 0; +} + + /* * alpha_print_imm16_disp(): *