Posted By
   Harry Potter on 2023-07-20 18:35:04
  |   MemBankP4/cc65: program doesn't load data to Hannes memory!
  Hi!  I've been working on a 128k Plus4 port of my AdvSkel65 program, and it doesn't seem to be successfully loading its Hannes memory data properly, as, when I use the bank1_memcpyfrom() function to copy the contents of the first 80 bytes of Hannes memory to the screen at 0xC00, I get all at signs, meaning all 0's, in turn meaning the data was not there at all.     Following are the assembler code for the routines that write to the memory: ---------------------------- .segment	"LOWCODE"
  _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 	ldy	#0 	jmp	bank1_writeworddirect 	
 
  .segment	"MEMBANK"
  bank1_writebytedirect: 	;sta	$FF02 	sei 	pha 	lda	#$32 	sta	$FD16 	pla 	sta	(ptr1),y 	lda	#$33 	sta	$FD16 	cli 	rts
  bank1_writeworddirect: 	pha 	sei 	lda	#$32 	sta	$FD16 	pla 	;sta	$FF02 	sta	(ptr1),y 	iny 	txa 	sta	(ptr1),y 	lda	#$33 	sta	$FD16 	cli 	rts -------------------------------- and the code that reads the file: -------------------------------- 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; printc ('A'); 	while (bytesread<size && !cbm_k_readst()) { 		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(); printc ('B'); 	return bytesread; } -------------------------------- BTW, B doesn't display, but some code that printed a dot to the screen at every byte read displayed many dots, indicating that the function is actually reading the information.
  |