Ejemplo n.º 1
0
        public handler_entry_read_dispatch(int HighBits, int Width, int AddrShift, int Endian, address_space space, handler_entry.range init, handler_entry_read handler) : base(Width, AddrShift, Endian, space, handler_entry.F_DISPATCH)
        {
            this.HighBits = HighBits;


            LowBits  = (u32)handler_entry_dispatch_lowbits(HighBits, Width, AddrShift);
            BITCOUNT = (u32)HighBits > LowBits ? (u32)HighBits - LowBits : 0;
            COUNT    = 1U << (int)BITCOUNT;
            BITMASK  = make_bitmask32(BITCOUNT);
            LOWMASK  = make_bitmask32(LowBits);
            HIGHMASK = make_bitmask32((u32)HighBits) ^ LOWMASK;


            if (handler == null)
            {
                handler = space.get_unmap_r();
            }

            handler.ref_((s32)COUNT);

            m_dispatch = new handler_entry_read[COUNT];
            m_ranges   = new handler_entry.range[COUNT];
            for (UInt32 i = 0; i != COUNT; i++)
            {
                m_dispatch[i] = handler;
                m_ranges[i]   = init;
            }
        }
Ejemplo n.º 2
0
        Pointer <handler_entry.range> m_u_ranges;                              //handler_entry::range *m_u_ranges;


        public handler_entry_read_dispatch(address_space space, handler_entry.range init, handler_entry_read <int_Width, int_AddrShift> handler)
            : base(space, handler_entry.F_DISPATCH)
        {
            m_ranges_array.resize(1);
            m_ranges_array[0] = new range_array();
            m_dispatch_array.resize(1);
            m_dispatch_array[0] = new handler_array();
            m_a_ranges          = m_ranges_array[0].data();
            m_a_dispatch        = m_dispatch_array[0].data();
            m_u_ranges          = m_ranges_array[0].data();
            m_u_dispatch        = m_dispatch_array[0].data();


            if (handler == null)
            {
                handler = space.get_unmap_r <int_Width, int_AddrShift>();
            }

            handler.ref_((s32)COUNT);

            for (unsigned i = 0; i != COUNT; i++)
            {
                m_u_dispatch[i] = handler;
                m_u_ranges[i]   = new range(init);
            }
        }