Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-03-11 22:40:55 +01:00
parent abe684f04c
commit 1e86624d74
26 changed files with 1188 additions and 764 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -330,16 +330,6 @@ CS.RUN.LL.DISKII
jsr CS.RUN.Wait jsr CS.RUN.Wait
bcs CS.RUN.LL.RTS bcs CS.RUN.LL.RTS
>LDYAI 4096
>SYSCALL GetMem
bcs CS.RUN.LL.RTS
stx hTrackBuf
>STYA ZPPtr1
ldx #16
jsr CS.RUN.ZeroPtr1 16 sectors filled with 0, give some time to spin up
stz CurTrack stz CurTrack
stz CurQTrack stz CurQTrack
@ -361,7 +351,7 @@ CS.RUN.LL.DISKII
>PUSHB DSSS0000 >PUSHB DSSS0000
>PUSHB VolNum >PUSHB VolNum
>PUSHB CurTrack >PUSHB CurTrack
>PUSHW ZPPtr1 >PUSHWI 0 Empty track
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s
bcs .9 bcs .9
@ -401,17 +391,18 @@ CS.RUN.LL.DISKII
jsr CS.RUN.LL.DISKII.V jsr CS.RUN.LL.DISKII.V
bcs .99 bcs .99
jsr CS.RUN.MotorOn * jsr CS.RUN.MotorOn
lda #5 * lda #10
jsr CS.RUN.Wait * jsr CS.RUN.Wait
.80 .80
>PUSHB DSSS0000 * >PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate * >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
* lda #10
* jsr CS.RUN.Wait
lda #5
jsr CS.RUN.Wait
clc clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------

View File

@ -11,7 +11,7 @@ NEW
.INB inc/eth.i .INB inc/eth.i
.INB inc/libtcpip.i .INB inc/libtcpip.i
*-------------------------------------- *--------------------------------------
TIMEOUT.MAX .EQ 200 20 sec. TIMEOUT.MAX .EQ 250 25 sec.
MSGSIZE .EQ 1024 MSGSIZE .EQ 1024
TEXTMAX .EQ 240 TEXTMAX .EQ 240
*-------------------------------------- *--------------------------------------
@ -23,22 +23,21 @@ ZS.START
ZPPtr1 .BS 2 ZPPtr1 .BS 2
hSocket .BS 1 hSocket .BS 1
hFile .BS 1
hLineBuf .BS 1 hLineBuf .BS 1
ZPLineBufPtr .BS 2 ZPLineBufPtr .BS 2
TextPtr .BS 1 TextPtr .BS 1
TextLen .BS 1 TextLen .BS 1
hText .BS 1
ZPTextPtr .BS 2 ZPTextPtr .BS 2
hText .BS 1
bEscMode .BS 1 bEscMode .BS 1
TimeOut .BS 1 TimeOut .BS 1
bJoin .BS 1 bJoin .BS 1
hMsgBuf .BS 1 hMsgBuf .BS 1
MsgLen .BS 1
ZPMsgPtr .BS 2 ZPMsgPtr .BS 2
ZPMsgPfxPtr .BS 2 ZPMsgPfxPtr .BS 2
@ -46,8 +45,14 @@ ZPMsgCmdPtr .BS 2
ZPMsgArgPtr .BS 2 ZPMsgArgPtr .BS 2
ZPMsgExtPtr .BS 2 ZPMsgExtPtr .BS 2
ZS.END hReqBuf .BS 1
.ED ReqPtr .BS 1
ReqLen .BS 1
hRespBuf .BS 1
ZPReqPtr .BS 2
ZPRespPtr .BS 2
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -71,7 +76,6 @@ L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.NOD.Template .DA NOD.Template
L.MSG.IPKO .DA MSG.IPKO L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.UNKNOWN .DA MSG.UNKNOWN
@ -119,163 +123,41 @@ J.ESC .DA CS.RUN.CHARIN.LEFT
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib >SYSCALL LoadLib
bcs .9 bcs .9
sta hLIBTCPIP sta hLIBTCPIP
.9 rts .9
CS.INIT.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? CS.RUN jsr CS.RUN.CheckTCPIP
bcs CS.INIT.RTS
>STYA ZPPtr1 jsr CS.RUN.CheckArgs
lda (ZPPtr1) Configured ? bcs CS.INIT.RTS
bmi CS.RUN.IPOK
jsr CS.RUN.Connect
>LDYA L.MSG.IPKO bcs CS.INIT.RTS
>SYSCALL PutS
lda #E.SYN
sec
.99 rts
CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPS),y
cmp #3
bcc .9
ldy #S.IPCFG.IP+3
ldx #3
.1 lda (ZPPtr1),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
lda #TIMEOUT.MAX
sta TimeOut
.2 >SLEEP
>PUSHW L.SA.REMOTE.AD
lda #1
>SYSCALL ArgV
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
bcc CS.RUN.HOSTOK
lda TimeOut
bne .2
>PUSHW L.MSG.UNKNOWN
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
bra .99
.9 >LDYA L.MSG.USAGE
>SYSCALL PutS
.99 lda #E.SYN
sec
rts
CS.RUN.HOSTOK lda #2
>SYSCALL ArgV
>SYSCALL AToI
>STYA SA.REMOTE+S.SOCKADDR.PORT
>PUSHW L.MSG.HOSTOK
ldx #0
.1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
inx
cpx #4
bne .1
>PUSHW SA.REMOTE+S.SOCKADDR.PORT
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 8
>SYSCALL PrintF
CS.RUN.OPENSKT >PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
sta hSocket
>PUSHW L.SA.LOCAL
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcc .2
.9 pha
>LDYA L.MSG.SKTKO
>SYSCALL PutS
pla
sec
.99 rts
.2 lda #TIMEOUT.MAX
sta TimeOut
.3 >SLEEP
>PUSHW L.SA.REMOTE
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcc .4
cmp #ERR.SKT.NOCONN
bne .9
lda TimeOut
bne .3
lda #ERR.SKT.NOCONN
bra .9
.4 >PUSHW L.MSG.SKTOK
>PUSHBI 0
>SYSCALL PrintF
jsr CS.RUN.MkNod
bcs .99
jsr CS.RUN.GETBUF jsr CS.RUN.GETBUF
bcs .99 bcs CS.INIT.RTS
jsr CS.RUN.SCRSETUP jsr CS.RUN.SCRSETUP
bcs .99 bcs CS.INIT.RTS
jsr CS.RUN.NICK jsr CS.RUN.NICK
bcs .99 bcs CS.INIT.RTS
>SLEEP
jsr CS.RUN.USER jsr CS.RUN.USER
bcs .99 bcs CS.INIT.RTS
>SLEEP
jsr CS.RUN.JOIN jsr CS.RUN.JOIN
bcs .99 bcs CS.INIT.RTS
>LDYA pData NULLSTRING >LDYA pData NULLSTRING
jsr CS.RUN.STATUSPDATE jsr CS.RUN.STATUSPDATE
bcs .99
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
lda hFile
>SYSCALL FEOF
bcs .9
tay
bne .2
jsr CS.RUN.GetMsg jsr CS.RUN.GetMsg
bcs .9 bcs .9
beq .2 beq .2
@ -290,6 +172,7 @@ CS.RUN.LOOP >SLEEP
>SYSCALL FEOF >SYSCALL FEOF
bcs .9 bcs .9
tay tay
bne CS.RUN.LOOP EOF = true, no char from STDIN bne CS.RUN.LOOP EOF = true, no char from STDIN
@ -308,39 +191,153 @@ CS.RUN.LOOP >SLEEP
plp plp
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.MkNod >PUSHEA.G NodBuf CS.RUN.CheckTCPIP
>PUSHW L.NOD.Template >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
>PUSHB hSocket
>PUSHBI 1
>SYSCALL SPrintF
bcs .9 bcs .9
>STYA ZPPtr1
lda (ZPPtr1) Configured ?
bpl .99
ldy #S.IPCFG.IP+3
ldx #3
>PUSHEA.G NodBuf+5 .1 lda (ZPPtr1),y
>PUSHW 0 sta SA.LOCAL+S.SOCKADDR.ADDR,x
>PUSHB hSocket dey
>SYSCALL MKNod dex
bcs .9 bpl .1
>PUSHEA.G NodBuf rts
>PUSHBI O.RDWR+O.TEXT
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
sta hFile
.99 >LDYA L.MSG.IPKO
>SYSCALL PutS
lda #E.SYN
sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.GETBUF >LDYAI MSGSIZE CS.RUN.CheckArgs
ldy #S.PS.ARGC
lda (pPS),y
cmp #3
bcs .1
>LDYA L.MSG.USAGE
>SYSCALL PutS
lda #E.SYN
sec
rts
.1 lda #TIMEOUT.MAX
sta TimeOut
.2 >PUSHW L.SA.REMOTE.AD
lda #1
>SYSCALL ArgV
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
bcc .3
>SLEEP
lda TimeOut
bne .2
>PUSHW L.MSG.UNKNOWN
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
lda #ERR.SKT.NOCONN
sec
rts
.3 lda #2
>SYSCALL ArgV
>SYSCALL AToI
>STYA SA.REMOTE+S.SOCKADDR.PORT
>PUSHW L.MSG.HOSTOK
ldx #0
.4 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
inx
cpx #4
bne .4
>PUSHW SA.REMOTE+S.SOCKADDR.PORT
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 8
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.Connect >PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
sta hSocket
>PUSHW L.SA.LOCAL
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
lda #TIMEOUT.MAX
sta TimeOut
.1 >SLEEP
>PUSHW L.SA.REMOTE
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcc .8
ldx TimeOut
bne .1
.9 pha
>LDYA L.MSG.SKTKO
>SYSCALL PutS
pla
sec
rts
.8 >PUSHW L.MSG.SKTOK
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.GETBUF >LDYAI 256
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
stx hMsgBuf
>STYA ZPMsgPtr stx hReqBuf
>STYA ZPReqPtr
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
stx hMsgBuf
>STYA ZPMsgPtr
>LDYAI MSGSIZE
>SYSCALL GetMem
bcs .9
stx hRespBuf
>STYA ZPRespPtr
>LDYAI 256
>SYSCALL GetMem
bcs .9
stx hText stx hText
>STYA ZPTextPtr >STYA ZPTextPtr
@ -442,14 +439,17 @@ CS.RUN.TXTCLR lda #0
CS.RUN.NICK >LDYA L.MSG.NICK CS.RUN.NICK >LDYA L.MSG.NICK
jsr CS.RUN.STATUSMSG jsr CS.RUN.STATUSMSG
>PUSHB hFile >PUSHW ZPRespPtr
>PUSHW L.IRC.NICK >PUSHW L.IRC.NICK
lda #3 nickname lda #3 nickname
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
>SYSCALL FPrintF >SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
bcs .9 bcs .9
.1 >SLEEP .1 >SLEEP
@ -470,7 +470,10 @@ CS.RUN.NICK >LDYA L.MSG.NICK
cmp (ZPMsgExtPtr),y cmp (ZPMsgExtPtr),y
beq .3 beq .3
bra .1 jsr CS.RUN.REQ1
bcc .1
rts
.8 clc .8 clc
.9 rts .9 rts
@ -478,10 +481,8 @@ CS.RUN.NICK >LDYA L.MSG.NICK
CS.RUN.USER >LDYA L.MSG.USER CS.RUN.USER >LDYA L.MSG.USER
jsr CS.RUN.STATUSMSG jsr CS.RUN.STATUSMSG
>PUSHB hFile >PUSHW ZPRespPtr
>PUSHW L.IRC.USER >PUSHW L.IRC.USER
lda #3 nickname lda #3 nickname
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
@ -489,7 +490,10 @@ CS.RUN.USER >LDYA L.MSG.USER
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
>PUSHBI 4 >PUSHBI 4
>SYSCALL FPrintF >SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
bcs .9 bcs .9
.1 >SLEEP .1 >SLEEP
@ -510,7 +514,10 @@ CS.RUN.USER >LDYA L.MSG.USER
cmp (ZPMsgCmdPtr),y cmp (ZPMsgCmdPtr),y
beq .3 beq .3
bra .1 jsr CS.RUN.REQ1
bcc .1
rts
.8 clc .8 clc
.9 rts .9 rts
@ -518,7 +525,7 @@ CS.RUN.USER >LDYA L.MSG.USER
CS.RUN.JOIN >LDYA L.MSG.JOIN CS.RUN.JOIN >LDYA L.MSG.JOIN
jsr CS.RUN.STATUSMSG jsr CS.RUN.STATUSMSG
>PUSHB hFile >PUSHW ZPRespPtr
lda #5 key lda #5 key
>SYSCALL ArgV >SYSCALL ArgV
@ -543,15 +550,20 @@ CS.RUN.JOIN >LDYA L.MSG.JOIN
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
.2 >SYSCALL FPrintF .2 >SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.REQ jsr CS.RUN.SplitMsg CS.RUN.REQ jsr CS.RUN.SplitMsg
bcs .8 bcc CS.RUN.REQ1
* jsr CS.RUN.DUMPMSG clc
rts
>LDYA L.IRC.CMDS CS.RUN.REQ1 >LDYA L.IRC.CMDS
>STYA ZPPtr1 >STYA ZPPtr1
ldx #0 ldx #0
@ -601,21 +613,37 @@ CS.RUN.CMD.JOIN lda bJoin
rts rts
.1 .1
*-------------------------------------- *--------------------------------------
CS.RUN.CMD.PART >PUSHB hFile CS.RUN.CMD.PART >PUSHW ZPRespPtr
>PUSHW L.IRC.NAMES >PUSHW L.IRC.NAMES
lda #4 channel lda #4 channel
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
>SYSCALL FPrintF >SYSCALL SPrintF
rts bcs .9
jsr CS.RUN.SendMsg
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CMD.PING >PUSHB hFile CS.RUN.CMD.PING >PUSHW ZPRespPtr
>PUSHW L.IRC.PONG >PUSHW L.IRC.PONG
>PUSHW ZPMsgExtPtr >PUSHW ZPMsgExtPtr
>PUSHBI 2 >PUSHBI 2
>SYSCALL FPrintF
rts
* lda #1 server name
* >SYSCALL ArgV
* >PUSHYA
>PUSHW ZPMsgExtPtr
>PUSHBI 2
>SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CMD.PRIVMSG CS.RUN.CMD.PRIVMSG
ldy #0 ldy #0
@ -653,14 +681,55 @@ CS.RUN.CMD.376
>SYSCALL PrintF >SYSCALL PrintF
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetMsg >PUSHB hFile CS.RUN.GetMsg ldy ReqLen
>PUSHW ZPMsgPtr bne .2
>PUSHWI MSGSIZE
>SYSCALL FGetS .1 >PUSHWI 255
bcs .9 >PUSHW ZPReqPtr
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
bcs .7
sty ReqLen
stz ReqPtr
lda (ZPMsgPtr) .2 ldy ReqPtr
* clc
lda (ZPReqPtr),y
cmp #C.CR
beq .6
cmp #C.LF
beq .3
ldy MsgLen
sta (ZPMsgPtr),y
inc MsgLen
.3 inc ReqPtr
dec ReqLen
bne .2
bra .1
.6 inc ReqPtr Skip CR
dec ReqLen
lda #0
ldy MsgLen will exit with NZ
stz MsgLen
sta (ZPMsgPtr),y
clc
rts
.7 cmp #E.NODATA
bne .9
.8 clc will exit with NZ
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -869,14 +938,39 @@ CS.RUN.CHARIN.INS.8
CS.RUN.CHARIN.CTRL CS.RUN.CHARIN.CTRL
cmp #C.CR cmp #C.CR
bne .1 bne .1
jmp CS.RUN.CHARIN.CR
.1 cmp #$14 Ctrl-T
bne .8
>PUSHW ZPRespPtr
>PUSHW L.IRC.PART
lda #4 channel
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
>SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
bcs .9
lda #3
sec
.9 rts
.8 clc
rts
*--------------------------------------
CS.RUN.CHARIN.CR
bit bJoin bit bJoin
bpl CS.RUN.CHARIN.INS.8 bpl CS.RUN.CHARIN.INS.8
lda TextLen lda TextLen
beq CS.RUN.CHARIN.INS.8 beq CS.RUN.CHARIN.INS.8
>PUSHB hFile >PUSHW ZPRespPtr
>PUSHW L.IRC.PRIVMSG >PUSHW L.IRC.PRIVMSG
lda #4 channel lda #4 channel
@ -885,7 +979,10 @@ CS.RUN.CHARIN.CTRL
>PUSHW ZPTextPtr >PUSHW ZPTextPtr
>PUSHBI 4 >PUSHBI 4
>SYSCALL FPrintF >SYSCALL SPrintF
bcs .9
jsr CS.RUN.SendMsg
bcs .9 bcs .9
>PUSHW L.SEQ.PRIVMSG >PUSHW L.SEQ.PRIVMSG
@ -901,26 +998,7 @@ CS.RUN.CHARIN.CTRL
jmp CS.RUN.TXTCLR jmp CS.RUN.TXTCLR
.1 cmp #$14 Ctrl-T .9 rts
bne .8
>PUSHB hFile
>PUSHW L.IRC.PART
lda #4 channel
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
>SYSCALL FPrintF
>SLEEP
lda #3
sec
rts
.8 clc
.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CHARIN.LEFT CS.RUN.CHARIN.LEFT
clc clc
@ -956,30 +1034,39 @@ CS.RUN.CHARIN.DEL
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.SendMsg >PUSHYA
>PUSHW ZPRespPtr
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
rts
*--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event? bpl .9 is it a TIMER event?
lda TimeOut lda TimeOut
beq .9 beq .9
dec TimeOut dec TimeOut
.9 sec do not discard TIMER event .9 sec do not discard TIMER event
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hFile CS.QUIT lda hSocket
beq .1
>SYSCALL FClose
.1 lda hSocket
beq .2 beq .2
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.2 lda hText .2 lda hLineBuf
beq .3 beq .3
>SYSCALL FreeMem
.3 lda hText
beq .4
>SYSCALL FreeMem >SYSCALL FreeMem
.3 lda hLIBTCPIP .4 lda hLIBTCPIP
beq .8 beq .8
>SYSCALL UnloadLib >SYSCALL UnloadLib
@ -1027,7 +1114,8 @@ IRC.NICK .AZ "NICK %s\r\n"
IRC.USER .AZ "USER %s 0 * :%s\r\n" IRC.USER .AZ "USER %s 0 * :%s\r\n"
IRC.JOIN .AZ "JOIN %s\r\n" IRC.JOIN .AZ "JOIN %s\r\n"
IRC.JOINKEY .AZ "JOIN %s %s\r\n" IRC.JOINKEY .AZ "JOIN %s %s\r\n"
IRC.PONG .AZ "PONG %s\r\n" IRC.PONG .AZ "PONG :%s\r\n"
*IRC.PONG .AZ "PONG %s:%s\r\n"
IRC.PART .AS "PART %s\r\n" IRC.PART .AS "PART %s\r\n"
.AZ "QUIT :Pfff\r\n" .AZ "QUIT :Pfff\r\n"
IRC.NAMES .AZ "NAMES %s\r\n" IRC.NAMES .AZ "NAMES %s\r\n"
@ -1049,15 +1137,12 @@ SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1 .BS 1
.BS 4 S.SOCKADDR.ADDR .BS 4 S.SOCKADDR.ADDR
.BS 2 .DA 6667
*--------------------------------------
NOD.Template .AZ "/dev/irc%h"
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
NULLSTRING .BS 1 NULLSTRING .BS 1
NodBuf .BS 11
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -10,8 +10,12 @@ NEW
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/kernel.i .INB inc/kernel.i
*-------------------------------------- *--------------------------------------
ZPFDPtr .EQ ZPBIN .DUMMY
FILE.ID .EQ ZPBIN+2 .OR ZPBIN
ZS.START
ZPFDPtr .BS 2
FILE.ID .BS 2
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -23,7 +27,7 @@ CS.START cld
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #16 SS .DA #16 SS
.DA #4 ZP .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -71,6 +75,7 @@ CS.RUN >LDYA L.MSG0
tax tax
>PUSHW L.FD.T,x >PUSHW L.FD.T,x
ldx FILE.ID
lda Nod.Table.hName-2,x lda Nod.Table.hName-2,x
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>PUSHYA >PUSHYA

View File

@ -343,7 +343,7 @@ DumpBuf >STYA ZPPtr1
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG.USAGE .AZ "Usage : TERM device " MSG.USAGE .AZ "Usage : TERM device "
MSG.DEVOK .AZ "Openning Device..." MSG.DEVOK .AZ "Opening Device..."
MSG.AT .AS "ATI0" MSG.AT .AS "ATI0"
.HS 0D0A .HS 0D0A
MSG.AT.LEN .EQ *-MSG.AT MSG.AT.LEN .EQ *-MSG.AT

View File

@ -18,8 +18,7 @@ ZPBufPtr .BS 2
hBuf .BS 1 hBuf .BS 1
hDev .BS 1 hDev .BS 1
TimeOut .BS 1 TimeOut .BS 1
ZS.END ZS.END .ED
.ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------

View File

@ -13,9 +13,6 @@ NEW
.INB inc/nic.i .INB inc/nic.i
*-------------------------------------- *--------------------------------------
INBUF.SIZE .EQ $800 INBUF.SIZE .EQ $800
*AT+CGDCONT=1,"IP","APN","0.0.0.0",0,0
*AT+CGDCONT=1,"PPP","APN","0.0.0.0",0,0
*ATD*99#1
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
@ -108,7 +105,7 @@ Dev.Detect >STYA ZPArgsPtr
lda #MLI.E.NODEV Not Found in any slot, exiting lda #MLI.E.NODEV Not Found in any slot, exiting
sec sec
rts rts
*--------------------------------------
.4 lda ZPPtr1+1 .4 lda ZPPtr1+1
asl asl
asl asl
@ -121,6 +118,7 @@ Dev.Detect >STYA ZPArgsPtr
jsr SSC.Init jsr SSC.Init
jsr PPP.ETCFILE jsr PPP.ETCFILE
bcs .99 bcs .99
jsr PPP.Init jsr PPP.Init
bcs .99 bcs .99
@ -149,7 +147,13 @@ Dev.Detect >STYA ZPArgsPtr
lda #A2osX.S.NIC lda #A2osX.S.NIC
sta A2osX.S,x sta A2osX.S,x
.9 lda #0
sec
rts
.9 ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
Dev.Detect.RTS rts Dev.Detect.RTS rts
*-------------------------------------- *--------------------------------------
PPP.ETCFILE >PUSHW L.ETCFILE PPP.ETCFILE >PUSHW L.ETCFILE
@ -173,24 +177,27 @@ PPP.ETCFILE >PUSHW L.ETCFILE
bcs .8 bcs .8
lda FILE.Buf lda FILE.Buf
beq .1
cmp #'#' cmp #'#'
beq .1 beq .1
>LDYA L.FILE.Buf >LDYA L.FILE.Buf
>SYSCALL PutS >SYSCALL PutS
lda FILE.Buf lda FILE.Buf
cmp #'?' cmp #'>'
bne .2 bne .2
>LDYA L.FILE.Bufp1 >LDYA L.FILE.Bufp1
jsr SSC.WriteYA jsr SSC.WriteYA
bcs .9 bcs .9
bra .1
.2 cmp #'!' .10 bra .1
.2 cmp #'?'
bne .7 bne .7
*--------------------------------------
.3 jsr SSC.Read .3 jsr SSC.Read
bcs .9 bcs .9
@ -200,45 +207,34 @@ PPP.ETCFILE >PUSHW L.ETCFILE
lda #0 lda #0
sta RCV.Buf,y sta RCV.Buf,y
>LDYA L.RCV.Bufp1 >LDYA L.RCV.Buf
>STYA ZPPtr2 >STYA ZPPtr2
.4 ldy #0 .4 jsr PPP.SkipCRLFPtr2
bcs .3
ldy #$ff
.5 iny .5 iny
lda FILE.Buf,y lda FILE.Buf+1,y skip !
bne .6 beq .10
lda #C.CR
.6 cmp (ZPPtr2),y .6 cmp (ZPPtr2),y
bne .60 beq .5
lda (ZPPtr2),y
beq .60
cmp #C.CR cmp #C.CR
bne .5 beq .60
jmp .1
.60 ldy #0
.61 iny
lda (ZPPtr2),y
cmp #C.LF
bne .61
tya
sec
adc ZPPtr2
sta ZPPtr2
bcc .62
inc ZPPtr2+1
.62 lda (ZPPtr2)
bne .60
jsr PPP.ETCFILE.ERR1 jsr PPP.ETCFILE.ERR1
bra .9 bra .9
.60 jsr PPP.NextStrPtr2
lda (ZPPtr2)
bne .4
.7 jsr PPP.ETCFILE.ERR2 .7 jsr PPP.ETCFILE.ERR2
bra .9 bra .9
@ -258,6 +254,56 @@ PPP.ETCFILE >PUSHW L.ETCFILE
rts rts
*-------------------------------------- *--------------------------------------
PPP.SkipCRLFPtr2
.1 lda (ZPPtr2)
beq .9
cmp #C.CR
bne .8
ldy #1
lda (ZPPtr2),y
beq .9
cmp #C.LF
bne .2
iny
.2 tya
clc
adc ZPPtr2
sta ZPPtr2
bcc .1
inc ZPPtr2+1
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------
PPP.NextStrPtr2 ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .2
cmp #C.CR
bne .1
.2 tya
clc
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr2+1
.8 rts
*--------------------------------------
PPP.ETCFILE.ERR1 PPP.ETCFILE.ERR1
>PUSHW L.MSG.UNEXPECTED >PUSHW L.MSG.UNEXPECTED
>PUSHW L.RCV.Buf >PUSHW L.RCV.Buf
@ -340,9 +386,9 @@ PPP.Init >LDYAI PPP.LCPReq.LEN
SSC.Init ldx DEVSLOTn08F SSC.Init ldx DEVSLOTn08F
stz SSC.RESET-$8F,x stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP lda #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B115200
sta SSC.CTL-$8F,x sta SSC.CTL-$8F,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR lda #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR
sta SSC.CMD-$8F,x sta SSC.CMD-$8F,x
lda SSC.DATA-$8F,x discard any garbage byte lda SSC.DATA-$8F,x discard any garbage byte
@ -484,9 +530,8 @@ DumpBuf >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
cmp #$0D cmp #$0D
* bne DumpBuf.PPP bne DumpBuf.PPP
bra DumpBuf.PPP
lda ZPBufLen lda ZPBufLen
eor #$ff eor #$ff
sta ZPBufLen sta ZPBufLen
@ -509,12 +554,15 @@ DumpBuf >STYA ZPPtr1
.3 cmp #$0D .3 cmp #$0D
beq .4 beq .4
cmp #$0A
beq .4
cmp #C.SPACE cmp #C.SPACE
bcs .4 bcs .4
ora #$20 ora #$20
.4 >SYSCALL PutS .4 >SYSCALL PutChar
bcc .1 bcc .1
.9 rts .9 rts
@ -722,8 +770,8 @@ PPP.LCPReq.DATA .HS 01 Configure-Request
.DA /576,#576 .DA /576,#576
.HS 02.06.000A0000 ACCM .HS 02.06.000A0000 ACCM
.HS 05.06.002A2B78 MAGIC .HS 05.06.002A2B78 MAGIC
.HS 07.02 * .HS 07.02
.HS 08.02 * .HS 08.02
PPP.LCPReq.DATA.LEN .EQ *-PPP.LCPReq.DATA PPP.LCPReq.DATA.LEN .EQ *-PPP.LCPReq.DATA
* .HS 0000 PADDING * .HS 0000 PADDING
.BS 2 FCS .BS 2 FCS

View File

@ -39,6 +39,7 @@ SSC.CTL.6D .EQ %01000000
SSC.CTL.5D .EQ %01100000 SSC.CTL.5D .EQ %01100000
SSC.CTL.CLKINT .EQ %00010000 SSC.CTL.CLKINT .EQ %00010000
SSC.CTL.B16EXT .EQ %00000000 SSC.CTL.B16EXT .EQ %00000000
SSC.CTL.B115200 .EQ %00000000
SSC.CTL.B50 .EQ %00000001 SSC.CTL.B50 .EQ %00000001
SSC.CTL.B75 .EQ %00000010 SSC.CTL.B75 .EQ %00000010
SSC.CTL.B110 .EQ %00000011 SSC.CTL.B110 .EQ %00000011
@ -54,8 +55,6 @@ SSC.CTL.B4800 .EQ %00001100
SSC.CTL.B7200 .EQ %00001101 SSC.CTL.B7200 .EQ %00001101
SSC.CTL.B9600 .EQ %00001110 SSC.CTL.B9600 .EQ %00001110
SSC.CTL.B19200 .EQ %00001111 SSC.CTL.B19200 .EQ %00001111
SSC.CTL.B115200 .EQ %00000000
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE INC/COM.6551.I SAVE INC/COM.6551.I

View File

@ -1,10 +1,10 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
IO.D2.SeekTimeR .EQ 65 LIBBLKDEV Recalibration IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 65 LIBBLKDEV Track Formatter IO.D2.SeekTimeF .EQ 65 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 65 LIBBLKDEV Boot Block IO.D2.SeekTimeB .EQ 65 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 65 ProDOS.FX initial IO.D2.SeekTimeP .EQ 35 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*-------------------------------------- *--------------------------------------
IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0Off .EQ $C080

View File

@ -76,7 +76,14 @@ D2MoveHead >PULLB MoveTo
clc clc
.9 rts .9 rts
D2MoveHead.SEI lda MoveFrom D2MoveHead.SEI lda Slotn0
ora #IO.D2.RData
sta .4+1
sta .5+1
sta .6+1
sta .7+1
lda MoveFrom
tay tay
and #6 and #6
@ -90,6 +97,8 @@ D2MoveHead.SEI lda MoveFrom
.1 pha .1 pha
jsr .8 jsr .8
pla
pha
bcs .2 bcs .2
* Current < Target, must move in * Current < Target, must move in
@ -121,17 +130,11 @@ D2MoveHead.SEI lda MoveFrom
ora Slotn0 ora Slotn0
tay tay
* lda Slotn0
* ora #IO.D2.RData
* sta .4+1
* sta .5+1
lda IO.D2.Ph0On,x lda IO.D2.Ph0On,x
*.4 lda IO.D2.RData SELF MODIFIED .4 lda IO.D2.RData SELF MODIFIED
nop
nop
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
*.5 lda IO.D2.RData SELF MODIFIED .5 lda IO.D2.RData SELF MODIFIED
lda #IO.D2.SeekTimeF lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA jsr D2.Wait100usecA
@ -142,12 +145,12 @@ D2MoveHead.SEI lda MoveFrom
jsr D2.Wait25600usec jsr D2.Wait25600usec
.8 pha .8 lda IO.D2.Ph0Off,x
lda IO.D2.Ph0Off,x .6 lda IO.D2.RData SELF MODIFIED
nop
nop
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
pla .7 lda IO.D2.RData SELF MODIFIED
rts rts
*/-------------------------------------- */--------------------------------------
* # D2TrkRead16s * # D2TrkRead16s
@ -197,33 +200,34 @@ D2TrkWrite16s >PULLW ZPPtr1
>STYA ZPPtr2 >STYA ZPPtr2
stx hTrkBuf stx hTrkBuf
lda TrkNum * lda TrkNum
jsr D2.Trk2Qtrk * jsr D2.Trk2Qtrk
tay * tay
and #6 * and #6
ora Slotn0 * ora Slotn0
tax * tax
tya * tya
inc * inc
and #6 * and #6
ora Slotn0 * ora Slotn0
tay * tay
lda IO.D2.Ph0On,x
stx PhX
lda IO.D2.Ph0On,y
sty PhY
* lda #10
* jsr D2.Wait100usecA
* ldx PhX
* lda IO.D2.Ph0Off,x
* ldy PhY
* lda IO.D2.Ph0Off,y
* stx PhX
* sty PhY
* lda Slotn0
* ora #IO.D2.RData
* sta .10+1
* sta .11+1
* sta .12+1
* sta .13+1
* lda IO.D2.Ph0On,x
*.10 lda IO.D2.RData SELF MODIFIED
* lda IO.D2.Ph0On,y
*.11 lda IO.D2.RData SELF MODIFIED
*
stz SectNum stz SectNum
ldy #0 put 256 FF sync bytes for slooooow drives ldy #0 put 256 FF sync bytes for slooooow drives
@ -250,14 +254,32 @@ D2TrkWrite16s >PULLW ZPPtr1
jsr PutDataHeadPtr2 jsr PutDataHeadPtr2
jsr PutData lda ZPPtr1+1
bne .7
ldy #$57
ldx #2
lda #$96
.3 sta (ZPPtr2)
inc ZPPtr2
bne .4
inc ZPPtr2+1
jsr PutTailPtr2 .4 dey
bne .3
dex
bne .3
bra .8
.7 jsr PutData
inc ZPPtr1+1
.8 jsr PutTailPtr2
ldy #TRACK16.GAP3 ldy #TRACK16.GAP3
jsr PutSyncBytePtr2 jsr PutSyncBytePtr2
inc ZPPtr1+1
inc SectNum inc SectNum
lda SectNum lda SectNum
cmp #16 cmp #16
@ -266,15 +288,18 @@ D2TrkWrite16s >PULLW ZPPtr1
lda #0 lda #0
sta (ZPPtr2) sta (ZPPtr2)
ldx PhX * ldx PhX
lda IO.D2.Ph0Off,x * ldy PhY
ldy PhY
lda IO.D2.Ph0Off,y * lda IO.D2.Ph0Off,x
*.12 lda IO.D2.RData SELF MODIFIED
jsr D2.Wait25600usec * lda IO.D2.Ph0Off,y
jsr D2.Wait25600usec *.13 lda IO.D2.RData SELF MODIFIED
* jsr D2.Wait25600usec
jsr D2WriteTrackPtr2 jsr D2WriteTrackPtr2
php php
pha pha
lda hTrkBuf lda hTrkBuf

View File

@ -22,12 +22,13 @@ ZPCtxPtr .BS 2
pFD .BS 2 pFD .BS 2
pPath .BS 2 pPath .BS 2
ZPRespPtr .BS 2
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
BufPtr .BS 2 BufPtr .BS 2
hBuf .BS 1 hBuf .BS 1
hResp .BS 1
ZPRespPtr .BS 2
bFlag .BS 1 bFlag .BS 1
ZS.END .ED ZS.END .ED
@ -498,6 +499,7 @@ CIFS.CallBack bit CIFS.Status
rts rts
.1 jmp (J.CIFS,x) .1 jmp (J.CIFS,x)
.2 pla .2 pla
ply ply
jmp (J.CIFS2,x) jmp (J.CIFS2,x)
@ -543,15 +545,7 @@ CIFS.Stat >STYA pPath resolved path
jsr GO.LIBTCPIP jsr GO.LIBTCPIP
bcs .9 bcs .9
ldy #S.PS.PID jmp Sleep
lda (pPS),y
sta CIFS.PID
dec CIFS.Status
lda #0
sec
rts
.9 >RET 4 .9 >RET 4
*-------------------------------------- *--------------------------------------
@ -578,6 +572,9 @@ CIFS2.Stat lda MountTable+3 hSocket
jsr FileInfo2StatBuf jsr FileInfo2StatBuf
jsr StatBuf2Ptr2 jsr StatBuf2Ptr2
lda hResp
>SYSCALL2 FreeMem
stz CIFS.Status stz CIFS.Status
clc clc
rts rts
@ -593,6 +590,7 @@ CIFS2.Stat lda MountTable+3 hSocket
rts rts
.90 lda #MLI.E.IO .90 lda #MLI.E.IO
.99 sec .99 sec
stz CIFS.Status stz CIFS.Status
>RET 4 >RET 4
@ -626,15 +624,7 @@ CIFS.MKDir >STYA pPath resolved path
jsr GO.LIBTCPIP jsr GO.LIBTCPIP
bcs .9 bcs .9
ldy #S.PS.PID jmp Sleep
lda (pPS),y
sta CIFS.PID
dec CIFS.Status
lda #0
sec
rts
.9 >RET 4 .9 >RET 4
*-------------------------------------- *--------------------------------------
@ -647,26 +637,29 @@ CIFS2.MKDir lda MountTable+3 hSocket
ldy #S.NETBIOS+S.SMB.H.STATUS ldy #S.NETBIOS+S.SMB.H.STATUS
lda (ZPRespPtr),y lda (ZPRespPtr),y
beq .1 clc
beq .8
lda #MLI.E.DUPFILE lda #MLI.E.DUPFILE
bra .99 sec
.8 jsr FreeRespData
.1 stz CIFS.Status stz CIFS.Status
clc
>RET 4 >RET 4
.9 cmp #E.NODATA .9 cmp #E.NODATA
bne .99 bne .99
dec CIFS.Retries dec CIFS.Retries
beq .90 beq .98
lda #0 lda #0
sec sec
rts rts
.90 lda #MLI.E.IO .98 lda #MLI.E.IO
.99 sec .99 sec
stz CIFS.Status stz CIFS.Status
>RET 4 >RET 4
@ -800,14 +793,8 @@ CIFS.ReadDir.Send
jsr GO.LIBTCPIP jsr GO.LIBTCPIP
bcs .9 bcs .9
ldy #S.PS.PID jmp Sleep
lda (pPS),y
sta CIFS.PID
dec CIFS.Status
lda #0
sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CIFS2.ReadDir jsr GetPFD CIFS2.ReadDir jsr GetPFD
@ -815,58 +802,72 @@ CIFS2.ReadDir jsr GetPFD
lda MountTable+3 hSocket lda MountTable+3 hSocket
ldx #LIBTCPIP.Recv ldx #LIBTCPIP.Recv
jsr GO.LIBTCPIP jsr GO.LIBTCPIP
bcs .9 bcs .90
jsr GetRespData jsr GetRespData
ldy #S.NETBIOS+S.SMB.H.STATUS ldy #S.NETBIOS+S.SMB.H.STATUS
lda (ZPRespPtr),y lda (ZPRespPtr),y
bne .99 beq .1
ldy #S.FD.DIR.FC .91 sec
lda #MLI.E.IO
bra .9
.1 ldy #S.FD.DIR.FC
lda (pFD),y lda (pFD),y
iny iny
ora (pFD),y ora (pFD),y
sta bFlag sta bFlag
bne .1 bne .2
ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+1 Search ID ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+1 Search ID
lda (ZPRespPtr),y lda (ZPRespPtr),y
tax tax
dey dey
lda (ZPRespPtr),y ora (ZPRespPtr),y
beq .91
lda (ZPRespPtr),y
ldy #S.FD.DIR.FC ldy #S.FD.DIR.FC
sta (pFD),y sta (pFD),y
iny iny
txa txa
sta (pFD),y sta (pFD),y
.1 jsr GetRespDataOffset .2 jsr GetRespDataOffset
jsr CIFS2.ReadDir.GetBuf jsr CIFS2.ReadDir.GetBuf
bcs .99 bcs .9
jsr GetRespDataOffset jsr GetRespDataOffset
jsr CIFS2.ReadDir.FillBuf jsr CIFS2.ReadDir.FillBuf
lda hResp
>SYSCALL2 FreeMem
>LDYA BufPtr >LDYA BufPtr
ldx hBuf ldx hBuf
stz CIFS.Status stz CIFS.Status
clc clc
rts rts
.9 stz CIFS.Status
jmp FreeRespData
.9 cmp #E.NODATA .90 cmp #E.NODATA
bne .99 bne .99
dec CIFS.Retries dec CIFS.Retries
beq .90 beq .98
lda #0 lda #0
sec sec
rts rts
.90 lda #MLI.E.IO .98 lda #MLI.E.IO
.99 stz CIFS.Status .99 stz CIFS.Status
sec sec
@ -1200,6 +1201,18 @@ SetReqLenNETBIOS
>LDYA ZPReqLen >LDYA ZPReqLen
rts rts
*-------------------------------------- *--------------------------------------
Sleep ldy #S.PS.PID
lda (pPS),y
sta CIFS.PID
dec CIFS.Status
stz CIFS.Retries
lda #0
sec
rts
*--------------------------------------
GetRespData sta hResp GetRespData sta hResp
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
@ -1236,6 +1249,14 @@ GetRespDataOffset
rts
*--------------------------------------
FreeRespData php
pha
lda hResp
>SYSCALL2 FreeMem
pla
plp
rts rts
*-------------------------------------- *--------------------------------------
FileInfo2StatBuf FileInfo2StatBuf
@ -1448,7 +1469,7 @@ SMB.ComWrite.H .DA #12 WORD COUNT
.BS 2 FID .BS 2 FID
.BS 4 Offset .BS 4 Offset
.HS 00000000 Timeout .HS 00000000 Timeout
.HS 00001 WriteMode=WritethroughMode .HS 0001 WriteMode=WritethroughMode
.BS 2 Remaining .BS 2 Remaining
.HS 0000 Reserved .HS 0000 Reserved
.BS 2 DataLength .BS 2 DataLength
@ -1469,7 +1490,7 @@ SMB.Trans2.H .DA #15 WORD COUNT
.BS 2 TotalParamCount .BS 2 TotalParamCount
.DA 0 TotalDataCount .DA 0 TotalDataCount
.DA 10 MaxParameterCount .DA 10 MaxParameterCount
.DA 480 MaxDataCount .DA 450 MaxDataCount
.DA #0 MaxSetupCount .DA #0 MaxSetupCount
.HS 00 Reserved1 .HS 00 Reserved1
.DA 0 Flags .DA 0 Flags
@ -1541,7 +1562,6 @@ hLIBTCPIP .BS 1
pLIBTCPIP .BS 2 pLIBTCPIP .BS 2
hSocket .BS 1 hSocket .BS 1
hReq .BS 1 hReq .BS 1
hResp .BS 1
*-------------------------------------- *--------------------------------------
CIFS.Status .BS 1 CIFS.Status .BS 1
CIFS.PID .BS 1 CIFS.PID .BS 1

View File

@ -16,6 +16,7 @@ ICMP.IN.ECHOREQ ldy #S.IP.DST+3
.1 lda (ZPFrameInPtr),y .1 lda (ZPFrameInPtr),y
cmp IPCFG+S.IPCFG.IP,x cmp IPCFG+S.IPCFG.IP,x
bne ICMP.IN.EXIT bne ICMP.IN.EXIT
dey dey
dex dex
bne .1 bne .1
@ -54,9 +55,11 @@ ICMP.IN.ECHOREP jsr FRM.GetTargetSKT.RAW
ldy #S.ICMP.IDENTIFIER ldy #S.ICMP.IDENTIFIER
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1
sta SKT.REM.ADDR+S.SOCKADDR.PORT+1 sta SKT.REM.ADDR+S.SOCKADDR.PORT+1
iny iny
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
sta SKT.LOC.ADDR+S.SOCKADDR.PORT
sta SKT.REM.ADDR+S.SOCKADDR.PORT sta SKT.REM.ADDR+S.SOCKADDR.PORT
jsr SKT.FindMatchingLocRem jsr SKT.FindMatchingLocRem

View File

@ -221,7 +221,7 @@ SKT.connect.SEQPKT
bcs .99 bcs .99
lda #S.SOCKET.TCP.S.SYNSENT lda #S.SOCKET.TCP.S.SYNSENT
jmp SKT.StoreTCB.S jsr SKT.StoreTCB.S
.99 lda #ERR.SKT.NOCONN .99 lda #ERR.SKT.NOCONN
sec sec

View File

@ -152,9 +152,12 @@ TCP.IN.JMP.ESTBLSH
dex dex
bpl .1 bpl .1
bcc .70 ACK > SENT SEQ ????
lda TmpDWord+3 lda TmpDWord+3
ldx TmpDWord+2 ldx TmpDWord+2
bne .2 bne .2
tay tay
beq .4 beq .4
@ -224,7 +227,8 @@ TCP.IN.JMP.ESTBLSH
jsr TCP.AddAYToSktCacheAtX jsr TCP.AddAYToSktCacheAtX
jsr SKT.StoreTCB update socket jsr SKT.StoreTCB update socket
jsr TCP.SetSocketTCPO.ACK ...and ack data
.70 jsr TCP.SetSocketTCPO.ACK ...and ack data
.7 ldy #S.TCP.OPTIONS .7 ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y

View File

@ -741,6 +741,45 @@ XDOS.SPParams .HS 03 # of parms (always 3 except format)
XDOS.SPParams.U .HS 00 unit number XDOS.SPParams.U .HS 00 unit number
XDOS.SPParams.B .HS 0000 data buffer XDOS.SPParams.B .HS 0000 data buffer
.HS 000000 block number (3 bytes) .HS 000000 block number (3 bytes)
*--------------------------------------
.DO XRWDBG=1
XRW.DEBUG sta CLRPAGE2
lda #"R"
bit XRW.bWrite
bpl .1
lda #"W"
.1 sta $723
ldx #$24
lda XRW.ReqTrack
jsr .6
lda XRW.ReqSector
.6 pha
lsr
lsr
lsr
lsr
jsr .7
pla
.7 and #$0F
ora #$B0
cmp #"9"+1
bcc .8
adc #6
.8 sta $700,x
inx
rts
.FIN
*-------------------------------------- *--------------------------------------
* data tables * data tables
*-------------------------------------- *--------------------------------------
@ -952,7 +991,7 @@ XDOS.SPStatus .HS 00000000
XDOS.DATA.LEN .EQ *-XDOS.DATA XDOS.DATA.LEN .EQ *-XDOS.DATA
.LIST OFF .LIST OFF
.ED .ED
*--------------------------------------
* zero fill to page boundary - 3 ($FEFD). so that cortland flag stays within page boundary. * zero fill to page boundary - 3 ($FEFD). so that cortland flag stays within page boundary.
.LIST ON .LIST ON
XDOS.FREE .EQ $FEFD-*-XDOS.DATA.LEN (2.0.3 = $0C) XDOS.FREE .EQ $FEFD-*-XDOS.DATA.LEN (2.0.3 = $0C)

View File

@ -191,14 +191,6 @@ XRW.TrackSelect lda #2
sta XRW.RecalibrateCnt sta XRW.RecalibrateCnt
sta XRW.BadSeek sta XRW.BadSeek
* lda XRW.ReqTrack
* jsr XRW.SEEK2T
* lda #5
* jsr XRW.Wait100usecA
* jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt .1 stz XRW.RetryCnt
.2 jsr XRW.ReadAddr read next address field. .2 jsr XRW.ReadAddr read next address field.
@ -217,7 +209,7 @@ XRW.TrackSelect lda #2
sta XRW.D2Trk-1,y sta XRW.D2Trk-1,y
lda #0 lda #0
sta XRW.D2VolNum-1,y reset volnum for seeking 4 Qtracks sta XRW.D2VolNum-1,y reset volnum for seeking 41 Qtracks
jsr XRW.Seek Seek from Track 41 -> 0 jsr XRW.Seek Seek from Track 41 -> 0
bra .1 bra .1
@ -249,7 +241,15 @@ XRW.TrackSelect lda #2
jsr XRW.Seek jsr XRW.Seek
bra .3 bra .3
.8 clc .8
* jsr XRW.SEEK2T
* lda #1
* jsr XRW.Wait100usecA
* jsr XRW.SEEKOFF
clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
@ -309,14 +309,14 @@ XRW.ReadAddr ldy #$FC
tay if final checksum non-zero, tay if final checksum non-zero,
bne .99 (2) then error. bne .99 (2) then error.
clc (2)
.9 lda IO.D2.RData,x (4) .9 lda IO.D2.RData,x (4)
bpl .9 (2) bpl .9 (2)
eor #$DE (2) eor #$DE (2)
bne .99 (2) bne .99 (2)
clc (2)
rts (6) rts (6)
.99 sec .99 sec
@ -344,7 +344,8 @@ XRW.Seek ldx XRW.UnitIndex
sta XRW.D2Trk-1,x will be current track at the end sta XRW.D2Trk-1,x will be current track at the end
tya tya
jsr XRW.Seek2QT jsr XRW.Seek2QTXY
lda #1
bra .4 bra .4
.1 pha .1 pha
@ -377,10 +378,10 @@ XRW.Seek ldx XRW.UnitIndex
inc inc
inc inc
.3 jsr XRW.SEEK2QT2 .3 jsr XRW.SEEK2QTY
.4 lda XRW.SeekTime lda XRW.SeekTime
jsr XRW.Wait100usecA .4 jsr XRW.Wait100usecA
lda XRW.CurrentQTrack lda XRW.CurrentQTrack
cmp XRW.TargetQTrack cmp XRW.TargetQTrack
@ -389,51 +390,44 @@ XRW.Seek ldx XRW.UnitIndex
jsr XRW.Wait25600usec jsr XRW.Wait25600usec
XRW.SEEKOFF pha XRW.SEEKOFF pha
lda IO.D2.Ph0Off,x lda A2L
nop ora #IO.D2.RData
nop
lda IO.D2.Ph0Off,y
pla
rts
*--------------------------------------
XRW.SEEK2T ldx XRW.UnitIndex
jsr XRW.Trk2Qtrk
XRW.SEEK2QT pha
and #6
ora A2L
tax
pla
inc
XRW.SEEK2QT2 and #6
ora A2L
tay
* lda A2L
* ora #IO.D2.RData
* sta .1+1
* sta .2+1
lda IO.D2.Ph0On,x
*.1 lda IO.D2.RData SELF MODIFIED
nop
nop
lda IO.D2.Ph0On,y
*.2 lda IO.D2.RData SELF MODIFIED
rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1 sta .1+1
sta .2+1
lda IO.D2.Ph0Off,x
.1 lda IO.D2.RData SELF MODIFIED
bit XRW.D2VolNum-1,x lda IO.D2.Ph0Off,y
bpl .1 x4 .2 lda IO.D2.RData SELF MODIFIED
bvs .1 > $C0 ? (VOL=254)
lsr x3 pla
rts
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
.1 adc #$ff SELF MODIFIED .1 lda IO.D2.RData,x read the shift register.
jsr .9 delay
pha
pla more delay.
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
dey no, dec retry counter
bne .1 and try 256 times.
.9 rts Z if motor OFF
*--------------------------------------
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts rts
*-------------------------------------- *--------------------------------------
* preniblize subroutine (16 sector format) * preniblize subroutine (16 sector format)
@ -560,18 +554,22 @@ L596F ldy #$FF index to last byte of data to write.
XRW.SectorIO bit XRW.bWrite XRW.SectorIO bit XRW.bWrite
bpl .1 bpl .1
lda XRW.ReqTrack * lda XRW.ReqTrack
jsr XRW.SEEK2T * jsr XRW.SEEK2T
phx * phx
phy * phy
jsr XRW.PreNibble jsr XRW.PreNibble
ply
plx * ply
jsr XRW.SEEKOFF * plx
* jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt .1 stz XRW.RetryCnt
.DO XRWDBG=1
jsr XRW.DEBUG jsr XRW.DEBUG
.FIN
.2 jsr XRW.ReadAddr .2 jsr XRW.ReadAddr
bcs .3 (2) bcs .3 (2)
@ -765,13 +763,6 @@ wnibl sta IO.D2.WLoad,x (5) nibl write
XRW.Write.RTS rts (6) XRW.Write.RTS rts (6)
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts
*--------------------------------------
XRW.Wait25600usec XRW.Wait25600usec
lda #0 lda #0
XRW.Wait100usecA XRW.Wait100usecA
@ -945,65 +936,43 @@ L57CD pla place last byte into user buffer
XRW.Read.RTS rts XRW.Read.RTS rts
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* determine if motor is stopped XRW.SEEK2T ldx XRW.UnitIndex
* jsr XRW.Trk2Qtrk
* if stopped, controller's shift register will not be changing.
* return y = 0 and zero flag set if it is stopped.
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
.1 lda IO.D2.RData,x read the shift register. XRW.SEEK2QTXY pha
jsr .9 delay and #6
ora A2L
pha tax
pla more delay.
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
dey no, dec retry counter
bne .1 and try 256 times.
.9 rts Z if motor OFF
*--------------------------------------
XRW.DEBUG sta CLRPAGE2
lda #"R"
bit XRW.bWrite
bpl .1
lda #"W"
.1 sta $723
ldx #$24
lda XRW.ReqTrack
jsr .6
lda XRW.ReqSector
.6 pha
lsr
lsr
lsr
lsr
jsr .7
pla pla
inc
.7 and #$0F XRW.SEEK2QTY and #6
ora #$B0 ora A2L
cmp #"9"+1 tay
bcc .8
adc #6 lda A2L
ora #IO.D2.RData
sta .1+1
sta .2+1
.8 sta $700,x lda IO.D2.Ph0On,y
inx .1 lda IO.D2.RData SELF MODIFIED
lda IO.D2.Ph0On,x
.2 lda IO.D2.RData SELF MODIFIED
rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1
bit XRW.D2VolNum-1,x
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lsr x3
.1 adc #$ff SELF MODIFIED
rts rts
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON

View File

@ -1,15 +1,17 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .LIST OFF
.OP 65816 .OP 65816
.OR $2000 .OR $2000
.TF PRODOS.FX,TSYS .TF PRODOS.FX,TSYS
*-------------------------------------- *--------------------------------------
READCAT .EQ 0 Boot Block read Catalog at $C00 READCAT .EQ 0 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1 ENHFILENAME .EQ 1
LOWERCASE .EQ 1 LOWERCASE .EQ 1
ACL .EQ 1 ACL .EQ 1
LOGO .EQ 1 LOGO .EQ 1
*--------------------------------------
XRWDBG .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/zp.i .INB inc/zp.i
.INB inc/io.i .INB inc/io.i
@ -198,7 +200,7 @@ X.Unpak.XatYA sty ZPOutBufPtr
lda PAKME.Table,x lda PAKME.Table,x
sta ZPInBufPtr sta ZPInBufPtr
lda PAKME.Table+1,x lda PAKME.Table+1,x
sta ZPInBufPtr+1 sta ZPInBufPtr+1
.INB usr/src/shared/x.unpak.s .INB usr/src/shared/x.unpak.s
.DO LOGO .DO LOGO
.INB usr/src/prodos.fx/prodos.s.logo .INB usr/src/prodos.fx/prodos.s.logo

View File

@ -245,8 +245,6 @@ CS.RUN.Connect >PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind >LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9 bcs .9
>SLEEP
>PUSHEA.G SA.REMOTE >PUSHEA.G SA.REMOTE
lda hSocket lda hSocket

View File

@ -49,7 +49,7 @@ ExcludeMatch sec
>SYSCALL StrUpr >SYSCALL StrUpr
.10 lda (ZPPtr2) Get first pattern byte .10 lda (ZPPtr2) Get first pattern byte
beq .8 Match always if empty beq .8 Match always if empty
ldy #0 ldy #0
bra .2 bra .2
@ -59,10 +59,10 @@ ExcludeMatch sec
.2 cmp #'*' .2 cmp #'*'
beq .5 beq .5
.3 lda (ZPFileName),y we must match ? or regular char, check if at end of string .3 lda (ZPFileName),y we must match ? or regular char, check if at end of string
beq .9 no char left, exit with error beq .9 no char left, exit with error
lda (ZPPtr2) get back pattern char lda (ZPPtr2) get back pattern char
cmp #'?' cmp #'?'
beq .4 no need to compare, any char will match beq .4 no need to compare, any char will match
@ -71,37 +71,37 @@ ExcludeMatch sec
bne .9 no match, exit bne .9 no match, exit
.4 iny advance to next char to compare .4 iny advance to next char to compare
bra .1 continue if remaining char in pattern bra .1 continue if remaining char in pattern
.41 lda (ZPFileName),y end of pattern, but end of string ? .41 lda (ZPFileName),y end of pattern, but end of string ?
beq .8 yes, string matched entirely beq .8 yes, string matched entirely
* no, remaining char in string, no match * no, remaining char in string, no match
.9 sec .9 sec
rts rts
.5 jsr FilterMatch.NextPtr2 we have '*', last char of pattern ? .5 jsr FilterMatch.NextPtr2 we have '*', last char of pattern ?
beq .8 yes, match everything, including empty string beq .8 yes, match everything, including empty string
cmp #'*' another '*' ? cmp #'*' another '*' ?
beq .5 yes, '**' = '*', go next char beq .5 yes, '**' = '*', go next char
cmp #'?' '*?' ? we must match a least one char cmp #'?' '*?' ? we must match a least one char
beq .3 beq .3
.7 lda (ZPFileName),y we need at least one remaining char in string, check if at end of string .7 lda (ZPFileName),y we need at least one remaining char in string, check if at end of string
beq .9 no chance to match ? or regular char beq .9 no chance to match ? or regular char
iny iny
jsr FilterMatch.CmpPtr2CharPtr1Y compare with char in string jsr FilterMatch.CmpPtr2CharPtr1Y compare with char in string
bne .7 not equal to next non wildcard in pattern bne .7 not equal to next non wildcard in pattern
iny iny
bra .1 go check remaining char in pattern... bra .1 go check remaining char in pattern...
.8 .8
FilterMatch.CLCRTS FilterMatch.CLCRTS
clc clc
FilterMatch.RTS FilterMatch.RTS
rts rts
*-------------------------------------- *--------------------------------------
FilterMatch.CmpPtr2CharPtr1Y FilterMatch.CmpPtr2CharPtr1Y
phx phx
@ -154,11 +154,16 @@ InitSrcDirYA >PUSHYA
cmp /S.STAT.MODE.DIR cmp /S.STAT.MODE.DIR
bne .4 TYPE not a DIR, extract.... bne .4 TYPE not a DIR, extract....
bra .5 TYPE=DIR, do not extract pattern bra .5 TYPE=DIR, do not extract pattern
.ELSE .ELSE
bra .4 bra .4
.FIN .FIN
.1 jsr GetPtr1Len TYPE is not DIR, check if wc .1 cmp #MLI.E.INVPATH
beq .11
jmp .9
.11 jsr GetPtr1Len TYPE is not DIR, check if wc
dey dey
@ -200,6 +205,7 @@ InitSrcDirYA >PUSHYA
>SYSCALL StrDup >SYSCALL StrDup
bcs .9 bcs .9
txa txa
>STA.G hFilter >STA.G hFilter
@ -209,6 +215,7 @@ InitSrcDirYA >PUSHYA
.5 >LDYAI 256 .5 >LDYAI 256
>SYSCALL GetMem Get a 256 buffer to store BasePath >SYSCALL GetMem Get a 256 buffer to store BasePath
bcs .9 bcs .9
>STYA ZPPtr2 >STYA ZPPtr2
txa txa
>STA.G hSrcBasePath >STA.G hSrcBasePath
@ -235,7 +242,9 @@ InitSrcDirYA >PUSHYA
ldy #index ldy #index
lda #1 lda #1
sta (pData),y index=hDIRs[0] sta (pData),y index=hDIRs[0]
jsr .9 Cleanup jsr .9 Cleanup
clc clc
rts rts

View File

@ -9,11 +9,12 @@ NEW
.TF drv/ssc.drv .TF drv/ssc.drv
.FIN .FIN
*-------------------------------------- *--------------------------------------
ZPArgPtr .EQ ZPBIN .DUMMY
ZPParityPtr .EQ ZPBIN+2 .OR ZPBIN
ZPControlPtr .EQ ZPBIN+4 ZS.START
ZPhParity .EQ ZPBIN+6 ZPArgPtr .BS 2
ZPhControl .EQ ZPBIN+7 ZPSlotPtr .BS 2
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -22,10 +23,9 @@ CS.START cld
.DA #$61 6502,Level 1 (65c02) .DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1 .DA #1 DRV Layout Version 1
.DA 0 .DA 0
.DA CS.END-CS.START Code Length .DA CS.END-CS.START Code Length
.DA 0
.DA 0 .DA 0
.DA #32 SS
.DA #10 ZP
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -36,20 +36,16 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DRV.CS.START .DA DRV.CS.START L.DRV.CS.START .DA DRV.CS.START
L.FD.DEV .DA FD.DEV L.FD.DEV .DA FD.DEV
L.FD.DEV.NAME .DA FD.DEV.NAME L.FD.DEV.NAME .DA FD.DEV.NAME
L.SSCANF.ARGS .DA SSCANF.ARGS
L.DCB.BAUD .DA DCB+S.DCB.COM.BAUD
L.DCB.DATA .DA DCB+S.DCB.COM.DATA
L.DCB.STOP .DA DCB+S.DCB.COM.STOP
.DA 0 End Of Reloc Table .DA 0 End Of Reloc Table
*-------------------------------------- *--------------------------------------
Dev.Detect >STYA ARGS Dev.Detect >STYA ZPArgPtr
>LDYA L.MSG.DETECT >LDYA L.MSG.DETECT
>SYSCALL PutS >SYSCALL PutS
stz ZPArgPtr stz ZPSlotPtr
lda #$C1 lda #$C1
sta ZPArgPtr+1 sta ZPSlotPtr+1
.1 and #$0f .1 and #$0f
tay tay
@ -59,7 +55,7 @@ Dev.Detect >STYA ARGS
ldx #DEVSIG.Length-1 ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x .2 ldy DEVSIG.Offset,x
lda (ZPArgPtr),y lda (ZPSlotPtr),y
cmp DEVSIG.Value,x cmp DEVSIG.Value,x
bne .3 bne .3
@ -69,24 +65,19 @@ Dev.Detect >STYA ARGS
bra .4 bra .4
.3 inc FD.DEV.NAME+3 .3 inc FD.DEV.NAME+3
inc ZPArgPtr+1 no match, try next slot.... inc ZPSlotPtr+1 no match, try next slot....
lda ZPArgPtr+1 lda ZPSlotPtr+1
cmp #$C8 cmp #$C8
bne .1 bne .1
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL PutS >SYSCALL PutS
lda #MLI.E.NODEV Not Found in any slot, exiting lda #MLI.E.NODEV Not Found in any slot, exiting
sec sec
rts .99 rts
.4 lda ZPArgPtr+1 .4 lda ZPSlotPtr+1
and #$0F
pha
tay
lda #A2osX.S.COM
sta A2osX.S,y
pla
asl asl
asl asl
asl asl
@ -94,8 +85,9 @@ Dev.Detect >STYA ARGS
clc clc
adc #$8F adc #$8F
sta DEVSLOTn08F sta DEVSLOTn08F
jsr Dev.ParseArgs jsr Dev.ParseArgs
bcs .9 bcs .99
.8 >PUSHW L.MSG.DETECT.OK .8 >PUSHW L.MSG.DETECT.OK
>PUSHW L.FD.DEV.NAME >PUSHW L.FD.DEV.NAME
@ -114,61 +106,227 @@ Dev.Detect >STYA ARGS
>PUSHW L.FD.DEV >PUSHW L.FD.DEV
>PUSHW L.FD.DEV.NAME >PUSHW L.FD.DEV.NAME
>SYSCALL MKDev >SYSCALL MKDev
bcs .9
lda ZPSlotPtr+1
and #$0F
tay
lda #A2osX.S.COM
sta A2osX.S,y
* clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
Dev.ParseArgs >LDYA ARGS Dev.ParseArgs lda (ZPArgPtr)
>STYA ZPArgPtr
lda (ZPArgPtr)
bne .1 bne .1
clc clc
rts rts
.1 stz ZPhParity .1 stz DCB+S.DCB.COM.BAUD
stz ZPhControl stz DCB+S.DCB.COM.BAUD+1
stz DCB+S.DCB.COM.BAUD+2
>LDYAI 256 stz DCB+S.DCB.COM.BAUD+3
>SYSCALL GetMem
bcs .2 .2 jsr DevNextChar
beq .90
>STYA ZPParityPtr
stx ZPhParity cmp #','
beq .3
>LDYAI 256
>SYSCALL GetMem jsr Dev.IsDigit
.2 bcs .90
>STYA ZPControlPtr
stx ZPhControl
>PUSHW ZPArgPtr
>PUSHW L.SSCANF.ARGS
>PUSHW L.DCB.BAUD
>PUSHW L.DCB.DATA
>PUSHW L.DCB.STOP
>PUSHW ZPParityPtr
>PUSHW ZPControlPtr
>PUSHBI 10 5 x byte PTRs
>SYSCALL SScanF
bcs .90 bcs .90
jsr Dev.BaudT10pA
bra .2
.3 jsr Dev.CheckBaud
bcs .99
.90 lda ZPhControl jsr DevNextChar
beq .91 beq .99
ldx #P2.Cnt-1
.4 cmp P2,x
beq .5
dex
bpl .4
.90 bra .99
.5 lda #%11100000
trb DEVCMD
txa
asl
asl
asl
asl
asl
tsb DEVCMD
jsr DevCheckSep
bcs .99
ldx #P3.Cnt-1
.6 cmp P3,x
beq .7
dex
bpl .6
bra .99
>SYSCALL FreeMem .7 lda #%01100000
trb DEVCTL
txa
asl
asl
asl
asl
asl
tsb DEVCTL
jsr DevCheckSep
bcs .99
.91 lda ZPhParity ldx #P4.Cnt-1
beq .92
.8 cmp P4,x
beq .9
dex
bpl .8
bra .99
>SYSCALL FreeMem .9 lda #%10000000
trb DEVCTL
txa
rol
rol
tsb DEVCTL
jsr DevCheckSep
bcs .99
.92 lda #E.SYN ldx #P5.Cnt-1
.10 cmp P5,x
beq .11
dex
bpl .10
bra .99
.11 stx DEVFLOWCTRL
clc
rts
.99 lda #E.SYN
sec sec
rts rts
*-------------------------------------- *--------------------------------------
DevCheckSep jsr DevNextChar
beq .9
cmp #','
bne .9
jsr DevNextChar
beq .9
clc
rts
.9 sec
rts
*--------------------------------------
DevNextChar lda (ZPArgPtr)
beq .9
inc ZPArgPtr
bne .9
inc ZPArgPtr+1
.9 rts
*--------------------------------------
Dev.IsDigit cmp #'0'
bcc .9
cmp #'9'+1
bcs .99
and #$0F
rts
.9 sec
.99 rts
*--------------------------------------
Dev.BaudT10pA pha
>PUSHL DCB+S.DCB.COM.BAUD
>PUSHBI 0
>PUSHBI 0
>PUSHBI 0
>PUSHBI 10
>FPU MUL32
>PUSHBI 0
>PUSHBI 0
>PUSHBI 0
pla
>PUSHA
>FPU ADD32
>PULLL DCB+S.DCB.COM.BAUD
rts
*--------------------------------------
Dev.CheckBaud ldx #0
.1 txa
asl
asl
tay
lda DCB+S.DCB.COM.BAUD
cmp P1,y
bne .7
lda DCB+S.DCB.COM.BAUD+1
cmp P1+1,y
bne .7
lda DCB+S.DCB.COM.BAUD+2
cmp P1+2,y
bne .7
lda DCB+S.DCB.COM.BAUD+3
cmp P1+3,y
bne .7
lda #$F
trb DEVCTL
txa
tsb DEVCTL
clc
rts
.7 inx
cpx #P1.Cnt
bcc .1
rts
*--------------------------------------
CS.END CS.END
DEVSIG.Offset .HS 05070B0C DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131 DEVSIG.Value .HS 38180131
@ -180,8 +338,36 @@ MSG.DETECT .AS "Apple SSC (Super Serial Card,//c Serial Port) Driver"
.AZ "." .AZ "."
MSG.DETECT.OK .AZ "SSC Installed As Device : %s\r\n" MSG.DETECT.OK .AZ "SSC Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "No SSC Found." MSG.DETECT.KO .AZ "No SSC Found."
SSCANF.ARGS .AZ "%u,%d,%d,%s,%s" *--------------------------------------
ARGS .BS 2 P1 .DA >115200 Baud
.DA >50
.DA >75
.DA >110
.DA >135
.DA >150
.DA >300
.DA >600
.DA >1200
.DA >1800
.DA >2400
.DA >3600
.DA >4800
.DA >7200
.DA >9600
.DA >19200
P1.Cnt .EQ 16
*--------------------------------------
P2 .AS "NOEMS" Parity
P2.Cnt .EQ *-P2
*--------------------------------------
P3 .AS "8765" Data
P3.Cnt .EQ *-P3
*--------------------------------------
P4 .AS "12" Stop
P4.Cnt .EQ *-P4
*--------------------------------------
P5 .AS "NHX" flow Control
P5.Cnt .EQ *-P5
*-------------------------------------- *--------------------------------------
FD.DEV .DA #S.FD.T.CDEV FD.DEV .DA #S.FD.T.CDEV
.DA #0 HANDLER .DA #0 HANDLER
@ -241,6 +427,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne .3 bne .3
ldy #S.DCB.COM-1 ldy #S.DCB.COM-1
.2 lda DCB,y .2 lda DCB,y
sta (ZPBufPtr),y sta (ZPBufPtr),y
dey dey
@ -267,6 +454,15 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
clc clc
rts rts
.ELSE .ELSE
ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF
beq .4
lda #1
.4 dec
.FIN .FIN
.8 clc .8 clc
rts rts
@ -323,28 +519,17 @@ OPEN.1 php
stz OUTBUF.HEAD stz OUTBUF.HEAD
stz OUTBUF.TAIL stz OUTBUF.TAIL
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
lda #SSC.CMD.TEIRQ+SSC.CMD.DTR
sta SSC.CMD-$8F,x
.ELSE
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x
.FIN .FIN
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda DEVCTL
sta SSC.CTL-$8F,x
lda DEVCMD
sta SSC.CMD-$8F,x
lda SSC.DATA-$8F,x discard any garbage byte lda SSC.DATA-$8F,x discard any garbage byte
lda SSC.STATUS-$8F,x clear any IRQ pending lda SSC.STATUS-$8F,x clear any IRQ pending
@ -370,7 +555,7 @@ OPEN.1 php
*-------------------------------------- *--------------------------------------
CLOSE lda DIB+S.DIB.S CLOSE lda DIB+S.DIB.S
bit #S.DIB.S.OPENED bit #S.DIB.S.OPENED
bne OPEN.E beq OPEN.E
php php
sei sei
@ -623,7 +808,7 @@ IRQ.INBUF sta $FFFF,y SELF MODIFIED
IRQ.1 pla IRQ.1 pla
*------------ IRQ Out *------------ IRQ Out
IRQ.2 bit #SSC.STATUS.TDRE IRQ.2 bit #SSC.STATUS.TDRE
beq IRQ.8 no transmition possible.... beq IRQ.8 no transmission possible....
ldy OUTBUF.TAIL something to transmit ? ldy OUTBUF.TAIL something to transmit ?
cpy OUTBUF.HEAD cpy OUTBUF.HEAD
@ -646,6 +831,14 @@ IRQ.9 sec
DRV.CS.END DRV.CS.END
DEVSLOTn08F .BS 1 DEVSLOTn08F .BS 1
.DO SSCIRQ=1 .DO SSCIRQ=1
DEVCMD .DA #SSC.CMD.NOP+SSC.CMD.TEIRQ+SSC.CMD.DTR
DEVCTL .DA #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B9600
.ELSE
DEVCMD .DA #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR
DEVCTL .DA #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B115200
.FIN
DEVFLOWCTRL .BS 1
.DO SSCIRQ=1
INBUF.TAIL .BS 1 INBUF.TAIL .BS 1
INBUF.HEAD .BS 1 INBUF.HEAD .BS 1
OUTBUF.TAIL .BS 1 OUTBUF.TAIL .BS 1
@ -674,11 +867,11 @@ DCB .DA #S.DCB.T.COM
.FIN .FIN
.DA #8 DATA .DA #8 DATA
.DA #1 STOP .DA #1 STOP
.DA #S.DCB.COM.P.NONE PARITY .DA #'N' PARITY
.DA #S.DCB.COM.C.XONXOFF .DA #'N' FLOW
*-------------------------------------- *--------------------------------------
DRV.END DRV.END
MAN MAN
SAVE usr/src/shared/x.ssc.drv.s SAVE usr/src/shared/x.ssc.drv.s
LOAD usr/src/drv/ssc.i.drv.s LOAD usr/src/drv/ssc.drv.s
ASM ASM

View File

@ -78,8 +78,7 @@ ARG32 .EQ ARG+1
TXTPTR .EQ $B8 TXTPTR .EQ $B8
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR FAC 13 Bytes .OR FAC 12 Bytes
BIN.hMem .BS 1
BIN.R.CS.Start .BS 2 BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2 BIN.R.CS.End .BS 2
BIN.R.End .BS 2 BIN.R.End .BS 2
@ -97,7 +96,8 @@ ENV.bExp .BS 1
.ED .ED
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPTMP 5 Bytes .OR ZPTMP 6 Bytes
BIN.hMem .BS 1
PS.bTXT .BS 1 PS.bTXT .BS 1
PS.hMem .BS 1 PS.hMem .BS 1
PS.MemPtr .BS 2 PS.MemPtr .BS 2

View File

@ -153,9 +153,9 @@ Kernel.Init3 sta SETALTZP
jsr SysScrInit jsr SysScrInit
bcs * bcs *
sta CLRMIXED sta CLRMIXED
>PUSHWI DEV.CONSOLE >PUSHWI DEV.CONSOLE
>PUSHBI O.RDWR >PUSHBI O.RDWR
>PUSHBI S.FI.T.TXT >PUSHBI S.FI.T.TXT
@ -473,7 +473,7 @@ CPU.Init >PUSHWI MSG.CPU
lda A2osX.HZ lda A2osX.HZ
asl asl
tax tax
.1 bit VBL //e : Wait VBL high.... .1 bit VBL //e : Wait VBL high....
bpl .1 bpl .1
@ -492,11 +492,11 @@ CPU.Init >PUSHWI MSG.CPU
pla (4) pla (4)
pha (3) pha (3)
pla (4) pla (4)
iny iny
cpy #100 cpy #100
bne .5 bne .5
ldy #0 ldy #0
inc A2osX.CPUSPEED+1 inc A2osX.CPUSPEED+1
@ -522,7 +522,7 @@ CPU.Init2c sta CLRIOUDIS
bit IO.IIC.CLRVBLIRQ clear //c IRQ bit IO.IIC.CLRVBLIRQ clear //c IRQ
.3 lda #20 .3 lda #40
.4 pha (3) .4 pha (3)
pla (4) pla (4)
@ -531,11 +531,11 @@ CPU.Init2c sta CLRIOUDIS
dec dec
bne .4 bne .4
iny iny
cpy #100 cpy #100
bne .5 bne .5
inc A2osX.CPUSPEED+1 inc A2osX.CPUSPEED+1
ldy #0 ldy #0
@ -798,36 +798,29 @@ DevMgrInit.VSD ldy #VSD.PATCH.SIZE-1
.1 lda $BF41,y .1 lda $BF41,y
cmp VSD.PATCH,y cmp VSD.PATCH,y
bne .9 bne .9
dey dey
bpl .1 bpl .1
php php
sei sei
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
sta CLRALTZP sta CLRALTZP
lda $d002 ldx $d001
sta SETALTZP sta SETALTZP
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
sec
sbc #$8F
lsr
lsr
lsr
lsr
tax
lda #A2osX.S.VSDRIVE lda #A2osX.S.VSDRIVE
sta A2osX.S,x sta A2osX.S,x
plp plp
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VSD.PATCH bit RRAMWRAMBNK2 VSD.PATCH bit RRAMWRAMBNK2
jsr $D001 jsr $D002
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
rts rts
VSD.PATCH.SIZE .EQ *-VSD.PATCH VSD.PATCH.SIZE .EQ *-VSD.PATCH
@ -879,7 +872,7 @@ IrqMgrInit >LDYAI MSG.IRQ
.9 plp .9 plp
sec sec
rts rts
.1 cmp #A2osX.HWType.IIc .1 cmp #A2osX.HWType.IIc
beq .2 beq .2
@ -891,10 +884,10 @@ IrqMgrInit >LDYAI MSG.IRQ
>LDYAI CORE.IRQ.TCLOCK >LDYAI CORE.IRQ.TCLOCK
jsr IrqMgrInit.SetV jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.TCLOCK.Off >LDYAI CORE.IRQ.TCLOCK.Off
>STYA CORE.Quit+1 >STYA CORE.Quit+1
>LDYAI MSG.IRQ.CLOCK >LDYAI MSG.IRQ.CLOCK
bra .8 bra .8
@ -904,7 +897,7 @@ IrqMgrInit >LDYAI MSG.IRQ
lda #$60 lda #$60
sta $5fa sta $5fa
sta $5fb sta $5fb
stz $4FF //c ROM FF stz $4FF //c ROM FF
stz $4FC //c ROM 1,2,3,4,5 stz $4FC //c ROM 1,2,3,4,5
plp plp
@ -987,7 +980,7 @@ IrqMgrInit.TClock
sta CLRPAGE2 sta CLRPAGE2
sta $478,x sta $478,x
sta $7f8,x sta $7f8,x
sta SETPAGE2 sta SETPAGE2
sta $478,x sta $478,x
sta $7f8,x sta $7f8,x

View File

@ -343,8 +343,8 @@ K.FreeMem.ERR >PUSHWI K.FreeMem.MSG
>PUSHA >PUSHA
>PUSHBI 2 >PUSHBI 2
.1 >SYSCALL2 printf >SYSCALL2 printf
* >DEBUG
lda #E.INVH lda #E.INVH
sec sec
rts rts

View File

@ -23,14 +23,14 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
jsr VSDRIVE.Check jsr VSDRIVE.Check
bcs .90 bcs .90
.1 lda #$C1 Self Modified stz TmpPtr1
lda #$C1
sta TmpPtr1+1
.2 jsr SSC.Detect .2 jsr SSC.Detect
bcs .99 bcs .99
stx DRV+1 DRV.Slotn0 lda TmpPtr1+1 Slot Cn
sta .1+1 Slot Cn
and #$0F and #$0F
pha slot n pha slot n
>LDYAI VSDRIVE.SSCOK >LDYAI VSDRIVE.SSCOK
@ -66,8 +66,9 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
.92 pha Push EC .92 pha Push EC
>LDYAI VSDRIVE.SRVKO >LDYAI VSDRIVE.SRVKO
jsr PrintFYA jsr PrintFYA
inc .1+1
lda .1+1 inc TmpPtr1+1
lda TmpPtr1+1
cmp #$C8 cmp #$C8
bne .2 Go try next SSC.... bne .2 Go try next SSC....
@ -75,12 +76,12 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
jsr PrintFYA jsr PrintFYA
rts rts
*-------------------------------------- *--------------------------------------
VSDRIVE.Check ldx #REGULAR.SIZE VSDRIVE.Check ldx #COPYRIGHT.LEN
sec sec
.1 lda DRV.EntryPoint-1,x .1 lda DRV.EntryPoint-1,x
eor REGULAR-1,x eor COPYRIGHT-1,x
bne .9 bne .9
dex dex
@ -90,8 +91,7 @@ VSDRIVE.Check ldx #REGULAR.SIZE
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SSC.Detect stz TmpPtr1 SSC.Detect
sta TmpPtr1+1
.1 ldx #DEVSIG.Value-DEVSIG.Offset-1 .1 ldx #DEVSIG.Value-DEVSIG.Offset-1
.2 ldy DEVSIG.Offset,x .2 ldy DEVSIG.Offset,x
@ -102,7 +102,18 @@ SSC.Detect stz TmpPtr1
dex dex
bpl .2 bpl .2
lda TmpPtr1+1 A=SlotCN clc
rts
.3 inc TmpPtr1+1 no match, try next slot....
lda TmpPtr1+1
cmp #$C8
bne .1
sec
rts
*--------------------------------------
VSDRIVE.Ping lda TmpPtr1+1 A=SlotCN
asl asl
asl asl
asl asl
@ -110,38 +121,32 @@ SSC.Detect stz TmpPtr1
clc clc
adc #$8F adc #$8F
tax X=SlotN0 tax X=SlotN0
php
sei
stz SSC.RESET-$8F,x stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
lda #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B115200
sta SSC.CTL-$8F,x sta SSC.CTL-$8F,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x sta SSC.CMD-$8F,x
lda TmpPtr1+1 A=Slot Cn, X=n0 lda SSC.DATA-$8F,x discard any garbage byte
lda SSC.STATUS-$8F,x clear any IRQ pending
clc
rts X=SlotN0, A=SlotCN
.3 inc TmpPtr1+1 no match, try next slot....
lda TmpPtr1+1
cmp #$C8
bne .1
.9 sec
rts
*--------------------------------------
VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
stz VSDRIVE.Ping.TO stz VSDRIVE.Ping.TO
stz VSDRIVE.Ping.TO+1 stz VSDRIVE.Ping.TO+1
.10 jsr VSDRIVE.IncTimer Wait....... .10 jsr VSDRIVE.IncTimer Wait.......
bne .10 bne .10
ldy #10 ldy #10
.1 lda SSC.STATUS-$8F,x .1 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Ready for transmit? and #SSC.STATUS.nDCD Ready for transmit?
bne .20 beq .20
jsr VSDRIVE.IncTimer Wait....... jsr VSDRIVE.IncTimer Wait.......
bne .1 bne .1
@ -150,13 +155,9 @@ VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
bne .1 bne .1
lda #1 lda #1
sec bra .9 Time Out.....
rts Time Out.....
.20 stz VSDRIVE.Ping.TO .20 ldy #5 5 bytes to send
stz VSDRIVE.Ping.TO+1
ldy #5 5 bytes to send
.2 lda VSDRIVE.CMDS-1,y .2 lda VSDRIVE.CMDS-1,y
sta SSC.DATA-$8F,x sta SSC.DATA-$8F,x
@ -169,20 +170,20 @@ VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
bne .3 bne .3
lda #2 lda #2
sec bra .9
rts
.4 dey .4 dey
bne .2 next byte bne .2 next byte
lda #521^$ffff 522 bytes to recieve lda #521^$ffff 522 bytes to receive
sta VSDRIVE.Ping.BC sta VSDRIVE.Ping.BC
lda /521^$ffff lda /521^$ffff
sta VSDRIVE.Ping.BC+1 sta VSDRIVE.Ping.BC+1
stz VSDRIVE.Ping.TO stz VSDRIVE.Ping.TO
stz VSDRIVE.Ping.TO+1 stz VSDRIVE.Ping.TO+1
ldy #3 EC if no byte recieved ldy #3 EC=3 if no byte received
.5 lda SSC.STATUS-$8F,x .5 lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF incoming char? and #SSC.STATUS.RDRF incoming char?
@ -192,6 +193,9 @@ VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
bne .5 bne .5
tya tya
.9 stz SSC.RESET-$8F,x
plp
sec sec
rts rts
@ -204,6 +208,10 @@ VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
inc VSDRIVE.Ping.BC+1 inc VSDRIVE.Ping.BC+1
bne .5 bne .5
lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE
sta SSC.CMD-$8F,x
plp
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -270,7 +278,7 @@ VSDRIVE.SetSlot ldx #2 Starts at Slot1
rts sec from CPX rts sec from CPX
*-------------------------------------- *--------------------------------------
VSDRIVE.Install ldx #PATCH.SIZE VSDRIVE.Install ldx #PATCH.LEN
.1 lda PATCH-1,x .1 lda PATCH-1,x
sta DRV.EntryPoint-1,x sta DRV.EntryPoint-1,x
@ -287,6 +295,31 @@ VSDRIVE.Install ldx #PATCH.SIZE
dex dex
bne .2 bne .2
lda TmpPtr1+1 A=SlotCN
asl
asl
asl
asl
ora #SSC.DATA
sta DRV.SSCSend.D+1
sta DRV.SSCGet.D+1
inc #SSC.STATUS
sta DRV.SSCSend.S+1
sta DRV.SSCGet.S+1
sta DRV.SSCClose.S+1
inc #SSC.CMD
sta DRV.INIT.C+1
sta DRV.SSCClose.C+1
lda TmpPtr1+1 A=SlotCN
and #$0F
sta DRV.START
bit RROMBNK1 bit RROMBNK1
clc clc
@ -308,15 +341,15 @@ VSDRIVE.OK .AZ "VSDRIVE Driver Successfully Installed.\n"
*-------------------------------------- *--------------------------------------
* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes) * ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
*-------------------------------------- *--------------------------------------
REGULAR .AS "(C)APPLE " COPYRIGHT .AS "(C)APPLE "
REGULAR.SIZE .EQ *-REGULAR COPYRIGHT.LEN .EQ *-COPYRIGHT
PATCH .PH DRV.EntryPoint PATCH .PH DRV.EntryPoint
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
jsr $D001 jsr $D002
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
rts rts
.EP .EP
PATCH.SIZE .EQ *-PATCH PATCH.LEN .EQ *-PATCH
*-------------------------------------- *--------------------------------------
* Driver * Driver
*-------------------------------------- *--------------------------------------
@ -327,9 +360,11 @@ PATCH.SIZE .EQ *-PATCH
* CMD = $C5+OP+BLKLO+BLKHI+CHKSUM * CMD = $C5+OP+BLKLO+BLKHI+CHKSUM
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS * DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
* reuses them after Block operation * reuses them after Block operation
* A1,A2 are used by Disk II Driver, * PC,A1,A2 are used by Disk II Driver,
* so we use it safely as Tmp Ptr * so we use it safely as Tmp Ptr
*-------------------------------------- *--------------------------------------
DRV.PCL .EQ $3A
DRV.PCH .EQ $3B
DRV.A1L .EQ $3C DRV.A1L .EQ $3C
DRV.A1H .EQ $3D DRV.A1H .EQ $3D
DRV.A2L .EQ $3E DRV.A2L .EQ $3E
@ -341,10 +376,8 @@ DRV.BLKNUM .EQ $46
*-------------------------------------- *--------------------------------------
DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF
DRV.START ldx #$ff Self Modified DRV.START .BS 1 SELF MODIFIED slot 0n
bit RRAMWRAMBNK2
lda DRV.COMMAND S=0,R=1,W=2,F=3 lda DRV.COMMAND S=0,R=1,W=2,F=3
bne .1 bne .1
@ -355,14 +388,16 @@ DRV.START ldx #$ff Self Modified
clc clc
rts rts
.9 lda #MLI.E.IO
* sec
rts
.1 cmp #3 .1 cmp #3
beq .8 Format .... beq .8 Format ....
bcs .9 bcc DRV.START.OK
DRV.START.IO lda #MLI.E.IO
sec
rts
DRV.START.OK tax
ora #2 W=2,R=3 ora #2 W=2,R=3
ldy DRV.UNITNUM ldy DRV.UNITNUM
@ -375,6 +410,7 @@ DRV.START ldx #$ff Self Modified
eor DRV.BLKNUM eor DRV.BLKNUM
eor DRV.BLKNUM+1 eor DRV.BLKNUM+1
sta DRV.CmdBuf.Sum Compute & store CheckSum sta DRV.CmdBuf.Sum Compute & store CheckSum
lda DRV.BLKNUM lda DRV.BLKNUM
sta DRV.CmdBuf.BlkL sta DRV.CmdBuf.BlkL
@ -385,6 +421,9 @@ DRV.START ldx #$ff Self Modified
*-------------------------------------- *--------------------------------------
php php
sei sei
* lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
DRV.INIT.C inc SSC.CMD SELF MODIFIED
ldy #4 Send 5 bytes including Sum ldy #4 Send 5 bytes including Sum
@ -400,8 +439,7 @@ DRV.START ldx #$ff Self Modified
dey dey
bpl .5 bpl .5
*-------------------------------------- *--------------------------------------
lda DRV.COMMAND dex 1-1=0 if read
dec 1-1=0 if read
bne DRV.DO.CMD.W go write bne DRV.DO.CMD.W go write
*-------------------------------------- *--------------------------------------
* Read block * Read block
@ -411,6 +449,7 @@ DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes
.1 jsr DRV.SSCGet .1 jsr DRV.SSCGet
eor DRV.CmdBuf.BlkH,y eor DRV.CmdBuf.BlkH,y
bne DRV.DO.CMD.ERR bne DRV.DO.CMD.ERR
dey dey
bpl .1 bpl .1
@ -428,36 +467,31 @@ DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes
* Y=0 from TAY * Y=0 from TAY
stz DRV.CmdBuf.Sum * stz DRV.CmdBuf.Sum
sec sec
.HS 90 BCC
.3 jsr DRV.SSCGet .3 clc
.4 jsr DRV.SSCGet
jsr $102 jsr $102
eor DRV.CmdBuf.Sum eor DRV.CmdBuf.Sum
sta DRV.CmdBuf.Sum sta DRV.CmdBuf.Sum
iny iny
bne .3 bne .4
bcc .4
inc DRV.BUFF+1 inc DRV.BUFF+1
clc bcs .3
bcc .3
dec DRV.BUFF+1
dec DRV.BUFF+1
.4 dec DRV.BUFF+1
jsr DRV.SSCGet jsr DRV.SSCGet
eor DRV.CmdBuf.Sum eor DRV.CmdBuf.Sum
bne DRV.DO.CMD.ERR beq DRV.DO.CMD.OK
plp
clc
rts A=0,CC from bcc .4
*-------------------------------------- *--------------------------------------
DRV.DO.CMD.ERR plp DRV.DO.CMD.ERR jsr DRV.SSCClose
lda #MLI.E.IO jmp DRV.START.IO
sec
rts
*-------------------------------------- *--------------------------------------
* Write Block * Write Block
*-------------------------------------- *--------------------------------------
@ -470,21 +504,21 @@ DRV.DO.CMD.W lda #$B1 lda (),y
stz DRV.CmdBuf.Sum stz DRV.CmdBuf.Sum
sec sec
.HS 90 BCC
.1 clc
.1 jsr $102 .2 jsr $102
jsr DRV.SSCSend jsr DRV.SSCSend
eor DRV.CmdBuf.Sum eor DRV.CmdBuf.Sum
sta DRV.CmdBuf.Sum sta DRV.CmdBuf.Sum
iny iny
bne .1 bne .2
bcc .2
inc DRV.BUFF+1 inc DRV.BUFF+1
clc bcs .1
bcc .1
dec DRV.BUFF+1
.2 dec DRV.BUFF+1 dec DRV.BUFF+1
* A = DRV.CmdBuf.Sum * A = DRV.CmdBuf.Sum
@ -499,33 +533,41 @@ DRV.DO.CMD.W lda #$B1 lda (),y
dey dey
bpl .3 bpl .3
*--------------------------------------
DRV.DO.CMD.OK
*--------------------------------------
DRV.SSCClose
* lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE
DRV.SSCClose.C dec SSC.CMD SELF MODIFIED
DRV.SSCClose.S bit SSC.STATUS SELF MODIFIED
bmi DRV.SSCClose.S
plp plp
clc clc
rts rts
*-------------------------------------- *--------------------------------------
DRV.SSCSend pha DRV.SSCSend pha
.1 lda SSC.STATUS-$8F,x DRV.SSCSend.S lda SSC.STATUS SELF MODIFIED
and #SSC.STATUS.TDRE Outgoing char? and #SSC.STATUS.TDRE Outgoing char?
beq .1 beq DRV.SSCSend.S
pla pla
sta SSC.DATA-$8F,x DRV.SSCSend.D sta SSC.DATA SELF MODIFIED
rts rts
*-------------------------------------- *--------------------------------------
DRV.SSCGet lda SSC.STATUS-$8F,x DRV.SSCGet
DRV.SSCGet.S lda SSC.STATUS SELF MODIFIED
and #SSC.STATUS.RDRF incoming char? and #SSC.STATUS.RDRF incoming char?
beq DRV.SSCGet beq DRV.SSCGet
lda SSC.DATA-$8F,x DRV.SSCGet.D lda SSC.DATA SELF MODIFIED
rts rts
*-------------------------------------- *--------------------------------------
DRV.102 bit RRAMWRAMBNK1 DRV.102 bit RRAMWRAMBNK1
sta (DRV.BUFF),y sta (DRV.BUFF),y
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
rts rts
DRV.102.LEN .EQ *-DRV.102 DRV.102.LEN .EQ *-DRV.102
*-------------------------------------- *--------------------------------------
DRV.CmdBuf.Sum .BS 1 Reverse order for dey DRV.CmdBuf.Sum .BS 1 Reverse order for dey