/* sna.js: Snapshot file handling for JSSpeccy, a ZX Spectrum emulator in Javascript This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Contact details: Matthew Westcott, 14 Daisy Hill Drive, Adlington, Chorley, Lancs PR6 9NE UNITED KINGDOM */ function loadSna(sna) { var registers = [ 'i', 'l_', 'h_', 'e_', 'd_', 'c_', 'b_', 'f_', 'a_', 'l', 'h', 'e', 'd', 'c', 'b', 'iyl', 'iyh', 'ixl', 'ixh']; for (var i = 0; i < registers.length; i++) { z80[registers[i]] = sna.charCodeAt(i); } z80.iff1 = z80.iff2 = (sna.charCodeAt(19) & 0x04) ? 1 : 0; var r = sna.charCodeAt(20); z80.r = r & 0x7f; z80.r7 = r & 0x80; z80.f = sna.charCodeAt(21); z80.a = sna.charCodeAt(22); z80.sp = sna.charCodeAt(23) | (sna.charCodeAt(24) << 8); z80.im = sna.charCodeAt(25); writeport(0xfe, sna.charCodeAt(26) & 0x07); for (var i = 0; i < 0xc000; i++) { memory[i + 0x4000] = sna.charCodeAt(i + 27); } paintFullScreen(); /* simulate a retn to populate pc correctly */ var lowbyte =readbyte_internal(z80.sp++); z80.sp &= 0xffff; var highbyte=readbyte_internal(z80.sp++); z80.sp &= 0xffff; z80.pc = lowbyte | (highbyte << 8); }