mirror of https://github.com/A2osX/A2osX.git
Loader & KM modules implemented
This commit is contained in:
parent
c04970fa55
commit
8be8351136
Binary file not shown.
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -11,9 +11,9 @@ AUTO 6
|
||||||
* setup $BE00 Global page :
|
* setup $BE00 Global page :
|
||||||
* Copy from $1200 to $BE00
|
* Copy from $1200 to $BE00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLIOPEN01.PATH .EQ $200
|
MLIOPEN00.PATH .EQ $200
|
||||||
MLIOPEN01.BUFF .EQ $0C00 1k Buffer for MLI open
|
MLIOPEN00.BUFF .EQ $0C00 1k Buffer for MLI open
|
||||||
MLIREAD01.ADDR .EQ $2000 for loading kernel.bin before moving to LC1
|
MLIREAD00.ADDR .EQ $2000 for loading kernel.bin before moving to LC1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.QC.B.Start
|
A2osX.QC.B.Start
|
||||||
.PH $1000
|
.PH $1000
|
||||||
|
@ -51,7 +51,7 @@ A2osX.QC.init bit RROMBNK1
|
||||||
|
|
||||||
.3 jsr MLI
|
.3 jsr MLI
|
||||||
.DA #MLISETPREFIX
|
.DA #MLISETPREFIX
|
||||||
.DA MLISETPREFIX01
|
.DA MLISETPREFIX00
|
||||||
bcc .4
|
bcc .4
|
||||||
>LDAXI MSG.SETPREFIXKO
|
>LDAXI MSG.SETPREFIXKO
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
|
@ -95,39 +95,39 @@ A2osX.QC.init bit RROMBNK1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||||
.1 lda A2osX.QC.Prefix,x
|
.1 lda A2osX.QC.Prefix,x
|
||||||
sta MLIOPEN01.PATH,x
|
sta MLIOPEN00.PATH,x
|
||||||
dex
|
dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
ldx A2osX.QC.Prefix
|
ldx A2osX.QC.Prefix
|
||||||
ldy #0
|
ldy #0
|
||||||
.2 lda SYSKERNEL+1,y
|
.2 lda SYSKERNEL+1,y
|
||||||
sta MLIOPEN01.PATH+1,x
|
sta MLIOPEN00.PATH+1,x
|
||||||
inx
|
inx
|
||||||
iny
|
iny
|
||||||
cpy SYSKERNEL
|
cpy SYSKERNEL
|
||||||
bne .2
|
bne .2
|
||||||
stx MLIOPEN01.PATH
|
stx MLIOPEN00.PATH
|
||||||
|
|
||||||
>LDAXI MLIOPEN01.PATH
|
>LDAXI MLIOPEN00.PATH
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
|
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLIOPEN
|
.DA #MLIOPEN
|
||||||
.DA MLIOPEN01
|
.DA MLIOPEN00
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda MLIOPEN01+5
|
lda MLIOPEN00+5
|
||||||
sta MLIREAD01+1
|
sta MLIREAD00+1
|
||||||
sta MLICLOSE01+1
|
sta MLICLOSE00+1
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLIREAD
|
.DA #MLIREAD
|
||||||
.DA MLIREAD01
|
.DA MLIREAD00
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLICLOSE
|
.DA #MLICLOSE
|
||||||
.DA MLICLOSE01
|
.DA MLICLOSE00
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
php
|
php
|
||||||
|
@ -136,7 +136,7 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||||
lda RRAMWRAMBNK1
|
lda RRAMWRAMBNK1
|
||||||
lda RRAMWRAMBNK1
|
lda RRAMWRAMBNK1
|
||||||
|
|
||||||
>LDYAI MLIREAD01.ADDR+$1F00
|
>LDYAI MLIREAD00.ADDR+$1F00
|
||||||
>STYA TmpPtr1
|
>STYA TmpPtr1
|
||||||
>LDYAI $E000+$1F00
|
>LDYAI $E000+$1F00
|
||||||
>STYA TmpPtr2
|
>STYA TmpPtr2
|
||||||
|
@ -177,18 +177,18 @@ A2osX.QC.PrintAX
|
||||||
.9 jsr CROUT
|
.9 jsr CROUT
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLISETPREFIX01 .DA #1
|
MLISETPREFIX00 .DA #1
|
||||||
.DA A2osX.QC.Prefix
|
.DA A2osX.QC.Prefix
|
||||||
MLIOPEN01 .DA #3
|
MLIOPEN00 .DA #3
|
||||||
.DA MLIOPEN01.PATH
|
.DA MLIOPEN00.PATH
|
||||||
.DA MLIOPEN01.BUFF
|
.DA MLIOPEN00.BUFF
|
||||||
.BS 1
|
.BS 1
|
||||||
MLIREAD01 .DA #4
|
MLIREAD00 .DA #4
|
||||||
.BS 1
|
.BS 1
|
||||||
.DA MLIREAD01.ADDR
|
.DA MLIREAD00.ADDR
|
||||||
.DA $1FFA
|
.DA $1FFA
|
||||||
.BS 2
|
.BS 2
|
||||||
MLICLOSE01 .DA #1
|
MLICLOSE00 .DA #1
|
||||||
.BS 1
|
.BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYSKERNEL >PSTRING "SYS/KERNEL"
|
SYSKERNEL >PSTRING "SYS/KERNEL"
|
||||||
|
|
622
A2osX.S.RW.txt
622
A2osX.S.RW.txt
|
@ -1,622 +0,0 @@
|
||||||
PR#3
|
|
||||||
PREFIX /DATA/A2OSX
|
|
||||||
NEW
|
|
||||||
INC 1
|
|
||||||
AUTO 6
|
|
||||||
.LIST OFF
|
|
||||||
.OP 65C02
|
|
||||||
*--------------------------------------
|
|
||||||
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
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.ONLINE .DA #2
|
|
||||||
.DA #$30 Slot 3,Drive 1
|
|
||||||
.DA RW.ONLINEBUFFER
|
|
||||||
RW.ONLINEBUFFER .BS 16
|
|
||||||
*--------------------------------------
|
|
||||||
RWInit 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
|
|
||||||
*--------------------------------------
|
|
||||||
*
|
|
||||||
*--------------------------------------
|
|
||||||
RWInstall 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
|
|
||||||
*--------------------------------------
|
|
||||||
*
|
|
||||||
*--------------------------------------
|
|
||||||
RWFormat 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
|
|
||||||
*--------------------------------------
|
|
||||||
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)
|
|
||||||
* 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 A2OSX.S.RW
|
|
||||||
LOAD A2OSX.S
|
|
||||||
ASM
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
PrintPStrAX >STAX TmpPtr1
|
||||||
|
lda (TmpPtr1)
|
||||||
|
tax
|
||||||
|
beq .9
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
.1 lda (TmpPtr1),y
|
||||||
|
ora #$80
|
||||||
|
jsr COUT
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 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
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE A2OSX.S.TOOLS
|
||||||
|
LOAD A2OSX.S
|
||||||
|
ASM
|
399
A2osX.S.txt
399
A2osX.S.txt
|
@ -1,12 +1,11 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
* .TF A2osX.SYSTEM
|
|
||||||
.TF A
|
.TF A
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
|
@ -18,25 +17,43 @@ AUTO 6
|
||||||
TmpPtr1 .EQ $0 main & aux ZP
|
TmpPtr1 .EQ $0 main & aux ZP
|
||||||
TmpPtr2 .EQ $2 main & aux ZP
|
TmpPtr2 .EQ $2 main & aux ZP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* A2osX LOADER
|
A2osX.Z80Stack .EQ $0F00 $0fff=0ffffh
|
||||||
|
A2osX.RelocAddr .EQ $1000
|
||||||
|
A2osX.KMLOAD .EQ $2000
|
||||||
|
A2osX.KMMAXLEN .EQ $4000
|
||||||
|
A2osX.OpenBuff1 .EQ $6000 1024 Buffer for MLIOPEN01
|
||||||
|
A2osX.OpenBuff2 .EQ $6400 1024 Buffer for MLIOPEN02
|
||||||
|
A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
|
||||||
|
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
||||||
|
KM.Filename .EQ $6A80 MLI.MAXPATH
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.INIT php
|
A2osX.Start .EQ *
|
||||||
pla
|
.PH A2osX.RelocAddr
|
||||||
sei
|
A2osX.Init0 ldx #$FF init 6502 stack to highest
|
||||||
ldx #$FF init 6502 stack to highest
|
|
||||||
txs
|
txs
|
||||||
stx A2osX.SaveSM
|
stx A2osX.SaveSM
|
||||||
pha
|
|
||||||
plp
|
|
||||||
|
|
||||||
* php EDIT:Already Set By ProDOS
|
>LDYAI A2osX.Start
|
||||||
* sei
|
>STYA TmpPtr1
|
||||||
* sta SETALTZP Switch to alt ZP
|
>LDYAI A2osX.RelocAddr
|
||||||
* stx A2osX.SaveSX make Alt SP to highest too
|
>STYA TmpPtr2
|
||||||
* sta CLRALTZP Switch to main ZP
|
|
||||||
* plp
|
ldx #$10 reloc $2000-$2FFF to $1000-$1FFF
|
||||||
|
ldy #0
|
||||||
|
|
||||||
jsr HOME
|
.1 lda (TmpPtr1),y
|
||||||
|
sta (TmpPtr2),y
|
||||||
|
iny
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
inc TmpPtr1+1
|
||||||
|
inc TmpPtr2+1
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jmp A2osX.Init1
|
||||||
|
*--------------------------------------
|
||||||
|
A2osX.Init1 jsr HOME
|
||||||
>LDAXI MSG.STAGE0
|
>LDAXI MSG.STAGE0
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
|
@ -47,8 +64,8 @@ A2osX.INIT php
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
lda MACHID
|
lda MACHID
|
||||||
and #MACHIDRAM
|
and #MACHID.RAM
|
||||||
cmp #MACHIDRAM128
|
cmp #MACHID.RAM.128
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
>LDAXI MSG.SYSMEM.KO
|
>LDAXI MSG.SYSMEM.KO
|
||||||
|
@ -115,11 +132,15 @@ A2osX.Z80 >LDAXI MSG.Z80
|
||||||
|
|
||||||
>LDAXI MSG.Z80.OK
|
>LDAXI MSG.Z80.OK
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
bra A2osX.MLIQuit
|
bra A2osX.EnumKM
|
||||||
|
|
||||||
.1 >LDAXI MSG.Z80.KO
|
.1 >LDAXI MSG.Z80.KO
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
A2osX.EnumKM >LDAXI MSG.KMENUM
|
||||||
|
jsr PrintCStrAX
|
||||||
|
jsr EnumKM
|
||||||
|
*--------------------------------------
|
||||||
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
|
@ -212,6 +233,176 @@ DisableRamDRV php
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
InitZ80 ldx #Z80Code.Size
|
||||||
|
.1 lda Z80Code.Start-1,x
|
||||||
|
sta $1000-1,x 00000H for Z80
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
stz TmpPtr1
|
||||||
|
lda #$C1
|
||||||
|
sta TmpPtr1+1
|
||||||
|
|
||||||
|
.2 sta (TmpPtr1)
|
||||||
|
lda $100D
|
||||||
|
bmi .8
|
||||||
|
inc TmpPtr1+1
|
||||||
|
lda TmpPtr1+1
|
||||||
|
cmp #$C8
|
||||||
|
beq .9
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
sta $100A
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.8 lda TmpPtr1+1
|
||||||
|
and #$0F
|
||||||
|
sta A2osX.Z80Slot
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 stz A2osX.Z80Slot
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
EnumKM.EPB .EQ $0D
|
||||||
|
EnumKM.EL .EQ $27
|
||||||
|
*--------------------------------------
|
||||||
|
EnumKM ldx #0
|
||||||
|
ldy Boot.Prefix
|
||||||
|
.1 inx
|
||||||
|
lda SYS,x
|
||||||
|
sta Boot.Prefix+1,y
|
||||||
|
iny
|
||||||
|
cpx SYS
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
sty Boot.Prefix
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLIOPEN
|
||||||
|
.DA MLIOPEN01
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda MLIOPEN01+5
|
||||||
|
sta MLIREAD01+1
|
||||||
|
sta MLICLOSE01+1
|
||||||
|
|
||||||
|
.2 jsr MLI
|
||||||
|
.DA #MLIREAD
|
||||||
|
.DA MLIREAD01
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
lda #EnumKM.EPB
|
||||||
|
sta EnumKM.EC
|
||||||
|
>LDYAI A2osX.ReadBuff+4
|
||||||
|
>STYA EnumKM.BPTR
|
||||||
|
|
||||||
|
.3 >LDYA EnumKM.BPTR
|
||||||
|
>STYA TmpPtr1
|
||||||
|
lda (TmpPtr1)
|
||||||
|
and #$F0 Empty ?
|
||||||
|
beq .5 yes, skip
|
||||||
|
and #$C0 anything out of type 1,2 or 3 ?
|
||||||
|
bne .5 yes, skip
|
||||||
|
lda (TmpPtr1)
|
||||||
|
and #$0F
|
||||||
|
cmp KM.PREFIX at least enough chars for KM.*?
|
||||||
|
bcc .5 no, skip
|
||||||
|
ldy #$10 file type
|
||||||
|
lda (TmpPtr1),y
|
||||||
|
cmp #$06 'BIN'?
|
||||||
|
bne .5 skip
|
||||||
|
ldy KM.PREFIX
|
||||||
|
.4 lda (TmpPtr1),y
|
||||||
|
cmp KM.PREFIX,y
|
||||||
|
bne .5
|
||||||
|
dey
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
jsr LoadKM
|
||||||
|
|
||||||
|
.5 lda EnumKM.BPTR
|
||||||
|
clc
|
||||||
|
adc #EnumKM.EL
|
||||||
|
sta EnumKM.BPTR
|
||||||
|
bcc .6
|
||||||
|
inc EnumKM.BPTR+1
|
||||||
|
|
||||||
|
.6 dec EnumKM.EC
|
||||||
|
bne .3
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.8 jsr MLI
|
||||||
|
.DA #MLICLOSE
|
||||||
|
.DA MLICLOSE01
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 cmp #MLI.ERR.EOF
|
||||||
|
beq .8
|
||||||
|
pha
|
||||||
|
jsr .8
|
||||||
|
pla
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
EnumKM.EC .BS 1
|
||||||
|
EnumKM.BPTR .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
LoadKM ldx Boot.Prefix
|
||||||
|
.1 lda Boot.Prefix,x
|
||||||
|
sta KM.Filename,x
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldx Boot.Prefix
|
||||||
|
lda (TmpPtr1)
|
||||||
|
and #$0F
|
||||||
|
tay
|
||||||
|
clc
|
||||||
|
adc Boot.Prefix
|
||||||
|
sta KM.Filename
|
||||||
|
tax
|
||||||
|
|
||||||
|
.2 lda (TmpPtr1),y
|
||||||
|
sta KM.Filename,x
|
||||||
|
dex
|
||||||
|
dey
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>LDAXI MSG.KMLOAD
|
||||||
|
jsr PrintCStrAX
|
||||||
|
>LDAXI KM.Filename
|
||||||
|
jsr PrintPStrAX
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLIOPEN
|
||||||
|
.DA MLIOPEN02
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda MLIOPEN02+5
|
||||||
|
sta MLIREAD02+1
|
||||||
|
sta MLICLOSE02+1
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLIREAD
|
||||||
|
.DA MLIREAD02
|
||||||
|
bcs .98
|
||||||
|
jsr .9
|
||||||
|
jsr A2osX.KMLOAD
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
.98 pha
|
||||||
|
jsr .9
|
||||||
|
pla
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 jsr MLI
|
||||||
|
.DA #MLICLOSE
|
||||||
|
.DA MLICLOSE02
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
SetupQuitCode lda RRAMWRAMBNK2
|
SetupQuitCode lda RRAMWRAMBNK2
|
||||||
lda RRAMWRAMBNK2
|
lda RRAMWRAMBNK2
|
||||||
|
|
||||||
|
@ -228,121 +419,7 @@ SetupQuitCode lda RRAMWRAMBNK2
|
||||||
lda RROMBNK1
|
lda RROMBNK1
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintCStrAX >STAX TmpPtr1
|
.INB A2OSX.S.TOOLS
|
||||||
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.STAGE0 >CSTRING "A2osX[Stage0]:Init\n"
|
||||||
MSG.SYSMEM >CSTRING "Checking System Memory..."
|
MSG.SYSMEM >CSTRING "Checking System Memory..."
|
||||||
|
@ -358,8 +435,9 @@ MSG.RAMDRV.KO1 >CSTRING "Uninstall Failed !!!\n"
|
||||||
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||||
|
MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n"
|
||||||
|
MSG.KMLOAD >CSTRING "Loading KM : "
|
||||||
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||||||
*--------------------------------------
|
|
||||||
MSG.CPUTYPEL .DA #MSG.6502
|
MSG.CPUTYPEL .DA #MSG.6502
|
||||||
.DA #MSG.65C02
|
.DA #MSG.65C02
|
||||||
.DA #MSG.R65C02
|
.DA #MSG.R65C02
|
||||||
|
@ -368,30 +446,63 @@ MSG.CPUTYPEH .DA /MSG.6502
|
||||||
.DA /MSG.65C02
|
.DA /MSG.65C02
|
||||||
.DA /MSG.R65C02
|
.DA /MSG.R65C02
|
||||||
.DA /MSG.65C816
|
.DA /MSG.65C816
|
||||||
*--------------------------------------
|
MSG.6502 >CSTRING "6502.\n"
|
||||||
MSG.6502 >CSTRING "NMOS 6502.\n"
|
MSG.65C02 >CSTRING "65C02.\n"
|
||||||
MSG.65C02 >CSTRING "CMOS 65C02.\n"
|
MSG.R65C02 >CSTRING "R65C02.\n"
|
||||||
MSG.R65C02 >CSTRING "Rockwell R65C02.\n"
|
MSG.65C816 >CSTRING "65C816.\n"
|
||||||
MSG.65C816 >CSTRING "16 Bits 65C816.\n"
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLIGETPREFIX01 .DA #1
|
MLIGETPREFIX01 .DA #1
|
||||||
.DA Boot.Prefix
|
.DA Boot.Prefix
|
||||||
|
MLIOPEN01 .DA #3 For DIR listing
|
||||||
|
.DA Boot.Prefix
|
||||||
|
.DA A2osX.OpenBuff1
|
||||||
|
.BS 1
|
||||||
|
MLIREAD01 .DA #4
|
||||||
|
.BS 1
|
||||||
|
.DA A2osX.ReadBuff Load address Dir Blocks
|
||||||
|
.DA $200 Maxlen of Dir Blocks (512)
|
||||||
|
.BS 2
|
||||||
|
MLICLOSE01 .DA #1
|
||||||
|
.BS 1
|
||||||
|
MLIOPEN02 .DA #3
|
||||||
|
.DA KM.Filename
|
||||||
|
.DA A2osX.OpenBuff2
|
||||||
|
.BS 1
|
||||||
|
MLIREAD02 .DA #4
|
||||||
|
.BS 1
|
||||||
|
.DA A2osX.KMLOAD Load address for KMs
|
||||||
|
.DA A2osX.KMMAXLEN Maxlen of KM
|
||||||
|
.BS 2
|
||||||
|
MLICLOSE02 .DA #1
|
||||||
|
.BS 1
|
||||||
MLIQUIT01 .DA #4
|
MLIQUIT01 .DA #4
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA #0
|
.DA #0
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Boot.Prefix .BS MLI.MAXPATH
|
SYS >PSTRING "SYS/"
|
||||||
*--------------------------------------
|
KM.PREFIX >PSTRING "KM."
|
||||||
HEX .BS 2
|
HEX .BS 2
|
||||||
BCD .BS 3
|
BCD .BS 3
|
||||||
bFlag .BS 1
|
bFlag .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB A2OSX.S.Z80
|
Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH Init Stack
|
||||||
|
.HS 3EFF LD A,0FFH Set Flag
|
||||||
|
.HS 320D00 LD (FLAG),A
|
||||||
|
.HS 3200E1 LD (0E100H),A Back to 6502
|
||||||
|
.HS 18F3 JR START Loop
|
||||||
|
.HS 00 FLAG: .DB 0
|
||||||
|
Z80Code.End .EQ *
|
||||||
|
Z80Code.Size .EQ Z80Code.End-Z80Code.Start
|
||||||
|
.EP
|
||||||
.INB A2OSX.S.QC
|
.INB A2OSX.S.QC
|
||||||
.INB A2OSX.S.GP
|
.INB A2OSX.S.GP
|
||||||
*--------------------------------------
|
A2osX.End .EQ *
|
||||||
|
A2osX.SIZE .EQ A2osX.End-A2osX.Start
|
||||||
|
.DO A2osX.SIZE>$1000
|
||||||
|
ERROR:A2osX.SIZE too big
|
||||||
|
.FIN
|
||||||
MAN
|
MAN
|
||||||
SAVE A2OSX.S
|
SAVE A2OSX.S
|
||||||
ASM
|
ASM
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -110,9 +110,9 @@ A2osX.SaveSX .EQ $101 Aux
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
||||||
* Main $300 -> 3EF : <free>
|
* Main $300 -> 3EF : <free>
|
||||||
* Main $3F0 -> 3FF : ProDOS Vectors
|
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
||||||
* Aux $200 -> 3FD : /RAM Driver
|
* Aux $200 -> 3FD : /RAM Driver
|
||||||
* Aux $3FE -> 3FF : RESET Vector
|
* Aux $3FE -> 3FF : IRQ Vector
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Console Screen .EQ $400 -> $7FF
|
* Console Screen .EQ $400 -> $7FF
|
||||||
* System Screen .EQ $800 -> $BFF
|
* System Screen .EQ $800 -> $BFF
|
||||||
|
@ -122,7 +122,6 @@ TmpBuffer256 .EQ $0C00
|
||||||
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEMMGR.LOMEM .EQ $0E30
|
MEMMGR.LOMEM .EQ $0E30
|
||||||
MEMMGR.MLLIMIT .EQ $0E32
|
MEMMGR.MLLIMIT .EQ $0E32
|
||||||
|
@ -134,7 +133,6 @@ MEMMGR.TABLESIZE .EQ $0E3A
|
||||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||||
Z80JMP .EQ $1000
|
Z80JMP .EQ $1000
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEMMGR.TABLE .EQ $1100 256 Handles
|
|
||||||
DEVMGR.TABLE .EQ $1200 K.DEV.MAX*S.DEV.SIZE=20*12=240
|
DEVMGR.TABLE .EQ $1200 K.DEV.MAX*S.DEV.SIZE=20*12=240
|
||||||
TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
|
TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -308,11 +306,6 @@ S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
|
||||||
*
|
*
|
||||||
S.LISTDIR.SIZE .EQ 16
|
S.LISTDIR.SIZE .EQ 16
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.FENTRY STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.FENTRY.F .EQ 0
|
|
||||||
S.FENTRY.COUNT .EQ 1
|
|
||||||
*--------------------------------------
|
|
||||||
* S.BUFRDR STRUCT
|
* S.BUFRDR STRUCT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.BUFRDR.hMEM .EQ 0
|
S.BUFRDR.hMEM .EQ 0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 1000
|
AUTO 1000
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 1000
|
AUTO 1000
|
||||||
|
@ -55,6 +55,7 @@ MLI.ERR.FNOTFND .EQ $46
|
||||||
MLI.ERR.DUPFILE .EQ $47
|
MLI.ERR.DUPFILE .EQ $47
|
||||||
MLI.ERR.OVERRUN .EQ $48
|
MLI.ERR.OVERRUN .EQ $48
|
||||||
MLI.ERR.VOLFULL .EQ $49
|
MLI.ERR.VOLFULL .EQ $49
|
||||||
|
MLI.ERR.EOF .EQ $4C
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLI .EQ $BF00
|
MLI .EQ $BF00
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -73,6 +73,7 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
bcc .10
|
bcc .10
|
||||||
inc ZPMemMgrReqS+1
|
inc ZPMemMgrReqS+1
|
||||||
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
||||||
|
|
||||||
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
||||||
beq .6
|
beq .6
|
||||||
.1 txa
|
.1 txa
|
||||||
|
@ -101,16 +102,19 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
.5 lda ZPMemMgrReqF get requested flags
|
.5 lda ZPMemMgrReqF get requested flags
|
||||||
ora #S.MEM.F.INUSE mark as in use
|
ora #S.MEM.F.INUSE mark as in use
|
||||||
sta (ZPMemMgrSPtr)
|
sta (ZPMemMgrSPtr)
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
inc Mark this slot used by one task
|
inc Mark this slot used by one task
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (TSKMGR.TSKPTR),y
|
lda (TSKMGR.TSKPTR),y
|
||||||
ldy #S.MEM.OWNERPID
|
ldy #S.MEM.OWNERPID
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
ldy #S.MEM.PTR
|
||||||
lda (ZPMemMgrSPtr),y
|
lda (ZPMemMgrSPtr),y
|
||||||
pha
|
pha
|
||||||
|
@ -123,14 +127,17 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
.6 lda ZPMemMgrReqF
|
.6 lda ZPMemMgrReqF
|
||||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||||
beq .7
|
beq .7
|
||||||
|
|
||||||
lda MEMMGR.MHLIMIT target PTR will be page aligned ?
|
lda MEMMGR.MHLIMIT target PTR will be page aligned ?
|
||||||
sec
|
sec
|
||||||
sbc ZPMemMgrReqS
|
sbc ZPMemMgrReqS
|
||||||
beq .7 yes, allocate
|
beq .7 yes, allocate
|
||||||
|
|
||||||
tay no, reserve a free slot to fill gap
|
tay no, reserve a free slot to fill gap
|
||||||
lda #0
|
lda #0
|
||||||
jsr S.AddSlot
|
jsr S.AddSlot
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
.7 >LDYA ZPMemMgrReqS
|
.7 >LDYA ZPMemMgrReqS
|
||||||
jsr S.AddSlot
|
jsr S.AddSlot
|
||||||
bcs .99
|
bcs .99
|
||||||
|
@ -139,6 +146,7 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
lda ZPMemMgrReqF
|
lda ZPMemMgrReqF
|
||||||
ora #S.MEM.F.INUSE
|
ora #S.MEM.F.INUSE
|
||||||
sta (ZPMemMgrSPtr) set Flags
|
sta (ZPMemMgrSPtr) set Flags
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
ldy #S.MEM.REFCNT Mark this slot referenced
|
ldy #S.MEM.REFCNT Mark this slot referenced
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
@ -168,10 +176,9 @@ S.FreeMemA0 phy
|
||||||
phx
|
phx
|
||||||
jsr S.GetMemByIDA
|
jsr S.GetMemByIDA
|
||||||
lda (ZPMemMgrSPtr)
|
lda (ZPMemMgrSPtr)
|
||||||
bmi .10 In use ?
|
bpl * In use ?
|
||||||
bra *
|
|
||||||
|
|
||||||
.10 ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
||||||
dec only one left ?
|
dec only one left ?
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2osX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /DATA/A2OSX
|
PREFIX /A2OSX.BUILD
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
NEW
|
||||||
|
BLOAD A
|
||||||
|
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1FFA
|
Loading…
Reference in New Issue