Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-06-11 23:04:56 +02:00
parent 50438e6abf
commit 014bc70ed7
11 changed files with 311 additions and 180 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -32,12 +32,11 @@ BlkCnt .BS 2
TrkCnt .BS 1
Stepping .BS 1
VolNum .BS 1
AltBB .BS 1
CatSize .BS 1
CatBlkCnt .BS 1
CatOptions .BS 1
bLL .BS 1
bCustomBlkSize .BS 1
bHighDensity .BS 1
@ -280,7 +279,7 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T
sta BlkCnt,x
iny
inx
cpx #5
cpx #6
bne .12
.1 >PUSHW L.MSG.LL
@ -365,9 +364,8 @@ CS.RUN.LL.DISKII
sec
rts
.8
* ldx #0
* jsr CS.RUN.SeekToX
.8 ldx #0
jsr CS.RUN.SeekToX
>PUSHW L.MSG.CRLF
>PUSHBI 0
@ -375,9 +373,12 @@ CS.RUN.LL.DISKII
bcs .9
bit bVerify
bmi CS.RUN.LL.DISKII.V
bpl .80
jmp CS.RUN.MotorOff
jsr CS.RUN.LL.DISKII.V
bcs .9
.80 jmp CS.RUN.MotorOff
*--------------------------------------
CS.RUN.LL.DISKII.V
>PUSHW L.MSG.VERIFY
@ -391,27 +392,25 @@ CS.RUN.LL.DISKII.V
>LDYA BlkCnt
>STYA.G IOCTL+S.IOCTL.BLKNUM
* >STZ.G IOCTL+S.IOCTL.BLKNUM
* iny
* sta (pData),y
>STZ.G IOCTL+S.IOCTL.BLKNUM
iny
sta (pData),y
stz CurTrack
lda TrkCnt
sta Counter
dec
sta CurTrack
.1 ldx #8
.2 phx
>DECW.G IOCTL+S.IOCTL.BLKNUM
>PUSHW L.MSG.VERIFY
>PUSHB CurTrack
>PUSHW.G IOCTL+S.IOCTL.BLKNUM
>PUSHBI 3
>SYSCALL PrintF
plx
bcs .9
@ -425,13 +424,19 @@ CS.RUN.LL.DISKII.V
plx
bcs .9
>INCW.G IOCTL+S.IOCTL.BLKNUM
dex
bne .2
dec CurTrack
inc CurTrack
dec Counter
bne .1
ldx #0
jsr CS.RUN.SeekToX
>PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL PrintF
@ -529,7 +534,7 @@ CS.RUN.BuildCat jsr .7
.7 >PUSHW BlkCnt
>PUSHB CatSize
>PUSHB CatOptions
>PUSHB AltBB
rts
*--------------------------------------
CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
@ -635,28 +640,32 @@ Disk2.Default .DA 280 BlkCnt
.DA #4 Stepping
.DA #1 VolNum
* .DA #140 QTrkCnt
.BS 3
.DA #0 AltBB
.BS 2
*--------------------------------------
Disk2.X .DA 320 BlkCnt
.DA #40 TrkCnt
.DA #4 Stepping
.DA #2 VolNum
* .DA #160 QTrkCnt
.BS 3
.DA #0 AltBB
.BS 2
*--------------------------------------
Disk2.H .DA 376 BlkCnt
.DA #47 TrkCnt
.DA #3 Stepping
.DA #129 VolNum
* .DA #141 QTrkCnt
.BS 3
.DA #$80 AltBB
.BS 2
*--------------------------------------
Disk2.HX .DA 432 BlkCnt
.DA #54 TrkCnt
.DA #3 Stepping
.DA #130 VolNum
* .DA #162 QTrkCnt
.BS 3
.DA #$80 AltBB
.BS 2
*--------------------------------------
.DUMMY
.OR 0

View File

@ -264,8 +264,8 @@ NSC.Dump >PUSHW L.MSG.READ.OK1
.3 >SYSCALL PutS
>PUSHW L.MSG.READ.OK3
>PUSHBI 0
>LDYA L.MSG.READ.OK3
>SYSCALL PrintF
lda DS1216E.DATA
@ -305,10 +305,10 @@ NSC.Dump >PUSHW L.MSG.READ.OK1
lda DS1216E.DATA+6
jsr PrintBCD
* lda #'.'
* >SYSCALL PutChar
* lda DS1216E.DATA+7
* jsr PrintBCD
lda #'.'
>SYSCALL PutChar
lda DS1216E.DATA+7
jsr PrintBCD
>PUSHW L.MSG.CRLF
>PUSHBI 0

