NES Programming Blog
Moderator: Moderators
Re: NES Programming Blog
I tried it, works perfectly, I'm going to update the MIDI section to indicate the better method, Bavi_H.
Options/Preferences/MIDI/ 96 ticks per quarter note.
You get 4 rows per note in Famitracker 0.4.2, through MIDI import.
Options/Preferences/MIDI/ 96 ticks per quarter note.
You get 4 rows per note in Famitracker 0.4.2, through MIDI import.
nesdoug.com -- blog/tutorial on programming for the NES
- heardtheword
- Posts: 20
- Joined: Mon Feb 08, 2016 1:22 pm
- Contact:
Re: NES Programming Blog
Very nice tutorials! I didn't even realize C was an option for NES programming.
You might want to consider adding a slight background to the code examples so it's easier to tell what is code instead of explanation. Otherwise, great stuff!
You might want to consider adding a slight background to the code examples so it's easier to tell what is code instead of explanation. Otherwise, great stuff!
Re: NES Programming Blog
Thanks, I'll consider making color changes to the code...probably better I should improve the code, maybe.
I'm considering adding a few pages on ASM lessons, but I'm not sure how I should organize it. I don't want to go alphabetically, as some documents do...I wanted to start with simple LDA, STA...but it occurred to me that some of the more complicated LDA modes (indirect) probably shouldn't go on the first page...
Maybe I should start with math and bit shifting, and simple zero page LDA, STA.
I'm considering adding a few pages on ASM lessons, but I'm not sure how I should organize it. I don't want to go alphabetically, as some documents do...I wanted to start with simple LDA, STA...but it occurred to me that some of the more complicated LDA modes (indirect) probably shouldn't go on the first page...
Maybe I should start with math and bit shifting, and simple zero page LDA, STA.
nesdoug.com -- blog/tutorial on programming for the NES
Re: NES Programming Blog
I'd say start with explaining what the Accumulator and index registers are, and then introducing LDA, STA; LDX, STX; LDY, STY. Then explain the difference between an address and an immediate value (With maybe a brief mention of the zero-page). After that, you could gradually introduce new instructions, categorized by math, bitwise operations, logic, etc., and then later on go into more advanced addressing methods like Indexed and Indirect.dougeff wrote:I'm considering adding a few pages on ASM lessons, but I'm not sure how I should organize it. I don't want to go alphabetically, as some documents do...I wanted to start with simple LDA, STA...but it occurred to me that some of the more complicated LDA modes (indirect) probably shouldn't go on the first page...
Maybe I should start with math and bit shifting, and simple zero page LDA, STA.
Just an idea.
Re: NES Programming Blog
First of all , thank dougeff for the work he has done in his blog. He had long needed a tutorial and hands. I must also apologize for my bad English . This post has been translated by Google translator .
However , there are many things that escape me despite being fairly well explained .
My radical doubt ignorance when it comes to creating longer than two simple horizontal scroll Nametables levels.
How I can do to make the updating nametable go slowly while the background moves ?
Thank you.
PD: en español debajo de estas lineas.
Antes de nada, dar las gracias a dougeff por el trabajo que ha hecho en su blog. Hacía tiempo que necesitaba tener un tutorial así entre manos. También debo disculparme por mi mal ingles. Este post ha sido traducido mediante Google Traductor.
No obstante, hay muchas cosas que se me escapan pese a estar bastante bien explicado.
Mi duda radical en el desconocimiento a la hora de crear niveles más largos que dos simples Nametables en scroll horizontal.
¿Como puedo hacer para que el nametable se vaya actualizando poco a poco mientras avanza el background?
Gracias.
However , there are many things that escape me despite being fairly well explained .
My radical doubt ignorance when it comes to creating longer than two simple horizontal scroll Nametables levels.
How I can do to make the updating nametable go slowly while the background moves ?
Thank you.
PD: en español debajo de estas lineas.
Antes de nada, dar las gracias a dougeff por el trabajo que ha hecho en su blog. Hacía tiempo que necesitaba tener un tutorial así entre manos. También debo disculparme por mi mal ingles. Este post ha sido traducido mediante Google Traductor.
No obstante, hay muchas cosas que se me escapan pese a estar bastante bien explicado.
Mi duda radical en el desconocimiento a la hora de crear niveles más largos que dos simples Nametables en scroll horizontal.
¿Como puedo hacer para que el nametable se vaya actualizando poco a poco mientras avanza el background?
Gracias.
Re: NES Programming Blog
Keep the camera position in a variable. This camera position defines what area is visible. From it, you can calculate the position of the column of tiles that is next to appear. If the camera has not yet advanced to a new column of tiles, there's nothing new to see, so don't update anything. But if it has, then prepare a list of tile numbers, and then copy it into nametable memory during the next vblank.
The camera, represented by a red bracket, has advanced into the column of blocks that need to be updated.
The camera, represented by a red bracket, has advanced into the column of blocks that need to be updated.
Re: NES Programming Blog
To add a bit...
'camera position' = Horizontal Scroll, the first number stored at register $2005
When Horizontal Scoll rolls over (>255) you tell it to change base nametables, controlled by the $2000 register.
xxxx xx00 = nametable #0, left screen
xxxx xx01 = nametable #1, right screen
Nerdy Nights also has a tutorial on this...
http://nintendoage.com/forum/messagevie ... adid=36958
'camera position' = Horizontal Scroll, the first number stored at register $2005
When Horizontal Scoll rolls over (>255) you tell it to change base nametables, controlled by the $2000 register.
xxxx xx00 = nametable #0, left screen
xxxx xx01 = nametable #1, right screen
Nerdy Nights also has a tutorial on this...
http://nintendoage.com/forum/messagevie ... adid=36958
nesdoug.com -- blog/tutorial on programming for the NES
Re: NES Programming Blog
The truth is that this is very complicated . At the end I relied on lesson number 11 dougeff to get done scrolling .
I climb a small demo: https://www.dropbox.com/home/public/NES ... 022016.nes
Why did the rare artifacts appear in the sky ? My NameTable is not it. By not charging it
PD : Remember that 'm programming based on the lessons dougeff
Spanish:
La verdad es que esto es muy complicado. Al final me he basado en la lección número 11 de dougeff para conseguir hacer scrolling.
Os subo una pequeña demo.
¿Por que me aparecen los artefactos raros en el cielo? Mi Nametable no es así. No se por que carga eso
PD: Recordad que estoy programando basandome en las lecciones de shiru
I climb a small demo: https://www.dropbox.com/home/public/NES ... 022016.nes
Why did the rare artifacts appear in the sky ? My NameTable is not it. By not charging it
PD : Remember that 'm programming based on the lessons dougeff
Spanish:
La verdad es que esto es muy complicado. Al final me he basado en la lección número 11 de dougeff para conseguir hacer scrolling.
Os subo una pequeña demo.
¿Por que me aparecen los artefactos raros en el cielo? Mi Nametable no es así. No se por que carga eso
PD: Recordad que estoy programando basandome en las lecciones de shiru
Re: NES Programming Blog
Definitely attribute table has wrong color palette defined for those bits of screen. Maybe you're writing too many byes to the PPU, and it's corrupting the attribute table.
nesdoug.com -- blog/tutorial on programming for the NES
Re: NES Programming Blog
Mmmm , I've been messing with the code of the lesson 10 and if I modify the allocation of tiles from heaven , the same fault occurs.dougeff wrote:Definitely attribute table has wrong color palette defined for those bits of screen. Maybe you're writing too many byes to the PPU, and it's corrupting the attribute table.
Simply assigning address 1 where previously put 0 in the tiles, and skips the error.
const unsigned char METATILES[]={
0, 0, 0, 0, //0 sky
....
const unsigned char METATILES[]={
1, 1, 1, 1, //0 sky
...
Could it be a problem of the code itself ? Any misconfiguration ?
Re: NES Programming Blog
I'll look at it later today.
nesdoug.com -- blog/tutorial on programming for the NES
Re: NES Programming Blog
Thanks!!!dougeff wrote:I'll look at it later today.
Re: NES Programming Blog
Apparently I forgot how to do math when I wrote this one, and it was only by dumb luck that it worked to begin with.
The tile buffering system was buggy...each was overflowing into the next one because...
(in BufferMT.c)...
while (index < 16){
should have been...
while (index < 15){
Since the screen is only 15 metatiles high (*16 pixels = 240)...and it should index from 0-14.
And I also increased the buffer sizes (in lesson11.c)...slightly larger than we need, but now easier to read in the hex editor debugging tool...
unsigned char BUFFER1[32];//left column 1
unsigned char BUFFER2[32];//right column 1
unsigned char BUFFER3[32];//left column 2
unsigned char BUFFER4[32];//right column 2
(before I erroneously had them 26, but was indexing up to 30).
Anyway, the link has been updated...sorry for the trouble.
http://dl.dropboxusercontent.com/s/08oi ... sson11.zip
The tile buffering system was buggy...each was overflowing into the next one because...
(in BufferMT.c)...
while (index < 16){
should have been...
while (index < 15){
Since the screen is only 15 metatiles high (*16 pixels = 240)...and it should index from 0-14.
And I also increased the buffer sizes (in lesson11.c)...slightly larger than we need, but now easier to read in the hex editor debugging tool...
unsigned char BUFFER1[32];//left column 1
unsigned char BUFFER2[32];//right column 1
unsigned char BUFFER3[32];//left column 2
unsigned char BUFFER4[32];//right column 2
(before I erroneously had them 26, but was indexing up to 30).
Anyway, the link has been updated...sorry for the trouble.
http://dl.dropboxusercontent.com/s/08oi ... sson11.zip
nesdoug.com -- blog/tutorial on programming for the NES
Re: NES Programming Blog
Ouh yeah!!! Thank you dougeff
Indeed , that was the problem . I keep messing with this demo.
Indeed , that was the problem . I keep messing with this demo.
Re: NES Programming Blog
Continuing research the code, I decided to increase the number of rooms 4 to 5 (for example)
I created a new CSV called A5.csv
I stuck a #include " BG / A5.csv "
In the array ROOMS [ ] I added (int) & A5
In move_logic() function, variable Room &= 3 converted it to 4.
In New_Room() function, RoomB &= 3 variable became to 4.
In the main() function, RoomPlus &= 3 variable became to 4.
Still, I can not get this new room appears.
Am I skipping a step?
Spanish:
Continuando con la investigación del código, me propuse aumentar el numero de habitaciones de 4 a 5 (por ejemplo)
Creé un nuevo CSV llamado A5.csv,
Metí un #include "BG/A5.csv"
En el array ROOMS[] añadí (int) &A5
En la función move_logic, la variable Room &= 3 la convertí a 4.
En la función New_Room, la variable RoomB &= 3 la convertí a 4.
En la función main, la variable RoomPlus &= 3 la convertí a 4.
Pese a todo, no consigo que aparezca esta nueva habitación.
¿Me estoy saltando algún paso?
I created a new CSV called A5.csv
I stuck a #include " BG / A5.csv "
In the array ROOMS [ ] I added (int) & A5
In move_logic() function, variable Room &= 3 converted it to 4.
In New_Room() function, RoomB &= 3 variable became to 4.
In the main() function, RoomPlus &= 3 variable became to 4.
Still, I can not get this new room appears.
Am I skipping a step?
Spanish:
Continuando con la investigación del código, me propuse aumentar el numero de habitaciones de 4 a 5 (por ejemplo)
Creé un nuevo CSV llamado A5.csv,
Metí un #include "BG/A5.csv"
En el array ROOMS[] añadí (int) &A5
En la función move_logic, la variable Room &= 3 la convertí a 4.
En la función New_Room, la variable RoomB &= 3 la convertí a 4.
En la función main, la variable RoomPlus &= 3 la convertí a 4.
Pese a todo, no consigo que aparezca esta nueva habitación.
¿Me estoy saltando algún paso?
Last edited by Diskover on Mon Feb 22, 2016 12:58 am, edited 1 time in total.