Add some |0 to ensure integer operations
This commit is contained in:
parent
04c20fd871
commit
6c7acef396
|
@ -1304,7 +1304,7 @@ CPU.prototype.btr_reg = function(bit_base, bit_offset)
|
|||
|
||||
CPU.prototype.bt_mem = function(virt_addr, bit_offset)
|
||||
{
|
||||
var bit_base = this.safe_read8(virt_addr + (bit_offset >> 3));
|
||||
var bit_base = this.safe_read8(virt_addr + (bit_offset >> 3) | 0);
|
||||
bit_offset &= 7;
|
||||
|
||||
this.flags = (this.flags & ~1) | (bit_base >> bit_offset & 1);
|
||||
|
@ -1313,7 +1313,7 @@ CPU.prototype.bt_mem = function(virt_addr, bit_offset)
|
|||
|
||||
CPU.prototype.btc_mem = function(virt_addr, bit_offset)
|
||||
{
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3));
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3) | 0);
|
||||
var bit_base = this.memory.read8(phys_addr);
|
||||
|
||||
bit_offset &= 7;
|
||||
|
@ -1326,7 +1326,7 @@ CPU.prototype.btc_mem = function(virt_addr, bit_offset)
|
|||
|
||||
CPU.prototype.btr_mem = function(virt_addr, bit_offset)
|
||||
{
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3));
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3) | 0);
|
||||
var bit_base = this.memory.read8(phys_addr);
|
||||
|
||||
bit_offset &= 7;
|
||||
|
@ -1339,7 +1339,7 @@ CPU.prototype.btr_mem = function(virt_addr, bit_offset)
|
|||
|
||||
CPU.prototype.bts_mem = function(virt_addr, bit_offset)
|
||||
{
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3));
|
||||
var phys_addr = this.translate_address_write(virt_addr + (bit_offset >> 3) | 0);
|
||||
var bit_base = this.memory.read8(phys_addr);
|
||||
|
||||
bit_offset &= 7;
|
||||
|
|
|
@ -870,7 +870,7 @@ CPU.prototype.virt_boundary_read32s = function(low, high)
|
|||
else
|
||||
{
|
||||
// 0xFFE
|
||||
mid = this.virt_boundary_read16(low + 1, high - 1);
|
||||
mid = this.virt_boundary_read16(low + 1 | 0, high - 1 | 0);
|
||||
}
|
||||
|
||||
return this.memory.read8(low) | mid << 8 | this.memory.read8(high) << 24;;
|
||||
|
@ -904,14 +904,14 @@ CPU.prototype.virt_boundary_write32 = function(low, high, value)
|
|||
else
|
||||
{
|
||||
// 0xFFD
|
||||
this.memory.write8(low + 1, value >> 8);
|
||||
this.memory.write8(low + 2, value >> 16);
|
||||
this.memory.write8(low + 1 | 0, value >> 8);
|
||||
this.memory.write8(low + 2 | 0, value >> 16);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 0xFFE
|
||||
this.memory.write8(low + 1, value >> 8);
|
||||
this.memory.write8(low + 1 | 0, value >> 8);
|
||||
this.memory.write8(high - 1, value >> 16);
|
||||
}
|
||||
};
|
||||
|
@ -930,7 +930,7 @@ CPU.prototype.safe_read16 = function(addr)
|
|||
{
|
||||
if(this.paging && (addr & 0xFFF) === 0xFFF)
|
||||
{
|
||||
return this.safe_read8(addr) | this.safe_read8(addr + 1) << 8;
|
||||
return this.safe_read8(addr) | this.safe_read8(addr + 1 | 0) << 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -942,7 +942,7 @@ CPU.prototype.safe_read32s = function(addr)
|
|||
{
|
||||
if(this.paging && (addr & 0xFFF) >= 0xFFD)
|
||||
{
|
||||
return this.safe_read16(addr) | this.safe_read16(addr + 2) << 16;
|
||||
return this.safe_read16(addr) | this.safe_read16(addr + 2 | 0) << 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -962,7 +962,7 @@ CPU.prototype.safe_write16 = function(addr, value)
|
|||
|
||||
if((addr & 0xFFF) === 0xFFF)
|
||||
{
|
||||
this.virt_boundary_write16(phys_low, this.translate_address_write(addr + 1), value);
|
||||
this.virt_boundary_write16(phys_low, this.translate_address_write(addr + 1 | 0), value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -976,7 +976,7 @@ CPU.prototype.safe_write32 = function(addr, value)
|
|||
|
||||
if((addr & 0xFFF) >= 0xFFD)
|
||||
{
|
||||
this.virt_boundary_write32(phys_low, this.translate_address_write(addr + 3), value);
|
||||
this.virt_boundary_write32(phys_low, this.translate_address_write(addr + 3 | 0), value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1171,9 +1171,9 @@ CPU.prototype.call_interrupt_vector = function(interrupt_nr, is_software_int, er
|
|||
addr = this.translate_address_system_read(addr);
|
||||
}
|
||||
|
||||
var base = this.memory.read16(addr) | this.memory.read16(addr + 6) << 16,
|
||||
selector = this.memory.read16(addr + 2),
|
||||
type = this.memory.read8(addr + 5),
|
||||
var base = this.memory.read16(addr) | this.memory.read16(addr + 6 | 0) << 16,
|
||||
selector = this.memory.read16(addr + 2 | 0),
|
||||
type = this.memory.read8(addr + 5 | 0),
|
||||
dpl = type >> 5 & 3,
|
||||
is_trap,
|
||||
is_16 = false;
|
||||
|
@ -1257,9 +1257,9 @@ CPU.prototype.call_interrupt_vector = function(interrupt_nr, is_software_int, er
|
|||
//dbg_log("Inter privilege interrupt gate=" + h(selector, 4) + ":" + h(base >>> 0, 8) + " trap=" + is_trap + " 16bit=" + is_16, LOG_CPU);
|
||||
//this.debug.dump_regs_short();
|
||||
|
||||
var tss_stack_addr = (info.dpl << 3) + 4;
|
||||
var tss_stack_addr = (info.dpl << 3) + 4 | 0;
|
||||
|
||||
if(tss_stack_addr + 5 > this.segment_limits[reg_tr])
|
||||
if((tss_stack_addr + 5 | 0) > this.segment_limits[reg_tr])
|
||||
{
|
||||
throw this.debug.unimpl("#TS handler");
|
||||
}
|
||||
|
@ -1272,7 +1272,7 @@ CPU.prototype.call_interrupt_vector = function(interrupt_nr, is_software_int, er
|
|||
}
|
||||
|
||||
var new_esp = this.memory.read32s(tss_stack_addr),
|
||||
new_ss = this.memory.read16(tss_stack_addr + 4),
|
||||
new_ss = this.memory.read16(tss_stack_addr + 4 | 0),
|
||||
ss_info = this.lookup_segment_selector(new_ss);
|
||||
|
||||
if(ss_info.is_null)
|
||||
|
@ -1476,7 +1476,7 @@ CPU.prototype.call_interrupt_vector = function(interrupt_nr, is_software_int, er
|
|||
|
||||
var index = interrupt_nr << 2;
|
||||
var new_ip = this.memory.read16(index);
|
||||
var new_cs = this.memory.read16(index + 2);
|
||||
var new_cs = this.memory.read16(index + 2 | 0);
|
||||
|
||||
//dbg_log("real mode interrupt #" + h(interrupt_nr) + " to " + h(new_cs, 4) + ":" + h(new_ip, 4), LOG_CPU);
|
||||
//dbg_trace(LOG_CPU);
|
||||
|
@ -1866,13 +1866,13 @@ CPU.prototype.test_privileges_for_io = function(port, size)
|
|||
|
||||
if(tsr_size >= 0x67)
|
||||
{
|
||||
var iomap_base = this.memory.read16(this.translate_address_system_read(tsr_offset + 0x64 + 2)),
|
||||
high_port = port + size - 1;
|
||||
var iomap_base = this.memory.read16(this.translate_address_system_read(tsr_offset + 0x64 + 2 | 0)),
|
||||
high_port = port + size - 1 | 0;
|
||||
|
||||
if(tsr_size >= iomap_base + (high_port >> 3))
|
||||
if(tsr_size >= (iomap_base + (high_port >> 3) | 0))
|
||||
{
|
||||
var mask = ((1 << size) - 1) << (port & 7),
|
||||
addr = this.translate_address_system_read(tsr_offset + iomap_base + (port >> 3)),
|
||||
addr = this.translate_address_system_read(tsr_offset + iomap_base + (port >> 3) | 0),
|
||||
port_info = (mask & 0xFF00) ?
|
||||
this.memory.read16(addr) : this.memory.read8(addr);
|
||||
|
||||
|
@ -2087,10 +2087,10 @@ CPU.prototype.lookup_segment_selector = function(selector)
|
|||
}
|
||||
info.table_offset = table_offset;
|
||||
|
||||
info.base = this.memory.read16(table_offset + 2) | this.memory.read8(table_offset + 4) << 16 |
|
||||
this.memory.read8(table_offset + 7) << 24,
|
||||
info.access = this.memory.read8(table_offset + 5),
|
||||
info.flags = this.memory.read8(table_offset + 6) >> 4,
|
||||
info.base = this.memory.read16(table_offset + 2 | 0) | this.memory.read8(table_offset + 4 | 0) << 16 |
|
||||
this.memory.read8(table_offset + 7 | 0) << 24,
|
||||
info.access = this.memory.read8(table_offset + 5 | 0),
|
||||
info.flags = this.memory.read8(table_offset + 6 | 0) >> 4,
|
||||
|
||||
// used if system
|
||||
info.type = info.access & 0xF;
|
||||
|
@ -2107,7 +2107,7 @@ CPU.prototype.lookup_segment_selector = function(selector)
|
|||
info.size = (info.flags & 4) === 4;
|
||||
|
||||
var limit = this.memory.read16(table_offset) |
|
||||
(this.memory.read8(table_offset + 6) & 0xF) << 16;
|
||||
(this.memory.read8(table_offset + 6 | 0) & 0xF) << 16;
|
||||
|
||||
if(info.flags & 8)
|
||||
{
|
||||
|
@ -2334,7 +2334,7 @@ CPU.prototype.load_tr = function(selector)
|
|||
this.sreg[reg_tr] = selector;
|
||||
|
||||
// mark task as busy
|
||||
this.memory.write8(info.table_offset + 5, this.memory.read8(info.table_offset + 5) | 2);
|
||||
this.memory.write8(info.table_offset + 5 | 0, this.memory.read8(info.table_offset + 5 | 0) | 2);
|
||||
|
||||
//dbg_log("tsr at " + h(info.base) + "; (" + info.effective_limit + " bytes)");
|
||||
};
|
||||
|
@ -2578,7 +2578,7 @@ CPU.prototype.translate_address_system_read = function(addr)
|
|||
CPU.prototype.do_page_translation = function(addr, for_writing, user)
|
||||
{
|
||||
var page = addr >>> 12,
|
||||
page_dir_addr = (this.cr[3] >>> 2) + (page >> 10),
|
||||
page_dir_addr = (this.cr[3] >>> 2) + (page >> 10) | 0,
|
||||
page_dir_entry = this.memory.mem32s[page_dir_addr],
|
||||
high,
|
||||
can_write = true,
|
||||
|
@ -2642,7 +2642,7 @@ CPU.prototype.do_page_translation = function(addr, for_writing, user)
|
|||
}
|
||||
else
|
||||
{
|
||||
var page_table_addr = ((page_dir_entry & 0xFFFFF000) >>> 2) + (page & 0x3FF),
|
||||
var page_table_addr = ((page_dir_entry & 0xFFFFF000) >>> 2) + (page & 0x3FF) | 0,
|
||||
page_table_entry = this.memory.mem32s[page_table_addr];
|
||||
|
||||
if((page_table_entry & 1) === 0)
|
||||
|
@ -2746,9 +2746,9 @@ CPU.prototype.writable_or_pagefault = function(addr, size)
|
|||
|
||||
if((addr & 0xFFF) + size - 1 >= 0x1000)
|
||||
{
|
||||
if((this.tlb_info[page + 1] & mask) === 0)
|
||||
if((this.tlb_info[page + 1 | 0] & mask) === 0)
|
||||
{
|
||||
this.do_page_translation(addr + size - 1, 1, user);
|
||||
this.do_page_translation(addr + size - 1 | 0, 1, user);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -92,7 +92,7 @@ Memory.prototype.mmap_read16 = function(addr)
|
|||
{
|
||||
var fn = this.memory_map_read8[addr >>> MMAP_BLOCK_BITS];
|
||||
|
||||
return fn(addr) | fn(addr + 1) << 8;
|
||||
return fn(addr) | fn(addr + 1 | 0) << 8;
|
||||
};
|
||||
|
||||
Memory.prototype.mmap_write16 = function(addr, value)
|
||||
|
@ -100,7 +100,7 @@ Memory.prototype.mmap_write16 = function(addr, value)
|
|||
var fn = this.memory_map_write8[addr >>> MMAP_BLOCK_BITS];
|
||||
|
||||
fn(addr, value & 0xFF);
|
||||
fn(addr + 1, value >> 8 & 0xFF);
|
||||
fn(addr + 1 | 0, value >> 8 & 0xFF);
|
||||
};
|
||||
|
||||
Memory.prototype.mmap_read32 = function(addr)
|
||||
|
@ -147,7 +147,7 @@ Memory.prototype.read16 = function(addr)
|
|||
}
|
||||
else
|
||||
{
|
||||
return this.mem8[addr] | this.mem8[addr + 1] << 8;
|
||||
return this.mem8[addr] | this.mem8[addr + 1 | 0] << 8;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -182,8 +182,8 @@ Memory.prototype.read32s = function(addr)
|
|||
}
|
||||
else
|
||||
{
|
||||
return this.mem8[addr] | this.mem8[addr + 1] << 8 |
|
||||
this.mem8[addr + 2] << 16 | this.mem8[addr + 3] << 24;
|
||||
return this.mem8[addr] | this.mem8[addr + 1 | 0] << 8 |
|
||||
this.mem8[addr + 2 | 0] << 16 | this.mem8[addr + 3 | 0] << 24;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -250,7 +250,7 @@ Memory.prototype.write16 = function(addr, value)
|
|||
else
|
||||
{
|
||||
this.mem8[addr] = value;
|
||||
this.mem8[addr + 1] = value >> 8;
|
||||
this.mem8[addr + 1 | 0] = value >> 8;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -300,9 +300,9 @@ Memory.prototype.write32 = function(addr, value)
|
|||
else
|
||||
{
|
||||
this.mem8[addr] = value;
|
||||
this.mem8[addr + 1] = value >> 8;
|
||||
this.mem8[addr + 2] = value >> 16;
|
||||
this.mem8[addr + 3] = value >> 24;
|
||||
this.mem8[addr + 1 | 0] = value >> 8;
|
||||
this.mem8[addr + 2 | 0] = value >> 16;
|
||||
this.mem8[addr + 3 | 0] = value >> 24;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue