diff --git a/pyasm/pyasm b/pyasm/pyasm index c3161d2..f247411 100755 --- a/pyasm/pyasm +++ b/pyasm/pyasm @@ -640,8 +640,8 @@ def eval_expr(expr): if 'is not defined' in e.message: Undefined = e.message[len("name '"):-len("' is not defined")] msg = "Opcode expression has '%s' undefined" % Undefined - error(msg) - #raise NameError(msg) + #error(msg) + raise NameError(msg) error("Opcode expression has an error") return result diff --git a/pyasm/test_pyasm.py b/pyasm/test_pyasm.py index d00ee4e..70b1ae6 100644 --- a/pyasm/test_pyasm.py +++ b/pyasm/test_pyasm.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- """ Test the pyasm functions. @@ -25,14 +24,14 @@ class TestPyasm(unittest.TestCase): # define tests: (test, dot, symtable, expected, undefined, raises) tests = ( - ('A', 0100, {'A': 1}, 1, None, False), - ('.', 0100, {}, 0100, None, False), - ('B', 0100, {}, None, 'B', True), + ('A', 0o100, {'A': 1}, 1, None, False), + ('.', 0o100, {}, 0o100, None, False), + ('B', 0o100, {}, None, 'B', True), ('A+1', 0100, {'A': 1}, 2, None, False), ('A+B', 0, {'A': 1, 'B': 2}, 3, None, False), ('A + B', 0, {'A': 1, 'B': 2}, 3, None, False), ('A / B', 0, {'A': 4, 'B': 2}, 2, None, False), - ('. + 0100', 0100, {}, 0200, None, False), + ('. + 0o100', 0o100, {}, 0o200, None, False), ) # now run them @@ -98,7 +97,7 @@ class TestPyasm(unittest.TestCase): # define tests: (label, address, lnum, expected_symtab, expected_symtabline tests = ( ('A', 1, 2, {'A': 1}, {'A': 2}), - ('B', 0100, 5, {'B': 0100}, {'B': 5}), + ('B', 0o100, 5, {'B': 0o100}, {'B': 5}), ) # now run them diff --git a/pymlac/Display.py b/pymlac/Display.py index fcaa6b6..fb7e23e 100644 --- a/pymlac/Display.py +++ b/pymlac/Display.py @@ -1,6 +1,3 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - """ The Imlac display. @@ -11,7 +8,8 @@ The Imlac dislay X and Y registers are of size 11 bits. The most significant DLYA) loads the display X (or Y) register from the 10 bits of valu, with bit 10 of the X/Y register being set to 0. -The display is 2048x2048 pixels. +The virtual display is 2048x2048 pixels, but the physical display is +1024x1024 pixels. """ @@ -48,9 +46,9 @@ class Display(object): BackgroundColour = 1 DrawColour = 0 - # max coordinates of pymlac display - ScaleMaxX = 2048 - ScaleMaxY = 2048 + # max coordinates of pymlac physical display + ScaleMaxX = 1024 + ScaleMaxY = 1024 def __init__(self): @@ -73,7 +71,7 @@ class Display(object): """Write display array to PPM file.""" self.next_file_num += 1 - filename = 'pymlac_%06d.ppm' % self.next_file_num + filename = 'pymlac_%06d.pbm' % self.next_file_num with open(filename, 'wb') as handle: # output header data handle.write(bytes('P1\n', 'utf-8')) @@ -94,15 +92,52 @@ class Display(object): x1, y1 start coordinates x2, y2 end coordinates dotted True if dotted line, else False (IGNORED) + + Algorithm from: + http://csourcecodes.blogspot.com/2016/06/bresenhams-line-drawing-algorithm-generalized-c-program.html """ - log('Display: drawing (%d,%d) to (%d,%d)' % (x1, y1, x2, y2)) + # convert virtual coords to physical + x1 = x1 // 2 + y1 = y1 // 2 + x2 = x2 // 2 + y2 = y2 // 2 + # invert the Y axis + y1 = self.ScaleMaxY - y1 + y2 = self.ScaleMaxY - y2 + + # draw the line (Bresenham algorithm) + x = x1 + y = y1 + dx = abs(x2 - x1) + dy = abs(y2 - y1) + s1 = 1 if x2 > x1 else -1 # sign(x2 - x1) + s2 = 1 if y2 > y1 else -1 # sign(y2 - y1) + swap = False + self.array[(y-1)*self.ScaleMaxX + x - 1] = self.DrawColour + if dy > dx: + (dx, dy) = (dy, dx) + swap = True + p = 2*dy - dx + for i in range(0, dx): + self.array[(y-1)*self.ScaleMaxX + x - 1] = self.DrawColour + while p >= 0: + p = p - 2*dx + if swap: + x += s1 + else: + y += s2 + p = p + 2*dy + if swap: + y += s2 + else: + x += s1 + i += 1 + + # set display flag to "changed" self.dirty = True - # draw a straight line using Bresenam - self.bresenham(x1, y1, x2, y2) - def clear(self): """Clear the display.""" @@ -135,85 +170,19 @@ class Display(object): if self.dirty: self.write() -# original algorithm from: -# http://www.idav.ucdavis.edu/education/GraphicsNotes/Bresenhams-Algorithm.pdf -# Let ∆x = x2 − x1 -# Let ∆y = y2 − y1 -# Let j = y1 -# Let ε = ∆y − ∆x -# -# for i = x1 to x2−1 -# illuminate (i, j) -# if (ε ≥ 0) -# j += 1 -# ε −= ∆x -# end if -# i += 1 -# ε += ∆y -# next i -# -# finish - - def bresenham(self, x1, y1, x2, y2): - """Bresenham algorithm to draw from (x1,y1) to (x2,y2).""" - - dx = x2 - x1 - dy = y2 - y1 - - # Determine how steep the line is - is_steep = abs(dy) > abs(dx) - - # Rotate line - if is_steep: - x1, y1 = y1, x1 - x2, y2 = y2, x2 - - # Swap start and end points if necessary and store swap state - swapped = False - if x1 > x2: - x1, x2 = x2, x1 - y1, y2 = y2, y1 - swapped = True - - # Recalculate differentials - dx = x2 - x1 - dy = y2 - y1 - - # Calculate error - error = int(dx / 2.0) - ystep = 1 if y1 < y2 else -1 - - # Iterate over bounding box generating points between start and end - y = y1 - for x in range(x1, x2 + 1): - (xx, yy) = (y, x) if is_steep else (x, y) - yyy = self.ScaleMaxX - yy - self.array[yyy*self.ScaleMaxX + xx] = self.DrawColour - error -= abs(dy) - if error < 0: - y += ystep - error += dx - if __name__ == '__main__': """Test case - draw radial lines.""" d = Display() - d.draw(0, 0, 1023, 1023) - d.draw(255, 0, 1023-255, 1023) - d.draw(511, 0, 1023-511, 1023) - d.draw(767, 0, 1023-767, 1023) - d.draw(1023, 0, 0, 1023) - d.draw(0, 255, 1023, 1023-255) - d.draw(0, 511, 1023, 1023-511) - d.draw(0, 767, 1023, 1023-767) + granularity = 32 + for x in range(0, 2048, granularity): + d.draw(x, 0, 1023, 1023) + for y in range(0, 2048, granularity): + d.draw(2048, y, 1023, 1023) + for x in range(2048, 0, -granularity): + d.draw(x, 2048, 1023, 1023) + for y in range(2048, 0, -granularity): + d.draw(0, y, 1023, 1023) d.clear() - d.draw(0, 0, 1023, 1023) - d.draw(255, 0, 1023-255, 1023) - d.draw(511, 0, 1023-511, 1023) - d.draw(767, 0, 1023-767, 1023) - d.draw(1023, 0, 0, 1023) - d.draw(0, 255, 1023, 1023-255) - d.draw(0, 511, 1023, 1023-511) - d.draw(0, 767, 1023, 1023-767) d.close() diff --git a/pymlac/DisplayCPU.py b/pymlac/DisplayCPU.py index fc9d068..3ce2bc6 100644 --- a/pymlac/DisplayCPU.py +++ b/pymlac/DisplayCPU.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ The Imlac display CPU. @@ -131,24 +129,24 @@ class DisplayCPU(object): self.DPC = self.DRS[self.DRSindex] if byte & 0x10: # inc X MSB - log('**** inc X MSB: before .DX=%d' % self.DX) + log(f'**** inc X MSB: before .DX={self.DX:06o}') self.DX += (1 << LSBBITS) - log('**** inc X MSB: after .DX=%d' % self.DX) + log(f'**** inc X MSB: after .DX={self.DX:06o}') if byte & 0x08: # clear X LSB - log('**** clear X LSB: before .DX=%d' % self.DX) + log(f'**** clear X LSB: before .DX={self.DX:06o}') self.DX &= MSBMASK - log('**** clear X LSB: after .DX=%d' % self.DX) + log(f'**** clear X LSB: after .DX={self.DX:06o}') if byte & 0x02: # inc Y MSB - log('**** inc Y MSB: before .DY=%d' % self.DY) + log(f'**** inc Y MSB: before .DY={self.DY:06o}') self.DY += (1 << LSBBITS) - log('**** inc Y MSB: after .DY=%d' % self.DY) + log(f'**** inc Y MSB: after .DY={self.DY:06o}') if byte & 0x01: # clear Y LSB - log('**** clear Y LSB: before .DY=%d' % self.DY) + log(f'**** clear Y LSB: before .DY={self.DY:06o}') self.DY &= MSBMASK - log('**** clear Y LSB: after .DY=%d' % self.DY) + log(f'**** clear Y LSB: after .DY={self.DY:06o}') return trace diff --git a/pymlac/Globals.py b/pymlac/Globals.py index 9340c8c..2acdacd 100644 --- a/pymlac/Globals.py +++ b/pymlac/Globals.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ Globals used throughout the emulator. """ diff --git a/pymlac/Imlac.py b/pymlac/Imlac.py index 0c8d243..33f4577 100644 --- a/pymlac/Imlac.py +++ b/pymlac/Imlac.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ A simulator for an Imlac PDS-1 or PDS-4. @@ -48,6 +45,9 @@ import TtyIn import TtyOut import Trace +import log +log = log.Log('test.log', log.Log.DEBUG) + class Imlac(object): """The Imlac object - contains all devices.""" @@ -100,15 +100,18 @@ class Imlac(object): Trace.settrace(MainCPU.PC >= self.tracestart and MainCPU.PC <= self.traceend) + log(f'execute_once: self.dcpu.ison() returns {self.dcpu.ison()}') if self.dcpu.ison(): Trace.trace('%6.6o' % DisplayCPU.DPC) Trace.trace('\t') - instruction_cycles = self.dcpu.execute_one_instruction() + (instruction_cycles, dtrace_str) = self.dcpu.execute_one_instruction() + log(f"execute_once: at {DisplayCPU.PC:6.6o}, returned cycles {instruction_cycles} and dtrace_str='{dtrace_str}'") Trace.trace('%6.6o\t' % MainCPU.PC) - instruction_cycles += self.cpu.execute_one_instruction() + (instruction_cycles, trace_str) += self.cpu.execute_one_instruction() + log(f"execute_once: at {MainCPU.PC:6.6o}, returned cycles {instruction_cycles} and trace_str='{trace_str}'") Trace.itraceend(DisplayCPU.ison()) diff --git a/pymlac/Kbd.py b/pymlac/Kbd.py index 8aa9a5f..ed77f0a 100644 --- a/pymlac/Kbd.py +++ b/pymlac/Kbd.py @@ -1,5 +1,3 @@ -# !/usr/bin/python - """ Emulate the Keyboard (KBD). diff --git a/pymlac/MainCPU.py b/pymlac/MainCPU.py index e8de1bf..d26c641 100644 --- a/pymlac/MainCPU.py +++ b/pymlac/MainCPU.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ The Imlac main CPU. """ diff --git a/pymlac/Makefile b/pymlac/Makefile index 94e2ba5..f9f19ec 100644 --- a/pymlac/Makefile +++ b/pymlac/Makefile @@ -36,3 +36,5 @@ lst: $(TESTS) clean: rm -Rf *.pyc *~ *.out test_*.ptp *.lst test_*.trace _#*#_.* CPU.test.trace.* test.ptr + rm -f test.log *.pbm pymlac.trace + diff --git a/pymlac/Memory.py b/pymlac/Memory.py index b53a002..50b1786 100644 --- a/pymlac/Memory.py +++ b/pymlac/Memory.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ Emulate the Imlac Memory. """ diff --git a/pymlac/Panel.py b/pymlac/Panel.py index 2d507d9..c570683 100644 --- a/pymlac/Panel.py +++ b/pymlac/Panel.py @@ -1,7 +1,6 @@ -#!/usr/bin/python -################################################################################ -# The Imlac panel. -################################################################################ +""" +The Imlac panel. +""" import os diff --git a/pymlac/PtrPtp.py b/pymlac/PtrPtp.py index 33db642..ff1b137 100644 --- a/pymlac/PtrPtp.py +++ b/pymlac/PtrPtp.py @@ -1,6 +1,3 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - """ Emulate the imlac Paper Tape Reader/Punch (PTR/PTP). @@ -86,7 +83,7 @@ class PtrPtp(object): self.device_motor_on = False self.device_filename = fname self.device_open_file = open(self.device_filename, 'rb') - print('Opening PTR file: %s' % fname) + log('Opening PTR file: %s' % fname) self.device_ready = False self.device_cycle_count = self.PtrNotReadyCycles self.ptr_at_eof = False diff --git a/pymlac/Regs.py b/pymlac/Regs.py index 22d18f1..19a4078 100644 --- a/pymlac/Regs.py +++ b/pymlac/Regs.py @@ -1,24 +1,22 @@ -#!/usr/bin/python - """ Class to emulate the Imlac Registers (main cpu and display cpu). """ class Regs(object): - DS = 0100000 # data switches + DS = 0100000 # data switches - PC = 040 # main CPU program counter - L = 0 # main CPU link register - AC = 0 # main CPU accumulator - Sync40Hz = 1 # main CPU 40Hz flag register + PC = 040 # main CPU program counter + L = 0 # main CPU link register + AC = 0 # main CPU accumulator + Sync40Hz = 1 # main CPU 40Hz flag register - DPC = 0 # display CPU program counter - DRS = [0, 0, 0, 0, 0, 0, 0, 0] # display CPU ??? - DRSindex = 0 # display CPU ??? - DIB = 0 # display CPU ??? - DX = 0 # display CPU draw X register - DY = 0 # display CPU draw Y register + DPC = 0 # display CPU program counter + DRS = [0, 0, 0, 0, 0, 0, 0, 0] # display CPU ??? + DRSindex = 0 # display CPU ??? + DIB = 0 # display CPU ??? + DX = 0 # display CPU draw X register + DY = 0 # display CPU draw Y register def clearSync40Hz(self): """Clear the 40Hz flag register.""" diff --git a/pymlac/Trace.py b/pymlac/Trace.py index 5d42220..d8fb319 100644 --- a/pymlac/Trace.py +++ b/pymlac/Trace.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ The Imlac trace stuff. @@ -16,6 +14,9 @@ import collections from Globals import * +import log +log = log.Log('test.log', log.Log.DEBUG) + class Trace(object): @@ -47,25 +48,25 @@ class Trace(object): self.dcpu = displaycpu self.trace_map = collections.defaultdict(bool) -# print('Trace.__init__: self.tracing=%s, self.tracefile=%s' % (str(self.tracing), str(self.tracefile))) + log(f'Trace.__init__: self.tracing={self.tracing}, self.tracefile={self.tracefile}') def set_trace_map(self, trace_map): """Set the trace address dict mapping.""" self.trace_map = trace_map -# print('Trace.set_trace_map: self.trace_map=%s' % str(trace_map)) + log(f'Trace.set_trace_map: self.trace_map={trace_map}') def add_maincpu(self, maincpu): """Add the main CPU object.""" self.cpu = maincpu -# print('Trace.add_maincpu: self.cpu=%s' % str(maincpu)) + log(f'Trace.add_maincpu: self.cpu={maincpu}') def add_displaycpu(self, dispcpu): """Add the display CPU object.""" self.dcpu = dispcpu -# print('Trace.add_displaycpu: self.dcpu=%s' % str(dispcpu)) + log(f'Trace.add_displaycpu: self.dcpu={dispcpu}') def close(self): """Close trace.""" @@ -74,7 +75,7 @@ class Trace(object): self.tracing = False self.tracefile = None self.dcpu = dispcpu -# print('Trace.close: self.tracing=%s' % str(self.tracing)) + log(f'Trace.close: self.tracing={self.tracing}') def deimtrace(self, opcode, code): """Trace the DEIM instruction. @@ -83,6 +84,7 @@ class Trace(object): code the operation """ + log(f"deimtrace: self.tracing={self.tracing}, writing '{opcode} {code}'") if self.tracing: self.tracefile.write('%s\t%s\t' % (opcode, code)) self.tracefile.flush() @@ -97,6 +99,7 @@ class Trace(object): Returns the trace string or None if not tracing. """ + log(f'Trace.dtrace: self.tracing={self.tracing}') result = None if self.tracing: @@ -105,6 +108,7 @@ class Trace(object): else: result = '%04o: %s\t%5.5o' % (ddot, opcode, address) + log(f"dtrace: result='{result}'") return result def itrace(self, dot, opcode, indirect=False, address=None): @@ -118,7 +122,7 @@ class Trace(object): Returns the trace string or None if not tracing. """ -# print('Trace.itrace: self.tracing=%s, self.trace_map=%s' % (str(self.tracing), str(self.trace_map))) +# log(f'Trace.itrace: self.tracing={self.tracing}, self.trace_map={self.trace_map}') result = None if self.tracing and self.trace_map[dot]: @@ -160,4 +164,4 @@ class Trace(object): """Set the trace ON or OFF.""" self.tracing = new_tracing -# print('Trace.settrace: self.tracing=%s' % str(new_tracing)) + log(f'Trace.settrace: self.tracing={new_tracing}') diff --git a/pymlac/TtyIn.py b/pymlac/TtyIn.py index 9900644..bb678a4 100644 --- a/pymlac/TtyIn.py +++ b/pymlac/TtyIn.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ Emulate the Input TTY device (TTYIN). """ diff --git a/pymlac/TtyOut.py b/pymlac/TtyOut.py index 89c7b9c..8510ac2 100644 --- a/pymlac/TtyOut.py +++ b/pymlac/TtyOut.py @@ -1,5 +1,3 @@ -#!/usr/bin/python - """ Emulate the Output TTY (TTYOUT). """ diff --git a/pymlac/chars.asm b/pymlac/chars.asm index 5e36a33..c42ca20 100755 --- a/pymlac/chars.asm +++ b/pymlac/chars.asm @@ -2,818 +2,796 @@ ; Test of display processor instructions ; Display characters on screen. ;------------------------------- - org 0100 ; - dof ; -loop dsn ; wait until display is off - jmp .-1 ; - ssf ; wait until 40 Hz sync is set - jmp .-1 ; - scf ; -; lda ; get data switches -; and hbit ; save only high bit (NOP or HLT) -; dac .+1 ; save and ... -; nop ; execute - law dsub ; start display - dla ; - don ; -; hlt ; DEBUG - jmp loop ; keep going -hbit data 0100000 ; high bit mask + org 0100 ; + dof ; +loop dsn ; wait until display is off + jmp .-1 ; + ssf ; wait until 40 Hz sync is set + jmp .-1 ; + scf ; +; lda ; get data switches +; and hbit ; save only high bit (NOP or HLT) +; dac .+1 ; save and ... +; nop ; execute + law dsub ; start display + dla ; + don ; +; hlt ; DEBUG + jmp loop ; keep going +hbit data 0100000 ; high bit mask ;------------------------------- ; Display list subroutine - show all ASCII chars ;------------------------------- -dsub djms dsub0 ; - djms dsub3 ; - djms dsub2 ; - djms dsub1 ; - dhlt ; - -dsub0 dsts 0 ; - dlxa 020 ; - dlya 0140 ; - djms zero ; - dlxa 060 ; - dlya 0140 ; - dsts 0 ; - djms dlist0 ; - dlxa 060 ; - dlya 0120 ; - djms dlist1 ; - dlxa 060 ; - dlya 0100 ; - djms dlist2 ; - dlxa 060 ; - dlya 0060 ; - djms dlist3 ; - dlxa 060 ; - dlya 0040 ; - djms dlist4 ; - drjm ; +dsub dsts 1 ; + dlxa 020 ; + dlya 0200 ; + dsts 0 ; + djms dlist0 ; +; dlxa 020 ; +; dlya 0160 ; +; djms dlist1 ; +; dlxa 020 ; +; dlya 0140 ; +; djms dlist2 ; +; dlxa 020 ; +; dlya 0120 ; +; djms dlist3 ; +; dlxa 020 ; +; dlya 0100 ; +; djms dlist4 ; -dsub1 dsts 1 ; - dlxa 020 ; - dlya 0300 ; - djms one ; - dlxa 060 ; - dlya 0300 ; - dsts 1 ; - djms dlist0 ; - dlxa 060 ; - dlya 0260 ; - djms dlist1 ; - dlxa 060 ; - dlya 0240 ; - djms dlist2 ; - dlxa 060 ; - dlya 0220 ; - djms dlist3 ; - dlxa 060 ; - dlya 0200 ; - djms dlist4 ; - drjm ; - -dsub2 dsts 2 ; - dlxa 020 ; - dlya 0440 ; - djms two ; - dlxa 060 ; - dlya 0440 ; - dsts 1 ; - djms dlist0 ; - dlxa 060 ; - dlya 0420 ; - djms dlist1 ; - dlxa 060 ; - dlya 0400 ; - djms dlist2 ; - dlxa 060 ; - dlya 0360 ; - djms dlist3 ; - dlxa 060 ; - dlya 0340 ; - djms dlist4 ; - drjm ; - -dsub3 dsts 3 ; - dlxa 020 ; - dlya 0600 ; - djms three ; - dlxa 060 ; - dlya 0600 ; - dsts 1 ; - djms dlist0 ; - dlxa 060 ; - dlya 0560 ; - djms dlist1 ; - dlxa 060 ; - dlya 0540 ; - djms dlist2 ; - dlxa 060 ; - dlya 0520 ; - djms dlist3 ; - dlxa 060 ; - dlya 0500 ; - djms dlist4 ; - drjm ; +; dsts 1 ; +; dlxa 020 ; +; dlya 0240 ; +; dsts 1 ; +; djms dlist0 ; +; dlxa 020 ; +; dlya 0220 ; +; djms dlist1 ; +; dlxa 020 ; +; dlya 0200 ; +; djms dlist2 ; +; dlxa 020 ; +; dlya 0160 ; +; djms dlist3 ; +; dlxa 020 ; +; dlya 0140 ; +; djms dlist4 ; +; +; dsts 1 ; +; dlxa 020 ; +; dlya 0240 ; +; dsts 2 ; +; djms dlist0 ; +; dlxa 020 ; +; dlya 0220 ; +; djms dlist1 ; +; dlxa 020 ; +; dlya 0200 ; +; djms dlist2 ; +; dlxa 020 ; +; dlya 0160 ; +; djms dlist3 ; +; dlxa 020 ; +; dlya 0140 ; +; djms dlist4 ; +; dsts 1 ; +; dlxa 020 ; +; dlya 0300 ; +; dsts 3 ; +; djms dlist0 ; +; dlxa 020 ; +; dlya 0260 ; +; djms dlist1 ; +; dlxa 020 ; +; dlya 0240 ; +; djms dlist2 ; +; dlxa 020 ; +; dlya 0220 ; +; djms dlist3 ; +; dlxa 020 ; +; dlya 0200 ; +; djms dlist4 ; + dhlt ; ;------------------------------- ; Display list subroutine - show all ASCII chars ;------------------------------- -dlist0 djms space ; space - djms exclam ; ! - djms dquote ; " - djms hash ; # - djms dollar ; $ - djms percent ; % - djms amp ; & - djms quote ; ' - djms lparen ; ( - djms rparen ; ) - djms star ; * - djms plus ; + - djms comma ; , - djms minus ; - - djms dot ; . - djms slash ; / - drjm ; -dlist1 djms zero ; 0 - djms one ; 1 - djms two ; 2 - djms three ; 3 - djms four ; 4 - djms five ; 5 - djms six ; 6 - djms seven ; 7 - djms eight ; 8 - djms nine ; 9 - djms colon ; : - djms semcol ; ; - djms lt ; < - djms equal ; = - djms gt ; > - djms query ; ? - djms at ; @ - drjm ; -dlist2 djms uppera ; A - djms upperb ; B - djms upperc ; C - djms upperd ; D - djms uppere ; E - djms upperf ; F - djms upperg ; G - djms upperh ; H - djms upperi ; I - djms upperj ; J - djms upperk ; K - djms upperl ; L - djms upperm ; M - djms uppern ; N - djms uppero ; O - djms upperp ; P - djms upperq ; Q - djms upperr ; R - djms uppers ; S - djms uppert ; T - djms upperu ; U - djms upperv ; V - djms upperw ; W - djms upperx ; X - djms uppery ; Y - djms upperz ; Z - djms lsquare ; [ - djms slosh ; \ - djms rsquare ; ] - djms hat ; ^ - djms unders ; _ - djms bquote ; ` - drjm ; -dlist3 djms lowera ; a - djms lowerb ; b - djms lowerc ; c - djms lowerd ; d - djms lowere ; e - djms lowerf ; f - djms lowerg ; g - djms lowerh ; h - djms loweri ; i - djms lowerj ; j - djms lowerk ; k - djms lowerl ; l - djms lowerm ; m - djms lowern ; n - djms lowero ; o - djms lowerp ; p - djms lowerq ; q - djms lowerr ; r - djms lowers ; s - djms lowert ; t - djms loweru ; u - djms lowerv ; v - djms lowerw ; w - djms lowerx ; x - djms lowery ; y - djms lowerz ; z - djms lcurl ; { - djms pipe ; | - djms rcurl ; } - djms tilde ; ~ - djms del ; DEL - djms cursn - djms curso - djms nl - drjm ; -dlist4 djms uppert - djms lowerh - djms lowere - djms space - djms lowerq - djms loweru - djms loweri - djms lowerc - djms lowerk - djms space - djms lowerb - djms lowerr - djms lowero - djms lowerw - djms lowern - djms space - djms lowerf - djms lowero - djms lowerx - djms space - djms lowerj - djms loweru - djms lowerm - djms lowerp - djms lowers - djms space - djms lowero - djms lowerv - djms lowere - djms lowerr - djms space - djms lowert - djms lowerh - djms lowere - djms space - djms lowerl - djms lowera - djms lowerz - djms lowery - djms space - djms lowerd - djms lowero - djms lowerg - djms dot - drjm +dlist0 djms space ; space + djms exclam ; ! + djms dquote ; " + djms hash ; # + djms dollar ; $ + djms percent ; % + djms amp ; & + djms quote ; ' + djms lparen ; ( + djms rparen ; ) + djms star ; * + djms plus ; + + djms comma ; , + djms minus ; - + djms dot ; . + djms slash ; / + drjm ; +dlist1 djms zero ; 0 + djms one ; 1 + djms two ; 2 + djms three ; 3 + djms four ; 4 + djms five ; 5 + djms six ; 6 + djms seven ; 7 + djms eight ; 8 + djms nine ; 9 + djms colon ; : + djms semcol ; ; + djms lt ; < + djms equal ; = + djms gt ; > + djms query ; ? + djms at ; @ + drjm ; +dlist2 djms uppera ; A + djms upperb ; B + djms upperc ; C + djms upperd ; D + djms uppere ; E + djms upperf ; F + djms upperg ; G + djms upperh ; H + djms upperi ; I + djms upperj ; J + djms upperk ; K + djms upperl ; L + djms upperm ; M + djms uppern ; N + djms uppero ; O + djms upperp ; P + djms upperq ; Q + djms upperr ; R + djms uppers ; S + djms uppert ; T + djms upperu ; U + djms upperv ; V + djms upperw ; W + djms upperx ; X + djms uppery ; Y + djms upperz ; Z + djms lsquare ; [ + djms slosh ; \ + djms rsquare ; ] + djms hat ; ^ + djms unders ; _ + djms bquote ; ` + drjm ; +dlist3 djms lowera ; a + djms lowerb ; b + djms lowerc ; c + djms lowerd ; d + djms lowere ; e + djms lowerf ; f + djms lowerg ; g + djms lowerh ; h + djms loweri ; i + djms lowerj ; j + djms lowerk ; k + djms lowerl ; l + djms lowerm ; m + djms lowern ; n + djms lowero ; o + djms lowerp ; p + djms lowerq ; q + djms lowerr ; r + djms lowers ; s + djms lowert ; t + djms loweru ; u + djms lowerv ; v + djms lowerw ; w + djms lowerx ; x + djms lowery ; y + djms lowerz ; z + djms lcurl ; { + djms pipe ; | + djms rcurl ; } + djms tilde ; ~ + djms del ; DEL + djms cursn ; + djms curso ; + djms nl ; + drjm ; +dlist4 djms uppert ; + djms lowerh ; + djms lowere ; + djms space ; + djms lowerq ; + djms loweru ; + djms loweri ; + djms lowerc ; + djms lowerk ; + djms space ; + djms lowerb ; + djms lowerr ; + djms lowero ; + djms lowerw ; + djms lowern ; + djms space ; + djms lowerf ; + djms lowero ; + djms lowerx ; + djms space ; + djms lowerj ; + djms loweru ; + djms lowerm ; + djms lowerp ; + djms lowers ; + djms space ; + djms lowero ; + djms lowerv ; + djms lowere ; + djms lowerr ; + djms space ; + djms lowert ; + djms lowerh ; + djms lowere ; + djms space ; + djms lowerl ; + djms lowera ; + djms lowerz ; + djms lowery ; + djms space ; + djms lowerd ; + djms lowero ; + djms lowerg ; + djms dot ; + drjm ; ;------------------------------- ; Short vector characters ;------------------------------- -space inc e,F ; space -exclam inc e,D30 ; ! - inc B00,D02 ; - inc B03,02 ; - inc B02,F ; -dquote inc E,D23 ; " - inc 03,B0-1 ; - inc -10,01 ; - inc 13,D30 ; - inc B-1-3,0-1 ; - inc 10,01 ; - inc F,F ; -hash inc e,B13 ; # - inc 13,13 ; - inc D30,B-1-3 ; - inc -1-3,-1-3 ; - inc D23,B-30 ; - inc -30,D13 ; - inc B30,30 ; - inc F,F ; -dollar inc e,D3-2 ; $ - inc B03,03 ; - inc 03,03 ; - inc D3-2,B-30 ; - inc -3-2,3-2 ; - inc 3-2,-3-2 ; - inc -30,F ; -percent inc e,D20 ; % - inc B13,21 ; - inc 1-2,-2-1 ; - inc -12,02 ; - inc -12,-2-1 ; - inc 1-2,21 ; - inc 12,12 ; - inc F,F ; -amp inc e,D30 ; & - inc 30,B-33 ; - inc -23,12 ; - inc 10,1-2 ; - inc -2-2,-2-1 ; - inc 0-2,2-1 ; - inc 20,23 ; - inc F,F ; -quote inc e,D23 ; ' - inc 03,B0-1 ; - inc 10,01 ; - inc -13,F ; -lparen inc e,D30 ; ( - inc B-11,-12 ; - inc 02,12 ; - inc 11,F ; -rparen inc e,D20 ; ) - inc B11,12 ; - inc 02,-12 ; - inc -11,F ; -star inc e,D03 ; * - inc B32,32 ; - inc D-31,B0-3 ; - inc 0-3,D31 ; - inc B-32,-32 ; - inc F,F ; -plus inc e,D31 ; + - inc B03,03 ; - inc D-3-3,B30 ; - inc 30,F ; -comma inc e,D2-2 ; , - inc B13,01 ; - inc -10,0-1 ; - inc F,F ; -minus inc e,D13 ; - - inc B30,30 ; - inc F,F ; -dot inc e,D30 ; . - inc B00,F ; -slash inc e,D20 ; / - inc B13,13 ; - inc 13,F ; -zero inc e,D12 ; 0 - inc B02,02 ; - inc 22,2-2 ; - inc 0-2,0-2 ; - inc -2-2,-22 ; - inc F,F ; -one inc e,D10 ; 1 - inc B20,20 ; - inc D-20,B03 ; - inc 03,02 ; - inc -2-2,F ; -two inc e,D03 ; 2 - inc 03,b22 ; - inc 20,2-2 ; - inc -1-2,-2-1 ; - inc -3-3,30 ; - inc 30,F ; -three inc e,B30 ; 3 - inc 32,-22 ; - inc -30,D30 ; - inc B22,-22 ; - inc -30,F ; -four inc e,D30 ; 4 - inc 10,B03 ; - inc 03,02 ; - inc -3-3,-1-2 ; - inc 30,30 ; - inc F,F ; -five inc e,B30 ; 5 - inc 31,02 ; - inc -32,-30 ; - inc 03,30 ; - inc 30,F ; -six inc e,D03 ; 6 - inc B21,20 ; - inc 2-2,-2-2 ; - inc -20,-22 ; - inc 03,23 ; - inc 20,2-2 ; - inc F,F ; -seven inc e,B23 ; 7 - inc 33,12 ; - inc -30,-30 ; - inc F,F ; -eight inc e,D20 ; 8 - inc B20,21 ; - inc 02,-31 ; - inc -32,22 ; - inc 20,2-2 ; - inc -3-2,-3-1 ; - inc 0-2,2-1 ; - inc F,F ; -nine inc e,D2-1 ; 9 - inc B23,13 ; - inc 03,-30 ; - inc -2-2,2-2 ; - inc 20,F ; -colon inc e,D32 ; : - inc B00,D03 ; - inc 01,B00 ; - inc F,F ; -semcol inc e,D2-2 ; ; - inc B13,01 ; - inc -10,10 ; - inc D03,01 ; - inc B-10,F ; -lt inc e,D31 ; < - inc 30,B-21 ; - inc -21,-21 ; - inc 21,21 ; - inc 21,F ; -equal inc e,D13 ; = - inc B30,30 ; - inc D02,B-30 ; - inc -30,F ; -gt inc e,D01 ; > - inc B21,21 ; - inc 21,-21 ; - inc -21,-21 ; - inc F,F ; -query inc e,D30 ; ? - inc B00,D02 ; - inc B02,22 ; - inc -12,-20 ; - inc -1-2,F ; -at inc e,D30 ; @ - inc B-31,02 ; - inc 02,22 ; - inc 30,1-3 ; - inc -1-2,-30 ; - inc 02,20 ; - inc 0-2,F ; -uppera inc e,B13 ; A - inc 13,12 ; - inc 1-3,1-3 ; - inc 1-2,D-23 ; - inc B-30,F ; -upperb inc e,B03 ; B - inc 03,02 ; - inc 30,2-1 ; - inc 0-2,-2-1 ; - inc -30,D30 ; - inc B3-1,0-2 ; - inc -3-1,-30 ; - inc F,F ; -upperc inc e,D32 ; C - inc 30,B-2-2 ; - inc -20,-22 ; - inc 03,23 ; - inc 20,2-2 ; - inc F,F ; -upperd inc e,B03 ; D - inc 03,02 ; - inc 30,2-1 ; - inc 1-2,0-2 ; - inc -1-2,-2-1 ; - inc -30,F ; -uppere inc e,B03 ; E - inc 03,02 ; - inc 30,30 ; - inc D-1-2,-1-2 ; - inc B-20,-20 ; - inc D0-2,0-2 ; - inc B30,30 ; - inc F,F ; -upperf inc e,B03 ; F - inc 02,30 ; - inc D-30,B03 ; - inc 30,30 ; - inc F,F ; -upperg inc e,D33 ; G - inc B30,-1-3 ; - inc -30,-23 ; - inc 03,32 ; - inc 3-1,F ; -upperh inc e,B03 ; H - inc 03,02 ; - inc D0-3,0-1 ; - inc B30,30 ; - inc Y,B03 ; - inc 03,02 ; - inc Y,F ; -upperi inc e,B30 ; I - inc 30,D-31 ; - inc B03,03 ; - inc D-31,B30 ; - inc 30,F ; -upperj inc e,D02 ; J - inc B2-2,20 ; - inc 22,03 ; - inc 03,F ; -upperk inc e,B03 ; K - inc 03,02 ; - inc D0-3,0-1 ; - inc B32,32 ; - inc Y,B-13 ; - inc -23,F ; -upperl inc e,B03 ; L - inc 03,02 ; - inc Y,B30 ; - inc 30,F ; -upperm inc e,B03 ; M - inc 03,02 ; - inc 3-3,33 ; - inc 0-3,0-3 ; - inc 0-2,F ; -uppern inc e,B03 ; N - inc 03,02 ; - inc 2-3,2-3 ; - inc 2-2,03 ; - inc 03,02 ; - inc F,F ; -uppero inc e,D10 ; O - inc B20,20 ; - inc 13,02 ; - inc -13,-20 ; - inc -20,-1-3 ; - inc 0-2,1-3 ; - inc F,F ; -upperp inc e,B03 ; P - inc 03,02 ; - inc 30,3-1 ; - inc 0-2,-3-1 ; - inc -30,F ; -upperq inc e,D10 ; Q - inc B30,23 ; - inc 03,-12 ; - inc -30,-2-3 ; - inc 0-3,1-2 ; - inc D33,B3-3 ; - inc F,F ; -upperr inc e,B03 ; R - inc 03,02 ; - inc 30,3-1 ; - inc 0-2,-3-1 ; - inc -30,D30 ; - inc B2-2,1-2 ; - inc F,F ; -uppers inc e,D01 ; S - inc B2-1,30 ; - inc 13,-31 ; - inc -31,13 ; - inc 30,2-1 ; - inc F,F ; -uppert inc e,D30 ; T - inc B03,03 ; - inc 02,X ; - inc B30,30 ; - inc F,F ; -upperu inc e,D03 ; U - inc 03,02 ; - inc B0-3,0-3 ; - inc 2-2,20 ; - inc 22,03 ; - inc 03,F ; -upperv inc e,D03 ; V - inc 03,02 ; - inc B1-2,1-3 ; - inc 1-3,12 ; - inc 13,13 ; - inc F,F ; -upperw inc e,B03 ; W - inc 03,02 ; - inc Y,B33 ; - inc 3-3,03 ; - inc 03,02 ; - inc F,F ; -upperx inc e,B23 ; X - inc 22,23 ; - inc Y,B-23 ; - inc -22,-23 ; - inc F,F ; -uppery inc e,D30 ; Y - inc B02,03 ; - inc 33,X ; - inc B3-3,F ; -upperz inc e,D30 ; Z - inc 30,B-30 ; - inc -30,23 ; - inc 22,23 ; - inc -30,-30 ; - inc F,F ; -lsquare inc e,D30 ; [ - inc 10,B-20 ; - inc 03,03 ; - inc 02,20 ; - inc F,F ; -slosh inc e,D30 ; \ - inc 10,B-13 ; - inc -13,-12 ; - inc F,F ; -rsquare inc e,D20 ; ] - inc B20,03 ; - inc 03,02 ; - inc -20,F ; -hat inc e,D30 ; ^ - inc B03,03 ; - inc 02,-1-2 ; - inc -2-2,31 ; - inc 3-1,-22 ; - inc -12,F ; -unders inc e,D-2-2 ; _ - inc B30,30 ; - inc 20,20 ; - inc D-23,F ; -bquote inc e,D13 ; ` - inc 03,B-22 ; - inc F,F ; -lowera inc e,D03 ; a - inc 03,B30 ; - inc 2-2,-1-3 ; - inc 2-1,D-21 ; - inc B-3-1,-12 ; - inc 21,20 ; - inc F,F ; -lowerb inc e,B03 ; b - inc 03,03 ; - inc Y,D02 ; - inc B3-2,21 ; - inc 03,-22 ; - inc -3-2,F ; -lowerc inc e,D32 ; c - inc 20,B-2-2 ; - inc -20,-12 ; - inc 02,22 ; - inc 3-1,F ; -lowerd inc e,D33 ; d - inc 21,B-32 ; - inc -2-2,0-3 ; - inc 2-1,32 ; - inc d0-2,b03 ; - inc 03,03 ; - inc F,F ; -lowere inc e,D13 ; e - inc B20,20 ; - inc -23,-20 ; - inc -1-2,0-3 ; - inc 2-1,30 ; - inc F,F ; -lowerf inc e,D20 ; f - inc B03,03 ; - inc 22,2-1 ; - inc D-1-2,B-30 ; - inc -20,F ; -lowerg inc e,D0-2 ; g - inc B3-1,22 ; - inc 02,03 ; - inc -32,-2-2 ; - inc 0-3,2-1 ; - inc 32,F ; -lowerh inc e,B03 ; h - inc 03,03 ; - inc D1-3,B20 ; - inc 1-3,0-3 ; - inc F,F ; -loweri inc e,D30 ; i - inc B03,03 ; - inc D02,B00 ; - inc F,F ; -lowerj inc e,B1-2 ; j - inc 20,12 ; - inc 03,03 ; - inc D02,B00 ; - inc F,F ; -lowerk inc e,B03 ; k - inc 03,03 ; - inc D3-2,B-3-3 ; - inc 3-1,2-3 ; - inc F,F ; -lowerl inc e,D30 ; l - inc B-11,03 ; - inc 02,02 ; - inc F,F ; -lowerm inc e,B03 ; m - inc 03,D0-2 ; - inc B22,1-2 ; - inc 22,1-2 ; - inc 0-2,0-2 ; - inc D-30,B03 ; - inc F,F ; -lowern inc e,B03 ; n - inc 03,D0-2 ; - inc B32,2-3 ; - inc 0-3,F ; -lowero inc e,D10 ; o - inc B20,22 ; - inc 02,-12 ; - inc -20,-2-2 ; - inc 0-2,1-2 ; - inc F,F ; -lowerp inc e,D0-2 ; p - inc B03,03 ; - inc 03,D0-1 ; - inc B30,1-2 ; - inc -1-2,-30 ; - inc F,F ; -lowerq inc e,D32 ; q - inc 20,b-3-2 ; - inc -21,03 ; - inc 22,3-2 ; - inc 0-3,0-2 ; - inc 0-2,A0173 ; -lowerr inc e,B03 ; r - inc 03,D0-3 ; - inc B22,31 ; - inc F,F ; -lowers inc e,D01 ; s - inc B3-1,22 ; - inc -21,-31 ; - inc 22,3-1 ; - inc F,F ; -lowert inc e,D30 ; t - inc B-11,03 ; - inc 02,02 ; - inc D-2-2,B20 ; - inc 20,F ; -loweru inc e,D03 ; u - inc 03,B0-2 ; - inc 0-2,1-2 ; - inc 20,22 ; - inc 02,02 ; - inc Y,D02 ; - inc B1-2,F ; -lowerv inc e,D03 ; v - inc 03,B2-3 ; - inc 1-3,13 ; - inc 13,F ; -lowerw inc e,D03 ; w - inc 03,B1-3 ; - inc 1-3,13 ; - inc 1-3,1+3 ; - inc 13,F ; -lowerx inc e,B23 ; x - inc 33,D-20 ; - inc -30,B3-3 ; - inc 2-3,F ; -lowery inc e,D1-3 ; y - inc B23,23 ; - inc 03,X ; - inc B1-3,2-3 ; - inc F,F ; -lowerz inc e,B30 ; z - inc 20,A011 ; - inc B23,33 ; - inc -30,-20 ; - inc F,F ; -lcurl inc e,D33 ; { - inc 03,B-20 ; - inc 1-3,-10 ; - inc D10,B-1-3 ; - inc 20,F ; -pipe inc e,D33 ; | - inc 03,01 ; - inc B0-3,D0-2 ; - inc B0-3,A0173 ; -rcurl inc e,D13 ; } - inc 03,B20 ; - inc -1-3,10 ; - inc D-10,B1-3 ; - inc -20,F ; -tilde inc e,D03 ; ~ - inc B12,1-2 ; - inc 1-2,12 ; - inc F,F ; -del inc e,B+0+3 ; DEL (filled box) - inc B+0+3,B+1+0 ; - inc B+0-3,B+0-3 ; - inc B+1+0,B+0+3 ; - inc B+0+3,B+1+0 ; - inc B+0-3,B+0-3 ; - inc B+1+0,B+0+3 ; - inc B+0+3,F ; -cursn inc e,b03 ; cursor on - inc 03,30 ; - inc 30,0-3 ; - inc 0-3,-30 ; - inc -30,d11 ; - inc b02,02 ; - inc 20,20 ; - inc 0-2,0-2 ; - inc -30,03 ; - inc 20,0-2 ; - inc -10,01 ; - inc f,f ; -curso inc e,b03 ; cursor off - inc 03,30 ; - inc 30,0-3 ; - inc 0-3,-30 ; - inc -30,f ; -nlx inc e,d12 ; newline - inc b03,3-3 ; - inc 03,d2-2 ; - inc b0-3,30 ; - inc f,f ; -nl inc e,d12 ; newline - inc b03,2-3 ; - inc 03,d0-3 ; - inc b0-1,20 ; - inc d1-1,b03 ; - inc 03,-30 ; - inc -30,0-3 ; - inc 0-3,30 ; - inc 30,f ; -nl2 inc e,d33 ; newline - inc b0-2,-1-2 ; - inc -2-2,02 ; - inc d0-2,b20 ; - inc f,f ; +space inc e,f ; space +exclam inc e,d30 ; ! + inc b00,d02 ; + inc b03,02 ; + inc b02,f ; +dquote inc e,d23 ; " + inc 03,b0-1 ; + inc -10,01 ; + inc 13,d30 ; + inc b-1-3,0-1 ; + inc 10,01 ; + inc f,f ; +hash inc e,b13 ; # + inc 13,13 ; + inc d30,b-1-3 ; + inc -1-3,-1-3 ; + inc d23,b-30 ; + inc -30,d13 ; + inc b30,30 ; + inc f,f ; +dollar inc e,d3-2 ; $ + inc b03,03 ; + inc 03,03 ; + inc d3-2,b-30 ; + inc -3-2,3-2 ; + inc 3-2,-3-2 ; + inc -30,f ; +percent inc e,d20 ; % + inc b13,21 ; + inc 1-2,-2-1 ; + inc -12,02 ; + inc -12,-2-1 ; + inc 1-2,21 ; + inc 12,12 ; + inc f,f ; +amp inc e,d30 ; & + inc 30,b-33 ; + inc -23,12 ; + inc 10,1-2 ; + inc -2-2,-2-1 ; + inc 0-2,2-1 ; + inc 20,23 ; + inc f,f ; +quote inc e,d23 ; ' + inc 03,b0-1 ; + inc 10,01 ; + inc -13,f ; +lparen inc e,d30 ; ( + inc b-11,-12 ; + inc 02,12 ; + inc 11,f ; +rparen inc e,d20 ; ) + inc b11,12 ; + inc 02,-12 ; + inc -11,f ; +star inc e,d03 ; * + inc b32,32 ; + inc d-31,b0-3 ; + inc 0-3,d31 ; + inc b-32,-32 ; + inc f,f ; +plus inc e,d31 ; + + inc b03,03 ; + inc d-3-3,b30 ; + inc 30,f ; +comma inc e,d2-2 ; , + inc b13,01 ; + inc -10,0-1 ; + inc f,f ; +minus inc e,d13 ; - + inc b30,30 ; + inc f,f ; +dot inc e,d30 ; . + inc b00,f ; +slash inc e,d20 ; / + inc b13,13 ; + inc 13,f ; +zero inc e,d12 ; 0 + inc b02,02 ; + inc 22,2-2 ; + inc 0-2,0-2 ; + inc -2-2,-22 ; + inc f,f ; +one inc e,d10 ; 1 + inc b20,20 ; + inc d-20,b03 ; + inc 03,02 ; + inc -2-2,f ; +two inc e,d03 ; 2 + inc 03,b22 ; + inc 20,2-2 ; + inc -1-2,-2-1 ; + inc -3-3,30 ; + inc 30,f ; +three inc e,b30 ; 3 + inc 32,-22 ; + inc -30,d30 ; + inc b22,-22 ; + inc -30,f ; +four inc e,d30 ; 4 + inc 10,b03 ; + inc 03,02 ; + inc -3-3,-1-2 ; + inc 30,30 ; + inc f,f ; +five inc e,b30 ; 5 + inc 31,02 ; + inc -32,-30 ; + inc 03,30 ; + inc 30,f ; +six inc e,d03 ; 6 + inc b21,20 ; + inc 2-2,-2-2 ; + inc -20,-22 ; + inc 03,23 ; + inc 20,2-2 ; + inc f,f ; +seven inc e,b23 ; 7 + inc 33,12 ; + inc -30,-30 ; + inc f,f ; +eight inc e,d20 ; 8 + inc b20,21 ; + inc 02,-31 ; + inc -32,22 ; + inc 20,2-2 ; + inc -3-2,-3-1 ; + inc 0-2,2-1 ; + inc f,f ; +nine inc e,d2-1 ; 9 + inc b23,13 ; + inc 03,-30 ; + inc -2-2,2-2 ; + inc 20,f ; +colon inc e,d32 ; : + inc b00,d03 ; + inc 01,b00 ; + inc f,f ; +semcol inc e,d2-2 ; ; + inc b13,01 ; + inc -10,10 ; + inc d03,01 ; + inc b-10,f ; +lt inc e,d31 ; < + inc 30,b-21 ; + inc -21,-21 ; + inc 21,21 ; + inc 21,f ; +equal inc e,d13 ; = + inc b30,30 ; + inc d02,b-30 ; + inc -30,f ; +gt inc e,d01 ; > + inc b21,21 ; + inc 21,-21 ; + inc -21,-21 ; + inc f,f ; +query inc e,d30 ; ? + inc b00,d02 ; + inc b02,22 ; + inc -12,-20 ; + inc -1-2,f ; +at inc e,d30 ; @ + inc b-31,02 ; + inc 02,22 ; + inc 30,1-3 ; + inc -1-2,-30 ; + inc 02,20 ; + inc 0-2,f ; +uppera inc e,b13 ; A + inc 13,12 ; + inc 1-3,1-3 ; + inc 1-2,d-23 ; + inc b-30,f ; +upperb inc e,b03 ; b + inc 03,02 ; + inc 30,2-1 ; + inc 0-2,-2-1 ; + inc -30,d30 ; + inc b3-1,0-2 ; + inc -3-1,-30 ; + inc f,f ; +upperc inc e,d32 ; C + inc 30,b-2-2 ; + inc -20,-22 ; + inc 03,23 ; + inc 20,2-2 ; + inc f,f ; +upperd inc e,b03 ; d + inc 03,02 ; + inc 30,2-1 ; + inc 1-2,0-2 ; + inc -1-2,-2-1 ; + inc -30,f ; +uppere inc e,b03 ; E + inc 03,02 ; + inc 30,30 ; + inc d-1-2,-1-2 ; + inc b-20,-20 ; + inc d0-2,0-2 ; + inc b30,30 ; + inc f,f ; +upperf inc e,b03 ; F + inc 02,30 ; + inc d-30,b03 ; + inc 30,30 ; + inc f,f ; +upperg inc e,d33 ; G + inc b30,-1-3 ; + inc -30,-23 ; + inc 03,32 ; + inc 3-1,f ; +upperh inc e,b03 ; H + inc 03,02 ; + inc d0-3,0-1 ; + inc b30,30 ; + inc y,b03 ; + inc 03,02 ; + inc y,f ; +upperi inc e,b30 ; I + inc 30,d-31 ; + inc b03,03 ; + inc d-31,b30 ; + inc 30,f ; +upperj inc e,d02 ; J + inc b2-2,20 ; + inc 22,03 ; + inc 03,f ; +upperk inc e,b03 ; K + inc 03,02 ; + inc d0-3,0-1 ; + inc b32,32 ; + inc y,b-13 ; + inc -23,f ; +upperl inc e,b03 ; L + inc 03,02 ; + inc y,b30 ; + inc 30,f ; +upperm inc e,b03 ; M + inc 03,02 ; + inc 3-3,33 ; + inc 0-3,0-3 ; + inc 0-2,f ; +uppern inc e,b03 ; N + inc 03,02 ; + inc 2-3,2-3 ; + inc 2-2,03 ; + inc 03,02 ; + inc f,f ; +uppero inc e,d10 ; O + inc b20,20 ; + inc 13,02 ; + inc -13,-20 ; + inc -20,-1-3 ; + inc 0-2,1-3 ; + inc f,f ; +upperp inc e,b03 ; P + inc 03,02 ; + inc 30,3-1 ; + inc 0-2,-3-1 ; + inc -30,f ; +upperq inc e,d10 ; Q + inc b30,23 ; + inc 03,-12 ; + inc -30,-2-3 ; + inc 0-3,1-2 ; + inc d33,b3-3 ; + inc f,f ; +upperr inc e,b03 ; R + inc 03,02 ; + inc 30,3-1 ; + inc 0-2,-3-1 ; + inc -30,d30 ; + inc b2-2,1-2 ; + inc f,f ; +uppers inc e,d01 ; S + inc b2-1,30 ; + inc 13,-31 ; + inc -31,13 ; + inc 30,2-1 ; + inc f,f ; +uppert inc e,d30 ; T + inc b03,03 ; + inc 02,x ; + inc b30,30 ; + inc f,f ; +upperu inc e,d03 ; U + inc 03,02 ; + inc b0-3,0-3 ; + inc 2-2,20 ; + inc 22,03 ; + inc 03,f ; +upperv inc e,d03 ; V + inc 03,02 ; + inc b1-2,1-3 ; + inc 1-3,12 ; + inc 13,13 ; + inc f,f ; +upperw inc e,b03 ; W + inc 03,02 ; + inc y,b33 ; + inc 3-3,03 ; + inc 03,02 ; + inc f,f ; +upperx inc e,b23 ; X + inc 22,23 ; + inc y,b-23 ; + inc -22,-23 ; + inc f,f ; +uppery inc e,d30 ; Y + inc b02,03 ; + inc 33,x ; + inc b3-3,f ; +upperz inc e,d30 ; Z + inc 30,b-30 ; + inc -30,23 ; + inc 22,23 ; + inc -30,-30 ; + inc f,f ; +lsquare inc e,d30 ; [ + inc 10,b-20 ; + inc 03,03 ; + inc 02,20 ; + inc f,f ; +slosh inc e,d30 ; \ + inc 10,b-13 ; + inc -13,-12 ; + inc f,f ; +rsquare inc e,d20 ; ] + inc b20,03 ; + inc 03,02 ; + inc -20,f ; +hat inc e,d30 ; ^ + inc b03,03 ; + inc 02,-1-2 ; + inc -2-2,31 ; + inc 3-1,-22 ; + inc -12,f ; +unders inc e,d-2-2 ; _ + inc b30,30 ; + inc 20,20 ; + inc d-23,f ; +bquote inc e,d13 ; ` + inc 03,b-22 ; + inc f,f ; +lowera inc e,d03 ; a + inc 03,b30 ; + inc 2-2,-1-3 ; + inc 2-1,d-21 ; + inc b-3-1,-12 ; + inc 21,20 ; + inc f,f ; +lowerb inc e,b03 ; b + inc 03,03 ; + inc y,d02 ; + inc b3-2,21 ; + inc 03,-22 ; + inc -3-2,f ; +lowerc inc e,d32 ; c + inc 20,b-2-2 ; + inc -20,-12 ; + inc 02,22 ; + inc 3-1,f ; +lowerd inc e,d33 ; d + inc 21,b-32 ; + inc -2-2,0-3 ; + inc 2-1,32 ; + inc d0-2,b03 ; + inc 03,03 ; + inc f,f ; +lowere inc e,d13 ; e + inc b20,20 ; + inc -23,-20 ; + inc -1-2,0-3 ; + inc 2-1,30 ; + inc f,f ; +lowerf inc e,d20 ; f + inc b03,03 ; + inc 22,2-1 ; + inc d-1-2,b-30 ; + inc -20,f ; +lowerg inc e,d0-2 ; g + inc b3-1,22 ; + inc 02,03 ; + inc -32,-2-2 ; + inc 0-3,2-1 ; + inc 32,f ; +lowerh inc e,b03 ; h + inc 03,03 ; + inc d1-3,b20 ; + inc 1-3,0-3 ; + inc f,f ; +loweri inc e,d30 ; i + inc b03,03 ; + inc d02,b00 ; + inc f,f ; +lowerj inc e,b1-2 ; j + inc 20,12 ; + inc 03,03 ; + inc d02,b00 ; + inc f,f ; +lowerk inc e,b03 ; k + inc 03,03 ; + inc d3-2,b-3-3 ; + inc 3-1,2-3 ; + inc f,f ; +lowerl inc e,d30 ; l + inc b-11,03 ; + inc 02,02 ; + inc f,f ; +lowerm inc e,b03 ; m + inc 03,d0-2 ; + inc b22,1-2 ; + inc 22,1-2 ; + inc 0-2,0-2 ; + inc d-30,b03 ; + inc f,f ; +lowern inc e,b03 ; n + inc 03,d0-2 ; + inc b32,2-3 ; + inc 0-3,f ; +lowero inc e,d10 ; o + inc b20,22 ; + inc 02,-12 ; + inc -20,-2-2 ; + inc 0-2,1-2 ; + inc f,f ; +lowerp inc e,d0-2 ; p + inc b03,03 ; + inc 03,d0-1 ; + inc b30,1-2 ; + inc -1-2,-30 ; + inc f,f ; +lowerq inc e,d32 ; q + inc 20,b-3-2 ; + inc -21,03 ; + inc 22,3-2 ; + inc 0-3,0-2 ; + inc 0-2,a0173 ; +lowerr inc e,b03 ; r + inc 03,d0-3 ; + inc b22,31 ; + inc f,f ; +lowers inc e,d01 ; s + inc b3-1,22 ; + inc -21,-31 ; + inc 22,3-1 ; + inc f,f ; +lowert inc e,d30 ; t + inc b-11,03 ; + inc 02,02 ; + inc d-2-2,b20 ; + inc 20,f ; +loweru inc e,d03 ; u + inc 03,b0-2 ; + inc 0-2,1-2 ; + inc 20,22 ; + inc 02,02 ; + inc y,d02 ; + inc b1-2,f ; +lowerv inc e,d03 ; v + inc 03,b2-3 ; + inc 1-3,13 ; + inc 13,f ; +lowerw inc e,d03 ; w + inc 03,b1-3 ; + inc 1-3,13 ; + inc 1-3,1+3 ; + inc 13,f ; +lowerx inc e,b23 ; x + inc 33,d-20 ; + inc -30,b3-3 ; + inc 2-3,f ; +lowery inc e,d1-3 ; y + inc b23,23 ; + inc 03,x ; + inc b1-3,2-3 ; + inc f,f ; +lowerz inc e,b30 ; z + inc 20,a011 ; + inc b23,33 ; + inc -30,-20 ; + inc f,f ; +lcurl inc e,d33 ; { + inc 03,b-20 ; + inc 1-3,-10 ; + inc d10,b-1-3 ; + inc 20,f ; +pipe inc e,d33 ; | + inc 03,01 ; + inc b0-3,d0-2 ; + inc b0-3,a0173 ; +rcurl inc e,d13 ; } + inc 03,b20 ; + inc -1-3,10 ; + inc d-10,b1-3 ; + inc -20,f ; +tilde inc e,d03 ; ~ + inc b12,1-2 ; + inc 1-2,12 ; + inc f,f ; +del inc e,b+0+3 ; DEL (filled box) + inc b+0+3,b+1+0 ; + inc b+0-3,b+0-3 ; + inc b+1+0,b+0+3 ; + inc b+0+3,b+1+0 ; + inc b+0-3,b+0-3 ; + inc b+1+0,b+0+3 ; + inc b+0+3,f ; +cursn inc e,b03 ; cursor on + inc 03,30 ; + inc 30,0-3 ; + inc 0-3,-30 ; + inc -30,d11 ; + inc b02,02 ; + inc 20,20 ; + inc 0-2,0-2 ; + inc -30,03 ; + inc 20,0-2 ; + inc -10,01 ; + inc f,f ; +curso inc e,b03 ; cursor off + inc 03,30 ; + inc 30,0-3 ; + inc 0-3,-30 ; + inc -30,f ; +nlx inc e,d12 ; newline + inc b03,3-3 ; + inc 03,d2-2 ; + inc b0-3,30 ; + inc f,f ; +nl inc e,d12 ; newline + inc b03,2-3 ; + inc 03,d0-3 ; + inc b0-1,20 ; + inc d1-1,b03 ; + inc 03,-30 ; + inc -30,0-3 ; + inc 0-3,30 ; + inc 30,f ; +nl2 inc e,d33 ; newline + inc b0-2,-1-2 ; + inc -2-2,02 ; + inc d0-2,b20 ; + inc f,f ; ;------------------------------- - end + end diff --git a/pymlac/floatslider.py b/pymlac/floatslider.py index 19441c5..894c8f6 100644 --- a/pymlac/floatslider.py +++ b/pymlac/floatslider.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """A 'floatslider' widget for ELoss. As the wxPython slider widget works only with integers, we need diff --git a/pymlac/led16.py b/pymlac/led16.py index 2ee06cc..71a9a2b 100644 --- a/pymlac/led16.py +++ b/pymlac/led16.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ The 'led16' widget. diff --git a/pymlac/log.py b/pymlac/log.py index 4256526..7257057 100644 --- a/pymlac/log.py +++ b/pymlac/log.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """ A simple logger. diff --git a/pymlac/pymlac b/pymlac/pymlac index b5d7f4a..643c3dc 100755 --- a/pymlac/pymlac +++ b/pymlac/pymlac @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- """ A simulator for an Imlac PDS-1 or PDS-4. @@ -88,9 +87,11 @@ def start_running(cpu, dcpu, memory, ptrptp, ttyin): cpu.running = True while cpu.running: (cycles, tracestr) = cpu.execute_one_instruction() + log(f"start_running: cpu.execute_one_instruction returned ({cycles}, '{tracestr}')") if tracestr: endstr = trace.itraceend(False) - dcpu.execute_one_instruction() + (dcycles, dtracestr) = dcpu.execute_one_instruction() + log(f"start_running: dcpu.execute_one_instruction returned ({dcycles}, '{dtracestr}')") ptrptp.ptr_tick(cycles) ptrptp.ptp_tick(cycles) ttyin.tick(cycles) diff --git a/pymlac/pymlac_display.py b/pymlac/pymlac_display.py index 782a1df..736dfbf 100755 --- a/pymlac/pymlac_display.py +++ b/pymlac/pymlac_display.py @@ -1,6 +1,3 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - """ A display widget for the pymlac interpreter. """ diff --git a/pymlac/simpledisplay.asm b/pymlac/simpledisplay.asm index b29220d..7617ced 100755 --- a/pymlac/simpledisplay.asm +++ b/pymlac/simpledisplay.asm @@ -1,57 +1,57 @@ - org 0100 + org 0100 - dof ; turn display off -wdoff dsn ; - jmp wdoff ; wait until display off -w40hz ssf ; - jmp w40hz ; wait for 40Hz synch - scf ; - law hello ; start display - dla ; - don ; - jmp wdoff ; + dof ; turn display off +wdoff dsn ; + jmp wdoff ; wait until display off +w40hz ssf ; + jmp w40hz ; wait for 40Hz synch + scf ; + law hello ; start display + dla ; + don ; + jmp wdoff ; -hbit data 0100000 +hbit data 0100000 -hello dlxa 0400 - dlya 0400 - dsts 2 - dhvc - djms h - djms e - djms l - djms l - djms o - dhlt +hello dlxa 0400 + dlya 0400 + dsts 2 + dhvc + djms upperh + djms uppere + djms upperl + djms upperl + djms uppero + dhlt -h inc e,b03 - inc 03,02 - inc d30,30 - inc b0-3,0-3 - inc 0-2,d03 - inc 01,b-30 - inc -30,f +upperh inc e,b03 ; H + inc 03,02 ; + inc d0-3,0-1 ; + inc b30,30 ; + inc Y,b03 ; + inc 03,02 ; + inc Y,f ; -e inc e,b03 - inc 03,02 - inc 30,30 - inc d-1-3,-1-1 - inc b-30,-10 - inc d0-3,0-1 - inc b30,30 - inc f,f +uppere inc e,b03 ; E + inc 03,02 ; + inc 30,30 ; + inc d-1-2,-1-2 ; + inc b-20,-20 ; + inc d0-2,0-2 ; + inc b30,30 ; + inc f,f ; -l inc e,b03 - inc 03,02 - inc a1,p - inc 30,30 - inc f,f +upperl inc e,b03 ; L + inc 03,02 ; + inc Y,b30 ; + inc 30,f ; -o inc e,d02 - inc b03,23 - inc 20,2-3 - inc 0-3,-2-2 - inc -20,-22 - inc f,f +uppero inc e,d10 ; O + inc b20,20 ; + inc 13,02 ; + inc -13,-20 ; + inc -20,-1-3 ; + inc 0-2,1-3 ; + inc f,f ; - end + end diff --git a/pymlac/stats.py b/pymlac/stats.py index c8e2f66..26fc4eb 100644 --- a/pymlac/stats.py +++ b/pymlac/stats.py @@ -1,7 +1,6 @@ -#!/usr/bin/python -################################################################################ -# Dumps statistics from 'pymlac' run. -################################################################################ +""" +Dumps statistics from 'pymlac' run. +""" import pstats diff --git a/pymlac/test.py b/pymlac/test.py index 2a88424..7f69b53 100644 --- a/pymlac/test.py +++ b/pymlac/test.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - import time import collections import threading diff --git a/pymlac/test_CPU.py b/pymlac/test_CPU.py index 22225de..469f0ce 100755 --- a/pymlac/test_CPU.py +++ b/pymlac/test_CPU.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test pymlac CPU opcodes DIRECTLY. diff --git a/pymlac/test_Display.py b/pymlac/test_Display.py index e856b81..0488493 100755 --- a/pymlac/test_Display.py +++ b/pymlac/test_Display.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac display widget. @@ -129,7 +126,7 @@ if __name__ == '__main__': msg += '\nUncaught exception:\n' msg += ''.join(traceback.format_exception(type, value, tb)) msg += '=' * 80 + '\n' - print msg + print(msg) sys.exit(1) # plug our handler into the python system diff --git a/pymlac/test_KBD.py b/pymlac/test_KBD.py index 00d95dc..6891877 100644 --- a/pymlac/test_KBD.py +++ b/pymlac/test_KBD.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac keyboard emulation. diff --git a/pymlac/test_Memory.py b/pymlac/test_Memory.py index 44a08b0..5bdd0ae 100644 --- a/pymlac/test_Memory.py +++ b/pymlac/test_Memory.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac Memory object DIRECTLY. diff --git a/pymlac/test_PTR_PTP.py b/pymlac/test_PTR_PTP.py index 1b39706..964e43e 100644 --- a/pymlac/test_PTR_PTP.py +++ b/pymlac/test_PTR_PTP.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac papertape reader code. diff --git a/pymlac/test_TTYIN.py b/pymlac/test_TTYIN.py index 268cd86..739aa3a 100644 --- a/pymlac/test_TTYIN.py +++ b/pymlac/test_TTYIN.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac TTY input device. diff --git a/pymlac/test_TTYOUT.py b/pymlac/test_TTYOUT.py index bcd3c37..a4f9859 100644 --- a/pymlac/test_TTYOUT.py +++ b/pymlac/test_TTYOUT.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - """ Test the pymlac TTY output device.