NEW AUTO 3,1 RAM.START 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 *-------------------------------------- RAM.LEN .EQ *-RAM.START .DUMMY sp1 .HS 0000 a1l1 .BS 13 13 bytes of storage .ED *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ram LOAD usr/src/prodos.fx/prodos.s ASM