View File

@ -189,11 +189,10 @@ Counter .EQ ZPDRV+4
Offset .EQ ZPDRV+6
RXTX.Size .EQ ZPDRV+8
BUF.Size .EQ ZPDRV+10
RX.IP .EQ ZPDRV+12
*Sn .EQ ZPDRV+16
Sn.IO .EQ ZPDRV+17
Sn.BASE .EQ ZPDRV+18
Sn.MASK .EQ ZPDRV+19
RX.IP .EQ ZPDRV+12 (4)
Sn.IO .EQ ZPDRV+16
Sn.BASE .EQ ZPDRV+17
Sn.MASK .EQ ZPDRV+18
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
@ -319,19 +318,27 @@ OPEN.I jsr CLOSE
bne .4
>AR.SELECT RMSR
lda #%00100101 ICMP=2k,UDP=2k,TCP=4k,0k
lda #%01010101 RAW=2k,ICMP=2k,UDP=2k,TCP=2k
sta W5100.DR,x ...for Socket RX Buffers
sta W5100.DR,x ...for Socket TX Buffers
lda /W5100.AR.S0.MR
>AR.SELECT S0.MR
lda #W5100.AR.Sn.MR.MACRAW+W5100.AR.Sn.MR.MF
sta W5100.DR,x
>AR.SELECT S0.CR
lda #W5100.AR.Sn.CR.OPEN
sta W5100.DR,x
lda /W5100.AR.S1.MR
sta Sn.IO
ldy #S.IP.PROTOCOL.UDP
ldy #S.IP.PROTOCOL.ICMP
jsr OPEN.SnY
inc Sn.IO
ldy #S.IP.PROTOCOL.ICMP
ldy #S.IP.PROTOCOL.UDP
jsr OPEN.SnY
inc Sn.IO
@ -393,29 +400,35 @@ READ php
ldx DEVSLOTx0
ldy #Sn.cnt-1
.20 lda Sn.IO.BASE,y
lda /W5100.AR.S1.MR
sta Sn.IO
sta W5100.AR,x
lda #W5100.AR.S0.RX.RSR
sta W5100.AR+1,x
lda W5100.DR,x get the received size HI
ora W5100.DR,x LO
bne .1
bne READ.ICMP
dey
bpl .20
lda /W5100.AR.S0.RX.RSR
sta Sn.IO
sta W5100.AR,x
lda #W5100.AR.S0.RX.RSR
sta W5100.AR+1,x
jmp READWRITE.NODATA
lda W5100.DR,x get the received size HI
ora W5100.DR,x LO
beq .9
jmp READ.RAW
.9 jmp READWRITE.NODATA
.1 lda Sn.IP.PROTOCOL,y
READ.ICMP lda #S.IP.PROTOCOL.ICMP
sta FRM.HDR.PROTO
lda Sn.RX.BASE,y
lda Sn.RX.BASE+1
sta Sn.BASE
lda Sn.RXTX.MASK,y
lda Sn.RXTX.MASK+1
sta Sn.MASK
>AR.Sn.SELECT S0.RX.RD
@ -561,6 +574,96 @@ READ php
clc
rts
*--------------------------------------
READ.RAW >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 /$7FF
ora /RX.BASE
sta W5100.AR,x
tya
sta W5100.AR+1,x
lda W5100.DR,x get RX.Size HI (Frame size + 2)
sta RXTX.Size+1
lda W5100.DR,x get RX.Size LO
sta RXTX.Size
ldy #S.IOCTL.BYTECNT
sec
sbc #2 MACRAW:strip 2 bytes Header from Size
sta (ZPIOCTL),y
sta BUF.Size
eor #$ff
sta Counter
iny
lda RXTX.Size+1
sbc #0
sta (ZPIOCTL),y
sta BUF.Size+1
eor #$ff
sta Counter+1
>LDYA BUF.Size
>SYSCALL2 getmem
bcc .14
jmp READWRITE.9
.14 >STYA ZPBufPtr
phx
phy
ldy #S.IOCTL.BUFPTR+1
sta (ZPIOCTL),y
dey
pla
sta (ZPIOCTL),y
ldy #0
ldx DEVSLOTx0
.2 inc Counter
bne .3
inc Counter+1
beq .4
.3 lda W5100.DR,x
sta (ZPBufPtr),y
iny
bne .2
inc ZPBufPtr+1
bra .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.Sn.CR.RCVD
sta W5100.DR,x
pla hMem
plp
clc
rts
*--------------------------------------
READWRITE.NODATA
lda #E.NODATA
@ -600,7 +703,7 @@ WRITE php
.10 cmp Sn.IP.PROTOCOL,x
beq .11
dex
bpl .10
bne .10
plp
lda #MLI.E.IO
@ -689,14 +792,12 @@ GET.IOCTLBUFPTR >STYA ZPIOCTL
rts
*--------------------------------------
DRV.CS.END
Sn.cnt .EQ 3
.LIST ON
Sn.IP.PROTOCOL .DA #S.IP.PROTOCOL.UDP,#S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.TCP
Sn.IO.BASE .DA /W5100.AR.S0.MR,/W5100.AR.S1.MR,/W5100.AR.S2.MR
Sn.TX.BASE .DA /TX.BASE,/TX.BASE+$800,/TX.BASE+$1000
Sn.RX.BASE .DA /RX.BASE,/RX.BASE+$800,/RX.BASE+$1000
Sn.RXTX.MASK .DA /$7FF,/$7FF,/$FFF 2k-1,2k-1,4k-1
.LIST OFF
Sn.cnt .EQ 4
Sn.IP.PROTOCOL .DA #0,#S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.UDP,#S.IP.PROTOCOL.TCP
Sn.IO.BASE .DA /W5100.AR.S0.MR,/W5100.AR.S1.MR,/W5100.AR.S2.MR,/W5100.AR.S3.MR
Sn.TX.BASE .DA /TX.BASE,/TX.BASE+$800,/TX.BASE+$1000,/TX.BASE+$1800
Sn.RX.BASE .DA /RX.BASE,/RX.BASE+$800,/RX.BASE+$1000,/RX.BASE+$1800
Sn.RXTX.MASK .DA /$7FF,/$7FF,/$7FF,/$7FF
DEVSLOTx0 .BS 1
*--------------------------------------
DIB .DA #0

