mirror of
https://github.com/A2osX/A2osX.git
synced 2025-01-13 08:29:46 +00:00
Kernel rewrite #5, IRQ Handler In Progress...
This commit is contained in:
parent
5b2af25a9e
commit
836ab820af
BIN
A2OSX.BOOT.DSK
BIN
A2OSX.BOOT.DSK
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -41,6 +41,9 @@ A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
|
||||
jmp (pLib) pLibJmp
|
||||
.BS $BE20-*
|
||||
*--------------------------------------
|
||||
GO.Reset jsr GO.AUXLC
|
||||
jmp KERNEL.COLDBOOT
|
||||
*--------------------------------------
|
||||
A2osX.LIBCALL1 pha
|
||||
phx
|
||||
tya
|
||||
@ -76,6 +79,7 @@ GO.MAINLC php
|
||||
|
||||
GO.AUXLC php
|
||||
sec
|
||||
sei
|
||||
|
||||
sta A2osX.SaveA
|
||||
pla keep P in A for later
|
||||
@ -92,7 +96,6 @@ GO.AUXLC php
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx RRAMWRAMBNK1
|
||||
|
||||
sei
|
||||
ldy pStack
|
||||
bcs GO.AUXLC1
|
||||
|
||||
@ -117,12 +120,15 @@ GO.EXIT sty pStack
|
||||
plp
|
||||
GO.EXIT.JMP jmp $FFFF
|
||||
*--------------------------------------
|
||||
GO.Reset jsr GO.AUXLC
|
||||
jmp KERNEL.COLDBOOT
|
||||
*--------------------------------------
|
||||
A2osX.SaveA .BS 1
|
||||
A2osX.SaveX .BS 1
|
||||
A2osX.SaveY .BS 1
|
||||
*--------------------------------------
|
||||
|
||||
*--------------------------------------
|
||||
IrqHandler
|
||||
|
||||
|
||||
*--------------------------------------
|
||||
A2osX.GP.End .EQ *
|
||||
*--------------------------------------
|
||||
@ -132,7 +138,6 @@ A2osX.GP.End .EQ *
|
||||
ERROR:GP too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
||||
.BS A2osX.GP.START+$100-*
|
||||
.EP
|
||||
*--------------------------------------
|
||||
|
@ -65,7 +65,7 @@ A2osX.QC.Start1 sei
|
||||
>LDAXI A2osX.QC.Prefix
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>DEBUG
|
||||
>DEBUGOA
|
||||
|
||||
bra .3
|
||||
|
||||
@ -86,7 +86,7 @@ A2osX.QC.Start1 sei
|
||||
>LDAXI MSG.STAGE1OK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>DEBUG
|
||||
>DEBUGOA
|
||||
|
||||
jmp (POWERUP)
|
||||
|
||||
@ -201,9 +201,7 @@ MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
||||
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||
*--------------------------------------
|
||||
A2osX.QC.END .EQ *
|
||||
A2osX.QC.SIZE .EQ A2osX.QC.END-A2osX.QC.START
|
||||
.BS $200-A2osX.QC.SIZE
|
||||
.BS $1300-*
|
||||
.EP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -8,8 +8,6 @@ echo Env:
|
||||
SET
|
||||
INSDRV CONSOLE.DRV
|
||||
GETTY CON SBIN/LOGIN
|
||||
#INSDRV SSC.DRV 9600 N 8 1 X
|
||||
#GETTY COM2 SBIN/LOGIN
|
||||
#INSDRV PPIC.DRV
|
||||
INSDRV UTHERNET.DRV 000E3A123456
|
||||
TCPIP ETH3
|
||||
@ -20,6 +18,8 @@ DHCPCLNT
|
||||
#INSDRV DHGR.DRV
|
||||
#INSDRV MOUSE.DRV
|
||||
#DESKTOP
|
||||
INSDRV SSC.I.DRV 9600 N 8 1 X
|
||||
GETTY COM2 SBIN/LOGIN
|
||||
ECHO *** End A2osX Startup file ***
|
||||
MAN
|
||||
TEXT A2OSX.STARTUP
|
||||
|
@ -209,33 +209,33 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
lda (ZPPTR1),y
|
||||
sta ZPPTR2+1
|
||||
lda #"{"
|
||||
jsr COUT
|
||||
>SYSCALL SYS.COutA
|
||||
lda (ZPPTR2)
|
||||
jsr PRBYTE
|
||||
>SYSCALL SYS.HexOutA
|
||||
lda #"|"
|
||||
jsr COUT
|
||||
>SYSCALL SYS.COutA
|
||||
ldy #1
|
||||
|
||||
.1 lda (ZPPTR2),y
|
||||
ora #$80
|
||||
cmp #$A0
|
||||
cmp #$20
|
||||
bcs .2
|
||||
|
||||
ora #$20
|
||||
.2 jsr COUT
|
||||
.2 >SYSCALL SYS.COutA
|
||||
iny
|
||||
cpy #40
|
||||
bne .1
|
||||
|
||||
lda #"}"
|
||||
jsr COUT
|
||||
>SYSCALL SYS.COutA
|
||||
bra .4
|
||||
|
||||
.3 >SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||
|
||||
.4 jsr CROUT
|
||||
.4 lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
ldy #LINE.COUNT
|
||||
lda (pData),y
|
||||
inc
|
||||
@ -301,34 +301,6 @@ CS.QUIT lda hLIBSTR
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
PRBYTE pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc .1
|
||||
adc #6
|
||||
.1 jsr COUT
|
||||
pla
|
||||
and #$0F
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc COUT
|
||||
adc #6
|
||||
bra COUT
|
||||
*--------------------------------------
|
||||
CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT phx
|
||||
phy
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
|
||||
|
@ -141,10 +141,13 @@ COUT.CTRL cmp #8
|
||||
ldy CV
|
||||
jmp SetCharAtXY
|
||||
|
||||
.2 cmp #12
|
||||
.2 cmp #10
|
||||
beq LFOUT
|
||||
|
||||
cmp #12
|
||||
beq HOME
|
||||
|
||||
.3 cmp #13
|
||||
cmp #13
|
||||
beq CROUT
|
||||
|
||||
cmp #27 ESC
|
||||
@ -182,9 +185,12 @@ FSOUT ldx CH
|
||||
rts
|
||||
*--------------------------------------
|
||||
CROUT jsr CLREOL
|
||||
stz CH
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CROUT1 stz CH
|
||||
ldy CV
|
||||
LFOUT ldy CV
|
||||
cpy #23
|
||||
beq SCROLL.UP
|
||||
inc CV
|
||||
|
@ -10,20 +10,8 @@ AUTO 6
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
*--------------------------------------
|
||||
BUF.SIZE .EQ $20
|
||||
BUF.MASK .EQ $1F
|
||||
*--------------------------------------
|
||||
ZPGoCard .EQ ZPDRV
|
||||
ZPTmpPtr1 .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* Pascal 1.1 Protocol
|
||||
*--------------------------------------
|
||||
SSC.INIT .EQ $0D
|
||||
SSC.READ .EQ $0E
|
||||
SSC.WRITE .EQ $0F
|
||||
SSC.STATUS .EQ $10
|
||||
ZPTmpPtr1 .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
* SSC/ACIA I/O
|
||||
*--------------------------------------
|
||||
@ -35,7 +23,7 @@ SSC.REG.STATUS .EQ $C089 R
|
||||
SSC.REG.STATUS.IRQ .EQ %10000000
|
||||
SSC.REG.STATUS.DSR .EQ %01000000
|
||||
SSC.REG.STATUS.DCD .EQ %00100000
|
||||
SSC.REG.STATUS.TDRF .EQ %00010000
|
||||
SSC.REG.STATUS.TDRE .EQ %00010000
|
||||
SSC.REG.STATUS.RDRF .EQ %00001000
|
||||
SSC.REG.STATUS.OE .EQ %00000100
|
||||
SSC.REG.STATUS.FE .EQ %00000010
|
||||
@ -46,7 +34,7 @@ SSC.REG.CMD.EVENP .EQ %01100000
|
||||
SSC.REG.CMD.MARKP .EQ %10100000
|
||||
SSC.REG.CMD.SPACEP .EQ %11100000
|
||||
SSC.REG.CMD.ECHO .EQ %00010000
|
||||
SSC.REG.CMD.TE .EQ %00001000
|
||||
SSC.REG.CMD.TENOIRQ .EQ %00001000
|
||||
SSC.REG.CMD.TEIRQ .EQ %00000100
|
||||
SSC.REG.CMD.TBRK .EQ %00001100
|
||||
SSC.REG.CMD.RIRQDIS .EQ %00000010
|
||||
@ -68,11 +56,14 @@ CS.START cld
|
||||
* 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
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
Dev.Detect sta hArgs
|
||||
>LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.SysScrPPSTRYA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
stz ZPTmpPtr1
|
||||
lda #$C1
|
||||
@ -93,6 +84,9 @@ Dev.Detect sta hArgs
|
||||
cmp #$C8
|
||||
bne .1
|
||||
|
||||
>LDYA L.MSG.DETECT.KO
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||
sec
|
||||
rts
|
||||
@ -108,6 +102,14 @@ Dev.Detect sta hArgs
|
||||
asl
|
||||
asl
|
||||
sta DEVSLOTn0
|
||||
|
||||
>LDYA L.MSG.DETECT.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
>LDYA L.DEV.HEADER.NAME
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -115,14 +117,16 @@ CS.END
|
||||
DEVSIG.Offset .HS 05070B0C
|
||||
DEVSIG.Value .HS 38180131
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
MSG.DETECT >PSTRING "\nApple Super Serial Card Driver."
|
||||
MSG.DETECT >PSTRING "Apple SSC (Super Serial Card,//c Serial Port) Driver.\n"
|
||||
MSG.DETECT.OK >PSTRING "SSC Installed As Device : "
|
||||
MSG.DETECT.KO >PSTRING "No SSC Found.\n"
|
||||
hArgs .BS 1
|
||||
*--------------------------------------
|
||||
* Device Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.DA #S.DEV.F.IRQ+S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
.DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
DEV.HEADER.NAME >PSTRING "COM1" NAME
|
||||
.HS 00.00
|
||||
.HS 00.00.00.00
|
||||
@ -138,39 +142,33 @@ DRV.CS.START .DA OPEN
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
*--------------------------------------
|
||||
OPEN
|
||||
* ldy #SSC.INIT
|
||||
* jsr GoCard
|
||||
ldx DEVSLOTn0
|
||||
|
||||
stz SSC.REG.RESET,x
|
||||
lda #$1E
|
||||
sta SSC.REG.CTL,x
|
||||
|
||||
stz INBUF.PTR
|
||||
stz INBUF.CNT
|
||||
stz OUTBUF.PTR
|
||||
stz OUTBUF.CNT
|
||||
OPEN ldx DEVSLOTn0
|
||||
|
||||
php
|
||||
sei
|
||||
stz SSC.REG.RESET,x
|
||||
|
||||
lda #$1E
|
||||
sta SSC.REG.CTL,x
|
||||
|
||||
ldx DEVSLOTn0
|
||||
lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR
|
||||
lda #SSC.REG.CMD.TENOIRQ+SSC.REG.CMD.RIRQDIS
|
||||
sta SSC.REG.CMD,x
|
||||
|
||||
lda SSC.REG.STATUS,x clear any IRQ pending
|
||||
bmi *
|
||||
plp
|
||||
|
||||
.8 clc
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT php
|
||||
sei
|
||||
lda INBUF.CNT
|
||||
beq .9
|
||||
GETEVENT ldx DEVSLOTn0
|
||||
lda SSC.REG.STATUS,x
|
||||
bmi *
|
||||
|
||||
and #SSC.REG.STATUS.RDRF incoming char?
|
||||
beq .9
|
||||
|
||||
ldx INBUF.PTR
|
||||
lda INBUF,x
|
||||
lda SSC.REG.DATA,x
|
||||
ldy #S.EVT.DATA
|
||||
sta (pEvent),y
|
||||
|
||||
@ -181,134 +179,50 @@ GETEVENT php
|
||||
lda #S.EVT.F.KEY
|
||||
sta (pEvent)
|
||||
|
||||
inx
|
||||
cpx #BUF.SIZE
|
||||
bne .1
|
||||
ldx #0
|
||||
|
||||
.1 stx INBUF.PTR
|
||||
dec INBUF.CNT
|
||||
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 plp
|
||||
lda #0
|
||||
.9 lda #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
COUT php
|
||||
sei
|
||||
COUT pha
|
||||
|
||||
ldx DEVSLOTn0
|
||||
lda SSC.REG.STATUS,x
|
||||
.1 lda SSC.REG.STATUS,x
|
||||
bmi *
|
||||
and #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
|
||||
beq .9
|
||||
|
||||
ldx OUTBUF.CNT
|
||||
cpx #BUF.SIZE
|
||||
beq .9
|
||||
|
||||
>PULLA
|
||||
ldx OUTBUF.PTR
|
||||
sta OUTBUF,x
|
||||
inx
|
||||
cpx #BUF.SIZE
|
||||
|
||||
and #SSC.REG.STATUS.TDRE Outgoing char?
|
||||
bne .1
|
||||
ldx #0
|
||||
|
||||
.1 stx OUTBUF.PTR
|
||||
inc OUTBUF.CNT
|
||||
pla
|
||||
sta SSC.REG.DATA,x
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 >PULLA
|
||||
plp
|
||||
.9 pla
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE clc
|
||||
CLOSE php
|
||||
sei
|
||||
ldx DEVSLOTn0
|
||||
stz SSC.REG.RESET,x
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
clc
|
||||
IRQ clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* IRQ Handler
|
||||
* on exit, CS if handled
|
||||
*--------------------------------------
|
||||
IRQ cld
|
||||
|
||||
ldx DEVSLOTn0
|
||||
lda SSC.REG.STATUS,x IRQ from this device ?
|
||||
* bpl .9 no, exit
|
||||
pha save status ...
|
||||
and #SSC.REG.STATUS.RDRF incoming char?
|
||||
beq .1
|
||||
|
||||
ldy SSC.REG.DATA,x read data to clear IRQ
|
||||
lda INBUF.CNT
|
||||
cmp #BUF.SIZE
|
||||
beq .1 buffer full, discard
|
||||
phy
|
||||
clc
|
||||
adc INBUF.PTR
|
||||
and #BUF.MASK
|
||||
tay
|
||||
pla get back data
|
||||
sta INBUF,y
|
||||
inc INBUF.CNT
|
||||
|
||||
.1 pla get back status
|
||||
and #SSC.REG.STATUS.TDRF
|
||||
beq .8
|
||||
|
||||
lda OUTBUF.CNT something to transmit ?
|
||||
beq .8 no, exit
|
||||
|
||||
clc
|
||||
adc OUTBUF.PTR
|
||||
and #BUF.MASK
|
||||
tay
|
||||
|
||||
lda OUTBUF,Y
|
||||
sta SSC.REG.DATA,x
|
||||
|
||||
dec INBUF.CNT
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
GOCARD sta $CFFF Prevent SSC firmware bug
|
||||
pha
|
||||
stz ZPGoCard
|
||||
ldx DEVSLOTCn
|
||||
stx ZPGoCard+1
|
||||
lda (ZPGoCard),y
|
||||
sta ZPGoCard
|
||||
ldy DEVSLOTn0
|
||||
pla
|
||||
jmp (ZPGoCard)
|
||||
*--------------------------------------
|
||||
DRV.CS.END
|
||||
DEVSLOT0n .BS 1
|
||||
DEVSLOTCn .BS 1
|
||||
DEVSLOTn0 .BS 1
|
||||
INBUF.PTR .BS 1
|
||||
INBUF.CNT .BS 1
|
||||
OUTBUF.PTR .BS 1
|
||||
OUTBUF.CNT .BS 1
|
||||
INBUF .BS BUF.SIZE
|
||||
OUTBUF .BS BUF.SIZE
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
|
372
DRV/SSC.I.DRV.S.txt
Normal file
372
DRV/SSC.I.DRV.S.txt
Normal file
@ -0,0 +1,372 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF /A2OSX.BOOT/DRV/SSC.I.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
BUF.SIZE .EQ $20
|
||||
BUF.MASK .EQ $1F
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
* SSC/ACIA I/O
|
||||
*--------------------------------------
|
||||
SSC.REG.DIPSW1 .EQ $C081 R
|
||||
SSC.REG.DIPSW2 .EQ $C082 R
|
||||
SSC.REG.DATA .EQ $C088 R,W
|
||||
SSC.REG.RESET .EQ $C089 W
|
||||
SSC.REG.STATUS .EQ $C089 R
|
||||
SSC.REG.STATUS.IRQ .EQ %10000000
|
||||
SSC.REG.STATUS.DSR .EQ %01000000
|
||||
SSC.REG.STATUS.DCD .EQ %00100000
|
||||
SSC.REG.STATUS.TDRE .EQ %00010000
|
||||
SSC.REG.STATUS.RDRF .EQ %00001000
|
||||
SSC.REG.STATUS.OE .EQ %00000100
|
||||
SSC.REG.STATUS.FE .EQ %00000010
|
||||
SSC.REG.STATUS.PE .EQ %00000001
|
||||
SSC.REG.CMD .EQ $C08A W
|
||||
SSC.REG.CMD.NOP .EQ %00000000
|
||||
SSC.REG.CMD.ODDP .EQ %00100000
|
||||
SSC.REG.CMD.EVENP .EQ %01100000
|
||||
SSC.REG.CMD.MARKP .EQ %10100000
|
||||
SSC.REG.CMD.SPACEP .EQ %11100000
|
||||
SSC.REG.CMD.ECHO .EQ %00010000
|
||||
SSC.REG.CMD.TBRK .EQ %00001100
|
||||
SSC.REG.CMD.TE .EQ %00001000
|
||||
SSC.REG.CMD.TEIRQ .EQ %00000100
|
||||
SSC.REG.CMD.RIRQDIS .EQ %00000010
|
||||
SSC.REG.CMD.DTR .EQ %00000001
|
||||
SSC.REG.CTL .EQ $C08B W
|
||||
SSC.REG.CTL.1S .EQ %00000000
|
||||
SSC.REG.CTL.2S .EQ %10000000
|
||||
SSC.REG.CTL.8D .EQ %00000000
|
||||
SSC.REG.CTL.7D .EQ %00100000
|
||||
SSC.REG.CTL.6D .EQ %01000000
|
||||
SSC.REG.CTL.5D .EQ %01100000
|
||||
SSC.REG.CTL.CEXT .EQ %00000000
|
||||
SSC.REG.CTL.CINT .EQ %00010000
|
||||
SSC.REG.CTL.B16EXT .EQ %00000000
|
||||
SSC.REG.CTL.B50 .EQ %00000001
|
||||
SSC.REG.CTL.B75 .EQ %00000010
|
||||
SSC.REG.CTL.B110 .EQ %00000011
|
||||
SSC.REG.CTL.B135 .EQ %00000100
|
||||
SSC.REG.CTL.B150 .EQ %00000101
|
||||
SSC.REG.CTL.B300 .EQ %00000110
|
||||
SSC.REG.CTL.B600 .EQ %00000111
|
||||
SSC.REG.CTL.B1200 .EQ %00001000
|
||||
SSC.REG.CTL.B1800 .EQ %00001001
|
||||
SSC.REG.CTL.B2400 .EQ %00001010
|
||||
SSC.REG.CTL.B3600 .EQ %00001011
|
||||
SSC.REG.CTL.B4800 .EQ %00001100
|
||||
SSC.REG.CTL.B7200 .EQ %00001101
|
||||
SSC.REG.CTL.B9600 .EQ %00001110
|
||||
SSC.REG.CTL.B19200 .EQ %00001111
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp Dev.Detect cld,jmp abs=DRV
|
||||
.DA #$61 6502,Level 1 (65c02)
|
||||
.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
|
||||
*--------------------------------------
|
||||
* 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
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
Dev.Detect sta hArgs
|
||||
>LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
stz ZPTmpPtr1
|
||||
lda #$C1
|
||||
sta ZPTmpPtr1+1
|
||||
|
||||
.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
|
||||
cmp #$C8
|
||||
bne .1
|
||||
|
||||
>LDYA L.MSG.DETECT.KO
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||
sec
|
||||
rts
|
||||
|
||||
.4 lda ZPTmpPtr1+1
|
||||
* sta DEVSLOTCn
|
||||
and #$0F
|
||||
sta DEVSLOT0n
|
||||
ora #$30
|
||||
sta DEV.HEADER.NAME+4
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta DEVSLOTn0
|
||||
|
||||
>LDYA L.MSG.DETECT.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
>LDYA L.DEV.HEADER.NAME
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVSIG.Offset .HS 05070B0C
|
||||
DEVSIG.Value .HS 38180131
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
MSG.DETECT >PSTRING "Apple SSC (Super Serial Card,//c Serial Port) Driver (IRQ Enabled).\n"
|
||||
MSG.DETECT.OK >PSTRING "SSC Installed As Device : "
|
||||
MSG.DETECT.KO >PSTRING "No SSC Found.\n"
|
||||
hArgs .BS 1
|
||||
*--------------------------------------
|
||||
* Device Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.DA #S.DEV.F.IRQ+S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
DEV.HEADER.NAME >PSTRING "COM1" NAME
|
||||
.HS 00.00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
*--------------------------------------
|
||||
DRV.CS.START .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA COUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
*--------------------------------------
|
||||
OPEN ldx DEVSLOTn0
|
||||
|
||||
stz SSC.REG.RESET,x
|
||||
lda #SSC.REG.CTL.CINT+SSC.REG.CTL.B9600
|
||||
sta SSC.REG.CTL,x
|
||||
|
||||
stz INBUF.PTR
|
||||
stz INBUF.CNT
|
||||
stz OUTBUF.PTR
|
||||
stz OUTBUF.CNT
|
||||
stz IDX
|
||||
|
||||
php
|
||||
sei
|
||||
lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR
|
||||
sta SSC.REG.CMD,x
|
||||
|
||||
lda SSC.REG.STATUS,x clear any IRQ pending
|
||||
lda SSC.REG.DATA,x discard any garbage byte
|
||||
|
||||
plp
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT php
|
||||
sei
|
||||
lda INBUF.CNT
|
||||
beq .9
|
||||
|
||||
ldx INBUF.PTR
|
||||
lda INBUF,x
|
||||
|
||||
ldy #S.EVT.DATA
|
||||
sta (pEvent),y
|
||||
|
||||
iny
|
||||
lda #0
|
||||
sta (pEvent),y
|
||||
|
||||
lda #S.EVT.F.KEY
|
||||
sta (pEvent)
|
||||
|
||||
inx
|
||||
cpx #BUF.SIZE
|
||||
bne .1
|
||||
ldx #0
|
||||
|
||||
.1 stx INBUF.PTR
|
||||
dec INBUF.CNT
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 plp
|
||||
lda #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
COUT php
|
||||
sei
|
||||
* tay save char in Y
|
||||
|
||||
ldx DEVSLOTn0
|
||||
* lda SSC.REG.STATUS,x
|
||||
bit #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
|
||||
* beq .9
|
||||
|
||||
* ldx OUTBUF.CNT Buffer Empty?
|
||||
* bne .10
|
||||
|
||||
* bit #SSC.REG.STATUS.TDRE Register Empty ?
|
||||
* beq .10 not empty, queue char
|
||||
|
||||
* tya yes, write directly to ACIA
|
||||
ldx DEVSLOTn0
|
||||
sta SSC.REG.DATA,x
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
|
||||
.10 cpx #BUF.SIZE
|
||||
beq .9 Buffer Full!!
|
||||
|
||||
ldx OUTBUF.PTR
|
||||
tya
|
||||
sta OUTBUF,x
|
||||
|
||||
inx
|
||||
cpx #BUF.SIZE
|
||||
bne .1
|
||||
ldx #0
|
||||
|
||||
.1 stx OUTBUF.PTR
|
||||
inc OUTBUF.CNT
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 plp
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE php
|
||||
sei
|
||||
ldx DEVSLOTn0
|
||||
stz SSC.REG.RESET,x
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* IRQ Handler
|
||||
* on exit, CC if handled
|
||||
*--------------------------------------
|
||||
IRQ ldx DEVSLOTn0
|
||||
lda SSC.REG.STATUS,x IRQ from this device ?
|
||||
* bpl .9 no, exit
|
||||
|
||||
pha save status ...
|
||||
and #SSC.REG.STATUS.RDRF incoming char?
|
||||
beq .1
|
||||
|
||||
ldy SSC.REG.DATA,x read data to clear IRQ
|
||||
|
||||
phx
|
||||
ldx IDX
|
||||
tya
|
||||
cmp #$20
|
||||
bcc .10
|
||||
ora #$80
|
||||
.10 sta $402,x
|
||||
inx
|
||||
txa
|
||||
and #$1F
|
||||
sta IDX
|
||||
plx
|
||||
|
||||
lda INBUF.CNT
|
||||
cmp #BUF.SIZE
|
||||
beq .1 buffer full, discard
|
||||
|
||||
phy
|
||||
clc
|
||||
adc INBUF.PTR
|
||||
and #BUF.MASK
|
||||
tay
|
||||
pla get back data
|
||||
sta INBUF,y
|
||||
inc INBUF.CNT
|
||||
|
||||
.1 pla get back status
|
||||
and #SSC.REG.STATUS.TDRE
|
||||
beq .8
|
||||
|
||||
lda OUTBUF.CNT something to transmit ?
|
||||
beq .8 no, exit
|
||||
|
||||
clc
|
||||
adc OUTBUF.PTR
|
||||
and #BUF.MASK
|
||||
tay
|
||||
|
||||
lda OUTBUF,Y
|
||||
sta SSC.REG.DATA,x
|
||||
|
||||
ora #$80
|
||||
sta $401
|
||||
|
||||
dec INBUF.CNT
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
DRV.CS.END
|
||||
IDX .BS 1
|
||||
DEVSLOT0n .BS 1
|
||||
*DEVSLOTCn .BS 1
|
||||
DEVSLOTn0 .BS 1
|
||||
INBUF.PTR .BS 1
|
||||
INBUF.CNT .BS 1
|
||||
OUTBUF.PTR .BS 1
|
||||
OUTBUF.CNT .BS 1
|
||||
INBUF .BS BUF.SIZE
|
||||
OUTBUF .BS BUF.SIZE
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/SSC.DRV.I.S
|
||||
ASM
|
@ -17,7 +17,8 @@ AUTO 6
|
||||
:1 bit $C000
|
||||
bpl :1
|
||||
sta $C010
|
||||
:2 .EM
|
||||
:2 .EQ *
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* SYSCALLs Macros
|
||||
*--------------------------------------
|
||||
|
@ -182,7 +182,7 @@ PRINTFB ldx #8
|
||||
>PULLA
|
||||
.1 asl
|
||||
pha
|
||||
lda #$B0
|
||||
lda #'0'
|
||||
bcc .2
|
||||
inc
|
||||
.2 jsr COUT
|
||||
@ -351,9 +351,9 @@ UCASEP phx
|
||||
beq .9
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #$61 "a"
|
||||
cmp #'a'
|
||||
bmi .2
|
||||
cmp #$7B "z"+1
|
||||
cmp #'z'+1
|
||||
bpl .2
|
||||
sec
|
||||
sbc #$20
|
||||
@ -371,9 +371,9 @@ LCASEP phx
|
||||
beq .9
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #$41 "A"
|
||||
cmp #'A'
|
||||
bmi .2
|
||||
cmp #$5B "Z"+1
|
||||
cmp #'Z'+1
|
||||
bpl .2
|
||||
clc
|
||||
adc #$20
|
||||
@ -628,7 +628,7 @@ HEX2DEC phx
|
||||
.4 lda BCDBUF,y
|
||||
pha
|
||||
and #$0F
|
||||
ora #$B0
|
||||
ora #$30
|
||||
sta ASCBUF,x
|
||||
dex
|
||||
pla
|
||||
@ -636,7 +636,7 @@ HEX2DEC phx
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
ora #$30
|
||||
sta ASCBUF,x
|
||||
iny
|
||||
dex
|
||||
@ -648,10 +648,10 @@ HEX2DEC phx
|
||||
sbc PADLEN
|
||||
.5 tax x=0 if no padlen, or x=10-padlen
|
||||
.6 lda ASCBUF,x
|
||||
cmp #$B0 a zero?
|
||||
cmp #'0' a zero?
|
||||
beq .7
|
||||
inc PADLEN found a non zero, print all digits, even if 0, next time
|
||||
ldy #"0"
|
||||
ldy #'0'
|
||||
sty PADCHAR
|
||||
bra .8
|
||||
.7 cpx #9 last digit ?
|
||||
@ -737,15 +737,15 @@ PRBYTE pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
ora #$30
|
||||
cmp #'9'+1
|
||||
bcc .1
|
||||
adc #6
|
||||
.1 jsr COUT
|
||||
pla
|
||||
PRHEX and #$0F
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
ora #$30
|
||||
cmp #'9'+1
|
||||
bcc COUT
|
||||
adc #6
|
||||
bra COUT
|
||||
@ -754,11 +754,18 @@ CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT phx
|
||||
phy
|
||||
cmp #13
|
||||
bne .1
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
bcs .9
|
||||
lda #10
|
||||
|
||||
.1 ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
PRINTFTBL1 .AS "abBdDLnNhHiIsStT"
|
||||
|
@ -184,13 +184,8 @@ INPUT.CHARIN tax saver char...
|
||||
*--------------------------------------
|
||||
INPUT.LINEIN ldy #INPUT.STATUS
|
||||
lda (pData),y
|
||||
asl CS is a line is in the buffer
|
||||
asl CS if a line is in the buffer
|
||||
rts
|
||||
ldy #INPUT.BUFFER
|
||||
lda (pData),y get Line Length
|
||||
bne .9 if 0, empty line
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.LOGIN >PSTRING "login:"
|
||||
|
@ -102,7 +102,8 @@ CS.RUN lda #0
|
||||
bne .2
|
||||
|
||||
jsr PrintPrompt
|
||||
|
||||
bcs .99
|
||||
|
||||
.1 >SYSCALL SYS.Sleep
|
||||
lda (pData)
|
||||
bpl .1
|
||||
@ -311,11 +312,12 @@ CS.QUIT jsr History.Quit
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
PrintPrompt lda #"$"
|
||||
PrintPrompt lda #'$'
|
||||
>SYSCALL SYS.COutA
|
||||
lda #" "
|
||||
bcs .9
|
||||
lda #' '
|
||||
>SYSCALL SYS.COutA
|
||||
rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PrintError pha
|
||||
>PUSHA
|
||||
|
@ -96,7 +96,13 @@ S.HexOutA pha
|
||||
*--------------------------------------
|
||||
S.COutA phx
|
||||
phy
|
||||
cmp #13
|
||||
bne .1
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
bcs S.COutA.RTS
|
||||
lda #10
|
||||
.1 ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
|
@ -219,10 +219,13 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
||||
lda DevMgr.LastDevID
|
||||
jsr S.GetDevByIDA
|
||||
>STYA pDev
|
||||
|
||||
ldy #S.DEV.SIZE-1 Copy DRV.Header
|
||||
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0
|
||||
lda #0
|
||||
sta (pDev),y
|
||||
dey
|
||||
|
||||
.1 lda (ZPQuickPtr1),y Copy DRV.Header
|
||||
sta (pDev),y
|
||||
dey
|
||||
bpl .1
|
||||
|
116
SYS/KERNEL.S.IRQ.txt
Normal file
116
SYS/KERNEL.S.IRQ.txt
Normal file
@ -0,0 +1,116 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* Setup MainLC ($3FE)
|
||||
*
|
||||
*
|
||||
* Setup AuxLC $FFFE->Kernel IRQ Handler
|
||||
* if irq not handled, jmp (S.IrqMgrOldFFFE)
|
||||
*--------------------------------------
|
||||
S.IrqMgrInit >LDYA $FFFE
|
||||
cpy #S.IrqHandlerAuxLC
|
||||
bne .1
|
||||
cmp /S.IrqHandlerAuxLC
|
||||
beq .8
|
||||
|
||||
.1 php
|
||||
sei
|
||||
>STYA S.IrqMgrOldFFFE
|
||||
>LDYAI S.IrqHandlerAuxLC
|
||||
>STYA $FFFE
|
||||
plp
|
||||
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.IrqMgrQuit php
|
||||
sei
|
||||
>LDYA S.IrqMgrOldFFFE
|
||||
>STYA $FFFE
|
||||
plp
|
||||
cli
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
|
||||
*--------------------------------------
|
||||
* called directly by IRQ Vector $FFFE in AuxLC
|
||||
* Must keep:
|
||||
* A,X,Y
|
||||
* SETREADAUX
|
||||
* if we are here, Aux ZP/Stack already On
|
||||
* Exit with RTI
|
||||
* if A2osX Drivers cannot clear IRQ,
|
||||
* must call regular System Handler
|
||||
*--------------------------------------
|
||||
S.IrqHandlerAuxLC
|
||||
sta S.IrqMgr.A
|
||||
pla
|
||||
pha
|
||||
and #$10 BRK?
|
||||
beq .10
|
||||
lda S.IrqMgr.A
|
||||
.82 jmp (S.IrqMgrOldFFFE)
|
||||
|
||||
.10 stx S.IrqMgr.X
|
||||
sty S.IrqMgr.Y
|
||||
lda $fe
|
||||
pha
|
||||
lda $ff
|
||||
pha
|
||||
lda RDREADAUX
|
||||
pha
|
||||
sta CLRREADAUX Make sure we can access DevMgr.Table
|
||||
|
||||
>LDYAI DevMgr.Table
|
||||
>STYA $fe
|
||||
|
||||
.1 lda ($fe) End Of Table ?
|
||||
sec
|
||||
beq .8
|
||||
|
||||
ldy #S.DEV.F
|
||||
lda ($fe),y
|
||||
and #S.DEV.F.IRQ
|
||||
beq .2
|
||||
|
||||
jsr S.IrqHandlerJMP
|
||||
bcc .8 CC, IRQ cleared by device
|
||||
|
||||
.2 lda $fe CS,
|
||||
adc #S.DEV.SIZE-1
|
||||
sta $fe
|
||||
bcc .1
|
||||
inc $ff
|
||||
bra .1
|
||||
|
||||
.8 pla Must keep Carry
|
||||
bpl .81
|
||||
sta SETREADAUX
|
||||
.81 pla
|
||||
sta $ff
|
||||
pla
|
||||
sta $fe
|
||||
ldy S.IrqMgr.Y
|
||||
ldx S.IrqMgr.X
|
||||
lda S.IrqMgr.A
|
||||
bcs .82
|
||||
rti
|
||||
|
||||
S.IrqHandlerJMP ldx #DEVMGR.IRQ
|
||||
jmp ($fe)
|
||||
*--------------------------------------
|
||||
S.IrqMgrOldFFFE .BS 2
|
||||
S.IrqMgr.A .BS 1
|
||||
S.IrqMgr.X .BS 1
|
||||
S.IrqMgr.Y .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.IRQ
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
@ -202,10 +202,11 @@ S.MLIGetBuf clc
|
||||
S.MLIGetTime >MLICALL MLIGETTIME
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIAllocIRQ >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
S.MLIAllocIRQ >PULLW MLICALL.PARAMS+2
|
||||
>MLICALL MLIALLOCIRQ
|
||||
rts
|
||||
bcs .9
|
||||
lda MLICALL.PARAMS+1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.MLIDeallocIRQA
|
||||
sta MLICALL.PARAMS+1
|
||||
|
@ -190,6 +190,8 @@ Kernel.Init sei
|
||||
stz A2osX.SCREENS
|
||||
stz A2osX.ASCREEN
|
||||
|
||||
jsr S.IrqMgrInit
|
||||
bcs *
|
||||
jsr S.MemMgrInit
|
||||
bcs *
|
||||
jsr S.DevMgrInit
|
||||
@ -370,6 +372,7 @@ ENV.LIB.VALUE >PSTRING "${A2OSX}LIB/"
|
||||
ENV.DRV >PSTRING "DRV"
|
||||
ENV.DRV.VALUE >PSTRING "${A2OSX}DRV/"
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.IRQ
|
||||
.INB SYS/KERNEL.S.MEM
|
||||
.INB SYS/KERNEL.S.STR
|
||||
.INB SYS/KERNEL.S.CIO
|
||||
|
Loading…
x
Reference in New Issue
Block a user