mirror of
https://github.com/KrisKennaway/ii-vision.git
synced 2025-01-14 22:31:00 +00:00
f3d03a1b87
make_edit_distance - use MASKED_DOTS since it does not have a simple relationship to the HEADER_BITS/BODY_BITS for HGR - try disabling transposition distances for Damerau-Levenshtein, this may give better quality screen - introduce separate notion of MASKED_DOTS which is the number of (coloured) pixels we can extract from MASKED_BITS. For HGR this is not the same. - fix bug in _fix_array_neighbours that was not fixing headers for HGR - don't cache everything in byte_pair_differences, it's effectively unbounded. Using 1M for LRU size seems to work just as well in practise, without leaking memory. - fix bug in _diff_weights when comparing content, we want to evaluate the effect of storing content byte in each offset separately, not cumulatively. - add a consistency check function (not currently wired up) to assert that headers/footers are in sync across columns - HGR should have 16 body bits, this was causing headers not to propagate correctly to/from neighbouring column - add test case for this bug video - Use 8 random bits consistently, using 16 in some places may have introduced bias - ignore palette bit when comparing 0x00 and 0x7f in sanity check
26 lines
616 B
Python
26 lines
616 B
Python
"""Representation of Apple II + player virtual machine state."""
|
|
|
|
from typing import Iterator
|
|
|
|
|
|
# TODO: screen memory changes should happen via Machine while emitting opcodes?
|
|
|
|
class Machine:
|
|
"""Represents Apple II and player virtual machine state."""
|
|
|
|
def emit(self, opcode: "Opcode") -> Iterator[int]:
|
|
"""
|
|
|
|
:param opcode:
|
|
:return:
|
|
"""
|
|
cmd = opcode.emit_command(opcode)
|
|
if cmd:
|
|
yield from cmd
|
|
data = opcode.emit_data()
|
|
if data:
|
|
yield from data
|
|
|
|
# Update changes in memory map, if any
|
|
opcode.apply(self)
|