Kernel version 0.9 : Drivers modification for KCONFIG compliance

This commit is contained in:
Rémy GIBERT 2017-04-14 17:04:39 +02:00
parent e145bd427c
commit 1a57cc4352
6 changed files with 220 additions and 177 deletions

View File

@ -10,12 +10,10 @@ AUTO 6
*-------------------------------------- *--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
*-------------------------------------- *--------------------------------------
ZPTmpPtr1 .EQ ZPDRV ZPTmpPtr1 .EQ ZPDRV
*-------------------------------------- *--------------------------------------
SIG.05 .EQ $48
SIG.07 .EQ $48
*--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
@ -36,38 +34,48 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
.DA 0 End Of Reloc Table .DA 0 End Of Reloc Table
*-------------------------------------- *--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT Dev.Detect >STYA ARGS
>SYSCALL CPrintFYA >LDYA L.MSG.DETECT
>SYSCALL PPrintFYA
stz ZPTmpPtr1 stz ZPTmpPtr1
lda #$C1 lda #$C1
sta ZPTmpPtr1+1 sta ZPTmpPtr1+1
.1 ldy #5
lda (ZPTmpPtr1),y
cmp #SIG.05
bne .2
ldy #7 .1 and #$0f
lda (ZPTmpPtr1),y tay
cmp #SIG.07 lda A2osX.SLOTS,y
beq .3 bne .3
.2 inc ZPTmpPtr1+1 ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
cmp #$C8 cmp #$C8
bne .1 bne .1
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA >SYSCALL PPrintFYA
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting lda #MLI.ERR.NODEV Not Found in any slot, exiting
sec sec
rts rts
.3 lda ZPTmpPtr1+1 .4 lda ZPTmpPtr1+1
sta DEVSLOTCn
and #$0F and #$0F
sta DEVSLOT0n pha
tay
lda #A2osX.SLOTS.COM
sta A2osX.SLOTS,y
pla
ora #$30 ora #$30
sta DEV.HEADER.NAME+4 sta DEV.HEADER.NAME+4
asl asl
@ -78,59 +86,79 @@ Dev.Detect >LDYA L.MSG.DETECT
>PUSHW L.DEV.HEADER.NAME >PUSHW L.DEV.HEADER.NAME
>LDYA L.MSG.DETECT.OK >LDYA L.MSG.DETECT.OK
>SYSCALL CPrintFYA >SYSCALL PPrintFYA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
DEVSIG.Offset .HS 0507
DEVSIG.Value .HS 4848
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT >CSTR "Apple PIC (Parallel Interface Card).\n" MSG.DETECT >CSTR "Apple PIC (Parallel Interface Card).\n"
MSG.DETECT.OK >CSTR "PIC Installed As Device : %S\n" MSG.DETECT.OK >CSTR "PIC Installed As Device : %S\n"
MSG.DETECT.KO >CSTR "No PIC Found.\n" MSG.DETECT.KO >CSTR "No PIC Found.\n"
ARGS .BS 2
*-------------------------------------- *--------------------------------------
* Device Header (16 Bytes) * Device Header (16 Bytes)
*-------------------------------------- *--------------------------------------
DEV.HEADER cld DEV.HEADER cld
jmp (DRV.CS.START,x) jmp (DRV.CS.START,x)
.DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR .DA #S.DEV.S.WRITE
DEV.HEADER.NAME >PSTR "LPT1" NAME .BS 6
.HS 00.00 DEV.HEADER.NAME >PSTR "LPT1"
.HS 00.00.00.00
*-------------------------------------- *--------------------------------------
* Driver Code * Driver Code
*-------------------------------------- *--------------------------------------
DRV.CS.START .DA OPEN DRV.CS.START .DA STATUS
.DA GETEVENT .DA BADCALL
.DA COUT .DA BADCALL
.DA BADCALL
.DA CONTROL
.DA BADCALL
.DA OPEN
.DA CLOSE .DA CLOSE
.DA GETINFO .DA BADCALL
.DA IRQ .DA WRITE
L.DEVINFO .DA DEVINFO L.STAT .DA STAT
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
OPEN clc BADCALL lda #MLI.ERR.BADCALL
rts
*--------------------------------------
GETEVENT lda #0
sec sec
rts rts
*-------------------------------------- *--------------------------------------
COUT clc STATUS >LDYA L.STAT
clc
rts rts
*-------------------------------------- *--------------------------------------
CLOSE clc CONTROL
clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO >LDYA L.DEVINFO OPEN
IRQ clc clc
rts
*--------------------------------------
CLOSE
clc
rts
*--------------------------------------
WRITE
clc
rts rts
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
DEVSLOT0n .BS 1 DEVSLOT0n .BS 1
DEVSLOTCn .BS 1 DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1 DEVSLOTn0 .BS 1
DEVINFO .DA #S.DEVINFO.TYPE.CHAR *--------------------------------------
STAT .DA #S.DEVSTAT.S.WRITE
.DA #0,#0,#0
>PSTR "Parallel Card"
.DA #0,#0,#0
.DA #S.DEVSTAT.TYPE.CHAR
.DA #0 .DA #0
.DA $0900
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE DRV/PIC.DRV.S SAVE /A2OSX/SRC/DRV/PIC.DRV.S
ASM ASM