View File

@ -107,20 +107,19 @@ mvboot lda (dent),y
cpy #$eb have we moved enough?
bne mvboot
ldx #mods.cnt-1 now modify code to handle errors.
ldx #mods.cnt now modify code to handle errors.
modboot ldy mods,x
lda chgs,x
sta zzstart,y
dex
bpl modboot
modboot ldy mods-1,x
lda chgs-1,x
sta zzstart,y
ldx #7
cpx #8
bcs .1
modboot2 lda endcode-1,x
lda endcode-1,x
sta zzzend-1,x
dex
bne modboot2
.1 dex
bne modboot
lda #BB.Hdr
sta BB.HdrPtr
@ -354,42 +353,50 @@ BB.Seek lda BB.HdrTrk get track we're on
.5 lda IO.D2.Ph0On,x
ply
lda #184
lda #114
jsr BB.Wait100usecA
bra .1
* Last QTrack
.6 lda BB.TargetQTrack
and #6
ora slotz
.6 bcs .60
tya
inc
inc
bra .7
.60 tya
* sec
adc #5
.7 and #$f6
tax
inc
inc
and #$F7
tay
lda IO.D2.Ph0On,x
lda IO.D2.Ph0On,y
phx
lda #104
jsr BB.Wait100usecA
.7 phx
jsr BB.Wait25600usec
plx
plx
lda IO.D2.Ph0Off,x
lda IO.D2.Ph0Off,y
.80 lda IO.D2.Ph0Off,y
bra BB.Read
.8 tya
beq BB.Read
tax
bra .7
jsr D2.Wait25600usec
bra .80
*--------------------------------------
BB.Wait25600usec
lda #0
BB.Wait100usecA sec (6) JSR (2)
.1 ldx #18 (2)
.1 ldx #19 (2)
.2 dex (2) delay 86 usec.
bne .2 (2+) 2 + 5x16 + 2 + 2

View File

