Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .inesprg 1 ; 1x 16KB PRG code
- .ineschr 1 ; 1x 8KB CHR data
- .inesmap 0 ; mapper 0 = NROM, no bank swapping
- .inesmir 1 ; background mirroring
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- .rsset $0000
- randomness .rs 1 ;randomness for the letters
- apressed .rs 1 ;is A pressed?
- .bank 0
- .org $8000
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- RESET:
- SEI ;Fuck IRQs
- CLD ;Decimals too! Fuck 'em
- LDX #$40
- STX $4017 ;APU frame IRQ! I said FUCK IRQs!!!
- LDX #$FF
- TXS ;Set up stack
- INX ;X register overflow, X=0
- STX $2000 ;no NMI for now
- STX $2001 ;No rendering for now
- STX $4010 ;Dang! DMC IRQs! y so many of 'em?
- vblankwait1: ; First wait for vblank to make sure PPU is ready
- BIT $2002
- BPL vblankwait1
- clrmem:
- LDA #$00
- STA $0000, x
- STA $0100, x
- STA $0300, x
- STA $0400, x
- STA $0500, x
- STA $0600, x
- STA $0700, x
- LDA #$FE
- STA $0200, x ;move all sprites off screen
- INX
- BNE clrmem
- vblankwait2: ; Second wait for vblank, PPU is ready after this
- BIT $2002
- BPL vblankwait2
- ;NES is ready now! LET'S DO THIS! (LEEEEEEEEEEEEEROOOOOOOOOOOY JJJJJJJJJJJENKINS!)
- PalLoad:
- LDA $2002 ;PPU? r u there? We need to reset the HiLo latch!
- LDA #$3F ;Hi part of $3F00
- STA $2006
- LDA #$00 ;Lo part of it
- STA $2006
- LDX #$00
- PalLoop:
- LDA pal, x
- STA $2007 ;Load 'em palettes to PPU
- INX
- CPX #$20
- BNE PalLoop ;Advance only when all 32 palettes are copied!
- LDA #$30
- STA randomness ;Put value 30 in randomness variable
- LoadBG:
- LDA $2002
- LDA #$21 ;Write Hipart of $2100 to PPU
- STA $2006
- LDA #$00 ;Now Lopart
- STA $2006
- LDX #$00
- LoadBGLoop:
- LDA graphics, x ; load data from address (background + the value in x) (I hate typing, so I copypasted some NN code ;))
- STA $2007 ; write to PPU
- INX ; X = X + 1
- CPX #$00 ; Compare X to hex $00, decimal 00 - copying 256 bytes
- BNE LoadBGLoop ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
- ; if compare was equal to 256, keep going down
- LoadAttribute:
- LDA $2002 ; read PPU status to reset the high/low latch
- LDA #$23
- STA $2006 ; write the high byte of $23C0 address
- LDA #$C0
- STA $2006 ; write the low byte of $23C0 address
- LDX #$00 ; start out at 0
- LoadAttributeLoop:
- LDA attribute, x ; load data from address (attribute + the value in x)
- STA $2007 ; write to PPU
- INX ; X = X + 1
- CPX #$40 ; Compare X to hex $40, decimal 64 - copying 64 bytes
- BNE LoadAttributeLoop ; Branch to LoadAttributeLoop if compare was Not Equal to zero
- ; if compare was equal to 64, keep going down
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA $2001
- Forever:
- JMP Forever ;jump back to Forever, infinite loop
- NMI:
- LDA #$00
- STA $2003 ; set the low byte (00) of the RAM address
- LDA #$02
- STA $4014 ; set the high byte (02) of the RAM address, start the transfer
- INC randomness
- LDA randomness
- CMP #$40 ;Check if 40 (CHR value for the bottom part of the first row of letters)
- BEQ makeitfifty
- JMP fiftydone
- makeitfifty:
- LDA #$50 ;Speaks for itself -- goes to next row of letters!
- STA randomness
- fiftydone:
- LDA randomness
- CMP #$5A ;Got to Z?
- BEQ randreset
- JMP randresetted
- randreset:
- LDA #$30 ;Then reset it!
- STA randomness
- randresetted:
- LatchController:
- LDA #$01
- STA $4016
- LDA #$00
- STA $4016 ; tell both the controllers to latch buttons
- LDA $4016
- AND #%00000001
- BEQ AUnpressed
- LDA apressed
- CMP #$01 ;Is it pressed?
- BEQ ReadADone
- LDA $2002
- LDA #$21 ;Write Hipart of $21BC to PPU
- STA $2006
- LDA #$BC ;Now Lopart
- STA $2006
- LDA randomness
- STA $2007
- LDA $2002
- LDA #$21 ;Write Hipart of $21DC to PPU
- STA $2006
- LDA #$DC ;Now Lopart
- STA $2006
- LDA randomness
- CLC
- ADC #$10
- STA $2007
- LDA #$01
- STA apressed
- JMP ReadADone
- AUnpressed:
- LDA #$00
- STA apressed
- ReadADone:
- ;;This is the PPU clean up section, so rendering the next frame starts properly.
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA $2001
- LDA #$00 ;;tell the ppu there is no background scrolling
- STA $2005
- STA $2005
- RTI ; return from interrupt
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- .bank 1
- .org $E000
- pal:
- .db $0F,$18,$28,$38,$0F,$08,$18,$28,$0F,$00,$10,$20,$0F,$15,$3B,$30
- .db $0F,$1A,$3B,$30,$0F,$08,$27,$37,$0F,$30,$28,$31,$0F,$00,$10,$20
- graphics:
- .db $1C,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$FF,$FF,$FF,$FF,$FF ;;FG Soft logo top
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ;;
- .db $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$51,$30,$3D,$33,$3E ;;FG Middle,RLP top
- .db $3C,$FF,$3B,$34,$53,$53,$34,$51,$FF,$3F,$51,$3E,$36,$51,$30,$3C ;;
- .db $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$61,$40,$4D,$43,$4E ;;FG Bottom, RLP bottom
- .db $4C,$FF,$4B,$44,$63,$63,$44,$61,$FF,$4F,$61,$4E,$46,$61,$40,$4C ;;
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ;;NUFFIN
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ;;NUFFIN
- .db $3F,$54,$52,$37,$FF,$30,$FF,$30,$3D,$33,$FF,$56,$30,$53,$32,$37 ;;Push A and watch the box
- .db $FF,$53,$37,$34,$FF,$31,$3E,$57,$FF,$FF,$FF,$0B,$0C,$0D,$FF,$FF ;;
- .db $4F,$64,$62,$47,$FF,$40,$FF,$40,$4D,$43,$FF,$66,$40,$63,$42,$47 ;;Push A and watch the box
- .db $FF,$63,$47,$44,$FF,$41,$4E,$67,$FF,$FF,$FF,$1B,$FF,$1D,$FF,$FF ;;
- .db $5A,$55,$34,$32,$53,$51,$34,$57,$5D,$73,$5B,$74,$74,$71,$FF,$30 ;;Copyright
- .db $3D,$33,$FF,$35,$36,$FF,$52,$3E,$35,$53,$FF,$1B,$FF,$1D,$FF,$FF ;;
- .db $6A,$65,$44,$42,$63,$61,$44,$67,$6D,$83,$6B,$84,$84,$81,$FF,$40 ;;Copyright
- .db $4D,$43,$FF,$45,$46,$FF,$62,$4E,$45,$63,$FF,$2B,$2C,$2D,$FF,$FF ;;
- attribute:
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- .org $FFFA ;first of the three vectors starts here
- .dw NMI ;when an NMI happens (once per frame if enabled) the
- ;processor will jump to the label NMI:
- .dw RESET ;when the processor first turns on or is reset, it will jump
- ;to the label RESET:
- .dw 0 ;external interrupt IRQ is not used in this tutorial
- ;;;;;;;;;;;;;;
- .bank 2
- .org $0000
- .incbin "randomletter.chr" ;includes 8KB graphics file for the game
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement