KERNEL:IRQ mode for IIgs (not yet preemptive)

CC:most of it working, many bugs remain
DAN2ETH.DRV:broken, lot of debug code included
This commit is contained in:
burniouf 2023-01-11 19:34:34 +01:00
parent 0ac5def14f
commit 1e404b5bcf
14 changed files with 477 additions and 309 deletions

Binary file not shown.

View File

@ -6,18 +6,22 @@ CODE.Init stz ZPCCConst
>STZ.G CC.bInitCode
>STA.G CC.ScopeID
iny
sta (pData),y
>LDYAI PCC.FH.CS
>STYA ZPCCCode
>LDYAI 20 char *ARGV[10]
>STYA ZPCCData
>STZ.G CC.ScopeID
iny
sta (pData),y
lda #'_'
>STA.G CC.Label
ldy #SCOPE-1
lda #0
.1 sta (ScopeStk),y reset initial Scope ID, LocalPtr, FrameSize
dey
bpl .1
clc
.99 rts

View File

@ -34,7 +34,7 @@ CORE.Init lda #SL._
>STYA ScopeStk
txa
>STA.G CC.hScopeStk
>LDYAI 256
>SYSCALL GetMem
bcs .9
@ -43,6 +43,9 @@ CORE.Init lda #SL._
txa
>STA.G CC.hStmtStk
lda #'_'
>STA.G CC.Label
lda #CC.LookupIdx
tay
sta (pData),y

View File

@ -3,7 +3,7 @@ NEW
*--------------------------------------
F.Decl jsr SCOPE.New
bcs .99
lda (ZPSymBufPtr) #SYM.T
pha
@ -18,7 +18,8 @@ F.Decl jsr SCOPE.New
tax
beq .11 function is void
.10 jsr F.AddReturnVar Y,A = T/Q
.10 lda #'R'
jsr SYM.NewLabelA
bcs .99
.11 jsr CORE.GetNCharNBNL Skip (
@ -117,7 +118,12 @@ F.Def >LDA.G CC.bInitCode
.2 >LDA.G CC.FrameSize
.2 ldy ScopePtr
iny
iny
iny
lda (ScopeStk),y #SCOPE.FrameSize
jsr CODE.LDAI A = f() ARGS size
bcs .99
@ -199,28 +205,6 @@ F.DeclGetTQ lda (ZPLineBufPtr)
sec
rts
*--------------------------------------
F.AddReturnVar ldx ZPLineBufPtr
phx
ldx ZPLineBufPtr+1
phx
>STYA ZPPtr2 Y,A = T/Q
lda #'R'
>STA.G CC.Label+1
>LEA.G CC.Label
>STYA ZPLineBufPtr
jsr F.NewArg
plx
stx ZPLineBufPtr+1
plx
stx ZPLineBufPtr
rts
*--------------------------------------
F.NewArg >LDYA.G CC.SymID
>STYA.G CC.SymIDSave

View File

@ -36,7 +36,7 @@ KW.IF jsr SCOPE.New
jsr STMT.New00
bcs .99
jmp STMT.SetType
.9 lda #E.CSYN
@ -73,7 +73,7 @@ KW.IF.END jsr STMT.Close
jsr STMT.New00
bcs .99
jmp STMT.SetType
.9 lda #E.CSYN
@ -85,7 +85,7 @@ KW.ELSE lda #E.CSYN illegal
rts
*--------------------------------------
KW.ELSE.END jsr STMT.Close
bcs .99
bcs .99
lda #'X' define EXIT Label
jsr SYM.NewLabelA
@ -620,42 +620,19 @@ KW.CONTINUE lda #'C'
sec
.99 rts
*--------------------------------------
KW.RETURN ldx ZPLineBufPtr
phx
ldx ZPLineBufPtr+1
phx
lda #'R'
>STA.G CC.Label+1
>LEA.G CC.Label
>STYA ZPLineBufPtr
jsr SYM.Lookup
plx
stx ZPLineBufPtr+1
plx
stx ZPLineBufPtr
KW.RETURN lda #'R'
jsr SYM.LookupLabelA
bcs .99
ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr) SYM.T
tay
pla
txa
jsr EXP.Eval
bcs .99
jsr SYM.GetYASizeOfInAX Y,A=T/Q
tax X = sizeof
jsr CODE.SetRetValue
bcs .99
jsr SYM.LookupFree
jsr CODE.SetRetValue
bcs .99
lda #'X'

View File

@ -138,14 +138,14 @@ PCC.FH.RUN lda #0
>PUSHA returned int=0
>PUSHA
>PUSHA int ARGC (hi byte)
>PUSHA int ARGC (hi byte=0)
ldy #S.PS.ARGC
lda (pPS),y
>PUSHA int ARGC (lo byte)
>PUSHW pData *char[] ARGV
>DEBUG
* >DEBUG
PCC.FH.MAIN .EQ *-PCC.FH.ORG+1
jsr $FFFF jsr main
>PULLA

View File

@ -1,27 +1,46 @@
NEW
AUTO 3,1
*--------------------------------------
SCOPE.New >INCW.G CC.ScopeID
lda ScopePtr
SCOPE.New lda ScopePtr
tay
clc
adc #SCOPE
bcs .9
sta ScopePtr
ldy #CC.ScopeID+3
.1 lda (pData),y
pha
dey
bpl .1
dec bLocalScope
iny
iny #SCOPE.LocalPtr
lda (ScopeStk),y
pha
>LDA.G CC.ScopeID
* clc
adc #1
sta (pData),y
tax
iny
lda (pData),y
adc #0
ldy ScopePtr
iny
sta (ScopeStk),y #SCOPE.ID Hi
txa
dey
sta (ScopeStk),y #SCOPE.ID Lo
iny
iny
pla
sta (ScopeStk),y #SCOPE.LocalPtr
iny
lda #0
sta (ScopeStk),y #SCOPE.FrameSize
lda #'F'
jsr SYM.LookupLabelA
bcs .99
@ -32,19 +51,22 @@ SCOPE.New >INCW.G CC.ScopeID
bcs .99
.DO _DBG_SCOPE=1
>PUSHW L.MSG.DEBUG.SCIN
jsr SCOPE.Push
lda ScopePtr
lsr
lsr
>PUSHA
>PUSHB.G CC.LocalPtr
>PUSHB.G CC.FrameSize
>PUSHBI 5
>SYSCALL PrintF
>DEBUG
>PUSHW L.MSG.DEBUG.SCIN
jsr SCOPE.Push
lda ScopePtr
>PUSHA
tay
iny
iny
>PUSHB (ScopeStk),y
iny
>PUSHB (ScopeStk),y
>PUSHBI 5
>SYSCALL PrintF
* >DEBUG
.FIN
clc
@ -59,7 +81,12 @@ SCOPE.Close lda #'F' define FRAME SIZE
jsr SYM.NewLabelA
bcs SCOPE.New.RTS
>LDA.G CC.FrameSize
ldy ScopePtr
iny
iny
iny
lda (ScopeStk),y #SCOPE.FrameSize
jsr CODE.RemLocal
bcs SCOPE.New.RTS
@ -67,12 +94,15 @@ SCOPE.Close lda #'F' define FRAME SIZE
>PUSHW L.MSG.DEBUG.SCOUT
jsr SCOPE.Push
lda ScopePtr
lsr
lsr
>PUSHA
>PUSHB.G CC.LocalPtr
>PUSHB.G CC.FrameSize
tay
iny
iny
>PUSHB (ScopeStk),y #SCOPE.LocalPtr
iny
>PUSHB (ScopeStk),y #SCOPE.FrameSize
>PUSHBI 5
>SYSCALL PrintF
.FIN
@ -91,24 +121,29 @@ SCOPE.Close lda #'F' define FRAME SIZE
jsr SCOPE.Push
lda ScopePtr
lsr
lsr
>PUSHA
>PUSHB.G CC.LocalPtr
>PUSHB.G CC.FrameSize
tay
iny
iny
>PUSHB (ScopeStk),y
iny
>PUSHB (ScopeStk),y
>PUSHBI 5
>SYSCALL PrintF
>DEBUG
* >DEBUG
.FIN
clc
.99 rts
*--------------------------------------
SCOPE.Push ldy ScopePtr
SCOPE.Push lda ScopePtr
SCOPE.PushY iny #SCOPE.ID+1
SCOPE.PushA clc
adc #SCOPE.ID+1
tay
lda (ScopeStk),y
>PUSHA
dey #SCOPE.ID

View File

@ -204,10 +204,13 @@ SYM.SetAddrL ldy #SYM.SizeOf+1
lda (ZPSymBufPtr),y
clc
>ADC.G CC.LocalPtr
ldy ScopePtr
iny
iny
adc (ScopeStk),y
bcs .9
sta (pData),y
sta (ScopeStk),y
ldy #SYM.Addr
sta (ZPSymBufPtr),y
@ -216,8 +219,12 @@ SYM.SetAddrL ldy #SYM.SizeOf+1
lda (ZPSymBufPtr),y
clc
>ADC.G CC.FrameSize
sta (pData),y
ldy ScopePtr
iny
iny
iny
adc (ScopeStk),y
sta (ScopeStk),y
clc
rts
@ -544,21 +551,19 @@ SYM.Lookup >LDA.G CC.LookupIdx
.1 pha
>PUSHB.G CC.hSyms
>PUSHW ZPLineBufPtr
ply
phy
jsr SCOPE.PushY
pla
pha
jsr SCOPE.PushA
>SYSCALL SListLookup
bcc .8
pla
cmp #CC.ScopeIDs
beq .9
dec
dec
* sec
sbc #SCOPE
bra .1
.99 lda #E.OOH
* sec
rts
@ -600,9 +605,10 @@ SYM.Lookup >LDA.G CC.LookupIdx
* "_C"ontinue
* "_D"efault
* "_E"lse
* "_F"rameSize
* "_F"rame Size
* "_J"umpTable
* "_L"oop
* "_R"eturn value
* "_S"statement
* e"_X"it
*--------------------------------------
@ -622,12 +628,6 @@ SYM.NewLabelA bit bPass2
>STYA.G CC.LabelID
lda #SYM.T.VOID
>STA.G CC.LabelBuf
lda #SYM.Q.POINTER
iny
sta (pData),y
ldy #CC.LabelBuf+SYM.DefSize
lda #SYM.Def
sta (pData),y
@ -636,16 +636,22 @@ SYM.NewLabelA bit bPass2
cmp #'F'
bne .1
ldy #CC.LabelBuf+SYM.SC
lda #SYM.SC.AUTO
sta (pData),y
jsr SYM.NewLabelF
bra .7
>LDA.G CC.FrameSize
ldy #CC.LabelBuf+SYM.Addr
sta (pData),y
bra .2
.1 cmp #'R'
bne .6
.1 ldy #CC.LabelBuf+SYM.SC
jsr SYM.NewLabelR
bra .7
.6 lda #SYM.T.VOID
>STA.G CC.LabelBuf
lda #SYM.Q.POINTER
iny
sta (pData),y
iny
lda #SYM.SC.STATIC
sta (pData),y
@ -656,7 +662,7 @@ SYM.NewLabelA bit bPass2
lda ZPCCCode+1
sta (pData),y
.2 .DO _DBG_SYM=1
.7 .DO _DBG_SYM=1
jsr SYM.DEBUGNL
.FIN
@ -675,7 +681,46 @@ SYM.NewLabelA bit bPass2
.FIN
.99 rts
*--------------------------------------
SYM.NewLabelF lda #SYM.T.UCHAR
>STA.G CC.LabelBuf
lda #0
iny
sta (pData),y
iny
lda #SYM.SC.AUTO
sta (pData),y
ldy ScopePtr
iny
iny
iny
lda (ScopeStk),y #SCOPE.FrameSize
ldy #CC.LabelBuf+SYM.Addr
sta (pData),y
rts
*--------------------------------------
SYM.NewLabelR ldy #SYM.Q
lda (ZPSymBufPtr),y
and #$F8 strip off SYM.Q.FUNC...
pha
lda (ZPSymBufPtr)
>STA.G CC.LabelBuf
pla
iny
sta (pData),y
iny
lda #SYM.SC.AUTO
sta (pData),y
rts
*--------------------------------------
SYM.LookupLabelA
cmp #'R'
beq .1
bit bPass2
bmi .1
@ -688,23 +733,22 @@ SYM.LookupLabelA
>PUSHB.G CC.hSyms ...for SListGetData
ldy ScopePtr
lda ScopePtr
.2 phy
.2 pha
>PUSHB.G CC.hSyms
>PUSHEA.G CC.Label
ply
phy
jsr SCOPE.PushY
pla
pha
jsr SCOPE.PushA
>SYSCALL SListLookup
bcc .8
bcc .3
ply
cpy #CC.ScopeIDs
pla
beq .9
dey
dey
* sec
sbc #SCOPE
bra .2
.9 inc pStack discard CC.hSyms
@ -713,7 +757,7 @@ SYM.LookupLabelA
sec
rts
.8 plx
.3 plx
>PUSHA KeyID.HI
tya
@ -733,8 +777,14 @@ SYM.LookupLabelA
plx
>LDA.G CC.Label+1
ldy #SYM.T return T/Q
cmp #'R'
beq .4
ldy #SYM.Addr
lda (ZPLookupPtr),y
.4 lda (ZPLookupPtr),y
pha
@ -773,7 +823,7 @@ SYM.LookupFree >LDA.G CC.LookupIdx
.8 clc
rts
.9 lda E.INVH
.9 lda #E.INVH
* sec
.99 rts
@ -962,7 +1012,6 @@ SYM.DEBUGN >PUSHW L.MSG.DEBUG.SYMN
>PUSHA
>PUSHBI 7
>SYSCALL Printf
* >DEBUG
rts
SYM.DEBUGU >PUSHW L.MSG.DEBUG.SYMU
@ -975,7 +1024,15 @@ SYM.DEBUGU >PUSHW L.MSG.DEBUG.SYMU
iny
lda (ZPSymBufPtr),y
>PUSHA
>PUSHBI 5
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
>PUSHA
dey
lda (ZPSymBufPtr),y
>PUSHA
>PUSHBI 7
>SYSCALL Printf
rts
@ -989,8 +1046,17 @@ SYM.DEBUGS >PUSHW L.MSG.DEBUG.SYMS
iny
lda (ZPSymBufPtr),y
>PUSHA
>PUSHBI 5
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
>PUSHA
dey
lda (ZPSymBufPtr),y
>PUSHA
>PUSHBI 7
>SYSCALL Printf
>DEBUG
rts
SYM.DEBUGG >PUSHW L.MSG.DEBUG.SYMG

