1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-04-25 03:44:39 +00:00

- working on e09.

This commit is contained in:
tim.newsham
2008-04-25 02:58:01 +00:00
parent 0fc73e0f99
commit 269bc7ba18
9 changed files with 420 additions and 0 deletions

56
pages/e09-01 Normal file
View File

@@ -0,0 +1,56 @@
/ u9 -- unix
trcv:
jsr rO,1f
jsr rO,1f
jsr rO,1f
jsr rO,1f
jsr rO,1f
jsr rO,1f
jsr rO,1f
jsr rO,1f
1:
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov clockp,-(sp)
mov $s.syst+2,clockp
sub $trcv+4,r0 / 0%4 / calculate offset for tty causing
asl r0 / 0%8 / this interrupt
mov rcsr(r0),r2
mov rcbr(r0),r1
tst r2
blt 1f / error
tst tty+6(r0)
beq 1f
bit $40,r2 / parlty
bne 3f / branch if set
tstb tty+4(r0)
blt 4f / 37 parity not allowed
br 2f
3:
bitb $100,tty+4(r0)
beq 2f / non-37 parity not allowed
4:
bic !77,r1
bit $40,tty+4(r0)
bne 3f / raw
cmp r1,$177
beq 5f
cmp r1,$34
bne 3f
5:
mov tty+6(rO),r0
beq 2f
movb r1,6(r0) / interrupt or quit
jsr r0,wakeall
br 2f
3:
cmp r1,$15 / or
bne 3f
bit $20,tty+4(r0)
beq 3f
mov $12,r1
3:
bitb $4,tty+4(r0)

56
pages/e09-02 Normal file
View File

@@ -0,0 +1,56 @@
beq 3f
cmp r1,$'A
blo 3f
cmp r1,$'Z
bhi 3f
add $40,r1
3:
movb tty+3(r0),0f
jsr rO,putc; 0:.. / put char on input clist
br 2f
bitb $10,tty+4(r0) / echo
bne 4f / branch echo bit set
cmp r1,$12
bne 3f
bitb $20,tty+4(r0) / cr
beq 3f
4:
cmp r1,$4 / is char input an eot
beq 1f
mov r1,-(sp) / put char on stack
movb tty+3(r0),0f
inc 0f
jsr r0,putc; 0:.. / put char just input on output clist
bx: .+2
jsr r0,starxmt
mov (sp)+,r1
3:
bitb $40,tty+4(r0) / raw
bne 1f / branch if raw bit set
cmp r1,$12
beq 1f
movb tty+38r0),r1
cmpb cc(r1),$15.
blo 2f
1:
movb tty+3(r0),0f
jsr r0,wakeup; runq; 0:.. / call wakeup for process
2:
jmp retisp
txmt:
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
jsr r0,1f
1:
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov clockp,-(sp)
mov $s.syst+2,clockp
sub $txmt+4,r0 / 0%4 / offset in cc

55
pages/e09-03 Normal file
View File

