2025-04-18 05:57:13 -04:00
|
|
|
; command stream player test - NES version
|
|
|
|
; NES because it's what I am most familiar with, besides Atari 2600
|
|
|
|
|
|
|
|
.include "nes.i"
|
|
|
|
|
2025-04-18 14:57:25 -04:00
|
|
|
pendingTick=$400
|
|
|
|
|
|
|
|
; program ROM
|
|
|
|
.BANK 1 SLOT 1
|
|
|
|
.ORGA $8000
|
|
|
|
|
2025-04-18 05:57:13 -04:00
|
|
|
main:
|
2025-04-18 14:57:25 -04:00
|
|
|
; 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
|
2025-04-18 14:57:25 -04:00
|
|
|
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
|
2025-04-21 20:38:19 -04:00
|
|
|
lda #$20
|
2025-04-18 14:57:25 -04:00
|
|
|
sta PPUADDR
|
2025-04-22 20:43:43 -04:00
|
|
|
lda #$40
|
2025-04-18 14:57:25 -04:00
|
|
|
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 ++
|
2025-04-18 14:57:25 -04:00
|
|
|
sta PPUDATA
|
2025-04-22 20:43:43 -04:00
|
|
|
inc $00
|
2025-04-18 14:57:25 -04:00
|
|
|
bne -
|
2025-04-22 20:43:43 -04:00
|
|
|
inc $01
|
|
|
|
bcc -
|
2025-04-18 14:57:25 -04:00
|
|
|
|
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 -
|
|
|
|
|
2025-04-18 14:57:25 -04:00
|
|
|
; set up PPU
|
2025-04-18 17:05:01 -04:00
|
|
|
lda #$0e
|
2025-04-18 14:57:25 -04:00
|
|
|
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
|
|
|
|
|
2025-04-18 14:57:25 -04:00
|
|
|
jsr fcsTick
|
|
|
|
lda #0
|
|
|
|
sta pendingTick
|
2025-04-18 19:39:09 -04:00
|
|
|
|
|
|
|
; raster time display end
|
|
|
|
lda #$0e
|
|
|
|
sta PPUMASK
|
|
|
|
|
2025-04-18 14:57:25 -04:00
|
|
|
jmp loop
|
|
|
|
|
|
|
|
; interrupt handlers
|
|
|
|
nmi:
|
2025-04-20 03:12:22 -04:00
|
|
|
php
|
|
|
|
pha
|
2025-04-18 14:57:25 -04:00
|
|
|
lda #1
|
|
|
|
sta pendingTick
|
2025-04-20 03:12:22 -04:00
|
|
|
pla
|
|
|
|
plp
|
2025-04-18 14:57:25 -04:00
|
|
|
rti
|
|
|
|
|
|
|
|
irq:
|
|
|
|
rti
|
|
|
|
|
|
|
|
; command stream player definition
|
2025-04-19 19:56:37 -04:00
|
|
|
FCS_MAX_CHAN=8
|
2025-04-18 14:57:25 -04:00
|
|
|
|
2025-04-20 03:12:22 -04:00
|
|
|
fcsAddrBase=$30
|
|
|
|
fcsZeroPage=$0e
|
2025-04-18 14:57:25 -04:00
|
|
|
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 " "
|
2025-04-18 14:57:25 -04:00
|
|
|
.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
|
|
|
|
|
2025-04-18 14:57:25 -04:00
|
|
|
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"
|