mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-11 23:53:34 +00:00
58 lines
2.2 KiB
Plaintext
58 lines
2.2 KiB
Plaintext
br 1f / char in list, if none available branch to put
|
|
/ process to sleep
|
|
/ jsr r0,starlpt / try to output character
|
|
/ clr *$ps / set processor priority = 0
|
|
/ rts r0 / return
|
|
/1:
|
|
/ mov r1,-(sp) / place character on stack
|
|
/ jsr r0,sleep; 5 / put process to sleep
|
|
/ mov (sp)+,r1 / place character on stack
|
|
/ br lptoc
|
|
|
|
getc: / get a character off character list
|
|
mov (r0)+,r1 / put argument in getc call in r1 (char list id)
|
|
jsr r0,get
|
|
br 1f / empty char list return
|
|
decb cc(r1) / decrement number of char in char list
|
|
mov $-1,r1 / load minus 1 in r1
|
|
jsr r0,put / put char back on free list
|
|
movb clist-2(r2),r1 / put char in r1
|
|
tst (r0)+ / bump r0 for non blank char list return
|
|
1:
|
|
rts r0
|
|
|
|
putc:
|
|
mov r1,-(sp) / save char on stack
|
|
mov $-1,r1 / put free list list id in r1
|
|
jsr r0,get / take char off free list / clist slot taken
|
|
/ identified by r2
|
|
br 1f / branch when no chars in free list
|
|
mov (r0)+,r1 / put putc call arg in r1 (i.e., list identifier)
|
|
incb cc(r1) / increment character count for list (r1)
|
|
jsr r0,put / put clist entry on list
|
|
movb (sp),clist-2(r2) / put character in new entry
|
|
1:
|
|
tst (r0)+
|
|
mov (sp)+,r1
|
|
rts r0
|
|
|
|
get:
|
|
movb cf+1(r1),r2 / move current first char offset to r2
|
|
beq 2f / no characters in char list
|
|
tst (r0)+ / bump r0, second return
|
|
cmpb r2,cl+1(r1) / r2 equal to last char offset
|
|
beq 1f / yes, (i.e., entire char list scanned), branch to 1f
|
|
bic $!377,r2 / clear bits 8-15 in r2
|
|
asl r2 / multiply r2 by 2 to get offset in clist
|
|
movb clist-1(r2),cf+1(r1) / move next char in list pointer to
|
|
/ first char offset ptr
|
|
br 2f
|
|
1:
|
|
clrb cf+1(r1) / clear first char clist offset
|
|
clrb cl+1(r1) / clear last char clist offset
|
|
bic $!377,r2 / zero top half of r2
|
|
asl r2 / multiply r2 by 2
|
|
2:
|
|
rts r0
|
|
|