Kernel version 0.9 : X.PRINTF.S rewritten to support bank swiching save/restore (ATLK Crash)

This commit is contained in:
Rémy GIBERT 2017-05-02 17:56:43 +02:00
parent 25f5d697da
commit 993e1828fe
12 changed files with 188 additions and 161 deletions

View File

@ -56,10 +56,10 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
bit RROMBNK1
jsr HOME
>LDAXI MSG.INIT0
jsr PrintCStrAX
jsr PrintFAX
>LDAXI MSG.SYSMEM
jsr PrintCStrAX
jsr PrintFAX
lda MACHID
and #MACHID.RAM
@ -67,23 +67,23 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
beq .1
>LDAXI MSG.SYSMEM.KO
jsr PrintCStrAX
jsr PrintFAX
bra *
.1 lda #$8C Reset 80 col screen ($0C:HOME)
jsr $C300
>LDAXI MSG.INIT0
jsr PrintCStrAX
jsr PrintFAX
>LDAXI MSG.SYSMEM
jsr PrintCStrAX
jsr PrintFAX
>LDAXI MSG.SYSMEM.OK
jsr PrintCStrAX
jsr PrintFAX
>LDAXI MSG.CPU
jsr PrintCStrAX
jsr PrintFAX
sed Test 6502 BCD bug
lda #$99
@ -93,14 +93,14 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
bpl .2 if minus, BUG!, we have 6502
>LDAXI MSG.CPU.KO
jsr PrintCStrAX
jsr PrintFAX
bra *
.2 >LDAXI MSG.CPU.OK
jsr PrintCStrAX
jsr PrintFAX
*--------------------------------------
A2osX.Prefix >LDAXI MSG.BOOTPREFIX
jsr PrintCStrAX
jsr PrintFAX
jsr MLI
.DA #MLIGETPREFIX
.DA MLIGETPREFIX01
@ -118,7 +118,7 @@ A2osX.Prefix >LDAXI MSG.BOOTPREFIX
jsr CROUT
*--------------------------------------
A2osX.RamDrv >LDAXI MSG.RAMDRV
jsr PrintCStrAX
jsr PrintFAX
jsr DisableRamDRV
bcc .2
@ -126,15 +126,15 @@ A2osX.RamDrv >LDAXI MSG.RAMDRV
tax
bne .1
>LDAXI MSG.RAMDRV.KO0
jsr PrintCStrAX
jsr PrintFAX
bra A2osX.SetupQC
.1 >LDAXI MSG.RAMDRV.KO1
jsr PrintCStrAX
jsr PrintFAX
bra A2osX.SetupQC
.2 >LDAXI MSG.RAMDRV.OK
jsr PrintCStrAX
jsr PrintFAX
*--------------------------------------
A2osX.SetupQC lda RRAMWRAMBNK2
lda RRAMWRAMBNK2
@ -153,11 +153,11 @@ A2osX.SetupQC lda RRAMWRAMBNK2
lda RROMBNK1
*--------------------------------------
A2osX.EnumKM >LDAXI MSG.KMENUM
jsr PrintCStrAX
jsr PrintFAX
jsr EnumKM
*--------------------------------------
A2osX.MLIQuit >LDAXI MSG.INIT0OK
jsr PrintCStrAX
jsr PrintFAX
>DEBUGOA
jsr MLI
@ -218,6 +218,7 @@ DisableRamDRV php
lda #0 Not detected
sec
rts
*--------------------------------------
EnumKM.EPB .EQ $0D
EnumKM.EL .EQ $27
*--------------------------------------
@ -323,11 +324,13 @@ LoadKM ldx Boot.Prefix
dey
bne .2
lda #KM.Filename
pha
lda /KM.Filename
pha
>LDAXI MSG.KMLOAD
jsr PrintCStrAX
>LDAXI KM.Filename
jsr PrintPStrAX
jsr CROUT
jsr PrintFAX
jsr MLI
.DA #MLIOPEN
@ -345,7 +348,6 @@ LoadKM ldx Boot.Prefix
jsr .9
jsr A2osX.KMLOAD
jsr CROUT
.98 pha
jsr .9
@ -377,7 +379,7 @@ MSG.RAMDRV.KO1 >CSTR "Uninstall Failed !!!\n"
MSG.BOOTPREFIX >CSTR "Boot Prefix:"
MSG.KMENUM >CSTR "Looking For Kernel Modules...\n"
MSG.KMLOAD >CSTR "***Loading KM : "
MSG.KMLOAD >CSTR "***Loading KM : %S\n"
MSG.INIT0OK >CSTR "A2osX[Stage0]:Complete.\n"
*--------------------------------------
MLIGETPREFIX01 .DA #1

