Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-02-26 21:13:48 +01:00
parent ad54cc162e
commit 43d989f537
9 changed files with 187 additions and 108 deletions

Binary file not shown.

Binary file not shown.

View File

@ -73,6 +73,7 @@ CS.RUN
lda (ZPPtr1) lda (ZPPtr1)
cmp #'-' cmp #'-'
bne .2 bne .2
jsr CS.RUN.CheckOpt jsr CS.RUN.CheckOpt
bcc .1 bcc .1
@ -105,6 +106,7 @@ CS.RUN
.4 bit bSkip1 .4 bit bSkip1
bmi .5 bmi .5
jsr CS.RUN.SEEK jsr CS.RUN.SEEK
bcs .9 bcs .9
sec sec
@ -124,6 +126,7 @@ CS.RUN
.7 lda hFile2 .7 lda hFile2
beq .99 beq .99
lda hFile1 lda hFile1
beq .99 beq .99
@ -145,13 +148,16 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL FEOF >SYSCALL FEOF
bcs .9 IO error bcs .9 IO error
tay tay
bne .1 no char bne .1 no char
>SYSCALL GetChar >SYSCALL GetChar
bcs .9 IO error bcs .9 IO error
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
beq .9 Abort.... beq .9 Abort....
cmp #$13 Ctrl-S cmp #$13 Ctrl-S
bne .1 bne .1
@ -159,47 +165,65 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
eor #$ff eor #$ff
sta bPause sta bPause
bne CS.RUN.LOOP bne CS.RUN.LOOP
.1 lda bPause .1 lda bPause
bne CS.RUN.LOOP Pause... bne CS.RUN.LOOP Pause...
jsr CS.RUN.READ1 jsr CS.RUN.READ1
bcc .2 bcc .2
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
bra .99 bra .99
.2 >STYA BufCnt .2 >STYA BufCnt
jsr CS.RUN.READ2 jsr CS.RUN.READ2
bcc .20 bcc .20
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
bra .99 bra .99
.20 cpy BufCnt .20 cpy BufCnt
pha pha
sbc BufCnt+1 sbc BufCnt+1
pla pla
bcc .3 bcc .3
>STYA BufCnt >STYA BufCnt
.3 ldy #0 .3 ldy #0
.4 lda (ZPBufPtr1),y .4 lda (ZPBufPtr1),y
cmp (ZPBufPtr2),y cmp (ZPBufPtr2),y
beq .8 beq .8
lda #$E0 lda #$E0
sta bDiff sta bDiff
bit bVerbose bit bVerbose
bpl .5 bpl .5
jsr CS.RUN.Print jsr CS.RUN.Print
bcs .9 bcs .9
.5 bit bAll .5 bit bAll
bpl .99 bpl .99
.8 iny .8 iny
cpy BufCnt cpy BufCnt
bne .4 bne .4
inc Offset inc Offset
bne CS.RUN.LOOP bne CS.RUN.LOOP
inc Offset+1 inc Offset+1
bra CS.RUN.LOOP bra CS.RUN.LOOP
.99 lda bDiff .99 lda bDiff
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -217,12 +241,14 @@ CS.RUN.SEEK >LDYA ZPPtr1
>PULLL SeekOfs >PULLL SeekOfs
lda bSkip1 lda bSkip1
bmi .1 bmi .1
>PUSHBI SEEK.SET >PUSHBI SEEK.SET
>PUSHL SeekOfs >PUSHL SeekOfs
lda hFile1 lda hFile1
>SYSCALL FSeek >SYSCALL FSeek
bcs .9 bcs .9
.1 >PUSHBI SEEK.SET .1 >PUSHBI SEEK.SET
>PUSHL SeekOfs >PUSHL SeekOfs
lda hFile2 lda hFile2
@ -258,18 +284,24 @@ CS.RUN.Print phy
*-------------------------------------- *--------------------------------------
CS.QUIT lda hFile2 CS.QUIT lda hFile2
beq .1 beq .1
>SYSCALL FClose >SYSCALL FClose
.1 lda hFile1 .1 lda hFile1
beq .2 beq .2
>SYSCALL FClose >SYSCALL FClose
.2 lda hBuf2 .2 lda hBuf2
beq .3 beq .3
>SYSCALL FreeMem >SYSCALL FreeMem
.3 lda hBuf1 .3 lda hBuf1
beq .8 beq .8
>SYSCALL FreeMem >SYSCALL FreeMem
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -283,6 +315,7 @@ CS.RUN.CheckOpt ldy #1
.2 cmp OptionList,y .2 cmp OptionList,y
beq .3 beq .3
dey dey
bpl .2 bpl .2

