Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-08-25 13:23:59 +02:00
parent f5fa2094c1
commit 3ad3f9fd18
12 changed files with 419 additions and 267 deletions

View File

@ -684,6 +684,7 @@ Read formatted data from string
TODO : %10s
`>LDYA s`
`>SYSCALL sscanf`
**Out:**
A = Number of arguments filled.

Binary file not shown.

Binary file not shown.

View File

@ -92,12 +92,15 @@ CS.RUN.IPOK ldy #S.PS.ARGC
lda #1
>SYSCALL GetArg
>PUSHYA
>PUSHBI 2
>LDYA L.MSG.UNKNOWN
>SYSCALL printf
bra .99
.9 >LDYA L.MSG.USAGE
.99 >SYSCALL puts
lda #K.E.SYN
>SYSCALL puts
.99 lda #K.E.SYN
sec
rts

View File

@ -995,7 +995,7 @@ DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ
>PSTR "ANSI 80c Console"
.DA #S.DIB.T.CHAR
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
DRV.END
MAN

View File

@ -372,11 +372,11 @@ CLOSE ldx DEVSLOTx0
clc
rts
*--------------------------------------
READ >STYA ZPIOCTL
php
READ php
sei
>STYA ZPIOCTL
ldx DEVSLOTx0
lda /PP.RxEvent
@ -461,27 +461,11 @@ READ >STYA ZPIOCTL
clc
rts
*--------------------------------------
WRITE >STYA ZPIOCTL
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
ldx #5
ldy #S.ETH.SRCMAC+5
.10 lda DCB+S.DCB.NIC.MAC,x
sta (ZPBufPtr),y
dey
dex
bpl .10
php
WRITE php
sei
>STYA ZPIOCTL
ldx DEVSLOTx0
lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL
@ -520,11 +504,30 @@ WRITE >STYA ZPIOCTL
bne .1
.9 lda #MLI.E.EOF
plp
sec
rts
WRITE.1 ldy #0
WRITE.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
ldx #5
ldy #S.ETH.SRCMAC+5
.10 lda DCB+S.DCB.NIC.MAC,x
sta (ZPBufPtr),y
dey
dex
bpl .10
ldx DEVSLOTx0
ldy #0
.1 inc Counter
bne .2
@ -568,6 +571,7 @@ DCB .DA #S.DCB.T.NIC
.BS 1 LINK
.BS 1 SPEED
.HS 000E3A123456 MAC
.BS 12 IP/MASK/GW
*--------------------------------------
DRV.END
MAN

View File

