static char * test_memory_write16_writes_correct_word(void) { word location, value; location.WORD = 0x100; printf("test_memory_write16_writes_correct_word\n"); mu_assert("Memory init failed", memory_init(4096)); value.BYTE.high = 0xE8; value.BYTE.low = 0x12; memory_write16(location, value); mu_assert("Write failed(expected 0xE8)", memory[0x100] == 0xE8); mu_assert("Write failed(expected 0x12)", memory[0x101] == 0x12); memory_destroy(); return 0; }
/* Initialize the interrupts of the processor. */ void interrupts_reset (struct interrupts *interrupts) { int i; interrupts->pending_mask = 0; if (interrupts->cpu->cpu_mode & M6811_SMOD) interrupts->vectors_addr = 0xbfc0; else interrupts->vectors_addr = 0xffc0; interrupts->nb_interrupts_raised = 0; interrupts->min_mask_cycles = CYCLES_MAX; interrupts->max_mask_cycles = 0; interrupts->last_mask_cycles = 0; interrupts->start_mask_cycle = -1; interrupts->xirq_start_mask_cycle = -1; interrupts->xirq_max_mask_cycles = 0; interrupts->xirq_min_mask_cycles = CYCLES_MAX; interrupts->xirq_last_mask_cycles = 0; for (i = 0; i < M6811_INT_NUMBER; i++) { interrupts->interrupt_order[i] = i; } /* Clear the interrupt history table. */ interrupts->history_index = 0; memset (interrupts->interrupts_history, 0, sizeof (interrupts->interrupts_history)); memset (interrupts->interrupts, 0, sizeof (interrupts->interrupts)); /* In bootstrap mode, initialize the vector table to point to the RAM location. */ if (interrupts->cpu->cpu_mode == M6811_SMOD) { bfd_vma addr = interrupts->vectors_addr; uint16 vector = 0x0100 - 3 * (M6811_INT_NUMBER - 1); for (i = 0; i < M6811_INT_NUMBER; i++) { memory_write16 (interrupts->cpu, addr, vector); addr += 2; vector += 3; } } }