A2osX/ProDOS.203/ProDOS.S.RAM.txt

89 lines
2.2 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
* object code = ram_2
* /RAM driver (main bank portion)
* origin = $FF00
RAMDRV cld no decimal.
ldx #$0B save 13 bytes of parms
.1 lda A1L,x
sta a1l1,x
dex
bpl .1
ldx #$01
.2 lda passit,x save xfer vectors
sta sp1,x
dex
bpl .2
lda A4L get command.
beq stat 0 = status
cmp #$04 check for command too high.
bcs ioerr if it is, i/o error
eor #$03
sta A4L 0=format, 2=read, 1=write
beq format
ldy bloknml+1 check for large block number.
bne ioerr too big.
lda bloknml 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 #RAMXDRV card entry point
sta passit
lda /RAMXDRV
gocard sta passit+1 also used by 'mainwrt'
sec direction ram -> card
clv start with original zero page
jmp 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 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 SETWRITEAUX write to alt 48K
ldy #$00
H2D6A lda (A1L),y pointers set in card by 'setptr'
sta (A4L),y
lda (A2L),y
sta (A3L),y
dey
bne H2D6A
sta CLRWRITEAUX write to main 48K.
lda #donewrt done writing card
sta passit
lda /donewrt
jmp gocard
sp1 .HS 0000
a1l1 .BS 13 13 bytes of storage
* end of obj ram_2
RAMDRV.END .EQ *
.BS $FF9B-* fill to lanirq ($FF9B see note below)
*--------------------------------------
MAN
SAVE usr/src/prodos.203/prodos.s.ram
LOAD usr/src/prodos.203/prodos.s
ASM