Research V2 release
[unix-history] / cmd / a9.s
/ a9 -- pdp-11 assembler pass 1
eae = 0
/ key to types
/ 0 undefined
/ 1 absolute
/ 2 text
/ 3 data
/ 4 bss
/ 5 flop freg,dst (movfo, = stcfd)
/ 6 branch
/ 7 jsr
/ 10 rts
/ 11 sys
/ 12 movf (=ldf,stf)
/ 13 double operand (mov)
/ 14 flop fsrc,freg (addf)
/ 15 single operand (clr)
/ 16 .byte
/ 17 string (.ascii, "<")
/ 20 .even
/ 21 .if
/ 22 .endif
/ 23 .globl
/ 24 register
/ 25 .text
/ 26 .data
/ 27 .bss
/ 30 mul,div, etc
/ 31 sob
/ 32 .comm
symtab:
/ special variables
166600; 000000; dotrel: 02; dot:000000 /.
171560; 000000; 01; dotdot:000000 /..
/ register
072270;000000;24;000000 /r0
072340;000000;24;000001 /r1
072410;000000;24;000002 /r2
072460;000000;24;000003 /r3
072530;000000;24;000004 /r4
072600;000000;24;000005 /r5
074500;000000;24;000006 /sp
062170;000000;24;000007 /pc
.if eae
/eae & switches
012717;000000;01;177570 /csw
015176;000000;01;177300 /div
003270;000000;01;177302 /ac
051750;000000;01;177304 /mq
052224;000000;01;177306 /mul
073470;000000;01;177310 /sc
074620;000000;01;177311 /sr
054752;000000;01;177312 /nor
047000;000000;01;177314 /lsh
004500;000000;01;177316 /ash
.endif
/ system calls
021411;076400;01;0000001 /exit
023752;042300;01;0000002 /fork
070511;014400;01;0000003 /read
111231;076710;01;0000004 /write
060105;053600;01;0000005 /open
012257;073610;01;0000006 /close
107761;076400;01;0000007 /wait
012625;004540;01;0000010 /creat
046166;042300;01;0000011 /link
102574;035173;01;0000012 /unlink
021405;011300;01;0000013 /exec
012004;035420;01;0000014 /chdir
077165;017500;01;0000015 /time
050563;015172;01;0000016 /makdir
012015;057140;01;0000017 /chmod
012017;110760;01;0000020 /chown
007525;003770;01;0000021 /break
074741;076400;01;0000022 /stat
073615;042300;01;0000023 /seek
076724;045400;01;0000024 /tell
051655;055240;01;0000025 /mount
102527;102604;01;0000026 /umount
073634;102254;01;0000027 /setuid
026234;102254;01;0000030 /getuid
074751;051010;01;0000031 /stime
066621;076400;01;0000032 /quit
035204;070200;01;0000033 /intr
024214;004540;01;0000034 /fstat
011625;076400;01;0000035 /cemt
050741;076710;01;0000036 /mdate
074764;116100;01;0000037 /stty
027364;116100;01;0000040 /gtty
035047;035203;01;0000041 /ilgins
054353;017500;01;0000042 /nice
/ double operand
051656;000000;13;0010000 /mov
051656;006200;13;0110000 /movb
012330;000000;13;0020000 /cmp
012330;006200;13;0120000 /cmpb
006774;000000;13;0030000 /bit
006774;006200;13;0130000 /bitb
006753;000000;13;0040000 /bic
006753;006200;13;0140000 /bicb
006773;000000;13;0050000 /bis
006773;006200;13;0150000 /bisb
003344;000000;13;0060000 /add
075012;000000;13;0160000 /sub
/ branch
007520;000000;06;0000400 /br
007265;000000;06;0001000 /bne
006531;000000;06;0001400 /beq
006635;000000;06;0002000 /bge
007164;000000;06;0002400 /blt
006654;000000;06;0003000 /bgt
007145;000000;06;0003400 /ble
007414;000000;06;0100000 /bpl
007221;000000;06;0100400 /bmi
006711;000000;06;0101000 /bhi
007157;073300;06;0101400 /blos
007763;000000;06;0102000 /bvc
010003;000000;06;0102400 /bvs
006711;073300;06;0103000 /bhis
006513;000000;06;0103000 /bec
006373;000000;06;0103000 /bcc
007157;000000;06;0103400 /blo
006413;000000;06;0103400 /bcs
006533;000000;06;0103400 /bes
/ single operand
012262;000000;15;0005000 /clr
012262;006200;15;0105000 /clrb
012445;000000;15;0005100 /com
012445;006200;15;0105100 /comb
035163;000000;15;0005200 /inc
035163;006200;15;0105200 /incb
014713;000000;15;0005300 /dec
014713;006200;15;0105300 /decb
054117;000000;15;0005400 /neg
054117;006200;15;0105400 /negb
003343;000000;15;0005500 /adc
003343;006200;15;0105500 /adcb
073423;000000;15;0005600 /sbc
073423;006200;15;0105600 /sbcb
100014;000000;15;0005700 /tst
100014;006200;15;0105700 /tstb
071352;000000;15;0006000 /ror
071352;006200;15;0106000 /rorb
071344;000000;15;0006100 /rol
071344;006200;15;0106100 /rolb
004512;000000;15;0006200 /asr
004512;006200;15;0106200 /asrb
004504;000000;15;0006300 /asl
004504;006200;15;0106300 /aslb
040230;000000;15;0000100 /jmp
075131;006200;15;0000300 /swab
/ jsr
040612;000000;07;0004000 /jsr
/ rts
071663;000000;010;000200 /rts
/ simple operand
075273;000000;011;104400 /sys
/ flag-setting
012243;000000;01;0000241 /clc
012266;000000;01;0000242 /clv
012272;000000;01;0000244 /clz
012256;000000;01;0000250 /cln
073613;000000;01;0000261 /sec
073636;000000;01;0000262 /sev
073642;000000;01;0000264 /sez
073626;000000;01;0000270 /sen
/ floating point ops
011663;011300;01;170000 / cfcc
073634;022600;01;170001 / setf
073634;014400;01;170011 / setd
073634;034100;01;170002 / seti
073634;045400;01;170012 / setl
012262;022600;15;170400 / clrf
054117;022600;15;170700 / negf
003243;022600;15;170600 / absf
100014;022600;15;170500 / tstf
051656;022600;12;172400 / movf
051656;034460;14;177000 / movif
051656;023350;05;175400 / movfi
051656;057260;14;177400 / movof
051656;023730;05;176000 / movfo
003344;022600;14;172000 / addf
075012;022600;14;173000 / subf
052224;022600;14;171000 / mulf
015176;022600;14;174400 / divf
012330;022600;14;173400 / cmpf
051634;022600;14;171400 / modf
024153;000000;24;000000 / fr0
024154;000000;24;000001 / fr1
024155;000000;24;000002 / fr2
024156;000000;24;000003 / fr3
024157;000000;24;000004 / fr4
024160;000000;24;000005 / fr5
/ 11/45 operations
004063;000000;30;072000 /als (ash)
004063;011300;30;073000 /alsc (ashc)
051731;000000;30;070000 /mpy
.if eae-1
052224;000000;30;070000 /mul (=mpy)
015176;000000;30;071000 / div (=dvd)
004500;000000;30;072000 / ash (=als)
004500;011300;30;073000 / ashc
.endif
016164;000000;30;071000 /dvd
114152;000000;07;074000 /xor
075224;000000;15;006700 /sxt
050572;042300;11;006400 /mark
074432;000000;31;077000 /sob
/ specials
166751;076710;16;000000 /.byte
167136;020560;20;000000 /.even
167356;000000;21;000000 /.if
167126;015156;22;000000 /.endif
167244;057034;23;000000 /.globl
170245;114440;25;000000 /.text
167041;076450;26;000000 /.data
166743;073300;27;000000 /.bss
167007;051510;32;000000 /.comm
usymtab:
0;0;0;0
start:
sys intr; aexit
mov sp,r5
mov (r5)+,r0
cmpb *2(r5),$'-
bne 1f
tst (r5)+
dec r0
br 2f
1:
clr unglob
2:
movb r0,nargs
mov r5,curarg
jsr r5,fcreat; a.tmp1
movb r0,pof
jsr r5,fcreat; a.tmp2
movb r0,fbfil
jsr pc,setup
mov $1,r0
sys write; qi; 2
jmp go
setup:
mov $symtab,r1
1:
mov $symbol,r0
mov (r1)+,(r0)+
beq 3f
mov (r1)+,(r0)+
mov (r1)+,r2
bic $37,r2
mov r2,(r0)+
mov r1,-(sp)
jsr pc,slot
mov (sp)+,r1
mov r1,(r0)
sub $6,(r0)
tst (r1)+
br 1b
3:
rts pc
slot:
mov symbol,r1
add symbol+2,r1
add symbol+4,r1
clr r0
dvd $hshsiz,r0
asl r1
add $hshtab,r1
1:
cmp r1,$hshtab
bhi 2f
mov $2*hshsiz+hshtab,r1
2:
mov -(r1),r2
beq 3f
mov $symbol,r3
cmp (r2)+,(r3)+
bne 1b
cmp (r2)+,(r3)+
bne 1b
mov (r2)+,r0
bic $37,r0
cmp r0,(r3)+
bne 1b
3:
mov r1,r0
rts pc
end:
symbol,r0
mov (r1)+,(r0)+
beq 3f
mov (r1)+,(r0)+
mov (r1)+,r2
bic $37,r2
mov r2,(r0)+
mov r1,-(sp)
jsr pc,slot
mov (sp)+,r1
mov r1,(r0)
sub $6,(r0)
tst (r1)+
br 1b
3:
rts pc
slot:
mov symbol,r1
add symbol+2,r1
add symbol+4,r1
clr r0
dvd $hshsiz,r0
asl r1
add $hshtab,r1
1:
cmp r1,$hshtab
bhi 2f
mov $2*hshsiz+hshtab,r1
2:
mov -(r1),r2
beq 3f
mov $symbol,r3
cmp (r2)+,(r3)+
bne 1b
cmp (r