@ -11,12 +11,9 @@ AUTO 4,1
.INB INC/MLI.ERR.I
.INB INC/NIC.I
.INB INC/NIC.W5100.I
.INB INC/LIBTCPIP.I
.INB INC/ETH.I
*--------------------------------------
ZPTmpPTR .EQ ZPDRV
RXTX.Size .EQ ZPDRV+2
Counter .EQ ZPDRV+4
Offset .EQ ZPDRV+6
ZPArgPtr .EQ ZPDRV
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -26,21 +23,31 @@ CS.START cld
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
.DA DEV.HEADER-CS.START Device Header Offset
.DA DRV.CS.START-CS.START Driver Code Offset
.DA DRV.CS.END-DRV.CS.START Drv Code Length
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
L.DRV.CS.START .DA DRV.CS.START
L.FD.DEV .DA FD.DEV
L.FD.DEV.NAME .DA FD.DEV.NAME
L.SSCANF.MAC .DA SSCANF.MAC
L.MAC0 .DA DCB+S.DCB.NIC.MAC
L.MAC1 .DA DCB+S.DCB.NIC.MAC+1
L.MAC2 .DA DCB+S.DCB.NIC.MAC+2
L.MAC3 .DA DCB+S.DCB.NIC.MAC+3
L.MAC4 .DA DCB+S.DCB.NIC.MAC+4
L.MAC5 .DA DCB+S.DCB.NIC.MAC+5
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >STYA Args
Dev.Detect >STYA ARGS
>LDYA L.MSG.DETECT
>SYSCALL printf
>SYSCALL puts
ldx #$70+$88
ldy #7
@ -75,7 +82,7 @@ Dev.Detect >STYA Args
cmp #2000
beq .3
.2 dec DEV.HEADER.NAME+3
.2 dec FD.DEV.NAME+3
txa
sec
sbc #$10
@ -84,7 +91,7 @@ Dev.Detect >STYA Args
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL printf
>SYSCALL puts
lda #MLI.E.NODEV
sec
@ -94,250 +101,177 @@ Dev.Detect >STYA Args
lda #A2osX.S.NIC
sta A2osX.S,y
>LDYA ARGS
>STYA ZPTmpPTR
jsr Dev.ParseArgs
bcs .9
lda (ZPTmpPTR)
bne .4
lda #$00
sta MAC
lda #$08
sta MAC+1
lda #$DC
sta MAC+2
lda A2osX.RANDOM16
eor A2osX.TIMER16
sta MAC+3
eor A2osX.RANDOM16+1
sta MAC+4
eor A2osX.TIMER16+1
sta MAC+5
bra .8
.4 jsr DecodeMac
bcc .8
lda #K.E.SYN
sec
rts
.8 >PUSHW L.DEV.HEADER.NAME
.8 >PUSHW L.FD.DEV.NAME
>PUSHBI 2
>LDYA L.MSG.DETECT.OK
>SYSCALL printf
>PUSHWI DRV.END
>PUSHWI DRV.CS.END
>PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START
>SYSCALL InsDrv
bcs .9
>STYA FD.DEV+S.FD.DEV.DRVPTR
>LDYA L.FD.DEV
>SYSCALL MKDEV
.9 rts
*--------------------------------------
Dev.ParseArgs >LDYA ARGS
>STYA ZPArgPTR
lda (ZPArgPTR)
bne .1
lda A2osX.RANDOM16
eor A2osX.TIMER16
sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1
sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1
sta DCB+S.DCB.NIC.MAC+5
clc
rts
*--------------------------------------
.INB /A2OSX.SRC/DRV/X.NET.DRV.S
.1 >PUSHW L.MAC5
>PUSHW L.MAC4
>PUSHW L.MAC3
>PUSHW L.MAC2
>PUSHW L.MAC1
>PUSHW L.MAC0
>PUSHBI 12 6 x byte PTRs
>PUSHW L.SSCANF.MAC
>LDYA ZPArgPtr
>SYSCALL sscanf
bcc .8
lda #K.E.SYN
sec
.8 rts
*--------------------------------------
CS.END
MSG.DETECT .AZ "UtherNet2/W5100 Driver.\r\n"
MSG.DETECT.OK .AZ "UtherNet2/W5100 Installed As Device : %S\r\n"
MSG.DETECT.KO .AZ "Hardware Not Found.\r\n"
Args .BS 2
ARGS .BS 2
MSG.DETECT .AZ "UtherNet2/W5100 Driver."
MSG.DETECT.OK .AZ "UtherNet2/W5100 Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "Hardware Not Found."
SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h"
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #0
.BS 6
DEV.HEADER.NAME .AZ "ETH7"
FD.DEV .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.DA 0 BUSPTR
.BS 2 DRVPTR
FD.DEV.NAME .AZ "ETH7" NAME
.HS 000000
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA STATUS
.DA READBLOCK
.DA WRITEBLOCK
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
Counter .EQ ZPDRV+4
Offset .EQ ZPDRV+6
RXTX.Size .EQ ZPDRV+8
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA CONTROL
.DA A2osX.BADCALL
.DA OPEN
.DA CLOSE
.DA A2osX.BADCALL
.DA A2osX.BADCALL
L.DEVSTAT .DA DEVSTAT
.DA READ
.DA WRITE
.DA A2osX.BADCALL IRQ
.DA 0 end or relocation
*--------------------------------------
STATUS >LDYA L.DEVSTAT
clc
rts
*--------------------------------------
READBLOCK ldx DEVSLOTx0
STATUS >STYA ZPIOCTL
>AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI
ora W5100.DR,x LO
bne READBLOCK.RxOK
lda #MLI.E.EOF
sec
rts
READBLOCK.RxOK >AR.SELECT S0.RX.RD
lda W5100.DR,x get the received ptr HI
sta offset+1
ldy W5100.DR,x get the received ptr LO
sty offset
and /RXTX.MASK
ora /RX.BASE
sta W5100.AR,x
tya
sta W5100.AR+1,x
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
beq .1
lda W5100.DR,x get RX.Size HI
sta RXTX.Size+1
cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB
ldy W5100.DR,x get RX.Size LO
sty RXTX.Size
>SYSCALL getmem
bcs .99
>STYA ZPTmpPTR
stx .8+1
sty .8+3
sta .8+5
lda RXTX.Size
sec
sbc #2 Header Size
sta (ZPTmpPTR)
eor #$ff
sta Counter
ldy #1
lda RXTX.Size+1
sbc #0
sta (ZPTmpPTR),y
eor #$ff
sta Counter+1
ldx DEVSLOTx0
ldx #S.DIB-1
.HS 2C bit abs
.1 ldx #3
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
.2 inc Counter
bne .3
inc Counter+1
beq .4
.3 lda W5100.DR,x
sta (ZPTmpPTR),y
iny
bne .2
inc ZPTmpPTR+1
bne .2
.4 >AR.SELECT S0.RX.RD
lda Offset
clc
adc RXTX.Size
pha save LO
lda Offset+1
adc RXTX.Size+1
sta W5100.DR,x write HI
pla
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #W5100.AR.S0.CR.RCVD
sta W5100.DR,x
.8 ldx #$ff hMem
ldy #$ff PtrLO
lda #$ff PtrHI
clc
.99 rts
*--------------------------------------
WRITEBLOCK >STYA ZPTmpPTR
lda (ZPTmpPTR)
sta RXTX.Size
eor #$ff
sta Counter
ldy #1
lda (ZPTmpPTR),y
sta RXTX.Size+1
eor #$ff
sta Counter+1
ldx DEVSLOTx0
>AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI
ldy W5100.DR,x LO
cpy RXTX.Size
sbc RXTX.Size+1
bcs WRITEBLOCK.1
lda #MLI.E.EOF
sec
rts
WRITEBLOCK.1 ldy #S.ETH.SRCMAC+5
ldx #5
.1 lda MAC,x
sta (ZPTmpPTR),y
dey
.2 lda DIB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .1
ldx DEVSLOTx0
bpl .2
>AR.SELECT S0.TX.WR
lda W5100.DR,x Get HI
ldy W5100.DR,x Get LO
and /RXTX.MASK
ora /TX.BASE
sta W5100.AR,x Write HI
sta Offset+1
tya
sta W5100.AR+1,x Write LO
sta Offset
ldy #2
.2 inc Counter
bne .3
inc Counter+1
beq .8
.3 lda (ZPTmpPTR),y
sta W5100.DR,x
iny
bne .2
inc ZPTmpPTR+1
bne .2
.8 >AR.SELECT S0.TX.WR
lda Offset
clc
adc RXTX.Size
pha save LO
rts
lda Offset+1
adc RXTX.Size+1
sta W5100.DR,x write HI
pla
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x
STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne STATUS.9
.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
ldx #S.DCB.NIC-1
.2 lda DCB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
CONTROL >STYA ZPIOCTL
ldy #S.IOCTL.CTRLCODE
lda (ZPIOCTL),y
cmp #S.IOCTL.CTRLCODE.SETDCB
bne STATUS.9
.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .2+1
iny
lda (ZPIOCTL),y
sta .2+2
ldx #S.DCB.NIC-1
.2 lda $ffff,x SELF MODIFIED
sta DCB,x
dex
bpl .2
clc
rts
*--------------------------------------
OPEN jsr CLOSE
* ldx DEVSLOTx0 Done by CLOSE
lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x
@ -345,7 +279,7 @@ OPEN jsr CLOSE
ldy #0
.1 lda MAC,y
.1 lda DCB+S.DCB.NIC.MAC,y
sta W5100.DR,x
iny
cpy #6
@ -368,6 +302,7 @@ OPEN jsr CLOSE
rts
*--------------------------------------
CLOSE ldx DEVSLOTx0
lda #W5100.MR.RST
sta W5100.MR,x
@ -382,19 +317,228 @@ CLOSE ldx DEVSLOTx0
clc
rts
*--------------------------------------
READ php
sei
>STYA ZPIOCTL
ldx DEVSLOTx0
>AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI
ora W5100.DR,x LO
bne .1
lda #MLI.E.EOF
.9 plp
sec
rts
.1 >AR.SELECT S0.RX.RD
lda W5100.DR,x get the received ptr HI
sta offset+1
ldy W5100.DR,x get the received ptr LO
sty offset
and /RXTX.MASK
ora /RX.BASE
sta W5100.AR,x
tya
sta W5100.AR+1,x
lda W5100.DR,x get RX.Size HI
sta RXTX.Size+1
ldy W5100.DR,x get RX.Size LO
sty RXTX.Size
>SYSCALL getmem
bcs .9
>STYA ZPBufPtr
stx .8+1
phy
ldy #S.IOCTL.BUFPTR+1
sta (ZPIOCTL),y
dey
pla
sta (ZPIOCTL),y
ldy #S.IOCTL.BYTECNT
lda RXTX.Size
sec
sbc #2 Header Size
sta (ZPIOCTL),y
eor #$ff
sta Counter
iny
lda RXTX.Size+1
sbc #0
sta (ZPIOCTL),y
eor #$ff
sta Counter+1
ldx DEVSLOTx0
ldy #0
.2 inc Counter
bne .3
inc Counter+1
beq .4
.3 lda W5100.DR,x
sta (ZPBufPtr),y
iny
bne .2
inc ZPBufPtr+1
bne .2
.4 >AR.SELECT S0.RX.RD
lda Offset
clc
adc RXTX.Size
pha save LO
lda Offset+1
adc RXTX.Size+1
sta W5100.DR,x write HI
pla
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #W5100.AR.S0.CR.RCVD
sta W5100.DR,x
.8 ldx #$ff SELF MODIFIED hMem
plp
clc
rts
*--------------------------------------
WRITE php
sei
>STYA ZPIOCTL
ldx DEVSLOTx0
ldy #S.IOCTL.BYTECNT
lda (ZPIOCTL),y
sta RXTX.Size
eor #$ff
sta Counter
iny
lda (ZPIOCTL),y
sta RXTX.Size+1
eor #$ff
sta Counter+1
>AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI
ldy W5100.DR,x LO
cpy RXTX.Size
sbc RXTX.Size+1
bcs WRITE.1
lda #MLI.E.EOF
plp
sec
rts
WRITE.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
ldy #S.ETH.SRCMAC+5
ldx #5
.1 lda DCB+S.DCB.NIC.MAC,x
sta (ZPBufPtr),y
dey
dex
bpl .1
ldx DEVSLOTx0
>AR.SELECT S0.TX.WR
lda W5100.DR,x Get HI
ldy W5100.DR,x Get LO
and /RXTX.MASK
ora /TX.BASE
sta W5100.AR,x Write HI
sta Offset+1
tya
sta W5100.AR+1,x Write LO
sta Offset
ldy #0
.2 inc Counter
bne .3
inc Counter+1
beq .8
.3 lda (ZPBufPtr),y
sta W5100.DR,x
iny
bne .2
inc ZPBufPtr+1
bne .2
.8 >AR.SELECT S0.TX.WR
lda Offset
clc
adc RXTX.Size
pha save LO
lda Offset+1
adc RXTX.Size+1
sta W5100.DR,x write HI
pla
sta W5100.DR,x write LO
>AR.SELECT S0.CR
lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x
plp
clc
rts
*--------------------------------------
DRV.CS.END
DEVSLOTx0 .BS 1
*--------------------------------------
DEVSTAT .DA #0
.BS 3 size
DIB .DA #0
.DA #0,#0,#0 size
>PSTR "UtherNetII/W5100"
.DA #S.DIB.T.NET
.DA #S.DIB.T.NIC
.BS 1 Subtype
.BS 2 Version
.DA K.VER Version
*--------------------------------------
FLAGS .DA #0
LINK.STATUS .DA #S.DIB.NIC.STATUS.OK+S.DIB.NIC.STATUS.FD+S.DIB.NIC.STATUS.100
MAC .BS 6
DCB .DA #S.DCB.T.NIC
.DA #0 FLAGS
.DA #S.DCB.NIC.LINK.OK+S.DCB.NIC.LINK.FD
.DA #S.DCB.NIC.SPEED.100
.HS 0008DC123456 MAC
.BS 12 IP/MASK/GW
*--------------------------------------
DRV.END
MAN
SAVE /A2OSX.SRC/DRV/UTHERNET2.DRV.S
ASM