View File

@ -11,7 +11,7 @@ NEW
.INB inc/mli.e.i
*--------------------------------------
_DBG_SYM .EQ 0
_DBG_SCOPE .EQ 1
_DBG_SCOPE .EQ 0
_DBG_OUT .EQ 0
*--------------------------------------
FILES.MAX .EQ 4
@ -539,20 +539,22 @@ CS.QUIT jsr CODE.Quit
*--------------------------------------
PrintVerboseMsg
.DO _DBG_SCOPE=1
>PUSHW L.MSG.DEBUG.SC
jsr SCOPE.Push
lda ScopePtr
sec
sbc #CC.ScopeIDs
lsr
>PUSHA
>PUSHB.G CC.LocalPtr
>PUSHB.G CC.FrameSize
>PUSHBI 5
>SYSCALL PrintF
* >DEBUG
>PUSHW L.MSG.DEBUG.SC
jsr SCOPE.Push
lda ScopePtr
>PUSHA
tay
iny
iny
>PUSHB (ScopeStk),y
iny
>PUSHB (ScopeStk),y
>PUSHBI 5
>SYSCALL PrintF
* >DEBUG
.FIN
ldy #S.PS.hStdOut
@ -661,8 +663,8 @@ MSG.LINKING2 .CZ "*** %H:%H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n"
MSG.GENERATING .CZ "*** Generating: %s\r\n"
.DO _DBG_SYM=1
MSG.DEBUG.SYMN .CZ "New SymID=%H[%H],T=%h,Q=%h,SC=%h "
MSG.DEBUG.SYMU .CZ "Upd SymID=%H,T=%h,Q=%h,SC=%h\r\n"
MSG.DEBUG.SYMS .CZ "Sto SymID=%H,T=%h,Q=%h,SC=%h\r\n"
MSG.DEBUG.SYMU .CZ "Upd SymID=%H,T=%h,Q=%h,SC=%h,@=%H\r\n"
MSG.DEBUG.SYMS .CZ "Sto SymID=%H,T=%h,Q=%h,SC=%h,@=%H\r\n"
MSG.DEBUG.SYMG .CZ "Get SymID=%H,T=%h,Q=%h,SC=%h\r\n"
MSG.DEBUG.SYMNL .CZ "New (%s) ID=%H[%H],T=%h,Q=%h,SC=%h "
MSG.DEBUG.SYMSL .CZ "Sto ID=%H,T=%h,Q=%h,SC=%h\r\n"
@ -1142,8 +1144,6 @@ CC.hStmtStk .BS 1
CC.hSyms .BS 1
CC.ScopeID .BS 2
CC.LocalPtr .BS 1
CC.FrameSize .BS 1
CC.bInitCode .BS 1
*--------------------------------------

View File