View File

@ -1,6 +1,6 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
NEW LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
@ -10,11 +10,16 @@ AUTO 6
*-------------------------------------- *--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
.INB /A2OSX.BUILD/INC/NET.I
.INB /A2OSX.BUILD/INC/NET.W5100.I
.INB /A2OSX.BUILD/INC/LIBTCPIP.I .INB /A2OSX.BUILD/INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ZPTmpPTR .EQ ZPDRV ZPTmpPTR .EQ ZPDRV
*-------------------------------------- RXTX.Size .EQ ZPDRV+2
.INB DRV/X.NET.W5100.S Counter .EQ ZPDRV+4
Offset .EQ ZPDRV+6
RX.IP .EQ ZPDRV+8
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -40,13 +45,32 @@ Dev.Detect >STYA Args
>LDYA L.MSG.DETECT >LDYA L.MSG.DETECT
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
ldx #$10+$88 ldx #$70
.1 lda #W5100.MR.RST
.1 txa IO based detection, avoid scanning in Disk Controller IO!!!!
lsr
lsr
lsr
lsr
tay
lda A2osX.SLOTS,y
bne .2
lda #W5100.MR.RST
sta W5100.MR,x sta W5100.MR,x
lda #0
.10 dec give some time....
bne .10
lda #W5100.MR.AI+W5100.MR.IND lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x sta W5100.MR,x
pha
pla
lda W5100.MR,x lda W5100.MR,x
cmp #W5100.MR.AI+W5100.MR.IND cmp #W5100.MR.AI+W5100.MR.IND
bne .2 bne .2
@ -60,21 +84,29 @@ Dev.Detect >STYA Args
cmp #2000 cmp #2000
beq .3 beq .3
.2 inc DEV.HEADER.NAME+4 .2 dec DEV.HEADER.NAME+4
txa txa
clc sec
adc #$10 sbc #$10
tax tax
bcc .1 #$108 ? bne .1
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
lda #DEVMGR.ERRNOHW lda #MLI.ERR.NODEV
sec sec
rts rts
.3 stx DEVSLOTx8 .3 stx DEVSLOTx0
txa
lsr
lsr
lsr
lsr
tay
lda #A2osX.SLOTS.NET
sta A2osX.SLOTS,y
>LDYA ARGS >LDYA ARGS
>STYA ZPTmpPTR >STYA ZPTmpPTR
@ -96,9 +128,7 @@ Dev.Detect >STYA Args
sta MAC+5 sta MAC+5
bra .8 bra .8
.4 >SYSCALL GetMemPtrA .4 jsr DecodeMac
>STYA ZPTmpPTR
jsr DecodeMac
bcc .8 bcc .8
lda #DEVMGR.ERRICL lda #DEVMGR.ERRICL
sec sec
@ -110,90 +140,58 @@ Dev.Detect >STYA Args
clc clc
rts rts
*-------------------------------------- *--------------------------------------
.INB DRV/X.NET.DRV.S .INB /A2OSX.SRC/DRV/X.NET.DRV.S
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG.DETECT >CSTR "UtherNet2/W5100 Driver (ARP OffLoad).\n" MSG.DETECT >CSTR "UtherNet2/W5100 Driver.\r\n"
MSG.DETECT.OK >CSTR "UtherNet2/W5100 Installed As Device : %S\n" MSG.DETECT.OK >CSTR "UtherNet2/W5100 Installed As Device : %S\r\n"
MSG.DETECT.KO >CSTR "Hardware Not Found.\n" MSG.DETECT.KO >CSTR "Hardware Not Found.\r\n"
Args .BS 2 Args .BS 2
*-------------------------------------- *--------------------------------------
* Device Header (16 Bytes) * Device Header (16 Bytes)
*-------------------------------------- *--------------------------------------
DEV.HEADER cld DEV.HEADER cld
jmp (DRV.CS.START,x) jmp (DRV.CS.START,x)
.HS 00 .DA #0
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT .BS 6
DEV.HEADER.NAME >PSTR "ETH1" NAME DEV.HEADER.NAME >PSTR "ETH7" NAME
.HS 00
.HS 00.00.00.00
*-------------------------------------- *--------------------------------------
* Driver Code * Driver Code
*-------------------------------------- *--------------------------------------
DRV.CS.START .DA OPEN DRV.CS.START .DA STATUS
.DA GETEVENT .DA READBLOCK
.DA COUT .DA WRITEBLOCK
.DA BADCALL
.DA CONTROL
.DA BADCALL
.DA OPEN
.DA CLOSE .DA CLOSE
.DA GETINFO .DA BADCALL
.DA IRQ .DA BADCALL
.DA SEND L.DEVSTAT .DA DEVSTAT
.DA SETIPCFG
L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
OPEN jsr Reset BADCALL lda #MLI.ERR.BADCALL
sec
lda #W5100.MR.AI+W5100.MR.IND rts
sta W5100.MR,x *--------------------------------------
STATUS >LDYA L.DEVSTAT
>AR.SELECT GAR
ldy #8 GAR,SUBR
.1 stz W5100.DR,x
dey
bne .1
* >AR.SELECT SHAR
ldy #0
.2 lda MAC,y
sta W5100.DR,x
iny
cpy #6
bne .2
* >AR.SELECT SIPR
ldy #4
.3 stz W5100.DR,x
dey
bne .3
>AR.SELECT RMSR
lda #3 8k,0k,0k,0k
sta W5100.DR,x ...for Socket RX Buffers
sta W5100.DR,x ...for Socket TX Buffers
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETEVENT ldx DEVSLOTx8 READBLOCK ldx DEVSLOTx0
>AR.SELECT S0.RX.RSR >AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI lda W5100.DR,x get the received size HI
ora W5100.DR,x LO ora W5100.DR,x LO
bne GETEVENT.RxOK bne READBLOCK.RxOK
lda #ERR.DEV.NOFRAME lda #ERR.DEV.NOFRAME
COUT
IRQ READBLOCK.Err sec
GETEVENT.Err sec
rts rts
GETEVENT.RxOK >AR.SELECT S0.RX.RD READBLOCK.RxOK >AR.SELECT S0.RX.RD
lda W5100.DR,x get the received ptr HI lda W5100.DR,x get the received ptr HI
ldy W5100.DR,x get the received ptr LO ldy W5100.DR,x get the received ptr LO
and /RXTX.MASK and /RXTX.MASK
@ -203,6 +201,7 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
sta W5100.AR+1,x sta W5100.AR+1,x
ldy #0 ldy #0
.10 lda W5100.DR,x .10 lda W5100.DR,x
sta RX.IP,y sta RX.IP,y
iny iny
@ -224,14 +223,11 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
>PUSHYA >PUSHYA
>PUSHBI 0 >PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem
bcs GETEVENT.Err bcs READBLOCK.Err
>STYA ZPTmpPTR >STYA ZPTmpPTR
txa stx .8+1
ldy #S.EVT.DATALO sty .8+3
sta (pEvent),y sta .8+5
lda #S.EVT.F.NET+S.EVT.F.hMEM1
sta (pEvent)
lda RXTX.Size lda RXTX.Size
sta (ZPTmpPTR) sta (ZPTmpPTR)
@ -262,14 +258,14 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
dex dex
bpl .1 bpl .1
ldx DEVSLOTx8 ldx DEVSLOTx0
ldy #S.IP ldy #S.IP
.2 inc Counter .2 inc Counter
bne .3 bne .3
inc Counter+1 inc Counter+1
beq .8 beq .4
.3 lda W5100.DR,x .3 lda W5100.DR,x
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
@ -278,7 +274,7 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
inc ZPTmpPTR+1 inc ZPTmpPTR+1
bne .2 bne .2
.8 >AR.SELECT S0.RX.RD .4 >AR.SELECT S0.RX.RD
ldy W5100.DR,x Get HI ldy W5100.DR,x Get HI
lda W5100.DR,x Get LO lda W5100.DR,x Get LO
clc clc
@ -294,38 +290,16 @@ GETEVENT.RxOK >AR.SELECT S0.RX.RD
sta W5100.DR,x write LO sta W5100.DR,x write LO
>AR.SELECT S0.CR >AR.SELECT S0.CR
lda #$40 RECV lda #W5100.AR.S0.CR.RCVD
sta W5100.DR,x sta W5100.DR,x
ldy #S.IP.DST .8 ldx #$ff hMem
lda (ZPTmpPTR),y ldy #$ff PtrLO
lda #$ff PtrHI
.81 iny
and (ZPTmpPTR),y
cpy #S.IP.DST+3
bne .81 if EQ, CS
inc $ff = Broadcast ??
beq .82
clc not a broadcast
.82 lda #$00
ror
ldy #S.EVT.DATAHI
sta (pEvent),y
* clc cleared by ROR
rts
*--------------------------------------
CLOSE jsr Reset
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO >LDYA L.DEVINFO WRITEBLOCK >PULLW ZPTmpPTR
clc
rts
*--------------------------------------
SEND >PULLW ZPTmpPTR
lda (ZPTmpPTR) lda (ZPTmpPTR)
sec sec
@ -341,20 +315,20 @@ SEND >PULLW ZPTmpPTR
eor #$ff eor #$ff
sta Counter+1 sta Counter+1
ldx DEVSLOTx8 ldx DEVSLOTx0
>AR.SELECT S0.TX.FSR >AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI lda W5100.DR,x get send size HI
ldy W5100.DR,x LO ldy W5100.DR,x LO
cpy RXTX.Size cpy RXTX.Size
sbc RXTX.Size+1 sbc RXTX.Size+1
bcs SEND.READY bcs WRITEBLOCK.1
lda #ERR.DEV.NOBUFFER lda #ERR.DEV.NOBUFFER
sec sec
rts rts
SEND.READY >AR.SELECT S0.DIPR WRITEBLOCK.1 >AR.SELECT S0.DIPR
ldy #S.IP.DST ldy #S.IP.DST
.1 lda (ZPTmpPTR),y .1 lda (ZPTmpPTR),y
@ -414,17 +388,55 @@ SEND.READY >AR.SELECT S0.DIPR
sta W5100.DR,x write LO sta W5100.DR,x write LO
>AR.SELECT S0.CR >AR.SELECT S0.CR
lda #$20 SEND lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x sta W5100.DR,x
clc clc
rts rts
*-------------------------------------- *--------------------------------------
SETIPCFG >STYA ZPTmpPTR OPEN jsr CLOSE
ldx DEVSLOTx8 lda #W5100.MR.AI+W5100.MR.IND
sta W5100.MR,x
>AR.SELECT GAR
ldy #8 GAR,SUBR
.1 stz W5100.DR,x
dey
bne .1
* >AR.SELECT SHAR
ldy #0
.2 lda MAC,y
sta W5100.DR,x
iny
cpy #6
bne .2
* >AR.SELECT SIPR
ldy #4
.3 stz W5100.DR,x
dey
bne .3
>AR.SELECT RMSR
lda #3 8k,0k,0k,0k
sta W5100.DR,x ...for Socket RX Buffers
sta W5100.DR,x ...for Socket TX Buffers
bra CONTROL.OPEN
*--------------------------------------
CONTROL >STYA ZPTmpPTR
ldx DEVSLOTx0
>AR.SELECT S0.CR >AR.SELECT S0.CR
lda #$10 CLOSE lda #W5100.AR.S0.CR.CLOSE
sta W5100.DR,x sta W5100.DR,x
.10 >AR.SELECT S0.SR .10 >AR.SELECT S0.SR
@ -461,18 +473,18 @@ SETIPCFG >STYA ZPTmpPTR
cpy #S.IPCFG.IP+4 cpy #S.IPCFG.IP+4
bne .3 bne .3
>AR.SELECT S0.MR CONTROL.OPEN >AR.SELECT S0.MR
lda #W5100.AR.S0.MR.IPRAW+W5100.AR.S0.MR.MF lda #W5100.AR.S0.MR.IPRAW+W5100.AR.S0.MR.MF
sta W5100.DR,x sta W5100.DR,x
* >AR.SELECT S0.CR Implicit, next to S0.MR >AR.SELECT S0.CR
lda #1 OPEN lda #W5100.AR.S0.CR.OPEN
sta W5100.DR,x sta W5100.DR,x
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Reset ldx DEVSLOTx8 CLOSE ldx DEVSLOTx0
lda #W5100.MR.RST lda #W5100.MR.RST
sta W5100.MR,x sta W5100.MR,x
@ -487,16 +499,19 @@ Reset ldx DEVSLOTx8
rts rts
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
DEVSLOTx8 .BS 1 DEVSLOTx0 .BS 1
RX.IP .BS 4
RXTX.Size .BS 2
Counter .BS 2
Offset .BS 2
*-------------------------------------- *--------------------------------------
DEVINFO .DA #S.DEVINFO.TYPE.NET DEVSTAT .DA #0
DEVFLAGS .DA #S.DEVINFO.NET.FLAGS.ARPOFFLOAD+S.DEVINFO.NET.FLAGS.IPOFFLOAD .BS 3 size
>PSTR "UtherNetII/W5100"
.DA #S.DEVSTAT.TYPE.NET
.BS 1 Subtype
.BS 2 Version
*--------------------------------------
FLAGS .DA #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD+S.DEVSTAT.NET.FLAGS.IPOFFLOAD
LINK.STATUS .DA #S.DEVSTAT.NET.STATUS.OK+S.DEVSTAT.NET.STATUS.FD+S.DEVSTAT.NET.STATUS.100
MAC .BS 6 MAC .BS 6
LINK.STATUS .DA #S.DEVINFO.NET.STATUS.OK+S.DEVINFO.NET.STATUS.FD+S.DEVINFO.NET.STATUS.100 *--------------------------------------
MAN MAN
SAVE DRV/UTHER2.AI.DRV.S SAVE /A2OSX.SRC/DRV/UTHER2.AI.DRV.S
ASM ASM

View File

@ -93,7 +93,7 @@ Dev.Detect >STYA Args
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
lda #$28 MLI.ERR.NODEV lda #MLI.ERR.NODEV
sec sec
rts rts
@ -354,7 +354,7 @@ WRITEBLOCK.1 ldy #S.ETH.SRCMAC+5
sta W5100.DR,x write LO sta W5100.DR,x write LO
>AR.SELECT S0.CR >AR.SELECT S0.CR
lda #$20 SEND lda #W5100.AR.S0.CR.SEND
sta W5100.DR,x sta W5100.DR,x
clc clc

Binary file not shown.

Binary file not shown.

Binary file not shown.