Add original unix v6
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
/
|
||||
/ routine to read from disc to a buffer
|
||||
/ wcing the buffer if necessary
|
||||
/ mov disc addr,r0
|
||||
/ mov buffer addr,r2
|
||||
/ jsr pc,getb
|
||||
/ on return r0 = addr of byte in buffer
|
||||
/
|
||||
getb:
|
||||
mov r3,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
mov r2,r3
|
||||
asr r3
|
||||
mov r3,r1
|
||||
ashc $9.,r1
|
||||
bic $777,r1
|
||||
add $b1,r1
|
||||
tst w1(r2) / w
|
||||
ble 1f
|
||||
|
||||
jsr pc,clean
|
||||
|
||||
1: mov (sp),r0
|
||||
bic $777,r0 /get lowest multiple of 512.
|
||||
mov r0,0f
|
||||
mov r0,b1s(r2) /set start
|
||||
mov afi,r0
|
||||
sys seek;0:..;0
|
||||
mov r1,0f
|
||||
sys read;0:..;512.
|
||||
|
||||
mov b1s(r2),b1e(r2)
|
||||
add $512.,b1e(r2) / set end
|
||||
clr w1(r2) /clear w
|
||||
mov (sp)+,r0
|
||||
sub b1s(r2),r0
|
||||
add r1,r0 / set r0=byte addr in buffer
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r3
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to wc a buffer
|
||||
/ mov buffer addr,r2
|
||||
/ mov buffer addr+6,r1 beginning of buffer
|
||||
/ jsr pc,clean
|
||||
/
|
||||
clean:
|
||||
mov r0,-(sp)
|
||||
mov b1s(r2),0f
|
||||
mov afout,r0
|
||||
sys seek;0:..;0
|
||||
mov r1,0f
|
||||
sys write;0:..;512.
|
||||
|
||||
clr w1(r2) /clear w
|
||||
mov (sp)+,r0
|
||||
rts pc
|
||||
/
|
||||
/ routine to get buffer addr of byte whose disc
|
||||
/ addr is in r0 - also returns addr of write
|
||||
/ flag for buffer in r2
|
||||
/ mov disc addr,r0
|
||||
/ jsr pc,bufchar
|
||||
/ mov (r0),r0 for read
|
||||
/ inc (r2) for write must inc w
|
||||
/ c-bit set if char not in either buffer
|
||||
/
|
||||
bufchar:
|
||||
mov r1,-(sp)
|
||||
mov r3,-(sp)
|
||||
clr r3
|
||||
1:
|
||||
mov r3,r2
|
||||
asl r2
|
||||
cmp r0,b1s(r2)
|
||||
blo 2f
|
||||
cmp r0,b1e(r2)
|
||||
bhis 2f
|
||||
sub b1s(r2),r0
|
||||
mov r3,r1
|
||||
ashc $9.,r1
|
||||
bic $777,r1
|
||||
add r1,r0
|
||||
add $b1,r0
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r1
|
||||
clc
|
||||
rts pc
|
||||
2:
|
||||
inc r3
|
||||
cmp r3,nbuf
|
||||
blt 1b
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r1
|
||||
sec
|
||||
rts pc
|
||||
/
|
||||
/ routine to get a buffer
|
||||
/ mov disc addr,r0
|
||||
/ jsr pc,getbuf
|
||||
/ mov (r0),r0 (for read)
|
||||
/ inc (r2) must inc w for w
|
||||
/
|
||||
getbuf:
|
||||
mov r4,-(sp)
|
||||
mov r3,-(sp)
|
||||
mov $2,r3
|
||||
clr r2
|
||||
mov $1,r4
|
||||
1:
|
||||
cmp r4,nbuf
|
||||
bge 1f
|
||||
cmp u1(r3),u1(r2)
|
||||
bhis 2f
|
||||
mov r3,r2
|
||||
2:
|
||||
inc r4
|
||||
add $2.,r3
|
||||
br 1b
|
||||
1:
|
||||
mov r2,r3
|
||||
jsr pc,getb
|
||||
add $stats+6.,r3
|
||||
inc (r3)
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r4
|
||||
rts pc
|
||||
/
|
||||
/ routine to look at next character from string
|
||||
/ pointed to by r1; character returned in r0
|
||||
/ c-bit set if character not available (end of file)
|
||||
/ r1 is preserved
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,lookchar
|
||||
/ movb r0,...
|
||||
/
|
||||
lookchar:
|
||||
mov r2,-(sp)
|
||||
jsr pc,plausible
|
||||
cmp w(r1),r(r1) /W,R
|
||||
blos noch
|
||||
mov r(r1),r0
|
||||
jsr pc,bufchar
|
||||
bec 2f
|
||||
jsr pc,getbuf
|
||||
/
|
||||
2:
|
||||
inc flag
|
||||
bne 2f
|
||||
jsr pc,fixct
|
||||
br 1f
|
||||
2:
|
||||
mov flag,u1(r2)
|
||||
1:
|
||||
mov (sp)+,r2
|
||||
movb (r0),r0
|
||||
tst r0 /clears c-bit
|
||||
rts pc
|
||||
/
|
||||
noch:
|
||||
mov (sp)+,r2
|
||||
clr r0
|
||||
sec
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to put a character into the string
|
||||
/ pointed to by r1; character in r0
|
||||
/ r0 is preserved; r1 points to the string
|
||||
/ after return and must be saved.
|
||||
/
|
||||
/ movb ch,r0
|
||||
/ mov ...,r1
|
||||
/ jsr pc,putchar
|
||||
/ mov r1,...
|
||||
/
|
||||
putchar:
|
||||
mov r2,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov r0,nchar
|
||||
jsr pc,plausible
|
||||
1: cmp w(r1),l(r1) /W,L
|
||||
blt 3f
|
||||
mov w(r1),r0
|
||||
inc r0
|
||||
sub a(r1),r0 /W-A+1
|
||||
jsr pc,allocate
|
||||
mov (sp),r0
|
||||
jsr pc,copy
|
||||
jsr pc,swap
|
||||
jsr pc,release
|
||||
mov (sp),r1
|
||||
/
|
||||
3: mov w(r1),r0
|
||||
jsr pc,bufchar
|
||||
bec 2f
|
||||
jsr pc,getbuf
|
||||
2: movb nchar,(r0)
|
||||
mov $1,w1(r2)
|
||||
|
||||
mov nchar,r0 /to preserve r0 for user
|
||||
inc w(r1)
|
||||
inc flag
|
||||
bne 2f
|
||||
jsr pc,fixct
|
||||
br 1f
|
||||
2:
|
||||
mov flag,u1(r2)
|
||||
1:
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r2
|
||||
rts pc
|
||||
|
||||
/
|
||||
/
|
||||
fixct:
|
||||
mov r1,-(sp)
|
||||
mov r3,-(sp)
|
||||
mov nbuf,r1
|
||||
mov nbuf,flag
|
||||
2:
|
||||
mov r1,u1(r2)
|
||||
dec r1
|
||||
bge 1f
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
1:
|
||||
clr r2
|
||||
mov $2,r3
|
||||
1:
|
||||
cmp r3,nbuf2
|
||||
bge 2b
|
||||
cmp u1(r3),u1(r2)
|
||||
blo 2f
|
||||
mov r3,r2
|
||||
2:
|
||||
add $2,r3
|
||||
br 1b
|
||||
Reference in New Issue
Block a user