View File

@ -126,9 +126,11 @@ D2MoveHead.SEI lda MoveFrom
* sta .4+1 * sta .4+1
* sta .5+1 * sta .5+1
sta IO.D2.Ph0On,x lda IO.D2.Ph0On,x
*.4 lda IO.D2.RData SELF MODIFIED *.4 lda IO.D2.RData SELF MODIFIED
sta IO.D2.Ph0On,y nop
nop
lda IO.D2.Ph0On,y
*.5 lda IO.D2.RData SELF MODIFIED *.5 lda IO.D2.RData SELF MODIFIED
lda #IO.D2.SeekTimeF lda #IO.D2.SeekTimeF
@ -140,10 +142,12 @@ D2MoveHead.SEI lda MoveFrom
jsr D2.Wait25600usec jsr D2.Wait25600usec
.8 sta IO.D2.Ph0Off,x .8 pha
lda IO.D2.Ph0Off,x
nop nop
nop nop
sta IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
pla
rts rts
*/-------------------------------------- */--------------------------------------
* # D2TrkRead16s * # D2TrkRead16s
@ -207,18 +211,18 @@ D2TrkWrite16s >PULLW ZPPtr1
ora Slotn0 ora Slotn0
tay tay
sta IO.D2.Ph0On,x lda IO.D2.Ph0On,x
stx PhX stx PhX
sta IO.D2.Ph0On,y lda IO.D2.Ph0On,y
sty PhY sty PhY
* lda #5 * lda #10
* jsr D2.Wait100usecA * jsr D2.Wait100usecA
* ldx PhX * ldx PhX
* sta IO.D2.Ph0Off,x * lda IO.D2.Ph0Off,x
* ldy PhY * ldy PhY
* sta IO.D2.Ph0Off,y * lda IO.D2.Ph0Off,y
stz SectNum stz SectNum
@ -263,11 +267,12 @@ D2TrkWrite16s >PULLW ZPPtr1
sta (ZPPtr2) sta (ZPPtr2)
ldx PhX ldx PhX
sta IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
ldy PhY ldy PhY
sta IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
* jsr D2.Wait25600usec jsr D2.Wait25600usec
jsr D2.Wait25600usec
jsr D2WriteTrackPtr2 jsr D2WriteTrackPtr2
php php

View File

@ -191,13 +191,13 @@ XRW.TrackSelect lda #2
sta XRW.RecalibrateCnt sta XRW.RecalibrateCnt
sta XRW.BadSeek sta XRW.BadSeek
lda XRW.ReqTrack * lda XRW.ReqTrack
jsr XRW.SEEK2T * jsr XRW.SEEK2T
lda #5 * lda #5
jsr XRW.Wait100usecA * jsr XRW.Wait100usecA
jsr XRW.SEEKOFF * jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt .1 stz XRW.RetryCnt
@ -309,13 +309,14 @@ XRW.ReadAddr ldy #$FC
tay if final checksum non-zero, tay if final checksum non-zero,
bne .99 (2) then error. bne .99 (2) then error.
clc (2)
.9 lda IO.D2.RData,x (4) .9 lda IO.D2.RData,x (4)
bpl .9 (2) bpl .9 (2)
eor #$DE (2) eor #$DE (2)
bne .99 (2) bne .99 (2)
clc (2)
rts (6) rts (6)
.99 sec .99 sec
@ -387,10 +388,12 @@ XRW.Seek ldx XRW.UnitIndex
jsr XRW.Wait25600usec jsr XRW.Wait25600usec
XRW.SEEKOFF sta IO.D2.Ph0Off,x XRW.SEEKOFF pha
lda IO.D2.Ph0Off,x
nop nop
nop nop
sta IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
pla
rts rts
*-------------------------------------- *--------------------------------------
XRW.SEEK2T ldx XRW.UnitIndex XRW.SEEK2T ldx XRW.UnitIndex
@ -413,9 +416,11 @@ XRW.SEEK2QT2 and #6
* sta .1+1 * sta .1+1
* sta .2+1 * sta .2+1
sta IO.D2.Ph0On,x lda IO.D2.Ph0On,x
*.1 lda IO.D2.RData SELF MODIFIED *.1 lda IO.D2.RData SELF MODIFIED
sta IO.D2.Ph0On,y nop
nop
lda IO.D2.Ph0On,y
*.2 lda IO.D2.RData SELF MODIFIED *.2 lda IO.D2.RData SELF MODIFIED
rts rts
*-------------------------------------- *--------------------------------------
@ -555,7 +560,14 @@ L596F ldy #$FF index to last byte of data to write.
XRW.SectorIO bit XRW.bWrite XRW.SectorIO bit XRW.bWrite
bpl .1 bpl .1
lda XRW.ReqTrack
jsr XRW.SEEK2T
phx
phy
jsr XRW.PreNibble jsr XRW.PreNibble
ply
plx
jsr XRW.SEEKOFF
.1 stz XRW.RetryCnt .1 stz XRW.RetryCnt
@ -595,9 +607,6 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
lda #$FF (2) lda #$FF (2)
nop (2) nop (2)
nop (2)
nop (2)
sta IO.D2.WriteMode,x (5) goto write mode sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4) ora IO.D2.WShift,x (4)
@ -734,6 +743,10 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
lda #$FF (2) lda #$FF (2)
jsr wnibl (6+9,6) write turn off byte. jsr wnibl (6+9,6) write turn off byte.
jsr XRW.Write.RTS (12)
jsr XRW.Write.RTS (12)
nop (2)
XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
lda IO.D2.WShift,x (4) to read mode. lda IO.D2.WShift,x (4) to read mode.

View File

@ -307,7 +307,7 @@ OPEN.1 php
.DO SSCIRQ=1 .DO SSCIRQ=1
lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x sta SSC.CTL-$8F,x
lda #SSC.CMD.TEIRQ+SSC.CMD.TE+SSC.CMD.DTR lda #SSC.CMD.TEIRQ+SSC.CMD.DTR
sta SSC.CMD-$8F,x sta SSC.CMD-$8F,x
stz INBUF.HEAD stz INBUF.HEAD
@ -350,6 +350,7 @@ READ php
stz ZPCount2 stz ZPCount2
stz ZPCount2+1 stz ZPCount2+1
.10 inc ZPCount .10 inc ZPCount
bne .11 bne .11
@ -451,12 +452,12 @@ WRITE php
beq .5 not empty, queue char beq .5 not empty, queue char
lda (ZPBufPtr) yes, write directly to ACIA lda (ZPBufPtr) yes, write directly to ACIA
sta SSC.DATA-$8F,x
inc ZPBufPtr inc ZPBufPtr
bne .4 bne .2
inc ZPBufPtr+1 inc ZPBufPtr+1
.4 sta SSC.DATA-$8F,x
bra .2 bra .2
.5 lda OUTBUF.HEAD .5 lda OUTBUF.HEAD
@ -468,11 +469,11 @@ WRITE php
sta OUTBUF.HEAD sta OUTBUF.HEAD
lda (ZPBufPtr) lda (ZPBufPtr)
sta OUTBUF,y
inc ZPBufPtr inc ZPBufPtr
bne .7 bne .2
inc ZPBufPtr+1 inc ZPBufPtr+1
.7 sta OUTBUF,y
bra .2 bra .2
.ELSE .ELSE
@ -484,12 +485,12 @@ WRITE php
beq .4 beq .4
lda (ZPBufPtr) lda (ZPBufPtr)
sta SSC.DATA-$8F,x
inc ZPBufPtr inc ZPBufPtr
bne .5 bne .2
inc ZPBufPtr+1 inc ZPBufPtr+1
.5 sta SSC.DATA-$8F,x
bra .2 bra .2
.FIN .FIN

View File

@ -826,9 +826,9 @@ DevMgrInit.VSD ldy #VSD.PATCH.SIZE-1
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VSD.PATCH sta RRAMWRAMBNK2 VSD.PATCH bit RRAMWRAMBNK2
jsr $D001 jsr $D001
sta RRAMWRAMBNK1 bit RRAMWRAMBNK1
rts rts
VSD.PATCH.SIZE .EQ *-VSD.PATCH VSD.PATCH.SIZE .EQ *-VSD.PATCH
*-------------------------------------- *--------------------------------------
@ -884,7 +884,7 @@ IrqMgrInit >LDYAI MSG.IRQ
beq .2 beq .2
jsr IrqMgrInit.TClock jsr IrqMgrInit.TClock
bcs .2 bcs .3
lda #"C" lda #"C"
sta IRQ.Mode sta IRQ.Mode
@ -898,8 +898,19 @@ IrqMgrInit >LDYAI MSG.IRQ
>LDYAI MSG.IRQ.CLOCK >LDYAI MSG.IRQ.CLOCK
bra .8 bra .8
.2 jsr IrqMgrInit.Mouse .2 php
bcs .3 sei
sta CLRPAGE2
lda #$60
sta $5fa
sta $5fb
stz $4FF //c ROM FF
stz $4FC //c ROM 1,2,3,4,5
plp
.3 jsr IrqMgrInit.Mouse
bcs .7
lda #"V" lda #"V"
sta IRQ.Mode sta IRQ.Mode
@ -913,7 +924,7 @@ IrqMgrInit >LDYAI MSG.IRQ
>LDYAI MSG.IRQ.MOUSE >LDYAI MSG.IRQ.MOUSE
bra .8 bra .8
.3 jsr IrqMgrInit.HZ2Tick .7 jsr IrqMgrInit.HZ2Tick
lda #"P" lda #"P"
sta IRQ.Mode sta IRQ.Mode

View File

@ -5,11 +5,11 @@ NEW
.OR $2000 .OR $2000
.TF sys/km.ramworks .TF sys/km.ramworks
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB inc/macros.i
.INB INC/IO.I .INB inc/io.i
.INB INC/MONITOR.I .INB inc/monitor.i
.INB INC/MLI.I .INB inc/mli.i
.INB INC/MLI.E.I .INB inc/mli.e.i
*-------------------------------------- *--------------------------------------
TmpPtr1 .EQ $0 TmpPtr1 .EQ $0
TmpPtr2 .EQ $2 TmpPtr2 .EQ $2
@ -53,7 +53,7 @@ RW.Init >LDYAI RW.MSG
tya tya
inc + 1 page AUX mem inc + 1 page AUX mem
pha Total page detected pha Total page detected
lsr divide by 4 to compute KB size lsr divide by 4 to compute KB size
@ -82,7 +82,7 @@ RW.Init >LDYAI RW.MSG
>LDYAI RW.MSG.KO3 >LDYAI RW.MSG.KO3
bra .9 bra .9
.3 >LDYAI RW.MSG.OK3 .3 >LDYAI RW.MSG.OK3
.9 jsr PrintFYA .9 jsr PrintFYA
@ -114,14 +114,14 @@ RW.Detect2 php
bpl .1 bpl .1
lda #0 lda #0
.2 sta RWBankSelect .2 sta RWBankSelect
*-------------------------------------- *--------------------------------------
* Added after David Finnigan from macgui.com testing sessions * Added after David Finnigan from macgui.com testing sessions
* *
pha pha
pla pla
* *
* to address possibly a timing issue with Accelerators * to address possibly a timing issue with Accelerators
*-------------------------------------- *--------------------------------------
sta 0 sta 0
@ -130,16 +130,16 @@ RW.Detect2 php
eor #$FF eor #$FF
inc inc
bpl .2 bpl .2
ldx #0 ldx #0
.3 stx RWBankSelect .3 stx RWBankSelect
*-------------------------------------- *--------------------------------------
* Added after David Finnigan from macgui.com testing sessions * Added after David Finnigan from macgui.com testing sessions
* *
pha pha
pla pla
* *
* to address possibly a timing issue with Accelerators * to address possibly a timing issue with Accelerators
*-------------------------------------- *--------------------------------------
lda 0 lda 0
@ -147,13 +147,13 @@ RW.Detect2 php
eor #$ff eor #$ff
cmp 1 cmp 1
bne .4 bne .4
inx inx
cpy #127 cpy #127
bne .3 bne .3
.4 ldy #127 X = detected page count .4 ldy #127 X = detected page count
.6 sty RWBankSelect .6 sty RWBankSelect
@ -169,10 +169,10 @@ RW.Detect2 php
txa PGCNT > 0 ? txa PGCNT > 0 ?
beq .9 beq .9
dec minus 1 for AUX mem dec minus 1 for AUX mem
beq .9 beq .9
sta RW.PGCNT PGCNT = last detected page sta RW.PGCNT PGCNT = last detected page
clc clc
@ -183,7 +183,7 @@ RW.Detect2 php
*-------------------------------------- *--------------------------------------
RW.Install lda RRAMWRAMBNK1 RW.Install lda RRAMWRAMBNK1
lda RRAMWRAMBNK1 lda RRAMWRAMBNK1
ldx #RWDRV.SIZE ldx #RWDRV.SIZE
.1 lda RWDRV.B.START-1,x .1 lda RWDRV.B.START-1,x
@ -276,14 +276,14 @@ RW.Format jsr RW.BLOCK.SET00
beq .3 beq .3
inx inx
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed .3 stx RW.BITMAPCNT store TOTAL bitmap block needed
.4 lda RW.FBITMAPCNT .4 lda RW.FBITMAPCNT
beq .49 beq .49
dec RW.FBITMAPCNT dec RW.FBITMAPCNT
jsr RW.BLOCK.SETFF jsr RW.BLOCK.SETFF
bra .5 bra .5
.49 jsr RW.BLOCK.SET00 .49 jsr RW.BLOCK.SET00
lda RW.PGCNT lda RW.PGCNT
and #$1F compute incomplete bitmap block and #$1F compute incomplete bitmap block
@ -293,20 +293,26 @@ RW.Format jsr RW.BLOCK.SET00
asl times 16 for byte count asl times 16 for byte count
tay tay
lda #$FF lda #$FF
bcc .42 first half of block only bcc .42 first half of block only
ldx #0 ldx #0
.40 sta RW.BLOCK,x .40 sta RW.BLOCK,x
inx inx
bne .40 bne .40
cpy #0 cpy #0
beq .5 beq .5
.41 sta RW.BLOCK+$ff,y .41 sta RW.BLOCK+$ff,y
dey dey
bne .41 bne .41
bra .5 bra .5
.42 sta RW.BLOCK-1,y .42 sta RW.BLOCK-1,y
dey dey
bne .42 bne .42
.5 inc RW.MLIWRITEBLOCK.BLK .5 inc RW.MLIWRITEBLOCK.BLK
lda RW.MLIWRITEBLOCK.BLK lda RW.MLIWRITEBLOCK.BLK
cmp #4 Are we writing first volume bitmap ? cmp #4 Are we writing first volume bitmap ?
@ -314,38 +320,49 @@ RW.Format jsr RW.BLOCK.SET00
* lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr) * lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
lda #$0F lda #$0F
sta RW.BLOCK sta RW.BLOCK
ldy #0 ldy #0
lda #$8 Start a BLOCK 4 (%00001000) lda #$8 Start a BLOCK 4 (%00001000)
ldx RW.BITMAPCNT ldx RW.BITMAPCNT
.62 pha .62 pha
eor RW.BLOCK,y Mark bitmap blocks as "used" eor RW.BLOCK,y Mark bitmap blocks as "used"
sta RW.BLOCK,y sta RW.BLOCK,y
pla pla
dex dex
beq .63 beq .63
lsr lsr
bne .62 bne .62
lda #$80 lda #$80
iny iny
bra .62 bra .62
.63 jsr MLI Write Block 4,5... .63 jsr MLI Write Block 4,5...
.DA #MLIWRITEBLOCK .DA #MLIWRITEBLOCK
.DA RW.MLIWRITEBLOCK .DA RW.MLIWRITEBLOCK
bcs .9 bcs .9
dec RW.BITMAPCNT another bitmap block needed ? dec RW.BITMAPCNT another bitmap block needed ?
bne .4 bne .4
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
RW.BLOCK.SETFF lda #$FF RW.BLOCK.SETFF lda #$FF
bra RW.BLOCK.SET .HS 2C BIT ABS
RW.BLOCK.SET00 lda #$00 RW.BLOCK.SET00 lda #$00
RW.BLOCK.SET ldx #0
ldx #0
.1 sta RW.BLOCK,x .1 sta RW.BLOCK,x
sta RW.BLOCK+$100,x sta RW.BLOCK+$100,x
inx inx
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
RW.MLIWRITEBLOCK RW.MLIWRITEBLOCK
@ -372,7 +389,7 @@ RW.BLOCK2.CT .BS 4 Creation time
RW.BLOCK2.TB .BS 2 Total Blocks RW.BLOCK2.TB .BS 2 Total Blocks
RW.BLOCK2.END .EQ * RW.BLOCK2.END .EQ *
*-------------------------------------- *--------------------------------------
.INB USR/SRC/SHARED/X.PRINTF.S .INB usr/src/shared/x.printf.s
*-------------------------------------- *--------------------------------------
RW.MSG .AZ "RAMWorks (I,II,III,z-Ram) Driver For A2osX\n" RW.MSG .AZ "RAMWorks (I,II,III,z-Ram) Driver For A2osX\n"
RW.MSG.OK .AZ "/RAM3 Device Already Installed.\n" RW.MSG.OK .AZ "/RAM3 Device Already Installed.\n"
@ -386,21 +403,19 @@ RW.MSG.KO3 .AZ "RamWorks Drive Format Error.\n"
* Driver for Ramworks in main LC * Driver for Ramworks in main LC
* $FF00 -> $FF9A (Inclusive) * $FF00 -> $FF9A (Inclusive)
* $FF58 MUST BE $60 (RTS) * $FF58 MUST BE $60 (RTS)
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS * DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
* reuses it after Block operation * reuses it after Block operation
* A1,A2 are used by Disk II Driver, * A1,A2 are used by Disk II Driver,
* so we use it safely as Tmp Ptr * so we use it safely as Tmp Ptr
*-------------------------------------- *--------------------------------------
DRV.A2L .EQ $3E DRV.A2L .EQ $3E
DRV.A2H .EQ $3F DRV.A2H .EQ $3F
DRV.COMMAND .EQ $42 DRV.COMMAND .EQ $42
DRV.BUFF .EQ $44 DRV.BUFF .EQ $44
DRV.BLKNUM .EQ $46 DRV.BLKNUM .EQ $46
*-------------------------------------- *--------------------------------------
RWDRV.B.START .PH $FF00 RWDRV.B.START .PH $FF00
RWDRV.START RWDRV.START ldy DRV.COMMAND 0 = Status ?
* cld ProDOS will check that byte!!!
ldy DRV.COMMAND 0 = Status ?
beq RMDRV.CMDSTATUS beq RMDRV.CMDSTATUS
cpy #3 cpy #3
@ -418,7 +433,9 @@ RWDRV.START
php Disable IRQ as no vector set in RW Banks php Disable IRQ as no vector set in RW Banks
sei sei
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
txa Get Back DRV.BLKNUM txa Get Back DRV.BLKNUM
asl compute PAGE = blocknumLO *2 asl compute PAGE = blocknumLO *2
pha pha
@ -435,7 +452,6 @@ RWDRV.START
* X=Page($02 -> $BF),A=Bank,Y=CMD * X=Page($02 -> $BF),A=Bank,Y=CMD
*-------------------------------------- *--------------------------------------
sta RWBankSelect Select RAMWorks Bank sta RWBankSelect Select RAMWorks Bank
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
inx second 256 bytes first inx second 256 bytes first
stx DRV.A2H Use DRV.A1L/H for RAM PTR stx DRV.A2H Use DRV.A1L/H for RAM PTR
@ -492,7 +508,7 @@ RWDRV.IOERR lda #MLI.E.IO Carry already set
* X=Page(0/1 or LC),A=Bank * X=Page(0/1 or LC),A=Bank
*-------------------------------------- *--------------------------------------
RWDRV.GOAUX pha save BANK RWDRV.GOAUX pha save BANK
sta SETWRITEAUX sta SETWRITEAUX
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
@ -522,7 +538,7 @@ RWDRV.SIZE .EQ RWDRV.B.END-RWDRV.B.START
* $0200 -> $02FF TMP buffer for PAGE copy * $0200 -> $02FF TMP buffer for PAGE copy
* $0300 -> $03FD (Inclusive) * $0300 -> $03FD (Inclusive)
* do not trash $03FE-$03FF (IRQ Vector) * do not trash $03FE-$03FF (IRQ Vector)
* X=Page(0/1 or LC),A=Bank * X=Page(0/1 or LC),A=Bank
*-------------------------------------- *--------------------------------------
RMDRVX.TMP .EQ $200 RMDRVX.TMP .EQ $200
RWDRV.XM.RUN .EQ $300 RWDRV.XM.RUN .EQ $300
@ -530,6 +546,8 @@ RWDRV.XM.RUN .EQ $300
RWDRVX.B.START RWDRVX.B.START
.PH $0300 .PH $0300
RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
ldy #RRAMWRAMBNK1
txa txa
beq .1 page 0/1, no need to check BANK beq .1 page 0/1, no need to check BANK
@ -538,20 +556,26 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
ora #$10 Remap $C0 page to $D0 BNK2 ora #$10 Remap $C0 page to $D0 BNK2
.1 ror RWDRVX.XM.RWLC+1 Save Carry to select proper RW bank later ldy #RRAMWRAMBNK2
.1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later
ldy DRV.BUFF ldy DRV.BUFF
ldx DRV.BUFF+1 ldx DRV.BUFF+1
lsr DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE lsr DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE
bcc .2 CC=WRITE, CS=READ bcc .2 CC=WRITE, CS=READ
stz RWDRVX.XM.SRC+1 READ from src LO = 0 stz RWDRVX.XM.SRC+1 READ from src LO = 0
sta RWDRVX.XM.SRC+2 READ from src HI = PAGE sta RWDRVX.XM.SRC+2 READ from src HI = PAGE
sty RWDRVX.XM.DST+1 WRITE to DRV.BUFF sty RWDRVX.XM.DST+1 WRITE to DRV.BUFF
stx RWDRVX.XM.DST+2 stx RWDRVX.XM.DST+2
bra .3 bra .3
.2 sty RWDRVX.XM.SRC+1 READ from DRV.BUFF .2 sty RWDRVX.XM.SRC+1 READ from DRV.BUFF
stx RWDRVX.XM.SRC+2 stx RWDRVX.XM.SRC+2
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0 stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
@ -568,7 +592,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
*-------------------------------------- *--------------------------------------
* Called form Main LC after RWDRVX.XM execution * Called form Main LC after RWDRVX.XM execution
*-------------------------------------- *--------------------------------------
RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300 RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
.1 lda RWDRVX.XM.SAVE-1,y .1 lda RWDRVX.XM.SAVE-1,y
sta RWDRV.XM.RUN-1,y sta RWDRV.XM.RUN-1,y
@ -585,11 +609,11 @@ RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
RWDRVX.XM.START ldy #2 2 pages to copy RWDRVX.XM.START ldy #2 2 pages to copy
RWDRVX.XM.COPY sta CLRALTZP RWDRVX.XM.COPY sta CLRALTZP
jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START
sta $C000,x select proper Main/Aux ZP/LC sta $C000,x select proper Main/Aux ZP/LC
sta RWBankSelect sta RWBankSelect
ldx #0 ldx #0
RWDRVX.XM.SRC lda $FFFF,x RWDRVX.XM.SRC lda $FFFF,x
@ -598,11 +622,11 @@ RWDRVX.XM.SRC lda $FFFF,x
bne RWDRVX.XM.SRC bne RWDRVX.XM.SRC
sta CLRALTZP sta CLRALTZP
jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START
sta $C000,x select proper Main/Aux ZP/LC sta $C000,x select proper Main/Aux ZP/LC
sta RWBankSelect sta RWBankSelect
ldx #0 ldx #0
RWDRVX.XM.2 lda RMDRVX.TMP,x RWDRVX.XM.2 lda RMDRVX.TMP,x
@ -614,33 +638,32 @@ RWDRVX.XM.DST sta $FFFF,x
inc RWDRV.XM.RUN+RWDRVX.XM.DST+2-RWDRVX.XM.START inc RWDRV.XM.RUN+RWDRVX.XM.DST+2-RWDRVX.XM.START
dey dey
bne RWDRVX.XM.COPY bne RWDRVX.XM.COPY
sta CLRALTZP sta CLRALTZP
stz RWBankSelect stz RWBankSelect
*-------------------------------------- *--------------------------------------
RWDRVX.XM.MNLC bit RRAMWRAMBNK1 ProDOS always uses LCBANK1 RWDRVX.XM.MNLC bit RRAMWRAMBNK1 ProDOS always uses LCBANK1
* bit RRAMWRAMBNK1 * bit RRAMWRAMBNK1
lda #0 lda #0
ldx #CLRALTZP ldx #CLRALTZP
rts rts
*-------------------------------------- *--------------------------------------
RWDRVX.XM.SRCLC bcc RWDRVX.XM.MNLC CC=WRITE,CS=READ? RWDRVX.XM.SRCLC bcc RWDRVX.XM.MNLC CC=WRITE,CS=READ?
.HS 2C BIT ABS .HS 2C BIT ABS
RWDRVX.XM.DSTLC bcs RWDRVX.XM.MNLC CC=WRITE,CS=READ? RWDRVX.XM.DSTLC bcs RWDRVX.XM.MNLC CC=WRITE,CS=READ?
*-------------------------------------- *--------------------------------------
RWDRVX.XM.RWLC lda #$FF RWDRVX.XM.RWLC ldx #$FF
bmi RWDRVX.XM.BANK
bit RRAMWRAMBNK2 * bit $C000,x
* bit RRAMWRAMBNK2 bit $C000,x
RWDRVX.XM.BANK lda #$FF RWDRVX.XM.BANK lda #$FF
ldx #SETALTZP ldx #SETALTZP
rts rts
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
@ -668,5 +691,5 @@ RWDRVX.SIZE .EQ RWDRVX.B.END-RWDRVX.B.START
.FIN .FIN
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/SYS/KM.RAMWORKS.S SAVE usr/src/sys/km.ramworks.s
ASM ASM

