1
0
mirror of https://github.com/rzzzwilson/pymlac.git synced 2025-06-10 09:32:41 +00:00

As copied from code.google.com/rzzzwilson.

This commit is contained in:
Ross Wilson
2015-05-20 19:02:17 +07:00
parent f95cf16fda
commit fa2c04ad95
343 changed files with 42429 additions and 0 deletions

15
README Normal file
View File

@@ -0,0 +1,15 @@
This is the IMLAC simulator written in Python - pymlac.
This python version is slowly being converted from the C version.
The IMLAC: http://en.wikipedia.org/wiki/Imlac_PDS-1
The directories here are:
bin - place for imlac papertape executables (*.ptp & other files)
disasm - an imlac executable disassembler
(for either papertape or tty programs)
iasm - imlac cross assembler program (ptp or tty)
idasm - an interactive disassembler (ptp or tty)
images - loadable imlac images I have found on the 'net
pymlac - the imlac emulator in python
vimlac.pics - various pictures of vimlac (C interpreter) screens

BIN
bin/2locFltPtMathSrc.ptp Executable file

Binary file not shown.

BIN
bin/40tp_blockPunch1.0.ptp Normal file

Binary file not shown.

BIN
bin/40tp_debugger5.0.ptp Executable file

Binary file not shown.

Binary file not shown.

BIN
bin/40tp_lightPen1.0.ptp Executable file

Binary file not shown.

BIN
bin/40tp_loSpeedAssm601.ptp Executable file

Binary file not shown.

BIN
bin/40tp_longVectorTest.ptp Executable file

Binary file not shown.

BIN
bin/40tp_simpleDisplay.ptp Executable file

Binary file not shown.

BIN
bin/40tp_spacewar2.5.ptp Executable file

Binary file not shown.

BIN
bin/40tp_symFormII_1.2C1_8kg.ptp Executable file

Binary file not shown.

BIN
bin/40tp_tse-4_supGrid.ptp Executable file

Binary file not shown.

BIN
bin/40tp_ttyio.ptp Executable file

Binary file not shown.

BIN
bin/40tp_upperMemTest1.ptp Executable file

Binary file not shown.

3
bin/README Normal file
View File

@@ -0,0 +1,3 @@
This holds the papertape (PTP) programs for the imlac.
Most of these were obtained from: http://www.ubanproductions.com/imlac_sw.html

BIN
bin/blockpunchsrc.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
bin/fortranARDSsrc.ptp Executable file

Binary file not shown.

BIN
bin/integerMath.ptp Executable file

Binary file not shown.

BIN
bin/keybrd.ptp Executable file

Binary file not shown.

BIN
bin/lowerMemTest1.ptp Executable file

Binary file not shown.

BIN
bin/lowspeedassembler.pdf Normal file

Binary file not shown.

BIN
bin/munch Normal file

Binary file not shown.

BIN
bin/munch.ptp Normal file

Binary file not shown.

BIN
bin/unlabeled.ptp Executable file

Binary file not shown.

BIN
docs/PDS-1D_ProgrammingGuide.pdf Executable file

Binary file not shown.

BIN
docs/PDS-1D_Schematics.pdf Executable file

Binary file not shown.

BIN
docs/PDS-1_TechnicalMan.pdf Executable file

Binary file not shown.

BIN
docs/PDS-4 Programming Card 1.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

BIN
docs/PDS-4 Programming Card 2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 KiB

BIN
docs/PDS-4 Programming Card 3.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

BIN
docs/PDS-4 Programming Card 4.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

11
docs/README Normal file
View File

@@ -0,0 +1,11 @@
Here are various documents describing the architecture and
various programs.
The picture SydneyUniversityPDS4Rom.png shows the output
of the ROM-60 program that checks the ROM from 040 to 077
against what it should be in a floppy system. The rom was
turned off and the papertape boot loader was toggled in before
running the ROM-60 program, so the output shows the floppy
bootloader in the "correct" column and the papertape bootloader
in the "actual" column. This is from the PDS-4 that was at
Sydney University in 1978.

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 KiB

37
iasm/Makefile Executable file
View File

@@ -0,0 +1,37 @@
################################################################################
# Makefile for the Imlac Cross Assembler (iasm).
################################################################################
# $Revision: 1.11 $
################################################################################
CCOPTS=-std=c99 -pedantic -Wall -g
all: iasm
iasm: Makefile iasm.h iasm.c assemble.o
$(CC) $(CCOPTS) -o iasm iasm.c assemble.o
assemble.o: Makefile assemble.h assemble.c
$(CC) $(CCOPTS) -c assemble.c
clean:
rm -f *.o *~ core iasm *.tty *.core *.trace *.log *.lst # *.ptp
install: all
cp iasm ../bin
test: all print.asm
# iasm -l simpledisplay.lst simpledisplay.asm
# -../bin/vimlac -bptr -iptr simpledisplay.ptp -nocorein -d 0177777 -r 040 -t 0100 -r 0100 > simpledisplay.trace
iasm -l print.lst print.asm
-../bin/vimlac -bptr -iptr print.ptp -nocorein -d 0177777 -r 040 -r 0100
# iasm -l JUMPTEST.LST JUMPTEST.ASM
# -../bin/vimlac -bptr -iptr JUMPTEST.ASM.ptp -nocorein -d 0177777 -r 040 -noclear -t 0100 -r 0100 > JUMPTEST.trace
# ../bin/vimlac -bptr -iptr 40tp_blockPunch1.0.ptp -nocorein -r 040 -otty blockpunch.tty -t 037660 -r 037660 -t 037640 -r 037640 -d 037540 -r -d 037674 -r -t 037670 -r 037670 > blockpunch.trace
chars.ptp: chars.asm
iasm chars.asm
reallyclean: clean

132
iasm/allopcodes.asm Executable file
View File

@@ -0,0 +1,132 @@
;-------------------------------
; Assembler source containing all IMLAC opcodes.
;-------------------------------
org 0100 ;
start law 03777 ; 007777
lwc 03777 ; 107777
jmp 03777 ; 013777
jmp *03777 ; 113777
dac 03777 ; 023777
dac *03777 ; 123777
xam 03777 ; 027777
xam *03777 ; 127777
isz 03777 ; 033777
isz *03777 ; 133777
jms 03777 ; 037777
jms *03777 ; 137777
and 03777 ; 047777
and *03777 ; 147777
ior 03777 ; 053777
ior *03777 ; 153777
xor 03777 ; 057777
xor *03777 ; 157777
lac 03777 ; 053777
lac *03777 ; 153777
add 03777 ; 067777
add *03777 ; 167777
sub 03777 ; 073777
sub *03777 ; 173777
sam 03777 ; 077777
sam *03777 ; 177777
;-------------------------------
hlt ; 000000
hlt 00001 ; 000001
hlt 03777 ; 003777
nop ; 100000
cla ; 100001
cma ; 100002
sta ; 100003
iac ; 100004
coa ; 100005
cia ; 100006
cll ; 100010
cml ; 100020
stl ; 100030
oda ; 100040
lda ; 100041
cal ; 100011
;-------------------------------
ral 0 ; 003000
ral 3 ; 003003
rar 0 ; 003020
rar 3 ; 003023
sal 0 ; 003040
sal 3 ; 003043
sar 0 ; 003060
sar 3 ; 003063
don ; 003100
;-------------------------------
asz ; 002001
asn ; 102001
asp ; 002002
asm ; 102002
lsz ; 002004
lsn ; 102004
dsf ; 002010
dsn ; 102010
ksf ; 002020
ksn ; 102020
rsf ; 002040
rsn ; 102040
tsf ; 002100
tsn ; 102100
ssf ; 002200
ssn ; 102200
hsf ; 002400
hsn ; 102400
;-------------------------------
dla ; 001003
ctb ; 001011
dof ; 001012
krb ; 001021
kcf ; 001022
krc ; 001023
rrb ; 001031
rcf ; 001032
rrc ; 001033
tpr ; 001041
tcf ; 001042
tpc ; 001043
hrb ; 001051
hof ; 001052
hon ; 001061
stb ; 001062
scf ; 001071
ios ; 001072
;-------------------------------
iot 0101 ; 001101
iot 0111 ; 001111
iot 0131 ; 001131
iot 0132 ; 001132
iot 0134 ; 001134
iot 0141 ; 001141
iof ; 001161
ion ; 001162
pun ; 001271
psf ; 001274
;-------------------------------
dlxa 07777 ; 017777
dlya 07777 ; 027777
; deim 07777 ; 037777
djms 07777 ; 057777
djmp 07777 ; 067777
;-------------------------------
dopr 015 ; 004015
dopr 014 ; 004014
dhlt ; 000000
dsts 0 ; 004004
dsts 1 ; 004005
dsts 2 ; 004006
dsts 3 ; 004007
dstb 0 ; 004010
dstb 1 ; 004011
drjm ; 004040
dixm ; 005000
diym ; 004400
ddxm ; 004200
ddym ; 004100
dhvc ; 006000
ddsp ; 004020
dnop ; 004000
;-------------------------------
end

1403
iasm/assemble.c Executable file

File diff suppressed because it is too large Load Diff

26
iasm/assemble.h Executable file
View File

@@ -0,0 +1,26 @@
/******************************************************************************\
* assemble.h *
* ------------ *
* *
* Define the interface to the assemble.c code. *
* *
\******************************************************************************/
/******
* $Revision: 1.4 $
******/
#ifndef ASSEMBLE_H
#define ASSEMBLE_H
/******
* Exported functions.
******/
BOOL Pass1(void);
BOOL Pass2(void);
#endif

796
iasm/chars.asm Executable file
View File

@@ -0,0 +1,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 ;
jmp loop ; keep going
hbit data 0100000 ; high bit mask
;-------------------------------
; Display list subroutine - show all ASCII chars
;-------------------------------
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 ;
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
;-------------------------------
; 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 ;
;-------------------------------
end

242
iasm/iasm.c Executable file
View File

@@ -0,0 +1,242 @@
/******************************************************************************\
* iasm.c *
* -------- *
* *
* The Imlac Cross Assembler. *
* *
* Usage: iasm <option> <filename> *
* *
* where <option> is zero or more of *
* -bptr use a papertape boot loader *
* -btty use a teletype boot loader *
* -l <file> write listing to file <file> *
* <filename> is the file to assemble. *
* *
* The input filename has the form of 'file.asm' and *
* the output file will be 'file.ptp' or 'file.tty'. *
* *
\******************************************************************************/
#include <getopt.h>
#include "iasm.h"
#include "assemble.h"
/******
* Local constants.
******/
#define PASS1_FAIL 1
#define PASS2_FAIL 2
/******
* File globals.
******/
static char *ProgName = "iasm";
/******
* Application globals.
******/
char *InFileName = NULL;
FILE *InFile = NULL;
char OutFileName[MAXFILENAME_LEN + 1];
FILE *OutFile;
char *ListFileName = NULL;
FILE *ListFile;
/******************************************************************************
Description : Clone a string.
Parameters : str - address of the string to duplicate
Returns : The address of the new copied string.
Comments : Couldn't get strdup() to work!?
******************************************************************************/
char *
CopyStr(char *str)
{
char *result = NULL;
if (str != NULL)
{
result = malloc(strlen(str) + 1);
if (result == NULL)
Error("Out of memory in file %s, line %d", __FILE__, __LINE__);
strcpy(result, str);
}
return result;
}
/******************************************************************************
Description : printf()-style debug routine.
Parameters : like printf()
Returns :
Comments :
******************************************************************************/
void
Debug(char *fmt, ...)
{
va_list ap;
char buff[1024];
va_start(ap, fmt);
vsprintf(buff, fmt, ap);
fprintf(stdout, "%s\n", buff);
va_end(ap);
}
/******************************************************************************
Description : printf()-style error routine.
Parameters : like printf()
Returns : Doesn't, calls exit().
Comments :
******************************************************************************/
void
Error(char *fmt, ...)
{
va_list ap;
char buff[1024];
va_start(ap, fmt);
vsprintf(buff, fmt, ap);
fprintf(stdout, "%s\n", buff);
va_end(ap);
exit(EXIT_FAILURE);
}
/******************************************************************************
Description :
Parameters :
Returns :
Comments :
******************************************************************************/
static void
usage(void)
{
fprintf(stderr, "usage: %s <option> <filename>\n", ProgName);
fprintf(stderr, "where <option> is zero or more of;\n");
fprintf(stderr, " -l <file> write listing to file <file>\n");
fprintf(stderr, " <filename> is the file to assemble.\n");
fprintf(stderr, "The input filename has the form of 'file.asm' and\n");
fprintf(stderr, "the assembler output file will be 'file.ptp'.\n");
fflush(stderr);
exit(EXIT_FAILURE);
}
/******************************************************************************
Description :
Parameters :
Returns :
Comments :
******************************************************************************/
int
main(int argc, char *argv[])
{
char optch;
char *outputext = "ptp";
int exitvalue = EXIT_SUCCESS;
/******
* Set up globals.
******/
if (argv[0] != NULL)
ProgName = argv[0];
/******
* Check parameters.
******/
opterr = 0;
while ((optch = getopt(argc, argv, "l:")) != -1)
{
switch (optch)
{
case 'l':
ListFileName = optarg;
break;
default:
usage();
}
}
if (optind + 1 != argc)
usage();
InFileName = argv[optind];
InFile = fopen(InFileName, "r");
if (InFile == NULL)
Error("Can't open '%s' for first pass read: %s", InFileName, strerror(errno));
if (strlen(InFileName) > 3 &&
STREQ(InFileName + strlen(InFileName) - 4, ".asm"))
{
char *newname = CopyStr(InFileName);
char *chptr = newname + strlen(newname) - 4;
*chptr = '\0';
sprintf(OutFileName, "%s.%s", newname, outputext);
free(newname);
}
else
sprintf(OutFileName, "%s.%s", InFileName, outputext);
OutFile = fopen(OutFileName, "w");
if (OutFile == NULL)
Error("Can't open '%s' for output: %s", OutFileName, strerror(errno));
if (ListFileName != NULL)
{
ListFile = fopen(ListFileName, "w");
if (ListFile == NULL)
Error("Can't open '%s' for list output: %s", ListFileName, strerror(errno));
}
/******
* Assemble the input file.
******/
if (Pass1())
{
fclose(InFile);
InFile = fopen(InFileName, "r");
if (InFile == NULL)
Error("Can't open '%s' for second pass read: %s", InFileName, strerror(errno));
if (!Pass2())
exitvalue = PASS2_FAIL;
}
else
exitvalue = PASS1_FAIL;
/******
* Close the files.
******/
if (InFile != NULL)
fclose(InFile);
if (OutFile != NULL)
fclose(OutFile);
exit(exitvalue);
}

64
iasm/iasm.h Executable file
View File

@@ -0,0 +1,64 @@
/******************************************************************************\
* iasm.h *
* -------- *
* *
* All global definitions for the Imlac Cross Assembler. *
* *
\******************************************************************************/
#ifndef IASM_H
#define IASM_H
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
/******
* Global macros, constants.
******/
#define MAXFILENAME_LEN 1024
#define STREQ(a,b) (strcmp((a),(b))==0)
#define STRIEQ(a,b) (strcasecmp((a),(b))==0)
#ifndef BOOL
typedef enum
{
FALSE = 0,
TRUE
} BOOL;
#endif
/******
* Global variables.
******/
char *InFileName;
FILE *InFile;
char OutFileName[MAXFILENAME_LEN + 1];
FILE *OutFile;
char *ListFileName;
FILE *ListFile;
BOOL PTRBoot;
/******
* Global functions.
******/
char *CopyStr(char *str);
void Debug(char *fmt, ...);
void Error(char *fmt, ...);
#endif

18
iasm/jumptest.asm Normal file
View File

@@ -0,0 +1,18 @@
; test some jump instructions
org 0100 ;
;
jmp .+1 ; pc-relative
jmp j ; to label
hlt 01 ; shouldn't get here
j jmp *l ; indirect
hlt 02 ; shouldn't get here
l data 0200 ; indirect target
;
org 0200 ;
jmp l0300 ; jump to label in another block
hlt 03 ; shouldn't get here
;
org 0300 ;
l0300 hlt ; should stop here
;
end

BIN
iasm/jumptest.ptp Normal file

Binary file not shown.

BIN
iasm/keybrd.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

730
iasm/print.asm Executable file
View File

@@ -0,0 +1,730 @@
;-------------------------------
; Test of display processor instructions
; Display characters on screen.
;-------------------------------
org 0100 ;
;
dof ;
law dend ;
dac nddisp ;
lwc 20 ;
dac newscr ;
lwc 40 ; one second counter
dac count ;
loop ssf ; wait until 40 Hz sync is set
jmp .-1 ;
scf ; clear 40Hz flag
dsn ; wait until display is off
jmp .-1 ;
isz count ;
jmp .+2 ;
jms another ;
law display ; start display
dla ;
don ;
jmp loop ; keep going
;-------------------------------
hbit data 0100000 ; high bit mask
count data 0 ; 40Hz counter
char data 040 ; char to write
lchar data 0177 ; last char
idsts dsts 0 ;
idlxa dlxa 0 ;
idlya dlya 0 ;
idjms djms dsub ;
idhlt dhlt ;
idnop dnop ;
incy data 0020 ;
curry data 01740 ;
nddisp data 0 ;start as dend
newscr data 0 ;
;-------------------------------
; Routine to add another line to display.
;-------------------------------
another nop ;
isz newscr ;
jmp .+2 ;
jms clear ;
lwc 20 ; half second counter
dac count ;
lac curry ;
sub incy ;
dac curry ;
lwc 1 ;
add nddisp ;
dac 010 ;
lac idlxa ;
dac *010 ;
lac idlya ;
ior curry ;
dac *010 ;
lac idjms ;
dac *010 ;
lac idhlt ;
dac *010 ;
law 3 ;
add nddisp ;
dac nddisp ;
jmp *another ;
;-------------------------------
; Routine to clear the screen.
;-------------------------------
clear nop ;
lwc 20 ;
dac newscr ;
lac idhlt ;
dac dend ;
law dend ;
dac nddisp ;
law 01740 ;
dac curry ;
jmp *clear ;
;-------------------------------
; 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 D3-3,3-3 ;
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 ;
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 ;
inc 03,30 ;
inc 30,0-3 ;
inc 0-3,-30 ;
inc -30,f ;
newline ddym ;
dlxa 0 ;
drjm ;
;-------------------------------
; Display list subroutine - show all ASCII chars
;-------------------------------
dsub djms 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 ;
djms zero ;
djms one ;
djms two ;
djms three ;
djms four ;
djms five ;
djms six ;
djms seven ;
djms eight ;
djms nine ;
djms colon ;
djms semcol ;
djms lt ;
djms equal ;
djms gt ;
djms query ;
djms at ;
; djms newline ;
djms lsquare ;
djms slosh ;
djms rsquare ;
djms hat ;
djms unders ;
djms bquote ;
djms lcurl ;
djms pipe ;
djms rcurl ;
djms tilde ;
djms del ;
djms curso ;
; djms newline ;
djms lowera ;
djms lowerb ;
djms lowerc ;
djms lowerd ;
djms lowere ;
djms lowerf ;
djms lowerg ;
djms lowerh ;
djms loweri ;
djms lowerj ;
djms lowerk ;
djms lowerl ;
djms lowerm ;
djms lowern ;
djms lowero ;
djms lowerp ;
djms lowerq ;
djms lowerr ;
djms lowers ;
djms lowert ;
djms loweru ;
djms lowerv ;
djms lowerw ;
djms lowerx ;
djms lowery ;
djms lowerz ;
; djms newline ;
djms uppera ;
djms upperb ;
djms upperc ;
djms upperd ;
djms uppere ;
djms upperf ;
djms upperg ;
djms upperh ;
djms upperi ;
djms upperj ;
djms upperk ;
djms upperl ;
djms upperm ;
djms uppern ;
djms uppero ;
djms upperp ;
djms upperq ;
djms upperr ;
djms uppers ;
djms uppert ;
djms upperu ;
djms upperv ;
djms upperw ;
djms upperx ;
djms uppery ;
djms upperz ;
djms cursn ;
; djms newline ;
drjm ;
;-------------------------------
; Display list. Dynamically added to every second.
;-------------------------------
display dsts 1 ;
dlxa 0 ;
dlya 01740 ;
djms dsub ;
dend dhlt ;
;-------------------------------
end ;

