mirror of
https://github.com/A2osX/A2osX.git
synced 2024-12-26 11:30:07 +00:00
Loader & KM modules implemented
This commit is contained in:
parent
c04970fa55
commit
8be8351136
BIN
A2OSX.BOOT.DSK
Normal file
BIN
A2OSX.BOOT.DSK
Normal file
Binary file not shown.
BIN
A2OSX.BUILD.HDV
Normal file
BIN
A2OSX.BUILD.HDV
Normal file
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -11,9 +11,9 @@ AUTO 6
|
||||
* 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
|
||||
MLIOPEN00.PATH .EQ $200
|
||||
MLIOPEN00.BUFF .EQ $0C00 1k Buffer for MLI open
|
||||
MLIREAD00.ADDR .EQ $2000 for loading kernel.bin before moving to LC1
|
||||
*--------------------------------------
|
||||
A2osX.QC.B.Start
|
||||
.PH $1000
|
||||
@ -51,7 +51,7 @@ A2osX.QC.init bit RROMBNK1
|
||||
|
||||
.3 jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA MLISETPREFIX01
|
||||
.DA MLISETPREFIX00
|
||||
bcc .4
|
||||
>LDAXI MSG.SETPREFIXKO
|
||||
jsr A2osX.QC.PrintAX
|
||||
@ -95,39 +95,39 @@ A2osX.QC.init bit RROMBNK1
|
||||
*--------------------------------------
|
||||
A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||
.1 lda A2osX.QC.Prefix,x
|
||||
sta MLIOPEN01.PATH,x
|
||||
sta MLIOPEN00.PATH,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
ldx A2osX.QC.Prefix
|
||||
ldy #0
|
||||
.2 lda SYSKERNEL+1,y
|
||||
sta MLIOPEN01.PATH+1,x
|
||||
sta MLIOPEN00.PATH+1,x
|
||||
inx
|
||||
iny
|
||||
cpy SYSKERNEL
|
||||
bne .2
|
||||
stx MLIOPEN01.PATH
|
||||
stx MLIOPEN00.PATH
|
||||
|
||||
>LDAXI MLIOPEN01.PATH
|
||||
>LDAXI MLIOPEN00.PATH
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN01
|
||||
.DA MLIOPEN00
|
||||
bcs .9
|
||||
|
||||
lda MLIOPEN01+5
|
||||
sta MLIREAD01+1
|
||||
sta MLICLOSE01+1
|
||||
lda MLIOPEN00+5
|
||||
sta MLIREAD00+1
|
||||
sta MLICLOSE00+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD01
|
||||
.DA MLIREAD00
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE01
|
||||
.DA MLICLOSE00
|
||||
bcs .9
|
||||
|
||||
php
|
||||
@ -136,7 +136,7 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI MLIREAD01.ADDR+$1F00
|
||||
>LDYAI MLIREAD00.ADDR+$1F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $E000+$1F00
|
||||
>STYA TmpPtr2
|
||||
@ -177,18 +177,18 @@ A2osX.QC.PrintAX
|
||||
.9 jsr CROUT
|
||||
rts
|
||||
*--------------------------------------
|
||||
MLISETPREFIX01 .DA #1
|
||||
MLISETPREFIX00 .DA #1
|
||||
.DA A2osX.QC.Prefix
|
||||
MLIOPEN01 .DA #3
|
||||
.DA MLIOPEN01.PATH
|
||||
.DA MLIOPEN01.BUFF
|
||||
MLIOPEN00 .DA #3
|
||||
.DA MLIOPEN00.PATH
|
||||
.DA MLIOPEN00.BUFF
|
||||
.BS 1
|
||||
MLIREAD01 .DA #4
|
||||
MLIREAD00 .DA #4
|
||||
.BS 1
|
||||
.DA MLIREAD01.ADDR
|
||||
.DA MLIREAD00.ADDR
|
||||
.DA $1FFA
|
||||
.BS 2
|
||||
MLICLOSE01 .DA #1
|
||||
MLICLOSE00 .DA #1
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
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
|
143
A2osX.S.TOOLS.txt
Normal file
143
A2osX.S.TOOLS.txt
Normal file
@ -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
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
* .TF A2osX.SYSTEM
|
||||
.TF A
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
@ -18,25 +17,43 @@ AUTO 6
|
||||
TmpPtr1 .EQ $0 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
|
||||
pla
|
||||
sei
|
||||
ldx #$FF init 6502 stack to highest
|
||||
A2osX.Start .EQ *
|
||||
.PH A2osX.RelocAddr
|
||||
A2osX.Init0 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
|
||||
>LDYAI A2osX.Start
|
||||
>STYA TmpPtr1
|
||||
>LDYAI A2osX.RelocAddr
|
||||
>STYA TmpPtr2
|
||||
|
||||
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
|
||||
jsr PrintCStrAX
|
||||
|
||||
@ -47,8 +64,8 @@ A2osX.INIT php
|
||||
jsr PrintCStrAX
|
||||
|
||||
lda MACHID
|
||||
and #MACHIDRAM
|
||||
cmp #MACHIDRAM128
|
||||
and #MACHID.RAM
|
||||
cmp #MACHID.RAM.128
|
||||
beq .1
|
||||
|
||||
>LDAXI MSG.SYSMEM.KO
|
||||
@ -115,11 +132,15 @@ A2osX.Z80 >LDAXI MSG.Z80
|
||||
|
||||
>LDAXI MSG.Z80.OK
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.MLIQuit
|
||||
bra A2osX.EnumKM
|
||||
|
||||
.1 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.EnumKM >LDAXI MSG.KMENUM
|
||||
jsr PrintCStrAX
|
||||
jsr EnumKM
|
||||
*--------------------------------------
|
||||
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
@ -212,6 +233,176 @@ DisableRamDRV php
|
||||
sec
|
||||
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
|
||||
lda RRAMWRAMBNK2
|
||||
|
||||
@ -228,121 +419,7 @@ SetupQuitCode lda RRAMWRAMBNK2
|
||||
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
|
||||
.INB A2OSX.S.TOOLS
|
||||
*--------------------------------------
|
||||
MSG.STAGE0 >CSTRING "A2osX[Stage0]:Init\n"
|
||||
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.OK >CSTRING "Detected In Slot %d.\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.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
.DA #MSG.R65C02
|
||||
@ -368,30 +446,63 @@ 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"
|
||||
MSG.6502 >CSTRING "6502.\n"
|
||||
MSG.65C02 >CSTRING "65C02.\n"
|
||||
MSG.R65C02 >CSTRING "R65C02.\n"
|
||||
MSG.65C816 >CSTRING "65C816.\n"
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.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
|
||||
.DA #0
|
||||
.DA 0
|
||||
.DA #0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
Boot.Prefix .BS MLI.MAXPATH
|
||||
*--------------------------------------
|
||||
SYS >PSTRING "SYS/"
|
||||
KM.PREFIX >PSTRING "KM."
|
||||
HEX .BS 2
|
||||
BCD .BS 3
|
||||
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.GP
|
||||
*--------------------------------------
|
||||
A2osX.End .EQ *
|
||||
A2osX.SIZE .EQ A2osX.End-A2osX.Start
|
||||
.DO A2osX.SIZE>$1000
|
||||
ERROR:A2osX.SIZE too big
|
||||
.FIN
|
||||
MAN
|
||||
SAVE A2OSX.S
|
||||
ASM
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
0
BIN/PASSWD.S.txt
Normal file
0
BIN/PASSWD.S.txt
Normal file
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
0
BIN/USERADD.S.txt
Normal file
0
BIN/USERADD.S.txt
Normal file
0
BIN/USERDEL.S.txt
Normal file
0
BIN/USERDEL.S.txt
Normal file
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -110,9 +110,9 @@ A2osX.SaveSX .EQ $101 Aux
|
||||
*--------------------------------------
|
||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : <free>
|
||||
* Main $3F0 -> 3FF : ProDOS Vectors
|
||||
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
||||
* Aux $200 -> 3FD : /RAM Driver
|
||||
* Aux $3FE -> 3FF : RESET Vector
|
||||
* Aux $3FE -> 3FF : IRQ Vector
|
||||
*--------------------------------------
|
||||
* Console Screen .EQ $400 -> $7FF
|
||||
* System Screen .EQ $800 -> $BFF
|
||||
@ -122,7 +122,6 @@ TmpBuffer256 .EQ $0C00
|
||||
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
||||
*--------------------------------------
|
||||
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
||||
|
||||
*--------------------------------------
|
||||
MEMMGR.LOMEM .EQ $0E30
|
||||
MEMMGR.MLLIMIT .EQ $0E32
|
||||
@ -134,7 +133,6 @@ MEMMGR.TABLESIZE .EQ $0E3A
|
||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||
Z80JMP .EQ $1000
|
||||
*--------------------------------------
|
||||
MEMMGR.TABLE .EQ $1100 256 Handles
|
||||
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
|
||||
*--------------------------------------
|
||||
@ -308,11 +306,6 @@ S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
|
||||
*
|
||||
S.LISTDIR.SIZE .EQ 16
|
||||
*--------------------------------------
|
||||
* S.FENTRY STRUCT
|
||||
*--------------------------------------
|
||||
S.FENTRY.F .EQ 0
|
||||
S.FENTRY.COUNT .EQ 1
|
||||
*--------------------------------------
|
||||
* S.BUFRDR STRUCT
|
||||
*--------------------------------------
|
||||
S.BUFRDR.hMEM .EQ 0
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
@ -55,6 +55,7 @@ MLI.ERR.FNOTFND .EQ $46
|
||||
MLI.ERR.DUPFILE .EQ $47
|
||||
MLI.ERR.OVERRUN .EQ $48
|
||||
MLI.ERR.VOLFULL .EQ $49
|
||||
MLI.ERR.EOF .EQ $4C
|
||||
|
||||
*--------------------------------------
|
||||
MLI .EQ $BF00
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -73,6 +73,7 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
bcc .10
|
||||
inc ZPMemMgrReqS+1
|
||||
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
||||
|
||||
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
||||
beq .6
|
||||
.1 txa
|
||||
@ -101,16 +102,19 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
.5 lda ZPMemMgrReqF get requested flags
|
||||
ora #S.MEM.F.INUSE mark as in use
|
||||
sta (ZPMemMgrSPtr)
|
||||
|
||||
lda #0
|
||||
ldy #S.MEM.BIN
|
||||
sta (ZPMemMgrSPtr),y
|
||||
inc Mark this slot used by one task
|
||||
ldy #S.MEM.REFCNT
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y
|
||||
pha
|
||||
@ -123,14 +127,17 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
.6 lda ZPMemMgrReqF
|
||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||
beq .7
|
||||
|
||||
lda MEMMGR.MHLIMIT target PTR will be page aligned ?
|
||||
sec
|
||||
sbc ZPMemMgrReqS
|
||||
beq .7 yes, allocate
|
||||
|
||||
tay no, reserve a free slot to fill gap
|
||||
lda #0
|
||||
jsr S.AddSlot
|
||||
bcs .99
|
||||
|
||||
.7 >LDYA ZPMemMgrReqS
|
||||
jsr S.AddSlot
|
||||
bcs .99
|
||||
@ -139,6 +146,7 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
lda ZPMemMgrReqF
|
||||
ora #S.MEM.F.INUSE
|
||||
sta (ZPMemMgrSPtr) set Flags
|
||||
|
||||
lda #1
|
||||
ldy #S.MEM.REFCNT Mark this slot referenced
|
||||
sta (ZPMemMgrSPtr),y
|
||||
@ -168,10 +176,9 @@ S.FreeMemA0 phy
|
||||
phx
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .10 In use ?
|
||||
bra *
|
||||
bpl * In use ?
|
||||
|
||||
.10 ldy #S.MEM.REFCNT
|
||||
ldy #S.MEM.REFCNT
|
||||
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
||||
dec only one left ?
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2osX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
4
_Make_SYS.txt
Normal file
4
_Make_SYS.txt
Normal file
@ -0,0 +1,4 @@
|
||||
PREFIX /A2OSX.BUILD
|
||||
NEW
|
||||
BLOAD A
|
||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1FFA
|
Loading…
Reference in New Issue
Block a user