Exemple #1
0
        //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);
            }
        }
Exemple #2
0
        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"));
        }