NEW
  AUTO 3,1
* object code = ram_2
* /RAM driver (main bank portion)
* origin = $FF00

ofsR2	.EQ	lcsrc-lcdest		offset from ram driver org

lcsrc    cld				no decimal.
         ldx   #$0B			save 13 bytes of parms
H2D03	lda	A1L,x
	sta	a1l1,x
	dex
	bpl	H2D03
         ldx   #$01
H2D0D    lda   passit,x			save xfer vectors
	sta	sp1,x
	dex
	bpl	H2D0D
         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   #<ramdest			card entry point
         sta	passit
         lda	#>ramdest
gocard	.EQ	*-ofsR2			also used by 'mainwrt'
         sta	passit+1                 
	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	*-ofsR2
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	.EQ	*-ofsR2			transfer data to card.
	sta   wrcardram                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   wrmainram                write to main 48K.
         lda   #<donewrt		done writing card
         sta	passit
         lda	#>donewrt
         jmp	gocard
sp1	.EQ	*-ofsR2
                .DA #0000'
a1l1	.EQ	*-ofsR2			13 bytes of storage

* end of obj ram_2
	
r2_end	.EQ	*
	ds	$D9B-(r2_end-H2000)	fill to lanirq ($FF9B see note below)
*--------------------------------------
MAN
LOAD USR/SRC/PRODOS.203/PRODOS.S.RAM
SAVE USR/SRC/PRODOS.203/PRODOS.S
ASM
