Posted By
Harry Potter on 2022-06-16 10:00:55
| Re: MemBankP1 demo program error
Could it be writing to the wrong RAM location? Following are the code to write to expansion RAM:
------------------------------ _bank1_writebyte: ;jsr popa pha jsr popax sta ptr1 stx ptr1+1 pla ldy #0 jmp bank1_writebytedirect _bank1_writeword: ;jsr popax pha stx tmp1 jsr popax sta ptr1 stx ptr1+1 pla ldx tmp1 jmp bank1_writeworddirect
.segment "MEMBANK"
bank1_writebytedirect: ;sta $FF02 pha lda #$32 sta $FD16 pla sta (ptr1),y lda #$33 sta $FD16 rts
bank1_writeworddirect: pha lda #$32 sta $FD16 pla sta $FF02 sta (ptr1),y iny txa sta (ptr1),y lda #$33 sta $FD16 rts ------------------ and to load the banked data: ------------------ unsigned __fastcall__ bank1_cbm_read (unsigned char lfn, void* buffer, unsigned size) /* Reads up to "size" bytes from a file to "buffer". * Returns the number of actually read bytes, 0 if there are no bytes left * (EOF) or -1 in case of an error. _oserror contains an errorcode then (see * table below). */ { static unsigned int bytesread; static unsigned char tmp;
/* if we can't change to the inputchannel #lfn then return an error */ if (_oserror = cbm_k_chkin(lfn)) return -1;
bytesread = 0; while (bytesread tmp = cbm_k_basin(); /* the kernal routine BASIN sets ST to EOF if the end of file * is reached the first time, then we have store tmp. * every subsequent call returns EOF and READ ERROR in ST, then * we have to exit the loop here immidiatly. */ if (cbm_k_readst() & 0xBF) break; //++*(unsigned char*)0xC00; //((unsigned char*)buffer)[bytesread++] = tmp; //bank1_writebyte (((unsigned char*)buffer)[bytesread++], tmp); bank1_writebyte (((unsigned char*)buffer)[bytesread], tmp); ++bytesread; //home(); printu (bytesread); } cbm_k_clrch(); //putchar ('-'); cgetc(); return bytesread; } --------------
|