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