@ -31,6 +31,17 @@ D2Recalibrate >PULLB DrvSlt
jsr D2MoveHead.1
jsr D2.Wait25600usec
jsr D2.Wait25600usec
ldx Slotn0
lda IO.D2.Ph0On,x
jsr D2.Wait25600usec
jsr D2.Wait25600usec
ldx Slotn0
lda IO.D2.Ph0Off,x
jsr D2.Wait25600usec
jsr D2.Wait25600usec
clc
@ -59,7 +70,7 @@ D2MoveHead.1 ldy #0
* Current < Target, must move in
cmp #2
bcc .5 one QT remaining
bcc .6 one QT remaining
lda MoveFrom 2 or more
and #$FE from QT1 or QT3
@ -70,7 +81,7 @@ D2MoveHead.1 ldy #0
* Current > Target, must move out
.2 cmp #$FF
beq .5 one QT remaining
beq .6 one QT remaining
lda MoveFrom
bit #1 from QT1 or QT3
@ -80,20 +91,33 @@ D2MoveHead.1 ldy #0
.3 dec
.4 sta MoveFrom
jsr D2.PhaseOn
lda #194
and #6
ora Slotn0
tax
pha
tya
beq .5
lda IO.D2.Ph0Off,y
.5 lda IO.D2.Ph0On,x
ply
lda #54
jsr D2.Wait100usecA
bra .1
* Last QTrack
.5 bcs .6
.6 bcs .60
tya
inc
inc
bra .7
.6 tya
.60 tya
clc
adc #6
@ -102,10 +126,10 @@ D2MoveHead.1 ldy #0
lda IO.D2.Ph0On,x
phx
lda #194
lda #154
jsr D2.Wait100usecA
jsr D2.Wait25600usec
* jsr D2.Wait25600usec
plx
lda IO.D2.Ph0Off,x
@ -113,25 +137,12 @@ D2MoveHead.1 ldy #0
rts
.8 tya
beq D2.PhaseOn.RTS
beq .9
jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y
rts
*--------------------------------------
D2.PhaseOn and #6
ora Slotn0
tax
pha
tya
beq .1
lda IO.D2.Ph0Off,y
.1 lda IO.D2.Ph0On,x
ply
D2.PhaseOn.RTS rts
.9 rts
*--------------------------------------
D2.Wait25600usec
lda #0

View File

@ -141,14 +141,19 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
>PULLW VolDirHdr.TB
ldx #3
.1 lda DATELO,x
sta VolDirHdr.CT,x
dex
bpl .1
* Blk 0 : ProDOS Boot Code
>LDYA L.ProDOS.Boot
bit VolDirHdr.Options
bpl .11
>LDYA L.ProDOSFX.Boot
>STYA ZPPtr3
.11 >STYA ZPPtr3
ldy #0
ldx #2 2 pages
@ -162,10 +167,12 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
inc ZPPtr1+1
dex
bne .2
* Blk 1 : (SOS boot code)
inc ZPPtr1+1
inc ZPPtr1+1
* Blk 2 : First Directory Block
* ldy #0
@ -223,13 +230,17 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
ora #$F0 Volume Directory Header
sta VolDirHdr.Name
ldy #VolDirHdr.size-1
.4 lda VolDirHdr,y
sta (ZPPtr1),y
dey
bpl .4
* Blk 3...n : additional Directory Blocks
lda #3 Actual Block ID
ldy #2 next blk ptr
.41 inc ZPPtr1+1
inc ZPPtr1+1 Next Block
dex
@ -247,9 +258,12 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
.42 sta (ZPPtr1),y
bra .41
* BitMap Blocks : 0=Used 1=free
.40 jsr GetProDOSCatSize.I X=blk used for boot/dir/bitmap
.40
BuildProDOSCat.BM
jsr GetProDOSCatSize.I X=blk used for boot/dir/bitmap
lda VolDirHdr.TB
eor #$ff
@ -272,7 +286,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
.6 lsr
bne .5
iny
bne .50
bne .50
.7 lda #%10000000
.8 inc Count

View File