View File

@ -141,7 +141,7 @@ OPEN ldx DEVSLOTn0
sei
stz SSC.RESET,x
lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
lda #SSC.CTL.CLKEXT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL,x
ldx DEVSLOTn0

View File

@ -150,7 +150,7 @@ OPEN php
stz OUTBUF.HEAD
stz OUTBUF.TAIL
lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
lda #SSC.CTL.CLKEXT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL,x
lda #SSC.CMD.TEIRQ+SSC.CMD.TE+SSC.CMD.DTR

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5,10 +5,9 @@ INC 1
AUTO 6
*--------------------------------------
Kernel.Init2 sei
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
>LDAXI MSG.Init2
jsr PrintCStrAX
jsr PrintFAX
>LDYAI A2osX.GP
>STYA ZPPtr1
@ -19,10 +18,9 @@ Kernel.Init2 sei
jsr Kernel.Move
sta CLRALTZP
bit RROMBNK1
>LDAXI MSG.D000BNK2
jsr PrintCStrAX
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK2
@ -37,10 +35,9 @@ Kernel.Init2 sei
jsr Kernel.Move
sta CLRALTZP
bit RROMBNK1
>LDAXI MSG.D000BNK1
jsr PrintCStrAX
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK1
@ -55,10 +52,9 @@ Kernel.Init2 sei
jsr Kernel.Move
sta CLRALTZP
bit RROMBNK1
>LDAXI MSG.E000
jsr PrintCStrAX
jsr PrintFAX
sta SETALTZP
lda RRAMWRAMBNK1
@ -76,18 +72,17 @@ Kernel.Init2 sei
>STYA pStack init Soft Stack
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
bit RROMBNK1 Make sure ROM is enabled for X.PRINT.F
cli
lda A2osX.HZ
pha push HZ
>LDAXI MSG.HZ
jsr PrintCStrAX
jsr PrintFAX
jsr CPU.Init
>LDAXI MSG.Init2.OK
jsr PrintCStrAX
jsr PrintFAX
rts Do NOT replace this JSR/RTS with a JMP
*--------------------------------------
Kernel.Move ldy #0
@ -114,14 +109,14 @@ MSG.HZ >CSTR "Kernel SYS Timer Set For %d0 hz Machine.\n"
MSG.Init2.OK >CSTR "A2osX[Stage2]:Complete.\n"
*--------------------------------------
CPU.Init >LDAXI MSG.CPU
jsr PrintCStrAX
jsr PrintFAX
jsr Detect6502 A = CPU type
sta A2osX.CPUTYPE
lda MSG.CPUTYPEH,y
tax
lda MSG.CPUTYPEL,y
jsr PrintCStrAX
jsr PrintFAX
lda MACHID
and #MACHID.TYPE
@ -129,7 +124,7 @@ CPU.Init >LDAXI MSG.CPU
beq CPU.Init.Z80
>LDAXI MSG.CPU.SPEED
jsr PrintCStrAX
jsr PrintFAX
stz A2osX.RANDOM16
stz A2osX.RANDOM16+1
@ -189,10 +184,10 @@ CPU.Init >LDAXI MSG.CPU
lda A2osX.CPUSPEED
pha push CPU speed HI
>LDAXI MSG.CPU.SPEEDOK
jsr PrintCStrAX
jsr PrintFAX
CPU.Init.Z80 >LDAXI MSG.Z80
jsr PrintCStrAX
jsr PrintFAX
jsr DetectZ80
bcs .9
sta A2osX.Z80SLOT
@ -203,11 +198,11 @@ CPU.Init.Z80 >LDAXI MSG.Z80
sta A2osX.SLOTS,x
>LDAXI MSG.Z80.OK
jsr PrintCStrAX
jsr PrintFAX
rts
.9 >LDAXI MSG.Z80.KO
jsr PrintCStrAX
jsr PrintFAX
rts
*--------------------------------------
* Out:

View File

@ -7,14 +7,13 @@ AUTO 6
.OP 65C02
.OR $2000
.TF SYS/KERNEL
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/IO.I
.INB INC/PRODOS.I
.INB INC/MLI.ERR.I
*--------------------------------------
TmpPtr1 .EQ $0 for X.PRINTF.S
ZPPtr1 .EQ ZPKERNEL
ZPPtr2 .EQ ZPKERNEL+2
ZPPtr3 .EQ ZPKERNEL+4
@ -38,12 +37,12 @@ ZPPtr4 .EQ ZPKERNEL+6
.INB /A2OSX.SRC/X.PRINTF.S
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT2
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT3
* Global Page
A2osX.GP .PH $BD00
.INB /A2OSX.SRC/SYS/KERNEL.S.GP
.EP
A2osX.GP.E .EQ *
* LC AUX $D000 BANK1 API Calls $00-$3E
A2osX.D1 .PH $D000
.DA #RRAMWRAMBNK1
.INB /A2OSX.SRC/SYS/KERNEL.S.FIO
@ -57,7 +56,7 @@ A2osX.D1 .PH $D000
.INB /A2OSX.SRC/SYS/KERNEL.S.BIN
.EP
A2osX.D1.E .EQ *
* LC AUX $D000 BANK2 API Calls $40-$8E
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
.INB /A2OSX.SRC/SYS/KERNEL.S.CIO
@ -72,7 +71,7 @@ A2osX.D2 .PH $D000
.INB /A2OSX.SRC/SYS/KERNEL.S.TSK
.EP
A2osX.D2.E .EQ *
* LC AUX $E000 API Calls $80-$FE
A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP
.INB /A2OSX.SRC/SYS/KERNEL.S.DAT
@ -80,7 +79,6 @@ A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM
.INB /A2OSX.SRC/SYS/KERNEL.S.CNV
.INB /A2OSX.SRC/SYS/KERNEL.S.CHR
* Make sure KERNEL.S.D01 is the last one
.INB /A2OSX.SRC/SYS/KERNEL.S.D01
.EP
A2osX.E0.E .EQ *

View File

@ -16,7 +16,7 @@ AUTO 6
TmpPtr1 .EQ $0
*--------------------------------------
AT.INIT >LDAXI MSG.INIT
jsr PrintCStrAX
jsr PrintFAX
lda #$F9
sta TmpPtr1
@ -44,7 +44,7 @@ AT.INIT >LDAXI MSG.INIT
pha
>LDAXI MSG.FAILED
jsr PrintCStrAX
jsr PrintFAX
rts
.3 dec TmpPtr1+1
@ -53,7 +53,7 @@ AT.INIT >LDAXI MSG.INIT
bne .1
>LDAXI MSG.NOHW
jsr PrintCStrAX
jsr PrintFAX
rts
.4 stx WC.Flag
@ -64,7 +64,7 @@ AT.INIT >LDAXI MSG.INIT
pha Push slot #
phy Push Type #
>LDAXI MSG.HWOK
jsr PrintCStrAX
jsr PrintFAX
>LDYA MLI+1
>STYA GO.OLDMLI+1
@ -80,7 +80,7 @@ AT.INIT >LDAXI MSG.INIT
>STYA MLI+1
.5 >LDAXI MSG.ATINIT
jsr PrintCStrAX
jsr PrintFAX
jsr GO.WSCARD
.DA #MLIATALK
@ -88,7 +88,7 @@ AT.INIT >LDAXI MSG.INIT
bcs .9
>LDAXI MSG.IRQ
jsr PrintCStrAX
jsr PrintFAX
jsr MLI
.DA #MLIALLOCIRQ
@ -98,7 +98,7 @@ AT.INIT >LDAXI MSG.INIT
cli
>LDAXI MSG.PREFIX2
jsr PrintCStrAX
jsr PrintFAX
jsr GO.OLDMLI
.DA #MLIGETPREFIX
@ -106,7 +106,7 @@ AT.INIT >LDAXI MSG.INIT
bcs .9
>LDAXI MSG.PREFIX2
jsr PrintCStrAX
jsr PrintFAX
jsr GO.WSCARD
.DA #MLISETPREFIX
@ -114,12 +114,12 @@ AT.INIT >LDAXI MSG.INIT
bcs .9
>LDAXI MSG.OK
jsr PrintCStrAX
jsr PrintFAX
rts
.9 pha
>LDAXI MSG.KO
jsr PrintCStrAX
jsr PrintFAX
rts
*--------------------------------------
GO.WSCARD jmp $ffff Self Modifed

