As copied from code.google.com/rzzzwilson.
15
README
Normal 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
BIN
bin/40tp_blockPunch1.0.ptp
Normal file
BIN
bin/40tp_debugger5.0.ptp
Executable file
BIN
bin/40tp_eightLevelTest2.1AlphaGraphic.ptp
Executable file
BIN
bin/40tp_lightPen1.0.ptp
Executable file
BIN
bin/40tp_loSpeedAssm601.ptp
Executable file
BIN
bin/40tp_longVectorTest.ptp
Executable file
BIN
bin/40tp_simpleDisplay.ptp
Executable file
BIN
bin/40tp_spacewar2.5.ptp
Executable file
BIN
bin/40tp_symFormII_1.2C1_8kg.ptp
Executable file
BIN
bin/40tp_tse-4_supGrid.ptp
Executable file
BIN
bin/40tp_ttyio.ptp
Executable file
BIN
bin/40tp_upperMemTest1.ptp
Executable file
3
bin/README
Normal 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
BIN
bin/checkAxprimIGSR_fortranSrc.ptp
Executable file
BIN
bin/fortranARDSsrc.ptp
Executable file
BIN
bin/integerMath.ptp
Executable file
BIN
bin/keybrd.ptp
Executable file
BIN
bin/lowerMemTest1.ptp
Executable file
BIN
bin/lowspeedassembler.pdf
Normal file
BIN
bin/munch.ptp
Normal file
BIN
bin/unlabeled.ptp
Executable file
BIN
docs/PDS-1D_ProgrammingGuide.pdf
Executable file
BIN
docs/PDS-1D_Schematics.pdf
Executable file
BIN
docs/PDS-1_TechnicalMan.pdf
Executable file
BIN
docs/PDS-4 Programming Card 1.jpg
Executable file
|
After Width: | Height: | Size: 329 KiB |
BIN
docs/PDS-4 Programming Card 1c.jpg
Executable file
|
After Width: | Height: | Size: 610 KiB |
BIN
docs/PDS-4 Programming Card 2.jpg
Executable file
|
After Width: | Height: | Size: 449 KiB |
BIN
docs/PDS-4 Programming Card 2c.jpg
Executable file
|
After Width: | Height: | Size: 780 KiB |
BIN
docs/PDS-4 Programming Card 3.jpg
Executable file
|
After Width: | Height: | Size: 311 KiB |
BIN
docs/PDS-4 Programming Card 3c.jpg
Executable file
|
After Width: | Height: | Size: 477 KiB |
BIN
docs/PDS-4 Programming Card 4.jpg
Executable file
|
After Width: | Height: | Size: 274 KiB |
BIN
docs/PDS-4 Programming Card 4c.jpg
Executable file
|
After Width: | Height: | Size: 457 KiB |
11
docs/README
Normal 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.
|
||||
BIN
docs/Sydney_University_PDS-4_Rom.png
Normal file
|
After Width: | Height: | Size: 759 KiB |
37
iasm/Makefile
Executable 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
@@ -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
26
iasm/assemble.h
Executable 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
@@ -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
@@ -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
@@ -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
@@ -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
BIN
iasm/keybrd.png
Executable file
|
After Width: | Height: | Size: 7.5 KiB |
730
iasm/print.asm
Executable 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
1389
iasm/print.ptpdump
Executable file
97
iasm/ptpttyblockloader.asm
Executable 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
@@ -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
@@ -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
4
iasm/test0.asm
Executable file
@@ -0,0 +1,4 @@
|
||||
org 00100
|
||||
cla
|
||||
hlt
|
||||
end
|
||||
BIN
iasm/testscale.png
Executable file
|
After Width: | Height: | Size: 8.5 KiB |
9
idasm/Makefile
Executable 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
@@ -0,0 +1 @@
|
||||
This program is a smart, interactive disassembler for IMLAC binary files.
|
||||
111
idasm/binimport.py
Executable 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
BIN
idasm/tests/40tp_loSpeedAssm601.ptp
Executable file
BIN
idasm/tests/40tp_longVectorTest.ptp
Executable file
56
idasm/tests/40tp_simpleDisplay.idasm
Normal 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 ;
|
||||
BIN
idasm/tests/40tp_simpleDisplay.ptp
Executable file
1434
idasm/tests/40tp_spacewar2.5.asm
Executable file
BIN
idasm/tests/40tp_spacewar2.5.idasm
Executable file
BIN
idasm/tests/40tp_spacewar2.5.ptp
Executable file
84
idasm/tests/40tp_upperMemTest1.HAND.asm
Executable 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 ;
|
||||
BIN
idasm/tests/40tp_upperMemTest1.idasm
Executable file
BIN
idasm/tests/40tp_upperMemTest1.ptp
Executable file
1821
idasm/tests/keybrd.HAND.asm
Executable file
1689
idasm/tests/keybrd.asm
Executable file
BIN
idasm/tests/keybrd.idasm
Executable file
BIN
idasm/tests/keybrd.ptp
Executable file
631
idasm/tests/unlabeled.HAND.asm
Executable 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
@@ -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
BIN
idasm/tests/unlabeled.ptp
Executable file
12
images/README
Executable 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
@@ -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
BIN
images/imlac/check
Executable file
33
images/imlac/check.doc
Executable 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
@@ -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
|
||||
| ||||