Programación NES (dendy), ensamblador 6502

Desde la infancia, tuve el sueño de escribir un juego para la querida consola dandy, a medida que pasaba el tiempo, el sueño apareció y luego se apagó de nuevo. Ella me encaminó hacia la magia de la programación, y ahora han pasado más de 20 años soy programadora, y nuevamente estoy tratando de comprender la magia de ese dandy que tanto excitó mi imaginación en una infancia difícil pero feliz. Hoy les contaré cómo aprendí los secretos de esta magia, finalmente pude mostrar sprites en la pantalla y aprendí a dibujar un fondo.






php , assembler , assembler api . Dendy ( NES, Famicom), , , , . ():







1. CPU -

2. PPU -

3. APU -





, PPU . , 2 CHR ( ) . 0- 1-, 88, 2- . .



0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

0 1 1 1 1 1 0 0 + 1 1 1 1 1 1 1 1

0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0

0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0

0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0



, 3- :





  • 0 + 0 = 0 -





  • 0 + 1 = 1 -





  • 1 + 1 = 2 -





  • 1 + 0 = 3 -





, background 4 , 3-. , 1- .





, , A, X, Y. X, Y . A.





LDA {argument} -   A  argument ( #20, hex #$20,  %00010010)
STA {address} -  A   ( ppu  )
      
      



X Y





LDX {argument} -    X
LDY {argument}
STX {address} -  X
STY {address} -  Y
INX - increment X
INY - increment Y
CPX {argument} -  x  
CPY {argument} -  y  
      
      



:





JMP {address} -   
BEQ {address} -     CPX true
BNQ {address} -     CPX   
      
      



, :





  • ?





  • ?





NES, PAL 256x240, NTSC 256x224. 88, 3230 PAL, NTSC . , 3 : , nametable ( ), .





  1. - 16 4 4 . .





  2. Nametable - 3230 , , 2 , 2 4- 4 . , , .





  3. - nes 3232 22 , 88 , 1 , %00000000. 2 2 .

    -----------------

    | 0 | 1 |

    -----------------

    | 2 | 3 |

    -----------------



    , , . 2 :





00 - 0-  4- 
01 - 1-
11 - 2-
10 - 3-
      
      



nes

, , , X PPU $2005 X Y, .





LDA #25 ;   X 
STA $2005 ;  #25  
LDA #00 ; 0   Y
STA $2005 ;  #0  
      
      







LDA #100     ;  Y 
STA $2004   ;    OEM data PPU
LDA #00     ;      (      )
STA $2004   ;   
LDA #%00010111  ;        
								;  ,     
STA $2004   ;   
LDA #192    ;  Y 
STA $2004   ;   
      
      



88 6. , $2000 - $2400 , $2400 - $2800 . nametable.





LDA #$20 ;  
STA $2006 ;  2          
LDA #$00 ;  
STA $2006
      
      



, X Y, .





LDA $24 ;       CHR
STA $2007 ;    
;         
      
      



, ,





  LDX #00 ;  0  x  decimal    #$00 - #$FF  
section: 
  ;        
  LDA $24
  STA $2007
  CPX #255
  INX
  BNE section
      
      



255 255 , . Y 4 . , $3F00-$3F0F - 16 . nametable





LDA #$3F ;    $3F
STA $2006
LDA #$00 ;   
STA $2006

LDA $22 ;   nes 
STA $2007 ;     $3F00

LDA $05 ; 
STA $2007 ;     $3F01

;     14 
      
      



16 16





background_pallete:
  .byt $01, $02, $03, $04 
  .byt $05, $22, $23, $24 
  .byt $25, $26, $27, $28
  .byt $31, $32, $33, $34

   LDX #$00 ; x  0

   LDA #$3F ;    $3F
	 STA $2006
	 LDA #$00 ;   
	 STA $2006

loadPallete:
   LDA background_pallete, x ; background_pallete    
                             ;     , x  +1  
   STA $2007 ;  
   CPX #$0F ;  X  16 
   INX ; X = X+1
   BNE loadPallete ;      X   16 
                   ;         
      
      



, $23C0 - $23FF $23C0, $23C8 8 8 .





, , , , , $2007





LDA #$23
STA $2006
LDA #$C2
STA $2006 ;   $23C2 
LDA %00001100 ;    ,      
STA $2007 ;    
      
      



Así, mostrar el fondo se convierte en una tarea bastante trivial, resultado de 2 semanas de estudio del tema de ensambladores que viste en la captura de pantalla en el título del artículo. De hecho, los ensambladores no son tan complicados si rompemos los estereotipos de programación que estamos usando ahora, y es más fácil mirar todo esto cuando llega el momento de entender que es posible que un ensamblador acceda a un área de memoria disponible para escriba algo de información allí, que luego se mostrará mágicamente en la pantalla ... Esta es una pequeña victoria sobre uno mismo, un pequeño paso hacia un sueño. Gracias a todos por su atención y hasta pronto.








All Articles