        tst    r1 / positive i-number ?
        bge    error1 / yes, error 1 negative i-number means write
        neg    r1 / make it positive
        jsr    r0,writei / write data
1:
        mov    u.nread,*u.r0 / put no. of bytes transferred into (u.r0)
        br     sysret1

rw1:
        jsr    r0,arg; u.base / get buffer pointer
        jsr    r0,arg; u.count / get no. of characters
        mov    *u.r0,r1 / put file descriptor (index to u.fp table) in r1
        jsr    r0,getf / get i-number of the file in r1
        rts    r0

sysopen:
        jsr    r0,arg2 / get sys args into u.namep and on stack
        jsr    r0,namei / i-number of file in r1
        br     error2 / file not found
        tst    (sp) / is mode = 0 (2nd arg of call; 0 means, open for read)
        beq    1f / yes, leave i-number positive
        neg    r1 / open for writing so make i-number negative
1:
        jsr    r0,iopen / open file whose i-number is in r1
        tst    (sp)+ / pop the stack and test the mode
        beq    op1 / is open for read op1

op0:
        neg    r1 / make i-number positive if open for writing
op1:
        clr    r2 / clear registers
        clr    r3
1: / scan the list of entries in fsp table
        tstb   u.fp(r2) / test the entry in the u.fp list
        beq    1f / if byte in list is 0 branch
        inc    r2 / bump r2 so next byte can be checked
        cmp    r2,$10. / reached end of list?
        blt    1b / no, go back
        br     error2 / yes, error (no files open)
1:
        tst    fsp(r3) / scan fsp entries
        beq    1f / if 0 branch
        add    $8.,r3 / add 8 to r3 to bump it to next entry mfsp table
        cmp    r3,$[nfiles*8.] / done scanning
        blt    1b / no, back
        br     error2 / yes, error
1: / r2 has index to u.fp list; r3, has index to fsp table
        mov    r1,fsp(r3) / put i-number of open file into next available
        mov    cdev,fsp+2(r3) / entry in fsp table, put # of device in
                              / next word
        clr    fsp+4(r3)
        clr    fsp+6(r3) / clear the next two words
        asr    r3
        asr    r3 / divide by 8 to get number of the fsp entry-1
        asr    r3
        inc    r3 / add 1 to get fsp entry number
