| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| ccovell Regular
 
  
 
 Joined: 19 Dec 2005
 Posts: 100
 Location: Japan
 
 | 
			
				|  Posted: Wed Nov 15, 2006 3:42 am    Post subject: BRAM code |   |  
				| 
 |  
				| I'm going to try adding some BRAM-accessing code to my game, so... 
 Has anyone ever done any programming to interface with the BRAM area?  Like, searching through it, adding/deleting files?  Are there any pitfalls I should be worrying about?
 _________________
 http://www.chrismcovell.com
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| David Shadoff Regular
 
  
 
 Joined: 10 May 2002
 Posts: 83
 Location: Toronto, Ontario, Canada
 
 | 
			
				|  Posted: Wed Nov 15, 2006 7:43 am    Post subject: |   |  
				| 
 |  
				| How are you planning on accessing it - directly, or via CDROM system card routines ? 
 If you are accessing it directly, you need to be in CSL slow CPU mode... but I've never tried using the system card's routines.
 
 I also have information on the link-list format somewhere, but I'm pretty sure you can figure that out for yourself without my help...
 
 Oh yeah, and I recall while single-stepping through games a while back that there appeared to be a write-protect latch that needed to be hit... although that didn't appear to do anything (it seemed like maybe something from a preliminary devkit maybe, which wasn't implemented in the commercial design).
 
 Maybe Bt has done some of this stuff...
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| ccovell Regular
 
  
 
 Joined: 19 Dec 2005
 Posts: 100
 Location: Japan
 
 | 
			
				|  Posted: Wed Nov 15, 2006 2:31 pm    Post subject: |   |  
				| 
 |  
				| I'm going to be implementing it directly (through my own code).  I know I have to switch to slow CPU mode, but I'm wondering if it's possible to do BRAM-RAM DMA transfers in that mode...? 
 I think I understand the format OK; I remember chatting with you on IRC as I looked at it.  I think I understand the header info, and checksum (which is actually a checksubtract, since it subtracts all bytes in a save file from $0000.  I'll have to refresh my memory on stuff like that.
 
 I guess looking at how some games do it wouldn't hurt.
 _________________
 http://www.chrismcovell.com
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| dmichel Admin
 
  
 
 Joined: 04 Apr 2002
 Posts: 1166
 Location: France
 
 | 
			
				|  Posted: Wed Nov 15, 2006 11:57 pm    Post subject: |   |  
				| 
 |  
				| I don't remember who wrote it but don't we have a BRAM lib in HuC? It's written in ASM if I remember right. _________________
 David Michel
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| David Shadoff Regular
 
  
 
 Joined: 10 May 2002
 Posts: 83
 Location: Toronto, Ontario, Canada
 
 | 
			
				|  Posted: Thu Nov 16, 2006 4:39 am    Post subject: |   |  
				| 
 |  
				| Geez David, I think you're right. 
 What's really strange is... I think I wrote part of it (but I didn't work too hard at testing it).
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nodtveidt Elder
 
  
 
 Joined: 27 Dec 2004
 Posts: 414
 Location: Isla del Encanto
 
 | 
			
				|  Posted: Thu Nov 16, 2006 1:19 pm    Post subject: |   |  
				| 
 |  
				| Yes, HuC has BRAM functions in the clib (since version 1.5, with some functions appearing in 3.03). I've used them for ages. _________________
 Frozen Utopia
 Retro gaming was never this cool.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| ccovell Regular
 
  
 
 Joined: 19 Dec 2005
 Posts: 100
 Location: Japan
 
 | 
			
				|  Posted: Fri Dec 08, 2006 2:59 pm    Post subject: HuC BRAM libs have a bug!? |   |  
				| 
 |  
				| Hi, I'm having fun (?) using the BRAM interfacing routines from HuC, but I think I've discovered a serious bug in the routines that use bm_open(). The function goes like this:
  	  | Code: |  	  | ; bm_open(char *name [bx]) ; ---
 ; Internal function to obtain access to a named file
 ...
 ; -- compare names
 cly
 ldx   #4
 .l2:     lda   [_bx],Y
 sxy
 cmp   [_si],Y
 ...
 | 
 
 But the functions bm_delete(), bm_read(), and bm_write() store the name in AX (comments mine):
 
  	  | Code: |  	  | lib2_bm_delete: __stw   <_ax      ;Is this for real????
 jsr   lib2_bm_open
 bcs   .out
 ...
 | 
 
 I was getting file deletion errors every time I tried, and then I noticed this mistake in the HuC Libs.  Actually, several other functions also say that parameters are passed through [bx] but the functions that call them pass them through AX.  Whoever actually wrote the BRAM libs might want to look into this.
 _________________
 http://www.chrismcovell.com
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		|  |