View File

@ -2,7 +2,7 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
KVER .EQ $5C00 92.0
K.VER .EQ $5C00 92.0
K.ENV.SIZE .EQ 256
K.FLT.MAX .EQ 4
K.EVT.MAX .EQ 4

View File

@ -298,7 +298,7 @@ note : '$VAR' does NOT expand Variable
| ---- | ------ | ------- | ----- |
| LanCeGS.DRV | Working | | 0.9.1 |
| Uthernet.DRV | Working | | 0.92 |
| Uthernet2.DRV | Working | | 0.9.1 |
| Uthernet2.DRV | Working | | 0.92 |
| Uther2.AI.DRV | In Progress | With ARP/IP Offloading | 0.9 |
## BIN,External Shell commands:
@ -351,8 +351,8 @@ note : '$VAR' does NOT expand Variable
## DEV tools:
| Name | Status | Comment | K.Ver |
| ---- | ------ | ------- | ----- |
| MEMDUMP | Working | Tool to track memory leak| 0.92 |
| ASM | In Progress | S-C MASM based multi CPU assembler | 0.9.1 |
| MEMDUMP | Working | | 0.9.1 |
| ---- | ------ | ------- | ----- |
| RPCDUMP | Working | tool based on UDP socket API, renamed from RPCINFO | 0.9.1 |

