private void poke(uint phys_address, ushort value) { uint page = (uint)(phys_address >> 12); uint log_addr = (uint)(phys_address & 0x0FFF); mem_t memptr; if (page > 0xFF) { throw new InvalidOperationException($"poke: absolute memory address {phys_address:X6} too large."); } if ((memptr = mem[page]) == null) { trace.Verbose("poke: dynamically allocating page {0:X2}", page); memptr = mem[page] = new mem_t(); } memptr.word[log_addr] = value; memptr.was_written[log_addr / 32] |= 1u << ((int)log_addr % 32); }
public extern static ssize_t get_free_sections (hid_t file_id, mem_t type, size_t nsects, sect_info_t[] sect_info);
public extern static ssize_t get_free_sections (hid_t file_id, mem_t type, size_t nsects, [Out] sect_info_t[] sect_info);