@ -28,18 +28,18 @@ IO.8255.S.ByteRcvd .EQ %00100000
IO.8255.Mode .EQ $C083-$88
*--------------------------------------
.MA READBYTE
lda #IO.8255.S.ByteRcvd
:1 bit IO.8255.S,x
bne :1
:1 inc $600+37
lda IO.8255.S,x
and #IO.8255.S.ByteRcvd
beq :1
lda IO.8255.Data,x
.EM
.MA WRITEBYTE
sta IO.8255.Data,x
* lda #IO.8255.S.ByteSent
:1 bit IO.8255.S,x
:1 inc $600+38
bit IO.8255.S,x
bpl :1
.EM
*--------------------------------------
.DUMMY
@ -100,18 +100,14 @@ Dev.Detect >STYA ZPArgPtr
lda ZPPtr1+1
and #$0F
tay
sta DEVSLOT0x
asl
asl
asl
asl
ora #$88
tax
lda #$fa
sta IO.8255.Mode,x
cmp IO.8255.Mode,x
beq .3
sta DEVSLOTx0
bra .3
.2 dec FD.DEV.NAME+3
lda ZPPtr1+1
@ -125,14 +121,8 @@ Dev.Detect >STYA ZPArgPtr
lda #MLI.E.NODEV
sec
.99 rts
.3 stx DEVSLOTx0
sty DEVSLOT0x
*--------------------------------------
.3
* sta DIB+S.DIB.VERSION+1
* sta DIB+S.DIB.VERSION
@ -216,6 +206,8 @@ FD.DEV.NAME .AZ "eth7"
*--------------------------------------
* Driver Code
*--------------------------------------
* https://github.com/profdc9/ip65/blob/main/drivers/dan2d.s
*--------------------------------------
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
Counter .EQ ZPDRV+4
@ -310,7 +302,6 @@ OPEN lda #S.DIB.S.OPENED
lda #$FA
sta IO.8255.Mode,x
lda #IO.8255.Cmd.PFX
>WRITEBYTE
lda #IO.8255.Cmd.INIT
@ -318,7 +309,7 @@ OPEN lda #S.DIB.S.OPENED
ldy #0
.1 lda DCB+S.DCB.NIC.MAC+0,y
.1 lda DCB+S.DCB.NIC.MAC,y
>WRITEBYTE
iny
@ -327,6 +318,10 @@ OPEN lda #S.DIB.S.OPENED
>READBYTE
beq .8
lda #"!
sta $600+30
lda #MLI.E.IO
sec
@ -334,6 +329,10 @@ OPEN lda #S.DIB.S.OPENED
.8 lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
lda #"O
sta $600+30
clc
rts
@ -358,24 +357,31 @@ READ php
>STYA ZPIOCTL
jsr DEBUG.ClrR
ldx DEVSLOTx0
lda #IO.8255.Cmd.PFX
>WRITEBYTE
lda #IO.8255.Cmd.POLL
>WRITEBYTE
lda #2048
lda #1514
>WRITEBYTE
lda /2048
lda /1514
>WRITEBYTE
lda #"R
sta $600+32
>READBYTE
ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
pha
eor #$ff
sta Counter
>READBYTE
iny
sta (ZPIOCTL),y
pha
eor #$ff
@ -399,8 +405,12 @@ READ php
dey
pla
sta (ZPIOCTL),y
ldx DEVSLOTx0
lda #"R
sta $600+33
ldy #0
.2 inc Counter
@ -433,11 +443,13 @@ WRITE php
sei
>STYA ZPIOCTL
jsr DEBUG.ClrW
ldx DEVSLOTx0
lda #IO.8255.Cmd.PFX
>WRITEBYTE
lda #IO.8255.Cmd.POLL
lda #IO.8255.Cmd.SEND
>WRITEBYTE
ldy #S.IOCTL.BYTECNT
lda (ZPIOCTL),y
@ -471,14 +483,40 @@ WRITE php
bne .1
inc ZPBufPtr+1
bne .1
bra .1
.8 >READBYTE
bne READWRITE.9
.8
lda #"W
sta $600+35
>READBYTE
bne WRITE.99
lda #"W
sta $600+36
plp
clc
rts
WRITE.99 lda #MLI.E.IO
plp
sec
rts
*--------------------------------------
DEBUG.ClrR lda #"R
sta $600+31
lda #"?
sta $600+32
sta $600+33
rts
*--------------------------------------
DEBUG.ClrW lda #"W
sta $600+34
lda #"?
sta $600+35
sta $600+36
rts
*--------------------------------------
DRV.CS.END
DEVSLOTx0 .BS 1

View File

@ -198,10 +198,14 @@ STATUS >STYA ZPIOCTL
ldy #S.IOCTL.S
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.S.GETDIB
bne STATUS.DCB
ldx #S.DIB-1
.HS 2C bit abs
.HS 2C BIT ABS
.1 ldx #3
ldy #S.IOCTL.BUFPTR
@ -231,6 +235,7 @@ STATUS.DCB cmp #S.IOCTL.S.GETDCB
lda PacketPageDATA,x
and #PP.LineST.LinkOK
beq .1
lda #S.DCB.NIC.LINK.OK
tsb DCB+S.DCB.NIC.LINK
@ -242,8 +247,10 @@ STATUS.DCB cmp #S.IOCTL.S.GETDCB
ldy PacketPageDATA,x
and /PP.TestCTL.FDX
beq .1
lda #S.DCB.NIC.LINK.FD
tsb DCB+S.DCB.NIC.LINK
.1 ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta .3+1
@ -251,13 +258,16 @@ STATUS.DCB cmp #S.IOCTL.S.GETDCB
lda (ZPIOCTL),y
sta .3+2
ldx #S.DCB.NIC-1
.2 lda DCB,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts

View File

