Added Scroll+Input P1
This commit is contained in:
parent
391ee7e45c
commit
4923a53423
@ -1,5 +1,6 @@
|
||||
#! /bin/sh
|
||||
|
||||
ca65 src/helloworld.asm
|
||||
ca65 src/spaceship.asm
|
||||
ca65 src/reset.asm
|
||||
ld65 src/reset.o src/helloworld.o -C nes.cfg -o helloworld.nes
|
||||
ca65 src/controllers.asm
|
||||
ld65 src/reset.o src/controllers.o src/spaceship.o -C nes.cfg -o spaceship.nes
|
||||
|
@ -1 +0,0 @@
|
||||
BreakPoint: startAddr=00002002 endAddr=00000000 flags=EC--X- condition="" desc=""
|
Binary file not shown.
BIN
src/background2.nam
Normal file
BIN
src/background2.nam
Normal file
Binary file not shown.
@ -1,7 +1,18 @@
|
||||
PPUCTRL = $2000
|
||||
PPUMASK = $2001
|
||||
PPUSTATUS = $2002
|
||||
PPUSCROLL = $2005
|
||||
PPUADDR = $2006
|
||||
PPUDATA = $2007
|
||||
OAMADDR = $2003
|
||||
OAMDMA = $4014
|
||||
OAMDMA = $4014
|
||||
|
||||
CONTROLLER1 = $4016
|
||||
BTN_RIGHT = %00000001
|
||||
BTN_LEFT = %00000010
|
||||
BTN_DOWN = %00000100
|
||||
BTN_UP = %00001000
|
||||
BTN_START = %00010000
|
||||
BTN_SELECT =%00100000
|
||||
BTN_B = %01000000
|
||||
BTN_A = %10000000
|
35
src/controllers.asm
Normal file
35
src/controllers.asm
Normal file
@ -0,0 +1,35 @@
|
||||
.include "constants.inc"
|
||||
|
||||
.segment "ZEROPAGE"
|
||||
.importzp pad1
|
||||
|
||||
.segment "CODE"
|
||||
.export read_controller
|
||||
.proc read_controller
|
||||
|
||||
PHA
|
||||
TXA
|
||||
PHA
|
||||
PHP
|
||||
|
||||
LDA #$01
|
||||
STA CONTROLLER1
|
||||
LDA #$00
|
||||
STA CONTROLLER1
|
||||
|
||||
LDA #%00000001
|
||||
STA pad1
|
||||
|
||||
get_buttons:
|
||||
LDA CONTROLLER1
|
||||
LSR A
|
||||
ROL pad1
|
||||
|
||||
BCC get_buttons
|
||||
|
||||
PLP
|
||||
PLA
|
||||
TAX
|
||||
PLA
|
||||
RTS
|
||||
.endproc
|
BIN
src/controllers.o
Normal file
BIN
src/controllers.o
Normal file
Binary file not shown.
@ -2,7 +2,7 @@
|
||||
.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 ; 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
|
BIN
src/helloworld.o
BIN
src/helloworld.o
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
src/reset.o
BIN
src/reset.o
Binary file not shown.
@ -6,6 +6,8 @@
|
||||
RTI
|
||||
.endproc
|
||||
|
||||
.import read_controller
|
||||
|
||||
.proc nmi_handler
|
||||
LDA #$00
|
||||
STA OAMADDR
|
||||
@ -15,10 +17,27 @@
|
||||
;Update tiles *after* DMA transfer
|
||||
JSR update_player
|
||||
JSR draw_player
|
||||
JSR read_controller
|
||||
|
||||
|
||||
LDA scroll
|
||||
CMP #$00
|
||||
BNE set_scroll_positions
|
||||
|
||||
LDA ppucrtl_settings
|
||||
EOR #%00000010
|
||||
STA ppucrtl_settings
|
||||
STA PPUCTRL
|
||||
LDA #240
|
||||
STA scroll
|
||||
|
||||
set_scroll_positions:
|
||||
LDA #$00
|
||||
STA $2005
|
||||
STA $2005
|
||||
STA PPUSCROLL
|
||||
DEC scroll
|
||||
LDA scroll
|
||||
STA PPUSCROLL
|
||||
|
||||
RTI
|
||||
.endproc
|
||||
|
||||
@ -104,35 +123,31 @@
|
||||
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
|
||||
LDA pad1
|
||||
AND #BTN_LEFT
|
||||
BEQ check_right
|
||||
DEC player_x
|
||||
JMP exit_subroutine
|
||||
move_right:
|
||||
DEC player_x
|
||||
check_right:
|
||||
LDA pad1
|
||||
AND #BTN_RIGHT
|
||||
BEQ check_up
|
||||
INC player_x
|
||||
exit_subroutine:
|
||||
; all done, clean up an return
|
||||
INC player_x
|
||||
check_up:
|
||||
LDA pad1
|
||||
AND #BTN_UP
|
||||
BEQ check_down
|
||||
DEC player_y
|
||||
DEC player_y
|
||||
|
||||
check_down:
|
||||
LDA pad1
|
||||
AND #BTN_DOWN
|
||||
BEQ done_checking
|
||||
INC player_y
|
||||
INC player_y
|
||||
done_checking:
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
@ -145,6 +160,9 @@ exit_subroutine:
|
||||
.export main
|
||||
.proc main
|
||||
|
||||
LDA #239
|
||||
STA scroll
|
||||
|
||||
LDX PPUSTATUS
|
||||
LDX #$3f
|
||||
STX PPUADDR
|
||||
@ -188,6 +206,39 @@ insideloop:
|
||||
CPX #$04
|
||||
BNE outsideloop
|
||||
|
||||
load_background2:
|
||||
LDX PPUSTATUS
|
||||
LDX #$28
|
||||
STX PPUADDR
|
||||
LDX #$00
|
||||
STX PPUADDR
|
||||
|
||||
LDA #<background2
|
||||
STA pointerLo
|
||||
LDA #>background2
|
||||
STA pointerHi
|
||||
|
||||
LDX #$00
|
||||
LDY #$00
|
||||
|
||||
outsideloop2:
|
||||
|
||||
insideloop2:
|
||||
LDA (pointerLo), y
|
||||
STA PPUDATA
|
||||
INY
|
||||
BNE insideloop2
|
||||
|
||||
INC pointerHi
|
||||
|
||||
INX
|
||||
CPX #$04
|
||||
BNE outsideloop2
|
||||
|
||||
LDA #%10010000
|
||||
STA ppucrtl_settings
|
||||
STA PPUCTRL
|
||||
|
||||
vblankwait: ; wait for another vblank before continuing
|
||||
BIT PPUSTATUS
|
||||
BPL vblankwait
|
||||
@ -203,10 +254,13 @@ forever:
|
||||
.segment "ZEROPAGE"
|
||||
player_x: .res 1
|
||||
player_y: .res 1
|
||||
player_dir: .res 1
|
||||
.exportzp player_x, player_y
|
||||
pointerLo: .res 1
|
||||
pointerHi: .res 1
|
||||
scroll: .res 1
|
||||
ppucrtl_settings: .res 1
|
||||
pad1: .res 1
|
||||
.exportzp player_x, player_y
|
||||
.exportzp pad1
|
||||
|
||||
.segment "RODATA"
|
||||
palettes: .incbin "background.pal"
|
||||
@ -218,6 +272,7 @@ sprite:
|
||||
.byte $78, $08, $00, $88
|
||||
|
||||
background: .incbin "background.nam"
|
||||
background2: .incbin "background2.nam"
|
||||
|
||||
.segment "VECTORS"
|
||||
.addr nmi_handler, reset_handler, irq_handler
|
BIN
src/spaceship.o
Normal file
BIN
src/spaceship.o
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user