def _write_z80(header, snapshot, fname): if len(header) == 30: header[12] |= 32 ram = make_z80_ram_block(snapshot[16384:], 0)[3:] + [0, 237, 237, 0] else: ram = [] for bank, data in ((5, snapshot[16384:32768]), (1, snapshot[32768:49152]), (2, snapshot[49152:])): ram += make_z80_ram_block(data, bank + 3) with open(fname, 'wb') as f: f.write(bytearray(header + ram))
def _write_z80(header, snapshot, fname): if len(header) == 30: header[12] |= 32 ram = make_z80_ram_block(snapshot[16384:], 0)[3:] + [0, 237, 237, 0] else: ram = make_z80v3_ram_blocks(snapshot[16384:]) with open(fname, 'wb') as f: f.write(bytearray(header + ram))
def _get_z80(ram, sp, pc, border): z80 = [0] * 86 z80[30] = 54 # Indicate a v3 Z80 snapshot set_z80_registers(z80, 'i=63', 'iy=23610', 'sp={}'.format(sp), 'pc={}'.format(pc)) set_z80_state(z80, 'iff=1', 'im=1', 'border={}'.format(border & 7)) for bank, data in ((5, ram[:16384]), (1, ram[16384:32768]), (2, ram[32768:49152])): z80 += make_z80_ram_block(data, bank + 3) return z80
def _get_z80(ram, options): z80 = [0] * 86 z80[30] = 54 # Indicate a v3 Z80 snapshot set_z80_registers(z80, 'i=63', 'iy=23610') set_z80_registers(z80, *options.reg) set_z80_state(z80, 'iff=1', 'im=1') set_z80_state(z80, *options.state) for bank, data in ((5, ram[:16384]), (1, ram[16384:32768]), (2, ram[32768:49152])): z80 += make_z80_ram_block(data, bank + 3) return z80
def test_block_ending_with_single_ED(self): data = [0, 237] exp_data = [2, 0, 0, 0, 237] self.assertEqual(exp_data, make_z80_ram_block(data, 0))
def test_single_ED_followed_by_six_identical_values(self): data = [237, 2, 2, 2, 2, 2, 2] block = make_z80_ram_block(data, 0) exp_data = [6, 0, 0, 237, 2, 237, 237, 5, 2] self.assertEqual(exp_data, block)
def test_single_ED_followed_by_five_identical_values(self): data = [237, 1, 1, 1, 1, 1] block = make_z80_ram_block(data, 0) exp_data = [len(data), 0, 0] + data self.assertEqual(exp_data, block)