Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-08-30 17:18:27 +02:00
parent f37a7d0d10
commit 49a5078bed
7 changed files with 179 additions and 79 deletions

Binary file not shown.

Binary file not shown.

View File

@ -8,6 +8,7 @@ SSCIRQ .EQ 0
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/MLI.ERR.I .INB INC/MLI.ERR.I
.INB INC/COM.I
.INB INC/COM.6551.I .INB INC/COM.6551.I
.INB /A2OSX.SRC/DRV/X.SSC.DRV.S .INB /A2OSX.SRC/DRV/X.SSC.DRV.S
*-------------------------------------- *--------------------------------------

View File

@ -8,6 +8,7 @@ SSCIRQ .EQ 1
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/MLI.ERR.I .INB INC/MLI.ERR.I
.INB INC/COM.I
.INB INC/COM.6551.I .INB INC/COM.6551.I
.INB /A2OSX.SRC/DRV/X.SSC.DRV.S .INB /A2OSX.SRC/DRV/X.SSC.DRV.S
*-------------------------------------- *--------------------------------------

View File

@ -15,7 +15,7 @@ BUF.SIZE .EQ $40
BUF.MASK .EQ $3F BUF.MASK .EQ $3F
.FIN .FIN
*-------------------------------------- *--------------------------------------
ZPTmpPtr1 .EQ ZPDRV ZPArgPtr .EQ ZPDRV
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -25,26 +25,28 @@ CS.START cld
.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 DEV.HEADER-CS.START Device Header Offset .DA 0
.DA DRV.CS.START-CS.START Driver Code Offset .DA 0
.DA DRV.CS.END-DRV.CS.START Drv Code Length .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
*-------------------------------------- *--------------------------------------
L.MSG.DETECT .DA MSG.DETECT L.MSG.DETECT .DA MSG.DETECT
L.MSG.DETECT.OK .DA MSG.DETECT.OK L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO 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
.DA 0 End Of Reloc Table .DA 0 End Of Reloc Table
*-------------------------------------- *--------------------------------------
Dev.Detect >STYA ARGS Dev.Detect >STYA ARGS
>LDYA L.MSG.DETECT >LDYA L.MSG.DETECT
>SYSCALL printf >SYSCALL puts
stz ZPTmpPtr1 stz ZPArgPtr
lda #$C1 lda #$C1
sta ZPTmpPtr1+1 sta ZPArgPtr+1
.1 and #$0f .1 and #$0f
tay tay
@ -54,34 +56,33 @@ Dev.Detect >STYA ARGS
ldx #DEVSIG.Length-1 ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x .2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y lda (ZPArgPtr),y
cmp DEVSIG.Value,x cmp DEVSIG.Value,x
bne .3 bne .3
dex dex
bpl .2 bpl .2
bra .4 bra .4
.3 inc ZPTmpPtr1+1 no match, try next slot.... .3 inc FD.DEV.NAME+3
lda ZPTmpPtr1+1 inc ZPArgPtr+1 no match, try next slot....
lda ZPArgPtr+1
cmp #$C8 cmp #$C8
bne .1 bne .1
>LDYA L.MSG.DETECT.KO >LDYA L.MSG.DETECT.KO
>SYSCALL printf >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 rts
.4 lda ZPTmpPtr1+1 .4 lda ZPArgPtr+1
and #$0F and #$0F
pha pha
tay tay
lda #A2osX.S.COM lda #A2osX.S.COM
sta A2osX.S,y sta A2osX.S,y
pla pla
ora #$30
sta DEV.HEADER.NAME+3
asl asl
asl asl
asl asl
@ -90,52 +91,65 @@ Dev.Detect >STYA ARGS
adc #$8F adc #$8F
sta DEVSLOTn08F sta DEVSLOTn08F
>PUSHW L.DEV.HEADER.NAME jsr Dev.ParseArgs
bcs .9
.8 >PUSHW L.FD.DEV.NAME
>PUSHBI 2
>LDYA L.MSG.DETECT.OK >LDYA L.MSG.DETECT.OK
>SYSCALL printf >SYSCALL printf
clc
>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)
beq .8
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
DEVSIG.Offset .HS 05070B0C DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131 DEVSIG.Value .HS 38180131
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT .DO SSCIRQ=1 MSG.DETECT .DO SSCIRQ=1
.AZ "Apple SSC (Super Serial Card,//c Serial Port) Driver (IRQ Enabled)."
.AZ "Apple SSC (Super Serial Card,//c Serial Port) Driver (IRQ Enabled).\r\n"
.ELSE .ELSE
.AZ "Apple SSC (Super Serial Card,//c Serial Port) Driver."
.AZ "Apple SSC (Super Serial Card,//c Serial Port) Driver.\r\n"
.FIN .FIN
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.\r\n" MSG.DETECT.KO .AZ "No SSC Found."
ARGS .BS 2 ARGS .BS 2
*-------------------------------------- *--------------------------------------
* Device Header (16 Bytes) FD.DEV .DA #S.FD.T.CDEV
*-------------------------------------- .DA #0 HANDLER
DEV.HEADER cld .DA #0 BUSID
jmp (DRV.CS.START,x) .DA #0 DEVID
.DA 0 BUSPTR
.DO SSCIRQ=1 .BS 2 DRVPTR
FD.DEV.NAME .AZ "COM1" NAME
.DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.IRQ .HS 000000
.ELSE
.DA #S.DEV.S.WRITE+S.DEV.S.READ
.FIN
.BS 6
DEV.HEADER.NAME .AZ "COM1" NAME
*-------------------------------------- *--------------------------------------
* Driver Code * Driver Code
*-------------------------------------- *--------------------------------------
DRV.CS.START .DA STATUS ZPIOCTL .EQ ZPDRV
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA A2osX.BADCALL .DA A2osX.BADCALL
.DA A2osX.BADCALL .DA A2osX.BADCALL
@ -145,22 +159,85 @@ DRV.CS.START .DA STATUS
.DA CLOSE .DA CLOSE
.DA READ .DA READ
.DA WRITE .DA WRITE
.DO SSCIRQ=1 .DO SSCIRQ=1
.DA IRQ .DA IRQ
.ELSE
.DA A2osX.BADCALL
.FIN .FIN
L.STAT .DA STAT
.DA 0 end or relocation .DA 0 end or relocation
*-------------------------------------- *--------------------------------------
STATUS >LDYA L.STAT STATUS >STYA ZPIOCTL
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB
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 lda DIB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc clc
rts rts
*--------------------------------------
CONTROL clc STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne STATUS.9
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
iny
lda (ZPIOCTL),y
sta .3+2
ldx #S.DCB.COM-1
.2 lda DCB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts 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.COM-1
.2 lda $ffff,x SELF MODIFIED
sta DCB,x
dex
bpl .2
*-------------------------------------- *--------------------------------------
OPEN php OPEN php
sei sei
@ -203,8 +280,9 @@ CLOSE php
clc clc
rts rts
*-------------------------------------- *--------------------------------------
READ .DO SSCIRQ=1 READ >STYA ZPIOCTL
.DO SSCIRQ=1
php php
sei sei
ldx INBUF.TAIL ldx INBUF.TAIL
@ -234,9 +312,7 @@ READ .DO SSCIRQ=1
.90 plp .90 plp
sec sec
rts rts
.ELSE .ELSE
ldx DEVSLOTn08F ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x lda SSC.STATUS-$8F,x
@ -250,11 +326,11 @@ READ .DO SSCIRQ=1
.9 lda #0 .9 lda #0
sec sec
rts rts
.FIN .FIN
*-------------------------------------- *--------------------------------------
WRITE .DO SSCIRQ=1 WRITE >STYA ZPIOCTL
.DO SSCIRQ=1
php php
sei sei
tay save char in Y tay save char in Y
@ -302,9 +378,7 @@ WRITE .DO SSCIRQ=1
.9 plp .9 plp
sec sec
rts rts
.ELSE .ELSE
pha pha
ldx DEVSLOTn08F ldx DEVSLOTn08F
@ -326,14 +400,12 @@ WRITE .DO SSCIRQ=1
.9 pla .9 pla
sec sec
rts rts
.FIN .FIN
*-------------------------------------- *--------------------------------------
* IRQ Handler * IRQ Handler
* on exit, CC if handled * on exit, CC if handled
*-------------------------------------- *--------------------------------------
.DO SSCIRQ=1 .DO SSCIRQ=1
IRQ ldx DEVSLOTn08F IRQ ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x lda SSC.STATUS-$8F,x
@ -385,40 +457,39 @@ IRQ ldx DEVSLOTn08F
.9 sec .9 sec
rts rts
.FIN .FIN
*-------------------------------------- *--------------------------------------
DRV.CS.END DRV.CS.END
DEVSLOTn08F .BS 1 DEVSLOTn08F .BS 1
.DO SSCIRQ=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
OUTBUF.HEAD .BS 1 OUTBUF.HEAD .BS 1
INBUF .BS BUF.SIZE INBUF .BS BUF.SIZE
OUTBUF .BS BUF.SIZE OUTBUF .BS BUF.SIZE
.FIN .FIN
*-------------------------------------- *--------------------------------------
STAT .DO SSCIRQ=1 DIB .DO SSCIRQ=1
.DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.IRQ
.DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DEV.S.IRQ
.ELSE .ELSE
.DA #S.DIB.S.WRITE+S.DIB.S.READ .DA #S.DIB.S.WRITE+S.DIB.S.READ
.FIN .FIN
.DA #0,#0,#0 .DA #0,#0,#0
>PSTR "Serial Card/Port" >PSTR "Serial Card/Port"
.DA #S.DIB.T.CHAR .DA #S.DIB.T.CHAR
.DA #0 .DA #0
.DA #0 .DA K.VER
.DA #91
*-------------------------------------- *--------------------------------------
DCB .DA #S.DCB.T.COM
.DA #0 FLAGS
.DA >9600 BAUD (DWORD)
.DA #8 DATA
.DA #1 STOP
.DA #S.DCB.COM.P.NONE PARITY
.DA #S.DCB.COM.C.XONXOFF
*--------------------------------------
DRV.END
MAN MAN
SAVE /A2OSX.SRC/DRV/X.SSC.DRV.S SAVE /A2OSX.SRC/DRV/X.SSC.DRV.S
LOAD /A2OSX.SRC/DRV/SSC.I.DRV.S LOAD /A2OSX.SRC/DRV/SSC.I.DRV.S

