Research V6 development
authorKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:49:31 +0000 (19:49 -0500)
committerKen Thompson <ken@research.uucp>
Wed, 14 May 1975 00:49:31 +0000 (19:49 -0500)
Work on file usr/source/s1/dc4.s

Synthesized-from: v6

usr/source/s1/dc4.s [new file with mode: 0644]

diff --git a/usr/source/s1/dc4.s b/usr/source/s1/dc4.s
new file mode 100644 (file)
index 0000000..cdc6bda
--- /dev/null
@@ -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
+/
+/