Add files via upload
This commit is contained in:
parent
8233b07815
commit
d154813d7a
5
assemble.sh
Normal file
5
assemble.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
ca65 src/helloworld.asm
|
||||||
|
ca65 src/reset.asm
|
||||||
|
ld65 src/reset.o src/helloworld.o -C nes.cfg -o helloworld.nes
|
BIN
helloworld.nes
Normal file
BIN
helloworld.nes
Normal file
Binary file not shown.
22
nes.cfg
Normal file
22
nes.cfg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
MEMORY {
|
||||||
|
HEADER: start=$00, size=$10, fill=yes, fillval=$00;
|
||||||
|
ZEROPAGE: start=$10, size=$ff;
|
||||||
|
STACK: start=$0100, size=$0100;
|
||||||
|
OAMBUFFER: start=$0200, size=$0100;
|
||||||
|
RAM: start=$0300, size=$0500;
|
||||||
|
ROM: start=$8000, size=$8000, fill=yes, fillval=$ff;
|
||||||
|
CHRROM: start=$0000, size=$2000;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
HEADER: load=HEADER, type=ro, align=$10;
|
||||||
|
ZEROPAGE: load=ZEROPAGE, type=zp;
|
||||||
|
STACK: load=STACK, type=bss, optional=yes;
|
||||||
|
OAM: load=OAMBUFFER, type=bss, optional=yes;
|
||||||
|
BSS: load=RAM, type=bss, optional=yes;
|
||||||
|
DMC: load=ROM, type=ro, align=64, optional=yes;
|
||||||
|
CODE: load=ROM, type=ro, align=$0100;
|
||||||
|
RODATA: load=ROM, type=ro, align=$0100;
|
||||||
|
VECTORS: load=ROM, type=ro, start=$FFFA;
|
||||||
|
CHR: load=CHRROM, type=ro, align=16, optional=yes;
|
||||||
|
}
|
BIN
src/background.nam
Normal file
BIN
src/background.nam
Normal file
Binary file not shown.
7
src/constants.inc
Normal file
7
src/constants.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
PPUCTRL = $2000
|
||||||
|
PPUMASK = $2001
|
||||||
|
PPUSTATUS = $2002
|
||||||
|
PPUADDR = $2006
|
||||||
|
PPUDATA = $2007
|
||||||
|
OAMADDR = $2003
|
||||||
|
OAMDMA = $4014
|
8
src/header.inc
Normal file
8
src/header.inc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
.segment "HEADER"
|
||||||
|
.byte $4e, $45, $53, $1a ; Magic string that always begins an iNES header
|
||||||
|
.byte $02 ; Number of 16KB PRG-ROM banks
|
||||||
|
.byte $01 ; Number of 8KB CHR-ROM banks
|
||||||
|
.byte %00000001 ; Vertical mirroring, no save RAM, no mapper
|
||||||
|
.byte %00000000 ; No special-case flags set, no mapper
|
||||||
|
.byte $00 ; No PRG-RAM present
|
||||||
|
.byte $00 ; NTSC format
|
421
src/helloworld.asm
Normal file
421
src/helloworld.asm
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
.include "constants.inc"
|
||||||
|
.include "header.inc"
|
||||||
|
|
||||||
|
.segment "CODE"
|
||||||
|
.proc irq_handler
|
||||||
|
RTI
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc nmi_handler
|
||||||
|
LDA #$00
|
||||||
|
STA OAMADDR
|
||||||
|
LDA #$02
|
||||||
|
STA OAMDMA
|
||||||
|
|
||||||
|
;Update tiles *after* DMA transfer
|
||||||
|
JSR update_player
|
||||||
|
JSR draw_player
|
||||||
|
|
||||||
|
LDA #$00
|
||||||
|
STA $2005
|
||||||
|
STA $2005
|
||||||
|
RTI
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.import reset_handler
|
||||||
|
|
||||||
|
|
||||||
|
.proc draw_player
|
||||||
|
;save registers
|
||||||
|
PHP
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
|
||||||
|
;write player ship tile numbers
|
||||||
|
|
||||||
|
LDA #$05
|
||||||
|
STA $0201
|
||||||
|
LDA #$06
|
||||||
|
STA $0205
|
||||||
|
LDA #$07
|
||||||
|
STA $0209
|
||||||
|
LDA #$08
|
||||||
|
STA $020D
|
||||||
|
|
||||||
|
; write player ship tile attributes
|
||||||
|
; use palette 0
|
||||||
|
LDA #$00
|
||||||
|
STA $0202
|
||||||
|
STA $0206
|
||||||
|
STA $020A
|
||||||
|
STA $020E
|
||||||
|
|
||||||
|
; store tile locations
|
||||||
|
; top left tile:
|
||||||
|
LDA player_y
|
||||||
|
STA $0200
|
||||||
|
LDA player_x
|
||||||
|
STA $0203
|
||||||
|
|
||||||
|
;top right tile (x+8):
|
||||||
|
LDA player_y
|
||||||
|
STA $0204
|
||||||
|
LDA player_x
|
||||||
|
CLC
|
||||||
|
ADC #$08
|
||||||
|
STA $0207
|
||||||
|
|
||||||
|
;bottom left tile (y+8)
|
||||||
|
LDA player_y
|
||||||
|
CLC
|
||||||
|
ADC #$08
|
||||||
|
STA $0208
|
||||||
|
LDA player_x
|
||||||
|
STA $020B
|
||||||
|
|
||||||
|
;bottom right tile (x+8, y+8)
|
||||||
|
LDA player_y
|
||||||
|
CLC
|
||||||
|
ADC #$08
|
||||||
|
STA $020C
|
||||||
|
LDA player_x
|
||||||
|
CLC
|
||||||
|
ADC #$08
|
||||||
|
STA $020F
|
||||||
|
|
||||||
|
; restore registers and return
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
PLP
|
||||||
|
RTS
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc update_player
|
||||||
|
PHP
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
|
||||||
|
LDA player_x
|
||||||
|
CMP #$e0
|
||||||
|
BCC not_at_right_edge
|
||||||
|
; if BCC is not taken, we are greater than $e0
|
||||||
|
LDA #$00
|
||||||
|
STA player_dir ; start moving left
|
||||||
|
JMP direction_set ; we already chose a direction,
|
||||||
|
; so we can skip the left side check
|
||||||
|
not_at_right_edge:
|
||||||
|
LDA player_x
|
||||||
|
CMP #$10
|
||||||
|
BCS direction_set
|
||||||
|
; if BCS not taken, we are less than $10
|
||||||
|
LDA #$01
|
||||||
|
STA player_dir ; start moving right
|
||||||
|
direction_set:
|
||||||
|
; now, actually update player_x
|
||||||
|
LDA player_dir
|
||||||
|
CMP #$01
|
||||||
|
BEQ move_right
|
||||||
|
; if player_dir minus $01 is not zero,
|
||||||
|
; that means player_dir was $00 and
|
||||||
|
; we need to move left
|
||||||
|
DEC player_x
|
||||||
|
JMP exit_subroutine
|
||||||
|
move_right:
|
||||||
|
INC player_x
|
||||||
|
exit_subroutine:
|
||||||
|
; all done, clean up an return
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
PLP
|
||||||
|
RTS
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.export main
|
||||||
|
.proc main
|
||||||
|
|
||||||
|
LDX PPUSTATUS
|
||||||
|
LDX #$3f
|
||||||
|
STX PPUADDR
|
||||||
|
LDX #$00
|
||||||
|
STX PPUADDR
|
||||||
|
|
||||||
|
LDX #$00
|
||||||
|
load_palettes:
|
||||||
|
LDA palettes,X
|
||||||
|
STA PPUDATA
|
||||||
|
INX
|
||||||
|
CPX #$20
|
||||||
|
BNE load_palettes
|
||||||
|
|
||||||
|
LDX #$00
|
||||||
|
|
||||||
|
; write a nametable
|
||||||
|
; Big Stars
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$72
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$68
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$74
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$5A
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$CB
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$64
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$C7
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$55
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$B9
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$23
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$6D
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2F
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
; write a nametable
|
||||||
|
; Medium Stars
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$64
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$4F
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$B9
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$DD
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$4D
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$D1
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2D
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
; write a nametable
|
||||||
|
; Small Stars
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$3A
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$20
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$B9
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$4D
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$4D
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$21
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$F0
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$26
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$E4
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$22
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$CE
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$23
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$36
|
||||||
|
STA PPUADDR
|
||||||
|
LDX #$2E
|
||||||
|
STX PPUDATA
|
||||||
|
|
||||||
|
; finally, attribute table
|
||||||
|
LDA PPUSTATUS
|
||||||
|
LDA #$23
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #$D4
|
||||||
|
STA PPUADDR
|
||||||
|
LDA #%01110000
|
||||||
|
STA PPUDATA
|
||||||
|
|
||||||
|
vblankwait: ; wait for another vblank before continuing
|
||||||
|
BIT PPUSTATUS
|
||||||
|
BPL vblankwait
|
||||||
|
|
||||||
|
LDA #%10010000 ; turn on NMIs, sprites use first pattern table
|
||||||
|
STA PPUCTRL
|
||||||
|
LDA #%00011110 ; turn on screen
|
||||||
|
STA PPUMASK
|
||||||
|
forever:
|
||||||
|
JMP forever
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.segment "ZEROPAGE"
|
||||||
|
player_x: .res 1
|
||||||
|
player_y: .res 1
|
||||||
|
player_dir: .res 1
|
||||||
|
.exportzp player_x, player_y
|
||||||
|
|
||||||
|
.segment "RODATA"
|
||||||
|
palettes:
|
||||||
|
.byte $0f, $12, $23, $27
|
||||||
|
.byte $0f, $2b, $3c, $39
|
||||||
|
.byte $0f, $0c, $07, $13
|
||||||
|
.byte $0f, $19, $09, $29
|
||||||
|
|
||||||
|
.byte $0f, $2d, $10, $15
|
||||||
|
.byte $0f, $19, $09, $29
|
||||||
|
.byte $0f, $19, $09, $29
|
||||||
|
.byte $0f, $19, $09, $29
|
||||||
|
|
||||||
|
sprite:
|
||||||
|
.byte $70, $05, $00, $80
|
||||||
|
.byte $70, $06, $00, $88
|
||||||
|
.byte $78, $07, $00, $80
|
||||||
|
.byte $78, $08, $00, $88
|
||||||
|
|
||||||
|
.segment "VECTORS"
|
||||||
|
.addr nmi_handler, reset_handler, irq_handler
|
||||||
|
|
||||||
|
.segment "CHR"
|
||||||
|
.incbin "starfield.chr"
|
BIN
src/helloworld.o
Normal file
BIN
src/helloworld.o
Normal file
Binary file not shown.
43
src/reset.asm
Normal file
43
src/reset.asm
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
.include "constants.inc"
|
||||||
|
|
||||||
|
.segment "ZEROPAGE"
|
||||||
|
.importzp player_x, player_y
|
||||||
|
|
||||||
|
.segment "CODE"
|
||||||
|
.import main
|
||||||
|
.export reset_handler
|
||||||
|
.proc reset_handler
|
||||||
|
SEI
|
||||||
|
CLD
|
||||||
|
LDX #$40
|
||||||
|
STX $4017
|
||||||
|
LDX #$FF
|
||||||
|
TXS
|
||||||
|
INX
|
||||||
|
STX PPUCTRL
|
||||||
|
STX PPUMASK
|
||||||
|
STX $4010
|
||||||
|
BIT PPUSTATUS
|
||||||
|
vblankwait:
|
||||||
|
BIT PPUSTATUS
|
||||||
|
BPL vblankwait
|
||||||
|
|
||||||
|
LDX #$00
|
||||||
|
LDA #$FF
|
||||||
|
clear_oam:
|
||||||
|
STA $0200, X
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
BNE clear_oam
|
||||||
|
vblankwait2:
|
||||||
|
BIT PPUSTATUS
|
||||||
|
BPL vblankwait2
|
||||||
|
; initialize zero-page values
|
||||||
|
LDA #$80
|
||||||
|
STA player_x
|
||||||
|
LDA #$a0
|
||||||
|
STA player_y
|
||||||
|
JMP main
|
||||||
|
.endproc
|
BIN
src/reset.o
Normal file
BIN
src/reset.o
Normal file
Binary file not shown.
BIN
src/starfield.chr
Normal file
BIN
src/starfield.chr
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user