furnace/src/asm/6502/nes/test.s

185 lines
2.5 KiB
ArmAsm
Raw Normal View History

; command stream player test - NES version
; NES because it's what I am most familiar with, besides Atari 2600
.include "nes.i"
pendingTick=$400
; program ROM
.BANK 1 SLOT 1
.ORGA $8000
main:
; initialize processor
sei
cld
ldx #$ff
txs
; clear all memory
ldx #$07
stx $01
lda #$00
sta $00
tay
- sta ($00),y
dey
bne -
dex
2025-04-18 15:17:35 -04:00
stx $01
bne -
; clear zero page
ldx #$00
- sta $00,x
dex
bne -
initPlayer:
; initialize command stream player
jsr fcsInit
initPPU:
; wait for PPU to be ready
bit PPUSTATUS
; wait two frames
- bit PPUSTATUS
bpl -
- bit PPUSTATUS
bpl -
startPlayer:
; draw some text
lda #$20
sta PPUADDR
2025-04-22 20:43:43 -04:00
lda #$40
sta PPUADDR
2025-04-22 20:43:43 -04:00
lda #<screenText
sta $00
lda #>screenText
sta $01
ldy #0
clc
- lda ($00),y
beq ++
sta PPUDATA
2025-04-22 20:43:43 -04:00
inc $00
bne -
2025-04-22 20:43:43 -04:00
inc $01
bcc -
2025-04-18 15:17:35 -04:00
; set palette
2025-04-22 20:43:43 -04:00
++ bit PPUSTATUS
2025-04-18 15:17:35 -04:00
lda #$3f
sta PPUADDR
lda #$00
sta PPUADDR
ldx #$00
- lda ppuPalette.w,x
sta PPUDATA
inx
cpx #$10
bne -
; set up PPU
lda #$0e
sta PPUMASK
; reset scroll position
bit PPUSTATUS
lda #$00
sta PPUSCROLL
sta PPUSCROLL
; set up VBlank interrupt
lda #$80
sta PPUCTRL
loop:
lda pendingTick
beq loop
2025-04-18 19:39:09 -04:00
; wait a bit so we can see the raster
ldy #$ff
ldx #$03
- dey
bne -
dex
bne -
; raster time display
lda #$0f
sta PPUMASK
jsr fcsTick
lda #0
sta pendingTick
2025-04-18 19:39:09 -04:00
; raster time display end
lda #$0e
sta PPUMASK
jmp loop
; interrupt handlers
nmi:
php
pha
lda #1
sta pendingTick
pla
plp
rti
irq:
rti
; command stream player definition
FCS_MAX_CHAN=8
fcsAddrBase=$30
fcsZeroPage=$0e
fcsGlobalStack=$200
fcsPtr=cmdStream
fcsVolMax=volMaxArray
; command call table
fcsCmdTableLow=fcsCmdTableExample
fcsCmdTableHigh=fcsCmdTableExample
.include "../stream.s"
; data
2025-04-22 20:43:43 -04:00
screenText:
.db " Furnace Test Player "
.db " "
.db " channel "
.db " "
.db " PC tick "
.db " note pitch "
.db " vib vibPos "
.db " arp porta "
.db " vol volS "
.db " pan "
.db " "
.db 0
2025-04-18 15:17:35 -04:00
ppuPalette:
.db $0e, $00, $10, $30
.db $0e, $00, $10, $30
.db $0e, $00, $10, $30
.db $0e, $00, $10, $30
volMaxArray:
.dw $40, $40, $40, $40
cmdStream:
.incbin "../seq.bin"
; vectors
.ORGA $FFFA
.dw nmi
.dw main
.dw irq
; character ROM
.BANK 2 SLOT 2
.ORGA $10000
.incbin "chr.bin"