Add original unix v6
This commit is contained in:
+408
@@ -0,0 +1,408 @@
|
||||
.globl getchar
|
||||
.globl stats
|
||||
.globl lookchar
|
||||
.globl fsfile
|
||||
.globl seekchar
|
||||
.globl backspace
|
||||
.globl putchar
|
||||
.globl alterchar
|
||||
.globl move
|
||||
.globl rewind
|
||||
.globl create
|
||||
.globl zero
|
||||
.globl allocate
|
||||
.globl release
|
||||
.globl collect
|
||||
.globl getword, putword
|
||||
.globl length, position
|
||||
.globl w, r, a, l
|
||||
/
|
||||
testing = 0
|
||||
/
|
||||
/
|
||||
/ routine to return the length of a string
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,length
|
||||
/ mov r0,...
|
||||
/
|
||||
length:
|
||||
mov w(r1),r0
|
||||
sub a(r1),r0
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to return the read pointer position
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,position
|
||||
/ mov r0,...
|
||||
/
|
||||
position:
|
||||
mov r(r1),r0
|
||||
sub a(r1),r0
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/
|
||||
/
|
||||
/ routine to get a word from the string
|
||||
/ mov ...,r1
|
||||
/ jsr pc,getword
|
||||
/ mov r0,...
|
||||
/
|
||||
getword:
|
||||
jsr pc,getchar
|
||||
bes noch
|
||||
movb r0,nchar
|
||||
jsr pc,getchar
|
||||
bec 2f
|
||||
dec r(r1)
|
||||
br noch
|
||||
2: movb r0,nchar+1
|
||||
mov nchar,r0
|
||||
tst r0 /tst clears c-bit
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to put a word onto the string
|
||||
/ mov ...,r1
|
||||
/ mov ...,r0
|
||||
/ jsr pc,putword
|
||||
/
|
||||
putword:
|
||||
jsr pc,putchar
|
||||
swab r0
|
||||
jsr pc,putchar
|
||||
swab r0
|
||||
rts pc
|
||||
/
|
||||
.bss
|
||||
nchar: .=.+2
|
||||
.text
|
||||
/
|
||||
/
|
||||
/
|
||||
/ routine to read 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,getchar
|
||||
/ movb r0,...
|
||||
/
|
||||
getchar:
|
||||
jsr pc,lookchar
|
||||
bec 2f
|
||||
rts pc
|
||||
2: inc r(r1)
|
||||
tst r0 /tst clears c-bit
|
||||
rts pc
|
||||
/
|
||||
noch: clr r0
|
||||
sec
|
||||
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:
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+6.
|
||||
.endif
|
||||
cmp w(r1),r(r1)
|
||||
blos noch
|
||||
movb *r(r1),r0
|
||||
clc
|
||||
rts pc
|
||||
/
|
||||
plausible:
|
||||
cmp r1,$headers
|
||||
bhis 9f; 4; 9:
|
||||
cmp r1,$headend
|
||||
blo 9f; 4; 9:
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/
|
||||
/ routine to move the read pointer of a string to a
|
||||
/ specified point. If the string is not long enough,
|
||||
/ the string is extended
|
||||
/
|
||||
/ mov position,r0
|
||||
/ mov ...,r1
|
||||
/ jsr pc,seekchar
|
||||
/
|
||||
seekchar:
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+10.
|
||||
.endif
|
||||
1:
|
||||
mov (sp),r0
|
||||
add a(r1),r0
|
||||
cmp r0,l(r1)
|
||||
bhi 3f
|
||||
mov r0,r(r1)
|
||||
cmp r0,w(r1)
|
||||
blo 1f
|
||||
mov r0,w(r1)
|
||||
br 1f
|
||||
3:
|
||||
mov (sp),r0
|
||||
jsr pc,allocate
|
||||
mov 2(sp),r0
|
||||
jsr pc,move
|
||||
jsr pc,swap
|
||||
jsr pc,release
|
||||
mov 2(sp),r1
|
||||
br 1b
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to move read pointer of string to end of string
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,fsfile
|
||||
/
|
||||
fsfile:
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+10.
|
||||
.endif
|
||||
mov w(r1),r(r1)
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to read a string backwards
|
||||
/ the read pointer is decremented before reading
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,backspace
|
||||
/ mov r0,...
|
||||
/
|
||||
backspace:
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+6.
|
||||
.endif
|
||||
cmp a(r1),r(r1)
|
||||
bhis noch
|
||||
dec r(r1)
|
||||
movb *r(r1),r0
|
||||
clc
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/
|
||||
/
|
||||
/ routine to put a character into the string
|
||||
/ pointed to by r1; character in r0
|
||||
/ r0 and r1 are preserved.
|
||||
/
|
||||
/ movb ch,r0
|
||||
/ mov ...,r1
|
||||
/ jsr pc,putchar
|
||||
/
|
||||
putchar:
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+8.
|
||||
.endif
|
||||
1: cmp w(r1),l(r1)
|
||||
blt 3f
|
||||
mov w(r1),r0
|
||||
inc r0
|
||||
sub a(r1),r0 /W-A+1
|
||||
jsr pc,allocate
|
||||
mov 2(sp),r0 /r1
|
||||
jsr pc,move
|
||||
jsr pc,swap
|
||||
jsr pc,release
|
||||
mov 2(sp),r1 /r1
|
||||
cmp w(r1),l(r1)
|
||||
blt 3f
|
||||
jmp err
|
||||
/
|
||||
3: movb (sp),*w(r1)
|
||||
inc w(r1)
|
||||
mov (sp)+,r0
|
||||
tst (sp)+
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
swap:
|
||||
mov w(r1),-(sp)
|
||||
mov w(r0),w(r1)
|
||||
mov (sp),w(r0)
|
||||
mov r(r1),(sp)
|
||||
mov r(r0),r(r1)
|
||||
mov (sp),r(r0)
|
||||
mov a(r1),(sp)
|
||||
mov a(r0),a(r1)
|
||||
mov (sp),a(r0)
|
||||
mov l(r1),(sp)
|
||||
mov l(r0),l(r1)
|
||||
mov (sp)+,l(r0)
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to alter a character in the string
|
||||
/ pointed to by r1; character in r0
|
||||
/ r0 and r1 are preserved.
|
||||
/
|
||||
/ movb ch,r0
|
||||
/ mov ...,r1
|
||||
/ jsr pc,alterchar
|
||||
/
|
||||
alterchar:
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
.if testing
|
||||
jsr pc,preposterous
|
||||
inc stats+8.
|
||||
.endif
|
||||
1: cmp r(r1),l(r1)
|
||||
blt 3f
|
||||
mov l(r1),r0
|
||||
inc r0
|
||||
sub a(r1),r0 /W-A+1
|
||||
jsr pc,allocate
|
||||
mov 2(sp),r0 /r1
|
||||
jsr pc,move
|
||||
jsr pc,swap
|
||||
jsr pc,release
|
||||
mov 2(sp),r1 /r1
|
||||
cmp r(r1),l(r1)
|
||||
blt 3f
|
||||
jmp err
|
||||
/
|
||||
3: movb (sp),*r(r1)
|
||||
inc r(r1)
|
||||
cmp r(r1),w(r1)
|
||||
ble 1f
|
||||
mov r(r1),w(r1)
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
tst (sp)+
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to move the contents of one string
|
||||
/ to another.
|
||||
/
|
||||
/ mov source,r0
|
||||
/ mov dest,r1
|
||||
/ jsr pc,move
|
||||
/
|
||||
/ on return, r1 points to the new string and should
|
||||
/ be saved. r0 is preserved.
|
||||
/
|
||||
move:
|
||||
mov r3,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
mov w(r0),r2
|
||||
sub a(r0),r2 /W-A
|
||||
mov l(r1),r3
|
||||
sub a(r1),r3 /L-A
|
||||
cmp r2,r3
|
||||
ble 1f
|
||||
mov r2,r0
|
||||
jsr pc,allocate
|
||||
mov 2(sp),r0 /r1
|
||||
jsr pc,swap
|
||||
jsr pc,release
|
||||
mov r0,r1
|
||||
mov 0(sp),r0 /r0
|
||||
/
|
||||
1: mov a(r0),(r0)
|
||||
mov a(r1),(r1)
|
||||
1: dec r2
|
||||
blt 1f
|
||||
movb *(r0),*(r1)
|
||||
inc (r0)
|
||||
inc (r1)
|
||||
br 1b
|
||||
/
|
||||
/ fix up read ptr of new string
|
||||
/
|
||||
1: mov r(r0),r2
|
||||
sub a(r0),r2
|
||||
add a(r1),r2
|
||||
mov r2,r(r1)
|
||||
/
|
||||
/ restore and return
|
||||
/
|
||||
mov (sp)+,r0
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r3
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to rewind read pointer of string
|
||||
/ pointed to by r1
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,rewind
|
||||
/
|
||||
rewind:
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+10.
|
||||
.endif
|
||||
mov a(r1),r(r1)
|
||||
rts pc
|
||||
/
|
||||
/ routine to rewind write pointer of string
|
||||
/ pointed to by r1
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,create
|
||||
/
|
||||
create:
|
||||
.if testing
|
||||
jsr pc,plausible
|
||||
inc stats+10.
|
||||
.endif
|
||||
mov a(r1),w(r1)
|
||||
mov a(r1),r(r1)
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to zero a string
|
||||
/
|
||||
/ mov ...,r1
|
||||
/ jsr pc,zero
|
||||
/
|
||||
zero:
|
||||
mov r0,-(sp)
|
||||
.if testing
|
||||
jsr pc,preposterous
|
||||
.endif
|
||||
mov a(r1),r0
|
||||
1: cmp r0,l(r1)
|
||||
bhis 1f
|
||||
clrb (r0)+
|
||||
br 1b
|
||||
1: mov (sp)+,r0
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
Reference in New Issue
Block a user