NES-Programmierung (dendy), Assembler 6502

Seit meiner Kindheit hatte ich den Traum, ein Spiel für die geliebte Dandy-Konsole zu schreiben. Mit der Zeit erschien der Traum und erlosch dann wieder. Sie hat mich auf die Magie des Programmierens aufmerksam gemacht, und jetzt sind mehr als 20 Jahre vergangen. Ich bin Programmiererin, und wieder versuche ich, die Magie dieses Dandys zu verstehen, die meine Fantasie in einer schwierigen, aber glücklichen Kindheit so erregt hat. Heute werde ich Ihnen erzählen, wie ich die Geheimnisse dieser Magie gelernt habe, endlich konnte ich Sprites auf dem Bildschirm anzeigen und lernen, wie man einen Hintergrund zeichnet.






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 ;    
      
      



Das Anzeigen des Hintergrunds wird somit zu einer eher trivialen Aufgabe. Das Ergebnis einer zweiwöchigen Untersuchung des Themas der Assembler, die Sie im Screenshot im Titel des Artikels gesehen haben. Tatsächlich ist Assembler nes nicht so kompliziert, wenn wir die Programmierstereotypen, die wir jetzt verwenden, aufheben, und es ist einfacher, all dies zu betrachten, wenn der Moment zu verstehen ist, dass ein Assembler auf einen verfügbaren Speicherbereich zugreifen kann Schreiben Sie dort einige Informationen, die dann auf magische Weise auf dem Bildschirm angezeigt werden ... Dies ist ein kleiner Sieg über sich selbst, ein kleiner Schritt in Richtung eines Traums. Vielen Dank für Ihre Aufmerksamkeit und bis bald.








All Articles