View File

@ -333,7 +333,8 @@ S.IOCTL.ADDRPTR .EQ 6 3 BYTES
S.IOCTL .EQ 9 S.IOCTL .EQ 9
*-------------------------------------- *--------------------------------------
S.DCB.T .EQ 0 S.DCB.T .EQ 0
S.DCB.T.NIC .EQ $12 S.DCB.T.NIC .EQ $81
S.DCB.T.COM .EQ $82
*-------------------------------------- *--------------------------------------
S.DIB.S .EQ 0 S.DIB.S .EQ 0
S.DIB.S.BLOCK .EQ %10000000 S.DIB.S.BLOCK .EQ %10000000
@ -365,7 +366,7 @@ S.DIB.T.CLOCK .EQ $0E Clock
S.DIB.T.MODEM .EQ $0F Modem S.DIB.T.MODEM .EQ $0F Modem
S.DIB.T.DISKII .EQ $10 S.DIB.T.DISKII .EQ $10
S.DIB.T.PRODOS .EQ $11 S.DIB.T.PRODOS .EQ $11
S.DIB.T.NIC .EQ $12 Network Iterface Card S.DIB.T.NIC .EQ $12 Network Interface Card
S.DIB.T.XY .EQ $13 X,Y Pointing Device S.DIB.T.XY .EQ $13 X,Y Pointing Device
S.DIB.T.CHAR .EQ $14 S.DIB.T.CHAR .EQ $14
S.DIB.T.GFX .EQ $15 S.DIB.T.GFX .EQ $15

26
INC/COM.I.txt Normal file
View File

@ -0,0 +1,26 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
*--------------------------------------
* COM Devices
*--------------------------------------
S.DCB.COM.FLAGS .EQ 1
S.DCB.COM.BAUD .EQ 2
S.DCB.COM.DATA .EQ 6
S.DCB.COM.STOP .EQ 10
S.DCB.COM.P .EQ 11
S.DCB.COM.P.NONE .EQ 0
S.DCB.COM.P.ODD .EQ 1
S.DCB.COM.P.EVEN .EQ 2
S.DCB.COM.P.MARK .EQ 3
S.DCB.COM.P.SPACE .EQ 4
S.DCB.COM.C .EQ 12
S.DCB.COM.C.NONE .EQ 0
S.DCB.COM.C.HW .EQ 1
S.DCB.COM.C.XONXOFF .EQ 2
*
S.DCB.COM .EQ 13
*--------------------------------------
MAN
SAVE INC/COM.I