Add original unix v6
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
.globl jget,iget
|
||||
.globl succ
|
||||
.globl create,rewind,putchar,getchar,allocate
|
||||
.globl smark
|
||||
.globl rewcstr,putcstr,getcstr,size
|
||||
|
||||
/ currnet string manipulations
|
||||
/ keep a initial fragment handy for quick access
|
||||
/go to allocator for the rest
|
||||
|
||||
smark:
|
||||
jsr pc,jget
|
||||
clr cstrw
|
||||
jmp succ
|
||||
|
||||
rewcstr:
|
||||
clr cstrr
|
||||
rts pc
|
||||
|
||||
putcstr:
|
||||
mov cstrw,r1
|
||||
inc cstrw
|
||||
cmp r1,$cstrt /is it quick access?
|
||||
bge 1f
|
||||
movb r0,cstrb(r1) /yes, stash the char
|
||||
rts pc
|
||||
1:
|
||||
bne 1f
|
||||
mov r0,-(sp) /first char to allocator
|
||||
mov symp,r1
|
||||
bne 2f
|
||||
mov $64,r0
|
||||
jsr pc,allocate
|
||||
mov r1,symp
|
||||
2:
|
||||
jsr pc,create
|
||||
mov (sp)+,r0
|
||||
1:
|
||||
mov symp,r1
|
||||
jsr pc,putchar
|
||||
rts pc
|
||||
|
||||
getcstr:
|
||||
mov cstrr,r1
|
||||
cmp r1,cstrw
|
||||
blt 1f
|
||||
clr r0 /end of string
|
||||
rts pc
|
||||
1:
|
||||
inc cstrr
|
||||
cmp r1,$cstrt
|
||||
bge 1f
|
||||
movb cstrb(r1),r0
|
||||
rts pc
|
||||
1:
|
||||
bne 1f
|
||||
mov symp,r1
|
||||
jsr pc,rewind
|
||||
1:
|
||||
mov symp,r1
|
||||
jsr pc,getchar
|
||||
rts pc
|
||||
|
||||
size:
|
||||
jsr pc,iget
|
||||
mov cstrw,(r0)
|
||||
jmp succ
|
||||
|
||||
cstrt = 16 /top of quick access current string
|
||||
.data
|
||||
symp: 0 /pointer to dynamicallly allocated current string
|
||||
cstrw: 0 /current string write pointer
|
||||
.bss
|
||||
cstrr: .=.+2 /read pointer
|
||||
cstrb: .=.+cstrt /base of quick access fragment
|
||||
Reference in New Issue
Block a user