View File

@ -111,13 +111,10 @@ SSC.Detect stz TmpPtr1
adc #$8F adc #$8F
tax X=SlotN0 tax X=SlotN0
stz SSC.RESET-$8F,x stz SSC.RESET-$8F,x
jsr VSDRIVE.Wait
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x sta SSC.CTL-$8F,x
jsr VSDRIVE.Wait
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x sta SSC.CMD-$8F,x
jsr VSDRIVE.Wait
lda TmpPtr1+1 A=Slot Cn, X=n0 lda TmpPtr1+1 A=Slot Cn, X=n0
@ -191,7 +188,6 @@ VSDRIVE.Ping ldx DRV+1 DRV.Slotn0
and #SSC.STATUS.RDRF incoming char? and #SSC.STATUS.RDRF incoming char?
bne .6 bne .6
* jsr VSDRIVE.Wait
jsr VSDRIVE.IncTimer jsr VSDRIVE.IncTimer
bne .5 bne .5
@ -218,13 +214,6 @@ VSDRIVE.IncTimer
inc VSDRIVE.Ping.TO+1 inc VSDRIVE.Ping.TO+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
VSDRIVE.Wait lda #0
.1 dec
bne .1
rts
*--------------------------------------
VSDRIVE.CMDS .HS C6.00.00.03 VSDRIVE.CMDS .HS C6.00.00.03
.DA #ADT.CMD.VSD .DA #ADT.CMD.VSD
* C6=C5 eor 03 eor 00 eor 00 * C6=C5 eor 03 eor 00 eor 00
@ -322,9 +311,9 @@ VSDRIVE.OK .AZ "VSDRIVE Driver Successfully Installed.\n"
REGULAR .AS "(C)APPLE " REGULAR .AS "(C)APPLE "
REGULAR.SIZE .EQ *-REGULAR REGULAR.SIZE .EQ *-REGULAR
PATCH .PH DRV.EntryPoint PATCH .PH DRV.EntryPoint
sta RRAMWRAMBNK2 bit RRAMWRAMBNK2
jsr $D001 jsr $D001
sta RRAMWRAMBNK1 bit RRAMWRAMBNK1
rts rts
.EP .EP
PATCH.SIZE .EQ *-PATCH PATCH.SIZE .EQ *-PATCH
@ -353,6 +342,9 @@ DRV.BLKNUM .EQ $46
DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF
DRV.START ldx #$ff Self Modified DRV.START ldx #$ff Self Modified
bit RRAMWRAMBNK2
lda DRV.COMMAND S=0,R=1,W=2,F=3 lda DRV.COMMAND S=0,R=1,W=2,F=3
bne .1 bne .1
@ -401,9 +393,9 @@ DRV.START ldx #$ff Self Modified
dey dey
bpl .3 bpl .3
ldy #8 ldy #DRV.102.LEN-1
.5 lda DRV.READWRITE,y .5 lda DRV.102,y
sta $102,y sta $102,y
dey dey
bpl .5 bpl .5
@ -530,10 +522,11 @@ DRV.SSCGet lda SSC.STATUS-$8F,x
lda SSC.DATA-$8F,x lda SSC.DATA-$8F,x
rts rts
*-------------------------------------- *--------------------------------------
DRV.READWRITE bit RRAMWRAMBNK1 DRV.102 bit RRAMWRAMBNK1
sta (DRV.BUFF),y sta (DRV.BUFF),y
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
rts rts
DRV.102.LEN .EQ *-DRV.102
*-------------------------------------- *--------------------------------------
DRV.CmdBuf.Sum .BS 1 Reverse order for dey DRV.CmdBuf.Sum .BS 1 Reverse order for dey
DRV.CmdBuf.BlkH .BS 1 DRV.CmdBuf.BlkH .BS 1