It is currently Sun Nov 19, 2017 7:28 am

All times are UTC - 7 hours





Post new topic Reply to topic  [ 21 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Wed Jul 20, 2011 8:53 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
I'm working on making a minimal functional NES program: initialize the hardware, clear the screen, load a palette, draw a background, let the player control a character using the Control Pad, and animate the walking with six frames plus flipping. It's intended largely as a teaching tool, and I want it to be both easy to understand and an example of good practice. If there are *any* bad practices in this program (other than possibly the fact that it's homebrew in the first place), or anything that an NES programming novice isn't likely to understand, please let me know.

A basic example (NROM-128) and a switching example (SGROM/SNROM/UOROM) can be found here (updated 2015-02-13).


Last edited by tepples on Sun Oct 16, 2011 3:39 pm, edited 3 times in total.

Top
 Profile  
 
PostPosted: Thu Jul 21, 2011 12:24 am 
Offline
User avatar

Joined: Mon Nov 27, 2006 11:56 pm
Posts: 85
Location: Sollentuna, Sweden
Using dex instead of ldx #$FF to set the stack pointer is a bit unnecessary as you're aiming for clarity here.

Also, imo, it's bad practice to clear memory on init (as you do with the zeropage). The only reason to do it is so that you can assume it's set to 0 whenever you want to use memory on the zeropage. But that might not be true at a later stage in development since code might get moved around and whatever.

The zeropage locations you use with the assumption it's set to 0 is cur_keys, nmis, player_dxlo and player_frame_sub (from a quick skim through of the code, i might have missed something).

These should be individually initialized just as you do with the other player_* memory locations since that will make things alot more clear.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2011 1:52 am 
Offline
Formerly 65024U

Joined: Sat Mar 27, 2010 12:57 pm
Posts: 2257
I think DEX is fine, X=X-1 is simple enough. And I see some CCstuff, right? I think he clears it because C wants it cleared on startup? I dunno what you compile with. Also, on my computer the text files had no line breaks...? Okay tutorial though, seems good to me. Is the screen compressed in memory too? When I looked at the debugger with FCEUX, I saw a little data in the middle of nowhere. Wondered what it was...


Top
 Profile  
 
PostPosted: Thu Jul 21, 2011 4:56 am 
Offline
NESICIDE developer
User avatar

Joined: Mon Oct 13, 2008 7:55 pm
Posts: 1049
Location: Minneapolis, MN
tepples wrote:

Awesome as usual, tepples. Seems a fine intro to sprite animation and not encumbered by jump physics. But you have collision detection. I need to study this! :D


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2011 5:57 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
Thanks to all for the feedback.

Anders_A wrote:
it's bad practice to clear memory on init

I've added a few lines of comments to describe the clearing vs. anti-clearing holy war.

3gengames wrote:
I think DEX is fine, X=X-1 is simple enough.

Although I guess it needs a comment because a newbie might not be familiar with how LDX #$00 DEX produces $FF. Added to next version.

Quote:
Also, on my computer the text files had no line breaks...?

Newline on Linux is $0A, just as on FreeBSD, Mac OS X, and other UNIX style operating systems. Newline in Windows Notepad is $0D $0A, and it appears Windows Notepad won't recognize a UNIX newline. Sometimes I forget about this because all Windows PCs that I regularly use have Notepad++ installed, and Notepad++ and Programmer's Notepad recognize both newline conventions. Or try dragging the .s files into an open web browser window. Added note at the top of README.txt.

Quote:
Is the screen compressed in memory too?

It's not as much compressed as object-based: there's a floor, and there are two columns of blocks.

Quote:
When I looked at the debugger with FCEUX, I saw a little data in the middle of nowhere. Wondered what it was...

Does the data match 'initial_palette' around line 207 of main.s?

cpow wrote:
Seems a fine intro to sprite animation and not encumbered by jump physics.

Which goes back to an old discussion on gbadev.org about how to make a platformer with no jumping.

Quote:
But you have collision detection.

It's very simple: all X values outside a certain range are solid.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2011 7:05 am 
Offline

Joined: Thu Jul 13, 2006 3:15 pm
Posts: 177
Well done.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2011 8:13 pm 
Offline
User avatar

Joined: Tue Feb 13, 2007 9:02 pm
Posts: 147
Location: Richmond, VA
Nice work!

Very minor copy/paste typo: it still says 'NES controller reading code' in the header of the main.s file.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2011 9:29 pm 
Offline

Joined: Thu Jun 04, 2009 9:07 am
Posts: 30
tepples wrote:
Quote:
Also, on my computer the text files had no line breaks...?

Newline on Linux is $0A, just as on FreeBSD, Mac OS X, and other UNIX style operating systems. Newline in Windows Notepad is $0D $0A, and it appears Windows Notepad won't recognize a UNIX newline. Sometimes I forget about this because all Windows PCs that I regularly use have Notepad++ installed, and Notepad++ and Programmer's Notepad recognize both newline conventions. Or try dragging the .s files into an open web browser window. Added note at the top of README.txt.


Gedit runs just fine on Windows (except for getting multiple tabs when opening from Explorer doesn't work). Also, when I see a file that fails in Notepad like that, I open it in Wordpad, CTRL+S, then open it again in Notepad. But then again most of the time I use Gedit (which has syntax hilighting).


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 22, 2011 6:02 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
I've released a new version with your suggested additions to comments and updated the link in the first post.

Hangin10 wrote:
tepples wrote:
Windows Notepad won't recognize a UNIX newline.

Gedit runs just fine on Windows (except for getting multiple tabs when opening from Explorer doesn't work). Also, when I see a file that fails in Notepad like that, I open it in Wordpad, CTRL+S, then open it again in Notepad. But then again most of the time I use Gedit (which has syntax hilighting).

I too use Gedit on my Ubuntu laptop. Would you share your syntax highlighting file for Gedit?


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jul 23, 2011 8:28 am 
Offline
User avatar

Joined: Sat Mar 26, 2011 1:06 pm
Posts: 79
Location: Germany
I have one here which is based on several syntax highlighting files I found either here or with a Google search.
It is not perfect, but it works for me.
You can give it a try if you want. I can't find the MIME-type file that goes with it anymore, but I'm sure one would be able to create that him- or herself very easily.
Here is a link:
http://www.cojobo.bonn.de/~t_unte/ASM/asm6502.lang


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jul 23, 2011 12:50 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
I've added an MMC1 example suitable for SGROM or SNROM boards. It demonstrates CHR RAM loading and bank-to-bank procedure calls.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 24, 2011 1:59 pm 
Offline
Formerly ~J-@D!~
User avatar

Joined: Sun Mar 12, 2006 12:36 am
Posts: 445
Location: Rive nord de Montréal
Too bad Blargg isn't around, I feel she'd like the fact that more and more good documentation is now available for others.


Top
 Profile  
 
PostPosted: Wed Jan 02, 2013 8:51 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
Tip (requested by jwdonal on #nesdev): If you get ImportError: No module named PIL then you need to install Python Imaging Library.


Top
 Profile  
 
PostPosted: Fri May 16, 2014 9:10 pm 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
It's about time I upgraded the projects to track minor changes to the assembly language syntax of ca65 and the command line syntax of ld65.


Top
 Profile  
 
PostPosted: Mon Sep 22, 2014 8:44 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 19227
Location: NE Indiana, USA (NTSC)
It has come to my attention that instructions for setting up a build environment for this demo are needed. That's being discussed in this topic.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 21 posts ]  Go to page 1, 2  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group