mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-06 10:29:30 +00:00
398 lines
7.5 KiB
Plaintext
398 lines
7.5 KiB
Plaintext
PR#3
|
||
PREFIX /DATA/A2OSX
|
||
NEW
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
* .TF A2osX.SYSTEM
|
||
.TF A
|
||
*--------------------------------------
|
||
.INB INC/MACROS.I
|
||
.INB INC/A2OSX.I
|
||
.INB INC/IO.I
|
||
.INB INC/MONITOR.I
|
||
.INB INC/PRODOS.I
|
||
*--------------------------------------
|
||
TmpPtr1 .EQ $0 main & aux ZP
|
||
TmpPtr2 .EQ $2 main & aux ZP
|
||
*--------------------------------------
|
||
* A2osX LOADER
|
||
*--------------------------------------
|
||
A2osX.INIT php
|
||
pla
|
||
sei
|
||
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
|
||
|
||
>LDAXI MSG.SYSMEM
|
||
jsr PrintCStrAX
|
||
|
||
lda MACHID
|
||
and #MACHIDRAM
|
||
cmp #MACHIDRAM128
|
||
beq .1
|
||
|
||
>LDAXI MSG.SYSMEM.KO
|
||
jsr PrintCStrAX
|
||
bra *
|
||
|
||
.1 >LDAXI MSG.SYSMEM.OK
|
||
jsr PrintCStrAX
|
||
|
||
>LDAXI MSG.CPU
|
||
jsr PrintCStrAX
|
||
jsr Init6502
|
||
ldy A2osX.CPUTYPE
|
||
lda MSG.CPUTYPEH,y
|
||
tax
|
||
lda MSG.CPUTYPEL,y
|
||
jsr PrintCStrAX
|
||
|
||
lda A2osX.CPUTYPE
|
||
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
|
||
bcc .2
|
||
tax
|
||
beq .1
|
||
>LDAXI MSG.RAMDRV.KO1
|
||
jsr PrintCStrAX
|
||
bra A2osX.Z80
|
||
|
||
.1 >LDAXI MSG.RAMDRV.KO0
|
||
jsr PrintCStrAX
|
||
bra A2osX.Z80
|
||
.2 >LDAXI MSG.RAMDRV.OK
|
||
jsr PrintCStrAX
|
||
*--------------------------------------
|
||
A2osX.Z80 >LDAXI MSG.Z80
|
||
jsr PrintCStrAX
|
||
jsr InitZ80
|
||
bcs .1
|
||
pha Push Z80Slot
|
||
|
||
>LDAXI MSG.Z80.OK
|
||
jsr PrintCStrAX
|
||
bra A2osX.MLIQuit
|
||
|
||
.1 >LDAXI MSG.Z80.KO
|
||
jsr PrintCStrAX
|
||
*--------------------------------------
|
||
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||
jsr PrintCStrAX
|
||
|
||
jsr SetupQuitCode
|
||
|
||
>DEBUG
|
||
|
||
jsr MLI
|
||
.DA #MLIQUIT
|
||
.DA MLIQUIT01
|
||
bra *
|
||
*--------------------------------------
|
||
* Out:
|
||
* A = 0, 6502
|
||
* A = 1, 65C02
|
||
* A = 2, R65C02
|
||
* A = 3, 65C816
|
||
*--------------------------------------
|
||
Init6502 ldy #0 Test 6502 BCD bug
|
||
sed
|
||
lda #$99
|
||
clc
|
||
adc #$01
|
||
cld
|
||
bmi .9 BUG!, we have 6502
|
||
|
||
ldy #3 test 65C816 TYX Instruction
|
||
ldx #0
|
||
.OP 65816
|
||
tyx TYX: if 65C816, x becomes non-zero
|
||
.OP 65C02
|
||
bne .9 worked! 65C816
|
||
|
||
dey y=2 -> R65C02
|
||
ldx $EA save zp $EA
|
||
stz $EA store 0 in $EA
|
||
.OP 65R02
|
||
smb 7,$EA if not Rockwell, assemble as nop nop
|
||
.OP 65C02
|
||
asl $EA cs if Rockwell
|
||
stx $EA restore zp $EA
|
||
bcs .9
|
||
|
||
dey y=1 -> 65C02
|
||
|
||
.9 sty A2osX.CPUTYPE
|
||
rts
|
||
*--------------------------------------
|
||
DisableRamDRV php
|
||
sei
|
||
lda DEVPTRS3D2
|
||
cmp DEVPTRS0D1
|
||
bne .1
|
||
lda DEVPTRS3D2+1
|
||
cmp DEVPTRS0D1+1
|
||
beq .9 S3D2=NODEV, nothing to do
|
||
|
||
.1 ldx DEVCNT
|
||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||
and #$F3
|
||
cmp #$B3
|
||
beq .3
|
||
dex
|
||
bpl .2
|
||
plp
|
||
lda #1 No device found, exit with error
|
||
sec
|
||
rts
|
||
|
||
.3 ldx #0
|
||
.4 lda DEVLST+1,x
|
||
sta DEVLST,x
|
||
inx
|
||
cpx DEVCNT
|
||
bne .4
|
||
|
||
stz DEVLST,x
|
||
dec DEVCNT
|
||
|
||
lda DEVPTRS0D1
|
||
sta DEVPTRS3D2
|
||
lda DEVPTRS0D1+1
|
||
sta DEVPTRS3D2+1
|
||
plp
|
||
clc Success!!
|
||
rts
|
||
|
||
.9 plp
|
||
lda #0 Not detected
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
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
|
||
bne .1
|
||
|
||
lda RROMBNK1
|
||
rts
|
||
*--------------------------------------
|
||
PrintCStrAX >STAX TmpPtr1
|
||
pla
|
||
sta TmpPtr2
|
||
pla
|
||
sta TmpPtr2+1
|
||
|
||
ldy #0
|
||
.1 lda (TmpPtr1),y
|
||
beq .9
|
||
cmp #'%'
|
||
bne .4
|
||
|
||
iny
|
||
lda (TmpPtr1),y
|
||
beq .9
|
||
cmp #'d'
|
||
bne .2
|
||
pla
|
||
jsr PrintADec
|
||
bra .8
|
||
|
||
.2 cmp #'D'
|
||
bne .3
|
||
pla
|
||
plx
|
||
jsr PrintAXDec
|
||
bra .8
|
||
|
||
.3 cmp #'h'
|
||
bne .4
|
||
pla
|
||
jsr PRBYTE
|
||
|
||
.4 cmp #'\'
|
||
bne .7
|
||
iny
|
||
lda (TmpPtr1),y
|
||
beq .9
|
||
cmp #'n'
|
||
bne .9
|
||
lda #$0D
|
||
|
||
.7 ora #$80
|
||
jsr COUT
|
||
.8 iny
|
||
bne .1
|
||
|
||
.9 lda TmpPtr2+1
|
||
pha
|
||
lda TmpPtr2
|
||
pha
|
||
rts
|
||
*--------------------------------------
|
||
PrintADec ldx #0
|
||
PrintAXDec >STAX HEX
|
||
PrintDec stz BCD
|
||
stz BCD+1
|
||
stz BCD+2
|
||
|
||
phy
|
||
|
||
ldx #16 let's roll 16 bits
|
||
sed
|
||
.2 asl HEX
|
||
rol HEX+1
|
||
php cpy will disturb carry while BCD adc
|
||
ldy #0
|
||
.3 plp
|
||
lda BCD,y
|
||
adc BCD,y
|
||
sta BCD,y
|
||
php
|
||
iny
|
||
cpy #3 Last byte of BCDBUF?
|
||
bne .3
|
||
plp
|
||
dex
|
||
bne .2
|
||
|
||
cld
|
||
|
||
stz bFlag
|
||
|
||
ldx #2
|
||
.4 lda BCD,x
|
||
lsr
|
||
lsr
|
||
lsr
|
||
lsr
|
||
bne .5
|
||
bit bFlag
|
||
bpl .6
|
||
.5 sec
|
||
ror bFlag
|
||
ora #$B0
|
||
jsr COUT
|
||
.6 lda BCD,x
|
||
and #$0F
|
||
bne .7
|
||
bit bFlag
|
||
bpl .8
|
||
.7 sec
|
||
ror bFlag
|
||
ora #$B0
|
||
jsr COUT
|
||
.8 dex
|
||
bpl .4
|
||
|
||
bit bFlag
|
||
bmi .9
|
||
lda #$B0
|
||
jsr COUT
|
||
|
||
.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.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.Z80 >CSTRING "Detecting Z80 CPU..."
|
||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||
*--------------------------------------
|
||
MSG.CPUTYPEL .DA #MSG.6502
|
||
.DA #MSG.65C02
|
||
.DA #MSG.R65C02
|
||
.DA #MSG.65C816
|
||
MSG.CPUTYPEH .DA /MSG.6502
|
||
.DA /MSG.65C02
|
||
.DA /MSG.R65C02
|
||
.DA /MSG.65C816
|
||
*--------------------------------------
|
||
MSG.6502 >CSTRING "NMOS 6502.\n"
|
||
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.Z80
|
||
.INB A2OSX.S.QC
|
||
.INB A2OSX.S.GP
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE A2OSX.S
|
||
ASM
|