2022-03-13 12:58:15 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
.LIST OFF
|
|
|
|
|
.OP 65C02
|
|
|
|
|
.OR $2000
|
2022-09-17 11:35:52 +00:00
|
|
|
|
.TF sys/pm.ramworks
|
2022-03-13 12:58:15 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
.INB inc/macros.i
|
|
|
|
|
.INB inc/io.i
|
|
|
|
|
.INB inc/monitor.i
|
|
|
|
|
.INB inc/mli.i
|
|
|
|
|
.INB inc/mli.e.i
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
TmpPtr1 .EQ $0
|
|
|
|
|
TmpPtr2 .EQ $2
|
|
|
|
|
Type .EQ $4
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.SAVEZP0 .EQ $2800
|
|
|
|
|
RW.SAVEZP1 .EQ $2900
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.BLOCK .EQ $2A00
|
|
|
|
|
RW.ONLINEBUFFER .EQ $2C00
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* A2OSX.SYSTEM relocated at $1000 !!!
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
SEBankSelect .EQ $C071
|
|
|
|
|
RWBankSelect .EQ $C073
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.Init >LDYAI RW.MSG
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
|
|
|
|
|
jsr RW.CheckRAM3
|
|
|
|
|
bcs .5
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.RAM3OK
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.5 jsr RW.DisableRAM
|
|
|
|
|
bcc .10
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.RAMDISKO
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.10 >LDYAI RW.MSG.RAMDISOK
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
|
|
|
|
|
lda #RWBankSelect
|
|
|
|
|
jsr RW.DetectHW
|
|
|
|
|
bcc .1
|
|
|
|
|
|
|
|
|
|
lda #SEBankSelect
|
|
|
|
|
jsr RW.DetectHW
|
|
|
|
|
bcc .1
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.KO1
|
|
|
|
|
bra .9
|
|
|
|
|
|
|
|
|
|
.1 tay save RAM drive pages
|
|
|
|
|
|
|
|
|
|
pha
|
|
|
|
|
|
|
|
|
|
lsr divide by 4 to compute KB size
|
|
|
|
|
ror .12+1
|
|
|
|
|
lsr
|
|
|
|
|
ror .12+1
|
|
|
|
|
|
|
|
|
|
.12 ldx #$00 X,A = RAM drive size
|
|
|
|
|
phx Push Kbyte LO
|
|
|
|
|
pha Push Kbyte HI
|
|
|
|
|
|
|
|
|
|
tya
|
|
|
|
|
inc + 1 page AUX mem
|
|
|
|
|
|
|
|
|
|
pha Total page detected
|
|
|
|
|
|
|
|
|
|
lsr divide by 4 to compute KB size
|
|
|
|
|
ror .11+1
|
|
|
|
|
lsr
|
|
|
|
|
ror .11+1
|
|
|
|
|
|
|
|
|
|
.11 ldx #$00 X,A = Total KB detected
|
|
|
|
|
phx Push Kbyte LO
|
|
|
|
|
pha Push Kbyte HI
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.OK1
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
|
|
|
|
|
jsr RW.Install
|
|
|
|
|
bcc .2
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.KO2
|
|
|
|
|
bra .9
|
|
|
|
|
|
|
|
|
|
.2 >LDYAI RW.MSG.OK2
|
|
|
|
|
jsr PrintFYA
|
|
|
|
|
|
|
|
|
|
jsr RW.Format
|
|
|
|
|
bcc .3
|
|
|
|
|
|
|
|
|
|
>LDYAI RW.MSG.KO3
|
|
|
|
|
bra .9
|
|
|
|
|
|
|
|
|
|
.3 >LDYAI RW.MSG.OK3
|
|
|
|
|
|
|
|
|
|
.9 jsr PrintFYA
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
lda RW.ONLINEBUFFER
|
|
|
|
|
and #$0F
|
|
|
|
|
|
|
|
|
|
cmp #4 'RAM3' ?
|
|
|
|
|
sec
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
tax
|
|
|
|
|
|
|
|
|
|
.1 lda RW.ONLINEBUFFER,x
|
|
|
|
|
eor RW.MSG.RAM3OK,x
|
|
|
|
|
asl ignore b7
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
2023-11-04 14:42:28 +00:00
|
|
|
|
RW.DisableRAM lda GP.DEVPTRS3D2
|
|
|
|
|
cmp GP.DEVPTRS S0D1=NOVEV
|
2022-03-13 12:58:15 +00:00
|
|
|
|
bne .1
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
lda GP.DEVPTRS3D2+1
|
|
|
|
|
cmp GP.DEVPTRS+1 S0D1=NODEV
|
2022-03-13 12:58:15 +00:00
|
|
|
|
beq .8 S3D2=NODEV, nothing to do
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.1 ldx GP.DEVCNT
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
2022-03-13 12:58:15 +00:00
|
|
|
|
and #$F3
|
|
|
|
|
cmp #$B3
|
|
|
|
|
beq .3
|
|
|
|
|
|
|
|
|
|
dex
|
|
|
|
|
bpl .2
|
|
|
|
|
|
|
|
|
|
sec No device found, exit with error
|
|
|
|
|
rts
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.3 cpx GP.DEVCNT
|
2022-03-13 12:58:15 +00:00
|
|
|
|
beq .5
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.4 lda GP.DEVLST+1,x
|
|
|
|
|
sta GP.DEVLST,x
|
2022-03-13 12:58:15 +00:00
|
|
|
|
inx
|
2023-11-04 14:42:28 +00:00
|
|
|
|
cpx GP.DEVCNT
|
2022-03-13 12:58:15 +00:00
|
|
|
|
bne .4
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.5 ldx GP.DEVCNT
|
|
|
|
|
stz GP.DEVLST,x
|
|
|
|
|
dec GP.DEVCNT
|
|
|
|
|
lda GP.DEVPTRS
|
|
|
|
|
sta GP.DEVPTRS3D2
|
|
|
|
|
lda GP.DEVPTRS+1
|
|
|
|
|
sta GP.DEVPTRS3D2+1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
jsr RW.ONLINE
|
|
|
|
|
|
|
|
|
|
.8 clc Success!!
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.ONLINE jsr MLI
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.DA #MLI.ONLINE
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.DA RW.ONLINEPARAM
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.ONLINEPARAM .DA #2
|
|
|
|
|
.DA #$B0 Slot 3,Drive 2
|
|
|
|
|
.DA RW.ONLINEBUFFER
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.DetectHW php
|
|
|
|
|
sei
|
|
|
|
|
sta Type
|
|
|
|
|
sta .1+1
|
|
|
|
|
sta .2+1
|
|
|
|
|
sta .3+1
|
|
|
|
|
sta .6+1
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
bpl .1
|
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
|
|
|
|
|
.2 sta RWBankSelect
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Added after David Finnigan from macgui.com testing sessions
|
|
|
|
|
*
|
|
|
|
|
pha
|
|
|
|
|
pla
|
|
|
|
|
*
|
|
|
|
|
* to address possibly a timing issue with Accelerators
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
sta 0
|
|
|
|
|
eor #$FF
|
|
|
|
|
sta 1
|
|
|
|
|
eor #$FF
|
|
|
|
|
inc
|
|
|
|
|
bpl .2
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
.3 stx RWBankSelect
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Added after David Finnigan from macgui.com testing sessions
|
|
|
|
|
*
|
|
|
|
|
pha
|
|
|
|
|
pla
|
|
|
|
|
*
|
|
|
|
|
* to address possibly a timing issue with Accelerators
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
lda 0
|
|
|
|
|
tay
|
|
|
|
|
eor #$ff
|
|
|
|
|
cmp 1
|
|
|
|
|
bne .4
|
|
|
|
|
|
|
|
|
|
inx
|
|
|
|
|
|
|
|
|
|
cpy #127
|
|
|
|
|
bne .3
|
|
|
|
|
|
|
|
|
|
.4 ldy #127 X = detected page count
|
|
|
|
|
|
|
|
|
|
.6 sty RWBankSelect
|
|
|
|
|
|
|
|
|
|
lda RW.SAVEZP0,y
|
|
|
|
|
sta 0
|
|
|
|
|
lda RW.SAVEZP1,y
|
|
|
|
|
sta 1
|
|
|
|
|
dey
|
|
|
|
|
bpl .6
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
plp
|
|
|
|
|
|
|
|
|
|
txa PGCNT > 0 ?
|
|
|
|
|
beq .9
|
|
|
|
|
|
|
|
|
|
dec minus 1 for AUX mem
|
|
|
|
|
beq .9
|
|
|
|
|
|
|
|
|
|
sta RW.PGCNT PGCNT = last detected page
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.9 sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2023-11-04 14:42:28 +00:00
|
|
|
|
RW.Install lda IO.RRAMWRAMBNK1
|
|
|
|
|
lda IO.RRAMWRAMBNK1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
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 Type
|
|
|
|
|
sta RWDRV.IO1+1
|
|
|
|
|
sta RWDRV.EXIT+1
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
lda IO.RROMBNK1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETWRITEAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
ldx #RWDRVX.SIZE
|
|
|
|
|
|
|
|
|
|
.2 lda RWDRVX.B.START-1,x
|
|
|
|
|
sta RWDRVX.START-1,x
|
|
|
|
|
dex
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
lda Type
|
|
|
|
|
sta RWDRVX.XM.IO1+1
|
|
|
|
|
sta RWDRVX.XM.IO2+1
|
|
|
|
|
sta RWDRVX.XM.IO3+1
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRWRITEAUX
|
|
|
|
|
inc GP.DEVCNT
|
|
|
|
|
ldx GP.DEVCNT
|
2022-03-13 12:58:15 +00:00
|
|
|
|
lda #$B0 Slot 3,Drive 2,0=Not Removable, 0=no int, 00=1 Volume
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta GP.DEVLST,x
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
lda #RWDRV.START
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta GP.DEVPTRS3D2
|
2022-03-13 12:58:15 +00:00
|
|
|
|
lda /RWDRV.START
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta GP.DEVPTRS3D2+1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.Format jsr RW.BLOCK.SET00
|
|
|
|
|
lda RW.PGCNT
|
|
|
|
|
lsr
|
|
|
|
|
sta RW.BLOCK2.TB+1
|
|
|
|
|
lda #0
|
|
|
|
|
ror
|
|
|
|
|
sta RW.BLOCK2.TB
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
jsr MLI
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.DA #MLI.GETTIME
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.DA 0
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
ldx #3
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
|
|
|
|
.1 lda GP.DATE,x
|
2022-03-13 12:58:15 +00:00
|
|
|
|
sta RW.BLOCK2.CT,x
|
|
|
|
|
dex
|
|
|
|
|
bpl .1
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
ldx #RW.BLOCK2.END-RW.BLOCK2
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.2 lda RW.BLOCK2-1,x
|
|
|
|
|
sta RW.BLOCK-1,x
|
|
|
|
|
dex
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
jsr MLI Write Block 2,First VOL directory block
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.DA #MLI.WRITEBLOCK
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.DA RW.MLIWRITEBLOCK
|
|
|
|
|
bcc .22
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
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
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.DA #MLI.WRITEBLOCK
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.DA RW.MLIWRITEBLOCK
|
|
|
|
|
bcc .33
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
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
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
inx
|
|
|
|
|
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
|
|
|
|
|
|
|
|
|
|
.4 lda RW.FBITMAPCNT
|
|
|
|
|
beq .49
|
2023-11-04 14:42:28 +00:00
|
|
|
|
|
2022-03-13 12:58:15 +00:00
|
|
|
|
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)
|
|
|
|
|
lda #$0F
|
|
|
|
|
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...
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.DA #MLI.WRITEBLOCK
|
2022-03-13 12:58:15 +00:00
|
|
|
|
.DA RW.MLIWRITEBLOCK
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
dec RW.BITMAPCNT another bitmap block needed ?
|
|
|
|
|
bne .4
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.BLOCK.SETFF lda #$FF
|
|
|
|
|
.HS 2C BIT ABS
|
|
|
|
|
|
|
|
|
|
RW.BLOCK.SET00 lda #$00
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
.1 sta RW.BLOCK,x
|
|
|
|
|
sta RW.BLOCK+$100,x
|
|
|
|
|
inx
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.MLIWRITEBLOCK
|
|
|
|
|
.DA #3
|
|
|
|
|
.DA #$B0 Slot 3,Drive 2
|
|
|
|
|
.DA RW.BLOCK
|
|
|
|
|
RW.MLIWRITEBLOCK.BLK
|
|
|
|
|
.DA 2 Start writing block at #2
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.PGCNT .BS 1
|
|
|
|
|
RW.FBITMAPCNT .BS 1
|
|
|
|
|
RW.BITMAPCNT .BS 1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RW.BLOCK2 .DA 0 pointer to previous block
|
|
|
|
|
.DA 3 pointer to next block
|
|
|
|
|
.DA #$F4 $F=Vol Dir Header, 4=name len
|
|
|
|
|
.AS 'RAM3'
|
|
|
|
|
.BS 11 (RAM3 len=4, 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 *
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.INB usr/src/shared/x.printf.s
|
|
|
|
|
*--------------------------------------
|
2022-09-17 11:35:52 +00:00
|
|
|
|
RW.MSG .CZ "SuperExpander E, RAMWorks (I,II,III,z-Ram) Driver For A2osX\r"
|
|
|
|
|
RW.MSG.RAMDISOK .CZ "/RAM Device Disabled/Not Present.\r"
|
|
|
|
|
RW.MSG.RAMDISKO .CZ "Problem Disabling /RAM Device.\r"
|
|
|
|
|
RW.MSG.RAM3OK .CZ "/RAM3 Device Already Installed.\r"
|
|
|
|
|
RW.MSG.OK1 .CZ "%D KB Detected (%d Pages), %D KB (%d Pages) Available for RamDrive.\r"
|
|
|
|
|
RW.MSG.KO1 .CZ "Not Detected.\r"
|
|
|
|
|
RW.MSG.OK2 .CZ "RamWorks Driver Installed.\r"
|
|
|
|
|
RW.MSG.KO2 .CZ "RamWorks Driver Install Error.\r"
|
|
|
|
|
RW.MSG.OK3 .CZ "RamWorks Drive Formatted as /RAM3.\r"
|
|
|
|
|
RW.MSG.KO3 .CZ "RamWorks Drive Format Error.\r"
|
2022-03-13 12:58:15 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Driver for Ramworks in main LC
|
|
|
|
|
* $FF00 -> $FF9A (Inclusive)
|
|
|
|
|
* $FF58 MUST BE $60 (RTS)
|
|
|
|
|
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
|
|
|
|
|
* reuses it after Block operation
|
|
|
|
|
* A1,A2 are used by Disk II Driver,
|
|
|
|
|
* so we use it safely as Tmp Ptr
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.A2L .EQ $3E
|
|
|
|
|
DRV.A2H .EQ $3F
|
|
|
|
|
DRV.COMMAND .EQ $42
|
|
|
|
|
DRV.BUFF .EQ $44
|
|
|
|
|
DRV.BLKNUM .EQ $46
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRV.B.START .PH $FF00
|
|
|
|
|
RWDRV.START 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
|
|
|
|
|
|
|
|
|
|
ldx DRV.BLKNUM
|
|
|
|
|
cpx RWDRV.MAXLO+1
|
|
|
|
|
lda DRV.BLKNUM+1
|
|
|
|
|
sbc RWDRV.MAXHI+1
|
|
|
|
|
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
bit IO.RD80STORE save 80 Store status
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
php Disable IRQ as no vector set in RW Banks
|
|
|
|
|
sei
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
txa Get Back DRV.BLKNUM
|
|
|
|
|
asl compute PAGE = blocknumLO *2
|
|
|
|
|
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
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRV.IO1 sta RWBankSelect Select RAMWorks Bank
|
|
|
|
|
|
|
|
|
|
inx second 256 bytes first
|
|
|
|
|
stx DRV.A2H Use DRV.A1L/H for RAM PTR
|
|
|
|
|
stz DRV.A2L
|
|
|
|
|
inc DRV.BUFF+1
|
|
|
|
|
dey Y=CMD, zero if read
|
|
|
|
|
bne RWDRV.W non zero, go write
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETREADAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
ldx #DRV.A2L READ:copy from RAM to BUFF
|
|
|
|
|
lda #DRV.BUFF
|
|
|
|
|
bra RWDRV.RW
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
RWDRV.W sta IO.SETWRITEAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
ldx #DRV.BUFF
|
|
|
|
|
lda #DRV.A2L WRITE:copy from BUFF to RAM
|
|
|
|
|
dey Make sure Y=0 for main loop below
|
|
|
|
|
|
|
|
|
|
RWDRV.RW stx RWDRV.RW.SRC+1
|
|
|
|
|
sta RWDRV.RW.DST+1
|
|
|
|
|
|
|
|
|
|
* clc 2 pages to copy
|
|
|
|
|
.HS B0 BCS
|
|
|
|
|
RWDRV.RW.LOOP sec
|
|
|
|
|
|
|
|
|
|
RWDRV.RW.SRC lda ($FF),y
|
|
|
|
|
RWDRV.RW.DST sta ($FF),y
|
|
|
|
|
iny
|
|
|
|
|
bne RWDRV.RW.SRC
|
|
|
|
|
|
|
|
|
|
dec DRV.BUFF+1
|
|
|
|
|
dec DRV.A2H
|
|
|
|
|
bcc RWDRV.RW.LOOP
|
|
|
|
|
|
|
|
|
|
RWDRV.EXIT stz RWBankSelect
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRREADAUX
|
|
|
|
|
sta IO.CLRWRITEAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
plp restore IRQ
|
|
|
|
|
|
|
|
|
|
bpl RMDRV.CMDSTATUS
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SET80STORE
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
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.E.IO Carry already set
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* X=Page(0/1 or LC),A=Bank
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRV.GOAUX pha save BANK
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETWRITEAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETREADAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
jsr RWDRVX.START Setup Code in main mem at $300 for data move
|
|
|
|
|
* returns : CC=WRITE, CS=READ
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRREADAUX IO.CLRWRITEAUX already triggered by code copy
|
2022-03-13 12:58:15 +00:00
|
|
|
|
jsr RWDRV.XM.RUN Now execute generated code in main memory
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.SETREADAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
jmp RWDRVX.RESTORE
|
|
|
|
|
|
|
|
|
|
RWDRV.END .EP
|
|
|
|
|
RWDRV.B.END
|
|
|
|
|
.LIST ON
|
|
|
|
|
RWDRV.SIZE .EQ RWDRV.B.END-RWDRV.B.START
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* 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
|
|
|
|
|
|
|
|
|
|
lda DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE
|
|
|
|
|
lsr
|
|
|
|
|
php
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
ldy #IO.RRAMWRAMBNK1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
beq .1 page 0/1, no need to check BANK
|
|
|
|
|
|
|
|
|
|
cmp #$D0 $C0 <= PAGE < $D0 ?
|
|
|
|
|
bcs .1 no, store in BNK1
|
|
|
|
|
|
|
|
|
|
ora #$10 Remap $C0 page to $D0 BNK2
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
ldy #IO.RRAMWRAMBNK2
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
.1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later
|
|
|
|
|
|
|
|
|
|
ldy DRV.BUFF
|
|
|
|
|
ldx DRV.BUFF+1
|
|
|
|
|
|
|
|
|
|
plp
|
|
|
|
|
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
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
.3 sta IO.CLRWRITEAUX
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
jmp RWDRV.EXIT
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* LC Copy Code, moved from Aux to main $300
|
|
|
|
|
* $0200 -> $02FF TMP buffer for 2 steps move between LCs
|
|
|
|
|
* CC=WRITE :
|
|
|
|
|
* CS=READ :
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRVX.XM.START ldy #2 2 pages to copy
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
RWDRVX.XM.COPY sta IO.CLRALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START
|
|
|
|
|
sta $C000,x select proper Main/Aux ZP/LC
|
|
|
|
|
RWDRVX.XM.IO1 sta RWBankSelect
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
RWDRVX.XM.SRC lda $FFFF,x
|
|
|
|
|
sta RMDRVX.TMP,x
|
|
|
|
|
inx
|
|
|
|
|
bne RWDRVX.XM.SRC
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START
|
|
|
|
|
sta $C000,x select proper Main/Aux ZP/LC
|
|
|
|
|
RWDRVX.XM.IO2 sta RWBankSelect
|
|
|
|
|
|
|
|
|
|
ldx #0
|
|
|
|
|
|
|
|
|
|
RWDRVX.XM.2 lda RMDRVX.TMP,x
|
|
|
|
|
RWDRVX.XM.DST sta $FFFF,x
|
|
|
|
|
inx
|
|
|
|
|
bne RWDRVX.XM.2
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
sta IO.CLRALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
RWDRVX.XM.IO3 stz RWBankSelect
|
|
|
|
|
*--------------------------------------
|
2023-11-04 14:42:28 +00:00
|
|
|
|
RWDRVX.XM.MNLC bit IO.RRAMWRAMBNK1 ProDOS always uses LCBANK1
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
ldx #IO.CLRALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRVX.XM.SRCLC bcc RWDRVX.XM.MNLC CC=WRITE,CS=READ?
|
|
|
|
|
.HS 2C BIT ABS
|
|
|
|
|
RWDRVX.XM.DSTLC bcs RWDRVX.XM.MNLC CC=WRITE,CS=READ?
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRVX.XM.RWLC bit $C000
|
|
|
|
|
|
|
|
|
|
RWDRVX.XM.BANK lda #$FF
|
|
|
|
|
|
2023-11-04 14:42:28 +00:00
|
|
|
|
ldx #IO.SETALTZP
|
2022-03-13 12:58:15 +00:00
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.LIST ON
|
|
|
|
|
RWDRVX.XM.SIZE .EQ *-RWDRVX.XM.START
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRVX.XM.SAVE .BS RWDRVX.XM.SIZE
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.EP
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
RWDRVX.B.END .LIST ON
|
|
|
|
|
RWDRVX.SIZE .EQ RWDRVX.B.END-RWDRVX.B.START
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* CONTROL SECTION :
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.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 usr/src/sys/pm.ramworks.s
|
|
|
|
|
ASM
|