def load_z80_v1_snapshot(file, processor, memory): def byte(): return next_byte(snapshot_file) def lsb_word(): return byte() | byte() << 8 with open(file, 'r') as snapshot_file: processor.main_registers['a'] = byte() processor.main_registers['f'] = byte() processor.main_registers['c'] = byte() processor.main_registers['b'] = byte() processor.main_registers['l'] = byte() processor.main_registers['h'] = byte() processor.special_registers['pc'] = lsb_word() processor.special_registers['sp'] = lsb_word() processor.special_registers['i'] = byte() r_low_bits = byte() & 0b01111111 indicator = byte() r_high_bit = (indicator & 0b1) << 7 processor.special_registers['r'] = r_high_bit | r_low_bits border_colour = (indicator & 0b1110) >> 1 memory_compressed = (indicator & 0b00100000) != 0 processor.main_registers['e'] = byte() processor.main_registers['d'] = byte() processor.alternate_registers['c'] = byte() processor.alternate_registers['b'] = byte() processor.alternate_registers['e'] = byte() processor.alternate_registers['d'] = byte() processor.alternate_registers['l'] = byte() processor.alternate_registers['h'] = byte() processor.alternate_registers['a'] = byte() processor.alternate_registers['f'] = byte() processor.index_registers['iy'] = lsb_word() processor.index_registers['ix'] = lsb_word() processor.iff[0] = True if byte() > 0 else False processor.iff[1] = True if byte() > 0 else False indicator_2 = byte() processor.interrupt_mode = indicator_2 & 0b11 if memory_compressed: load_memory_from_compressed_binary(memory, snapshot_file, 0x4000) else: load_memory_from_binary(memory, snapshot_file, 0x4000) end_marker = [byte(), byte(), byte(), byte()] if end_marker != [0x00, 0xed, 0xed, 0x00]: raise IOError(".z80 file format invalid")
def load_sna_snapshot(file, processor, memory): with open(file, 'r') as snapshot_file: processor.special_registers['i'] = next_byte(snapshot_file) processor.alternate_registers['h'] = next_byte(snapshot_file) processor.alternate_registers['l'] = next_byte(snapshot_file) processor.alternate_registers['d'] = next_byte(snapshot_file) processor.alternate_registers['e'] = next_byte(snapshot_file) processor.alternate_registers['b'] = next_byte(snapshot_file) processor.alternate_registers['c'] = next_byte(snapshot_file) processor.alternate_registers['a'] = next_byte(snapshot_file) processor.alternate_registers['f'] = next_byte(snapshot_file) processor.main_registers['h'] = next_byte(snapshot_file) processor.main_registers['l'] = next_byte(snapshot_file) processor.main_registers['d'] = next_byte(snapshot_file) processor.main_registers['e'] = next_byte(snapshot_file) processor.main_registers['b'] = next_byte(snapshot_file) processor.main_registers['c'] = next_byte(snapshot_file) processor.index_registers['ix'] = next_word(snapshot_file) processor.index_registers['iy'] = next_word(snapshot_file) processor.iff[1] = (next_byte(snapshot_file) & 0b10) > 0 processor.special_registers['r'] = next_byte(snapshot_file) processor.main_registers['a'] = next_byte(snapshot_file) processor.main_registers['f'] = next_byte(snapshot_file) processor.special_registers['sp'] = next_word(snapshot_file) processor.interrupt_mode = next_byte(snapshot_file) # not used yet border_colour = next_byte(snapshot_file) load_memory_from_binary(memory, snapshot_file, 0x4000)