BIN
iasm/print.ptp Normal file

Binary file not shown.

1389
iasm/print.ptpdump Executable file

File diff suppressed because it is too large Load Diff

97
iasm/ptpttyblockloader.asm Executable file
View File

@@ -0,0 +1,97 @@
;------------------------
; This disassembled block loader was taken from 40tp_simpleDisplay.ptp.
;
; This block loader decides if it should load from papertape or TTY.
;------------------------
org 017700 ;
;
cksum equ .-1 ;
;
rcf ;
jmp patch ;
;------------------------
ndpatch dac cksum ;AC is zero here (patch side-effect)
jms rdbyte ;
asn ;
jmp .-2 ;wait here until no more zero bytes (have word count)
cia ;
dac wrdcnt ;store neg word count
jms rdword ;read load address
dac ldaddr ;
sam neg1 ;
jmp .+2 ;
hlt ;if load address is -1, halt
rdblock jms rdword ;now read block, storing words
dac *ldaddr ;
jms dosum ;
isz ldaddr ;
isz wrdcnt ;
jmp rdblock ;
jms rdword ;get checksum word
sub cksum ;compare with running checksum
asn ;
jmp stblock ;if same, get next block
hlt ;if not same, HALT
;------------------------
neg1 data 177777 ;
;------------------------
; Subroutine to compute checksum.
; Word to sum is in AC, running checksum left in cksum.
;------------------------
dosum data 0 ;
cll ;clear link in case of overflow
add cksum ;add running to AC
lsz ;overflow? skip if so
iac ;overflow!, bump running sum
dac cksum ;save running sum
jmp *dosum ;
;------------------------
; Code to decide what input device we are going to use.
; The decision is made by looking at address 0044 in the boot loader.
; If the instruction there is 001032 (rcf) then TTY input is patched.
;------------------------
patch hon ;start PTR
lac ttyset ;get patch instruction (jmp rdtty)
dac devpat ;patch code
law 1032 ;check if addr 044 is rcf (TTY boot loader)
sam *adr044 ;
dac devpat ;if not, put rcf *back*
stblock cal ;clear AC
jmp ndpatch ;
;------------------------
; Subroutine to read a WORD from the input device.
; Word value left in AC.
;------------------------
rdword data 0 ;
cal ;
jms rdbyte ;
ral 3 ;
ral 3 ;
ral 2 ;
jms rdbyte ;
jmp *rdword ;
;------------------------
; Subroutine to read a byte from the input device.
; Note - patched to use one of two input devices.
;------------------------
rdbyte data 0 ;
devpat rcf ;clear TTY flag - could be patched to 'jmp rdtty'
hsn ;wait for PTR to have data
jmp .-1 ;
hsf ;
jmp .-1 ;
hrb ;read PTR byte
jmp *rdbyte ;
;
rdtty rsf ;wait for TTY to have data
jmp .-1 ;
rrc ;read TTY byte and clear TTY flag
jmp *rdbyte ;
;------------------------
ttyset jmp rdtty ;
adr044 data 0044 ;pointer to address 000044
;------------------------
ldaddr equ . ; address 3776
wrdcnt equ .+1 ; address 3777
;------------------------
end ;

57
iasm/simpledisplay.asm Executable file
View File

@@ -0,0 +1,57 @@
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 ;
hbit data 0100000
hello dlxa 0400
dlya 0400
dsts 2
dhvc
djms h
djms e
djms l
djms l
djms o
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
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
l inc e,b03
inc 03,02
inc a1,p
inc 30,30
inc f,f
o inc e,d02
inc b03,23
inc 20,2-3
inc 0-3,-2-2
inc -20,-22
inc f,f
end

14
iasm/test.asm Executable file
View File

@@ -0,0 +1,14 @@
;-------------------------------
; Assembler source containing all IMLAC opcodes.
;-------------------------------
org 0100 ;
start law 0777 ; 004777
lwc 0777 ; 104777
jmp 0777 ; 010777
dac 0777 ; 020777
xam 0777 ; 024777
isz 0777 ; 030777
jms 0777 ; 034777
and 0777 ; 044777
;-------------------------------
end

BIN
iasm/test.ptp Normal file

Binary file not shown.

4
iasm/test0.asm Executable file
View File

@@ -0,0 +1,4 @@
org 00100
cla
hlt
end

BIN
iasm/testscale.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

9
idasm/Makefile Executable file
View File

@@ -0,0 +1,9 @@
######
# Makefile for the python disassembler.
######
test:
./idasm test/40tp_simpleDisplay.ptp
clean:
rm -f *~ *.pyc

1
idasm/README Executable file
View File

@@ -0,0 +1 @@
This program is a smart, interactive disassembler for IMLAC binary files.

111
idasm/binimport.py Executable file
View File

@@ -0,0 +1,111 @@
#!/usr/bin/env python
"""
Import an imlac binary file
"""
import sys
import getopt
import struct
import mem
import disasmdata
offset = 0
def doblockloader(f, word):
ldaddr = 0177700
numwords = 0100
while numwords > 0:
word = readword(f)
numwords = numwords - 1
ldaddr = ldaddr + 1
def dobody(f, count):
mymem = mem.Mem()
numwords = count
while True:
ldaddr = readword(f)
if ldaddr & 0x8000:
break
csum = 0
while numwords > 0:
word = readword(f)
csum += word
if csum > 0xffff:
csum += 1
csum = csum & 0xffff
mymem.add(ldaddr, word)
(op, fld) = disasmdata.disasmdata(word)
mymem.putOp(ldaddr, op)
mymem.putFld(ldaddr, fld)
ldaddr += 1
numwords -= 1
checksum = readword(f)
if csum != checksum:
print "Checksum error"
#sys.exit(20)
numwords = skipzeros(f)
return mymem
def ptpimport(file):
global offset
try:
f = open(file, "rb")
except IOError, e:
print e
return 3
offset = 0
byte = skipzeros(f)
word = (byte << 8) + readbyte(f)
doblockloader(f, word)
count = skipzeros(f)
mymem = dobody(f, count)
return mymem
def readbyte(f):
global offset
try:
byte = f.read(1)
except IOError, e:
print e
sys.exit(10)
except EOFError, e:
print e
sys.exit(11)
offset += 1
if len(byte) > 0:
val = struct.unpack("B", byte)
return val[0]
else:
return 0
def readword(f):
return (readbyte(f) << 8) + readbyte(f)
def skipzeros(f):
while True:
val = readbyte(f)
if val > 0:
return val
if __name__ == "__main__":
themem = ptpimport("keybrd.ptp")
addrlist = themem.keys()
addrlist.sort()
for addr in addrlist:
(word, cycle, type, lab, ref) = mymem[addr]
print "%s %s: %05o" % (addr, type, word)

93
idasm/disasmd.py Executable file
View File

@@ -0,0 +1,93 @@
#!/usr/bin/env python
"""
This module disassembles one imlac machine word into a display processor
instruction string.
Note that this routine has state - if a DEIM instruction is found, the *next*
instruction is treated as part of the DEIM.
"""
mode = "NONE"
def disasmd(word):
global mode
result = None
if mode == "DEIM":
return deimword(word)
else:
opcode = word & 0070000
if opcode == 0000000: result = doGrpZero(word)
elif opcode == 0010000: result = ("DLXA", "%05o" % (word & 07777))
elif opcode == 0020000: result = ("DLYA", "%05o" % (word & 07777))
elif opcode == 0030000:
mode = "DEIM"
result = ("DEIM", "%s" % deimbyte(word & 0377))
elif opcode == 0040000: result = ("DLVH", "%05o" % (word & 03777))
elif opcode == 0050000: result = ("DJMS", "%05o" % (word & 07777))
elif opcode == 0060000: result = ("DJMP", "%05o" % (word & 07777))
else: result = ("DATA", "%06o" % word)
return result
def doGrpZero(word):
if word == 0000000: return ("DHLT", "")
elif word == 0004000: return ("DNOP", "")
elif word == 0004004: return ("DSTS", "0")
elif word == 0004005: return ("DSTS", "1")
elif word == 0004006: return ("DSTS", "2")
elif word == 0004007: return ("DSTS", "3")
elif word == 0004010: return ("DSTB", "0")
elif word == 0004011: return ("DSTB", "1")
elif word == 0004020: return ("DDSP", "")
elif word == 0005000: return ("DIXM", "")
elif word == 0004400: return ("DIYM", "")
elif word == 0004040: return ("DRJM", "")
elif word == 0004200: return ("DDXM", "")
elif word == 0004100: return ("DDYM", "")
elif word == 0006000: return ("DHVC", "")
elif word == 0004015: return ("DOPR", "15")
elif word == 0004014: return ("DOPR", "14")
else: return ("DATA", "%06o" % word)
return None
def deimbyte(byte):
global mode
byte = byte & 0377
if byte & 0200:
beam = 'D'
xsign = '+'
ysign = '+'
if byte & 0100: beam = 'B'
if byte & 0040: xsign = '-'
if byte & 0004: ysign = '-'
return "%c%c%d%c%d" % \
(beam, xsign, (byte & 0030) >> 3, ysign, (byte & 0003))
else:
esc = '_'
ret = '_'
xinc = '_'
xzero = '_'
yinc = '_'
yzero = '_'
if byte & 0100:
mode = "NONE"
esc = 'F'
if byte & 0040:
mode = "NONE"
ret = 'R'
if byte & 0020: xinc = '+'
if byte & 0010: xzero = '0'
if byte & 0002: yinc = '+'
if byte & 0001: yzero = '0'
return "%c%c%c%c%c%c" % (esc, ret, xinc, xzero, yinc, yzero)
def deimword(word):
result = ("%s" % deimbyte(word >> 8), "%s" % deimbyte(word & 0377))
return result
if __name__ == "__main__":
for word in xrange(0177777 + 1):
result = disasmd(word)
print "%s %s" % result

15
idasm/disasmdata.py Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env python
"""
This module disassembles one imlac machine word into a data instruction
string.
"""
def disasmdata(word):
result = ("DATA", "%06o" % word)
return result
if __name__ == "__main__":
for word in xrange(0177777):
(op, fld) = disasmdata(word)
print "%07o: %s %s" % (word, op, fld)

140
idasm/disasmm.py Executable file
View File

@@ -0,0 +1,140 @@
#!/usr/bin/env python
"""
This module disassembles one imlac machine word into a main processor
instruction string. If the word isn't a legal instruction, return DATA.
"""
def disasmm(word):
result = ("", "")
opcode = word & 0174000
if opcode == 0000000: result = doGrpZero(word)
elif opcode == 0004000: result = ("LAW", "%05o" % (word & 03777))
elif opcode == 0104000: result = ("LWC", "%05o" % (word & 03777))
elif opcode == 0010000: result = ("JMP", "%05o" % (word & 03777))
elif opcode == 0110000: result = ("JMP", "*%05o" % (word & 03777))
elif opcode == 0020000: result = ("DAC", "%05o" % (word & 03777))
elif opcode == 0120000: result = ("DAC", "*%05o" % (word & 03777))
elif opcode == 0024000: result = ("XAM", "%05o" % (word & 03777))
elif opcode == 0124000: result = ("XAM", "*%05o" % (word & 03777))
elif opcode == 0030000: result = ("ISZ", "%05o" % (word & 03777))
elif opcode == 0130000: result = ("ISZ", "*%05o" % (word & 03777))
elif opcode == 0034000: result = ("JMS", "%05o" % (word & 03777))
elif opcode == 0134000: result = ("JMS", "*%05o" % (word & 03777))
elif opcode == 0044000: result = ("AND", "%05o" % (word & 03777))
elif opcode == 0144000: result = ("AND", "*%05o" % (word & 03777))
elif opcode == 0050000: result = ("IOR", "%05o" % (word & 03777))
elif opcode == 0150000: result = ("IOR", "*%05o" % (word & 03777))
elif opcode == 0054000: result = ("XOR", "%05o" % (word & 03777))
elif opcode == 0154000: result = ("XOR", "*%05o" % (word & 03777))
elif opcode == 0060000: result = ("LAC", "%05o" % (word & 03777))
elif opcode == 0160000: result = ("LAC", "*%05o" % (word & 03777))
elif opcode == 0064000: result = ("ADD", "%05o" % (word & 03777))
elif opcode == 0164000: result = ("ADD", "*%05o" % (word & 03777))
elif opcode == 0070000: result = ("SUB", "%05o" % (word & 03777))
elif opcode == 0170000: result = ("SUB", "*%05o" % (word & 03777))
elif opcode == 0074000: result = ("SAM", "%05o" % (word & 03777))
elif opcode == 0174000: result = ("SAM", "*%05o" % (word & 03777))
elif opcode == 0100000: result = doMicroCode(word)
else: result = ("DATA", "%07o" % word)
return result
def doGrpZero(word):
opcode = word & 0177000
if opcode == 0000000:
if word > 0:
return ("HLT", "%d" % word)
return ("HLT", "")
elif opcode == 0003000: return doShRot(word)
elif opcode == 0002000: return doSkipFlag(word)
elif opcode == 0001000: return doIOT(word)
else: print "DEFAULT"; return ("DATA", "%06o" % word)
def doShRot(word):
opcode = word & 0177770
if opcode == 0003040: return ("SAL", "%d" % (word & 07))
elif opcode == 0003060: return ("SAR", "%d" % (word & 07))
elif opcode == 0003100: return ("DON", "")
elif opcode == 0003000: return ("RAL", "%d" % (word & 07))
elif opcode == 0003020: return ("RAR", "%d" % (word & 07))
else: return ("DATA", "%06o" % word)
return None
def doSkipFlag(word):
if word == 002001: return ("ASZ", "")
elif word == 002002: return ("ASP", "")
elif word == 002004: return ("LSZ", "")
elif word == 002010: return ("DSF", "")
elif word == 002020: return ("KSF", "")
elif word == 002040: return ("RSF", "")
elif word == 002100: return ("TSF", "")
elif word == 002200: return ("SSF", "")
elif word == 002400: return ("HSF", "")
else: return ("DATA", "%06o" % word)
return None
def doIOT(word):
if word == 001003: return ("DLA", "")
elif word == 001011: return ("CTB", "")
elif word == 001012: return ("DOF", "")
elif word == 001021: return ("KRB", "")
elif word == 001022: return ("KCF", "")
elif word == 001023: return ("KRC", "")
elif word == 001031: return ("RRB", "")
elif word == 001032: return ("RCF", "")
elif word == 001033: return ("RRC", "")
elif word == 001041: return ("TPR", "")
elif word == 001042: return ("TCF", "")
elif word == 001043: return ("TPC", "")
elif word == 001051: return ("HRB", "")
elif word == 001052: return ("HOF", "")
elif word == 001061: return ("HON", "")
elif word == 001062: return ("STB", "")
elif word == 001071: return ("SCF", "")
elif word == 001072: return ("IOS", "")
elif word == 001274: return ("PSF", "")
elif word == 001271: return ("PPC", "")
elif word == 001101: return ("IOT", "0101")
elif word == 001141: return ("IOT", "0141")
elif word == 001161: return ("IOT", "0161")
elif word == 001162: return ("IOT", "0162")
elif word == 001131: return ("IOT", "0131")
elif word == 001132: return ("IOT", "0132")
elif word == 001134: return ("IOT", "0134")
else: return ("DATA", "%06o" % word)
return None
def doMicroCode(word):
if word == 0100000: return ("NOP", "")
elif word == 0100001: return ("CLA", "")
elif word == 0100002: return ("CMA", "")
elif word == 0100003: return ("STA", "")
elif word == 0100004: return ("IAC", "")
elif word == 0100005: return ("COA", "")
elif word == 0100006: return ("CIA", "")
elif word == 0100010: return ("CLL", "")
elif word == 0100020: return ("CML", "")
elif word == 0100011: return ("CAL", "")
elif word == 0100030: return ("STL", "")
elif word == 0100040: return ("ODA", "")
elif word == 0100041: return ("LDA", "")
elif word == 0102001: return ("ASN", "")
elif word == 0102002: return ("ASM", "")
elif word == 0102004: return ("LSN", "")
elif word == 0102010: return ("DSN", "")
elif word == 0102020: return ("KSN", "")
elif word == 0102040: return ("RSN", "")
elif word == 0102100: return ("TSN", "")
elif word == 0102200: return ("SSN", "")
elif word == 0102400: return ("HSN", "")
else: return ("DATA", "%06o" % word)
return None
if __name__ == "__main__":
for word in xrange(0177777 + 1):
(op, fld) = disasmm(word)
print "%07o: %s %s" % (word, op, fld)

541
idasm/idasm Executable file
View File