@ -5,6 +5,23 @@ NEW
IO.IIGS.INTEN .EQ $C041 R,W
IO.IIGS.INTFLAG .EQ $C046 R
IO.IIGS.CLRVBLINT .EQ $C047 W
*--------------------------------------
.MA TKCALL
ldx ##TK.]1
jsl $E10000
.EM
*--------------------------------------
TK.SetHeartBeat .EQ $1203
* TK.DelHeartBeat .EQ $1303
* TK.ClrHeartBeat .EQ $1403
TK.GetVector .EQ $1103
TK.SetVector .EQ $1003
* $000C Vertical blanking interrupt handler
TK.IntSource .EQ $2303
* $0002 vblEnable Enable vertical blanking interrupts
* $0003 vb1Disable Disable vertical blanking interrupts
*--------------------------------------
MAN
SAVE INC/IO.IIGS.I
SAVE inc/io.iigs.i

View File

@ -133,7 +133,7 @@ CORE.Events jsr CORE.GetEvents
*--------------------------------------
CORE.Quit php
sei
jsr CORE.IRQ.Off
jsr CORE.IRQOff
plp
@ -488,19 +488,38 @@ CORE.LastPSID .DA #0
CORE.EvtIndex .BS 1
CORE.EvtCount .BS 1
*--------------------------------------
* Called by IIgs formware, Native Mode, 8bits
*--------------------------------------
CORE.IRQGS .OP 65816
pha
phb
phx
phy
phk
plb
stz IO.IIGS.CLRVBLINT
jsr CORE.IRQ.Switch
ply
plx
plb
pla
* clc
rtl
* bra CORE.IRQ.Switch
.OP 65C02
*--------------------------------------
* Called by :
* - Kernel IRQ Manager (AuxLC)
* - ProDOS IRQ Manager (GP)
*--------------------------------------
CORE.IRQ.IIGS lda IO.IIGS.INTFLAG
and #$08
beq CORE.IRQ.DEV
stz IO.IIGS.CLRVBLINT
bra CORE.IRQ.Switch
*--------------------------------------
CORE.IRQ.TCLOCK ldy IRQ.n0
CORE.IRQTK ldy IRQ.n0
lda $c080,y
and #$20
@ -511,7 +530,7 @@ CORE.IRQ.TCLOCK ldy IRQ.n0
bra CORE.IRQ.Switch
*--------------------------------------
CORE.IRQ.MOUSE jsr $FFFF SELF MODIFIED,SERVEMOUSE
CORE.IRQM jsr $FFFF SELF MODIFIED,SERVEMOUSE
bcs CORE.IRQ.DEV Not From Mouse
ldx IRQ.0n
@ -519,11 +538,10 @@ CORE.IRQ.MOUSE jsr $FFFF SELF MODIFIED,SERVEMOUSE
and #MOUSESTSx.INTVBL IRQ was caused by VBL ?
beq CORE.IRQ.DEV
ldx CORE.IRQ.MOUSE.2+2 $Cn
ldx CORE.IRQM.2+2 $Cn
ldy IRQ.n0
CORE.IRQ.MOUSE.2
jsr $FFFF SELF MODIFIED,READMOUSE
CORE.IRQM.2 jsr $FFFF SELF MODIFIED,READMOUSE
*--------------------------------------
CORE.IRQ.Switch inc IRQ.Tick
@ -592,41 +610,55 @@ CORE.IRQ.DEV ldx #0
.8 clv clear V (no task switching)
rts
*--------------------------------------
CORE.IRQ.IIGS.Off
lda #$08
trb IO.IIGS.INTEN
CORE.IRQGSOff .OP 65816
clc
xce go to native mode
rep #$30 long M,X
pea $0003 Disable vertical blanking interrupts
>TKCALL IntSource
bcs *
pea $000C Vertical blanking interrupt handler
lda IRQ.GSVect+2
pha
lda IRQ.GSVect
pha
>TKCALL SetVector
bcs *
sep #$30 short M,X
sec
xce back to emulation mode
.OP 65C02
rts
*--------------------------------------
CORE.IRQ.TCLOCK.Off
ldx IRQ.n0
CORE.IRQTKOff ldx IRQ.n0
stz $c080,x
lda $c088,x
lda $c080,x
ldx IRQ.0n
* sta SETPAGE2
* stz $478,x
* stz $7f8,x
* sta CLRPAGE2
stz $478,x
stz $7f8,x
*--------------------------------------
CORE.IRQ.Off rts
CORE.IRQOff rts
*--------------------------------------
CORE.IRQ.MOUSE.Off
ldy CORE.IRQ.MOUSE.Off.1+2 Cn
CORE.IRQMOff ldy CORE.IRQMOff.1+2 Cn
ldy IRQ.n0
lda #0
CORE.IRQ.MOUSE.Off.1
jmp $ffff SELF MODIFIED
CORE.IRQMOff.1 jmp $ffff SELF MODIFIED
*--------------------------------------
IRQ.InKernel .BS 1
IRQ.InLib .BS 1
IRQ.Skip .BS 1
IRQ.GSVect .BS 4
IRQ.IntNum .BS 1
IRQ.n0 .BS 1
IRQ.0n .BS 1