@ -175,10 +175,10 @@ L539D jsr XRW.ReadAddr read next address field.
bcc L53BE branch if read ok.
L53A4 dec XRW.RetryCnt one less chance.
bpl L539D branch to retry.
bne L539D branch to retry.
XRW.Recalibrate lda #MLI.E.IO anticipate a bad drive error.
dec XRW.RecalibrateCnt can only recalibrate once.
dec XRW.RecalibrateCnt
bmi hndlerr
lda #54
@ -188,28 +188,25 @@ XRW.Recalibrate lda #MLI.E.IO anticipate a bad drive error.
jsr XRW.Seek
bra L5398
* have now read an address field. make sure this is
* the correct track, sector and volume.
L53BE jsr XRW.DEBUG
lda XRW.AddrField.T
L53BE lda XRW.AddrField.T
cmp XRW.ReqTrack
beq L53D5 ok
lda XRW.AddrField.V
jsr XRW.DEBUG
ldy XRW.UnitIndex
lda XRW.AddrField.V
cmp XRW.D2VolNum-1,y
bne XRW.Recalibrate
lda XRW.AddrField.T
sta XRW.D2Trk-1,y set the slot dependent track location
sta XRW.D2Trk-1,y
lda XRW.ReqTrack
jsr XRW.Seek
bra L5398
*--------------------------------------
L53D5 lda XRW.AddrField.V
ldy XRW.UnitIndex
sta XRW.D2VolNum-1,y
@ -761,7 +758,7 @@ XRW.Seek pha save target track
* Current < Target, must move in
cmp #2
bcc .5 one QT remaining
bcc .6 one QT remaining
lda XRW.CurrentQTrack
and #$FE from QT1 or QT3
@ -772,7 +769,7 @@ XRW.Seek pha save target track
* Current > Target, must move out
.2 cmp #$FF
beq .5 one QT remaining
beq .6 one QT remaining
lda XRW.CurrentQTrack
bit #1 from QT1 or QT3
@ -782,20 +779,31 @@ XRW.Seek pha save target track
.3 dec
.4 sta XRW.CurrentQTrack
jsr XRW.PhaseOn
and #6
ora A2L
tax
pha
tya
beq .5
lda #194
lda IO.D2.Ph0Off,y
.5 lda IO.D2.Ph0On,x
ply
lda #94
jsr XRW.Wait100usecA
bra .1
.5 bcs .6
.6 bcs .60
tya
inc
inc
bra .7
.6 tya
.60 tya
clc
adc #6
@ -804,11 +812,11 @@ XRW.Seek pha save target track
lda IO.D2.Ph0On,x
phx
lda #194
lda #154
jsr XRW.Wait100usecA
lda #0 wait 25.6 ms
jsr XRW.Wait100usecA
* lda #0 wait 25.6 ms
* jsr XRW.Wait100usecA
plx
lda IO.D2.Ph0Off,x
@ -816,28 +824,13 @@ XRW.Seek pha save target track
rts
.8 tya
beq XRW.PhaseOn.RTS
beq .9
lda #0 wait 25.6 ms
jsr XRW.Wait100usecA
lda IO.D2.Ph0Off,y
rts
*--------------------------------------
* A = QTrack
*--------------------------------------
XRW.PhaseOn and #6
ora A2L
tax
pha
tya
beq .1
lda IO.D2.Ph0Off,y
.1 lda IO.D2.Ph0On,x
ply
XRW.PhaseOn.RTS rts
.9 rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1
@ -929,51 +922,40 @@ L56E6 lda IO.D2.RData,x first bit-slip nibl
rderr sec
rts
*--------------------------------------
XRW.DEBUG lda XRW.AddrField.T
XRW.DEBUG phx
ldx #$20
lda XRW.AddrField.V
jsr .6
lda XRW.AddrField.T
jsr .6
pha
lsr
lsr
lsr
lsr
jsr .7
sta $724
pla
jsr .7
sta $725
inx
lda XRW.ReqTrack
pha
jsr .6
plx
rts
.6 pha
lsr
lsr
lsr
lsr
jsr .7
sta $726
pla
jsr .7
sta $727
lda XRW.AddrField.T
cmp XRW.ReqTrack
bne .6
lda #$A0
sta $723
rts
.6 lda #'!'
sta $723
rts
.7 and #$0F
ora #$B0
and #$0F
.7 ora #$B0
cmp #"9"+1
bcc .9
bcc .8
adc #6
.9 rts
.8 sta $700,x
inx
rts
*--------------------------------------
.LIST ON
XRW.FREE .EQ $D540-*

View File

@ -6,7 +6,7 @@ NEW
.TF sbin/networkd
*--------------------------------------
LIB.MAX .EQ 4
DBG .EQ 0
DBG .EQ 1
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
@ -248,6 +248,12 @@ CS.RUN >PUSHB DevID
>SYSCALL GetMemPtr
>STYA pBuf
lda (pBuf)
cmp #$ff
beq .8
cmp #1
beq .8
>PUSHW L.MSG.DBG
ldy #0
@ -279,7 +285,7 @@ CS.RUN >PUSHB DevID
.2 lda hFrameIn
>SYSCALL FreeMem
bra CS.RUN
jmp CS.RUN
.8 clc
rts