Added Scroll+Input P1
This commit is contained in:
parent
391ee7e45c
commit
4923a53423
@ -1,5 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
ca65 src/helloworld.asm
|
ca65 src/spaceship.asm
|
||||||
ca65 src/reset.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
|
PPUCTRL = $2000
|
||||||
PPUMASK = $2001
|
PPUMASK = $2001
|
||||||
PPUSTATUS = $2002
|
PPUSTATUS = $2002
|
||||||
|
PPUSCROLL = $2005
|
||||||
PPUADDR = $2006
|
PPUADDR = $2006
|
||||||
PPUDATA = $2007
|
PPUDATA = $2007
|
||||||
OAMADDR = $2003
|
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 $4e, $45, $53, $1a ; Magic string that always begins an iNES header
|
||||||
.byte $02 ; Number of 16KB PRG-ROM banks
|
.byte $02 ; Number of 16KB PRG-ROM banks
|
||||||
.byte $01 ; Number of 8KB CHR-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 %00000000 ; No special-case flags set, no mapper
|
||||||
.byte $00 ; No PRG-RAM present
|
.byte $00 ; No PRG-RAM present
|
||||||
.byte $00 ; NTSC format
|
.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
|
RTI
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
.import read_controller
|
||||||
|
|
||||||
.proc nmi_handler
|
.proc nmi_handler
|
||||||
LDA #$00
|
LDA #$00
|
||||||
STA OAMADDR
|
STA OAMADDR
|
||||||
@ -15,10 +17,27 @@
|
|||||||
;Update tiles *after* DMA transfer
|
;Update tiles *after* DMA transfer
|
||||||
JSR update_player
|
JSR update_player
|
||||||
JSR draw_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
|
LDA #$00
|
||||||
STA $2005
|
STA PPUSCROLL
|
||||||
STA $2005
|
DEC scroll
|
||||||
|
LDA scroll
|
||||||
|
STA PPUSCROLL
|
||||||
|
|
||||||
RTI
|
RTI
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -104,35 +123,31 @@
|
|||||||
TYA
|
TYA
|
||||||
PHA
|
PHA
|
||||||
|
|
||||||
LDA player_x
|
LDA pad1
|
||||||
CMP #$e0
|
AND #BTN_LEFT
|
||||||
BCC not_at_right_edge
|
BEQ check_right
|
||||||
; 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
|
DEC player_x
|
||||||
JMP exit_subroutine
|
DEC player_x
|
||||||
move_right:
|
check_right:
|
||||||
|
LDA pad1
|
||||||
|
AND #BTN_RIGHT
|
||||||
|
BEQ check_up
|
||||||
INC player_x
|
INC player_x
|
||||||
exit_subroutine:
|
INC player_x
|
||||||
; all done, clean up an return
|
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
|
PLA
|
||||||
TAY
|
TAY
|
||||||
PLA
|
PLA
|
||||||
@ -145,6 +160,9 @@ exit_subroutine:
|
|||||||
.export main
|
.export main
|
||||||
.proc main
|
.proc main
|
||||||
|
|
||||||
|
LDA #239
|
||||||
|
STA scroll
|
||||||
|
|
||||||
LDX PPUSTATUS
|
LDX PPUSTATUS
|
||||||
LDX #$3f
|
LDX #$3f
|
||||||
STX PPUADDR
|
STX PPUADDR
|
||||||
@ -188,6 +206,39 @@ insideloop:
|
|||||||
CPX #$04
|
CPX #$04
|
||||||
BNE outsideloop
|
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
|
vblankwait: ; wait for another vblank before continuing
|
||||||
BIT PPUSTATUS
|
BIT PPUSTATUS
|
||||||
BPL vblankwait
|
BPL vblankwait
|
||||||
@ -203,10 +254,13 @@ forever:
|
|||||||
.segment "ZEROPAGE"
|
.segment "ZEROPAGE"
|
||||||
player_x: .res 1
|
player_x: .res 1
|
||||||
player_y: .res 1
|
player_y: .res 1
|
||||||
player_dir: .res 1
|
|
||||||
.exportzp player_x, player_y
|
|
||||||
pointerLo: .res 1
|
pointerLo: .res 1
|
||||||
pointerHi: .res 1
|
pointerHi: .res 1
|
||||||
|
scroll: .res 1
|
||||||
|
ppucrtl_settings: .res 1
|
||||||
|
pad1: .res 1
|
||||||
|
.exportzp player_x, player_y
|
||||||
|
.exportzp pad1
|
||||||
|
|
||||||
.segment "RODATA"
|
.segment "RODATA"
|
||||||
palettes: .incbin "background.pal"
|
palettes: .incbin "background.pal"
|
||||||
@ -218,6 +272,7 @@ sprite:
|
|||||||
.byte $78, $08, $00, $88
|
.byte $78, $08, $00, $88
|
||||||
|
|
||||||
background: .incbin "background.nam"
|
background: .incbin "background.nam"
|
||||||
|
background2: .incbin "background2.nam"
|
||||||
|
|
||||||
.segment "VECTORS"
|
.segment "VECTORS"
|
||||||
.addr nmi_handler, reset_handler, irq_handler
|
.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