mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-06 10:29:30 +00:00
Another Bunch of fixes
This commit is contained in:
parent
f34e2b5f7c
commit
c04970fa55
|
@ -8,26 +8,25 @@ AUTO 6
|
|||
*--------------------------------------
|
||||
* **** START OF A2osX Global Page ****
|
||||
*--------------------------------------
|
||||
A2osX.GP.start .EQ *
|
||||
A2osX.GP.B.start
|
||||
.PH $BE00
|
||||
*--------------------------------------
|
||||
.PH $300
|
||||
*--------------------------------------
|
||||
A2osX.GP bra A2osX.SYSCALL3
|
||||
bra A2osX.MLICALL3
|
||||
bra A2osX.LIBCALL3
|
||||
bra A2osX.SLEEP3
|
||||
bra Kernel.MLICALL3
|
||||
bra Kernel.DRVCALL3
|
||||
bra Kernel.BINCALL3
|
||||
bra Kernel.LIBCALL3
|
||||
.BS A2osX.300CODE-*
|
||||
A2osX.GP.Start bra A2osX.SYSCALL1
|
||||
bra A2osX.MLICALL1
|
||||
bra A2osX.LIBCALL1
|
||||
bra A2osX.SLEEP1
|
||||
bra Kernel.MLICALL1
|
||||
bra Kernel.DRVCALL1
|
||||
bra Kernel.BINCALL1
|
||||
bra Kernel.LIBCALL1
|
||||
.BS A2osX.GPCODE-*
|
||||
*--------------------------------------
|
||||
* A2osX.SYSCALL (MAINLC to AUXLC)
|
||||
* In:
|
||||
* X = SYSfnc.Index
|
||||
* Y,A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL3 jsr GO.AUXLC
|
||||
A2osX.SYSCALL1 jsr GO.AUXLC
|
||||
jsr $E003
|
||||
jsr GO.MAINLC
|
||||
rts
|
||||
|
@ -37,7 +36,7 @@ A2osX.SYSCALL3 jsr GO.AUXLC
|
|||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
A2osX.MLICALL3 stx .1
|
||||
A2osX.MLICALL1 stx .1
|
||||
sta MLICALL.PARAMS
|
||||
jsr MLI
|
||||
.1 .BS 1
|
||||
|
@ -50,7 +49,7 @@ A2osX.MLICALL3 stx .1
|
|||
* X = LIBfnc.Index
|
||||
* A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.LIBCALL3 pha
|
||||
A2osX.LIBCALL1 pha
|
||||
phx
|
||||
tya
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
@ -59,7 +58,7 @@ A2osX.LIBCALL3 pha
|
|||
pla
|
||||
.1 jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP3 jmp A2osX.SLEEP31
|
||||
A2osX.SLEEP1 jmp A2osX.SLEEP2
|
||||
*--------------------------------------
|
||||
* SLEEP (MAINLC to AUXLC)
|
||||
* In:
|
||||
|
@ -69,8 +68,8 @@ A2osX.SLEEP3 jmp A2osX.SLEEP31
|
|||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
Kernel.MLICALL3 jsr GO.MAINLC
|
||||
jsr A2osX.MLICALL3
|
||||
Kernel.MLICALL1 jsr GO.MAINLC
|
||||
jsr A2osX.MLICALL1
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -79,9 +78,9 @@ Kernel.MLICALL3 jsr GO.MAINLC
|
|||
* X = DRV Function Index
|
||||
* Y,A = pDevContext
|
||||
*--------------------------------------
|
||||
Kernel.DRVCALL3 jsr GO.MAINLC
|
||||
Kernel.DRVCALL1 jsr GO.MAINLC
|
||||
>STYA pDevContext
|
||||
jsr Kernel.JMP3
|
||||
jsr GO.Kernel
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -90,9 +89,9 @@ Kernel.DRVCALL3 jsr GO.MAINLC
|
|||
* X = BIN Function Index
|
||||
* Y,A = pPsContext
|
||||
*--------------------------------------
|
||||
Kernel.BINCALL3 jsr GO.MAINLC
|
||||
Kernel.BINCALL1 jsr GO.MAINLC
|
||||
>STYA pPsContext
|
||||
jsr Kernel.JMP3
|
||||
jsr GO.Kernel
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -100,13 +99,11 @@ Kernel.BINCALL3 jsr GO.MAINLC
|
|||
* In:
|
||||
* X = Lib Function Index
|
||||
*--------------------------------------
|
||||
Kernel.LIBCALL3 jsr GO.MAINLC
|
||||
jsr Kernel.JMP3
|
||||
Kernel.LIBCALL1 jsr GO.MAINLC
|
||||
jsr GO.Kernel
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
Kernel.JMP3 jmp (Kernel.JMP)
|
||||
*--------------------------------------
|
||||
GO.MAINLC php
|
||||
clc
|
||||
bra GO.SAVE.REG
|
||||
|
@ -127,34 +124,39 @@ GO.SAVE.REG sta A2osX.SaveA
|
|||
sty GO.EXIT.JMP+2
|
||||
sei
|
||||
ldy R.SP
|
||||
tsx
|
||||
stx A2osX.SaveS
|
||||
bcs GO.AUXLC1
|
||||
|
||||
GO.MAINLC1 stx CLRALTZP
|
||||
GO.MAINLC1 tsx
|
||||
stx A2osX.SaveSX
|
||||
stx CLRALTZP
|
||||
ldx RROMBNK2
|
||||
ldx A2osX.SaveS
|
||||
ldx A2osX.SaveSM
|
||||
txs
|
||||
sty R.SP
|
||||
bra GO.EXIT
|
||||
*--------------------------------------
|
||||
GO.AUXLC1 stx SETALTZP
|
||||
ldx RRAMWRAMBNK2
|
||||
ldx RRAMWRAMBNK2
|
||||
ldx A2osX.SaveS
|
||||
GO.AUXLC1 tsx
|
||||
stx A2osX.SaveSM
|
||||
stx SETALTZP
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx A2osX.SaveSX
|
||||
txs
|
||||
sty R.SP
|
||||
*--------------------------------------
|
||||
GO.EXIT pha push P on stack
|
||||
|
||||
ldy A2osX.SaveY
|
||||
ldx A2osX.SaveX
|
||||
lda A2osX.SaveA
|
||||
plp
|
||||
|
||||
GO.EXIT.JMP jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP31 ldy #S.PS.hCS
|
||||
GO.Reset jsr GO.AUXLC
|
||||
jsr $E000
|
||||
*--------------------------------------
|
||||
GO.Kernel jmp (Kernel.JMP)
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP2 ldy #S.PS.hCS
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
|
@ -175,10 +177,11 @@ A2osX.SLEEP31 ldy #S.PS.hCS
|
|||
clc No error,
|
||||
rts back to Kernel
|
||||
*--------------------------------------
|
||||
A2osX.GP.End .EQ *
|
||||
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
||||
.BS A2osX.GP.START+$100-*
|
||||
.EP
|
||||
*--------------------------------------
|
||||
A2osX.GP.End
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S.GP
|
||||
LOAD A2OSX.S
|
||||
|
|
212
A2osX.S.QC.txt
Normal file
212
A2osX.S.QC.txt
Normal file
|
@ -0,0 +1,212 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* ****** START OF MLI QUIT CODE ******
|
||||
* Load Address :$1000-$11FF
|
||||
* setup $BE00 Global page :
|
||||
* Copy from $1200 to $BE00
|
||||
*--------------------------------------
|
||||
MLIOPEN01.PATH .EQ $200
|
||||
MLIOPEN01.BUFF .EQ $0C00 1k Buffer for MLI open
|
||||
MLIREAD01.ADDR .EQ $2000 for loading kernel.bin before moving to LC1
|
||||
*--------------------------------------
|
||||
A2osX.QC.B.Start
|
||||
.PH $1000
|
||||
*--------------------------------------
|
||||
A2osX.QC.Start .EQ *
|
||||
A2osX.QC cld
|
||||
jmp A2osX.QC.init
|
||||
A2osX.QC.Prefix .BS 32
|
||||
*--------------------------------------
|
||||
A2osX.QC.init bit RROMBNK1
|
||||
>LDYAI A2osX.QC
|
||||
>STYA POWERUP
|
||||
jsr SETPWRC
|
||||
|
||||
ldx #$17
|
||||
.1 stz MEMTABL,x Reset ProDOS memory bitmap
|
||||
dex
|
||||
bpl .1
|
||||
lda #$CF protect zero page, stack and page 1
|
||||
sta MEMTABL
|
||||
lda #$03
|
||||
sta MEMTABL+$17 protect ProDOS & A2osX global page
|
||||
|
||||
lda #$8C Reset 80 col screen ($0C=FF=HOME)
|
||||
jsr $C300
|
||||
|
||||
>LDAXI MSG.STAGE1
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
ldx #0
|
||||
.2 lda $1200,x Setup Global Page
|
||||
sta $BE00,x
|
||||
inx
|
||||
bne .2
|
||||
|
||||
.3 jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA MLISETPREFIX01
|
||||
bcc .4
|
||||
>LDAXI MSG.SETPREFIXKO
|
||||
jsr A2osX.QC.PrintAX
|
||||
>LDAXI A2osX.QC.Prefix
|
||||
jsr A2osX.QC.PrintAX
|
||||
>DEBUG
|
||||
bra .3
|
||||
|
||||
.4 >LDAXI MSG.SETPREFIXOK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>LDAXI MSG.KLOADING
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
jsr A2osX.QC.KLoad
|
||||
bcs .9
|
||||
|
||||
>LDAXI MSG.KLOADING.OK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>LDYAI GO.Reset
|
||||
>STYA POWERUP
|
||||
jsr SETPWRC
|
||||
|
||||
php
|
||||
pla
|
||||
sei
|
||||
tsx
|
||||
stx A2osX.SaveSM
|
||||
stx SETALTZP
|
||||
ldx A2osX.SaveSX
|
||||
txs
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
pha
|
||||
plp
|
||||
jmp $E000
|
||||
.9 >LDAXI MSG.KLOADING.KO
|
||||
jsr A2osX.QC.PrintAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||
.1 lda A2osX.QC.Prefix,x
|
||||
sta MLIOPEN01.PATH,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
ldx A2osX.QC.Prefix
|
||||
ldy #0
|
||||
.2 lda SYSKERNEL+1,y
|
||||
sta MLIOPEN01.PATH+1,x
|
||||
inx
|
||||
iny
|
||||
cpy SYSKERNEL
|
||||
bne .2
|
||||
stx MLIOPEN01.PATH
|
||||
|
||||
>LDAXI MLIOPEN01.PATH
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN01
|
||||
bcs .9
|
||||
|
||||
lda MLIOPEN01+5
|
||||
sta MLIREAD01+1
|
||||
sta MLICLOSE01+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD01
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE01
|
||||
bcs .9
|
||||
|
||||
php
|
||||
sei
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI MLIREAD01.ADDR+$1F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $E000+$1F00
|
||||
>STYA TmpPtr2
|
||||
ldx #$20
|
||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||
|
||||
.3 lda (TmpPtr1),y
|
||||
sta (TmpPtr2),y
|
||||
dey
|
||||
cpy #$FF
|
||||
bne .3
|
||||
|
||||
dec TmpPtr1+1
|
||||
dec TmpPtr2+1
|
||||
dex
|
||||
bne .3
|
||||
|
||||
lda RROMBNK1
|
||||
sta CLRALTZP
|
||||
plp
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
A2osX.QC.PrintAX
|
||||
>STAX TmpPtr1
|
||||
lda (TmpPtr1)
|
||||
tax
|
||||
beq .9
|
||||
ldy #1
|
||||
|
||||
.1 lda (TmpPtr1),y
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
.9 jsr CROUT
|
||||
rts
|
||||
*--------------------------------------
|
||||
MLISETPREFIX01 .DA #1
|
||||
.DA A2osX.QC.Prefix
|
||||
MLIOPEN01 .DA #3
|
||||
.DA MLIOPEN01.PATH
|
||||
.DA MLIOPEN01.BUFF
|
||||
.BS 1
|
||||
MLIREAD01 .DA #4
|
||||
.BS 1
|
||||
.DA MLIREAD01.ADDR
|
||||
.DA $1FFA
|
||||
.BS 2
|
||||
MLICLOSE01 .DA #1
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
SYSKERNEL >PSTRING "SYS/KERNEL"
|
||||
*--------------------------------------
|
||||
MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init"
|
||||
MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
|
||||
MSG.SETPREFIXKO >PSTRING "Insert Vol:"
|
||||
MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||
MSG.KLOADING.OK >PSTRING "OK"
|
||||
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
|
||||
.EP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S.QC
|
||||
LOAD A2OSX.S
|
||||
ASM
|
|
@ -8,6 +8,48 @@ AUTO 6
|
|||
*--------------------------------------
|
||||
RWBankSelect .EQ $C073
|
||||
*--------------------------------------
|
||||
A2osX.RamWorks >LDAXI MSG.RW
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWDetect
|
||||
bcs .10
|
||||
|
||||
>LDAXI MSG.RW.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
bra A2osX.Z80
|
||||
|
||||
.10 jsr RWInit
|
||||
bcc .1
|
||||
|
||||
>LDAXI MSG.RW.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.1 pha
|
||||
>LDAXI MSG.RW.OK1
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWInstall
|
||||
bcc .2
|
||||
|
||||
>LDAXI MSG.RW.KO2
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.2 >LDAXI MSG.RW.OK2
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWFormat
|
||||
bcc .3
|
||||
|
||||
>LDAXI MSG.RW.KO3
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.3 >LDAXI MSG.RW.OK3
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
RWDetect jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA RW.ONLINE
|
||||
|
@ -299,6 +341,15 @@ RW.BLOCK2.END .EQ *
|
|||
*--------------------------------------
|
||||
RW.BLOCK .BS 512
|
||||
*--------------------------------------
|
||||
MSG.RW >CSTRING "Detecting Ramworks Card..."
|
||||
MSG.RW.OK >CSTRING "Already Installed as /RAM31.\n"
|
||||
MSG.RW.OK1 >CSTRING "%d Pages Detected.\n"
|
||||
MSG.RW.OK2 >CSTRING "RamWorks Driver Installed.\n"
|
||||
MSG.RW.OK3 >CSTRING "RamWorks Drive Formatted.\n"
|
||||
MSG.RW.KO1 >CSTRING "Not Detected.\n"
|
||||
MSG.RW.KO2 >CSTRING "RamWorks Driver Install Error.\n"
|
||||
MSG.RW.KO3 >CSTRING "RamWorks Drive Format Error.\n"
|
||||
*--------------------------------------
|
||||
* Driver for Ramworks in main LC
|
||||
* $FF00 -> $FF9A (Inclusive)
|
||||
* $FF58 MUST BE $60 (RTS)
|
||||
|
|
300
A2osX.S.txt
300
A2osX.S.txt
|
@ -18,54 +18,47 @@ AUTO 6
|
|||
TmpPtr1 .EQ $0 main & aux ZP
|
||||
TmpPtr2 .EQ $2 main & aux ZP
|
||||
*--------------------------------------
|
||||
IO.Buffer .EQ $3C00 1k Buffer for MLI open
|
||||
Load.Address .EQ $4000 for loading kernel.bin before relocation
|
||||
*--------------------------------------
|
||||
* A2osX LOADER
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* /intercept MLI CALLS with
|
||||
* PREFIX=/MNT/
|
||||
* Move Global Page From $300 to $BE00
|
||||
*--------------------------------------
|
||||
START jmp A2osX.INIT
|
||||
.DA $EEEE
|
||||
.DA #$7F
|
||||
.BS $7F
|
||||
*--------------------------------------
|
||||
A2osX.INIT ldx #$FF init 6502 stack to highest
|
||||
* txs
|
||||
|
||||
php
|
||||
A2osX.INIT php
|
||||
pla
|
||||
sei
|
||||
sta SETALTZP Switch to alt ZP
|
||||
stx A2osX.SaveS make Alt SP to highest too
|
||||
sta CLRALTZP Switch to main ZP
|
||||
ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
stx A2osX.SaveSM
|
||||
pha
|
||||
plp
|
||||
|
||||
* php EDIT:Already Set By ProDOS
|
||||
* sei
|
||||
* sta SETALTZP Switch to alt ZP
|
||||
* stx A2osX.SaveSX make Alt SP to highest too
|
||||
* sta CLRALTZP Switch to main ZP
|
||||
* plp
|
||||
|
||||
jsr HOME
|
||||
>LDAXI MSG.STAGE0
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDYAI D.STACKSEG
|
||||
>STYA R.SP init Soft Stack
|
||||
|
||||
* >LDYAI WARMBOOT
|
||||
* >STYA POWERUP
|
||||
* jsr SETPWRC
|
||||
|
||||
>LDAXI MSG.SYSMEM
|
||||
jsr PrintCStrAX
|
||||
|
||||
lda MACHID
|
||||
and #MACHIDRAM
|
||||
cmp #MACHIDRAM128
|
||||
beq A2osX.SysMemOK
|
||||
beq .1
|
||||
|
||||
>LDAXI MSG.SYSMEM.KO
|
||||
jsr PrintCStrAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.SysMemOK >LDAXI MSG.SYSMEM.OK
|
||||
|
||||
.1 >LDAXI MSG.SYSMEM.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDAXI MSG.65x
|
||||
>LDAXI MSG.CPU
|
||||
jsr PrintCStrAX
|
||||
jsr Init6502
|
||||
ldy A2osX.CPUTYPE
|
||||
|
@ -75,11 +68,29 @@ A2osX.SysMemOK >LDAXI MSG.SYSMEM.OK
|
|||
jsr PrintCStrAX
|
||||
|
||||
lda A2osX.CPUTYPE
|
||||
bne A2osX.RamDrv
|
||||
>LDAXI MSG.65x.KO
|
||||
bne A2osX.Prefix
|
||||
>LDAXI MSG.CPU.KO
|
||||
jsr PrintCStrAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.Prefix >LDAXI MSG.BOOTPREFIX
|
||||
jsr PrintCStrAX
|
||||
jsr MLI
|
||||
.DA #MLIGETPREFIX
|
||||
.DA MLIGETPREFIX01
|
||||
bcs *
|
||||
ldx Boot.Prefix
|
||||
stx A2osX.QC.B.Start+4
|
||||
ldy #1
|
||||
.1 lda Boot.Prefix,y
|
||||
sta A2osX.QC.B.Start+4,y
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
jsr CROUT
|
||||
*--------------------------------------
|
||||
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
||||
jsr PrintCStrAX
|
||||
jsr DisableRamDRV
|
||||
|
@ -88,56 +99,14 @@ A2osX.RamDrv >LDAXI MSG.RAMDRV
|
|||
beq .1
|
||||
>LDAXI MSG.RAMDRV.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.RamWorks
|
||||
bra A2osX.Z80
|
||||
|
||||
.1 >LDAXI MSG.RAMDRV.KO0
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.RamWorks
|
||||
bra A2osX.Z80
|
||||
.2 >LDAXI MSG.RAMDRV.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.RamWorks >LDAXI MSG.RW
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWDetect
|
||||
bcs .10
|
||||
|
||||
>LDAXI MSG.RW.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
bra A2osX.Z80
|
||||
|
||||
.10 jsr RWInit
|
||||
bcc .1
|
||||
|
||||
>LDAXI MSG.RW.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.1 pha
|
||||
>LDAXI MSG.RW.OK1
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWInstall
|
||||
bcc .2
|
||||
|
||||
>LDAXI MSG.RW.KO2
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.2 >LDAXI MSG.RW.OK2
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWFormat
|
||||
bcc .3
|
||||
|
||||
>LDAXI MSG.RW.KO3
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.3 >LDAXI MSG.RW.OK3
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.Z80 >LDAXI MSG.Z80
|
||||
jsr PrintCStrAX
|
||||
jsr InitZ80
|
||||
|
@ -146,50 +115,21 @@ A2osX.Z80 >LDAXI MSG.Z80
|
|||
|
||||
>LDAXI MSG.Z80.OK
|
||||
jsr PrintCStrAX
|
||||
bra .8
|
||||
bra A2osX.MLIQuit
|
||||
|
||||
.1 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
|
||||
.8 >LDAXI MSG.LOADING
|
||||
*--------------------------------------
|
||||
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr LoadKernel
|
||||
bcs .9
|
||||
|
||||
phx
|
||||
pha
|
||||
>LDAXI MSG.LOADING.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
ldx #A2osX.GP.End-A2osX.GP.start
|
||||
|
||||
.81 lda A2osX.GP.start-1,x
|
||||
sta A2osX.GP-1,x
|
||||
dex
|
||||
bne .81
|
||||
jsr SetupQuitCode
|
||||
|
||||
>DEBUG
|
||||
|
||||
php
|
||||
pla
|
||||
sei
|
||||
tsx
|
||||
stx A2osX.SaveS
|
||||
stx SETALTZP
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
ldx A2osX.SaveS
|
||||
txs
|
||||
pha
|
||||
plp
|
||||
jmp $E000
|
||||
|
||||
|
||||
.9 pha
|
||||
>LDAXI MSG.LOADING.KO
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIQUIT
|
||||
.DA MLIQUIT01
|
||||
bra *
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
|
@ -272,86 +212,21 @@ DisableRamDRV php
|
|||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
LoadKernel jsr MLI
|
||||
.DA #MLIGETPREFIX
|
||||
.DA MLIGETPREFIX01
|
||||
bcs .9
|
||||
ldy #0
|
||||
ldx Path.Buffer
|
||||
.1 lda SYSKERNEL,y
|
||||
beq .2
|
||||
sta Path.Buffer+1,x
|
||||
SetupQuitCode lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
|
||||
ldx #0
|
||||
.1 lda A2osX.QC.B.Start,x
|
||||
sta $D100,x
|
||||
lda A2osX.QC.B.Start+$100,x
|
||||
sta $D200,x
|
||||
lda A2osX.GP.B.start,x
|
||||
sta $D300,x
|
||||
inx
|
||||
iny
|
||||
bra .1
|
||||
|
||||
.2 stx Path.Buffer
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN01
|
||||
bcs .9
|
||||
|
||||
lda MLIOPEN01+5
|
||||
sta MLIREAD01+1
|
||||
sta MLICLOSE01+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD01
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE01
|
||||
bcs .9
|
||||
|
||||
php
|
||||
sei
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI Load.Address+$1F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $E000+$1F00
|
||||
>STYA TmpPtr2
|
||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||
|
||||
.3 lda (TmpPtr1),y
|
||||
sta (TmpPtr2),y
|
||||
dey
|
||||
cpy #$FF
|
||||
bne .3
|
||||
|
||||
dec TmpPtr1+1
|
||||
dec TmpPtr2+1
|
||||
lda TmpPtr2+1
|
||||
cmp #$DF
|
||||
bne .3
|
||||
bne .1
|
||||
|
||||
lda RROMBNK1
|
||||
sta CLRALTZP
|
||||
plp
|
||||
>LDAX MLIREAD01+6
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.DA Path.Buffer
|
||||
MLIOPEN01 .DA #3
|
||||
.DA Path.Buffer
|
||||
.DA IO.Buffer
|
||||
.BS 1
|
||||
MLIREAD01 .DA #4
|
||||
.BS 1
|
||||
.DA Load.Address
|
||||
.DA $2000
|
||||
.BS 2
|
||||
MLICLOSE01 .DA #1
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Path.Buffer .BS MLI.MAXPATH
|
||||
SYSKERNEL >CSTRING "SYS/KERNEL"
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintCStrAX >STAX TmpPtr1
|
||||
pla
|
||||
|
@ -469,32 +344,21 @@ PrintDec stz BCD
|
|||
.9 ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.STAGE0 >CSTRING "A2osX[Stage0]:Init\n"
|
||||
MSG.SYSMEM >CSTRING "Checking System Memory..."
|
||||
MSG.SYSMEM.OK >CSTRING "128k Detected.\n"
|
||||
MSG.SYSMEM.KO >CSTRING "A2osX Requires At Least 128k Memory.\n"
|
||||
MSG.65x >CSTRING "Checking 65x CPU..."
|
||||
MSG.65x.KO >CSTRING "A2osX Requires At Least A 65C02 CPU.\n"
|
||||
MSG.CPU >CSTRING "Checking CPU..."
|
||||
MSG.CPU.KO >CSTRING "A2osX Requires At Least A 65C02 CPU.\n"
|
||||
MSG.BOOTPREFIX >CSTRING "Boot Prefix:"
|
||||
MSG.RAMDRV >CSTRING "Checking ProDOS RamDrive..."
|
||||
MSG.RAMDRV.OK >CSTRING "Successfully Disabled.\n"
|
||||
MSG.RAMDRV.KO0 >CSTRING "Not Detected.\n"
|
||||
MSG.RAMDRV.KO1 >CSTRING "Uninstall Failed !!!\n"
|
||||
MSG.CLOCK.OK1 >CSTRING "Already Installed.\n"
|
||||
MSG.CLOCK.OK2 >CSTRING "Successfully Installed.\n"
|
||||
MSG.CLOCK.KO >CSTRING "Install Failed !!!\n"
|
||||
MSG.RW >CSTRING "Detecting Ramworks Card..."
|
||||
MSG.RW.OK >CSTRING "Already Installed as /RAM31.\n"
|
||||
MSG.RW.OK1 >CSTRING "%d Pages Detected.\n"
|
||||
MSG.RW.OK2 >CSTRING "RamWorks Driver Installed.\n"
|
||||
MSG.RW.OK3 >CSTRING "RamWorks Drive Formatted.\n"
|
||||
MSG.RW.KO1 >CSTRING "Not Detected.\n"
|
||||
MSG.RW.KO2 >CSTRING "RamWorks Driver Install Error.\n"
|
||||
MSG.RW.KO3 >CSTRING "RamWorks Drive Format Error.\n"
|
||||
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||
MSG.LOADING >CSTRING "Loading Kernel..."
|
||||
MSG.LOADING.OK >CSTRING "%D Bytes Read.\n"
|
||||
MSG.LOADING.KO >CSTRING "Error $%h While Loading Kernel.\n"
|
||||
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||||
*--------------------------------------
|
||||
MSG.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
|
@ -510,29 +374,23 @@ MSG.65C02 >CSTRING "CMOS 65C02.\n"
|
|||
MSG.R65C02 >CSTRING "Rockwell R65C02.\n"
|
||||
MSG.65C816 >CSTRING "16 Bits 65C816.\n"
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.DA Boot.Prefix
|
||||
MLIQUIT01 .DA #4
|
||||
.DA #0
|
||||
.DA 0
|
||||
.DA #0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
Boot.Prefix .BS MLI.MAXPATH
|
||||
*--------------------------------------
|
||||
HEX .BS 2
|
||||
BCD .BS 3
|
||||
bFlag .BS 1
|
||||
*--------------------------------------
|
||||
.INB A2OSX.S.GP
|
||||
.INB A2OSX.S.RW
|
||||
.INB A2OSX.S.Z80
|
||||
*--------------------------------------
|
||||
* ****** START OF MLI QUIT CODE ******
|
||||
* setup $0300 Global page :
|
||||
* Copy Back from $D010-$D0FF to $300-$3F0
|
||||
* setup $1000 Z80 switch code
|
||||
*--------------------------------------
|
||||
.PH $1000
|
||||
cld
|
||||
rts
|
||||
|
||||
ROOT.PATH .BS MLI.MAXPATH
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* Driver for NoSlotClock
|
||||
* Load at (DATETIME+1)
|
||||
*--------------------------------------
|
||||
.INB A2OSX.S.QC
|
||||
.INB A2OSX.S.GP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S
|
||||
|
|
|
@ -105,41 +105,15 @@ SYS.SetNetCfg .EQ $B2
|
|||
SYS.GetNetCfgA .EQ $B4
|
||||
SYS.ClrNetCfgA .EQ $B6
|
||||
*--------------------------------------
|
||||
A2osX.SaveS .EQ $100 Main,Aux
|
||||
A2osX.SaveSM .EQ $100 Main
|
||||
A2osX.SaveSX .EQ $101 Aux
|
||||
*--------------------------------------
|
||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : A2osX Global Page
|
||||
* Main $300 -> 3EF : <free>
|
||||
* Main $3F0 -> 3FF : ProDOS Vectors
|
||||
* Aux $200 -> 3FD : /RAM Driver
|
||||
* Aux $3FE -> 3FF : RESET Vector
|
||||
*--------------------------------------
|
||||
* A2osX GLOBAL PAGE
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL .EQ $0300
|
||||
A2osX.MLICALL .EQ $0302
|
||||
A2osX.LIBCALL .EQ $0304
|
||||
A2osX.SLEEP .EQ $0306
|
||||
Kernel.MLICALL .EQ $0308
|
||||
Kernel.DRVCALL .EQ $030A
|
||||
Kernel.BINCALL .EQ $030C
|
||||
Kernel.LIBCALL .EQ $030E
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $0310
|
||||
A2osX.SCREENS.G .EQ %00000100
|
||||
A2osX.SCREENS.C .EQ %00000010
|
||||
A2osX.SCREENS.S .EQ %00000001
|
||||
A2osX.ACTIVESCRN .EQ $0311
|
||||
|
||||
A2osX.TIMER16 .EQ $0312
|
||||
A2osX.RANDOM16 .EQ $0314
|
||||
|
||||
A2osX.CPUTYPE .EQ $0316
|
||||
A2osX.Z80SLOT .EQ $0317
|
||||
|
||||
Kernel.JMP .EQ $0318
|
||||
|
||||
A2osX.300CODE .EQ $031A
|
||||
*--------------------------------------
|
||||
* Console Screen .EQ $400 -> $7FF
|
||||
* System Screen .EQ $800 -> $BFF
|
||||
*--------------------------------------
|
||||
|
@ -148,9 +122,7 @@ TmpBuffer256 .EQ $0C00
|
|||
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
||||
*--------------------------------------
|
||||
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
||||
A2osX.SaveA .EQ $0E20
|
||||
A2osX.SaveX .EQ $0E21
|
||||
A2osX.SaveY .EQ $0E22
|
||||
|
||||
*--------------------------------------
|
||||
MEMMGR.LOMEM .EQ $0E30
|
||||
MEMMGR.MLLIMIT .EQ $0E32
|
||||
|
@ -168,6 +140,36 @@ TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
|
|||
*--------------------------------------
|
||||
A2osX.LOMEM .EQ $1500
|
||||
*--------------------------------------
|
||||
* A2osX GLOBAL PAGE
|
||||
* $BE00->$BE0F : Public JMP
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL .EQ $BE00
|
||||
A2osX.MLICALL .EQ $BE02
|
||||
A2osX.LIBCALL .EQ $BE04
|
||||
A2osX.SLEEP .EQ $BE06
|
||||
Kernel.MLICALL .EQ $BE08
|
||||
Kernel.DRVCALL .EQ $BE0A
|
||||
Kernel.BINCALL .EQ $BE0C
|
||||
Kernel.LIBCALL .EQ $BE0E
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $BE10
|
||||
A2osX.SCREENS.G .EQ %00000100
|
||||
A2osX.SCREENS.C .EQ %00000010
|
||||
A2osX.SCREENS.S .EQ %00000001
|
||||
A2osX.ACTIVESCRN .EQ $BE11
|
||||
|
||||
A2osX.TIMER16 .EQ $BE12
|
||||
A2osX.RANDOM16 .EQ $BE14
|
||||
|
||||
A2osX.CPUTYPE .EQ $BE16
|
||||
A2osX.Z80SLOT .EQ $BE17
|
||||
|
||||
Kernel.JMP .EQ $BE1A
|
||||
A2osX.SaveA .EQ $BE1C
|
||||
A2osX.SaveX .EQ $BE1D
|
||||
A2osX.SaveY .EQ $BE1E
|
||||
A2osX.GPCODE .EQ $BE20
|
||||
*--------------------------------------
|
||||
* MEM STRUCT
|
||||
*--------------------------------------
|
||||
S.MEM.F .EQ 0
|
||||
|
|
|
@ -10,7 +10,7 @@ AUTO 6
|
|||
OURCH .EQ $57B
|
||||
OURCV .EQ $5FB
|
||||
*--------------------------------------
|
||||
* Software Switches & Cxxx ROMs
|
||||
* Software Switches
|
||||
*--------------------------------------
|
||||
KBD .EQ $C000 R
|
||||
CLR80STORE .EQ $C000 W
|
||||
|
@ -94,10 +94,5 @@ RRAMBNK1 .EQ $C088 R
|
|||
RROMWRAMBNK1 .EQ $C089 RR
|
||||
RROMBNK1 .EQ $C08A R
|
||||
RRAMWRAMBNK1 .EQ $C08B RR
|
||||
*--------------------------------------
|
||||
* Cxxx ROMs
|
||||
*--------------------------------------
|
||||
CX00ROM .EQ $C100
|
||||
C300ROM .EQ $C300
|
||||
MAN
|
||||
SAVE INC/IO.I
|
||||
|
|
|
@ -17,44 +17,22 @@ ZPMemMgrTmp2 .EQ ZPMemMgr+10
|
|||
ZPMemMgrTmp3 .EQ ZPMemMgr+12
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* Create a 256 bytes table in SLOT #0
|
||||
* - Create a 256 bytes table in SLOT #0
|
||||
* (eh, mem.ID=0 always used! useful to test if hMem=0)
|
||||
* mapping hMem's to real memory blocks to help
|
||||
* Garbage collector move blocks
|
||||
*--------------------------------------
|
||||
S.MemMgrInit ldx /A2osX.LOMEM
|
||||
lda #A2osX.LOMEM
|
||||
beq .1
|
||||
inx
|
||||
.1 phx
|
||||
txa
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
tay
|
||||
txa
|
||||
and #7
|
||||
tax
|
||||
lda #$80
|
||||
.2 dex
|
||||
bmi .3
|
||||
lsr
|
||||
bra .2
|
||||
.3 and MEMTABL,y
|
||||
bne .4
|
||||
plx
|
||||
inx
|
||||
cpx /MLI
|
||||
bne .1
|
||||
bra .5
|
||||
.4 plx
|
||||
.5 stz MEMMGR.MHLIMIT
|
||||
S.MemMgrInit stz MEMMGR.MHLIMIT
|
||||
stz MEMMGR.HIMEM
|
||||
|
||||
ldx /MLI
|
||||
dex Reserve $BE00 For Global Page
|
||||
stx MEMMGR.MHLIMIT+1
|
||||
stx MEMMGR.HIMEM+1
|
||||
|
||||
>LDYAI A2osX.LOMEM
|
||||
>STYA MEMMGR.LOMEM
|
||||
>STYA MEMMGR.MLLIMIT
|
||||
>STYA MEMMGR.LOMEM
|
||||
stz MEMMGR.TABLESIZE Init Table Size to 0
|
||||
* jsr S.UpdateMemStats Not needed, will be called by S.GetMem
|
||||
>PUSHWI 256 get a 256 bytes buffer for Map Table, hMem=0
|
||||
|
|
|
@ -268,6 +268,58 @@ S.SysScrSetCharAtYX
|
|||
ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.ScreenSelectA
|
||||
* IN :
|
||||
* A = Screen to display
|
||||
*--------------------------------------
|
||||
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
beq .9 ...not setup up
|
||||
|
||||
cmp #A2osX.SCREENS.S
|
||||
bne .1
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta SETPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.S
|
||||
bra .8
|
||||
|
||||
.1 cmp #A2osX.SCREENS.C
|
||||
bne .2
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta SET80STORE
|
||||
sta CLRPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.C
|
||||
bra .8
|
||||
|
||||
.2 cmp #A2osX.SCREENS.G
|
||||
bne .9
|
||||
sta CLRTEXT
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLRPAGE2
|
||||
|
||||
sta SETIOUDIS
|
||||
|
||||
sta CLR80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
|
||||
sta SET80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
|
||||
lda #A2osX.SCREENS.G
|
||||
|
||||
.8 sta A2osX.ACTIVESCRN
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
SYSSCR.CH .BS 1
|
||||
SYSSCR.CV .BS 1
|
||||
SYSSCR.CPULOADI .BS 1
|
||||
|
|
|
@ -14,7 +14,7 @@ AUTO 6
|
|||
.INB INC/IO.I
|
||||
.INB INC/PRODOS.I
|
||||
*--------------------------------------
|
||||
KERNEL.BOOT jmp S.Kernel
|
||||
KERNEL.Start jmp S.Kernel
|
||||
*--------------------------------------
|
||||
KERNEL.SYSCALL jmp (.1,x)
|
||||
*--------------------------------------
|
||||
|
@ -152,35 +152,34 @@ S.KernelInit >LDYAI D.STACKSEG
|
|||
stz A2osX.ACTIVESCRN
|
||||
jsr S.SysScrInit
|
||||
|
||||
>LDYAI MSG.INIT0
|
||||
>LDYAI MSG.Init
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
>LDYAI MSG.INIT1
|
||||
>LDYAI MSG.Init.MemMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.MemMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
bcs .1
|
||||
|
||||
>LDYAI MSG.INIT2
|
||||
>LDYAI MSG.Init.TskMgr
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
jsr S.TskMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.1 bcs .2
|
||||
|
||||
>LDYAI MSG.INIT3
|
||||
>LDYAI MSG.Init.DevMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.DevMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.2 bcs .3
|
||||
|
||||
>LDYAI MSG.INIT4
|
||||
>LDYAI MSG.Init.EvtMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.EvtMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.3 bcs .99
|
||||
|
||||
>LDYAI MSG.INIT5
|
||||
>LDYAI MSG.Init.Startup
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path...
|
||||
|
@ -196,8 +195,10 @@ S.KernelInit >LDYAI D.STACKSEG
|
|||
>PUSHA
|
||||
jsr S.PStrCat
|
||||
pha save for discard
|
||||
|
||||
jsr S.ExecFileA
|
||||
bcs .99
|
||||
jsr S.SysScrPRCode
|
||||
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
@ -205,7 +206,7 @@ S.KernelInit >LDYAI D.STACKSEG
|
|||
pla
|
||||
jsr S.FreeMemA
|
||||
|
||||
>LDYAI MSG.INIT6
|
||||
>LDYAI MSG.Init.SysEnv
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
jsr S.PrintSysEnv
|
||||
|
@ -304,56 +305,6 @@ S.KernelQuit clc
|
|||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
* S.ScreenSelectA
|
||||
* IN :
|
||||
* A = Screen to display
|
||||
*--------------------------------------
|
||||
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
beq .9 ...not setup up
|
||||
|
||||
cmp #A2osX.SCREENS.S
|
||||
bne .1
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta SETPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.S
|
||||
bra .8
|
||||
|
||||
.1 cmp #A2osX.SCREENS.C
|
||||
bne .2
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta SET80STORE
|
||||
sta CLRPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.C
|
||||
bra .8
|
||||
|
||||
.2 cmp #A2osX.SCREENS.G
|
||||
bne .9
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLRTEXT
|
||||
sta SETIOUDIS
|
||||
|
||||
sta CLR80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
|
||||
sta SET80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
|
||||
lda #A2osX.SCREENS.G
|
||||
|
||||
.8 sta A2osX.ACTIVESCRN
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.ExecFileA (R)
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
|
@ -505,13 +456,13 @@ EXECCMDS1 >PSTRING "LOAD"
|
|||
EXECCMDS2 >PSTRING "EXEC"
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
MSG.INIT0 >PSTRING "\nKernel Startup...\n"
|
||||
MSG.INIT1 >PSTRING "->MemMgr Init"
|
||||
MSG.INIT2 >PSTRING "->TskMgr Init"
|
||||
MSG.INIT3 >PSTRING "->DevMgr Init"
|
||||
MSG.INIT4 >PSTRING "->EvtMgr Init"
|
||||
MSG.INIT5 >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.INIT6 >PSTRING "SYS ENV:\n"
|
||||
MSG.Init >PSTRING "A2osX[Stage2]:Init\n"
|
||||
MSG.Init.MemMgr >PSTRING "->MemMgr Init"
|
||||
MSG.Init.TskMgr >PSTRING "->TskMgr Init"
|
||||
MSG.Init.DevMgr >PSTRING "->DevMgr Init"
|
||||
MSG.Init.EvtMgr >PSTRING "->EvtMgr Init"
|
||||
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.Init.SysEnv >PSTRING "SYS ENV:\n"
|
||||
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
|
||||
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
|
||||
*--------------------------------------
|
||||
|
@ -536,6 +487,13 @@ ENV.LIB >PSTRING "LIB"
|
|||
.INB SYS/KERNEL.S.STR
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
*--------------------------------------
|
||||
KERNEL.End .EQ *
|
||||
Kernel.Size .EQ KERNEL.End-KERNEL.Start
|
||||
*--------------------------------------
|
||||
.DO Kernel.Size>$1FFA
|
||||
ERROR:KERNEL.SIZE too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S
|
||||
ASM
|
||||
|
|
0
SYS/KM.AECLK.S.txt
Normal file
0
SYS/KM.AECLK.S.txt
Normal file
|
@ -9,7 +9,6 @@ AUTO 6
|
|||
.TF SYS/KM.NSC
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/MONITOR.I
|
||||
.INB INC/PRODOS.I
|
||||
|
|
639
SYS/KM.RAMWORKS.S.txt
Normal file
639
SYS/KM.RAMWORKS.S.txt
Normal file
|
@ -0,0 +1,639 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SYS/KM.RAMWORKS
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/MONITOR.I
|
||||
.INB INC/PRODOS.I
|
||||
*--------------------------------------
|
||||
TmpPtr1 .EQ $0
|
||||
TmpPtr2 .EQ $2
|
||||
*--------------------------------------
|
||||
RWBankSelect .EQ $C073
|
||||
*--------------------------------------
|
||||
RW.Init >LDAXI RW.MSG
|
||||
jsr RW.Print
|
||||
|
||||
jsr RW.Detect1
|
||||
bcs .10
|
||||
|
||||
>LDAXI RW.MSG.OK
|
||||
jsr RW.Print
|
||||
|
||||
rts
|
||||
|
||||
.10 jsr RW.Detect2
|
||||
bcc .1
|
||||
|
||||
>LDAXI RW.MSG.KO1
|
||||
jsr RW.Print
|
||||
rts
|
||||
|
||||
.1 jsr PRBYTE
|
||||
>LDAXI RW.MSG.OK1
|
||||
jsr RW.Print
|
||||
|
||||
jsr RW.Install
|
||||
bcc .2
|
||||
|
||||
>LDAXI RW.MSG.KO2
|
||||
jsr RW.Print
|
||||
rts
|
||||
|
||||
.2 >LDAXI RW.MSG.OK2
|
||||
jsr RW.Print
|
||||
|
||||
jsr RW.Format
|
||||
bcc .3
|
||||
|
||||
>LDAXI RW.MSG.KO3
|
||||
jsr RW.Print
|
||||
rts
|
||||
|
||||
.3 >LDAXI RW.MSG.OK3
|
||||
jsr RW.Print
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.Detect1 jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA RW.ONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.ONLINE .DA #2
|
||||
.DA #$30 Slot 3,Drive 1
|
||||
.DA RW.ONLINEBUFFER
|
||||
RW.ONLINEBUFFER .BS 16
|
||||
*--------------------------------------
|
||||
RW.Detect2 php
|
||||
sei
|
||||
sta SETALTZP
|
||||
|
||||
ldx #0 start detection at page $00
|
||||
.1 stx RWBankSelect
|
||||
lda 0
|
||||
sta RW.SAVEZP0,x save Bank 0 $0000 to prevent ALTZP trash
|
||||
lda 1
|
||||
sta RW.SAVEZP1,x
|
||||
inx
|
||||
bne .1
|
||||
|
||||
lda #0
|
||||
.2 sta RWBankSelect
|
||||
sta 0
|
||||
eor #$FF
|
||||
sta 1
|
||||
eor #$FF
|
||||
inc
|
||||
bne .2
|
||||
|
||||
ldx #0
|
||||
.3 txa
|
||||
sta RWBankSelect
|
||||
cmp 0
|
||||
bne .4
|
||||
eor #$FF
|
||||
cmp 1
|
||||
bne .4
|
||||
inx
|
||||
bne .3
|
||||
dex we reached 0,last detected page was 255
|
||||
|
||||
.4 ldy #255 X = detected page count
|
||||
|
||||
.6 sty RWBankSelect
|
||||
lda RW.SAVEZP0,y
|
||||
sta 0
|
||||
lda RW.SAVEZP1,y
|
||||
sta 1
|
||||
dey
|
||||
bne .6
|
||||
|
||||
stz RWBankSelect
|
||||
lda RW.SAVEZP0 Don't forget to restore Bank 0
|
||||
sta 0
|
||||
lda RW.SAVEZP1
|
||||
sta 1
|
||||
|
||||
txa
|
||||
|
||||
stx RW.PGCNT PGCNT = last detected page, as we do -1 for AuxMem
|
||||
|
||||
sta CLRALTZP
|
||||
plp
|
||||
lda RW.PGCNT
|
||||
beq .9
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.Install lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
ldx #RWDRV.SIZE
|
||||
.1 lda RWDRV.B.START-1,x
|
||||
sta RWDRV.START-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
lda RW.PGCNT
|
||||
lsr
|
||||
sta RWDRV.MAXHI+1
|
||||
lda #0
|
||||
ror
|
||||
sta RWDRV.MAXLO+1
|
||||
|
||||
lda RROMBNK1
|
||||
|
||||
sta SETWRITEAUX
|
||||
|
||||
ldx #RWDRVX.SIZE
|
||||
.2 lda RWDRVX.B.START-1,x
|
||||
sta RWDRVX.START-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
sta CLRWRITEAUX
|
||||
|
||||
inc DEVCNT
|
||||
ldx DEVCNT
|
||||
lda #$30 Slot 3,Drive 1
|
||||
sta DEVLST,x
|
||||
|
||||
lda #RWDRV.START
|
||||
sta DEVPTRS3D1
|
||||
lda /RWDRV.START
|
||||
sta DEVPTRS3D1+1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.Format jsr RW.BLOCK.SET00
|
||||
|
||||
lda RW.PGCNT
|
||||
lsr
|
||||
sta RW.BLOCK2.TB+1
|
||||
lda #0
|
||||
ror
|
||||
sta RW.BLOCK2.TB
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
|
||||
ldx #3
|
||||
.1 lda DATELO,x
|
||||
sta RW.BLOCK2.CT,x
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldx #RW.BLOCK2.END-RW.BLOCK2
|
||||
.2 lda RW.BLOCK2-1,x
|
||||
sta RW.BLOCK-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
jsr MLI Write Block 2,First VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .22
|
||||
rts
|
||||
*--------------------------------------
|
||||
.22 jsr RW.BLOCK.SET00
|
||||
|
||||
lda #2
|
||||
sta RW.BLOCK LO byte of previous block pointer
|
||||
|
||||
inc RW.MLIWRITEBLOCK.BLK
|
||||
jsr MLI Write Block 3,Last VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .33
|
||||
rts
|
||||
*--------------------------------------
|
||||
.33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap
|
||||
lsr blocks we need :
|
||||
lsr 1 page = 128 blocks = 16 bytes
|
||||
lsr 32 pages = 512 bytes = 1 Block
|
||||
lsr
|
||||
lsr
|
||||
sta RW.FBITMAPCNT store FULL bitmap block count needed
|
||||
|
||||
tax
|
||||
lda RW.PGCNT
|
||||
and #$1F need an extra incomplete bitmap block?
|
||||
beq .3
|
||||
inx
|
||||
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
|
||||
|
||||
.4 lda RW.FBITMAPCNT
|
||||
beq .49
|
||||
|
||||
dec RW.FBITMAPCNT
|
||||
jsr RW.BLOCK.SETFF
|
||||
|
||||
bra .5
|
||||
|
||||
.49 jsr RW.BLOCK.SET00
|
||||
|
||||
lda RW.PGCNT
|
||||
and #$1F compute incomplete bitmap block
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl times 16 for byte count
|
||||
tay
|
||||
lda #$FF
|
||||
bcc .42 first half of block only
|
||||
|
||||
ldx #0
|
||||
.40 sta RW.BLOCK,x
|
||||
inx
|
||||
bne .40
|
||||
|
||||
cpy #0
|
||||
beq .5
|
||||
.41 sta RW.BLOCK+$ff,y
|
||||
dey
|
||||
bne .41
|
||||
|
||||
bra .5
|
||||
|
||||
.42 sta RW.BLOCK-1,y
|
||||
dey
|
||||
bne .42
|
||||
|
||||
.5 inc RW.MLIWRITEBLOCK.BLK
|
||||
lda RW.MLIWRITEBLOCK.BLK
|
||||
cmp #4 Are we writing first volume bitmap ?
|
||||
bne .63 no, regular one
|
||||
|
||||
lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
|
||||
sta RW.BLOCK
|
||||
|
||||
ldy #0
|
||||
lda #$8 Start a BLOCK 4 (%00001000)
|
||||
ldx RW.BITMAPCNT
|
||||
|
||||
.62 pha
|
||||
eor RW.BLOCK,y Mark bitmap blocks as "used"
|
||||
sta RW.BLOCK,y
|
||||
pla
|
||||
dex
|
||||
beq .63
|
||||
lsr
|
||||
bne .62
|
||||
lda #$80
|
||||
iny
|
||||
bra .62
|
||||
|
||||
.63 jsr MLI Write Block 4,5...
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcs .9
|
||||
|
||||
dec RW.BITMAPCNT another bitmap block needed ?
|
||||
bne .4
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
RW.BLOCK.SETFF lda #$FF
|
||||
bra RW.BLOCK.SET
|
||||
RW.BLOCK.SET00 lda #$00
|
||||
RW.BLOCK.SET ldx #0
|
||||
.1 sta RW.BLOCK,x
|
||||
sta RW.BLOCK+$100,x
|
||||
inx
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.MLIWRITEBLOCK
|
||||
.DA #3
|
||||
.DA #$30 Slot 3,Drive 1
|
||||
.DA RW.BLOCK
|
||||
RW.MLIWRITEBLOCK.BLK
|
||||
.DA 2 Start writing block at #2
|
||||
*--------------------------------------
|
||||
RW.RAM31 .DA #$30
|
||||
.DA #5 len=5 chars
|
||||
.AS 'RAM31'
|
||||
*--------------------------------------
|
||||
RW.PGCNT .BS 1
|
||||
RW.FBITMAPCNT .BS 1
|
||||
RW.BITMAPCNT .BS 1
|
||||
RW.SAVEZP0 .BS 256
|
||||
RW.SAVEZP1 .BS 256
|
||||
*--------------------------------------
|
||||
RW.BLOCK2 .DA 0 pointer to previous block
|
||||
.DA 3 pointer to next block
|
||||
.DA #$F5 $F=Vol Dir Header, 5=name len
|
||||
.AS 'RAM31'
|
||||
.BS 10 (RAM31 len=5, fill to 15)
|
||||
.HS 0000000000000000
|
||||
RW.BLOCK2.CT .BS 4 Creation time
|
||||
.HS 0100C3270D version/min version/access/EL/EPB
|
||||
.DA 0 File Count
|
||||
.DA 4 bitmap pointer (Block 2&3 are Volume directory)
|
||||
RW.BLOCK2.TB .BS 2 Total Blocks
|
||||
RW.BLOCK2.END .EQ *
|
||||
*--------------------------------------
|
||||
RW.BLOCK .BS 512
|
||||
*--------------------------------------
|
||||
RW.Print >STAX TmpPtr1
|
||||
ldy #0
|
||||
|
||||
.1 lda (TmpPtr1),y
|
||||
beq .9
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne .1
|
||||
.9 jmp CROUT
|
||||
*--------------------------------------
|
||||
RW.MSG >CSTRING "RAMWorks (I,II,III,z-Ram) Driver For A2osX."
|
||||
RW.MSG.OK >CSTRING "/RAM31 Device Already Installed."
|
||||
RW.MSG.OK1 >CSTRING " Pages Detected."
|
||||
RW.MSG.KO1 >CSTRING "Not Detected."
|
||||
RW.MSG.OK2 >CSTRING "RamWorks Driver Installed."
|
||||
RW.MSG.KO2 >CSTRING "RamWorks Driver Install Error."
|
||||
RW.MSG.OK3 >CSTRING "RamWorks Drive Formatted."
|
||||
RW.MSG.KO3 >CSTRING "RamWorks Drive Format Error."
|
||||
*--------------------------------------
|
||||
* Driver for Ramworks in main LC
|
||||
* $FF00 -> $FF9A (Inclusive)
|
||||
* $FF58 MUST BE $60 (RTS)
|
||||
* DO NOT trash DRV.BLKNUM as ProDOS
|
||||
* reuses it after Block operation
|
||||
*--------------------------------------
|
||||
DRV.COMMAND .EQ $42
|
||||
DRV.BUFF .EQ $44
|
||||
DRV.BLKNUM .EQ $46
|
||||
*--------------------------------------
|
||||
RWDRV.B.START
|
||||
.PH $FF00
|
||||
RWDRV.START cld ProDOS will check that byte!!!
|
||||
ldy DRV.COMMAND 0 = Status ?
|
||||
beq RMDRV.CMDSTATUS
|
||||
|
||||
cpy #3
|
||||
beq RWDRV.EXITOK 3 = Format : nothing to do, exit with no error
|
||||
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
||||
|
||||
lda DRV.BLKNUM
|
||||
sec
|
||||
sbc RWDRV.MAXLO+1
|
||||
lda DRV.BLKNUM+1
|
||||
sbc RWDRV.MAXHI+1
|
||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
||||
|
||||
lda DRV.BLKNUM compute PAGE = blocknumLO *2
|
||||
asl
|
||||
pha
|
||||
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
||||
rol
|
||||
inc +1 for skipping Aux BANK 0
|
||||
plx move page into X
|
||||
beq RWDRV.GOAUX move from/to aux page0/1
|
||||
cpx #$C0
|
||||
bcs RWDRV.GOAUX move from/to aux LC
|
||||
*--------------------------------------
|
||||
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
||||
*--------------------------------------
|
||||
php
|
||||
sei Disable IRQ as no vector set in RW Banks
|
||||
sta RWBankSelect Select RAMWorks Bank
|
||||
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||
|
||||
stx DRV.COMMAND+1 Reuse DRV.COMMAND for RAM PTR
|
||||
stz DRV.COMMAND
|
||||
|
||||
dey Y=CMD, zero if read
|
||||
bne RWDRV.W CC, go write
|
||||
|
||||
sta SETREADAUX
|
||||
ldx #DRV.COMMAND READ:copy from RAM to BUFF
|
||||
ldy #DRV.BUFF
|
||||
bra RWDRV.RW
|
||||
|
||||
RWDRV.W sta SETWRITEAUX
|
||||
ldx #DRV.BUFF
|
||||
ldy #DRV.COMMAND WRITE:copy from BUFF to RAM
|
||||
|
||||
RWDRV.RW stx RWDRV.RW.SRC+1
|
||||
sty RWDRV.RW.DST+1
|
||||
|
||||
ldx #2 2 pages to copy
|
||||
|
||||
ldy #0
|
||||
|
||||
RWDRV.RW.SRC lda ($FF),y
|
||||
RWDRV.RW.DST sta ($FF),y
|
||||
iny
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
.HS 24 BIT Zero Page to skip RTS
|
||||
RWDRV.RTS rts $FF58 Must Be RTS
|
||||
|
||||
inc DRV.BUFF+1
|
||||
inc DRV.COMMAND+1
|
||||
dex
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
stz RWBankSelect
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
plp
|
||||
|
||||
RMDRV.CMDSTATUS
|
||||
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
||||
RWDRV.MAXHI ldy #$FF
|
||||
|
||||
RWDRV.EXITOK lda #0 make A=0
|
||||
clc
|
||||
rts
|
||||
|
||||
RWDRV.IOERR lda #MLI.ERR.IO Carry already set
|
||||
rts
|
||||
*--------------------------------------
|
||||
* X=Page(0/1 or LC),A=Bank
|
||||
*--------------------------------------
|
||||
RWDRV.GOAUX pha save BANK
|
||||
|
||||
sta SETWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
|
||||
.1 lda RWDRV.XM.RUN-1,y
|
||||
sta RWDRVX.XM.SAVE-1,y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
pla restore BANK
|
||||
|
||||
sta SETREADAUX
|
||||
jsr RWDRVX.START Setup Code in main mem at $300 for data move
|
||||
* returns : CC=WRITE, CS=READ
|
||||
sta CLRREADAUX CLRWRITEAUX already triggered by code copy
|
||||
jsr RWDRV.XM.RUN Now execute generated code in main memory
|
||||
|
||||
sta SETREADAUX
|
||||
jsr RWDRVX.RESTORE
|
||||
sta CLRREADAUX
|
||||
rts A & carry setup properly by RWDRVX.RESTORE
|
||||
|
||||
RWDRV.END .EP
|
||||
RWDRV.B.END
|
||||
RWDRV.SIZE .EQ RWDRV.B.END-RWDRV.B.START
|
||||
*--------------------------------------
|
||||
* Driver for Ramworks in aux memory
|
||||
* $0200 -> $02FF TMP buffer for PAGE copy
|
||||
* $0300 -> $03FD (Inclusive)
|
||||
* do not trash $03FE-$03FF (IRQ Vector)
|
||||
* X=Page(0/1 or LC),A=Bank
|
||||
*--------------------------------------
|
||||
RMDRVX.TMP .EQ $200
|
||||
RWDRV.XM.RUN .EQ $300
|
||||
*--------------------------------------
|
||||
RWDRVX.B.START
|
||||
.PH $0300
|
||||
RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
||||
txa
|
||||
beq .1 page 0/1, no need to check BANK
|
||||
cmp #$D0 $C0 <= PAGE < $D0 ?
|
||||
bcc .1 no, store in BNK1
|
||||
ora #$10 Remap $C0 page to $D0 BNK2
|
||||
|
||||
.1 ror RWDRVX.XM.RWLC+1 Save Carry to select proper RW bank later
|
||||
|
||||
ldy DRV.BUFF
|
||||
ldx DRV.BUFF+1
|
||||
|
||||
lsr DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE
|
||||
bcc .2 CC=WRITE, CS=READ
|
||||
stz RWDRVX.XM.SRC+1 READ from src LO = 0
|
||||
sta RWDRVX.XM.SRC+2 READ from src HI = PAGE
|
||||
sty RWDRVX.XM.DST+1 WRITE to DRV.BUFF
|
||||
stx RWDRVX.XM.DST+2
|
||||
bra .3
|
||||
|
||||
.2 sty RWDRVX.XM.SRC+1 READ from DRV.BUFF
|
||||
stx RWDRVX.XM.SRC+2
|
||||
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
|
||||
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
|
||||
|
||||
.3 sta CLRWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE
|
||||
.4 lda RWDRVX.XM.START-1,y
|
||||
sta RWDRV.XM.RUN-1,y
|
||||
dey
|
||||
bne .4
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Called form Main LC after RWDRVX.XM execution
|
||||
*--------------------------------------
|
||||
RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
|
||||
.1 lda RWDRVX.XM.SAVE-1,y
|
||||
sta RWDRV.XM.RUN-1,y
|
||||
dey
|
||||
bne .1
|
||||
tya setup A=0 and CC for exit with non error
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* "auXMove" Code, moved from Aux to main $300
|
||||
* $0200 -> $02FF TMP buffer for 2 steps moving between LCs
|
||||
* CC=WRITE :
|
||||
* CS=READ :
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.START php
|
||||
sei
|
||||
|
||||
ldx #0
|
||||
ldy #2 2 pages to copy
|
||||
|
||||
RWDRVX.XM.COPY jsr RWDRV.XM.RUN+RWDRVX.XM.MNLC-RWDRVX.XM.START WRITE:copy from MAIN to TMP
|
||||
|
||||
bcc RWDRVX.XM.SRC CC=WRITE,CS=READ?
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.RWLC-RWDRVX.XM.START READ:copy from BANK to TMP
|
||||
sta SETALTZP
|
||||
|
||||
RWDRVX.XM.SRC lda $FFFF,x
|
||||
sta RMDRVX.TMP,x
|
||||
inx
|
||||
bne RWDRVX.XM.SRC
|
||||
|
||||
sta CLRALTZP
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.MNLC-RWDRVX.XM.START READ:copy from TMP to MAIN
|
||||
|
||||
bcs RWDRVX.XM.1 CC=WRITE,CS=READ?
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.RWLC-RWDRVX.XM.START WRITE:copy from TMP to BANK
|
||||
sta SETALTZP
|
||||
|
||||
RWDRVX.XM.1 lda RMDRVX.TMP,x
|
||||
RWDRVX.XM.DST sta $FFFF,x
|
||||
inx
|
||||
bne RWDRVX.XM.1
|
||||
|
||||
sta CLRALTZP
|
||||
|
||||
inc RWDRV.XM.RUN+RWDRVX.XM.SRC+2-RWDRVX.XM.START
|
||||
inc RWDRV.XM.RUN+RWDRVX.XM.DST+2-RWDRVX.XM.START
|
||||
dey
|
||||
bne RWDRVX.XM.COPY
|
||||
|
||||
plp
|
||||
|
||||
RWDRVX.XM.MNLC stz RWBankSelect ProDOS always uses LCBANK1
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
rts
|
||||
|
||||
RWDRVX.XM.RWLC lda #$FF
|
||||
bpl RWDRVX.XM.BANK
|
||||
bit RRAMWRAMBNK2
|
||||
bit RRAMWRAMBNK2
|
||||
RWDRVX.XM.BANK lda #$FF
|
||||
sta RWBankSelect
|
||||
rts
|
||||
|
||||
RWDRVX.XM.END
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.SIZE .EQ RWDRVX.XM.END-RWDRVX.XM.START
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.SAVE .BS RWDRVX.XM.SIZE
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
RWDRVX.B.END
|
||||
RWDRVX.SIZE .EQ RWDRVX.B.END-RWDRVX.B.START
|
||||
*--------------------------------------
|
||||
* CONTROL SECTION :
|
||||
*--------------------------------------
|
||||
.DO RWDRV.RTS=$FF58
|
||||
.ELSE
|
||||
ERROR:RWDRV.RTS <> $FF58
|
||||
.FIN
|
||||
.DO RWDRV.SIZE>$9B
|
||||
ERROR:RWDRV.SIZE too big
|
||||
.FIN
|
||||
.DO RWDRVX.SIZE>$FE
|
||||
ERROR:RWDRVX.SIZE too big
|
||||
.FIN
|
||||
.DO RWDRVX.XM.SIZE>$F0
|
||||
ERROR:RWDRVX.XM.SIZE too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KM.RAMWORKS.S
|
||||
ASM
|
0
SYS/KM.SATURN.S.txt
Normal file
0
SYS/KM.SATURN.S.txt
Normal file
Loading…
Reference in New Issue
Block a user