@@ -0,0 +1,55 @@
asl r0 / 0%8
jsr r0,starxmt
jmp retisp
xmttoz
mov r0,—(sp)
mov 2(sp),:O / O%2+6
sub $5,rO
asl r0
asl ro / 09622
jsr r0,starxmt
mov (sp)+,20
rts rO
starxmt:
mov (sp),r1 / 0%8 r1 contains Bxtty number _ _
movb tty+3(r1),r1 / place contents of 4th byte of tty
/ buf in r1 (cc,cf,cl offset)
cmpb cc+1(r1),$10. / is char count for tty output greater
/ than or equal to 10
bbl 1f / yes N N
mov r1,0f / no, make offset an arg of wakeup
inc Of / increment arg of wakeup
jsr rO,wakeup; runq+2; 0:.. / wakeup process identified
/ by wlist
1: / entry specified by argument in O:
mov (sp),r1 / O%B / r1 contains Bxtty number
asr r1
asr r1
asr r1 / OZ1 r1 contalns tty number
tstb toutt+3(r1) / is tout entry for tty output e 0
bne 1f / no, return to calling routine
mov (sp),r2 / yes, place (Bxtty number) lnto r2
tstb tcsr(r2) / does tt 's tcsr register = O (ls ready
/ mt e 0{
bge 1f / yes, return to calling routine _ "
movb tty+2(r2),r1 / no, place third byte of tty buf
/ into r1 (char left over after lf)
clrb tty+2(r2) / clear third byte
tst r1 / is third byte = 0
bne 3f / no, r1 contains a non nul character “
movb tty+3(r2),O£ / yes, make byte 4 arg of getc
inc Of / increment arg to make it tty output list of
/ clist
jsr r0,getc; 0:.. / obtain next character ln cllst for tty
/ out and place in r1
br 1f / if no entry in cllst to be output, return to
/ calling routine
3:
bic $!177,r1 / zero out blts 7-1§ of r1
movb partab(r1),r3 / move partab entry (identified by
/ r1) into r3
bge 3f / if entry 1s greater than or equal to 0 (digit
/ 2, far left digit : 0) branch
bisb 200,r1 / lf entry is less than O add 128 to ASC11
/ code for char to be output

56
pages/e09-04 Normal file
View File

@@ -0,0 +1,56 @@
blc $I177,r3 / to make it teletype code and then clear
/ bits 7-15 of r3
3:
mov (sp),r2 / rz contains Bxtty number
blt $4,1.·czr(r2) / 1s carrier present for tty
beq starxmt / no carrler flush
mov :1,-(sp) ,/ yes, place character to be output on stack
cmp r1,$11 / is character ht
bne 3f / no
bltb $2,tty+4(r2) / ls tab to space flag_for_tty set
/ (blt 1 of byte 5 in tty buffer area)
beq 3f / no
mov $240,(sp) / yes, change character to space
3:
mov (sp)+,tcbr(r2) / place char to be output in tty output
/ buffer __ _
add $tty+1,r2 / place addr of 2nd byte of tty buf
jmp 1f-2(r3) ; area in r2 (which is the column count) and
then
lncb (r2) / normal / jmp to location determined by digits
/ 0 and 1 of character's entry in partab which
I, / / is now in r3
, rts r0 non—pr:Lntlng
br 1f / bs
br 2f / nl (llne feed)
br 3f / tab (horizontal tab)
br 4f / vert (vertical tab)
br 5f / cr
1: __ _
decb (r2) f col decrement column count ln byte 2 of tty
area
bge 1f / if count >O return to calllnq routine
clrb (r2) / col set column count = 0
br 1f
2:
blt $1,r1 / is bit 0 of ASC11 char = 1 (char = lf)
bne 2f / es __
bitb $20,3(r2) / cr flag is blt 4 of Sth byte of "tty
/ area = 1
beq 2f / no (only lf to be handled) n __
movb $15,1(r.2) / place cr in 3rd byte of __tty area
/ (character leftover after lf )
2:
movb (r2),r3 / place present column count in r3
beq 1f / return to calling routlne if count = 0
clrb (r2) / col clear column count
asr r3
asr r3
asr r3
asr r3 / delay = col/16
add $;,r3 / start to determine tout entry for tty output
br 2
3: _ __
bitb $2,3(r2) / is blt 1 of 5th byte of tty area e 1
/ (tab to space blt set)

55
pages/e09-05 Normal file
View File

@@ -0,0 +1,55 @@
beq 3f / no
lncb (r2) / increment column count
bltb $7,(r2) / are bits D, 1 and 2 set at col GEF
beq 1f / no
movb $11,1(r2) / yes, place ht in another tab next time
br if / grdubyte of tty area (character left over after
/ 1f .)
3:
movb (r2),r3 / place column count ln r3
blsb $7,(r2) / make bits O, 1 and 2 of column count :1
lncb (r2) / increment column count
bis $l7,r3 / clear bits 3-15 of r3
neg r3 / delay e dcol start to determine tout entry for
/ tty out
br 2f / by neg r3
4:
mov $176.,r3 / delay = lots start to determine tout entry
br 2f
5:
mov s10.,r3 f cr delay 160ms for tn30D start to determine
tout
clrb (r2) / set column count = 0 entry
2:
add $5,r3 / time for this char increment value for tout
/ entry by 5 )
mov (sp),r2 / O%B r2 contains Sxtty number
asr r2
asr r2 -
asr r2 / O%1 r2 contains tty number
movb r3,toutt+3(r2) / place value for tout entry into tout
/ table
1:
rts rO / return
partab: / contains 3 digits for each character; digit 2y1s used
/ to determine lf 200 is to added to ASC11 code digits 0
/ and 1 are used to determine value for jump table.
.byte 002,202,202,002,002,002,002,202
.byte 204,010,006,212,012,214,202,0¤2 gpl'
.byte 202,0D2,002,202,002,602,202,002 ]wZV”4” Nut
.byte 0O2,202,202,002,202,002,0U2,202
.byte 200,000,000,200,000,200,200,000
.byte 000,200,200,000,200,000,000,20O
.byte OOO,200,200,00G,200,000,000,2OO
.byte 200,000,000,200,000,200,200,000
.byte 200,000,000,200,000,200,200,000
.byte 000,200,200,000,200,000,000,200
.byte OOO,200,200,000,200,000,000,200
.byte ZOO,'U0,000,200,000,200,200,000
.byte OOC,¥OO,ZO0,000,200,000,00U,2OO
.byte 200,000,000,200,000,200,200,000
.byte 200,000,000,200,DO0,200,200,000
.byte OOO,200,200,000,200,000,000,2D2
xmtt: *
jar r0,cpass / get next character from user buffer area

56
pages/e09-06 Normal file
View File