@@ -0,0 +1,541 @@
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
GUI front-end to the IMLAC intelligent disassembler.
"""
import os
import os.path
import wx
import wx.grid
import pickle
import binimport
import disasmm
import disasmd
import disasmdata
import processmain
import processdisplay
import processdata
import mem
PROGRAMNAME = "idasm"
PROGRAMVERSION = "0.2"
objwildcard = "Papertape files (*.ptp)|*.ptp|All files (*.*)|*.*"
projwildcard = "Project files (*.idasm)|*.idasm|All files (*.*)|*.*"
grid = None
mem = None
frame = None
projectName = ""
DEFPROJSUFFIX = ".idasm"
DEFASMSUFFIX = ".asm"
DEFPTPSUFFIX = ".ptp"
def effAddr(address):
return address & 03777
def newCycleNumber():
cycle = 0
while True:
cycle += 1
yield cycle
newcycle = newCycleNumber()
def loadProject(filename):
f = open(filename, "rb")
result = pickle.Unpickler(f).load()
f.close()
return result
def saveProject(filename):
global mem, grid
f = open(filename, "wb")
p = pickle.Pickler(f, -1)
p.dump(mem)
del p
f.close()
def writeASM(filename):
global mem
if not filename.endswith('.asm'):
filename = filename + '.asm'
address = -1
lines = ""
addrlist = mem.keys()
addrlist.sort()
for addr in addrlist:
addrint = int(addr, 8)
code = mem.getCode(addrint)
opcode = mem.getOp(addrint)
field = mem.getFld(addrint)
lab = mem.getLabcount(addrint)
ref = mem.getRef(addrint)
label = ""
if lab > 0:
label = "L%05o" % effAddr(int(addr, 8))
if ref:
if field[0] == '*':
field = "*L%s" % field[1:]
else:
field = "L%s" % field
if addrint != address:
if addrint >= 0:
lines += "\t\t\t;\n"
lines += "\tORG\t%05o\t; addr code\n" % addrint
address = addrint
lines += "%s\t%s\t%s\t; %s %07o\n" % (label, opcode, field, addr, code)
address += 1
lines += "\tEND\t\t;\n"
f = open(filename, "w")
f.writelines(lines)
f.close
def fillGrid(grid, mem):
importrows = mem.len()
currentrows = grid.GetNumberRows()
if currentrows > importrows:
grid.DeleteRows(0, (currentrows - importrows))
elif importrows > currentrows:
grid.AppendRows(importrows - currentrows)
addrlist = mem.keys()
addrlist.sort()
importrows = len(addrlist)
currentrows = grid.GetNumberRows()
if currentrows > importrows:
grid.DeleteRows(0, (currentrows - importrows))
elif importrows > currentrows:
grid.AppendRows(importrows - currentrows)
i = 0
for address in addrlist:
addr = int(address, 8)
code = mem.getCode(addr)
opcode = mem.getOp(addr)
field = mem.getFld(addr)
lab = mem.getLabcount(addr)
ref = mem.getRef(addr)
label = ""
if lab > 0:
label = "L%05o" % effAddr(addr)
if ref:
if field[0] == '*':
field = "*L%s" % field[1:]
else:
field = "L%s" % field
grid.SetCellValue(i, 0, label)
grid.SetCellValue(i, 1, opcode)
grid.SetCellValue(i, 2, field)
grid.SetCellValue(i, 3, address)
grid.SetCellValue(i, 4, "%06o" % code)
i += 1
grid.ForceRefresh()
class MyPopupMenu(wx.Menu):
def __init__(self, WinName):
global grid
rows = grid.GetSelectedRows()
wx.Menu.__init__(self)
self.WinName = WinName
item = wx.MenuItem(self, wx.NewId(), "Process as MAIN instructions")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupDoMain, item)
item = wx.MenuItem(self, wx.NewId(), "Process as DISPLAY instructions")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupDoDisplay, item)
item = wx.MenuItem(self, wx.NewId(), "Process as DATA instructions")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupDoData, item)
self.AppendSeparator()
item = wx.MenuItem(self, wx.NewId(), "Set reference")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupSetRef, item)
if len(rows) > 1:
item.Enable(False)
item = wx.MenuItem(self, wx.NewId(), "Clear reference")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupClearRef, item)
if len(rows) > 1:
item.Enable(False)
self.AppendSeparator()
item = wx.MenuItem(self, wx.NewId(), "DEBUG: print types")
self.AppendItem(item)
self.Bind(wx.EVT_MENU, self.popupDoType, item)
def popupDoMain(self, event):
global grid, mem, newcycle, frame
rows = grid.GetSelectedRows()
addrlist = []
for row in rows:
addrlist.append(int(grid.GetCellValue(row, 3), 8))
thiscycle = newcycle.next()
mem.setUndo()
processmain.process(mem, addrlist, thiscycle)
fillGrid(grid, mem)
grid.ClearSelection()
frame.enableUndo(True)
def popupDoDisplay(self, event):
global grid, mem, newcycle
rows = grid.GetSelectedRows()
addrlist = []
for row in rows:
addrlist.append(int(grid.GetCellValue(row, 3), 8))
thiscycle = newcycle.next()
mem.setUndo()
processdisplay.process(mem, addrlist, thiscycle)
fillGrid(grid, mem)
grid.ClearSelection()
frame.enableUndo(True)
def popupDoData(self, event):
global grid, mem, newcycle
thiscycle = newcycle.next()
mem.setUndo()
for row in grid.GetSelectedRows():
addr = int(grid.GetCellValue(row, 3), 8)
processdata.process(mem, addr, thiscycle)
fillGrid(grid, mem)
grid.ClearSelection()
frame.enableUndo(True)
def popupSetRef(self, event):
global grid, mem
row = grid.GetSelectedRows()[0]
addrstr = grid.GetCellValue(row, 3)
addr = int(addrstr, 8)
ref = mem.getRef(addr)
memref = int(mem.getFld(addr), 8)
mem.setUndo()
if ref:
mem.decLab(memref)
mem.incLab(memref)
mem.setRef(addr)
fillGrid(grid, mem)
grid.ClearSelection()
frame.enableUndo(True)
def popupClearRef(self, event):
global grid, mem
row = grid.GetSelectedRows()[0]
addrstr = grid.GetCellValue(row, 3)
addr = int(addrstr, 8)
ref = mem.getRef(addr)
memref = int(mem.getFld(addr), 8)
if ref:
mem.setUndo()
mem.decLab(memref)
mem.clearRef(addr)
fillGrid(grid, mem)
grid.ClearSelection()
frame.enableUndo(True)
def popupDoType(self, event):
global grid, mem
for row in grid.GetSelectedRows():
addrstr = grid.GetCellValue(row, 3)
addr = int(addrstr, 8)
word = mem.getCode(addr)
cycle = mem.getCycle(addr)
type = mem.getType(addr)
lab = mem.getLabcount(addr)
ref = mem.getRef(addr)
print "row %d, addr=%s, code=%05o, cycle=%d, type=%s, lab=%s, ref=%s" % \
(row, addrstr, word, cycle, type, lab, ref)
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
global grid
# kwds["style"] = wx.MINIMIZE_BOX | wx.SYSTEM_MENU | \
# wx.CLOSE_BOX | wx.CAPTION
wx.Frame.__init__(self, *args, **kwds)
self.grid = wx.grid.Grid(self, -1, size=(353, 800))
grid = self.grid
self.__set_properties()
self.__do_layout()
self.Centre()
self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, \
self.onGridCellRightClick, self.grid)
def __set_properties(self):
self.SetTitle(PROGRAMNAME + " " + PROGRAMVERSION)
status = self.CreateStatusBar(2, 0)
status.SetMinHeight(100)
self.SetStatusWidths([280, 70])
self.menu = self.initMenus()
self.initGrid()
def __do_layout(self):
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.grid, 1, wx.EXPAND, 0)
self.SetSizer(sizer)
sizer.Fit(self)
self.Layout()
def initMenus(self):
result = wx.MenuBar()
fileMenu = wx.Menu()
fileMenu.Append(100, "Load Project", "Load disassembly project")
self.saveMenuitem = fileMenu.Append(101, "Save Project", "Save disassembly project")
self.saveAsMenuitem = fileMenu.Append(102, "Save Project As ...", \
"Save disassembly project to new file")
fileMenu.AppendSeparator()
fileMenu.Append(103, "Import Binary File", \
"Import an Imlac binary file")
self.writeASMMenuitem = fileMenu.Append(104, "Write Assembler", \
"Write an assembler source file")
fileMenu.AppendSeparator()
fileMenu.Append(199, "Exit", "Exit the program")
result.Append(fileMenu, "File")
editMenu = wx.Menu()
self.editMenu = editMenu.Append(309, "Undo", "Undo last change")
self.enableUndo(False)
result.Append(editMenu, "Edit")
helpMenu = wx.Menu()
self.helpMenu = helpMenu.Append(202, "Help", "Help on using this program")
self.helpMenu.Enable(False)
helpMenu.AppendSeparator()
helpMenu.Append(203, "About", "About this program")
result.Append(helpMenu, "Help")
self.SetMenuBar(result)
self.Bind(wx.EVT_MENU, self.Menu100, id=100)
self.Bind(wx.EVT_MENU, self.Menu101, id=101)
self.Bind(wx.EVT_MENU, self.Menu102, id=102)
self.Bind(wx.EVT_MENU, self.Menu103, id=103)
self.Bind(wx.EVT_MENU, self.Menu104, id=104)
self.Bind(wx.EVT_MENU, self.Menu199, id=199)
self.Bind(wx.EVT_MENU, self.Menu202, id=202)
self.Bind(wx.EVT_MENU, self.Menu203, id=203)
self.Bind(wx.EVT_MENU, self.Menu309, id=309)
self.enableSaveWrite(False)
return result
def enableSaveWrite(self, enable):
self.saveMenuitem.Enable(enable)
self.saveAsMenuitem.Enable(enable)
self.writeASMMenuitem.Enable(enable)
def enableUndo(self, enable):
self.editMenu.Enable(enable)
def initGrid(self):
self.grid.CreateGrid(0, 5)
self.grid.EnableGridLines(False)
self.grid.SetSelectionMode(1)
self.grid.SetDefaultRowSize(15)
self.grid.SetRowLabelSize(37)
self.grid.SetColLabelSize(20)
self.grid.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTER)
self.grid.SetColLabelValue(0, "Label")
self.grid.SetColSize(0, 65)
self.grid.SetColLabelValue(1, "Op")
self.grid.SetColSize(1, 65)
self.grid.SetColLabelValue(2, "Field")
self.grid.SetColSize(2, 65)
self.grid.SetColLabelValue(3, "Address")
self.grid.SetColSize(3, 65)
self.grid.SetColLabelValue(4, "Code")
self.grid.SetColSize(4, 65)
self.grid.DisableDragColSize()
self.grid.DisableDragRowSize()
self.grid.DisableDragColMove()
self.grid.EnableEditing(False)
self.grid.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM)
self.grid.SetRowLabelAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
self.AddrAttr = wx.grid.GridCellAttr()
self.AddrAttr.SetBackgroundColour(wx.NamedColour('papayawhip'))
self.grid.SetColAttr(3, self.AddrAttr)
self.CodeAttr = wx.grid.GridCellAttr()
self.CodeAttr.SetBackgroundColour(wx.NamedColour('lightgrey'))
self.grid.SetColAttr(4, self.CodeAttr)
self.grid.ForceRefresh()
def onGridCellRightClick(self, event):
if self.grid.GetSelectedRows():
self.PopupMenu(MyPopupMenu("test"), event.GetPosition())
else:
self.grid.ClearSelection()
event.Skip()
def Menu100(self, event):
global mem, projectName
filename = None
dlg = wx.FileDialog(self, message="Choose a project file to load",
defaultDir=os.getcwd(), defaultFile=projectName,
wildcard=projwildcard,
style=wx.OPEN | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()[0]
self.grid.ClearGrid()
mem = loadProject(filename)
fillGrid(self.grid, mem)
projectName = os.path.basename(filename)
if projectName.endswith(DEFPROJSUFFIX):
projectName = projectName[:-len(DEFPROJSUFFIX)]
dlg.Destroy()
self.enableSaveWrite(True)
mem.clearUndo()
self.enableUndo(False)
def Menu101(self, event):
global mem, projectName
filename = projectName + DEFPROJSUFFIX
if projectName == "":
dlg = wx.FileDialog(self,
message="Choose a project file to save to",
defaultDir=os.getcwd(), defaultFile="",
wildcard=projwildcard,
style=wx.SAVE | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()[0]
if not filename.endswith(DEFPROJSUFFIX):
filename = filename + DEFPROJSUFFIX
projectName = os.path.basename(filename)
if projectName.endswith(DEFPROJSUFFIX):
projectName = projectName[:-len(DEFPROJSUFFIX)]
dlg.Destroy()
saveProject(filename)
def Menu102(self, event):
global mem, projectName
dlg = wx.FileDialog(self,
message="Choose a project file to save as",
defaultDir=os.getcwd(), defaultFile="",
wildcard=projwildcard,
style=wx.SAVE | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()[0]
saveProject(filename)
projectName = os.path.basename(filename)
if projectName.endswith(DEFPROJSUFFIX):
projectName = projectName[:-len(DEFPROJSUFFIX)]
dlg.Destroy()
def Menu103(self, event):
global mem, projectName
filename = None
dlg = wx.FileDialog(self, message="Choose an IMLAC object file to load",
defaultDir=os.getcwd(), defaultFile="",
wildcard=objwildcard,
style=wx.OPEN | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()[0]
self.grid.ClearGrid()
mem = binimport.ptpimport(filename)
addrlist = mem.keys()
addrlist.sort()
importrows = len(addrlist)
currentrows = self.grid.GetNumberRows()
if currentrows > importrows:
self.grid.DeleteRows(0, (currentrows - importrows))
elif importrows > currentrows:
self.grid.AppendRows(importrows - currentrows)
i = 0
for addr in addrlist:
(code, op, fld, labcount, ref, type, cycle) = mem.getMem(int(addr, 8))
self.grid.SetCellValue(i, 1, op)
self.grid.SetCellValue(i, 2, fld)
self.grid.SetCellValue(i, 3, addr)
self.grid.SetCellValue(i, 4, "%06o" % code)
i += 1
self.grid.ForceRefresh()
projectName = os.path.basename(filename)
if projectName.endswith(DEFPTPSUFFIX):
projectName = projectName[:-len(DEFPTPSUFFIX)]
dlg.Destroy()
self.enableSaveWrite(True)
mem.clearUndo()
self.enableUndo(False)
def Menu104(self, event):
global mem, grid, projectName
filename = None
dlg = wx.FileDialog(self,
message="Choose an IMLAC assembler file to write",
defaultDir=os.getcwd(),
defaultFile=projectName + DEFASMSUFFIX,
wildcard=objwildcard,
style=wx.SAVE | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPaths()[0]
writeASM(filename)
projectName = os.path.basename(filename)
if projectName.endswith(DEFASMSUFFIX):
projectName = projectName[:-len(DEFASMSUFFIX)]
dlg.Destroy()
def Menu199(self, event):
self.Close()
def Menu202(self, event):
print "Would show help here"
def Menu203(self, event):
from wx.lib.wordwrap import wordwrap
info = wx.AboutDialogInfo()
info.Name = PROGRAMNAME
info.Version = PROGRAMVERSION
info.Copyright = "\n(C) 2007 Autotelic Systems"
info.WebSite = ("http://www.manontroppo.org", "www.manontroppo.org")
info.Description = wordwrap("\nidasm is an interactive disassembler for "
"IMLAC object files\n",
350, wx.ClientDC(self))
info.License = wordwrap("Licenced under the GPL (version 2)", 500, wx.ClientDC(self))
wx.AboutBox(info)
def Menu309(self, event):
global mem, grid
mem.undoX()
fillGrid(grid, mem)
class MyApp(wx.App):
def OnInit(self):
global frame
wx.InitAllImageHandlers()
frame = MyFrame(None, -1, "")
self.SetTopWindow(frame)
frame.Show()
return 1
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()

137
idasm/mem.py Executable file
View File

@@ -0,0 +1,137 @@
#!/usr/bin/env python
"""
This module implements the 'mem' object and access routines.
A 'mem' object is a dictionary with the form:
{ address: (code, op, fld, labcount, ref, type, cycle),
address: (code, op, fld, labcount, ref, type, cycle),
...
}
where address is the address of the data (integer)
code is the code value at the address (integer)
op is the opcode (string)
fld is the instruction field (string)
labcount is the number of references to this address (integer)
ref is a flag to show if this word references another (boolean)
type is type of processed instruction 'm' for main
'd' for display
None for none
cycle is the cycle number when this word was processed
"""
class Mem(object):
def __init__(self):
self.memory = {}
self.undo = None
def add(self, address, code):
self.putMem(address, (code, "", "", 0, False, None, 0))
def len(self):
return len(self.memory)
def getMem(self, address):
addrstr = "%05o" % address
result = self.memory.get(addrstr, None)
if not result:
result = (0, "", "", 0, False, None, 0)
self.putMem(address, result)
return result
def getCode(self, address):
(code, _, _, _, _, _, _) = self.getMem(address)
return code
def getOp(self, address):
(_, op, _, _, _, _, _) = self.getMem(address)
return op
def getFld(self, address):
(_, _, fld, _, _, _, _) = self.getMem(address)
return fld
def getLabcount(self, address):
(_, _, _, labcount, _, _, _) = self.getMem(address)
return labcount
def getRef(self, address):
(_, _, _, _, ref, _, _) = self.getMem(address)
return ref
def getType(self, address):
(_, _, _, _, _, type, _) = self.getMem(address)
return type
def getCycle(self, address):
(_, _, _, _, _, _, cycle) = self.getMem(address)
return cycle
def putMem(self, address, entry):
addrstr = "%05o" % address
self.memory[addrstr] = entry
def putCode(self, address, code):
(_, op, fld, labcount, ref, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putOp(self, address, op):
(code, _, fld, labcount, ref, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putFld(self, address, fld):
(code, op, _, labcount, ref, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putLabcount(self, address, labcount):
(code, op, fld, _, ref, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putRef(self, address, ref):
(code, op, fld, labcount, _, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putType(self, address, type):
(code, op, fld, labcount, ref, _, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def putCycle(self, address, cycle):
(code, op, fld, labcount, ref, type, _) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def decLab(self, address):
(code, op, fld, labcount, ref, type, cycle) = self.getMem(address)
labcount -= 1
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def incLab(self, address):
(code, op, fld, labcount, ref, type, cycle) = self.getMem(address)
labcount += 1
self.putMem(address, (code, op, fld, labcount, ref, type, cycle))
def clearRef(self, address):
(code, op, fld, labcount, _, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, False, type, cycle))
def setRef(self, address):
(code, op, fld, labcount, _, type, cycle) = self.getMem(address)
self.putMem(address, (code, op, fld, labcount, True, type, cycle))
def keys(self):
return self.memory.keys()
def clearUndo(self):
self.undo = None
def setUndo(self):
self.undo = self.memory.copy()
def undoX(self):
tmp = self.memory
self.memory = self.undo
self.undo = tmp

16
idasm/processdata.py Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env python
"""
This module takes one word value and processes it as a DATA word.
"""
import disasmdata
def process(mem, addr, cycle):
code = mem.getCode(addr)
(op, fld) = disasmdata.disasmdata(code)
mem.putOp(addr, op)
mem.putFld(addr, fld)
mem.putCycle(addr, cycle)

108
idasm/processdisplay.py Executable file
View File

@@ -0,0 +1,108 @@
#!/usr/bin/env python
"""
This module takes a memory dictionary of the form:
{ <memstr>: ( <type>, <wordvalue> ), ...}
and a start address and returns a processed dictionary, where the <type>
is changed to one of "main", "mainref", "disp", "dispref" or "ref".
"""
import mem
import disasmd
dispQ = []
def dequeDisp():
result = None
if len(dispQ) > 0:
result = dispQ[0]
del dispQ[0]
return result
def effAddress(addr, offset):
return (addr & 0174000) + offset
def enqueDisp(address):
dispQ.append(address)
def getTargetAddress(code):
return code & 07777
def isDHLT(code):
return code == 0000000
def isDEIM(code):
opcode = code & 0070000
return opcode == 0030000
def isDEIMExit(code):
hibyte = (code >> 8) & 0377
lobyte = code & 0377
return isDEIMExitByte(hibyte) or isDEIMExitByte(lobyte)
def isDEIMReturn(code):
hibyte = (code >> 8) & 0377
lobyte = code & 0377
return isDEIMReturnByte(hibyte) or isDEIMReturnByte(lobyte)
def isDEIMExitByte(byte):
return (byte & 0300) == 0100
def isDEIMReturnByte(byte):
return (byte & 0240) == 0040
def isDJMP(code):
opcode = code & 0070000
return opcode == 0060000
def isDJMS(code):
opcode = code & 0070000
return opcode == 0050000
def isDRJM(code):
return code == 0004040
def process(mem, addrlist, newcycle):
mode = "normal"
for addr in addrlist:
enqueDisp(addr)
while len(dispQ) > 0:
address = dequeDisp()
while True:
if mem.getCycle(address) == newcycle: # seen it already
break
mem.putCycle(address, newcycle)
code = mem.getCode(address)
(op, fld) = disasmd.disasmd(code)
mem.putOp(address, op)
mem.putFld(address, fld)
if mode == "deim":
if isDEIMExit(code):
mode = "normal"
if isDEIMReturn(code):
break
else:
if mem.getRef(address):
mem.decLab(getTargetAddress(code))
if isDJMP(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
enqueDisp(memref)
break
elif isDRJM(code):
break
elif isDJMS(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
enqueDisp(memref)
elif isDEIM(code):
mode = "deim"
elif isDHLT(code):
break
address = address + 1

110
idasm/processmain.py Executable file
View File

@@ -0,0 +1,110 @@
#!/usr/bin/env python
"""
Process main instructions from a start address.
"""
import mem
import disasmm
mainQ = []
def dequeMain():
result = None
if len(mainQ) > 0:
result = mainQ[0]
del mainQ[0]
return result
def effAddress(addr, offset):
return (addr & 0174000) + offset
def enqueMain(address):
mainQ.append(address)
def getTargetAddress(code):
return code & 03777
def isHLT(code):
opcode = code & 0177700
return opcode == 0000000
def isISZ(code):
opcode = code & 0174000
return opcode == 0030000 or opcode == 0130000
def isJMP(code):
opcode = code & 0174000
return opcode == 0010000 or opcode == 0110000
def isJMS(code):
opcode = code & 0174000
return opcode == 0034000 or opcode == 0134000
def isMemRef(code):
opcode = code & 0174000
if opcode == 0020000 or opcode == 0120000: return True
if opcode == 0024000 or opcode == 0124000: return True
if opcode == 0044000 or opcode == 0144000: return True
if opcode == 0050000 or opcode == 0150000: return True
if opcode == 0054000 or opcode == 0154000: return True
if opcode == 0060000 or opcode == 0160000: return True
if opcode == 0064000 or opcode == 0164000: return True
if opcode == 0070000 or opcode == 0170000: return True
if opcode == 0074000 or opcode == 0174000: return True
return False
def isSAM(code):
opcode = code & 0174000
return opcode == 0074000 or opcode == 0174000
def isSkip(code):
opcode = code & 0077777
if opcode in [0002001, 0002002, 0002004, 0002010, 0002020,
0002040, 0002100, 0002200, 0002400]:
return True
return False
def process(mem, addrlist, newcycle):
for addr in addrlist:
enqueMain(addr)
while len(mainQ) > 0:
address = dequeMain()
while True:
if mem.getCycle(address) == newcycle: # seen it already
break
mem.putCycle(address, newcycle)
code = mem.getCode(address)
if mem.getRef(address):
mem.decLab(getTargetAddress(code))
(op, fld) = disasmm.disasmm(code)
mem.putOp(address, op)
mem.putFld(address, fld)
if isJMP(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
enqueMain(memref)
break
elif isJMS(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
enqueMain(memref+1)
elif isISZ(code) or isSAM(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
enqueMain(address+2)
elif isMemRef(code):
memref = effAddress(address, getTargetAddress(code))
mem.setRef(address)
mem.incLab(memref)
elif isSkip(code):
enqueMain(address+2)
elif isHLT(code):
break
address = address + 1

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,56 @@
;
ORG 00100 ; addr code
DOF ; 00100 0001012
L00101 DSN ; 00101 0102010
JMP L00101 ; 00102 0010101
L00103 SSF ; 00103 0002200
JMP L00103 ; 00104 0010103
SCF ; 00105 0001071
LDA ; 00106 0100041
AND L00164 ; 00107 0044164
DAC L00111 ; 00110 0020111
L00111 HLT ; 00111 0000000
LAW L00116 ; 00112 0004116
DLA ; 00113 0001003
DON ; 00114 0003100
JMP L00101 ; 00115 0010101
L00116 DLXA 05000 ; 00116 0015000
DLYA 05000 ; 00117 0025000
DSTS 1 ; 00120 0004005
DHVC ; 00121 0006000
DJMS L00132 ; 00122 0050132
DJMS L00141 ; 00123 0050141
DJMS L00151 ; 00124 0050151
DJMS L00151 ; 00125 0050151
DJMS L00156 ; 00126 0050156
DLXA 05000 ; 00127 0015000
DLYA 05000 ; 00130 0025000
DHLT ; 00131 0000000
L00132 DEIM B+0+3 ; 00132 0030303
B+0+3 B+0+2 ; 00133 0141702
D+3+0 D+3+0 ; 00134 0114230
B+0-3 B+0-3 ; 00135 0143707
B+0-2 D+0+3 ; 00136 0143203
D+0+1 B-3+0 ; 00137 0100770
B-3+0 FR+0_0 ; 00140 0174171
L00141 DEIM B+0+3 ; 00141 0030303
B+0+3 B+0+2 ; 00142 0141702
B+3+0 B+3+0 ; 00143 0154330
D-1-3 D-1-1 ; 00144 0127655
B-3+0 B-1+0 ; 00145 0174350
D+0-3 D+0-1 ; 00146 0103605
B+3+0 B+3+0 ; 00147 0154330
FR+0_0 FR+0_0 ; 00150 0074571
L00151 DEIM B+0+3 ; 00151 0030303
B+0+3 B+0+2 ; 00152 0141702
_____0 D+0+0 ; 00153 0000600
B+3+0 B+3+0 ; 00154 0154330
FR+0_0 FR+0_0 ; 00155 0074571
L00156 DEIM D+0+2 ; 00156 0030202
B+0+3 B+2+3 ; 00157 0141723
B+2+0 B+2-3 ; 00160 0150327
B+0-3 B-2-2 ; 00161 0143766
B-2+0 B-2+2 ; 00162 0170362
FR+0_0 FR+0_0 ; 00163 0074571
L00164 DATA 100000 ; 00164 0100000
END ;

Binary file not shown.

1434
idasm/tests/40tp_spacewar2.5.asm Executable file

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
idasm/tests/40tp_spacewar2.5.ptp Executable file

Binary file not shown.

View File

@@ -0,0 +1,84 @@
;
ORG 10010 ; addr code
L00010 ; 10010 0000000
;
ORG 10100 ; addr code
LAW 00001 ; 10100 0004001
DAC L00143 ; 10101 0020143
L00102 LAC L00143 ; 10102 0060143
RAL 1 ; 10103 0003001
DAC L00143 ; 10104 0020143
LWC 00001 ; 10105 0104001
DAC L00010 ; 10106 0020010
L00107 LAC L00143 ; 10107 0060143
DAC *L00010 ; 10110 0120010
CMA ; 10111 0100002
DAC *L00010 ; 10112 0120010
LAC L00153 ; 10113 0060153
SAM L00010 ; 10114 0074010
JMP L00107 ; 10115 0010107
LWC 00001 ; 10116 0104001
DAC L00010 ; 10117 0020010
L00120 LAC L00143 ; 10120 0060143
SAM *L00010 ; 10121 0174010
JMS L00132 ; 10122 0034132
CMA ; 10123 0100002
SAM *L00010 ; 10124 0174010
JMS L00132 ; 10125 0034132
LAC L00153 ; 10126 0060153
SAM L00010 ; 10127 0074010
JMP L00120 ; 10130 0010120
JMP L00102 ; 10131 0010102
L00132 HLT ; 10132 0000000
DAC L00144 ; 10133 0020144
LAC L00010 ; 10134 0060010
HLT ; 10135 0000000
DAC L00145 ; 10136 0020145
LAC *L00145 ; 10137 0160145
HLT ; 10140 0000000
LAC L00144 ; 10141 0060144
JMP *L00132 ; 10142 0110132
L00143 DATA 010163 ; 10143 0010163
L00144 DATA 000000 ; 10144 0000000
L00145 DATA 000000 ; 10145 0000000
;
ORG 10153 ; addr code
L00153 DATA 007771 ; 10153 0007771
DATA 007776 ; 10154 0007776
DATA 010000 ; 10155 0010000
DATA 010006 ; 10156 0010006
;
ORG 10163 ; addr code
DATA 104001 ; 10163 0104001
DATA 124154 ; 10164 0124154
DATA 020146 ; 10165 0020146
DATA 060154 ; 10166 0060154
DATA 020147 ; 10167 0020147
DATA 020150 ; 10170 0020150
DATA 060147 ; 10171 0060147
DATA 064155 ; 10172 0064155
DATA 020147 ; 10173 0020147
DATA 100001 ; 10174 0100001
DATA 124147 ; 10175 0124147
DATA 020151 ; 10176 0020151
DATA 160150 ; 10177 0160150
DATA 102002 ; 10200 0102002
DATA 010205 ; 10201 0010205
DATA 060151 ; 10202 0060151
DATA 120147 ; 10203 0120147
DATA 010171 ; 10204 0010171
DATA 060146 ; 10205 0060146
DATA 120154 ; 10206 0120154
DATA 060147 ; 10207 0060147
DATA 070156 ; 10210 0070156
DATA 020152 ; 10211 0020152
DATA 010100 ; 10212 0010100
;
ORG 37400 ; addr code
DATA 001052 ; 37400 0001052
DATA 113402 ; 37401 0113402
DATA 010163 ; 37402 0010163
;
ORG 37714 ; addr code
DATA 013400 ; 37714 0013400
END ;

Binary file not shown.

Binary file not shown.

1821
idasm/tests/keybrd.HAND.asm Executable file

File diff suppressed because it is too large Load Diff

1689
idasm/tests/keybrd.asm Executable file

File diff suppressed because it is too large Load Diff

BIN
idasm/tests/keybrd.idasm Executable file

Binary file not shown.

BIN
idasm/tests/keybrd.ptp Executable file

Binary file not shown.

631
idasm/tests/unlabeled.HAND.asm Executable file
View File

@@ -0,0 +1,631 @@
org 00100 ; addr code
l00100 kcf ; 00100 0001022
jms l00217 ; 00101 0034217
jms l00205 ; 00102 0034205
l00103 jms l00213 ; 00103 0034213
l00104 jms l00123 ; 00104 0034123
jms l00233 ; 00105 0034233
jmp l00104 ; 00106 0010104
jms l00404 ; 00107 0034404
jmp l00104 ; 00110 0010104
l00111 jms l00213 ; 00111 0034213
l00112 jms l00123 ; 00112 0034123
jms l00266 ; 00113 0034266
jmp l00112 ; 00114 0010112
jms l00420 ; 00115 0034420
l00116 jms l00123 ; 00116 0034123
jms l00311 ; 00117 0034311
jmp l00116 ; 00120 0010116
jms l00433 ; 00121 0034433
jmp l00116 ; 00122 0010116
;------------------------
l00123 hlt ; 00123 0000000
l00124 jms l00153 ; 00124 0034153
ksf ; 00125 0002020
jmp l00124 ; 00126 0010124
cla ; 00127 0100001
krc ; 00130 0001023
and l01265 ; 00131 0045265
dac l01244 ; 00132 0021244
sam l01266 ; 00133 0075266
jmp l00136 ; 00134 0010136
jmp l00100 ; 00135 0010100
l00136 sam l01265 ; 00136 0075265
jmp l00142 ; 00137 0010142
jms l00205 ; 00140 0034205
jmp l00124 ; 00141 0010124
l00142 sam l01267 ; 00142 0075267
jmp l00145 ; 00143 0010145
jmp l00111 ; 00144 0010111
l00145 sam l01270 ; 00145 0075270
jmp l00150 ; 00146 0010150
jmp l00103 ; 00147 0010103
l00150 sam l01271 ; 00150 0075271
jmp *l00123 ; 00151 0110123
jmp l00460 ; 00152 0010460
;------------------------
l00153 hlt ; 00153 0000000
dsn ; 00154 0102010
jmp *l00153 ; 00155 0110153
ssf ; 00156 0002200
jmp *l00153 ; 00157 0110153
scf ; 00160 0001071
lda ; 00161 0100041
and l01272 ; 00162 0045272
dac l00164 ; 00163 0020164
l00164 nop ; 00164 0100000
law l00176 ; 00165 0004176
dla ; 00166 0001003
don ; 00167 0003100
dsn ; 00170 0102010
jmp .-1 ; 00171 0010170
law l00202 ; 00172 0004202
dla ; 00173 0001003
don ; 00174 0003100
jmp *l00153 ; 00175 0110153
;------------------------
l00176 data 006006 ; 00176 0006006
dlya 01600 ; 00177 0021600
djms l00777 ; 00200 0050777
djmp l04000 ; 00201 0064000
l00202 dlya 01760 ; 00202 0021760
djms l00777 ; 00203 0050777
djmp l01444 ; 00204 0061444
;------------------------
l00205 hlt ; 00205 0000000
lac l01312 ; 00206 0061312
dac l01245 ; 00207 0021245
cla ; 00210 0100001
jms l00404 ; 00211 0034404
jmp *l00205 ; 00212 0110205
;------------------------
l00213 hlt ; 00213 0000000
cla ; 00214 0100001
dac l01444 ; 00215 0021444
jmp *l00213 ; 00216 0110213
;------------------------
l00217 hlt ; 00217 0000000
lac l01313 ; 00220 0061313
dac l01246 ; 00221 0021246
law 00656 ; 00222 0004656
dac l00010 ; 00223 0020010
lwc 00120 ; 00224 0104120
dac l01247 ; 00225 0021247
l00226 cla ; 00226 0100001
dac *l00010 ; 00227 0120010
isz l01247 ; 00230 0031247
jmp l00226 ; 00231 0010226
jmp *l00217 ; 00232 0110217
;------------------------
l00233 hlt ; 00233 0000000
lwc 00066 ; 00234 0104066
dac l01247 ; 00235 0021247
law 00534 ; 00236 0004534
dac l00010 ; 00237 0020010
lac l01244 ; 00240 0061244
l00241 sam *l00010 ; 00241 0174010
jmp l00244 ; 00242 0010244
jmp l00247 ; 00243 0010247
l00244 isz l01247 ; 00244 0031247
jmp l00241 ; 00245 0010241
jmp *l00233 ; 00246 0110233
l00247 law 00066 ; 00247 0004066
add l00010 ; 00250 0064010
ior l01275 ; 00251 0051275
dac l01250 ; 00252 0021250
and l01276 ; 00253 0045276
dac l01251 ; 00254 0021251
add l01277 ; 00255 0065277
dac l01252 ; 00256 0021252
lac *l01252 ; 00257 0161252
dac l01253 ; 00260 0021253
lac *l01251 ; 00261 0161251
asz ; 00262 0002001
isz l00233 ; 00263 0030233
lac l01250 ; 00264 0061250
jmp *l00233 ; 00265 0110233
;------------------------
l00266 hlt ; 00266 0000000
lwc 00032 ; 00267 0104032
dac l01247 ; 00270 0021247
law 00570 ; 00271 0004570
dac l00010 ; 00272 0020010
lac l01244 ; 00273 0061244
l00274 sam *l00010 ; 00274 0174010
jmp l00277 ; 00275 0010277
jmp l00302 ; 00276 0010302
l00277 isz l01247 ; 00277 0031247
jmp l00274 ; 00300 0010274
jmp *l00266 ; 00301 0110266
l00302 law 00066 ; 00302 0004066
add l00010 ; 00303 0064010
dac l01254 ; 00304 0021254
add l01277 ; 00305 0065277
dac l01255 ; 00306 0021255
isz l00266 ; 00307 0030266
jmp *l00266 ; 00310 0110266
l00311 sam l00571 ; 00311 0074571
jms l00233 ; 00312 0034233
jmp *l00311 ; 00313 0110311
lac l01253 ; 00314 0061253
iac ; 00315 0100004
sam l01300 ; 00316 0075300
jmp l00321 ; 00317 0010321
jmp *l00311 ; 00320 0110311
l00321 law 00370 ; 00321 0004370
dac l01256 ; 00322 0021256
cla ; 00323 0100001
dac l01257 ; 00324 0021257
lac l01254 ; 00325 0061254
ior l01275 ; 00326 0051275
dac l01260 ; 00327 0021260
lac l01251 ; 00330 0061251
ior l01275 ; 00331 0051275
dac l01261 ; 00332 0021261
l00333 lac l01261 ; 00333 0061261
sam l01260 ; 00334 0075260
jmp l00337 ; 00335 0010337
jmp *l00311 ; 00336 0110311
l00337 and l01301 ; 00337 0045301
sam l01275 ; 00340 0075275
jmp l00354 ; 00341 0010354
lac l01257 ; 00342 0061257
dac *l01256 ; 00343 0121256
isz l01256 ; 00344 0031256
l00345 lac l01261 ; 00345 0061261
and l01276 ; 00346 0045276
dac l01257 ; 00347 0021257
l00350 lac *l01257 ; 00350 0161257
isz l01257 ; 00351 0031257
dac l01261 ; 00352 0021261
jmp l00333 ; 00353 0010333
l00354 sam l01302 ; 00354 0075302
jmp l00357 ; 00355 0010357
jmp l00345 ; 00356 0010345
l00357 lwc 00001 ; 00357 0104001
add l01256 ; 00360 0065256
dac l01256 ; 00361 0021256
lac *l01256 ; 00362 0161256
dac l01257 ; 00363 0021257
asz ; 00364 0002001
jmp l00350 ; 00365 0010350
isz l00311 ; 00366 0030311
jmp *l00311 ; 00367 0110311
hlt ; 00370 0000000
;
org 00404 ; addr code
l00404 jmp *l00311 ; 00404 0110311
dac *l01245 ; 00405 0121245
lac l01245 ; 00406 0061245
sam l01303 ; 00407 0075303
jmp l00412 ; 00410 0010412
jmp l00100 ; 00411 0010100
l00412 isz l01245 ; 00412 0031245
dac l00010 ; 00413 0020010
cla ; 00414 0100001
dac *l00010 ; 00415 0120010
dac *l00010 ; 00416 0120010
jmp *l00404 ; 00417 0110404
;------------------------
l00420 jmp l00112 ; 00420 0010112
lac l01254 ; 00421 0061254
sub l01304 ; 00422 0071304
ior l01275 ; 00423 0051275
dac l01444 ; 00424 0021444
lac l01314 ; 00425 0061314
dac l01262 ; 00426 0021262
cla ; 00427 0100001
dac *l01262 ; 00430 0121262
dac l01263 ; 00431 0021263
jmp *l00420 ; 00432 0110420
;------------------------
l00433 cla ; 00433 0100001
lac l01251 ; 00434 0061251
ior l01275 ; 00435 0051275
dac *l01262 ; 00436 0121262
lac l01262 ; 00437 0061262
isz l01262 ; 00440 0031262
sam l01315 ; 00441 0075315
jmp l00444 ; 00442 0010444
jmp l00111 ; 00443 0010111
l00444 dac l00010 ; 00444 0020010
cla ; 00445 0100001
dac *l00010 ; 00446 0120010
dac *l00010 ; 00447 0120010
lac l01253 ; 00450 0061253
iac ; 00451 0100004
sub l01263 ; 00452 0071263
asp ; 00453 0002002
cla ; 00454 0100001
add l01263 ; 00455 0065263
dac l01263 ; 00456 0021263
jmp *l00433 ; 00457 0110433
;------------------------
l00460 lac l01262 ; 00460 0061262
sam l01314 ; 00461 0075314
jmp l00477 ; 00462 0010477
lac l01444 ; 00463 0061444
asn ; 00464 0102001
jmp l00124 ; 00465 0010124
and l01276 ; 00466 0045276
add l01304 ; 00467 0065304
dac l01252 ; 00470 0021252
add l01277 ; 00471 0065277
dac l01247 ; 00472 0021247
cla ; 00473 0100001
dac *l01252 ; 00474 0121252
dac *l01247 ; 00475 0121247
jmp l00111 ; 00476 0010111
l00477 sub l01314 ; 00477 0071314
cia ; 00500 0100006
dac l01247 ; 00501 0021247
law 01445 ; 00502 0005445
dac l00010 ; 00503 0020010
lac l01246 ; 00504 0061246
sub l01307 ; 00505 0071307
dac l00011 ; 00506 0020011
lac l01247 ; 00507 0061247
cia ; 00510 0100006
iac ; 00511 0100004
add l01246 ; 00512 0065246
dac l01252 ; 00513 0021252
sub l01316 ; 00514 0071316
asm ; 00515 0102002
jmp l00111 ; 00516 0010111
lac l01246 ; 00517 0061246
ior l01302 ; 00520 0051302
dac *l01254 ; 00521 0121254
lac l01252 ; 00522 0061252
dac l01246 ; 00523 0021246
lac l01263 ; 00524 0061263
dac *l01255 ; 00525 0121255
l00526 lac *l00010 ; 00526 0160010
dac *l00011 ; 00527 0120011
isz l01247 ; 00530 0031247
jmp l00526 ; 00531 0010526
lac l01311 ; 00532 0061311
dac *l00011 ; 00533 0120011
jmp l00111 ; 00534 0010111
;------------------------
data 000015 ; 00535 0000015
data 000040 ; 00536 0000040
data 000141 ; 00537 0000141
data 000142 ; 00540 0000142
data 000143 ; 00541 0000143
data 000144 ; 00542 0000144
data 000145 ; 00543 0000145
data 000146 ; 00544 0000146
data 000147 ; 00545 0000147
data 000150 ; 00546 0000150
data 000151 ; 00547 0000151
data 000152 ; 00550 0000152
data 000153 ; 00551 0000153
data 000154 ; 00552 0000154
data 000155 ; 00553 0000155
data 000156 ; 00554 0000156
data 000157 ; 00555 0000157
data 000160 ; 00556 0000160
data 000161 ; 00557 0000161
data 000162 ; 00560 0000162
data 000163 ; 00561 0000163
data 000164 ; 00562 0000164
data 000165 ; 00563 0000165
data 000166 ; 00564 0000166
data 000167 ; 00565 0000167
data 000170 ; 00566 0000170
data 000171 ; 00567 0000171
data 000172 ; 00570 0000172
l00571 data 000101 ; 00571 0000101
data 000102 ; 00572 0000102
data 000103 ; 00573 0000103
data 000104 ; 00574 0000104
data 000105 ; 00575 0000105
data 000106 ; 00576 0000106
data 000107 ; 00577 0000107
data 000110 ; 00600 0000110
data 000111 ; 00601 0000111
data 000112 ; 00602 0000112
data 000113 ; 00603 0000113
data 000114 ; 00604 0000114
data 000115 ; 00605 0000115
data 000116 ; 00606 0000116
data 000117 ; 00607 0000117
data 000120 ; 00610 0000120
data 000121 ; 00611 0000121
data 000122 ; 00612 0000122
data 000123 ; 00613 0000123
data 000124 ; 00614 0000124
data 000125 ; 00615 0000125
data 000126 ; 00616 0000126
data 000127 ; 00617 0000127
data 000130 ; 00620 0000130
data 000131 ; 00621 0000131
data 000132 ; 00622 0000132
data 060777 ; 00623 0060777
data 061017 ; 00624 0061017
data 061024 ; 00625 0061024
data 061032 ; 00626 0061032
data 061041 ; 00627 0061041
data 061046 ; 00630 0061046
data 061053 ; 00631 0061053
data 061061 ; 00632 0061061
data 061066 ; 00633 0061066
data 061074 ; 00634 0061074
data 061102 ; 00635 0061102
data 061107 ; 00636 0061107
data 061113 ; 00637 0061113
data 061121 ; 00640 0061121
data 061125 ; 00641 0061125
data 061133 ; 00642 0061133
data 061141 ; 00643 0061141
data 061147 ; 00644 0061147
data 061154 ; 00645 0061154
data 061163 ; 00646 0061163
data 061171 ; 00647 0061171
data 061176 ; 00650 0061176
data 061203 ; 00651 0061203
data 061211 ; 00652 0061211
data 061216 ; 00653 0061216
data 061225 ; 00654 0061225
data 061232 ; 00655 0061232
data 061237 ; 00656 0061237
;
org 00777 ; addr code
l00777 dlxa 00000 ; 00777 0010000
ddym ; 01000 0004100
ddym ; 01001 0004100
dnop ; 01002 0004000
dnop ; 01003 0004000
dnop ; 01004 0004000
dnop ; 01005 0004000
dnop ; 01006 0004000
dnop ; 01007 0004000
dnop ; 01010 0004000
dnop ; 01011 0004000
dnop ; 01012 0004000
dnop ; 01013 0004000
dnop ; 01014 0004000
dnop ; 01015 0004000
drjm ; 01016 0004040
data 005040 ; 01017 0005040
data 030202 ; 01020 0030202
data 150320 ; 01021 0150320
data 101360 ; 01022 0101360
data 170171 ; 01023 0170171
data 030302 ; 01024 0030302
data 141322 ; 01025 0141322
data 153306 ; 01026 0153306
data 143203 ; 01027 0143203
data 170360 ; 01030 0170360
data 074571 ; 01031 0074571
data 030302 ; 01032 0030302
data 141302 ; 01033 0141302
data 150325 ; 01034 0150325
data 167010 ; 01035 0167010
data 154316 ; 01036 0154316
data 172760 ; 01037 0172760
data 074571 ; 01040 0074571
data 030231 ; 01041 0030231
data 104365 ; 01042 0104365
data 170702 ; 01043 0170702
data 141321 ; 01044 0141321
data 152571 ; 01045 0152571
data 030302 ; 01046 0030302
data 141302 ; 01047 0141302
data 150326 ; 01050 0150326
data 143366 ; 01051 0143366
data 170171 ; 01052 0170171
data 030320 ; 01053 0030320
data 150010 ; 01054 0150010
data 141302 ; 01055 0141302
data 141320 ; 01056 0141320
data 150257 ; 01057 0150257
data 174171 ; 01060 0174171
data 030302 ; 01061 0030302
data 141302 ; 01062 0141302
data 150320 ; 01063 0150320
data 127770 ; 01064 0127770
data 074571 ; 01065 0074571
data 030222 ; 01066 0030222
data 150356 ; 01067 0150356
data 170352 ; 01070 0170352
data 141312 ; 01071 0141312
data 150316 ; 01072 0150316
data 074571 ; 01073 0074571
data 030302 ; 01074 0030302
data 141302 ; 01075 0141302
data 103720 ; 01076 0103720
data 150001 ; 01077 0150001
data 141302 ; 01100 0141302
data 141171 ; 01101 0141171
data 030210 ; 01102 0030210
data 150250 ; 01103 0150250
data 141302 ; 01104 0141302
data 141250 ; 01105 0141250
data 150171 ; 01106 0150171
data 030202 ; 01107 0030202
data 147320 ; 01110 0147320
data 145302 ; 01111 0145302
data 141171 ; 01112 0141171
data 030302 ; 01113 0030302
data 141302 ; 01114 0141302
data 000602 ; 01115 0000602
data 151322 ; 01116 0151322
data 000773 ; 01117 0000773
data 074571 ; 01120 0074571
data 030320 ; 01121 0030320
data 150010 ; 01122 0150010
data 141302 ; 01123 0141302
data 141171 ; 01124 0141171
data 030302 ; 01125 0030302
data 141302 ; 01126 0141302
data 147316 ; 01127 0147316
data 145312 ; 01130 0145312
data 143306 ; 01131 0143306
data 143171 ; 01132 0143171
data 030302 ; 01133 0030302
data 141302 ; 01134 0141302
data 147326 ; 01135 0147326
data 147302 ; 01136 0147302
data 141302 ; 01137 0141302
data 074571 ; 01140 0074571
data 030210 ; 01141 0030210
data 150312 ; 01142 0150312
data 141352 ; 01143 0141352
data 170356 ; 01144 0170356
data 143316 ; 01145 0143316
data 074571 ; 01146 0074571
data 030302 ; 01147 0030302
data 141302 ; 01150 0141302
data 150325 ; 01151 0150325
data 167370 ; 01152 0167370
data 074571 ; 01153 0074571
data 030223 ; 01154 0030223
data 157661 ; 01155 0157661
data 145302 ; 01156 0145302
data 170765 ; 01157 0170765
data 143306 ; 01160 0143306
data 152711 ; 01161 0152711
data 074571 ; 01162 0074571
data 030302 ; 01163 0030302
data 141302 ; 01164 0141302
data 150325 ; 01165 0150325
data 167010 ; 01166 0167010
data 154317 ; 01167 0154317
data 074571 ; 01170 0074571
data 030201 ; 01171 0030201
data 152721 ; 01172 0152721
data 165360 ; 01173 0165360
data 165321 ; 01174 0165321
data 152571 ; 01175 0152571
data 030220 ; 01176 0030220
data 141302 ; 01177 0141302
data 141010 ; 01200 0141010
data 150320 ; 01201 0150320
data 074571 ; 01202 0074571
data 030203 ; 01203 0030203
data 101706 ; 01204 0101706
data 143316 ; 01205 0143316
data 150312 ; 01206 0150312
data 141302 ; 01207 0141302
data 074571 ; 01210 0074571
data 030203 ; 01211 0030203
data 101706 ; 01212 0101706
data 147316 ; 01213 0147316
data 145312 ; 01214 0145312
data 141171 ; 01215 0141171
data 030302 ; 01216 0030302
data 141302 ; 01217 0141302
data 000712 ; 01220 0000712
data 145316 ; 01221 0145316
data 147302 ; 01222 0147302
data 141302 ; 01223 0141302
data 074571 ; 01224 0074571
data 030312 ; 01225 0030312
data 151312 ; 01226 0151312
data 004316 ; 01227 0004316
data 153316 ; 01230 0153316
data 074571 ; 01231 0074571
data 030220 ; 01232 0030220
data 141312 ; 01233 0141312
data 145010 ; 01234 0145010
data 147316 ; 01235 0147316
data 074571 ; 01236 0074571
data 030320 ; 01237 0030320
data 150010 ; 01240 0150010
data 145322 ; 01241 0145322
data 145360 ; 01242 0145360
data 170171 ; 01243 0170171
l01244 data 001646 ; 01244 0001646
l01245 data 000000 ; 01245 0000000
l01246 data 000000 ; 01246 0000000
l01247 data 000000 ; 01247 0000000
l01250 data 000000 ; 01250 0000000
l01251 data 000000 ; 01251 0000000
l01252 data 000000 ; 01252 0000000
l01253 data 000000 ; 01253 0000000
l01254 data 000000 ; 01254 0000000
l01255 data 000000 ; 01255 0000000
l01256 data 000000 ; 01256 0000000
l01257 data 000000 ; 01257 0000000
l01260 data 000000 ; 01260 0000000
l01261 data 000000 ; 01261 0000000
l01262 data 000000 ; 01262 0000000
l01263 data 000000 ; 01263 0000000
;
org 01265 ; addr code
l01265 data 000177 ; 01265 0000177
l01266 data 000014 ; 01266 0000014
l01267 data 000006 ; 01267 0000006
l01270 data 000004 ; 01270 0000004
l01271 data 000056 ; 01271 0000056
l01272 data 100000 ; 01272 0100000
data 000077 ; 01273 0000077
data 000100 ; 01274 0000100
l01275 data 050000 ; 01275 0050000
l01276 data 007777 ; 01276 0007777
l01277 data 000066 ; 01277 0000066
l01300 data 000010 ; 01300 0000010
l01301 data 070000 ; 01301 0070000
l01302 data 060000 ; 01302 0060000
l01303 data 007770 ; 01303 0007770
l01304 data 000032 ; 01304 0000032
data 000102 ; 01305 0000102
data 000300 ; 01306 0000300
l01307 data 000001 ; 01307 0000001
data 000070 ; 01310 0000070
l01311 data 004040 ; 01311 0004040
l01312 data 003777 ; 01312 0003777
l01313 data 001646 ; 01313 0001646
l01314 data 001446 ; 01314 0001446
l01315 data 001644 ; 01315 0001644
l01316 data 003770 ; 01316 0003770
;
org 01444 ; addr code
l01444 dhlt ; 01444 0000000
data 051020 ; 01445 0051020
;
org 01646 ; addr code
data 005670 ; 01646 0005670
data 001003 ; 01647 0001003
data 003100 ; 01650 0003100
data 104003 ; 01651 0104003
data 021264 ; 01652 0021264
data 031264 ; 01653 0031264
data 011653 ; 01654 0011653
data 102010 ; 01655 0102010
data 010100 ; 01656 0010100
data 061677 ; 01657 0061677
data 020176 ; 01660 0020176
data 061700 ; 01661 0061700
data 020177 ; 01662 0020177
data 061701 ; 01663 0061701
data 020202 ; 01664 0020202
data 061702 ; 01665 0061702
data 020777 ; 01666 0020777
data 010100 ; 01667 0010100
data 006005 ; 01670 0006005
data 012000 ; 01671 0012000
data 025000 ; 01672 0025000
data 047000 ; 01673 0047000
data 001000 ; 01674 0001000
data 000000 ; 01675 0000000
data 000000 ; 01676 0000000
data 006005 ; 01677 0006005
data 025000 ; 01700 0025000
data 026000 ; 01701 0026000
data 011400 ; 01702 0011400
;
org 04000 ; addr code
l04000 data 001646 ; 04000 0001646
data 001646 ; 04001 0001646
dhlt ; 04002 0000000
;
org 37400 ; addr code
data 001052 ; 37400 0001052
data 113402 ; 37401 0113402
data 001646 ; 37402 0001646
;
org 37714 ; addr code
data 013400 ; 37714 0013400
end ;

624
idasm/tests/unlabeled.asm Executable file
View File

@@ -0,0 +1,624 @@
;
ORG 00010 ; addr code
L00010 DATA 000000 ; 00010 0000000
L00011 DATA 000000 ; 00011 0000000
;
ORG 00100 ; addr code
L00100 KCF ; 00100 0001022
JMS L00217 ; 00101 0034217
JMS L00205 ; 00102 0034205
L00103 JMS L00213 ; 00103 0034213
L00104 JMS L00123 ; 00104 0034123
JMS L00233 ; 00105 0034233
JMP L00104 ; 00106 0010104
JMS L00404 ; 00107 0034404
JMP L00104 ; 00110 0010104
L00111 JMS L00213 ; 00111 0034213
L00112 JMS L00123 ; 00112 0034123
JMS L00266 ; 00113 0034266
JMP L00112 ; 00114 0010112
JMS L00420 ; 00115 0034420
L00116 JMS L00123 ; 00116 0034123
JMS L00311 ; 00117 0034311
JMP L00116 ; 00120 0010116
JMS L00433 ; 00121 0034433
JMP L00116 ; 00122 0010116
L00123 HLT ; 00123 0000000
L00124 JMS L00153 ; 00124 0034153
KSF ; 00125 0002020
JMP L00124 ; 00126 0010124
CLA ; 00127 0100001
KRC ; 00130 0001023
AND L01265 ; 00131 0045265
DAC L01244 ; 00132 0021244
SAM L01266 ; 00133 0075266
JMP L00136 ; 00134 0010136
JMP L00100 ; 00135 0010100
L00136 SAM L01265 ; 00136 0075265
JMP L00142 ; 00137 0010142
JMS L00205 ; 00140 0034205
JMP L00124 ; 00141 0010124
L00142 SAM L01267 ; 00142 0075267
JMP L00145 ; 00143 0010145
JMP L00111 ; 00144 0010111
L00145 SAM L01270 ; 00145 0075270
JMP L00150 ; 00146 0010150
JMP L00103 ; 00147 0010103
L00150 SAM L01271 ; 00150 0075271
JMP *L00123 ; 00151 0110123
JMP L00460 ; 00152 0010460
L00153 HLT ; 00153 0000000
DSN ; 00154 0102010
JMP *L00153 ; 00155 0110153
SSF ; 00156 0002200
JMP *L00153 ; 00157 0110153
SCF ; 00160 0001071
LDA ; 00161 0100041
AND L01272 ; 00162 0045272
DAC L00164 ; 00163 0020164
L00164 NOP ; 00164 0100000
LAW 00176 ; 00165 0004176
DLA ; 00166 0001003
DON ; 00167 0003100
L00170 DSN ; 00170 0102010
JMP L00170 ; 00171 0010170
LAW L00202 ; 00172 0004202
DLA ; 00173 0001003
DON ; 00174 0003100
JMP *L00153 ; 00175 0110153
DATA 006006 ; 00176 0006006
DLYA 01600 ; 00177 0021600
DJMS L00777 ; 00200 0050777
DJMP L04000 ; 00201 0064000
L00202 DLYA 01760 ; 00202 0021760
DJMS L00777 ; 00203 0050777
DJMP L01444 ; 00204 0061444
L00205 HLT ; 00205 0000000
LAC L01312 ; 00206 0061312
DAC L01245 ; 00207 0021245
CLA ; 00210 0100001
JMS L00404 ; 00211 0034404
JMP *L00205 ; 00212 0110205
L00213 HLT ; 00213 0000000
CLA ; 00214 0100001
DAC L01444 ; 00215 0021444
JMP *L00213 ; 00216 0110213
L00217 HLT ; 00217 0000000
LAC L01313 ; 00220 0061313
DAC L01246 ; 00221 0021246
LAW 00656 ; 00222 0004656
DAC L00010 ; 00223 0020010
LWC 00120 ; 00224 0104120
DAC L01247 ; 00225 0021247
L00226 CLA ; 00226 0100001
DAC *L00010 ; 00227 0120010
ISZ L01247 ; 00230 0031247
JMP L00226 ; 00231 0010226
JMP *L00217 ; 00232 0110217
L00233 HLT ; 00233 0000000
LWC 00066 ; 00234 0104066
DAC L01247 ; 00235 0021247
LAW 00534 ; 00236 0004534
DAC L00010 ; 00237 0020010
LAC L01244 ; 00240 0061244
L00241 SAM *L00010 ; 00241 0174010
JMP L00244 ; 00242 0010244
JMP L00247 ; 00243 0010247
L00244 ISZ L01247 ; 00244 0031247
JMP L00241 ; 00245 0010241
JMP *L00233 ; 00246 0110233
L00247 LAW 00066 ; 00247 0004066
ADD L00010 ; 00250 0064010
IOR L01275 ; 00251 0051275
DAC L01250 ; 00252 0021250
AND L01276 ; 00253 0045276
DAC L01251 ; 00254 0021251
ADD L01277 ; 00255 0065277
DAC L01252 ; 00256 0021252
LAC *L01252 ; 00257 0161252
DAC L01253 ; 00260 0021253
LAC *L01251 ; 00261 0161251
ASZ ; 00262 0002001
ISZ L00233 ; 00263 0030233
LAC L01250 ; 00264 0061250
JMP *L00233 ; 00265 0110233
L00266 HLT ; 00266 0000000
LWC 00032 ; 00267 0104032
DAC L01247 ; 00270 0021247
LAW 00570 ; 00271 0004570
DAC L00010 ; 00272 0020010
LAC L01244 ; 00273 0061244
L00274 SAM *L00010 ; 00274 0174010
JMP L00277 ; 00275 0010277
JMP L00302 ; 00276 0010302
L00277 ISZ L01247 ; 00277 0031247
JMP L00274 ; 00300 0010274
JMP *L00266 ; 00301 0110266
L00302 LAW 00066 ; 00302 0004066
ADD L00010 ; 00303 0064010
DAC L01254 ; 00304 0021254
ADD L01277 ; 00305 0065277
DAC L01255 ; 00306 0021255
ISZ L00266 ; 00307 0030266
JMP *L00266 ; 00310 0110266
L00311 SAM L00571 ; 00311 0074571
JMS L00233 ; 00312 0034233
JMP *L00311 ; 00313 0110311
LAC L01253 ; 00314 0061253
IAC ; 00315 0100004
SAM L01300 ; 00316 0075300
JMP L00321 ; 00317 0010321
JMP *L00311 ; 00320 0110311
L00321 LAW 00370 ; 00321 0004370
DAC L01256 ; 00322 0021256
CLA ; 00323 0100001
DAC L01257 ; 00324 0021257
LAC L01254 ; 00325 0061254
IOR L01275 ; 00326 0051275
DAC L01260 ; 00327 0021260
LAC L01251 ; 00330 0061251
IOR L01275 ; 00331 0051275
DAC L01261 ; 00332 0021261
L00333 LAC L01261 ; 00333 0061261
SAM L01260 ; 00334 0075260
JMP L00337 ; 00335 0010337
JMP *L00311 ; 00336 0110311
L00337 AND L01301 ; 00337 0045301
SAM L01275 ; 00340 0075275
JMP L00354 ; 00341 0010354
LAC L01257 ; 00342 0061257
DAC *L01256 ; 00343 0121256
ISZ L01256 ; 00344 0031256
L00345 LAC L01261 ; 00345 0061261
AND L01276 ; 00346 0045276
DAC L01257 ; 00347 0021257
L00350 LAC *L01257 ; 00350 0161257
ISZ L01257 ; 00351 0031257
DAC L01261 ; 00352 0021261
JMP L00333 ; 00353 0010333
L00354 SAM L01302 ; 00354 0075302
JMP L00357 ; 00355 0010357
JMP L00345 ; 00356 0010345
L00357 LWC 00001 ; 00357 0104001
ADD L01256 ; 00360 0065256
DAC L01256 ; 00361 0021256
LAC *L01256 ; 00362 0161256
DAC L01257 ; 00363 0021257
ASZ ; 00364 0002001
JMP L00350 ; 00365 0010350
ISZ L00311 ; 00366 0030311
JMP *L00311 ; 00367 0110311
HLT ; 00370 0000000
;
ORG 00404 ; addr code
L00404 JMP *L00311 ; 00404 0110311
DAC *L01245 ; 00405 0121245
LAC L01245 ; 00406 0061245
SAM L01303 ; 00407 0075303
JMP L00412 ; 00410 0010412
JMP L00100 ; 00411 0010100
L00412 ISZ L01245 ; 00412 0031245
DAC L00010 ; 00413 0020010
CLA ; 00414 0100001
DAC *L00010 ; 00415 0120010
DAC *L00010 ; 00416 0120010
JMP *L00404 ; 00417 0110404
L00420 JMP L00112 ; 00420 0010112
LAC L01254 ; 00421 0061254
SUB L01304 ; 00422 0071304
IOR L01275 ; 00423 0051275
DAC L01444 ; 00424 0021444
LAC L01314 ; 00425 0061314
DAC L01262 ; 00426 0021262
CLA ; 00427 0100001
DAC *L01262 ; 00430 0121262
DAC L01263 ; 00431 0021263
JMP *L00420 ; 00432 0110420
L00433 CLA ; 00433 0100001
LAC L01251 ; 00434 0061251
IOR L01275 ; 00435 0051275
DAC *L01262 ; 00436 0121262
LAC L01262 ; 00437 0061262
ISZ L01262 ; 00440 0031262
SAM L01315 ; 00441 0075315
JMP L00444 ; 00442 0010444
JMP L00111 ; 00443 0010111
L00444 DAC L00010 ; 00444 0020010
CLA ; 00445 0100001
DAC *L00010 ; 00446 0120010
DAC *L00010 ; 00447 0120010
LAC L01253 ; 00450 0061253
IAC ; 00451 0100004
SUB L01263 ; 00452 0071263
ASP ; 00453 0002002
CLA ; 00454 0100001
ADD L01263 ; 00455 0065263
DAC L01263 ; 00456 0021263
JMP *L00433 ; 00457 0110433
L00460 LAC L01262 ; 00460 0061262
SAM L01314 ; 00461 0075314
JMP L00477 ; 00462 0010477
LAC L01444 ; 00463 0061444
ASN ; 00464 0102001
JMP L00124 ; 00465 0010124
AND L01276 ; 00466 0045276
ADD L01304 ; 00467 0065304
DAC L01252 ; 00470 0021252
ADD L01277 ; 00471 0065277
DAC L01247 ; 00472 0021247
CLA ; 00473 0100001
DAC *L01252 ; 00474 0121252
DAC *L01247 ; 00475 0121247
JMP L00111 ; 00476 0010111
L00477 SUB L01314 ; 00477 0071314
CIA ; 00500 0100006
DAC L01247 ; 00501 0021247
LAW 01445 ; 00502 0005445
DAC L00010 ; 00503 0020010
LAC L01246 ; 00504 0061246
SUB L01307 ; 00505 0071307
DAC L00011 ; 00506 0020011
LAC L01247 ; 00507 0061247
CIA ; 00510 0100006
IAC ; 00511 0100004
ADD L01246 ; 00512 0065246
DAC L01252 ; 00513 0021252
SUB L01316 ; 00514 0071316
ASM ; 00515 0102002
JMP L00111 ; 00516 0010111
LAC L01246 ; 00517 0061246
IOR L01302 ; 00520 0051302
DAC *L01254 ; 00521 0121254
LAC L01252 ; 00522 0061252
DAC L01246 ; 00523 0021246
LAC L01263 ; 00524 0061263
DAC *L01255 ; 00525 0121255
L00526 LAC *L00010 ; 00526 0160010
DAC *L00011 ; 00527 0120011
ISZ L01247 ; 00530 0031247
JMP L00526 ; 00531 0010526
LAC L01311 ; 00532 0061311
DAC *L00011 ; 00533 0120011
JMP L00111 ; 00534 0010111
DATA 000015 ; 00535 0000015
DATA 000040 ; 00536 0000040
DATA 000141 ; 00537 0000141
DATA 000142 ; 00540 0000142
DATA 000143 ; 00541 0000143
DATA 000144 ; 00542 0000144
DATA 000145 ; 00543 0000145
DATA 000146 ; 00544 0000146
DATA 000147 ; 00545 0000147
DATA 000150 ; 00546 0000150
DATA 000151 ; 00547 0000151
DATA 000152 ; 00550 0000152
DATA 000153 ; 00551 0000153
DATA 000154 ; 00552 0000154
DATA 000155 ; 00553 0000155
DATA 000156 ; 00554 0000156
DATA 000157 ; 00555 0000157
DATA 000160 ; 00556 0000160
DATA 000161 ; 00557 0000161
DATA 000162 ; 00560 0000162
DATA 000163 ; 00561 0000163
DATA 000164 ; 00562 0000164
DATA 000165 ; 00563 0000165
DATA 000166 ; 00564 0000166
DATA 000167 ; 00565 0000167
DATA 000170 ; 00566 0000170
DATA 000171 ; 00567 0000171
DATA 000172 ; 00570 0000172
L00571 DATA 000101 ; 00571 0000101
DATA 000102 ; 00572 0000102
DATA 000103 ; 00573 0000103
DATA 000104 ; 00574 0000104
DATA 000105 ; 00575 0000105
DATA 000106 ; 00576 0000106
DATA 000107 ; 00577 0000107
DATA 000110 ; 00600 0000110
DATA 000111 ; 00601 0000111
DATA 000112 ; 00602 0000112
DATA 000113 ; 00603 0000113
DATA 000114 ; 00604 0000114
DATA 000115 ; 00605 0000115
DATA 000116 ; 00606 0000116
DATA 000117 ; 00607 0000117
DATA 000120 ; 00610 0000120
DATA 000121 ; 00611 0000121
DATA 000122 ; 00612 0000122
DATA 000123 ; 00613 0000123
DATA 000124 ; 00614 0000124
DATA 000125 ; 00615 0000125
DATA 000126 ; 00616 0000126
DATA 000127 ; 00617 0000127
DATA 000130 ; 00620 0000130
DATA 000131 ; 00621 0000131
DATA 000132 ; 00622 0000132
DATA 060777 ; 00623 0060777
DATA 061017 ; 00624 0061017
DATA 061024 ; 00625 0061024
DATA 061032 ; 00626 0061032
DATA 061041 ; 00627 0061041
DATA 061046 ; 00630 0061046
DATA 061053 ; 00631 0061053
DATA 061061 ; 00632 0061061
DATA 061066 ; 00633 0061066
DATA 061074 ; 00634 0061074
DATA 061102 ; 00635 0061102
DATA 061107 ; 00636 0061107
DATA 061113 ; 00637 0061113
DATA 061121 ; 00640 0061121
DATA 061125 ; 00641 0061125
DATA 061133 ; 00642 0061133
DATA 061141 ; 00643 0061141
DATA 061147 ; 00644 0061147
DATA 061154 ; 00645 0061154
DATA 061163 ; 00646 0061163
DATA 061171 ; 00647 0061171
DATA 061176 ; 00650 0061176
DATA 061203 ; 00651 0061203
DATA 061211 ; 00652 0061211
DATA 061216 ; 00653 0061216
DATA 061225 ; 00654 0061225
DATA 061232 ; 00655 0061232
DATA 061237 ; 00656 0061237
;
ORG 00777 ; addr code
L00777 DLXA 00000 ; 00777 0010000
DDYM ; 01000 0004100
DDYM ; 01001 0004100
DNOP ; 01002 0004000
DNOP ; 01003 0004000
DNOP ; 01004 0004000
DNOP ; 01005 0004000
DNOP ; 01006 0004000
DNOP ; 01007 0004000
DNOP ; 01010 0004000
DNOP ; 01011 0004000
DNOP ; 01012 0004000
DNOP ; 01013 0004000
DNOP ; 01014 0004000
DNOP ; 01015 0004000
DRJM ; 01016 0004040
DATA 005040 ; 01017 0005040
DATA 030202 ; 01020 0030202
DATA 150320 ; 01021 0150320
DATA 101360 ; 01022 0101360
DATA 170171 ; 01023 0170171
DATA 030302 ; 01024 0030302
DATA 141322 ; 01025 0141322
DATA 153306 ; 01026 0153306
DATA 143203 ; 01027 0143203
DATA 170360 ; 01030 0170360
DATA 074571 ; 01031 0074571
DATA 030302 ; 01032 0030302
DATA 141302 ; 01033 0141302
DATA 150325 ; 01034 0150325
DATA 167010 ; 01035 0167010
DATA 154316 ; 01036 0154316
DATA 172760 ; 01037 0172760
DATA 074571 ; 01040 0074571
DATA 030231 ; 01041 0030231
DATA 104365 ; 01042 0104365
DATA 170702 ; 01043 0170702
DATA 141321 ; 01044 0141321
DATA 152571 ; 01045 0152571
DATA 030302 ; 01046 0030302
DATA 141302 ; 01047 0141302
DATA 150326 ; 01050 0150326
DATA 143366 ; 01051 0143366
DATA 170171 ; 01052 0170171
DATA 030320 ; 01053 0030320
DATA 150010 ; 01054 0150010
DATA 141302 ; 01055 0141302
DATA 141320 ; 01056 0141320
DATA 150257 ; 01057 0150257
DATA 174171 ; 01060 0174171
DATA 030302 ; 01061 0030302
DATA 141302 ; 01062 0141302
DATA 150320 ; 01063 0150320
DATA 127770 ; 01064 0127770
DATA 074571 ; 01065 0074571
DATA 030222 ; 01066 0030222
DATA 150356 ; 01067 0150356
DATA 170352 ; 01070 0170352
DATA 141312 ; 01071 0141312
DATA 150316 ; 01072 0150316
DATA 074571 ; 01073 0074571
DATA 030302 ; 01074 0030302
DATA 141302 ; 01075 0141302
DATA 103720 ; 01076 0103720
DATA 150001 ; 01077 0150001
DATA 141302 ; 01100 0141302
DATA 141171 ; 01101 0141171
DATA 030210 ; 01102 0030210
DATA 150250 ; 01103 0150250
DATA 141302 ; 01104 0141302
DATA 141250 ; 01105 0141250
DATA 150171 ; 01106 0150171
DATA 030202 ; 01107 0030202
DATA 147320 ; 01110 0147320
DATA 145302 ; 01111 0145302
DATA 141171 ; 01112 0141171
DATA 030302 ; 01113 0030302
DATA 141302 ; 01114 0141302
DATA 000602 ; 01115 0000602
DATA 151322 ; 01116 0151322
DATA 000773 ; 01117 0000773
DATA 074571 ; 01120 0074571
DATA 030320 ; 01121 0030320
DATA 150010 ; 01122 0150010
DATA 141302 ; 01123 0141302
DATA 141171 ; 01124 0141171
DATA 030302 ; 01125 0030302
DATA 141302 ; 01126 0141302
DATA 147316 ; 01127 0147316
DATA 145312 ; 01130 0145312
DATA 143306 ; 01131 0143306
DATA 143171 ; 01132 0143171
DATA 030302 ; 01133 0030302
DATA 141302 ; 01134 0141302
DATA 147326 ; 01135 0147326
DATA 147302 ; 01136 0147302
DATA 141302 ; 01137 0141302
DATA 074571 ; 01140 0074571
DATA 030210 ; 01141 0030210
DATA 150312 ; 01142 0150312
DATA 141352 ; 01143 0141352
DATA 170356 ; 01144 0170356
DATA 143316 ; 01145 0143316
DATA 074571 ; 01146 0074571
DATA 030302 ; 01147 0030302
DATA 141302 ; 01150 0141302
DATA 150325 ; 01151 0150325
DATA 167370 ; 01152 0167370
DATA 074571 ; 01153 0074571
DATA 030223 ; 01154 0030223
DATA 157661 ; 01155 0157661
DATA 145302 ; 01156 0145302
DATA 170765 ; 01157 0170765
DATA 143306 ; 01160 0143306
DATA 152711 ; 01161 0152711
DATA 074571 ; 01162 0074571
DATA 030302 ; 01163 0030302
DATA 141302 ; 01164 0141302
DATA 150325 ; 01165 0150325
DATA 167010 ; 01166 0167010
DATA 154317 ; 01167 0154317
DATA 074571 ; 01170 0074571
DATA 030201 ; 01171 0030201
DATA 152721 ; 01172 0152721
DATA 165360 ; 01173 0165360
DATA 165321 ; 01174 0165321
DATA 152571 ; 01175 0152571
DATA 030220 ; 01176 0030220
DATA 141302 ; 01177 0141302
DATA 141010 ; 01200 0141010
DATA 150320 ; 01201 0150320
DATA 074571 ; 01202 0074571
DATA 030203 ; 01203 0030203
DATA 101706 ; 01204 0101706
DATA 143316 ; 01205 0143316
DATA 150312 ; 01206 0150312
DATA 141302 ; 01207 0141302
DATA 074571 ; 01210 0074571
DATA 030203 ; 01211 0030203
DATA 101706 ; 01212 0101706
DATA 147316 ; 01213 0147316
DATA 145312 ; 01214 0145312
DATA 141171 ; 01215 0141171
DATA 030302 ; 01216 0030302
DATA 141302 ; 01217 0141302
DATA 000712 ; 01220 0000712
DATA 145316 ; 01221 0145316
DATA 147302 ; 01222 0147302
DATA 141302 ; 01223 0141302
DATA 074571 ; 01224 0074571
DATA 030312 ; 01225 0030312
DATA 151312 ; 01226 0151312
DATA 004316 ; 01227 0004316
DATA 153316 ; 01230 0153316
DATA 074571 ; 01231 0074571
DATA 030220 ; 01232 0030220
DATA 141312 ; 01233 0141312
DATA 145010 ; 01234 0145010
DATA 147316 ; 01235 0147316
DATA 074571 ; 01236 0074571
DATA 030320 ; 01237 0030320
DATA 150010 ; 01240 0150010
DATA 145322 ; 01241 0145322
DATA 145360 ; 01242 0145360
DATA 170171 ; 01243 0170171
L01244 DATA 001646 ; 01244 0001646
L01245 DATA 000000 ; 01245 0000000
L01246 DATA 000000 ; 01246 0000000
L01247 DATA 000000 ; 01247 0000000
L01250 DATA 000000 ; 01250 0000000
L01251 DATA 000000 ; 01251 0000000
L01252 DATA 000000 ; 01252 0000000
L01253 DATA 000000 ; 01253 0000000
L01254 DATA 000000 ; 01254 0000000
L01255 DATA 000000 ; 01255 0000000
L01256 DATA 000000 ; 01256 0000000
L01257 DATA 000000 ; 01257 0000000
L01260 DATA 000000 ; 01260 0000000
L01261 DATA 000000 ; 01261 0000000
L01262 DATA 000000 ; 01262 0000000
L01263 DATA 000000 ; 01263 0000000
;
ORG 01265 ; addr code
L01265 DATA 000177 ; 01265 0000177
L01266 DATA 000014 ; 01266 0000014
L01267 DATA 000006 ; 01267 0000006
L01270 DATA 000004 ; 01270 0000004
L01271 DATA 000056 ; 01271 0000056
L01272 DATA 100000 ; 01272 0100000
DATA 000077 ; 01273 0000077
DATA 000100 ; 01274 0000100
L01275 DATA 050000 ; 01275 0050000
L01276 DATA 007777 ; 01276 0007777
L01277 DATA 000066 ; 01277 0000066
L01300 DATA 000010 ; 01300 0000010
L01301 DATA 070000 ; 01301 0070000
L01302 DATA 060000 ; 01302 0060000
L01303 DATA 007770 ; 01303 0007770
L01304 DATA 000032 ; 01304 0000032
DATA 000102 ; 01305 0000102
DATA 000300 ; 01306 0000300
L01307 DATA 000001 ; 01307 0000001
DATA 000070 ; 01310 0000070
L01311 DATA 004040 ; 01311 0004040
L01312 DATA 003777 ; 01312 0003777
L01313 DATA 001646 ; 01313 0001646
L01314 DATA 001446 ; 01314 0001446
L01315 DATA 001644 ; 01315 0001644
L01316 DATA 003770 ; 01316 0003770
;
ORG 01444 ; addr code
L01444 DHLT ; 01444 0000000
DATA 051020 ; 01445 0051020
;
ORG 01646 ; addr code
DATA 005670 ; 01646 0005670
DATA 001003 ; 01647 0001003
DATA 003100 ; 01650 0003100
DATA 104003 ; 01651 0104003
DATA 021264 ; 01652 0021264
DATA 031264 ; 01653 0031264
DATA 011653 ; 01654 0011653
DATA 102010 ; 01655 0102010
DATA 010100 ; 01656 0010100
DATA 061677 ; 01657 0061677
DATA 020176 ; 01660 0020176
DATA 061700 ; 01661 0061700
DATA 020177 ; 01662 0020177
DATA 061701 ; 01663 0061701
DATA 020202 ; 01664 0020202
DATA 061702 ; 01665 0061702
DATA 020777 ; 01666 0020777
DATA 010100 ; 01667 0010100
DATA 006005 ; 01670 0006005
DATA 012000 ; 01671 0012000
DATA 025000 ; 01672 0025000
DATA 047000 ; 01673 0047000
DATA 001000 ; 01674 0001000
DATA 000000 ; 01675 0000000
DATA 000000 ; 01676 0000000
DATA 006005 ; 01677 0006005
DATA 025000 ; 01700 0025000
DATA 026000 ; 01701 0026000
DATA 011400 ; 01702 0011400
;
ORG 04000 ; addr code
L04000 DATA 001646 ; 04000 0001646
DATA 001646 ; 04001 0001646
DHLT ; 04002 0000000
;
ORG 37400 ; addr code
DATA 001052 ; 37400 0001052
DATA 113402 ; 37401 0113402
DATA 001646 ; 37402 0001646
;
ORG 37714 ; addr code
DATA 013400 ; 37714 0013400
END ;

BIN
idasm/tests/unlabeled.idasm Executable file

Binary file not shown.

BIN
idasm/tests/unlabeled.ptp Executable file

Binary file not shown.

12
images/README Executable file
View File

@@ -0,0 +1,12 @@
This directory holds loadable imlac images I have found on the 'net.
The original image sub-directories are:
imlac tty images and doc
imlac_a short vector images
imlacdocs scanned documentation
imlacptp papertape images
The classified sub-directories are:
doc documentation/source of images
misc unknown (at the moment) image types
ptp paper tape images

81
images/bitbootloader.asm Executable file
View File

@@ -0,0 +1,81 @@
;-------------------------------
; Special TTY block loader.
; Disassembled from the 'snarf' tape.
;-------------------------------
org 037700 ;
rdblock rcf ;
cal ;
dac chksum ;
dac wordin ;
jms rdnyb ; read block count (8 bits)
jms rdnyb ;
cia ;
dac blkcnt ;
jms rdword ; get block load address
dac ldaddr ;
sam neg1 ; if load address is 0177777
jmp .+2 ;
hlt ; then halt here
doblock jms rdword ; get next block word
dac *ldaddr ; store it
jmp dosum ; go do checksum
doincs isz ldaddr ;
isz blkcnt ;
jmp doblock ;
jms rdword ; read block checksum
sam chksum ; same as expected?
jmp .+2 ;
jmp rdblock ; jump if so
hlt ; else halt here
dosum cll ; accum AC to running checksum
add chksum ;
lsz ; handle overflow
iac ;
dac chksum ;
jmp doincs ;
;-------------------------------
; Read a word from TTY.
; Word read left in 'wordin' and AC.
;-------------------------------
rdword hlt ;
cal ;
dac wordin ;
jms rdnyb ;
jms rdnyb ;
jms rdnyb ;
jms rdnyb ;
jmp *rdword ;
;-------------------------------
; Read a nybble from TTY.
; Accumulates word in 'wordin'.
; Current 'wordin' value left in AC.
;-------------------------------
rdnyb hlt ;
wnyb rsf ; wait here for TTY
jmp .-1 ;
cal ;
rrc ; get TTY char
dac charin ;
and chmask ; OK?
sam cheq ;
jmp wnyb ; jum if not, keep waiting
law 0017 ; get low 4 bits
and charin ;
xam wordin ; accumulate into 'wordin'
ral 3 ;
ral 1 ;
ior wordin ;
dac wordin ;
jmp *rdnyb ;
;-------------------------------
neg1 data 0177777 ;
chmask data 0160 ;
cheq data 0100 ;
charin data 0 ;
ldaddr data 0 ;
blkcnt data 0 ;
wordin data 0 ;
data 0 ; unused?
chksum data 0 ;
;-------------------------------
end ;

BIN
images/imlac/blinkg Executable file

Binary file not shown.

BIN
images/imlac/check Executable file

Binary file not shown.

33
images/imlac/check.doc Executable file
View File

@@ -0,0 +1,33 @@
THERE ARE SEVERAL OPTIONS TO THE GAME WHICH CAN BE INDICATED
BY THE DATA SWITCH SETTINGS WHEN THE PROGRAM IS STARTED OR RESTARTED:
BITS FUNCTION
---- --------
0 STOP PROGRAM IF DOWN
7-12 DETERMINE THE LEVEL OF RECURSION WHEN THE
COMPUTER IS FIGURING OUT A MOVE
13 COMPUTER PLAYS ITSELF
14 INPPT A GAME STATE
15 DISPLAY MOVES WHICH COMPUTER IS
THINKING ABOUT
THE KEYBOARD IS THE ONY OTHER SOERCE OF INPUT TO THE PROGRAM.
THE CURSOR IS CONTROLLED VIA THE CURSOR CONTROL KEYS. (THINK OF THE
ARROWS ON THESE KEYS AS IF THEY WERE ROTATED 45 DEGREES COUNTER-
CLOCKWISE.) TO MAKE A MOVE THE OPERATOR MUST POINT THE CURSOR AT
THE CHECKER HE WISHES TO MOVE AND TYPE A C; THEN HE MUST MOVE THE
CURSOR TO WHERE HE WANTS TO MOVE THAT CHECKER AND TYPE AN M.
IN ORDER TO JUMP, THE OPERATOR MUST TYPE THE C WHIL POINTING AT HIS
CHECKER, THEN MOVE THE CURSOR THE HIS LANDING SPOT (IF IT IS MORE THAN
A SINGLE JUMP) AND TYPE ANOTHERJ, ETC...., AND FINALLY WHEN HE HAS
SPECIFIED HIS ENTIRE PATH, HE MUST TYPE A CAPITAL J.
A GAME MAY BE ABORTED MOST OF THE TIME BY TYPING CR.
THE COMPUTER ASKS THE OPERATOR IF HE WANTS WHITE OR BLACK.
BLACK ALWAYS STARTS AT THE TOP OF THE SCREEN AND ALWAYS MOVES FIRST.

331
images/imlac/clock Executable file
View File

@@ -0,0 +1,331 @@
@BAJH@@IBGOOBGOMCONFCONFH@@FBGOLCOMNBGOK
GOOGAGLM@@@@COMNJGOKAGMHCGOKCGOLAGLMCOMN
GOOOAGMGAGL@@@@@H@@HFOOO@D@DH@@DBGOOAGM@
@@@@H@@IBGOMCONFCONFCONFCONFIGMN@@@@@DB@
AGNGH@@I@BAKBGOJDOOHGOOIAGNG@H@ODOOJBOOM
@F@C@F@AEGOMBGOMIGNFOOOO@@G@@@D@@@@@@@@@
@@@@@@@@@@@@@@@@COL@
AB@@D@A@DCA@EI@@DA@BABH@@IBANHBANGBANABA
MKBANFBAMHBAMIBAMJH@@CBANEBANDCIKLCIGONH
OMAB@@EBCIFCCIBNHH@DBAMLHHBHBAMMBAMNH@@A
GINAA@OBCI@A@DA@A@ELH@@A@BACBANBDIOL@D@A
CBHLAB@@FDA@FGFANBA@FNH@@CBANAFAONBANCFA
NBEIOLBANBGINIA@GCH@@ABANHA@EIGINJA@GHH@
@CLMDCAB@@GFBANHA@EIGIOGA@GLCIBNA@EIGIOH
A@HBH@@ABANDJB@HA@EIGIOJA@HJH@@ABAMKHH@D
BAMLKKCOAB@@HHCIBNA@EIGIOIA@I@FANDH@@BBA
NDA@EIGIOKA@IMH@@AGINGA@IICAMKH@@@CIBNA@
EIFAMKMJHMAB@@IJGB@IBAMKA@IGGIOFA@JCFANF
H@@BBANFA@EIGINKA@JIFANEH@@BBANEA@EIGINL
A@JLI@DBOLMBAB@@JLGINMA@JOA@DDGINNA@KBA@
EFGIO@A@KGH@@ABANGA@EIGINOA@KLH@@CBANGA@
EIGIOAA@LHCJFIAB@@KNH@@AGINGA@LDCAMHCIKL
A@EIFAMHGB@IBAMHA@LBGIOBA@MFH@@AGINGA@M@
CAMICIGOA@EIINDIAB@@M@FAMIGB@IBAMIHH@ABA
N@A@LNGIOCA@NBH@@AGINGA@MNCAMJCIFCA@EIFA
MJGB@IBAMJA@MLLHCHAB@@NBGIODA@NICAMMA@EI
HH@ABAMMA@EIGIOEA@EIFAMMGB@I@D@AA@O@H@@E
BAMMA@EICI@ACANCAGIBAB@@ODA@OBFAONBANCH@
@A@BACDIOL@D@AA@OOH@@ABANAA@ELFANBA@FN@@
@@HD@HIA@A@DH@IA@ADDOOAB@A@F@BCIFFBH@B@C
@FD@H@@CGINDAAALCAMLAAALHH@DBAMLH@@AGINF
AAAHCAMKH@@@CIBNAAALFOJGAB@AAHFAMKGB@IBA
MKAAAFH@@AGINEAAB@IA@ACAMNIA@AFAMMBAMNH@
@AGINHAABJCAMJCIFCIA@AO@LLAB@ABJFAMJGB@I
BAMJAABH@@@@FAMKDIOMBAMKBAMFFB@ABAMEFB@@
BAMGH@@AJAMGFAMFOAME@D@BGGJEAB@ACLAACOKA
MGAACJNIMECAMECAMGBAMFFAMEGJ@GAACGHH@DBA
MGFB@@BAMENAME@D@AAAEB@H@JEMJAAB@ADNJAME
CAMECAMGAADJFB@@BAMEHH@EBAMGNAMEFJAGBAMF
NAMFJAMECAMECAMGAAEFNB@JJB@KBO@GAB@AF@FA
OOJB@JIABN@@@@FAMJGJ@LAAG@FAMIGB@IBAMIHH
@ABAN@CIGO@HCKBAMJAAGGFAMJGJ@MGCB@AB@AGB
AAGGCAMICIGOH@@ABAMJH@@AFBBCFIMJBAMONAMO
BFBMBFBNIAFC@@@@FAN@GJ@LAAJHH@@AKIKNAB@A
HDBAN@FAMIGJ@LAAHK@HCKBAMIAAIFGJ@NAAHNAA
IFGJ@OAAIAAAIFGJA@AAIDAAIFGJAAAAIJJNDJAB
@AIFFAMHGB@IBAMHCIKLH@@AFBBCFIMIGB@IBAMO
NAMOBFCEBFCKCAMOCAMONAMOBFCFBFCJIAGOFACK
AB@AJHFAMIGJ@MAAJNH@@ABAMIAAKIGJABAAKAAA
KIGJACAAKDAAKIGJADAAKGAAKIGJAEAAIJCAMHCG
CBAB@AKJCIKLAAIJ@@@@FAMHGJ@LAALC@HCKBAMH
AALGGJ@MAALGH@@ABAMHH@@AFBBCFIMHGB@IBAMO
HBFLAB@ALLNAMOBFD@BFDFCAMOCAMONAMOBFDABF
DEIAKL@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@EBDGAB@AMN@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@NF@@NB@@HI@BOJ@@HO@@OB
@@HH@GEDAB@AO@@@HE@@NH@@NM@@OC@@HF@@HD@@
IH@@HL@@OO@@II@@IJ@@OD@D@@GOOOO@@@EINF@I
IF@B@BNBAOAB@B@BBGA@@CNH@@FD@@@J@@@A@B@G
@IIF@@@A@IIJ@IIKOOOO@@CL@@@K@@AG@@BC@@BO
@@@L@@AHDK@N@B@BAD@@BD@@C@@@EDAB@BAG@BAH
EIJHEIJJEIK@EIKGEIKNEILCEILJEIMBEIMGEIN@
EIJE@BBEEBFBEBGCEBHDEBIEEBJFGL@HAB@BBIEB
KFEBLFEBMEEBNCEBO@EBOMEC@KECAJECBJECCJEC
DKECELECFMECGNECHOECIOECJOECKNMIMLAB@BCK
ECLLECMIECNFECODED@CEDACEDBCEDCDEDDEEDEF
EDFGEDGHEDHHEDIHEDJGEDKEEDLBEDLONMGHAB@B
DMEDMMEDNLEDOLEE@LEEAMEEBNEECOEEE@EEFAEE
GAEEHAEEI@EEINEEJKEEKHEELFEEMEEENE@AAEAB
@BEOEEOEEF@FEFAGC@NCNCNCNKNCNCNKNCNCNKNC
NCNKNCNCNCNKNCNCNKNCNCNKNCNCNKNCNCNKLIID
AB@BGAD@D@@HB@C@LCLCLCLCLCLCLCLCLCLCLCLC
LCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLAD@NO
AHAB@BHC@HB@C@LCLCLCLKLCLCLKLCLCLKLCLCLK
LCLCLCLKLCLCLKLCLCLKLCLCLKLCLCLKD@D@@HB@
EFB@AB@BIEC@LCLKLCLKLKLCLKLKLCLKLKLCLKLK
LCLKLCLKLKLCLKLKLCLKLKLCLKLKLBD@D@@HB@C@
LCJNMJAB@BJGLKLKLKLKLKLKLKLKLKLKLKLKLKLK
LKLKLKLKLKLKLKLKLKLKLKLKLKD@@HB@C@LKLKMC
LKLKOEBDAB@BKIMCLKMCLKLKMCLKMCLKLKMCLKLK
MCLKMCLKLKMCLKMCLBD@D@@HB@C@LKMCMCLKMCMC
LKMCMCJJDKAB@BLKLKMCMCLKMCMCLKMCMCLKMCMC
LKMCMCMCMAD@@HB@C@MCMCMCMCMKMCMCMCMCMKMC
MCMCMKMCFKIEAB@BMMMCMCMCMKMCMCMCMKLJD@@H
B@C@MCMKMKMCMKMKMKMCMKMKMCMKMKMKMCMKMKMC
MKMKMKMBD@JCEJAB@BNO@HB@C@MJMKMKMJMKMKMK
MJMKMKMJMKMKMKMJMKMKMJMKMKMKMBD@@HB@C@MJ
MJMJMJMKMJMJFHEKAB@C@AMJMJMKMJMJMJMKMJMJ
MJMJMKMJMJMJMKMAD@@HB@C@MIMJMJMIMJMJMIMJ
MJMIMJMJMIMJMJMM@LAB@CACMIMJMJMIMJMJMIMJ
MJMJLJD@@HB@C@MIMIMJMIMIMJMIMJMIMIMJMIMJ
MIMIMJMIMIMJMIMJLM@FAB@CBEMIMIMJMIMJM@D@
D@@HB@C@MHMIMIMIMIMIMIMIMIMIMIMIMIMIMIMI
MIMIMIMIMIMIMIMIMICNOCAB@CCGMIMIMID@@HB@
C@MHMIMHMIMIMHMIMIMHMIMIMHMIMIMHMIMHMIMI
MHMIMIMHMIMIMHMIMIM@MANNAB@CDID@D@@HB@C@
MHMHMHMIMHMHMIMHMHMIMHMHMIMHMHMHMIMHMHMI
MHMHMIMHMHMIMHMHMID@D@IIEIAB@CEK@HB@C@MH
MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH
MHMHMHMHMHMHMHMHLHD@@HB@NECDAB@CFMC@MLML
MLMMMLMLMMMLMLMMMLMLMMMLMLMLMMMLMLMMMLML
MMMLMLMMMLMLMMD@D@@HB@C@MLLBCAAB@CGOMMML
MMMMMLMMMMMLMMMMMLMMMMMLMMMLMMMMMLMMMMML
MMMMMLMMMMMDD@D@@HB@C@MLMMMMGEBNAB@CIAMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMD@@HB@C@MMMMMNMMMMMNMMAGCOAB@CJC
MNMMMMMNMMMNMMMMMNMMMMMNMMMNMMMMMNMMMNMD
D@D@@HB@C@MMMNMNMMMNMNMMMNMNMMMNH@CLAB@C
KEMNMMMNMNMMMNMNMMMNMNMMMNMNMNLND@@HB@C@
MNMNMNMNMOMNMNMNMNMOMNMNMNMOMNMNMNAFDMAB
@CLGMNMOMNMNMNMOMED@@HB@C@MNMOMOMNMOMOMO
MNMOMOMNMOMOMOMNMOMOMNMOMOMOMFD@@HB@DDOK
AB@CMIC@MGMOMOMGMOMOMOMGMOMOMGMOMOMOMGMO
MOMGMOMOMOMFD@@HB@C@MGMGMGMGMOMGMGMGMGDF
BEAB@CNKMOMGMGMGMOMGMGMGMGMOMGMGMGMOLND@
@HB@C@LOMGMGLOMGMGLOMGMGLOMGMGLOMGMGLOMG
JDMEAB@COMMGLOMGMGLOMGMGMGMED@@HB@C@LOLO
MGLOLOMGLOMGLOLOMGLOMGLOLOMGLOLOMGLOMGLO
LOFKIMAB@D@OMGLOMGLFD@D@@HB@C@LGLOLOLOLO
LOLOLOLOLOLOLOLOLOLOLOLOLOLOLOLOLOLOLOLO
LOLOKFDKAB@DBALOD@@HB@C@LGLOLGLOLOLGLOLO
LGLOLOLGLOLOLGLOLGLOLOLGLOLOLGLOLOLGLOLO
LFD@D@HEIDAB@DCC@HB@C@LGLGLGLOLGLGLOLGLG
LOLGLGLOLGLGLGLOLGLGLOLGLGLOLGLGLOLGLGLO
D@D@@HB@HNELAB@DDEC@LGLGLGLGLGLGLGLGLGLG
LGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLE
D@@HB@C@NGAKOLAB@DEGNGNGNONGNGNONGNGNONG
NGNONGNGNGNONGNGNONGNGNONGNGNONGNGNOD@D@
@HB@C@NGNONGCH@FAB@DFINONONGNONONGNONONG
NONONGNONGNONONGNONONGNONONGNONONFD@D@@H
B@C@NGNONONONOFHBMAB@DGKNONONONONONONONO
NONONONONONONONONONONONONONONOD@@HB@C@NO
NOOGNONOOGNOOGNODGFGAB@DHMNOOGNOOGNONOOG
NONOOGNOOGNONOOGNOOGNFD@D@@HB@C@NOOGOGNO
OGOGNOOGOGNOOGOGNOL@IEAB@DIOOGOGNOOGOGNO
OGOGNOOGOGOGOED@@HB@C@OGOGOGOGOOOGOGOGOG
OOOGOGOGOOOGOGOGOGOOKENGAB@DKAOGOGOGOONN
D@@HB@C@OGOOOOOGOOOOOOOGOOOOOGOOOOOOOGOO
OOOGOOOOOOOFD@@HB@C@ONBNIOAB@DLCOOOOONOO
OOOOONOOOOONOOOOOOONOOOOONOOOOOOOFD@@HB@
C@ONONONONOOONONONONOOONBHEIAB@DMEONONOO
ONONONONOOONONONOOOED@@HB@C@OMONONOMONON
OMONONOMONONOMONONOMONONOMAMDNAB@DNGONON
OMONONONNND@@HB@C@OMOMONOMOMONOMONOMOMON
OMONOMOMONOMOMONOMONOMOMONOM@ODHAB@DOION
ODD@D@@HB@C@OLOMOMOMOMOMOMOMOMOMOMOMOMOM
OMOMOMOMOMOMOMOMOMOMOMOMOMOMD@EKGHAB@E@K
@HB@C@OLOMOLOMOMOLOMOMOLOMOMOLOMOMOLOMOL
OMOMOLOMOMOLOMOMOLOMOMODD@D@@HB@FAEBAB@E
AMC@OLOLOLOMOLOLOMOLOLOMOLOLOMOLOLOLOMOL
OLOMOLOLOMOLOLOMOLOLOMD@D@@HB@C@OHHDBOAB
@EBOOHOHOHOHOHOHOHOHOHOHOHOHOHOHOHOHOHOH
OHOHOHOHOHOHOHOHOHOHNHD@@HB@C@OHOHOHKGNO
AB@EDAOIOHOHOIOHOHOIOHOHOIOHOHOHOIOHOHOI
OHOHOIOHOHOIOHOHOID@D@@HB@C@OHOIOHOIOIAE
OEAB@EECOHOIOIOHOIOIOHOIOIOHOIOHOIOIOHOI
OIOHOIOIOHOIOIO@D@D@@HB@C@OHOIOIOIOIOIOI
AJOAAB@EFEOIOIOIOIOIOIOIOIOIOIOIOIOIOIOI
OIOIOIOIOIOID@@HB@C@OIOIOJOIOIOJOIOJOIOI
OJMJ@AAB@EGGOIOJOIOIOJOIOIOJOIOJOIOIOJOI
OJO@D@D@@HB@C@OIOJOJOIOJOJOIOJOJOIOJOJOI
OJOJBFONAB@EHIOIOJOJOIOJOJOIOJOJOJNJD@@H
B@C@OJOJOJOJOKOJOJOJOJOKOJOJOJOKOJOJOJOJ
OKOJOJMHA@AB@EIKOJOKOAD@@HB@C@OJOKOKOJOK
OKOKOJOKOKOJOKOKOKOJOKOKOJOKOKOKOBD@@HB@
C@OCOKOKBAGMAB@EJMOCOKOKOKOCOKOKOCOKOKOK
OCOKOKOCOKOKOKOBD@@HB@C@OCOCOCOCOKOCOCOC
OCOKOCOCOCJNMOAB@EKOOKOCOCOCOCOKOCOCOCOK
NJD@@HB@C@NKOCOCNKOCOCNKOCOCNKOCOCNKOCOC
NKOCOCNKOCOCENHOAB@EMANKOCOCOCOAD@@HB@C@
NKNKOCNKNKOCNKOCNKNKOCNKOCNKNKOCNKNKOCNK
OCNKNKOCNKOCNBBMDNAB@ENCD@D@@HB@C@NCNKNK
NKNKNKNKNKNKNKNKNKNKNKNKNKNKNKNKNKNKNKNK
NKNKNKNKNKD@@HB@FGIOAB@EOEC@NCNKNCNKNKNC
NKNKNCNKNKNCNKNKNCNKNCNKNKNCNKNKNCNKNKNC
NKNKNBD@D@@HB@C@NCG@MLAB@F@GNCNCNKNCNCNK
NCNCNKNCNCNKNCNCNCNKNCNCNKNCNCNKNCNCNKNC
NCNKD@D@@HB@C@LCLCLCMCHEAB@FAILCLCLCLCLC
LCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLC
LCLAD@@HB@@FBIAB@@BB@@ODGJAB@FBK@H@FEIOB
@@@@@@@@@H@GEINLAB@@BB@@EIOB@H@F@@@@@@@@
AB@@BB@@EIOB@@@@@@@@AB@@OIMFAB@FCMBB@@EI
OB@H@E@@@@@@@@AB@@BB@@EIOB@@@@@@@@AB@@BB
@@EIOBC@IHIHIHIHIHIHIHIHIHCBMGAB@FDOIHIH
IHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIH
IHIHIHIHIHIHIHIHIHIHIHIHIHIHKJKJAB@FFAIH
IHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIH
IHIHIHIHIHIHIHIHIHIHIHIHIHIHIHKJKJAB@FGC
IHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIH
IHIHIHIHIHIHIHIHIHIHIHIHIHIHIHIHKJKJAB@F
HEIHIHIHIHIHIHIHIHIHIHIHD@@H@FEINL@H@EC@
IKIKIKIKIKIKIBD@D@EJCIC@KIKJKJKJKJDAD@AB
@FIGKJKJKIKJKJKJKJKJKJKIKJKJKJKJKJKJJAD@
@HA@C@JCJCJKJCJKJCJKJCJKJCJKJCJKD@D@LE@N
AB@FJI@HA@C@JCJKJKJCJKJKJCJKJKJCJKJKJKJH
D@@HA@C@JKJKJKKCJKJKJKKCJKJKJKKCJBD@D@FM
NJAB@FKK@HA@C@JKKCJKKCKCJKKCKCJKKCKCJBD@
EINLC@HCHKHKHKHKHKHKHKHKHKHCHKHKHKHKHKHK
CLCBAB@FLMHKHKHKI@D@D@EJAEC@KHKIKIKIKIKI
KIKIKIKHKIKIKIKIKIKIKIKIKHKIKIKIKIKIKIKI
KIDOIGAB@FMOJHD@@HA@C@KCKCKKKCKKKCKCKKKC
KKJID@D@@HA@C@KKKKKKKKKKKKKKKKKKKBD@@HA@
C@KJLFIAAB@FOAKJKKKJKKKJKJKKKJKKJID@D@@H
A@C@KIKJKJKJKJKJKJKJKJKJKJJAD@EINLC@HCHK
HKHKHK@I@MAB@G@CHKHKHKHKHKHCHKHKHKHKHKHK
HKHKHKI@D@D@EIOGC@KHKHKIKHKHKIKHKHKIKHKH
KIKHKHKICFEIAB@GAEKHKHKIKBD@D@@HA@C@KIKI
KIKJKIKIKIKJKIKIKIKJK@D@D@@HA@C@KHKIKIKH
KIKIKHKIKIJGKDAB@GBGKHKIKIKIJAD@@HA@C@KH
KHKIKHKIKHKIKHKIKHKIKHKID@D@@HA@C@KHKHKH
KHKIKHKHKHKIOLLCAB@GCIKHKHKHKIJHD@@H@FEI
NL@H@EC@JKKCKCKCKCKCKCKCKCKCKCKCKCKCKCKC
KCKCKCKCKCKCKCFM@NAB@GDKJAD@EIOGC@IKIKIK
IKIKIKIKIKIKIKIKIKIKIKIKIKIBD@D@EJAEC@KL
KMKMKMKLKMKMKMKLLJJMAB@GEMKMKMKMKLKMKMKM
KLKMKMKMKLKMKMKMKLKMKMKMKFD@D@@HA@C@KLKL
KMKLKMKLKMKLKMKLKMIBAOAB@GFOKLKMD@D@@HA@
C@KLKMKMKLKMKMKLKMKMKLKMKMKMJED@@HA@C@KM
KMKMKNKMKMKMKNKMKMKMCJONAB@GHAKNKDD@D@@H
A@C@KMKNKMKNKNKMKNKNKMKNKNKDD@EINLC@KIKJ
KJKJKJKJKJKJKJKJKJKJKIHOKOAB@GICKJKJKJKJ
KJKJKJKJKJKJKJKIKJKJKJKJKJKJKJKJKJKJKJKA
D@D@EIOGC@IKIKIKIKIKIKIKENELAB@GJEIKIKIK
IKIKIKIKIKIKIBD@D@EIOGC@HOIGIGHOIGIGIGHO
IGIGHOIGIGIGIDD@D@@HA@C@KNFBO@AB@GKGKNKO
KNKOKNKNKOKNKOJMD@D@@HA@C@KOKOKOKOKOKOKO
KOKOKFD@@HA@C@KGKGKOKGKOKGKGDIOHAB@GLIKO
KGKOJMD@D@@HA@C@JOKGKGKGKGKGKGKGKGKGKGJL
D@EINLC@KIKJKJKJKJKJKJKJKJKJKJFKHGAB@GMK
KJKIKJKJKJKJKJKJKJKJKJKJKJKIKJKJKJKJKJKJ
KJKJKJKJKJKAD@D@EIOGC@IJIJIKIJIKGKGIAB@G
NMIJIKIJIJIKIJIKIJIKIJIKIAD@D@EKAOC@HOHO
HOIGHOHOIGHOHOIGHOHOIGHOHOIGHOHOHOICJBAB
@GOOIGHOHOIGHOHOIGHOHOIGHOHOIGD@@HA@C@JO
JOJOKGJOJOJOKGJOJOJOKGJFD@D@@HA@C@JGNLGI
AB@HAAJOJOJGJOJOJGJOJOJGJOJOJOJLD@@HA@C@
JGJGJOJGJOJGJOJGJOJGJOJGJOD@D@@HA@C@JGEJ
BCAB@HBCJGJGJGJGJGJGJGJGJGJGJGJGKED@@H@F
EINL@H@EC@KLKMKMKMKMKMKMKMKMKMKLKMKMKMKM
FNAAAB@HCEKMKMKMKMKMJFD@D@EK@MC@HOIGHOIG
IGHOIGHOIGIGHOIGIGHND@@HA@C@HGHGHOHGHOHG
HON@@BAB@HDGHGHOHGHOHGHOD@D@@HA@C@HGHOHO
HGHOHOHGHOHOHGHOHOHOHLD@@HA@C@HOHOHOIGHO
HOHOMHFIAB@HEIIGHOHOHOIGHFD@D@@HA@C@HOIG
HOIGIGHOIGIGHOIGIGHFD@EINLC@KMKNKNKNKNKM
KNKNKNC@E@AB@HFKKNJFD@D@EJO@C@HGHGHGHGHG
HGHGHGHGHGD@EJO@C@IHIIIIIIIIIIIIIIIHIIII
IIIIIIIINNGGAB@HGMIIIIHID@@HA@C@IGIGIOIG
IOIGIGIOIGIOHMD@D@@HA@C@IOIOIOIOIOIOIOIO
IOIFD@@HA@OGCKAB@HHOC@ININIOINIOININIOIN
IOHMD@D@@HA@C@IMININININININININININHED@
EINLC@KMKNKMJLEFAB@HJAKNKMKNKMKNKMKNKMKN
KMKNKMKNKMKNKMKND@EJMHC@IIIJIJIJIJIJIJIJ
IIIJIJIJIJIJIJGIMIAB@HKCIJIIIJIJIJIJIJIJ
IJIIIJIJIJIJIJIJIJHBD@D@@HA@C@IMIMIMINIM
IMIMINIMIMIMINIDILNKAB@HLED@D@@HA@C@ILIM
IMILIMIMILIMIMILIMIMIMHED@@HA@C@ILILIMIL
IMILIMILIMILIMILIMIBCKAB@HMGD@D@@HA@C@IL
ILILILILILILILILILILILILHND@@H@FEINL@H@E
C@HOHOIGHOHOIGHOIGHOIKJEAB@HNIHOIGHOIGIE
D@EJJJC@IJIKIJIKIJIKIJIKIJIKIKIJIKIJIKIJ
IKIJIKIKHID@D@@HA@C@IHLHIJAB@HOKIHIIIHII
IHIIIHIIIHIIIHIID@D@@HA@C@IHIIIIIHIIIIIH
IIIIIHIIIIIIHAD@@HA@C@IIEN@DAB@I@MIIIIIJ
IIIIIIIJIIIIIIIJI@D@D@@HA@C@IIIJIIIJIJII
IJIJIIIJIJI@D@EINLC@HGHOHOLCL@AB@IAOHOHG
HOHOHOHOHGHOHOHOHGHOHOHOHOHGHOHOHOHOIED@
EJH@C@JKJKKCJKKCJKJKKCJKKCJKAFFBAB@ICAJK
KCJKKCJKKCKAD@@HA@C@IJIJIKIJIKIJIJIKIJIK
HID@D@@HA@C@IKIKIKIKIKIKIKIKIKMKEEAB@IDC
IBD@@HA@C@ICICIKICIKICICIKICIKHID@D@@HA@
C@HKICICICICICICICICICICHHD@EINLOIKEAB@I
EEC@HOIGIGIGIGIGHOIGIGIGIGIGIGHOIGIGIGIG
IGHOIGIGIGIGIGIGIFD@D@EJFDC@JKJKJKDJCDAB
@IFGKCJKJKKCJKJKKCJKJKKCJKJKKCJKJKJKKCJK
JKKCJKJKKCJKJKKCJKJKKCD@@HA@C@HKHKHK@BNK
AB@IGIICHKHKHKICHKHKHKICHBD@D@@HA@C@HCHK
HKHCHKHKHCHKHKHCHKHKHKHHD@@HA@C@HCHCHKLD
B@AB@IHKHCHKHCHKHCHKHCHKHCHKD@D@@HA@B@B@
ACH@EIOB@H@F@@@@@@@@@@@@@@@@@@@@@@@@@@@@
FOJBAB@IIMC@I@LFNMO@NILBLBLIM@LMLFD@D@FI
NJC@I@D@D@FINJ@HA@FIIMC@KAMBLGLGK@M@M@HC
D@EHI@AB@IJOFINJC@KALJM@LNOFOFM@M@HCD@D@
FINJC@KCMHLMNNOHHGMHLINJHHD@FINJC@HOLCLC
OOM@MFFNAB@ILAM@D@FINJC@KGMHLILANIO@LCMH
HGD@D@FINJC@KEMAMELENMO@NILCMBLHLMHFD@FI
NJC@KCMONMAB@IMCM@M@NONOICD@FINJC@MELENM
O@NILAMAMANJO@NNMEI@D@D@FINJC@HGMCO@NILA
LIM@LGD@BIDKAB@INEFINJC@HGL@ICD@D@FINJC@
I@IHF@C@KMLBMBM@MFLFOFO@OBIIF@C@IKKOIKHI
JMIKKOKOF@KHMFAB@IOGC@MIMJMIMJMIMJMAD@D@
C@LGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLG
LGD@C@IHIHIHLHMMAB@J@IIHIHIHI@D@D@C@OHOH
OHOHOHOHOHOHOHOHOHOHOHNHD@@HB@C@MKMKMKLI
D@C@MHMHMHMHMHBAAJAB@JAKMHM@D@D@C@MOMOMO
LMD@C@LGLGLGLED@C@OOOOOONMD@C@OMONOMONOM
ONOED@D@C@NOOGNOFJBOAB@JBMOGNOOGNND@D@C@
MHMHMHMHMHMHMHMHMHMHMHMHMHLHD@@HB@C@MKMK
MKLID@C@MHMHMHMHMHONNNAB@JCOMHM@D@D@C@MO
MOMOLMD@C@LGLGLGLGLGLGLFD@D@C@OHOHOHOHOH
OHO@D@D@C@KOKOKOKOKOLKLHAB@JEAKOKFD@D@C@
MOMOMOLMD@C@MHMHMHMHMHMHM@D@D@C@MKMKMKLI
D@C@LCLCLCLCLCLCLBD@D@FKMGAB@JFC@HB@C@LC
LCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCLCD@
C@OGOGOGOOOGOGOOOGOGOOOGOFMLAB@JGEOGOONE
D@C@MHMHMHMHMHMHMHMHMHMHMHMHMHLHD@@HB@C@
MOMOMOLMD@C@MHMHMHMHMHMHM@HLNIAB@JHGD@D@
C@MKMKMKLID@C@LCLCLCLCLCD@D@C@OKOKOKNID@
C@OHOHOHOHOHOHOHOHOHOHD@C@LCFBMKAB@JIILC
LCLCLCLCLCLCLAD@D@C@MHMHMHMHMHMHMHMHMHMH
MHMHMHLHD@C@LGLGLGLED@@HB@C@LCEDBNAB@JJK
LCLCLAD@C@OKOKOKNID@C@OHOHOHOHOHOHO@D@D@
C@OOOOOONMD@C@LGLGLGLGLGLGLGLGLGFEGNAB@J
KMLGLGLGLGLED@C@MOMOMOLMD@C@MHMHMHMHMHMH
M@D@D@C@MKMKMKLID@C@LCLCLCLAD@C@OKNKBEAB
@JLOOKOKNID@C@OHOHOHOHOHOHOHOHOHOHD@@HB@
C@LCLCLCLAD@C@MHMHMHMHMHMHMHMHMHMHMHAMEF
AB@JNAMHMHLHD@C@NOOGOGOGOGOGOGOGOGOGOGOG
OGOGOGOGOGOGOGOGNLD@D@@HB@C@MOMOMOLMD@JH
@MAB@JOCC@LGLGLGLED@C@OOOOOONMD@C@OHOHOH
OHOHOHO@D@D@C@OKOKOKNID@C@LCLCLCLAD@C@MK
CE@FAB@K@EMKMKLID@C@MHMHMHMHMHMHM@D@D@@H
B@C@LCLCLCLAD@C@IIIJIIIJIIIJIAD@D@C@OHOH
OHLIBNAB@KAGNHD@C@OKOKOKNID@C@LCLCLCLAD@
FJCIC@LKMCLKMCLKMCLJD@D@C@MHMHMHMHMHMHM@
D@D@@FHCAB@KBIC@LOMGLOMGLOMGLND@D@C@LGLG
LGLGLGLGLFD@D@C@NOOGNOOGNOOGNND@D@C@OHOH
OHOHOHCLLD@M@KCKOHO@D@D@C@NKOCNKOCNKOCNJ
D@D@C@LCLCLCLCLCLCLBD@D@@HB@DJHM@AAOLLIG
MGIGMG@AAOMG@@D@@@D@OOOOOO


BIN
images/imlac/core16k Executable file

Binary file not shown.

BIN
images/imlac/coreop Executable file

Binary file not shown.

BIN
images/imlac/crash Executable file

Binary file not shown.

43
images/imlac/crashmit Executable file
View File

@@ -0,0 +1,43 @@
@BAJH@@IBGOLBGOMCONGCONGH@@FBGONCOMOGOOHAGLL@@@@BGOOCOMOJGOOCOMHCGOO
CGONAGLMCOMOGGOLHD@AAGL@@@@@@@@@H@@HFOOL@D@DH@@DBGOLIGMH@@@@H@@IBGOM
CONGCONGCONGCONGIGMO@@@@@DB@AGNHH@@I@BAKBGKODOOIGOOJAGNHFGKODOOKBOOM
@F@C@F@AEGOMBGOMIGNGOOOO@@G@@@D@@@@O@@@@@@@@@@@@@@@@OOL@
@BA@@@A@A@A@BOB@COANA@A@@BAJCHACA@BO@@@@F@IBBANKBANLBANMF@HJBANNF@GN
B@HFFAMDBAOIFAMEB@H@H@@AB@GKB@ICB@GOHH@CB@IDH@@EB@HAHHBHB@IEF@IGBBAF
F@IHBB@FOC@IANA@BNI@ACCHNA@DA@A@BOH@@I@BACCHCFA@BO@@@@GHIOA@CKCHACI@
CFGHIKA@DCH@@CFHGO@D@BH@@AB@GOI@CFGHIJA@DJH@@EGHHAI@CFC@GOI@CFGHIIA@
DMOJCBANA@DLIAMFGHILA@EEF@HAHD@AI@CF@H@CB@GOI@CFGHIMA@FCF@IHGJ@FI@CF
F@H@HD@AI@CFH@@EB@HAB@GKHH@CB@IDI@CFGHINA@FN@HLHFHH@B@GJDIMGGHGJHGKI
ANA@FJI@CFF@GJB@H@I@CFB@GJG@GI@D@BI@CFGAMHHD@BI@CFF@GJG@GIB@GNI@CF@@
K@@@@@@@@@@@@@NAOG@@@B@@@@@B@@@@@A@@@@@@@@@@@@@@@@@@@BA@HHLCHBANA@HH
MAHLMAIEMAIKMAJBMAJIMAJNMAKEMAKMMALBMALKMAMA@@@@OOOMOONL@H@@NBAJNBAF
@BOJ@@HF@@HD@@HH@@NL@@NF@@HM@@@@H@@AB@MNB@MOB@N@F@MLAIAAANA@JFHD@AGH
MMA@JJH@@EB@MLHD@BA@K@FAMIFHN@B@N@F@MMHD@BA@KFFAMJFHN@B@N@FAMIB@MNFA
MJB@MOF@ML@D@BH@@FB@MLF@MM@D@BH@@FB@MMG@MLHD@BAEKLANA@LDA@LODIMKFHMN
B@MNF@MMFHN@B@N@F@MLFHMOB@MOI@J@F@MLG@MMDIMKFHMNB@MNF@MLFHN@FIMLB@N@
F@MMFHMOB@MOI@J@@@@@@@@@@@@@@@@@@@@@@@@@KODGANA@NB@D@H@DH@I@NA@BCIFA
NE@B@C@FD@F@HF@D@AA@NOF@IFBAOCA@OAF@GMBAOCF@ICFIOIB@GLH@@AGHHFAAA@F@
GLGAMMHD@BAAA@FAMNBAOIH@@EGHGKAA@CGJIEANAA@@H@@AB@ICAABEH@@AB@HAB@GO
B@IDBHIC@D@BH@@FDIMOHD@AAABEF@IFBB@FAABEH@@AB@GKF@GLGAN@@D@BAAAJC@HF
FANAB@GLAABCF@GLGANAHD@BAABCFFCBANAAANH@@CFHHFB@HFFAN@B@GLF@GLBAOIH@
@AB@HBB@HCB@HDB@HEF@HFDINBGANC@D@BAACAC@HBAABLFINCGAND@D@BAACGC@HCAA
CBFINDGAMH@D@BAACMC@HDMGEEANAACLAACHFIMHFHHGB@HEN@HEBANNH@@AGHHBAAEA
@H@JB@HBH@@AGHHCAAEA@H@JB@HCH@@AGHHDAAEA@H@JB@HDF@HBFHHGB@HBN@HBBANK
F@HCFHHGB@HCN@HCECLFANAAEJBANLF@HDFHHGB@HDN@HDBANMC@IEI@NAHH@EB@IEF@
IDFHICFHGOB@ICF@H@G@GOB@H@HD@BAAGEH@@AB@GOB@GKB@HAB@H@F@IGBBAFI@NAF@
H@B@MMCHJ@B@KKANAAGHF@MNBBBBF@MOBBBCF@N@BBBDF@GO@FBBH@@FHD@AAAGBB@MM
CHJ@F@MNBBAFF@MOBBAGF@N@BBAHI@NA@HA@C@I@LFNMO@NILBLBLIM@LMLFI@IHH@F@
C@KA@DNBANAAIFMBLGLGK@M@M@HCI@IHF@C@KALJM@LNOFOFM@M@HCI@I@HHF@C@KCMH
LMNNOHHGMHLINJHHIHI@F@C@HOLCLCOOM@M@I@IHF@C@KGMHLILANIO@LCMHHGHHI@@O
HLANAAKDI@F@C@KEMAMELENMO@NILCMBLHLMHFI@IHF@C@KCM@M@NONOICI@IHF@C@ME
LENMO@NILAMAMANJO@NNMEI@HHI@I@F@C@HGMCO@NILALIM@LGI@IHF@C@I@KFB@@BAA
MBI@I@HHF@AHOAANAAMDBBL@@AH@@@DA@GOO@@@JD@@@B@@@@OOOA@@@B@DHB@DGOOOL
BCLEB@BHAOOO@CNH@@FDAANF@L@G@H@AGOOIACH@BCLHMAMAMAMAMAMAMAHL@H@EGOOI
A@@@AAGOANAAOBB@D@NAOGDL@ABCOO@@@@GOOIAB@@BBL@DOOHB@A@B@@HDOM@B@D@E@
A@DOM@B@D@G@A@DOOHB@A@@@@HNBAFDOOHF@@ME@@ED@@@F@@ED@@ED@@@F@@H@@@HBI
IBALABA@DOOKF@@HE@@CDOO@@@AEC@@EDOOO@@@AC@@@GOOIACL@B@H@DON@B@B@@@@@
DOO@@@A@D@@@DN@@BB@@A@@@DOO@@@A@D@@@DON@B@B@@@@@@@@@CDDN@BAOLKIGLLA@
@@JGLLOOOOOO@CN
PEACE WITH HONOR
KILL

BIN
images/imlac/cubic Executable file

Binary file not shown.

BIN
images/imlac/debug Executable file

Binary file not shown.

BIN
images/imlac/debug2 Executable file

Binary file not shown.

BIN
images/imlac/dts Executable file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More