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 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 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