📄 alloc2.s
字号:
// 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,clean1: 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 r31: 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 pc2: 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,r41: cmp r4,nbuf bge 1f cmp u1(r3),u1(r2) bhis 2f mov r3,r22: inc r4 add $2.,r3 br 1b1: 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 1f2: 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,plausible1: 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,getbuf2: 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 1f2: 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,flag2: mov r1,u1(r2) dec r1 bge 1f mov (sp)+,r3 mov (sp)+,r1 rts pc1: clr r2 mov $2,r31: cmp r3,nbuf2 bge 2b cmp u1(r3),u1(r2) blo 2f mov r3,r22: add $2,r3 br 1b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -