A2osX/ProDOS.FX/ProDOS.S.RAM.txt

109 lines
2.3 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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