Avoid ram allocation if state is restored

This commit is contained in:
copy 2015-09-16 03:14:23 +02:00
parent 9d1dc4de96
commit 7a6dc0f7e5
4 changed files with 30 additions and 13 deletions

View file

@ -176,9 +176,6 @@
start_emulation({
settings: settings,
done: function(emulator) {
emulator.run();
},
});
};
@ -408,11 +405,13 @@
function done(emulator)
{
emulator.run();
if(query_args["c"])
{
emulator.serial0_send(query_args["c"] + "\n");
setTimeout(function()
{
//emulator.serial0_send(query_args["c"] + "\n");
emulator.keyboard_send_text(query_args["c"] + "\n");
}, 25);
}
}
}
@ -568,6 +567,8 @@
"initial_state": settings.initial_state,
"filesystem": settings.filesystem || {},
"autostart": true,
});
emulator.add_listener("emulator-ready", function()
@ -579,7 +580,7 @@
init_ui(settings, emulator);
result.done(emulator);
result.done && result.done(emulator);
});
emulator.add_listener("download-progress", function(e)

View file

@ -356,6 +356,11 @@ function V86Starter(options)
function done()
{
if(settings.initial_state)
{
settings.no_initial_alloc = true;
}
this.bus.send("cpu-init", settings);
setTimeout(function()

View file

@ -562,7 +562,7 @@ CPU.prototype.reset = function()
CPU.prototype.init = function(settings, device_bus)
{
this.memory_size = settings.memory_size || 1024 * 1024 * 64;
this.memory = new Memory(this.memory_size);
this.memory = new Memory(this.memory_size, settings.no_initial_alloc);
this.reset();

View file

@ -4,7 +4,7 @@
* @constructor
* @param {number} memory_size
*/
function Memory(memory_size)
function Memory(memory_size, no_alloc)
{
this.size = memory_size;
@ -24,11 +24,22 @@ function Memory(memory_size)
dbg_assert((memory_size & MMAP_BLOCK_SIZE - 1) === 0);
var buffer = new ArrayBuffer(memory_size);
if(no_alloc)
{
var buffer = new ArrayBuffer(0);
this.mem8 = new Uint8Array(buffer);
this.mem16 = new Uint16Array(buffer);
this.mem32s = new Int32Array(buffer);
this.mem8 = new Uint8Array(buffer);
this.mem16 = new Uint16Array(buffer);
this.mem32s = new Int32Array(buffer);
}
else
{
var buffer = new ArrayBuffer(memory_size);
this.mem8 = new Uint8Array(buffer);
this.mem16 = new Uint16Array(buffer);
this.mem32s = new Int32Array(buffer);
}
};
Memory.prototype.get_state = function()