View File

@ -376,11 +376,11 @@ SysScrInit.TTYPtrs
ldy #S.DCB.TTY-1
lda #0
.1 sta (ZPPtr1),y
dey
bne .1
lda FD.TTY+S.FD.DEV.DEVID
sta (ZPPtr1)
@ -551,7 +551,7 @@ CPU.Init2c lda RDIOUDIS
bpl .8
sta IO.IIC.DISVBL
.8 pla
bpl CPU.InitOk
@ -802,7 +802,7 @@ DevMgrInit.VXD >LDYAI VSD.PATCH
jsr .10
bcc .8
>LDYAI VED.PATCH
jsr .10
bcs .9
@ -812,7 +812,7 @@ DevMgrInit.VXD >LDYAI VSD.PATCH
sec
sbc #1
sta .81+1
iny
lda (ZPPtr1),y
sbc #0
@ -838,7 +838,7 @@ DevMgrInit.VXD >LDYAI VSD.PATCH
*--------------------------------------
.10 >STYA ZPPtr1
ldy #VXD.PATCH.SIZE-1
ldy #9 10 bytes
.11 lda $BF41,y
cmp (ZPPtr1),y
@ -846,12 +846,12 @@ DevMgrInit.VXD >LDYAI VSD.PATCH
dey
bpl .11
clc
rts
.19 sec
rts
rts
*--------------------------------------
VSD.PATCH bit RRAMWRAMBNK2
jsr $D002
@ -862,7 +862,6 @@ VED.PATCH bit RRAMWRAMBNK2
jsr $D401
bit RRAMWRAMBNK1
rts
VXD.PATCH.SIZE .EQ 10
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
@ -885,30 +884,56 @@ IrqMgrInit >LDYAI MSG.IRQ
lda K.MLI.PARAMS+1
sta IRQ.INTNUM
plp
*--------------------------------------
lda A2osX.HWType
cmp #A2osX.HWType.IIgs
bne .1
lda #"G"
sta IRQ.Mode
.OP 65816
lda #$08
tsb IO.IIGS.INTEN
clc
xce go to native mode
rep #$30 long M,X
jsr IrqMgrInit.HZ2Tick
pea $000C Vertical blanking interrupt handler
pea $0000
pea $0000
>TKCALL GetVector
bcs *
pla
sta IRQ.GSVect+2
pla
sta IRQ.GSVect
pea $000C Vertical blanking interrupt handler
pea $0000
pea CORE.IRQGS
>TKCALL SetVector
bcs *
pea $0002 Enable vertical blanking interrupts
>TKCALL IntSource
bcs *
>LDYAI CORE.IRQ.IIGS
jsr IrqMgrInit.SetV
sep #$30 short M,X
sec
xce back to emulation mode
>LDYAI CORE.IRQ.IIGS.Off
.OP 65C02
jsr IrqMgr.HZ2Tick
>LDYAI CORE.IRQGS
jsr IrqMgr.SetV
>LDYAI CORE.IRQGSOff
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.IIGS
>LDYAI MSG.IRQGS
ldx #"G"
sec
bra .8
bra IrqMgrInit.8
.9 plp
sec
@ -917,25 +942,21 @@ IrqMgrInit >LDYAI MSG.IRQ
.1 cmp #A2osX.HWType.IIc
beq .2
jsr IrqMgrInit.TClock
jsr IrqMgr.TClk
bcs .3
lda #"C"
sta IRQ.Mode
>LDYAI CORE.IRQTK
jsr IrqMgr.SetV
>LDYAI CORE.IRQ.TCLOCK
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.TCLOCK.Off
>LDYAI CORE.IRQTKOff
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.CLOCK
>LDYAI MSG.IRQTK
ldx #"C"
sec
bra .8
bra IrqMgrInit.8
.2 php
sei
sta CLRPAGE2
.2 sta CLRPAGE2
lda #$60
sta $5fa //c EXTINT COM1:Dont buffer but get IRQ
sta $5fb //c EXTINT COM2:Dont buffer but get IRQ
@ -944,43 +965,40 @@ IrqMgrInit >LDYAI MSG.IRQ
stz $4FF //c ROM FF: no ACIABUF
stz $4FC //c ROM 0X: no ACIABUF
plp
.3 jsr IrqMgrInit.Mouse
.3 jsr IrqMgr.Mouse
bcs .7
lda #"V"
sta IRQ.Mode
>LDYAI CORE.IRQM
jsr IrqMgr.SetV
>LDYAI CORE.IRQ.MOUSE
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.MOUSE.Off
>LDYAI CORE.IRQMOff
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.MOUSE
>LDYAI MSG.IRQM
ldx #"V"
sec
bra .8
bra IrqMgrInit.8
.7 jsr IrqMgrInit.HZ2Tick
.7 jsr IrqMgr.HZ2Tick
lda #"P"
sta IRQ.Mode
>LDYAI MSG.IRQ.POLL
ldx #"P"
>LDYAI MSG.IRQP
clc
.8 ror A2osX.IRQMode
IrqMgrInit.8 ror A2osX.IRQMode
stx IRQ.Mode
>SYSCALL2 puts
plp
clc
rts
*--------------------------------------
IrqMgrInit.SetV >STYA IRQ.JSR+1
IrqMgr.SetV >STYA IRQ.JSR+1
>STYA GP.IRQ.JSR+1
rts
*--------------------------------------
IrqMgrInit.TClock
stz ZPPtr1 Try finding a TClock Card...
IrqMgr.TClk stz ZPPtr1 Try finding a TClock Card...
lda #$C1
sta ZPPtr1+1
@ -1016,19 +1034,10 @@ IrqMgrInit.TClock
lda #A2osX.S.CLK
sta A2osX.S,x
php
sei
lda #$40+$20 Enable interrupt + 64Hz
sta $c080,y
lda #$40
* sta SETPAGE2
* sta $478,x
* sta $7f8,x
* sta CLRPAGE2
sta $478,x
sta $7f8,x
@ -1041,12 +1050,10 @@ IrqMgrInit.TClock
sta CORE.Tick10t
dec A2osX.IRQMode
plp
clc
rts
*--------------------------------------
IrqMgrInit.Mouse
stz ZPPtr1 Try finding a Mouse Card...
IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card...
lda #$C1
sta ZPPtr1+1
@ -1056,23 +1063,26 @@ IrqMgrInit.Mouse
lda (ZPPtr1),y
cmp Mouse.SIG,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPPtr1+1 no match, try next slot....
lda ZPPtr1+1
cmp #$C8
bne .1
sec
* sec
rts
.4 lda ZPPtr1+1
sta .11+2
sta CORE.IRQ.MOUSE.Off.1+2
sta CORE.IRQ.MOUSE+2
sta CORE.IRQ.MOUSE.2+2
sta CORE.IRQMOff.1+2
sta CORE.IRQM+2
sta CORE.IRQM.2+2
and #$0f
sta IRQ.0n
asl
@ -1082,15 +1092,13 @@ IrqMgrInit.Mouse
sta IRQ.n0
php
sei
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
ldy #INITMOUSE
jsr .10
ldy #SETMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE.Off.1+1
sta CORE.IRQMOff.1+1
lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
jsr .10
@ -1098,23 +1106,18 @@ IrqMgrInit.Mouse
bit RRAMWRAMBNK1
ldy #SERVEMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE+1
sta CORE.IRQM+1
ldy #READMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE.2+1
sta CORE.IRQM.2+1
jsr IrqMgrInit.HZ2Tick
jsr IrqMgr.HZ2Tick
dec A2osX.IRQMode
plp
clc
rts
.9 plp
sec
rts
.10 pha
lda (ZPPtr1),y
sta .11+1
@ -1124,8 +1127,7 @@ IrqMgrInit.Mouse
.11 jmp $ffff SELF MODIFIED
*--------------------------------------
IrqMgrInit.HZ2Tick
lda A2osX.HZ
IrqMgr.HZ2Tick lda A2osX.HZ
sta CORE.TickPer10t
sta CORE.Tick10t
asl
@ -1308,10 +1310,10 @@ DRV.BLKDEVX .DA DRV.RamDrive
.DA DRV.BlkDev
*--------------------------------------
MSG.IRQ .AZ "Interrupt Manager..."
MSG.IRQ.IIGS .AZ " Apple IIgs VBL IRQ Activated."
MSG.IRQ.MOUSE .AZ " Mouse Card VBL IRQ Activated."
MSG.IRQ.CLOCK .AZ " Clock Card IRQ Activated."
MSG.IRQ.POLL .AZ " Polling Mode."
MSG.IRQGS .AZ " Apple IIgs VBL IRQ Activated."
MSG.IRQM .AZ " Mouse Card VBL IRQ Activated."
MSG.IRQTK .AZ " Clock Card IRQ Activated."
MSG.IRQP .AZ " Polling Mode."
MSG.EVT .AZ "Event Manager..."
MSG.TSK .AZ "Task Manager..."
MSG.PWD .AZ "Password Manager..."