View File

@ -27,13 +27,13 @@ RW.BLOCK .EQ $A00
RWBankSelect .EQ $C073
*--------------------------------------
RW.Init >LDAXI RW.MSG
jsr PrintCStrAX
jsr PrintFAX
jsr RW.Detect1
bcs .10
>LDAXI RW.MSG.OK
jsr PrintCStrAX
jsr PrintFAX
rts
@ -41,7 +41,7 @@ RW.Init >LDAXI RW.MSG
bcc .1
>LDAXI RW.MSG.KO1
jsr PrintCStrAX
jsr PrintFAX
rts
.1 pha Push Page count
@ -56,27 +56,27 @@ RW.Init >LDAXI RW.MSG
pha Push Kbyte HI
>LDAXI RW.MSG.OK1
jsr PrintCStrAX
jsr PrintFAX
jsr RW.Install
bcc .2
>LDAXI RW.MSG.KO2
jsr PrintCStrAX
jsr PrintFAX
rts
.2 >LDAXI RW.MSG.OK2
jsr PrintCStrAX
jsr PrintFAX
jsr RW.Format
bcc .3
>LDAXI RW.MSG.KO3
jsr PrintCStrAX
jsr PrintFAX
rts
.3 >LDAXI RW.MSG.OK3
jsr PrintCStrAX
jsr PrintFAX
rts
*--------------------------------------
RW.Detect1 jsr MLI
@ -146,9 +146,9 @@ RW.Detect2 php
inx
bpl .3
dex we reached 128,last detected page was 127
.4 dex we reached 128,last detected page was 127
.4 ldy #127 X = detected page count
ldy #127 X = detected page count
.6 sty RWBankSelect

View File

@ -20,7 +20,7 @@ VS.CMD .EQ $C5 "E": Virtual Drive Command Envelope
DRV.EntryPoint .EQ $BF41
*--------------------------------------
VSDRIVE.Init >LDAXI VSDRIVE.MSG0
jsr PrintCStrAX
jsr PrintFAX
jsr VSDRIVE.Check
bcs .90
@ -37,13 +37,13 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0
pha slot n
>LDAXI VSDRIVE.SSCOK
jsr PrintCStrAX
jsr PrintFAX
jsr VSDRIVE.Ping
bcs .92
>LDAXI VSDRIVE.SRVOK
jsr PrintCStrAX
jsr PrintFAX
jsr VSDRIVE.SetSlot
bcs .91
@ -51,24 +51,24 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0
pha save slot
pha 2 times
>LDAXI VSDRIVE.DEVOK
jsr PrintCStrAX
jsr PrintFAX
jsr VSDRIVE.Install
>LDAXI VSDRIVE.OK
jsr PrintCStrAX
jsr PrintFAX
rts
.90 >LDAXI VSDRIVE.DRVKO
jsr PrintCStrAX
jsr PrintFAX
rts
.91 >LDAXI VSDRIVE.NOSLOT
jsr PrintCStrAX
jsr PrintFAX
rts
.92 >LDAXI VSDRIVE.SRVKO
jsr PrintCStrAX
jsr PrintFAX
inc .1+1
lda .1+1
@ -76,7 +76,7 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0
bne .2 Go try next SSC....
.99 >LDAXI VSDRIVE.SSCKO
jsr PrintCStrAX
jsr PrintFAX
rts
*--------------------------------------
VSDRIVE.Check bit RRAMWRAMBNK2
@ -119,7 +119,7 @@ SSC.Detect stz TmpPtr1
pha zzzzzzz...
pla
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
lda #SSC.CTL.CLKEXT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR

View File

