
rdch:           command(rdch)
                readdata
                return(data)

wrch(ch):       command(wrch)
                writedata(ch)
                return


command(c):     write(cmd,c)
                read
                unless =(ack,c) do restart
                return


readdata:       read
                if =(data,7bits) goto data7
                if =(data,4bits) goto data4
                do restart

data7:          write(ack,data7)
                return(data)

data4:          write(ack,data4)
                read
                if =(data,4bits) goto data8
                do restart

data8:          write(ack,data4)
                return(data)


writedata7:     write(data,7bits)
                read
                unless =(ack,7bits) do restart
                return


writedata8:     write(data,4bits)
                read
                unless =(ack,4bits) do restart
                write(data,4bits)
                read
                unless =(ack,4bits) do restart



restart:        call reset
                goto resetaddress



reset:          get
                put     cmd/reset
                read
                cmp     ack/reset
                jne     reset
                ret


