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
