git @ Cat's Eye Technologies Jolverine / 0b3c5fd
Add support (and examples) for Jolverine Super Wimp Mode. catseye 11 years ago
4 changed file(s) with 72 addition(s) and 27 deletion(s). Raw diff Collapse all Expand all
0 iy+o
1 +
2 +
3 o
0 iyy>o+y
1 xo +
2 x x
3 +
4 + x
5 y y
0 y>+y
1 x +
2 x x
3 +
4 + x
5 y y
66 import sys
77
88 class Program(object):
9 def __init__(self, program, debug=False):
9 def __init__(self, program, debug=False, super_wimp_mode=False):
1010 self.wheel = [
1111 'left',
1212 'right',
2222 self.playfield = {}
2323 self.insertpos = 'bottom'
2424 self._debug = debug
25 self._super_wimp_mode = super_wimp_mode
2526 y = 0
2627 self.maxx = 0
2728 for line in file:
112113 self.insertpos = 'bottom'
113114
114115 def run(self):
115 while True:
116 instr = self.playfield.get((self.x, self.y), ' ')
117 if instr == '*':
118 self.execute()
119 self.cycle()
120 self.x += self.dx
121 self.y += self.dy
122 self.dump()
123 if (self.x < 0 or self.y < 0 or
124 self.x > self.maxx or self.y > self.maxy):
125 break
116 if not self._super_wimp_mode:
117 while True:
118 instr = self.playfield.get((self.x, self.y), ' ')
119 if instr == '*':
120 self.execute()
121 self.cycle()
122 self.x += self.dx
123 self.y += self.dy
124 self.dump()
125 if (self.x < 0 or self.y < 0 or
126 self.x > self.maxx or self.y > self.maxy):
127 break
128 else:
129 table = {
130 '<': 'left',
131 '>': 'right',
132 '+': 'rot',
133 'x': 'adddx',
134 'y': 'adddy',
135 'i': 'input',
136 'o': 'output',
137 }
138 while True:
139 instr = self.playfield.get((self.x, self.y), ' ')
140 name = table.get(instr, None)
141 if name is not None:
142 self.debug("* WIMPZECUTING %s @ (%d,%d)" % (name, self.x, self.y))
143 command = getattr(self, name)
144 command()
145 self.x += self.dx
146 self.y += self.dy
147 self.dump()
148 if (self.x < 0 or self.y < 0 or
149 self.x > self.maxx or self.y > self.maxy):
150 break
126151
127152 ### debugging ###
128153
132157 print "------------"
133158 print "x=%d,y=%d,dx=%d,dy=%d" % (self.x, self.y, self.dx, self.dy)
134159 print "head: %d cell: %d" % (self.head, self.tape.get(self.head, 0))
135 print "Next reinsert: %s" % self.insertpos
136 print "Wheel:"
137 print "------------"
138 i = 0
139 for x in self.wheel:
140 arrow = " "
141 if i == self.index:
142 arrow = "-->"
143 print "%s %d. %s" % (arrow, i, x)
144 i += 1
160 if not self._super_wimp_mode:
161 print "Next reinsert: %s" % self.insertpos
162 print "Wheel:"
163 print "------------"
164 i = 0
165 for x in self.wheel:
166 arrow = " "
167 if i == self.index:
168 arrow = "-->"
169 print "%s %d. %s" % (arrow, i, x)
170 i += 1
145171 print "------------"
146172
147173
151177
152178 if __name__ == '__main__':
153179 debug = False
154 fnai = 1
155 if sys.argv[1] == '-d':
180 super_wimp_mode = False
181 if sys.argv[1] in ('-d', '--debug'):
156182 debug = True
157 fnai = 2
158 with open(sys.argv[fnai]) as file:
159 p = Program(file, debug=debug)
183 sys.argv.pop(1)
184 if sys.argv[1] == '--super-wimp-mode':
185 super_wimp_mode = True
186 sys.argv.pop(1)
187 with open(sys.argv[1]) as file:
188 p = Program(file, debug=debug, super_wimp_mode=super_wimp_mode)
160189 p.dump()
161190 p.run()