Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-08-31 17:35:08 +02:00
parent f32fc33900
commit aad9f9912f
3 changed files with 144 additions and 58 deletions

Binary file not shown.

Binary file not shown.

View File

@ -146,6 +146,9 @@ FD.DEV.NAME .AZ "COM1" NAME
* Driver Code * Driver Code
*-------------------------------------- *--------------------------------------
ZPIOCTL .EQ ZPDRV ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
ZPCount .EQ ZPDRV+4
ZPCount2 .EQ ZPDRV+6
*-------------------------------------- *--------------------------------------
DRV.CS.START cld DRV.CS.START cld
jmp (.1,x) jmp (.1,x)
@ -282,59 +285,134 @@ CLOSE php
*-------------------------------------- *--------------------------------------
READ >STYA ZPIOCTL READ >STYA ZPIOCTL
.DO SSCIRQ=1
php php
sei sei
ldx INBUF.TAIL ldy #S.IOCTL.BUFPTR
cpx INBUF.HEAD lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
* ldy #S.IOCTL.BYTECNT
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
stz ZPCount2
stz ZPCount2+1
ldx DEVSLOTn08F
.10 inc ZPCount
bne .11
inc ZPCount+1
beq .8
.11 .DO SSCIRQ=1
ldy INBUF.TAIL
cpy INBUF.HEAD
beq .2 beq .2
lda INBUF,x lda INBUF,y
inx iny
cpx #BUF.SIZE cpy #BUF.SIZE
bne .1 bne .1
ldx #0 ldy #0
.1 stx INBUF.TAIL .1 sty INBUF.TAIL
sta (ZPBufPtr)
inc ZPBufPtr
bne .12
inc ZPBufPtr+1
.12 inc ZPCount2
bne .10
inc ZPCount2+1
bra .10
.FIN
.2 lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF incoming char?
beq .8
sta (ZPBufPtr)
inc ZPBufPtr
bne .13
inc ZPBufPtr+1
.13 inc ZPCount2
bne .2
inc ZPCount2+1
bra .2
.8 lda ZPCount2
bne .81
ldx ZPCount2+1
beq .99
.81 ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
iny
txa
sta (ZPIOCTL),y
plp plp
clc clc
rts rts
.2 ldx DEVSLOTn08F .90 lda #0
lda SSC.STATUS-$8F,x .HS 2C BIT ABS
and #SSC.STATUS.nDSR true when 0 .9 lda #C.EOF
beq .90 .99 plp
lda #C.EOF
.90 plp
sec sec
rts rts
.ELSE
ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF incoming char?
beq .9
lda SSC.DATA-$8F,x
clc
rts
.9 lda #0
sec
rts
.FIN
*-------------------------------------- *--------------------------------------
WRITE >STYA ZPIOCTL WRITE >STYA ZPIOCTL
.DO SSCIRQ=1
php php
sei sei
tay save char in Y
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
* ldy #S.IOCTL.BYTECNT
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
.2 inc ZPCount
bne .3
inc ZPCount+1
beq .8
.3 .DO SSCIRQ=1
ldx DEVSLOTn08F ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x lda SSC.STATUS-$8F,x
@ -343,23 +421,25 @@ WRITE >STYA ZPIOCTL
lda OUTBUF.HEAD lda OUTBUF.HEAD
cmp OUTBUF.TAIL Buffer Empty? cmp OUTBUF.TAIL Buffer Empty?
bne .11 not empty, queue char bne .6 not empty, queue char
lda SSC.STATUS-$8F,x lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Register Empty ? and #SSC.STATUS.TDRE Register Empty ?
beq .10 not empty, queue char beq .5 not empty, queue char
tya yes, write directly to ACIA lda (ZPBufPtr) yes, write directly to ACIA
sta SSC.DATA-$8F,x inc ZPBufPtr
bne .4
inc ZPBufPtr+1
plp .4 sta SSC.DATA-$8F,x
clc
rts
.10 lda OUTBUF.HEAD bra .2
.11 tax .5 lda OUTBUF.HEAD
.6 tax
inc inc
and #BUF.MASK and #BUF.MASK
cmp OUTBUF.TAIL cmp OUTBUF.TAIL
@ -367,40 +447,46 @@ WRITE >STYA ZPIOCTL
sta OUTBUF.HEAD sta OUTBUF.HEAD
tya lda (ZPBufPtr)
sta OUTBUF,x inc ZPBufPtr
bne .7
inc ZPBufPtr+1
plp .7 sta OUTBUF,x
clc
rts
.90 lda #C.EOF bra .2
.9 plp
sec
rts
.ELSE .ELSE
pha
ldx DEVSLOTn08F ldx DEVSLOTn08F
.1 lda SSC.STATUS-$8F,x .4 lda SSC.STATUS-$8F,x
* and #SSC.STATUS.DCD+SSC.STATUS.DSR * and #SSC.STATUS.DCD+SSC.STATUS.nDSR
* beq .9 * beq .9
and #SSC.STATUS.TDRE Outgoing char? and #SSC.STATUS.TDRE Outgoing char?
beq .1 beq .4
pla lda (ZPBufPtr)
sta SSC.DATA-$8F,x inc ZPBufPtr
bne .5
inc ZPBufPtr+1
.5 sta SSC.DATA-$8F,x
bra .2
.FIN
.8 plp
clc clc
rts rts
.9 pla .90 lda #0
.HS 2C BIT ABS
.9 lda #C.EOF
plp
sec sec
rts rts
.FIN
*-------------------------------------- *--------------------------------------
* IRQ Handler * IRQ Handler
* on exit, CC if handled * on exit, CC if handled