NEW AUTO 3,1 .LIST OFF *-------------------------------------- * Driver Code *-------------------------------------- ZPIOCTL .EQ ZPDRV ZPBufPtr .EQ ZPDRV+2 ZPCount .EQ ZPDRV+4 ZPnCount .EQ ZPDRV+6 ZPFCS .EQ ZPDRV+8 ZPb7D .EQ ZPDRV+10 .DO DBG=1 TempB .EQ ZPDRV+11 .FIN *-------------------------------------- DRV.CS.START cld! jmp (.1,x) .1 .DA STATUS .DA A2osX.BADCALL .DA A2osX.BADCALL .DA A2osX.BADCALL .DA CONTROL .DA A2osX.BADCALL .DA OPEN .DA CLOSE .DA READ .DA WRITE .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs .1 ldy #3 .2 lda DIB,y sta (ZPBufPtr),y dey bpl .2 clc rts STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.NIC-1 .2 lda DCB,y sta (ZPBufPtr),y dey bpl .2 clc rts .3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S and #S.DIB.S.OPENED beq OPEN.E lda INBUF.CNT ora INBUF.CNT+1 bne .8 NO DATA? eof = TRUE lda #1 clc rts .8 lda #0 clc rts STATUS.9 lda #MLI.E.BADCTL sec rts *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init ldy #S.IOCTL.C lda (ZPIOCTL),y cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.NIC-1 .2 lda (ZPBufPtr),y sta DCB,y dey bpl .2 *-------------------------------------- OPEN lda DIB+S.DIB.S bit #S.DIB.S.OPENED beq OPEN.1 OPEN.E lda #MLI.E.OPEN sec rts OPEN.1 >LDYAI INBUF.SIZE >SYSCALL2 GetMem bcs .9 stx hINBUF >STYA READ.GetByte.BUF+1 >STYA READ.SSC.BUF+1 sta INBUF.BASEH stz INBUF.TAIL stz INBUF.TAIL+1 stz INBUF.HEAD stz INBUF.HEAD+1 stz INBUF.CNT stz INBUF.CNT+1 lda #S.DIB.S.OPENED tsb DIB+S.DIB.S clc .9 rts *-------------------------------------- CLOSE php sei ldx DEVSLOTn08F lda #SSC.CMD.RIRQDIS sta SSC.CMD-$8F,x Applewin Bug ??? stz SSC.RESET-$8F,x lda #S.DIB.S.OPENED trb DIB+S.DIB.S lda hINBUF >SYSCALL2 FreeMem plp clc rts *-------------------------------------- READ >STYA ZPIOCTL .1 jsr READ.SSC bcs .99 .2 bit INBUF.MidFrame bmi .97 jsr READ.Sync bcs .98 cmp #$C0 C021 = LCP beq .6 tay 0021 = IP bne .2 jsr READ.GetByteEsc bcs .98 cmp #$21 bne .2 jsr READ.GetByteEsc bcs .98 cmp #$45 45 = S.IP.V.IHL bne .2 jsr READ.GetByteEsc bcs .98 * tay ignore DSCP.ECN * bne .2 jsr READ.GetByteEsc HHLL = S.IP.TOTAL.LENGTH bcs .98 sta ZPCount+1 eor #$ff sta ZPnCount+1 jsr READ.GetByteEsc bcs .98 sta ZPCount eor #$ff * clc adc #4 already 4 bytes read sta ZPnCount bcc .3 inc ZPnCount+1 .3 jsr READ.NewFrame bcs .99 phx hFrame jsr READ.GetFrame pla bcc .99 >SYSCALL2 FreeMem lda #MLI.E.IO sec .99 rts *-------------------------------------- .6 jsr READ.GetByteEsc bcs .98 cmp #$21 C021 = LCP bne .2 jsr READ.GetByteEsc bcs .98 cmp #$09 EchoReq ? bne .2 ldy #7 .7 jsr READ.GetByteEsc dey bne .7 jsr READ.GetFrameTail bcs .98 jsr READ.SendEchoRep jmp .2 .97 sec .98 lda #E.NODATA rts *-------------------------------------- READ.SSC php sei stz INBUF.LastByte .DO DBG=1 stz INBUF.FirstByte stz TempB .FIN ldx DEVSLOTn08F lda SSC.STATUS-$8F,x bit #SSC.STATUS.nDCD true when 0 bne .9 .DO SWFC=1 lda #C.XON sta SSC.DATA-$8F,x .FIN .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN ldy #0 .2 lda SSC.STATUS-$8F,x and #SSC.STATUS.RDRF bne .3 iny bne .2 .DO SWFC=1 lda #C.XOFF sta SSC.DATA-$8F,x .FIN .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN plp clc rts .3 lda SSC.DATA-$8F,x cmp #$7E beq .4 cmp #$FF bne .4 lda #$7E jsr READ.SSC.StoreByte lda #$ff .4 .DO DBG=1 sta INBUF.FirstByte inc TempB .FIN jsr READ.SSC.StoreByte .40 ldy #0 .5 lda SSC.STATUS-$8F,x and #SSC.STATUS.RDRF beq .6 lda SSC.DATA-$8F,x sta INBUF.LastByte jsr READ.SSC.StoreByte .DO DBG=1 inc TempB .FIN bra .40 .6 iny bne .5 .DO SWFC=1 lda #C.XOFF sta SSC.DATA-$8F,x .FIN .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN .DO DBG=1 lda TempB beq .7 ldy #34 jsr READ.SCC.PrintAy lda INBUF.FirstByte jsr READ.SCC.PrintAy lda INBUF.LastByte jsr READ.SCC.PrintAy .FIN .7 sec lda INBUF.LastByte eor #$7E bne .8 clc .8 ror INBUF.MidFrame plp clc rts .9 lda #MLI.E.IO plp sec .99 rts *-------------------------------------- .DO DBG=1 READ.SCC.PrintAy pha lsr lsr lsr lsr jsr .1 pla and #$0F .1 ora #$B0 cmp #"9"+1 bcc .2 adc #6 .2 sta $7D0,y iny rts .FIN *-------------------------------------- READ.SSC.StoreByte READ.SSC.BUF sta $FFFF SELF MODIFIED inc READ.SSC.BUF+1 bne .1 inc READ.SSC.BUF+2 .1 inc INBUF.CNT bne .2 inc INBUF.CNT+1 .2 inc INBUF.HEAD bne .8 inc INBUF.HEAD+1 lda INBUF.HEAD+1 eor /INBUF.SIZE bne .8 stz INBUF.HEAD+1 lda INBUF.BASEH sta READ.SSC.BUF+2 .8 rts *-------------------------------------- READ.NewFrame lda ZPCount clc adc #S.ETH.EII ldy #S.IOCTL.BYTECNT sta (ZPIOCTL),y pha lda ZPCount+1 adc /S.ETH.EII iny sta (ZPIOCTL),y ply >SYSCALL2 GetMem bcs .9 >STYA ZPBufPtr phy ldy #S.IOCTL.BUFPTR+1 sta (ZPIOCTL),y dey pla sta (ZPIOCTL),y ldy #S.ETH.EII.TYPE-1 lda #0 .1 sta (ZPBufPtr),y Zero Src/Dst MAC dey bpl .1 ldy #S.ETH.EII.TYPE lda /S.ETH.EII.TYPE.IP sta (ZPBufPtr),y iny lda #S.ETH.EII.TYPE.IP sta (ZPBufPtr),y ldy #S.IP.V.IHL lda #$45 sta (ZPBufPtr),y iny lda #0 sta (ZPBufPtr),y iny S.IP.TOTAL.LENGTH lda ZPCount+1 sta (ZPBufPtr),y iny lda ZPCount sta (ZPBufPtr),y iny tya * clc adc ZPBufPtr sta ZPBufPtr bcc .8 inc ZPBufPtr+1 clc .8 * clc .9 rts *-------------------------------------- READ.GetFrame inc ZPnCount bne .1 inc ZPnCount+1 beq READ.GetFrameTail .1 jsr READ.GetByteEsc bcs READ.GetFrame.RTS sta (ZPBufPtr) inc ZPBufPtr bne READ.GetFrame inc ZPBufPtr+1 bra READ.GetFrame READ.GetFrameTail jsr READ.GetByteEsc skip FCS HI bcs .9 jsr READ.GetByteEsc skip FCS LO bcs .9 jsr READ.GetByte bcs .9 eor #$7E beq .9 sec .9 READ.GetFrame.RTS rts *-------------------------------------- READ.Sync jsr READ.GetByte bcs READ.GetByte.RTS .1 cmp #$7E bne READ.Sync jsr READ.GetByteEsc bcs READ.GetByte.RTS cmp #$FF bne .1 jsr READ.GetByteEsc bcs READ.GetByte.RTS cmp #$03 bne .1 *-------------------------------------- READ.GetByteEsc jsr READ.GetByte bcs READ.GetByte.RTS cmp #$7D bne READ.GetByte.8 jsr READ.GetByte bcs READ.GetByte.RTS eor #%00100000 * clc rts READ.GetByte lda INBUF.CNT bne READ.GetByte.1 lda INBUF.CNT+1 beq READ.GetByte.9 dec INBUF.CNT+1 READ.GetByte.1 dec INBUF.CNT READ.GetByte.BUF lda $FFFF SELF MODIFIED inc READ.GetByte.BUF+1 bne .1 inc READ.GetByte.BUF+2 .1 inc INBUF.TAIL bne READ.GetByte.8 inc INBUF.TAIL+1 phy ldy INBUF.TAIL+1 cpy /INBUF.SIZE bne .7 stz INBUF.TAIL+1 ldy INBUF.BASEH sty READ.GetByte.BUF+2 .7 ply READ.GetByte.8 clc rts READ.GetByte.9 sec READ.GetByte.RTS rts *-------------------------------------- READ.SendEchoRep .DO DBG=1 lda #"P" sta $7D0+33 .FIN ldx DEVSLOTn08F .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN lda #$7E jsr WRITE.Byte ldy #0 .1 lda LCP.EchoRep,y jsr WRITE.ByteEsc iny cpy #LCP.EchoRep.TOTAL bne .1 lda #$7E jsr WRITE.Byte .2 lda SSC.STATUS-$8F,x bit #SSC.STATUS.TDRE Register Empty ? beq .2 .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN rts *-------------------------------------- * 7E FF 03 00 21 ... FCS FCS 7E *-------------------------------------- WRITE >STYA ZPIOCTL ldy #S.IOCTL.BUFPTR lda (ZPIOCTL),y clc adc #S.ETH.EII sta ZPBufPtr iny lda (ZPIOCTL),y adc /S.ETH.EII sta ZPBufPtr+1 iny #S.IOCTL.BYTECNT lda (ZPIOCTL),y sec sbc #S.ETH.EII eor #$ff sta ZPCount iny lda (ZPIOCTL),y sbc /S.ETH.EII eor #$ff sta ZPCount+1 ldx DEVSLOTn08F php sei lda SSC.STATUS-$8F,x bit #SSC.STATUS.nDCD true when 0 bne .9 .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN lda #$ff sta ZPFCS sta ZPFCS+1 lda #$7E jsr WRITE.Byte lda #$FF jsr WRITE.ByteEscFCS lda #$03 jsr WRITE.ByteEscFCS lda #$00 jsr WRITE.ByteEscFCS lda #$21 jsr WRITE.ByteEscFCS .1 inc ZPCount bne .2 inc ZPCount+1 beq .8 .2 lda (ZPBufPtr) jsr WRITE.ByteEscFCS inc ZPBufPtr bne .1 inc ZPBufPtr+1 bra .1 .8 lda ZPFCS eor #$ff jsr WRITE.ByteEsc lda ZPFCS+1 eor #$ff jsr WRITE.ByteEsc lda #$7E jsr WRITE.Byte .DO HWFC=1 lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.DTR sta SSC.CMD-$8F,x .FIN plp clc rts .9 lda #MLI.E.IO plp sec rts *-------------------------------------- WRITE.ByteEscFCS pha eor ZPFCS tay lda FCS.LO,y eor ZPFCS+1 sta ZPFCS lda FCS.HI,y sta ZPFCS+1 pla *-------------------------------------- WRITE.ByteEsc cmp #$7D beq .1 cmp #$7E beq .1 cmp #32 bcs WRITE.Byte tax bit ACCM.OUT,x php ldx DEVSLOTn08F plp bpl WRITE.Byte .1 eor #%00100000 pha lda #$7D jsr WRITE.Byte .HS 89 BIT imm WRITE.Byte pha .1 lda SSC.STATUS-$8F,x bit #SSC.STATUS.TDRE Register Empty ? beq .1 pla sta SSC.DATA-$8F,x rts *-------------------------------------- STATUS.CONTROL.Init >STYA ZPIOCTL ldy #S.IOCTL.BUFPTR lda (ZPIOCTL),y sta ZPBufPtr iny lda (ZPIOCTL),y sta ZPBufPtr+1 rts *-------------------------------------- DRV.CS.END *-------------------------------------- DEVSLOTn08F .BS 1 hINBUF .BS 1 INBUF.BASEH .BS 1 INBUF.TAIL .BS 2 INBUF.HEAD .BS 2 INBUF.CNT .BS 2 .DO DBG=1 INBUF.FirstByte .BS 1 .FIN INBUF.LastByte .BS 1 INBUF.MidFrame .BS 1 *-------------------------------------- DIB .DA #0 .DA #0,#0,#0 size .PS "SSC/PPP Driver " .DA #S.DIB.T.NIC .DA #0 .DA K.VER *-------------------------------------- DCB .DA #S.DCB.T.NIC .DA #S.DCB.NIC.FLAGS.ARPOFFLOAD .DA #S.DCB.NIC.LINK.OK+S.DCB.NIC.LINK.FD .DA #S.DCB.NIC.SPEED.10 .HS 000A1A123456 MAC DCB.IP .BS 4 DCB.MASK .HS FF.FF.FF.FF DCB.GW .BS 4 *-------------------------------------- ACCM.OUT .HS 8080808080808080 Default = FFFFFFFF .HS 8080808080808080 .HS 8080808080808080 .HS 8080808080808080 *-------------------------------------- FRAME.HEADER .HS 7E 7EFF03 LCP.EchoRep .HS FF03 .HS C021 LCP LCP.EchoRep.DATA .HS 0A Echo-Reply .HS FF ID .DA /LCP.EchoRep.LEN,#LCP.EchoRep.LEN .HS 05.06.EA4C2B41 MAGIC LCP.EchoRep.LEN .EQ *-LCP.EchoRep.DATA .BS 2 FCS LCP.EchoRep.TOTAL .EQ *-LCP.EchoRep *-------------------------------------- FCS.LO .DA #$0000,#$1189,#$2312,#$329b,#$4624,#$57ad,#$6536,#$74bf .DA #$8c48,#$9dc1,#$af5a,#$bed3,#$ca6c,#$dbe5,#$e97e,#$f8f7 .DA #$1081,#$0108,#$3393,#$221a,#$56a5,#$472c,#$75b7,#$643e .DA #$9cc9,#$8d40,#$bfdb,#$ae52,#$daed,#$cb64,#$f9ff,#$e876 .DA #$2102,#$308b,#$0210,#$1399,#$6726,#$76af,#$4434,#$55bd .DA #$ad4a,#$bcc3,#$8e58,#$9fd1,#$eb6e,#$fae7,#$c87c,#$d9f5 .DA #$3183,#$200a,#$1291,#$0318,#$77a7,#$662e,#$54b5,#$453c .DA #$bdcb,#$ac42,#$9ed9,#$8f50,#$fbef,#$ea66,#$d8fd,#$c974 .DA #$4204,#$538d,#$6116,#$709f,#$0420,#$15a9,#$2732,#$36bb .DA #$ce4c,#$dfc5,#$ed5e,#$fcd7,#$8868,#$99e1,#$ab7a,#$baf3 .DA #$5285,#$430c,#$7197,#$601e,#$14a1,#$0528,#$37b3,#$263a .DA #$decd,#$cf44,#$fddf,#$ec56,#$98e9,#$8960,#$bbfb,#$aa72 .DA #$6306,#$728f,#$4014,#$519d,#$2522,#$34ab,#$0630,#$17b9 .DA #$ef4e,#$fec7,#$cc5c,#$ddd5,#$a96a,#$b8e3,#$8a78,#$9bf1 .DA #$7387,#$620e,#$5095,#$411c,#$35a3,#$242a,#$16b1,#$0738 .DA #$ffcf,#$ee46,#$dcdd,#$cd54,#$b9eb,#$a862,#$9af9,#$8b70 .DA #$8408,#$9581,#$a71a,#$b693,#$c22c,#$d3a5,#$e13e,#$f0b7 .DA #$0840,#$19c9,#$2b52,#$3adb,#$4e64,#$5fed,#$6d76,#$7cff .DA #$9489,#$8500,#$b79b,#$a612,#$d2ad,#$c324,#$f1bf,#$e036 .DA #$18c1,#$0948,#$3bd3,#$2a5a,#$5ee5,#$4f6c,#$7df7,#$6c7e .DA #$a50a,#$b483,#$8618,#$9791,#$e32e,#$f2a7,#$c03c,#$d1b5 .DA #$2942,#$38cb,#$0a50,#$1bd9,#$6f66,#$7eef,#$4c74,#$5dfd .DA #$b58b,#$a402,#$9699,#$8710,#$f3af,#$e226,#$d0bd,#$c134 .DA #$39c3,#$284a,#$1ad1,#$0b58,#$7fe7,#$6e6e,#$5cf5,#$4d7c .DA #$c60c,#$d785,#$e51e,#$f497,#$8028,#$91a1,#$a33a,#$b2b3 .DA #$4a44,#$5bcd,#$6956,#$78df,#$0c60,#$1de9,#$2f72,#$3efb .DA #$d68d,#$c704,#$f59f,#$e416,#$90a9,#$8120,#$b3bb,#$a232 .DA #$5ac5,#$4b4c,#$79d7,#$685e,#$1ce1,#$0d68,#$3ff3,#$2e7a .DA #$e70e,#$f687,#$c41c,#$d595,#$a12a,#$b0a3,#$8238,#$93b1 .DA #$6b46,#$7acf,#$4854,#$59dd,#$2d62,#$3ceb,#$0e70,#$1ff9 .DA #$f78f,#$e606,#$d49d,#$c514,#$b1ab,#$a022,#$92b9,#$8330 .DA #$7bc7,#$6a4e,#$58d5,#$495c,#$3de3,#$2c6a,#$1ef1,#$0f78 *-------------------------------------- FCS.HI .DA /$0000,/$1189,/$2312,/$329b,/$4624,/$57ad,/$6536,/$74bf .DA /$8c48,/$9dc1,/$af5a,/$bed3,/$ca6c,/$dbe5,/$e97e,/$f8f7 .DA /$1081,/$0108,/$3393,/$221a,/$56a5,/$472c,/$75b7,/$643e .DA /$9cc9,/$8d40,/$bfdb,/$ae52,/$daed,/$cb64,/$f9ff,/$e876 .DA /$2102,/$308b,/$0210,/$1399,/$6726,/$76af,/$4434,/$55bd .DA /$ad4a,/$bcc3,/$8e58,/$9fd1,/$eb6e,/$fae7,/$c87c,/$d9f5 .DA /$3183,/$200a,/$1291,/$0318,/$77a7,/$662e,/$54b5,/$453c .DA /$bdcb,/$ac42,/$9ed9,/$8f50,/$fbef,/$ea66,/$d8fd,/$c974 .DA /$4204,/$538d,/$6116,/$709f,/$0420,/$15a9,/$2732,/$36bb .DA /$ce4c,/$dfc5,/$ed5e,/$fcd7,/$8868,/$99e1,/$ab7a,/$baf3 .DA /$5285,/$430c,/$7197,/$601e,/$14a1,/$0528,/$37b3,/$263a .DA /$decd,/$cf44,/$fddf,/$ec56,/$98e9,/$8960,/$bbfb,/$aa72 .DA /$6306,/$728f,/$4014,/$519d,/$2522,/$34ab,/$0630,/$17b9 .DA /$ef4e,/$fec7,/$cc5c,/$ddd5,/$a96a,/$b8e3,/$8a78,/$9bf1 .DA /$7387,/$620e,/$5095,/$411c,/$35a3,/$242a,/$16b1,/$0738 .DA /$ffcf,/$ee46,/$dcdd,/$cd54,/$b9eb,/$a862,/$9af9,/$8b70 .DA /$8408,/$9581,/$a71a,/$b693,/$c22c,/$d3a5,/$e13e,/$f0b7 .DA /$0840,/$19c9,/$2b52,/$3adb,/$4e64,/$5fed,/$6d76,/$7cff .DA /$9489,/$8500,/$b79b,/$a612,/$d2ad,/$c324,/$f1bf,/$e036 .DA /$18c1,/$0948,/$3bd3,/$2a5a,/$5ee5,/$4f6c,/$7df7,/$6c7e .DA /$a50a,/$b483,/$8618,/$9791,/$e32e,/$f2a7,/$c03c,/$d1b5 .DA /$2942,/$38cb,/$0a50,/$1bd9,/$6f66,/$7eef,/$4c74,/$5dfd .DA /$b58b,/$a402,/$9699,/$8710,/$f3af,/$e226,/$d0bd,/$c134 .DA /$39c3,/$284a,/$1ad1,/$0b58,/$7fe7,/$6e6e,/$5cf5,/$4d7c .DA /$c60c,/$d785,/$e51e,/$f497,/$8028,/$91a1,/$a33a,/$b2b3 .DA /$4a44,/$5bcd,/$6956,/$78df,/$0c60,/$1de9,/$2f72,/$3efb .DA /$d68d,/$c704,/$f59f,/$e416,/$90a9,/$8120,/$b3bb,/$a232 .DA /$5ac5,/$4b4c,/$79d7,/$685e,/$1ce1,/$0d68,/$3ff3,/$2e7a .DA /$e70e,/$f687,/$c41c,/$d595,/$a12a,/$b0a3,/$8238,/$93b1 .DA /$6b46,/$7acf,/$4854,/$59dd,/$2d62,/$3ceb,/$0e70,/$1ff9 .DA /$f78f,/$e606,/$d49d,/$c514,/$b1ab,/$a022,/$92b9,/$8330 .DA /$7bc7,/$6a4e,/$58d5,/$495c,/$3de3,/$2c6a,/$1ef1,/$0f78 *-------------------------------------- DRV.END *-------------------------------------- MAN SAVE usr/src/drv/pppssc.drv.s.d LOAD usr/src/drv/pppssc.drv.s ASM