1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- "use strict";
- CPU.prototype.mmap_read8 = function(addr)
- {
- const value = this.memory_map_read8[addr >>> MMAP_BLOCK_BITS](addr);
- dbg_assert(value >= 0 && value <= 0xFF);
- return value;
- };
- CPU.prototype.mmap_write8 = function(addr, value)
- {
- dbg_assert(value >= 0 && value <= 0xFF);
- this.memory_map_write8[addr >>> MMAP_BLOCK_BITS](addr, value);
- };
- CPU.prototype.mmap_read16 = function(addr)
- {
- var fn = this.memory_map_read8[addr >>> MMAP_BLOCK_BITS];
- const value = fn(addr) | fn(addr + 1 | 0) << 8;
- dbg_assert(value >= 0 && value <= 0xFFFF);
- return value;
- };
- CPU.prototype.mmap_write16 = function(addr, value)
- {
- var fn = this.memory_map_write8[addr >>> MMAP_BLOCK_BITS];
- dbg_assert(value >= 0 && value <= 0xFFFF);
- fn(addr, value & 0xFF);
- fn(addr + 1 | 0, value >> 8);
- };
- CPU.prototype.mmap_read32 = function(addr)
- {
- var aligned_addr = addr >>> MMAP_BLOCK_BITS;
- return this.memory_map_read32[aligned_addr](addr);
- };
- CPU.prototype.mmap_write32 = function(addr, value)
- {
- var aligned_addr = addr >>> MMAP_BLOCK_BITS;
- this.memory_map_write32[aligned_addr](addr, value);
- };
- CPU.prototype.mmap_write64 = function(addr, value0, value1)
- {
- var aligned_addr = addr >>> MMAP_BLOCK_BITS;
- // This should hold since writes across pages are split up
- dbg_assert(aligned_addr === (addr + 7) >>> MMAP_BLOCK_BITS);
- var write_func32 = this.memory_map_write32[aligned_addr];
- write_func32(addr, value0);
- write_func32(addr + 4, value1);
- };
- CPU.prototype.mmap_write128 = function(addr, value0, value1, value2, value3)
- {
- var aligned_addr = addr >>> MMAP_BLOCK_BITS;
- // This should hold since writes across pages are split up
- dbg_assert(aligned_addr === (addr + 12) >>> MMAP_BLOCK_BITS);
- var write_func32 = this.memory_map_write32[aligned_addr];
- write_func32(addr, value0);
- write_func32(addr + 4, value1);
- write_func32(addr + 8, value2);
- write_func32(addr + 12, value3);
- };
- /**
- * @param {Array.<number>|Uint8Array} blob
- * @param {number} offset
- */
- CPU.prototype.write_blob = function(blob, offset)
- {
- dbg_assert(blob && blob.length >= 0);
- if(blob.length)
- {
- dbg_assert(!this.in_mapped_range(offset));
- dbg_assert(!this.in_mapped_range(offset + blob.length - 1));
- this.jit_dirty_cache(offset, offset + blob.length);
- this.mem8.set(blob, offset);
- }
- };
- CPU.prototype.read_blob = function(offset, length)
- {
- if(length)
- {
- dbg_assert(!this.in_mapped_range(offset));
- dbg_assert(!this.in_mapped_range(offset + length - 1));
- }
- return this.mem8.subarray(offset, offset + length);
- };
|