View File

@ -117,7 +117,7 @@ CS.RUN.LOOP
.4 jsr Wait.Timeout
bcc .1
>PUSHWI KVER
>PUSHWI K.VER
>PUSHBI 2
>LDYA L.MSG.GREETINGS
>SYSCALL printf

View File

@ -138,7 +138,7 @@ CS.INIT jsr SetPWD
.1 jsr HIS.Init
bcs .9
>PUSHWI KVER
>PUSHWI K.VER
>PUSHBI 2
>LDYA L.MSG.GREETINGS
>SYSCALL printf

View File

@ -27,7 +27,7 @@ DRV.DiskII.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ
.BS 4
.DA #S.DIB.T.DISKII
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
* DRV.RamDrive
* X = IOCTL
@ -61,7 +61,7 @@ DRV.RamDrive.DIB
>PSTR "ProDOS /RAM Disk"
.DA #S.DIB.T.RAM
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
* DRV.BlkDevice
* X = IOCTL
@ -94,7 +94,7 @@ DRV.BlkDevice.DIB
>PSTR "ProDOS Block Dev"
.DA #S.DIB.T.PRODOS
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
* IOCTL to BLK protocol converter
* in : pIOCTL (AUX)
@ -222,7 +222,7 @@ DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED
.BS 5
.DA #S.DIB.T.CHAR
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
* SYS DEVICE
*--------------------------------------
@ -520,7 +520,7 @@ DRV.SYS.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED
>PSTR "A2osX SYS Screen"
.DA #S.DIB.T.CHAR
.DA #0
.DA KVER
.DA K.VER
*--------------------------------------
DRV.SYS.CH .BS 1
DRV.SYS.CV .BS 1