mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +00:00
109 lines
2.3 KiB
Plaintext
109 lines
2.3 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
RAM.START .PH RAM
|
||
|
||
RAM.START1 cld no decimal.
|
||
ldx #$0B save 13 bytes of parms
|
||
|
||
.1 lda ZP.A1L,x
|
||
sta a1l1,x
|
||
dex
|
||
bpl .1
|
||
|
||
ldx #$01
|
||
|
||
.2 lda passit,x save xfer vectors
|
||
sta sp1,x
|
||
dex
|
||
bpl .2
|
||
|
||
lda ZP.CMDNUM
|
||
beq stat 0 = status
|
||
|
||
cmp #$04 check for command too high.
|
||
bcs ioerr if it is, i/o error
|
||
|
||
eor #$03
|
||
sta ZP.CMDNUM 0=format, 2=read, 1=write
|
||
beq format
|
||
|
||
ldy ZP.BLKNUM+1 check for large block number.
|
||
bne ioerr too big.
|
||
|
||
lda ZP.BLKNUM block #
|
||
bmi ioerr largest block number is $7F
|
||
|
||
* at this point, control is passed to the code in the alternate 64k.
|
||
* it it used for read, write and format. after the request is completed,
|
||
* control is passed back to 'noerr'.
|
||
|
||
format lda #RAMX card entry point
|
||
sta passit
|
||
lda /RAMX
|
||
|
||
gocard sta passit+1 also used by 'mainwrt'
|
||
sec direction ram -> card
|
||
clv start with original zero page
|
||
jmp ROM.XFER transfer control
|
||
|
||
ioerr lda #$27
|
||
bne H2D41
|
||
|
||
lda #$2B write protect error.
|
||
H2D41 sec flags error
|
||
bcs H2D47
|
||
|
||
noerr .EQ *
|
||
stat lda #$00
|
||
clc
|
||
|
||
H2D47 php save status
|
||
pha and error code.
|
||
|
||
ldx #$0B restore 13 byes of parms
|
||
|
||
H2D4B lda a1l1,x
|
||
sta ZP.A1L,x
|
||
dex
|
||
bpl H2D4B
|
||
|
||
lda sp1 restore xfer parms.
|
||
bit $6060 addr $FF58 must = rts ($60) as in ROM
|
||
sta passit
|
||
lda sp1+1
|
||
sta passit+1
|
||
pla restore error code
|
||
plp and status.
|
||
rts
|
||
|
||
mainwrt sta IO.SETWRITEAUX write to alt 48K
|
||
ldy #$00
|
||
|
||
H2D6A lda (ZP.A1L),y pointers set in card by 'setptr'
|
||
sta (ZP.A4L),y
|
||
lda (ZP.A2L),y
|
||
sta (ZP.A3L),y
|
||
dey
|
||
bne H2D6A
|
||
|
||
sta IO.CLRWRITEAUX write to main 48K.
|
||
lda #donewrt done writing card
|
||
sta passit
|
||
lda /donewrt
|
||
jmp gocard
|
||
*--------------------------------------
|
||
.DUMMY
|
||
sp1 .HS 0000
|
||
a1l1 .BS 13 13 bytes of storage
|
||
.ED
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
RAM.LEN .EQ *-RAM.START
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/prodos.fx/prodos.s.ram
|
||
LOAD usr/src/prodos.fx/prodos.s
|
||
ASM
|