@ -5,109 +5,111 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
PrintPStrAX >STAX TmpPtr1
lda (TmpPtr1)
tax
beq .9
ldy #1
.1 lda (TmpPtr1),y
ora #$80
jsr $FDED COUT
iny
dex
bne .1
.9 rts
*--------------------------------------
PrintCStrAX >STAX PrintCStrAX.Next+1
PrintFAX >STAX PrintFAX.Next+1
pla
sta .91+1
sta PrintFAX.99+1
pla
sta .9+1
sta PrintFAX.98+1
.1 stz X.b0Flag
lda $C011 RDLCBNK2
sta PrintFAX.91+1
lda $C012 RDLCRAM
sta PrintFAX.90+1
lda $C08A RROMBNK1, make sure $D000-$FFFF ROM selected
lda $CFFF get access to $C800-$CFFF internal ROM
PrintFAX.1 stz X.b0Flag
stz X.DigitCount
jsr PrintCStrAX.Next
beq .9
jsr PrintFAX.Next
beq PrintFAX.90
cmp #'%'
bne .5
.11 jsr PrintCStrAX.Next
beq .9
cmp #'0'
bne .22
ror X.b0Flag beq -> CS
bra .11
.22 bcc .21
cmp #'9'+1
bcs .21
and #$0f
sta X.DigitCount
bra .11
.21 cmp #'d'
bne .2
pla
jsr PrintADec
bra .1
.2 cmp #'D'
bne .3
plx
pla
jsr PrintAXDec
bra .1
.3 cmp #'h'
bne .4
pla
jsr $FDDA PRBYTE
bra .1
.4 cmp #'H'
bne .5
pla
jsr $FDDA PRBYTE
pla
jsr $FDDA PRBYTE
bra .1
.5 cmp #'\'
bne .7
jsr PrintCStrAX.Next
beq .9
.2 jsr PrintFAX.Next
beq PrintFAX.90
cmp #'0'
bne .3
ror X.b0Flag beq -> CS
bra .2
.3 bcc .4
cmp #'9'+1
bcs .4
and #$0f
sta X.DigitCount
bra .2
.4 ldx #PrintFAX.Tbl-PrintFAX.Esc-1
.5 cmp PrintFAX.Esc,x
beq .6
dex
bpl .5
bra PrintFAX.1
.6 txa
asl
tax
jmp (PrintFAX.Tbl,x)
.7 cmp #'\'
bne .8
jsr PrintFAX.Next
beq PrintFAX.90
cmp #'n'
bne .9
bne .8
lda #$0D
.7 ora #$80
.8 ora #$80
jsr $FDED COUT
bra .1
bra PrintFAX.1
.9 lda #$ff Self modified RTS HI
PrintFAX.90 lda #$ff
bpl PrintFAX.98 ROM was selected, nothing to do
PrintFAX.91 lda #$ff
bmi PrintFAX.92 RAM bank 2 was selected
ldx #$8B RRAMWRAMBNK1
.HS 2C bit abs
PrintFAX.92 ldx #$83 RRAMWRAMBNK2
lda $C000,x
lda $C000,x
PrintFAX.98 lda #$ff Self modified RTS HI
pha
.91 lda #$ff Self modified RTS LO
PrintFAX.99 lda #$ff Self modified RTS LOPrintFAXPrintFAX
pha
rts
*--------------------------------------
PrintCStrAX.Next
lda $ffff
PrintFAX.Next lda $ffff
beq .8
inc PrintCStrAX.Next+1
inc PrintFAX.Next+1
bne .8
inc PrintCStrAX.Next+2 Always !=0
inc PrintFAX.Next+2 Always !=0
.8 rts
*--------------------------------------
PrintFAX.Esc .AS "dDhHS"
PrintFAX.Tbl .DA PrintFAX.D
.DA PrintFAX.DD
.DA PrintFAX.H
.DA PrintFAX.HH
.DA PrintFAX.S
*--------------------------------------
PrintADec ldx #0
PrintAXDec >STAX X.HexBuffer
PrintFAX.D ldx #0
.HS D0 bne
PrintFAX.DD plx
pla
>STAX X.HexBuffer
stz X.BCDBuffer
stz X.BCDBuffer+1
stz X.BCDBuffer+2
@ -182,7 +184,37 @@ PrintAXDec >STAX X.HexBuffer
cpy #6
bne .6
.9 rts
.9 jmp PrintFAX.1
*--------------------------------------
PrintFAX.HH pla
jsr $FDDA PRBYTE
PrintFAX.H pla
jsr $FDDA PRBYTE
jmp PrintFAX.1
*--------------------------------------
PrintFAX.S pla
sta .1+2
sta .2+2
pla
sta .1+1
sta .2+1
.1 lda $ffff
beq .9
tax
ldy #1
.2 lda $ffff,y
ora #$80
jsr $FDED COUT
iny
dex
bne .2
.9 jmp PrintFAX.1
*--------------------------------------
X.HexBuffer .BS 2
X.BCDBuffer .BS 3