📄 tp2.s
字号:
/ tap2 -- dec-tape lod/dmppstr: movb (r1)+,r0 beq 1f jsr pc,putc br pstr1: rts pcmesg: movb (r5)+,r0 beq 1f jsr pc,putc br mesg1: inc r5 bic $1,r5 rts r5putc: movb r0,ch mov $1,r0 sys write; ch; 1 rts pcgetc: clr r0 sys read; ch; 1 movb ch,r0 rts pcclrdir: mov $dir,r1 mov ndirent,r21: jsr pc,clrent sob r2,1b rts pcclrent: mov r1,-(sp) add $dirsiz,(sp)1: clr (r1)+ cmp r1,(sp) blo 1b tst (sp)+ rts pcrddir: clr sum jsr pc,clrdir clr r0 jsr pc,rseek jsr pc,tread mov tapeb+510.,r0 beq 1f tstb flm beq 1f mov r0,ndirent1: mov $dir,r1 mov ndirent,r21: bit $7,r2 bne 2f jsr pc,tread mov $tapeb,r32: mov r1,-(sp) mov r3,-(sp) mov $32.,r0 clr -(sp)2: add (r3)+,(sp) sob r0,2b bis (sp),sum tst (sp)+ bne 2f mov (sp),r3 tst (r3) beq 2f mov r3,0f jsr pc,9f.data9: jsr r5,encode; 0:.. rts pc.text add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+ / namep9: mov (r3)+,(r1)+ cmp r1,(sp) blo 9b tst (sp)+2: mov (sp)+,r3 add $64.,r3 mov (sp)+,r1 bic $100000,mode(r1) add $dirsiz,r1 sob r2,1b tst sum beq 1f jsr r5,mesg <Directory checksum\n\0>; .even tstb fli bne 1f jmp done1: jsr pc,bitmap rts pcwrdir: clr r0 jsr pc,wseek tstb flm bne 1f sys open; tboot; 0 bes 3f br 2f1: sys open; mboot; 0 bes 3f2: mov r0,r1 sys read; tapeb; 512. mov r1,r0 sys close mov ndirent,tapeb+510.3: jsr pc,twrite mov $dir,r1 mov ndirent,r21: bit $7,r2 bne 2f mov $256.,r0 mov $tapeb,r33: clr (r3)+ sob r0,3b mov $tapeb,r32: mov r3,-(sp) tst (r1) beq 2f mov r3,0f jsr pc,9f.data9: jsr r5,decode; 0:.. rts pc.text2: add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+9: mov (r1)+,(r3)+ cmp r1,(sp) blo 9b tst (sp)+ mov (sp)+,r3 clr -(sp) mov $31.,r02: sub (r3)+,(sp) sob r0,2b mov (sp)+,(r3)+ dec r2 bit $7,r2 bne 1b jsr pc,twrite tst r2 bne 1b rts pctread: mov fio,r0 sys read; tapeb; 512. bes trderr cmp r0,$512. bne trderr1: inc rseeka rts pctrderr: jsr r5,mesg <Tape read error\n\0>; .even tstb fli beq 1f mov $tapeb,r02: clr (r0)+ cmp r0,$tapeb+512. blo 2b br 1b1: jmp donetwrite: mov fio,r0 sys write; tapeb; 512. bes twrerr cmp r0,$512. bne twrerr inc wseeka rts pctwrerr: jsr r5,mesg <Tape write error\n\0>; .even jmp donerseek: mov r0,rseeka mov r0,0f mov fio,r0 sys 0; 9f.data9: sys seek; 0:..; 3.text bes seekerr rts pcwseek: mov r0,-(sp) sub wseeka,r0 bge 1f neg r01: cmp r0,$25. / longest write seek ble 1f mov (sp),0f beq 2f dec 0f2: mov fio,r0 sys 0; 9f.data9: sys seek; 0:..; 3.text mov fio,r0 sys read; wseeka; 11: mov (sp),wseeka mov (sp)+,0f mov fio,r0 sys 0; 9f.data9: sys seek; 0:..; 3.text bes seekerr rts pcseekerr: jsr r5,mesg<Tape seek error\n\0>; .even jmp doneverify: movb (r5)+,0f inc r5 tstb flw bne 1f tstb flv beq 2f1: jsr pc,9f.data9: jsr r5,mesg 0:<x \0>; .even rts pc.text mov r1,-(sp) mov $name,r1 jsr pc,pstr mov (sp)+,r1 tstb flw beq 1f jsr r5,mesg < \0> jsr pc,getc cmp r0,$'x bne 3f jsr pc,getc jmp done3: cmp r0,$'\n beq 3f cmp r0,$'y bne 4f jsr pc,getc cmp r0,$'\n beq 2f4: jsr pc,getc cmp r0,$'\n bne 4b br 1b1: jsr r5,mesg <\n\0>2: tst (r5)+3: rts r5getfiles: cmp narg,$2 bne 1f mov $".\0,name jsr pc,callout1: cmp narg,$2 ble 1f dec narg mov *parg,r1 add $2,parg mov $name,r22: movb (r1)+,(r2)+ bne 2b jsr pc,callout br 1b1: rts pcexpand: sys open; name; 0 bes fserr mov r0,-(sp)1: mov (sp),r0 sys read; catlb; 16. bes fserr tst r0 beq 1f tst catlb beq 1b mov $name,r0 mov $catlb+2,r1 cmpb (r1),$'. beq 1b2: tstb (r0)+ bne 2b dec r0 mov r0,-(sp) cmpb -1(r0),$'/ beq 2f movb $'/,(r0)+2: movb (r1)+,(r0)+ bne 2b jsr pc,callout clrb *(sp)+ br 1b1: mov (sp)+,r0 sys close rts pcfserr: mov $name,r1 jsr pc,pstr jsr r5,mesg < -- Cannot open file\n\0>; .even jmp donecallout: sys stat; name; statb bes fserr mov statb+4,r0 bic $!60000,r0 beq 1f cmp r0,$40000 beq expand rts pc1: mov $dir,r1 clr -(sp)1: tst (r1) bne 3f tst (sp) bne 2f mov r1,(sp)2: add $dirsiz,r1 cmp r1,edir blo 1b mov (sp)+,r1 bne 4f jsr r5,mesg <Directory overflow\n\0>; .even jmp done4: jsr r5,verify; 'a rts pc jsr r5,encode; name br 2f3: jsr r5,decode; name1 mov $name,r2 mov $name1,r33: cmpb (r2)+,(r3) bne 2b tstb (r3)+ bne 3b tst (sp)+ tstb flu beq 3f cmp time0(r1),statb+32. blo 3f bhi 1f cmp time1(r1),statb+34. bhis 1f3: jsr r5,verify; 'r rts pc2: mov statb+4,mode(r1) bis $100000,mode(r1) movb statb+7,uid(r1) movb statb+8,gid(r1) tstb flf beq 2f clrb statb+9. clr statb+10.2: movb statb+9.,size0(r1) mov statb+10.,size1(r1) mov statb+32.,time0(r1) mov statb+34.,time1(r1)1: rts pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -