📄 io3.s
字号:
/// io3 -- Fortran I/O.globl getbuf.globl chkunit.globl creatf.globl openfsetio: mov r1,unit jsr r5,chkunit movb utable(r1),r0 beq 1f bpl 2f mov r1,r0 asl r0 mov btable(r0),r0 mov r0,r2 br 4f2: cmp (r5),r0 beq 3f jsr r5,rerr; 101. / inconsistent use of unit sys exit1: mov r1,-(sp) clr r0 dvd $10.,r0 swab r1 bis r1,r0 add $"00,r0 mov r0,filnam+4 mov (sp)+,r1 jsr r5,getbuf mov $filnam,r04: movb (r5),utable(r1) bit $1,(r5) bne 2f jsr r5,creatf br 3f2: jsr r5,openf3: tst (r5)+ asl r1 mov btable(r1),buffer rts r5getbuf: mov $utable,r0 mov $btable,r21: tstb (r0)+ beq 2f tst (r2)+ br 3f2: tst (r2)+ beq 3f mov -(r2),r0 clr (r2) mov r0,r2 br 2f3: cmp r0,$utable+20. blo 1b mov bufp,r2 add $134.,bufp mov bufp,0f sys break; 0:..2: mov r1,r0 asl r0 mov r2,btable(r0) mov r2,buffer rts r5chkunit: cmp r1,$20. blo 1f jsr r5,rerr; 100. / illegal unit number sys exit1: rts r5creatf: cmp unit,$6 bne 2f mov $1,r0 br 1f2: mov r0,0f sys creat; 0:..; 666 bec 1f jsr r5,rerr; 102. / create error sys exit1: mov r2,-(sp) mov r0,(r2)+ clr (r2)+ clr (r2)+ mov r2,-(r2) mov (sp)+,r2 rts r5openf: cmp unit,$5 bne 2f clr r0 br 1f2: mov r0,0f sys open; 0:..; 0 bec 1f jsr r5,rerr; 103. / open error sys exit1: mov r2,-(sp) mov r0,(r2)+ clr (r2)+ clr (r2)+ mov (sp)+,r2 rts r5fputc: mov r1,-(sp) mov buffer,r1 dec 2(r1) bge 1f mov r0,-(sp) jsr pc,flush1 dec 2(r1) mov (sp)+,r01: movb r0,*4(r1) inc 4(r1) mov (sp)+,r1 rts r5fflush: mov r1,-(sp) mov buffer,r1 jsr pc,flush1 mov (sp)+,r1 rts r5flush1: mov r1,r0 add $6,r0 mov r0,-(sp) mov r0,0f neg r0 add 4(r1),r0 bhis 1f mov r0,0f+2 mov (r1),r0 sys write; 0:..; ..1: mov (sp)+,4(r1) mov $128.,2(r1) rts pcfgetc: tst nlflg bne 4f mov r1,-(sp) mov buffer,r1 dec 2(r1) bge 1f mov r1,r0 add $6,r0 mov r0,0f mov r0,4(r1) mov (r1),r0 sys read; 0:..; 128. bes 2f tst r0 bne 3f2: jsr r5,rerr; 104. / EOF on input sys exit3: dec r0 mov r0,2(r1)1: clr r0 bisb *4(r1),r0 inc 4(r1) mov (sp)+,r1 tst binflg bne 1f cmp r0,$'\n bne 1f4: mov pc,nlflg mov $' ,r01: rts r5gnum: mov r1,-(sp) clr r11: jsr r5,fmtchr cmp r0,$' / beq 1b sub $'0,r0 cmp r0,$9. bhi 1f mpy $10.,r1 add r0,r1 br 1b1: mov r1,r0 mov (sp)+,r1 dec formp rts r5switch: mov (r5)+,r11: tst (r1) beq 1f cmp r0,(r1)+ bne 1b tst (sp)+ jmp *(r1)1: rts r5fmtchr: movb *formp,r0 inc formp rts r5getitm: tst itmflg bne 1f mov r5,-(sp) jmp *(r4)+1: clr itmflg tst (r5)+ rts r5/ just a fake, there's no carriage controlfputcc: cmp $' ,r0 bne 1f inc nspace rts r51: mov r0,-(sp)1: dec nspace blt 1f mov $' ,r0 jsr r5,fputc br 1b1: clr nspace mov (sp)+,r0 beq 1f jsr r5,fputc1: rts r5eorec: mov unit,r0 bitb $1,utable(r0) bne 1f clr nspace mov $'\n,r0 jsr r5,fputceorec1: clr r0 jsr r5,fputcc/ cmp unit,$6 / tty output/ bne 2f jsr r5,fflush2: rts r51: tst nlflg bne 1f jsr r5,fgetc br 1b1: clr nlflg rts r5spaces: add r1,nspace rts r5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -