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
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 CurQTrack
@ -361,7 +351,7 @@ CS.RUN.LL.DISKII
>PUSHB DSSS0000
>PUSHB VolNum
>PUSHB CurTrack
>PUSHW ZPPtr1
>PUSHWI 0 Empty track
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s
bcs .9
@ -401,17 +391,18 @@ CS.RUN.LL.DISKII
jsr CS.RUN.LL.DISKII.V
bcs .99
jsr CS.RUN.MotorOn
* jsr CS.RUN.MotorOn
lda #5
jsr CS.RUN.Wait
* lda #10
* jsr CS.RUN.Wait
.80
>PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
* >PUSHB DSSS0000
* >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
* lda #10
* jsr CS.RUN.Wait
lda #5
jsr CS.RUN.Wait
clc
.99 rts
*--------------------------------------

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,10 +1,10 @@
NEW
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.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.Ph0Off .EQ $C080

View File

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

View File

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

View File

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

View File

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

View File

@ -152,9 +152,12 @@ TCP.IN.JMP.ESTBLSH
dex
bpl .1
bcc .70 ACK > SENT SEQ ????
lda TmpDWord+3
ldx TmpDWord+2
bne .2
tay
beq .4
@ -224,7 +227,8 @@ TCP.IN.JMP.ESTBLSH
jsr TCP.AddAYToSktCacheAtX
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
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.B .HS 0000 data buffer
.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
*--------------------------------------
@ -952,7 +991,7 @@ XDOS.SPStatus .HS 00000000
XDOS.DATA.LEN .EQ *-XDOS.DATA
.LIST OFF
.ED
*--------------------------------------
* zero fill to page boundary - 3 ($FEFD). so that cortland flag stays within page boundary.
.LIST ON
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.BadSeek
* lda XRW.ReqTrack
* jsr XRW.SEEK2T
* lda #5
* jsr XRW.Wait100usecA
* jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt
.2 jsr XRW.ReadAddr read next address field.
@ -217,7 +209,7 @@ XRW.TrackSelect lda #2
sta XRW.D2Trk-1,y
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
bra .1
@ -249,7 +241,15 @@ XRW.TrackSelect lda #2
jsr XRW.Seek
bra .3
.8 clc
.8
* jsr XRW.SEEK2T
* lda #1
* jsr XRW.Wait100usecA
* jsr XRW.SEEKOFF
clc
.9 rts
*--------------------------------------
.LIST ON
@ -309,14 +309,14 @@ XRW.ReadAddr ldy #$FC
tay if final checksum non-zero,
bne .99 (2) then error.
clc (2)
.9 lda IO.D2.RData,x (4)
bpl .9 (2)
eor #$DE (2)
bne .99 (2)
clc (2)
rts (6)
.99 sec
@ -344,7 +344,8 @@ XRW.Seek ldx XRW.UnitIndex
sta XRW.D2Trk-1,x will be current track at the end
tya
jsr XRW.Seek2QT
jsr XRW.Seek2QTXY
lda #1
bra .4
.1 pha
@ -377,10 +378,10 @@ XRW.Seek ldx XRW.UnitIndex
inc
inc
.3 jsr XRW.SEEK2QT2
.3 jsr XRW.SEEK2QTY
.4 lda XRW.SeekTime
jsr XRW.Wait100usecA
lda XRW.SeekTime
.4 jsr XRW.Wait100usecA
lda XRW.CurrentQTrack
cmp XRW.TargetQTrack
@ -389,51 +390,44 @@ XRW.Seek ldx XRW.UnitIndex
jsr XRW.Wait25600usec
XRW.SEEKOFF pha
lda IO.D2.Ph0Off,x
nop
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
lda A2L
ora #IO.D2.RData
sta .1+1
sta .2+1
lda IO.D2.Ph0Off,x
.1 lda IO.D2.RData SELF MODIFIED
bit XRW.D2VolNum-1,x
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lda IO.D2.Ph0Off,y
.2 lda IO.D2.RData SELF MODIFIED
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
*--------------------------------------
* 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
bpl .1
lda XRW.ReqTrack
jsr XRW.SEEK2T
phx
phy
* lda XRW.ReqTrack
* jsr XRW.SEEK2T
* phx
* phy
jsr XRW.PreNibble
ply
plx
jsr XRW.SEEKOFF
* ply
* plx
* jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt
.DO XRWDBG=1
jsr XRW.DEBUG
.FIN
.2 jsr XRW.ReadAddr
bcs .3 (2)
@ -765,13 +763,6 @@ wnibl sta IO.D2.WLoad,x (5) nibl write
XRW.Write.RTS rts (6)
.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
lda #0
XRW.Wait100usecA
@ -945,65 +936,43 @@ L57CD pla place last byte into user buffer
XRW.Read.RTS rts
.LIST OFF
*--------------------------------------
* determine if motor is stopped
*
* 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.
XRW.SEEK2T ldx XRW.UnitIndex
jsr XRW.Trk2Qtrk
.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.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
XRW.SEEK2QTXY pha
and #6
ora A2L
tax
pla
inc
.7 and #$0F
ora #$B0
cmp #"9"+1
bcc .8
XRW.SEEK2QTY and #6
ora A2L
tay
adc #6
lda A2L
ora #IO.D2.RData
sta .1+1
sta .2+1
.8 sta $700,x
inx
lda IO.D2.Ph0On,y
.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
*--------------------------------------
.LIST ON

View File

@ -1,15 +1,17 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65816
.OR $2000
.TF PRODOS.FX,TSYS
.LIST OFF
.OP 65816
.OR $2000
.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
LOWERCASE .EQ 1
ACL .EQ 1
LOGO .EQ 1
*--------------------------------------
XRWDBG .EQ 1
*--------------------------------------
.INB inc/zp.i
.INB inc/io.i
@ -198,7 +200,7 @@ X.Unpak.XatYA sty ZPOutBufPtr
lda PAKME.Table,x
sta ZPInBufPtr
lda PAKME.Table+1,x
sta ZPInBufPtr+1
sta ZPInBufPtr+1
.INB usr/src/shared/x.unpak.s
.DO 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
bcs .9
>SLEEP
>PUSHEA.G SA.REMOTE
lda hSocket

View File

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

View File

@ -9,11 +9,12 @@ NEW
.TF drv/ssc.drv
.FIN
*--------------------------------------
ZPArgPtr .EQ ZPBIN
ZPParityPtr .EQ ZPBIN+2
ZPControlPtr .EQ ZPBIN+4
ZPhParity .EQ ZPBIN+6
ZPhControl .EQ ZPBIN+7
.DUMMY
.OR ZPBIN
ZS.START
ZPArgPtr .BS 2
ZPSlotPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -22,10 +23,9 @@ CS.START cld
.DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
.DA CS.END-CS.START Code Length
.DA 0
.DA 0
.DA #32 SS
.DA #10 ZP
.DA 0
*--------------------------------------
* Relocation Table
@ -36,20 +36,16 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DRV.CS.START .DA DRV.CS.START
L.FD.DEV .DA FD.DEV
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
*--------------------------------------
Dev.Detect >STYA ARGS
Dev.Detect >STYA ZPArgPtr
>LDYA L.MSG.DETECT
>SYSCALL PutS
stz ZPArgPtr
stz ZPSlotPtr
lda #$C1
sta ZPArgPtr+1
sta ZPSlotPtr+1
.1 and #$0f
tay
@ -59,7 +55,7 @@ Dev.Detect >STYA ARGS
ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPArgPtr),y
lda (ZPSlotPtr),y
cmp DEVSIG.Value,x
bne .3
@ -69,24 +65,19 @@ Dev.Detect >STYA ARGS
bra .4
.3 inc FD.DEV.NAME+3
inc ZPArgPtr+1 no match, try next slot....
lda ZPArgPtr+1
inc ZPSlotPtr+1 no match, try next slot....
lda ZPSlotPtr+1
cmp #$C8
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL PutS
lda #MLI.E.NODEV Not Found in any slot, exiting
sec
rts
.99 rts
.4 lda ZPArgPtr+1
and #$0F
pha
tay
lda #A2osX.S.COM
sta A2osX.S,y
pla
.4 lda ZPSlotPtr+1
asl
asl
asl
@ -94,8 +85,9 @@ Dev.Detect >STYA ARGS
clc
adc #$8F
sta DEVSLOTn08F
jsr Dev.ParseArgs
bcs .9
bcs .99
.8 >PUSHW L.MSG.DETECT.OK
>PUSHW L.FD.DEV.NAME
@ -114,61 +106,227 @@ Dev.Detect >STYA ARGS
>PUSHW L.FD.DEV
>PUSHW L.FD.DEV.NAME
>SYSCALL MKDev
bcs .9
lda ZPSlotPtr+1
and #$0F
tay
lda #A2osX.S.COM
sta A2osX.S,y
* clc
.9 rts
*--------------------------------------
Dev.ParseArgs >LDYA ARGS
>STYA ZPArgPtr
lda (ZPArgPtr)
Dev.ParseArgs lda (ZPArgPtr)
bne .1
clc
rts
.1 stz ZPhParity
stz ZPhControl
>LDYAI 256
>SYSCALL GetMem
bcs .2
>STYA ZPParityPtr
stx ZPhParity
>LDYAI 256
>SYSCALL GetMem
.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
.1 stz DCB+S.DCB.COM.BAUD
stz DCB+S.DCB.COM.BAUD+1
stz DCB+S.DCB.COM.BAUD+2
stz DCB+S.DCB.COM.BAUD+3
.2 jsr DevNextChar
beq .90
cmp #','
beq .3
jsr Dev.IsDigit
bcs .90
jsr Dev.BaudT10pA
bra .2
.3 jsr Dev.CheckBaud
bcs .99
.90 lda ZPhControl
beq .91
jsr DevNextChar
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
beq .92
ldx #P4.Cnt-1
.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
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
DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131
@ -180,8 +338,36 @@ MSG.DETECT .AS "Apple SSC (Super Serial Card,//c Serial Port) Driver"
.AZ "."
MSG.DETECT.OK .AZ "SSC Installed As Device : %s\r\n"
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
.DA #0 HANDLER
@ -241,6 +427,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne .3
ldy #S.DCB.COM-1
.2 lda DCB,y
sta (ZPBufPtr),y
dey
@ -267,6 +454,15 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
clc
rts
.ELSE
ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF
beq .4
lda #1
.4 dec
.FIN
.8 clc
rts
@ -323,28 +519,17 @@ OPEN.1 php
stz OUTBUF.HEAD
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
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.STATUS-$8F,x clear any IRQ pending
@ -370,7 +555,7 @@ OPEN.1 php
*--------------------------------------
CLOSE lda DIB+S.DIB.S
bit #S.DIB.S.OPENED
bne OPEN.E
beq OPEN.E
php
sei
@ -623,7 +808,7 @@ IRQ.INBUF sta $FFFF,y SELF MODIFIED
IRQ.1 pla
*------------ IRQ Out
IRQ.2 bit #SSC.STATUS.TDRE
beq IRQ.8 no transmition possible....
beq IRQ.8 no transmission possible....
ldy OUTBUF.TAIL something to transmit ?
cpy OUTBUF.HEAD
@ -646,6 +831,14 @@ IRQ.9 sec
DRV.CS.END
DEVSLOTn08F .BS 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.HEAD .BS 1
OUTBUF.TAIL .BS 1
@ -674,11 +867,11 @@ DCB .DA #S.DCB.T.COM
.FIN
.DA #8 DATA
.DA #1 STOP
.DA #S.DCB.COM.P.NONE PARITY
.DA #S.DCB.COM.C.XONXOFF
.DA #'N' PARITY
.DA #'N' FLOW
*--------------------------------------
DRV.END
MAN
SAVE usr/src/shared/x.ssc.drv.s
LOAD usr/src/drv/ssc.i.drv.s
LOAD usr/src/drv/ssc.drv.s
ASM

View File

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

View File

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

View File

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

View File

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