@@ -0,0 +1,56 @@
tst r1 / is character nul
beq xmtt / yes, get next character
1:
mov $240,*sps / set processor priority equal to 5
mov (sp),r2 / r2 contains 1 node number of file
asl :2 / O%2+2B / multlply inode number by 2
sub $21.,::2 / 0%247 / subtract 21 from 2x inumber to
/ get cc, cf, cl offset
mov r2,0f / make offset arg of putc
cmpb cc(r2),$50. / is char count for device greater than
/ or equal to SO
bhls 2f / yes
jsr r0,putc; 0:.. / find locatlcn in freelist to assign to
/ device and
br 2f / place char in list, if none available branch
/ to put process to sleep
mov :0,-(sp) / place calling routines return address on
/ stack
mov Ob,rO / place offset into cc, cl and cf tables in rO
sub $7,rO / subtract seven from offset
asl :0 / multiply by 2
asl r0 / 0%8 / multiply by 2 (r0 contains Bxtty number)
jar r0,starxmt / attempt to output character
mov (sp)+,r0 / pop stack
br xmtt / get next character
2:
mov r1,—(sp) / place character on stack
mov Ob,Of / make offset into cc, cf, cl table arg of
/ sleep (identifies location in wlist)
jsr rD,sleep; 0:.. / put process to sleep
mov (sp)+,r1 / remove character from stack
br 1b / try again
rcvt: / read tty
sub $28.,1:*1 / 0962 r1 contains Zxtty number
asl :1
asl r1 / r1 contains Bxtty number
mov r1,—(sp)
mov tty+6(r1),r5 / r5 contains address of 4th word in
/ tty area
tst 2(rS) / is char count e 0
bne 1f / no
bltb $40,tty+4(r1) / raw flag set?
beq 2f / no
tst —(sp) / yes, decrement sp
js: rO,rcvch / get character from cllst
tst (sp)+ / increment sp
mov (59)+;:*2 / r2 contains Bxtty number
bltb $4,rcsr(r2) / is carrier detect bit on
beq 3f / no
jsr r0,passc / yes, place character in users buffer area
3:
jmp ret
2:
jsr r0,canon; rcvch / process a line of characters in
/ cllst and place results in tty buffer

55
pages/e09-07 Normal file
View File

@@ -0,0 +1,55 @@
/ area
1:
tst (sp)+ / increment sp
1:
tst 2(r5) / is char count for tty buffer = 0
beg 1f / yes
movb *4(r5),r1 / no, move character pointer to r1
inc 4(r5) / increment character pointer
dec 2(r5) / decrement character count
jsr rO,passc § place character, whose address is in
r1, in
br 1b / user buffer area. Then get next character.
1:
jmp ret
rcvch:
mov 4(sp),r2 / O%B r2 contains Sxtty number
mov $4,r1
bit r1,rcsr(r2) / is carrier detection bit on
bne 1f / yes
bic $1,rcsr(r2) / no, clear data terminal ready bit
rts rO
1:
movb tty+3(r2),Of / make cc offset arg for ugetcu
mov $240,*$ps / set processor priority = 5
jsr r0,qetc; 0:.. / get next character off clist
br 2f / clist empty
clr *$ps / set processor priority = O
rts r0
2= W N .. n
mov 0b,Of / make getc arg an arg for sleep
mov :5,-(sp) / save tty buffer address on stack
jsr rO,sleep; 0:..
mov (sp)+,r5
br rcvch
ocvt:
sub $2S.,r1 / O%2 calculate tty table offset
mov r1 ,1*2
an r1 / 0%:1
asl t1 / O%B
mov 1:1,—(sp)
add $6,r2 / calculate clist id clist offset
movb r2,tty+3(r1) / pu: clist id 1n tty table
1:
mov (sp),r1
bit $4,rcsr(r1) / carrier detect bit set
bne 1f / if so, branch
mov $511,rcsr(r1) / set ready, speed, interrupt enable,
/ supervisor transmit
movb tty+3(r1),Df / put clist id in sleep argument
jsr rO,s1eep; 0;..
br 1b
1:
mov tty+6(r1),r5 / put tty buffer address in r5
tstb (rE) / first byte of tty buffer e 0

21
pages/e09-08 Normal file
View File

@@ -0,0 +1,21 @@
bne 1f / if not, branch
mov $511,rcsr(r1) / set control bits for receiver
mov $511,tcsr(r1) / set control bits for transmitter
mcvb $210,tty+4(r1) / put 210 in tty table word 3 / set flags
1:
incb (r5) / inc first byte of tty buffer
tst (sp)+
tst u.ttyp / is there a process control tty
bne 1f / yes, then branch
mov r5,u.ttyp / no, make this tty the process control tty
br 1f / return
ccvt:
sub $28.,r1
asl r1 / 0%4
asl r1
mov tty+6(r1),r5
decb (r5)
1:
jmp sret