mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-07 01:29:33 +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
|
jmp (pLib) pLibJmp
|
||||||
.BS $BE20-*
|
.BS $BE20-*
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
GO.Reset jsr GO.AUXLC
|
||||||
|
jmp KERNEL.COLDBOOT
|
||||||
|
*--------------------------------------
|
||||||
A2osX.LIBCALL1 pha
|
A2osX.LIBCALL1 pha
|
||||||
phx
|
phx
|
||||||
tya
|
tya
|
||||||
|
@ -76,6 +79,7 @@ GO.MAINLC php
|
||||||
|
|
||||||
GO.AUXLC php
|
GO.AUXLC php
|
||||||
sec
|
sec
|
||||||
|
sei
|
||||||
|
|
||||||
sta A2osX.SaveA
|
sta A2osX.SaveA
|
||||||
pla keep P in A for later
|
pla keep P in A for later
|
||||||
|
@ -92,7 +96,6 @@ GO.AUXLC php
|
||||||
ldx RRAMWRAMBNK1
|
ldx RRAMWRAMBNK1
|
||||||
ldx RRAMWRAMBNK1
|
ldx RRAMWRAMBNK1
|
||||||
|
|
||||||
sei
|
|
||||||
ldy pStack
|
ldy pStack
|
||||||
bcs GO.AUXLC1
|
bcs GO.AUXLC1
|
||||||
|
|
||||||
|
@ -117,12 +120,15 @@ GO.EXIT sty pStack
|
||||||
plp
|
plp
|
||||||
GO.EXIT.JMP jmp $FFFF
|
GO.EXIT.JMP jmp $FFFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GO.Reset jsr GO.AUXLC
|
|
||||||
jmp KERNEL.COLDBOOT
|
|
||||||
*--------------------------------------
|
|
||||||
A2osX.SaveA .BS 1
|
A2osX.SaveA .BS 1
|
||||||
A2osX.SaveX .BS 1
|
A2osX.SaveX .BS 1
|
||||||
A2osX.SaveY .BS 1
|
A2osX.SaveY .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
|
||||||
|
*--------------------------------------
|
||||||
|
IrqHandler
|
||||||
|
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.GP.End .EQ *
|
A2osX.GP.End .EQ *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -132,7 +138,6 @@ A2osX.GP.End .EQ *
|
||||||
ERROR:GP too big
|
ERROR:GP too big
|
||||||
.FIN
|
.FIN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
|
||||||
.BS A2osX.GP.START+$100-*
|
.BS A2osX.GP.START+$100-*
|
||||||
.EP
|
.EP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -65,7 +65,7 @@ A2osX.QC.Start1 sei
|
||||||
>LDAXI A2osX.QC.Prefix
|
>LDAXI A2osX.QC.Prefix
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
|
|
||||||
>DEBUG
|
>DEBUGOA
|
||||||
|
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ A2osX.QC.Start1 sei
|
||||||
>LDAXI MSG.STAGE1OK
|
>LDAXI MSG.STAGE1OK
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
|
|
||||||
>DEBUG
|
>DEBUGOA
|
||||||
|
|
||||||
jmp (POWERUP)
|
jmp (POWERUP)
|
||||||
|
|
||||||
|
@ -201,9 +201,7 @@ MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||||
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
||||||
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.QC.END .EQ *
|
.BS $1300-*
|
||||||
A2osX.QC.SIZE .EQ A2osX.QC.END-A2osX.QC.START
|
|
||||||
.BS $200-A2osX.QC.SIZE
|
|
||||||
.EP
|
.EP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
|
|
|
@ -8,8 +8,6 @@ echo Env:
|
||||||
SET
|
SET
|
||||||
INSDRV CONSOLE.DRV
|
INSDRV CONSOLE.DRV
|
||||||
GETTY CON SBIN/LOGIN
|
GETTY CON SBIN/LOGIN
|
||||||
#INSDRV SSC.DRV 9600 N 8 1 X
|
|
||||||
#GETTY COM2 SBIN/LOGIN
|
|
||||||
#INSDRV PPIC.DRV
|
#INSDRV PPIC.DRV
|
||||||
INSDRV UTHERNET.DRV 000E3A123456
|
INSDRV UTHERNET.DRV 000E3A123456
|
||||||
TCPIP ETH3
|
TCPIP ETH3
|
||||||
|
@ -20,6 +18,8 @@ DHCPCLNT
|
||||||
#INSDRV DHGR.DRV
|
#INSDRV DHGR.DRV
|
||||||
#INSDRV MOUSE.DRV
|
#INSDRV MOUSE.DRV
|
||||||
#DESKTOP
|
#DESKTOP
|
||||||
|
INSDRV SSC.I.DRV 9600 N 8 1 X
|
||||||
|
GETTY COM2 SBIN/LOGIN
|
||||||
ECHO *** End A2osX Startup file ***
|
ECHO *** End A2osX Startup file ***
|
||||||
MAN
|
MAN
|
||||||
TEXT A2OSX.STARTUP
|
TEXT A2OSX.STARTUP
|
||||||
|
|
|
@ -209,33 +209,33 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
sta ZPPTR2+1
|
sta ZPPTR2+1
|
||||||
lda #"{"
|
lda #"{"
|
||||||
jsr COUT
|
>SYSCALL SYS.COutA
|
||||||
lda (ZPPTR2)
|
lda (ZPPTR2)
|
||||||
jsr PRBYTE
|
>SYSCALL SYS.HexOutA
|
||||||
lda #"|"
|
lda #"|"
|
||||||
jsr COUT
|
>SYSCALL SYS.COutA
|
||||||
ldy #1
|
ldy #1
|
||||||
|
|
||||||
.1 lda (ZPPTR2),y
|
.1 lda (ZPPTR2),y
|
||||||
ora #$80
|
cmp #$20
|
||||||
cmp #$A0
|
|
||||||
bcs .2
|
bcs .2
|
||||||
|
|
||||||
ora #$20
|
ora #$20
|
||||||
.2 jsr COUT
|
.2 >SYSCALL SYS.COutA
|
||||||
iny
|
iny
|
||||||
cpy #40
|
cpy #40
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda #"}"
|
lda #"}"
|
||||||
jsr COUT
|
>SYSCALL SYS.COutA
|
||||||
bra .4
|
bra .4
|
||||||
|
|
||||||
.3 >SYSCALL SYS.GetMemPtrA
|
.3 >SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
|
||||||
.4 jsr CROUT
|
.4 lda #13
|
||||||
|
>SYSCALL SYS.COutA
|
||||||
ldy #LINE.COUNT
|
ldy #LINE.COUNT
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
inc
|
inc
|
||||||
|
@ -301,34 +301,6 @@ CS.QUIT lda hLIBSTR
|
||||||
clc
|
clc
|
||||||
rts
|
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
|
CS.END
|
||||||
LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
|
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
|
||||||
|
|
|
@ -141,10 +141,13 @@ COUT.CTRL cmp #8
|
||||||
ldy CV
|
ldy CV
|
||||||
jmp SetCharAtXY
|
jmp SetCharAtXY
|
||||||
|
|
||||||
.2 cmp #12
|
.2 cmp #10
|
||||||
|
beq LFOUT
|
||||||
|
|
||||||
|
cmp #12
|
||||||
beq HOME
|
beq HOME
|
||||||
|
|
||||||
.3 cmp #13
|
cmp #13
|
||||||
beq CROUT
|
beq CROUT
|
||||||
|
|
||||||
cmp #27 ESC
|
cmp #27 ESC
|
||||||
|
@ -182,9 +185,12 @@ FSOUT ldx CH
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CROUT jsr CLREOL
|
CROUT jsr CLREOL
|
||||||
|
stz CH
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CROUT1 stz CH
|
CROUT1 stz CH
|
||||||
ldy CV
|
LFOUT ldy CV
|
||||||
cpy #23
|
cpy #23
|
||||||
beq SCROLL.UP
|
beq SCROLL.UP
|
||||||
inc CV
|
inc CV
|
||||||
|
|
|
@ -10,20 +10,8 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
.INB INC/A2OSX.API.I
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BUF.SIZE .EQ $20
|
ZPTmpPtr1 .EQ ZPDRV
|
||||||
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
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* SSC/ACIA I/O
|
* SSC/ACIA I/O
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -35,7 +23,7 @@ SSC.REG.STATUS .EQ $C089 R
|
||||||
SSC.REG.STATUS.IRQ .EQ %10000000
|
SSC.REG.STATUS.IRQ .EQ %10000000
|
||||||
SSC.REG.STATUS.DSR .EQ %01000000
|
SSC.REG.STATUS.DSR .EQ %01000000
|
||||||
SSC.REG.STATUS.DCD .EQ %00100000
|
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.RDRF .EQ %00001000
|
||||||
SSC.REG.STATUS.OE .EQ %00000100
|
SSC.REG.STATUS.OE .EQ %00000100
|
||||||
SSC.REG.STATUS.FE .EQ %00000010
|
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.MARKP .EQ %10100000
|
||||||
SSC.REG.CMD.SPACEP .EQ %11100000
|
SSC.REG.CMD.SPACEP .EQ %11100000
|
||||||
SSC.REG.CMD.ECHO .EQ %00010000
|
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.TEIRQ .EQ %00000100
|
||||||
SSC.REG.CMD.TBRK .EQ %00001100
|
SSC.REG.CMD.TBRK .EQ %00001100
|
||||||
SSC.REG.CMD.RIRQDIS .EQ %00000010
|
SSC.REG.CMD.RIRQDIS .EQ %00000010
|
||||||
|
@ -68,11 +56,14 @@ CS.START cld
|
||||||
* 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.KO .DA MSG.DETECT.KO
|
||||||
|
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
|
||||||
.DA 0 End Of Reloc Table
|
.DA 0 End Of Reloc Table
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Dev.Detect sta hArgs
|
Dev.Detect sta hArgs
|
||||||
>LDYA L.MSG.DETECT
|
>LDYA L.MSG.DETECT
|
||||||
>SYSCALL SYS.SysScrPPSTRYA
|
>SYSCALL SYS.PSTROutYA
|
||||||
|
|
||||||
stz ZPTmpPtr1
|
stz ZPTmpPtr1
|
||||||
lda #$C1
|
lda #$C1
|
||||||
|
@ -93,6 +84,9 @@ Dev.Detect sta hArgs
|
||||||
cmp #$C8
|
cmp #$C8
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
>LDYA L.MSG.DETECT.KO
|
||||||
|
>SYSCALL SYS.PSTROutYA
|
||||||
|
|
||||||
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
@ -108,6 +102,14 @@ Dev.Detect sta hArgs
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
sta DEVSLOTn0
|
sta DEVSLOTn0
|
||||||
|
|
||||||
|
>LDYA L.MSG.DETECT.OK
|
||||||
|
>SYSCALL SYS.PSTROutYA
|
||||||
|
>LDYA L.DEV.HEADER.NAME
|
||||||
|
>SYSCALL SYS.PSTROutYA
|
||||||
|
lda #13
|
||||||
|
>SYSCALL SYS.COutA
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -115,14 +117,16 @@ 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 >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
|
hArgs .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* 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.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
|
DEV.HEADER.NAME >PSTRING "COM1" NAME
|
||||||
.HS 00.00
|
.HS 00.00
|
||||||
.HS 00.00.00.00
|
.HS 00.00.00.00
|
||||||
|
@ -138,39 +142,33 @@ DRV.CS.START .DA OPEN
|
||||||
L.DEVINFO .DA DEVINFO
|
L.DEVINFO .DA DEVINFO
|
||||||
.DA 0 end or relocation
|
.DA 0 end or relocation
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OPEN
|
OPEN ldx DEVSLOTn0
|
||||||
* 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
|
|
||||||
|
|
||||||
php
|
php
|
||||||
sei
|
sei
|
||||||
|
stz SSC.REG.RESET,x
|
||||||
|
|
||||||
|
lda #$1E
|
||||||
|
sta SSC.REG.CTL,x
|
||||||
|
|
||||||
ldx DEVSLOTn0
|
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
|
sta SSC.REG.CMD,x
|
||||||
|
|
||||||
lda SSC.REG.STATUS,x clear any IRQ pending
|
lda SSC.REG.STATUS,x clear any IRQ pending
|
||||||
|
bmi *
|
||||||
plp
|
plp
|
||||||
|
clc
|
||||||
.8 clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT php
|
GETEVENT ldx DEVSLOTn0
|
||||||
sei
|
lda SSC.REG.STATUS,x
|
||||||
lda INBUF.CNT
|
bmi *
|
||||||
beq .9
|
|
||||||
|
and #SSC.REG.STATUS.RDRF incoming char?
|
||||||
|
beq .9
|
||||||
|
|
||||||
ldx INBUF.PTR
|
lda SSC.REG.DATA,x
|
||||||
lda INBUF,x
|
|
||||||
ldy #S.EVT.DATA
|
ldy #S.EVT.DATA
|
||||||
sta (pEvent),y
|
sta (pEvent),y
|
||||||
|
|
||||||
|
@ -181,134 +179,50 @@ GETEVENT php
|
||||||
lda #S.EVT.F.KEY
|
lda #S.EVT.F.KEY
|
||||||
sta (pEvent)
|
sta (pEvent)
|
||||||
|
|
||||||
inx
|
|
||||||
cpx #BUF.SIZE
|
|
||||||
bne .1
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 stx INBUF.PTR
|
|
||||||
dec INBUF.CNT
|
|
||||||
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 plp
|
.9 lda #0
|
||||||
lda #0
|
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT php
|
COUT pha
|
||||||
sei
|
|
||||||
|
|
||||||
ldx DEVSLOTn0
|
ldx DEVSLOTn0
|
||||||
lda SSC.REG.STATUS,x
|
.1 lda SSC.REG.STATUS,x
|
||||||
|
bmi *
|
||||||
and #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
|
and #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
ldx OUTBUF.CNT
|
and #SSC.REG.STATUS.TDRE Outgoing char?
|
||||||
cpx #BUF.SIZE
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
>PULLA
|
|
||||||
ldx OUTBUF.PTR
|
|
||||||
sta OUTBUF,x
|
|
||||||
inx
|
|
||||||
cpx #BUF.SIZE
|
|
||||||
bne .1
|
bne .1
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 stx OUTBUF.PTR
|
pla
|
||||||
inc OUTBUF.CNT
|
sta SSC.REG.DATA,x
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 >PULLA
|
.9 pla
|
||||||
plp
|
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE clc
|
CLOSE php
|
||||||
|
sei
|
||||||
|
ldx DEVSLOTn0
|
||||||
|
stz SSC.REG.RESET,x
|
||||||
|
plp
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETINFO >LDYA L.DEVINFO
|
GETINFO >LDYA L.DEVINFO
|
||||||
clc
|
IRQ clc
|
||||||
rts
|
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
|
DRV.CS.END
|
||||||
DEVSLOT0n .BS 1
|
DEVSLOT0n .BS 1
|
||||||
DEVSLOTCn .BS 1
|
DEVSLOTCn .BS 1
|
||||||
DEVSLOTn0 .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
|
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
|
||||||
.DA #0
|
.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
|
:1 bit $C000
|
||||||
bpl :1
|
bpl :1
|
||||||
sta $C010
|
sta $C010
|
||||||
:2 .EM
|
:2 .EQ *
|
||||||
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* SYSCALLs Macros
|
* SYSCALLs Macros
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -182,7 +182,7 @@ PRINTFB ldx #8
|
||||||
>PULLA
|
>PULLA
|
||||||
.1 asl
|
.1 asl
|
||||||
pha
|
pha
|
||||||
lda #$B0
|
lda #'0'
|
||||||
bcc .2
|
bcc .2
|
||||||
inc
|
inc
|
||||||
.2 jsr COUT
|
.2 jsr COUT
|
||||||
|
@ -351,9 +351,9 @@ UCASEP phx
|
||||||
beq .9
|
beq .9
|
||||||
.1 iny
|
.1 iny
|
||||||
lda (ZPTmpPtr2),y
|
lda (ZPTmpPtr2),y
|
||||||
cmp #$61 "a"
|
cmp #'a'
|
||||||
bmi .2
|
bmi .2
|
||||||
cmp #$7B "z"+1
|
cmp #'z'+1
|
||||||
bpl .2
|
bpl .2
|
||||||
sec
|
sec
|
||||||
sbc #$20
|
sbc #$20
|
||||||
|
@ -371,9 +371,9 @@ LCASEP phx
|
||||||
beq .9
|
beq .9
|
||||||
.1 iny
|
.1 iny
|
||||||
lda (ZPTmpPtr2),y
|
lda (ZPTmpPtr2),y
|
||||||
cmp #$41 "A"
|
cmp #'A'
|
||||||
bmi .2
|
bmi .2
|
||||||
cmp #$5B "Z"+1
|
cmp #'Z'+1
|
||||||
bpl .2
|
bpl .2
|
||||||
clc
|
clc
|
||||||
adc #$20
|
adc #$20
|
||||||
|
@ -628,7 +628,7 @@ HEX2DEC phx
|
||||||
.4 lda BCDBUF,y
|
.4 lda BCDBUF,y
|
||||||
pha
|
pha
|
||||||
and #$0F
|
and #$0F
|
||||||
ora #$B0
|
ora #$30
|
||||||
sta ASCBUF,x
|
sta ASCBUF,x
|
||||||
dex
|
dex
|
||||||
pla
|
pla
|
||||||
|
@ -636,7 +636,7 @@ HEX2DEC phx
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
ora #$B0
|
ora #$30
|
||||||
sta ASCBUF,x
|
sta ASCBUF,x
|
||||||
iny
|
iny
|
||||||
dex
|
dex
|
||||||
|
@ -648,10 +648,10 @@ HEX2DEC phx
|
||||||
sbc PADLEN
|
sbc PADLEN
|
||||||
.5 tax x=0 if no padlen, or x=10-padlen
|
.5 tax x=0 if no padlen, or x=10-padlen
|
||||||
.6 lda ASCBUF,x
|
.6 lda ASCBUF,x
|
||||||
cmp #$B0 a zero?
|
cmp #'0' a zero?
|
||||||
beq .7
|
beq .7
|
||||||
inc PADLEN found a non zero, print all digits, even if 0, next time
|
inc PADLEN found a non zero, print all digits, even if 0, next time
|
||||||
ldy #"0"
|
ldy #'0'
|
||||||
sty PADCHAR
|
sty PADCHAR
|
||||||
bra .8
|
bra .8
|
||||||
.7 cpx #9 last digit ?
|
.7 cpx #9 last digit ?
|
||||||
|
@ -737,15 +737,15 @@ PRBYTE pha
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
ora #$B0
|
ora #$30
|
||||||
cmp #$BA
|
cmp #'9'+1
|
||||||
bcc .1
|
bcc .1
|
||||||
adc #6
|
adc #6
|
||||||
.1 jsr COUT
|
.1 jsr COUT
|
||||||
pla
|
pla
|
||||||
PRHEX and #$0F
|
PRHEX and #$0F
|
||||||
ora #$B0
|
ora #$30
|
||||||
cmp #$BA
|
cmp #'9'+1
|
||||||
bcc COUT
|
bcc COUT
|
||||||
adc #6
|
adc #6
|
||||||
bra COUT
|
bra COUT
|
||||||
|
@ -754,11 +754,18 @@ CROUT lda #13
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT phx
|
COUT phx
|
||||||
phy
|
phy
|
||||||
|
cmp #13
|
||||||
|
bne .1
|
||||||
ldx #DEVMGR.COUT
|
ldx #DEVMGR.COUT
|
||||||
|
jsr pDevJmp
|
||||||
|
bcs .9
|
||||||
|
lda #10
|
||||||
|
|
||||||
|
.1 ldx #DEVMGR.COUT
|
||||||
jsr pDevJmp
|
jsr pDevJmp
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
PRINTFTBL1 .AS "abBdDLnNhHiIsStT"
|
PRINTFTBL1 .AS "abBdDLnNhHiIsStT"
|
||||||
|
|
|
@ -184,13 +184,8 @@ INPUT.CHARIN tax saver char...
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
INPUT.LINEIN ldy #INPUT.STATUS
|
INPUT.LINEIN ldy #INPUT.STATUS
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
asl CS is a line is in the buffer
|
asl CS if a line is in the buffer
|
||||||
rts
|
rts
|
||||||
ldy #INPUT.BUFFER
|
|
||||||
lda (pData),y get Line Length
|
|
||||||
bne .9 if 0, empty line
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
MSG.LOGIN >PSTRING "login:"
|
MSG.LOGIN >PSTRING "login:"
|
||||||
|
|
|
@ -102,7 +102,8 @@ CS.RUN lda #0
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
jsr PrintPrompt
|
jsr PrintPrompt
|
||||||
|
bcs .99
|
||||||
|
|
||||||
.1 >SYSCALL SYS.Sleep
|
.1 >SYSCALL SYS.Sleep
|
||||||
lda (pData)
|
lda (pData)
|
||||||
bpl .1
|
bpl .1
|
||||||
|
@ -311,11 +312,12 @@ CS.QUIT jsr History.Quit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintPrompt lda #"$"
|
PrintPrompt lda #'$'
|
||||||
>SYSCALL SYS.COutA
|
>SYSCALL SYS.COutA
|
||||||
lda #" "
|
bcs .9
|
||||||
|
lda #' '
|
||||||
>SYSCALL SYS.COutA
|
>SYSCALL SYS.COutA
|
||||||
rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintError pha
|
PrintError pha
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
|
|
@ -96,7 +96,13 @@ S.HexOutA pha
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.COutA phx
|
S.COutA phx
|
||||||
phy
|
phy
|
||||||
|
cmp #13
|
||||||
|
bne .1
|
||||||
ldx #DEVMGR.COUT
|
ldx #DEVMGR.COUT
|
||||||
|
jsr pDevJmp
|
||||||
|
bcs S.COutA.RTS
|
||||||
|
lda #10
|
||||||
|
.1 ldx #DEVMGR.COUT
|
||||||
jsr pDevJmp
|
jsr pDevJmp
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
|
|
|
@ -219,10 +219,13 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
||||||
lda DevMgr.LastDevID
|
lda DevMgr.LastDevID
|
||||||
jsr S.GetDevByIDA
|
jsr S.GetDevByIDA
|
||||||
>STYA pDev
|
>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
|
sta (pDev),y
|
||||||
dey
|
dey
|
||||||
bpl .1
|
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
|
S.MLIGetTime >MLICALL MLIGETTIME
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIAllocIRQ >PULLB MLICALL.PARAMS+1
|
S.MLIAllocIRQ >PULLW MLICALL.PARAMS+2
|
||||||
>PULLW MLICALL.PARAMS+2
|
|
||||||
>MLICALL MLIALLOCIRQ
|
>MLICALL MLIALLOCIRQ
|
||||||
rts
|
bcs .9
|
||||||
|
lda MLICALL.PARAMS+1
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIDeallocIRQA
|
S.MLIDeallocIRQA
|
||||||
sta MLICALL.PARAMS+1
|
sta MLICALL.PARAMS+1
|
||||||
|
|
|
@ -190,6 +190,8 @@ Kernel.Init sei
|
||||||
stz A2osX.SCREENS
|
stz A2osX.SCREENS
|
||||||
stz A2osX.ASCREEN
|
stz A2osX.ASCREEN
|
||||||
|
|
||||||
|
jsr S.IrqMgrInit
|
||||||
|
bcs *
|
||||||
jsr S.MemMgrInit
|
jsr S.MemMgrInit
|
||||||
bcs *
|
bcs *
|
||||||
jsr S.DevMgrInit
|
jsr S.DevMgrInit
|
||||||
|
@ -370,6 +372,7 @@ ENV.LIB.VALUE >PSTRING "${A2OSX}LIB/"
|
||||||
ENV.DRV >PSTRING "DRV"
|
ENV.DRV >PSTRING "DRV"
|
||||||
ENV.DRV.VALUE >PSTRING "${A2OSX}DRV/"
|
ENV.DRV.VALUE >PSTRING "${A2OSX}DRV/"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
.INB SYS/KERNEL.S.IRQ
|
||||||
.INB SYS/KERNEL.S.MEM
|
.INB SYS/KERNEL.S.MEM
|
||||||
.INB SYS/KERNEL.S.STR
|
.INB SYS/KERNEL.S.STR
|
||||||
.INB SYS/KERNEL.S.CIO
|
.INB SYS/KERNEL.S.CIO
|
||||||
|
|
Loading…
Reference in New Issue
Block a user