Revision: bd634b3d1f
Author: David Anderson <da...@natulte.net>
Date: Wed May 27 13:24:17 2009
Log: Add an hg ignore file to ignore all the compiled python files.
http://code.google.com/p/zvm/source/detail?r=bd634b3d1f
Revision: 9d7fd29841
Author: David Anderson <da...@natulte.net>
Date: Wed May 27 15:36:21 2009
Log: Implement the output_stream opcode....
http://code.google.com/p/zvm/source/detail?r=9d7fd29841
==============================================================================
Revision: bd634b3d1f
Author: David Anderson <da...@natulte.net>
Date: Wed May 27 13:24:17 2009
Log: Add an hg ignore file to ignore all the compiled python files.
http://code.google.com/p/zvm/source/detail?r=bd634b3d1f
Added:
/.hgignore
=======================================
--- /dev/null
+++ /.hgignore Wed May 27 13:24:17 2009
@@ -0,0 +1,9 @@
+.*\.pyc
+.*~$
+.*\#$
+.*\.os$
+.*\.so$
+.*\.log$
+\.sconsign\.dblite
+/\.\#
+
==============================================================================
Revision: 9d7fd29841
Author: David Anderson <da...@natulte.net>
Date: Wed May 27 15:36:21 2009
Log: Implement the output_stream opcode....
http://code.google.com/p/zvm/source/detail?r=9d7fd29841
Modified:
/zvm/zcpu.py
/zvm/zmachine.py
/zvm/zstreammanager.py
=======================================
--- /zvm/zcpu.py Mon Jul 21 22:29:27 2008
+++ /zvm/zcpu.py Wed May 27 15:36:21 2009
@@ -30,12 +30,14 @@
"Opcode not yet implemented"
class ZCpu(object):
- def __init__(self, zmem, zopdecoder, zstack, zobjects, zstring, zui):
+ def __init__(self, zmem, zopdecoder, zstack, zobjects, zstring,
+ zstreammanager, zui):
self._memory = zmem
self._opdecoder = zopdecoder
self._stackmanager = zstack
self._objects = zobjects
self._string = zstring
+ self._streammanager = zstreammanager
self._ui = zui
def _get_handler(self, opcode_class, opcode_number):
@@ -77,17 +79,18 @@
def _make_signed(self, a):
"""Turn the given 16-bit value into a signed integer."""
+ assert a < 2**16
# This is a little ugly.
bf = bitfield.BitField(a)
if bf[15]:
- a = bf[0:15] - 65536
+ a = a - 2**16
return a
def _unmake_signed(self, a):
"""Turn the given signed integer into a 16-bit value ready for
storage."""
if a < 0:
- a = 65536 + a
+ a = 2**16 + a
return a
def _read_variable(self, addr):
@@ -618,13 +621,21 @@
self._ui.screen.buffer_mode = bool(flag)
- def op_output_stream(self, *args):
- """TODO: Write docstring here."""
- raise ZCpuNotImplemented
-
- def op_output_stream_v5(self, *args):
- """TODO: Write docstring here."""
- raise ZCpuNotImplemented
+ def op_output_stream(self, stream_num):
+ """Enable or disable the given stream.
+
+ This is the v3/4 implementation of the opcode, which just
+ delegates to the backwards compatible v5 implementation.
+ """
+ self.op_output_stream_v5(stream_num)
+
+ def op_output_stream_v5(self, stream_num, table=None):
+ """Enable or disable the given output stream."""
+ stream_num = self._make_signed(stream_num)
+ if stream_num < 0:
+ self._streammanager.output.unselect(-stream_num)
+ else:
+ self._streammanager.output.select(stream_num)
def op_input_stream(self, *args):
"""TODO: Write docstring here."""
=======================================
--- /zvm/zmachine.py Wed May 14 11:14:39 2008
+++ /zvm/zmachine.py Wed May 27 15:36:21 2009
@@ -11,6 +11,7 @@
from zstackmanager import ZStackManager
from zobjectparser import ZObjectParser
from zcpu import ZCpu
+from zstreammanager import ZStreamManager
import zlogging
class ZMachineError(Exception):
@@ -29,8 +30,10 @@
self._opdecoder = ZOpDecoder(self._mem, self._stackmanager)
self._opdecoder.program_counter = self._mem.read_word(0x06)
self._ui = ui
- self._cpu = ZCpu(self._mem, self._opdecoder, self._stackmanager,\
- self._objectparser, self._stringfactory, self._ui)
+ self._stream_manager = ZStreamManager(self._mem, self._ui)
+ self._cpu = ZCpu(self._mem, self._opdecoder, self._stackmanager,
+ self._objectparser, self._stringfactory,
+ self._stream_manager, self._ui)
#--------- Public APIs -----------
=======================================
--- /zvm/zstreammanager.py Sun Jun 15 23:46:08 2008
+++ /zvm/zstreammanager.py Wed May 27 15:36:21 2009
@@ -91,3 +91,8 @@
return self._streams[self._selectedStream]
+class ZStreamManager(object):
+ def __init__(self, zmem, zui):
+ self.input = ZInputStreamManager(zui)
+ self.output = ZOutputStreamManager(zmem, zui)
+