//Static method for smap public static void _DEV9irq(int cause, int cycles) { //Console.Error.WriteLine("_DEV9irq"); DEV9_LOG("_DEV9irq " + cause.ToString("X") + ", " + DEV9Header.dev9Ru16((int)DEV9Header.SPD_R_INTR_MASK).ToString("X")); DEV9Header.dev9.irqcause |= cause; if (cycles < 1) { DEV9Header.DEV9irq(1); } else { DEV9Header.DEV9irq(cycles); } }
public override void DEV9write16(uint addr, ushort value) { //Console.Error.WriteLine("DEV9write16"); if (addr >= DEV9Header.ATA_DEV9_HDD_BASE && addr < DEV9Header.ATA_DEV9_HDD_END) { //#ifdef ENABLE_ATA // ata_write<2>(addr,value); //#endif //Console.Error.WriteLine("DEV9write16 ATA"); return; } if (addr >= DEV9Header.SMAP_REGBASE && addr < DEV9Header.FLASH_REGBASE) { //smap //Console.Error.WriteLine("DEV9write16 SMAP"); smap.smap_write16(addr, value); return; } switch (addr) { case DEV9Header.SPD_R_INTR_MASK: if ((DEV9Header.dev9Ru16((int)DEV9Header.SPD_R_INTR_MASK) != value) && (((DEV9Header.dev9Ru16((int)DEV9Header.SPD_R_INTR_MASK) | value) & DEV9Header.dev9.irqcause) != 0)) { DEV9.DEV9_LOG("SPD_R_INTR_MASK16=0x" + value.ToString("X") + " , checking for masked/unmasked interrupts"); DEV9Header.DEV9irq(1); } break; default: if ((addr >= DEV9Header.FLASH_REGBASE) && (addr < (DEV9Header.FLASH_REGBASE + DEV9Header.FLASH_REGSIZE))) { Console.Error.WriteLine("DEV9write16 flash"); flash.FLASHwrite32(addr, (UInt32)value, 2); return; } DEV9Header.dev9Wu16((int)addr, value); DEV9.DEV9_LOG("*Unknown 16bit write at address " + addr.ToString("X8") + " value " + value.ToString("X")); return; } DEV9Header.dev9Wu16((int)addr, value); DEV9.DEV9_LOG("*Known 16bit write at address " + addr.ToString("X8") + " value " + value.ToString("X")); }