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
