This commit is contained in:
tildearrow 2022-01-16 15:16:05 -05:00
parent bca84f2f9c
commit 818ebcd195
2 changed files with 104 additions and 0 deletions

31
papers/export-tech.md Normal file
View File

@ -0,0 +1,31 @@
# ROM export technical details
## instrument data
TODO
## pattern data
read sequentially.
first byte determines what to read next:
```
NVI..EEE
N: note
V: volume
I: instrument
EEE: effect count (0-7)
```
if you read 0, end of pattern.
otherwise read in following order:
1. note
2. volume
3. instrument
4. effect and effect value
then read number of rows until next value, minus 1.

73
src/asm/6502/pattern.s Normal file
View File

@ -0,0 +1,73 @@
patPos=$90
tempByte=$80
nextNote=$a0
nextIns=$a1
nextVolume=$b0
nextRow=$b1
nextEffect1=$c0
nextEffect2=$d0
nextEffect3=$e0
nextEffect4=$f0
.macro nextByte
lda (patPos,x)
inc patPos,x
bcc :+
inc patPos+1,x
: clc
.endmacro
; read next row.
; load X with channel<<1
readNext:
lda #$ff
sta nextNote,x ; clear last values
sta nextIns,x
sta nextVolume,x
sta nextEffect1,x
sta nextEffect2,x
sta nextEffect3,x
sta nextEffect4,x
nextByte
sta tempByte ; temporary store
beq endOfPat
lda #$20 ; start pattern check
bit tempByte ; NVI..EEE
bpl :+
php ; read note
nextByte
sta nextNote,x
plp
: bvc :+
php ; read volume
nextByte
sta nextVolume,x
plp
: bne :+
nextByte ; read instrument
sta nextIns,x
: lda tempByte
and #7
tay
txa
pha
clv
readEffectLoop:
dey ; check if we're done
beq readLength
nextByte ; effect
sta nextEffect1,x
nextByte ; effect val
sta nextEffect1+1,x
txa ; add 16 to offset
adc #$10
tax
bvc readEffectLoop
readLength:
pla
tax
nextByte
sta nextRow,x
endOfPat:
rts