From bf055e998e92d8f9e9dd31d15f5c94d6050b6958 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Mon, 9 Apr 2012 16:16:22 +0200 Subject: [PATCH] Isolate memory from CPU --- dcpu_16.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/dcpu_16.py b/dcpu_16.py index 54e0a21..05d09a9 100644 --- a/dcpu_16.py +++ b/dcpu_16.py @@ -297,9 +297,29 @@ def literal(c, code): return v +class Memory(object): + """array of 16-bit words""" + def __init__(m, debug=False): + m.clear() + + def clear(m): + """clear memory""" + # TODO: (addr, len) memory range to clear + m.w = [0 for _ in xrange(0, 2**w)] + + def __getitem__(m, addr): + """get word at addr""" + return m.w[addr] + + def __setitem__(m, addr, value): + """assignment truncates values to 16-bit words""" + # TODO: multi-word assignment starting at addr when value is list + m.w[addr] = value & wmask + class CPU(object): - def __init__(c, debug=False): + def __init__(c, memory=Memory(), debug=False): + c.m = memory c.clear() c.reset() c.debug = debug @@ -314,7 +334,7 @@ class CPU(object): def clear(c): """clear memory""" - c.m = [0 for _ in xrange(0, 2**w)] + c.m.clear() a = Register(0x0) b = Register(0x1)