Jump to content
IGNORED

Swiety SidPlayer 1.0 beta - relocated


Wrathchild

Recommended Posts

Hi,

 

One of the things on my 'things to do' list was to have the Last Ninja 3 tune's from the C64 play on the Atari. The original Sid Player didn't load the LN3 SID tune due to memory usage conflicts so I re-located the code and tables that it uses such that the tunes could run. Sadly tunes 6 & 7 of the 10 crash the Atari and so I changed the start tune to 8 such that the tunes can be cycled through (by pressing space). Tune 3 is the intro tune I like - sounds OK too.

 

By using something like AtrUtil you can import other SID tunes to the disk image that may not have worked for you against the original 1.0 beta.

 

Regards,

Mark

sid_ln3.zip

Link to comment
Share on other sites

Hi Mark, I've been using Święty's SID2POKEY recently, I got the sources from Tebe, it's a nice way to use SID's. I'll ask Tebe if it's ok to PM you the sources, I'm not sure if they are public.

Tebe has used the routine in his conversion of the game "Nibbly" a couple of years ago, it's actually the sid songs used in the game.

Edited by Tezz
Link to comment
Share on other sites

sorry to deviate from the original question about SIDPLAY but, if you're interested in SID2POKEY (and in case anyone missed it a couple of years back), basically it's much more useful as it doesn't use a CPU intensive "Softsynth" method like SIDPlay but uses normal POKEY functions, it enables playing of the SIDs via precalculation frequencies which emulate the SIDs ADSR envelope. There's some further info on SID2POKEY on the Polish sites but no updates as Saint hasn't been active with the Atari since then (as far as I know)

Link to comment
Share on other sites

oh. I would be interested in the sources... at least if his converter is better than the ones used for the HARD productions (Veronika, Joyride, etc.)
Hi Heaven, here's an example attached of the two main Nibbly subtunes along with the sid file. I've been using SIDedit for Windows to relocate other sids. I'll ask Tebe if it's ok to post the sources here or to PM them.

sid2pokey_example.zip

Link to comment
Share on other sites

@Heaven: a bit better - AUDCTL ($d208) is used here for increasing note-resolution (more octaves on 8-bit channels).

 

Just got this zip from TeBe - it contains sid2pokey procedure used in Nibbly with sources. Warning - comments are in Polish!

 

Edit: This particular one works only with sid loaded from $a000

 

So, let's go with it...

nibbly_msx.zip

Edited by miker
Link to comment
Share on other sites

I translated it quickly at the time via Google translate so it should really be edited into better English..

 

First part......

 

/*

INIT - initialization player for song DEFSONG

LOOP - main loop and synchronizing with frame

RELOCATE_MEM - prescribes higher SID'a at the address stored in the module LOAD_ADRESS

LOAD_ADRESS - SID address model in RAM, stored in reverse order (hi, lo)

 

EMULATOR - propriate player SID

 

21.06.2006

*/

 

* --- PLAYER Using ZERO ENERGY OD $F0..$FF --- *

 

 

.public emulator, sid_init, sid_restart, sid_mem, sid_end, sid_stop

 

 

ORG $a000 ; address is consistent with the address of the SID file and

; follows the relocation of this place in the same place :)

 

sid_mem = $a000

; ins 'nibbly.sid'

 

sid_end = sid_mem + 4460 ; Length of SID file

 

.print 'SID: ',sid_mem,'..',sid_end

 

 

*--- SID2POKEY PLAYER

 

org $9000

 

noise_tab equ *

Link to comment
Share on other sites

dta b($ff,$ff,$c8,$a4,$80,$60,$40,$20,$20,$1C,$19,$17,$15,$14,$12,$11)

dta b($10,$0F,$0E,$0E,$0D,$0C,$0C,$0B,$0B,$0A,$0A,$0A,$09,$09,$09,$09)

dta b($08,$08,$08,$08,$07,$07,$07,$07,$07,$07,$06,$06,$06,$06,$06,$06)

dta b($06,$06,$06,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05)

dta b($04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04)

dta b($04,$04,$04,$04,$04,$04,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03) ;5

dta b($03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03) ;6

dta b($03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03) ;7

dta b($03,$03,$03,$03,$03,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;8

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;9

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;a

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;b

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;c

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;d

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02) ;e

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$01,$01) ;f

 

; dla 15 khz

 

loval_15

 

dta b($00,$00,$ff,$01,$67,$56,$25,$01,$E4,$34,$8C,$AB,$63,$93,$23,$01)

dta b($1F,$72,$F3,$9A,$62,$46,$43,$56,$7B,$B2,$F7,$4A,$A8,$12,$85,$01)

dta b($84,$10,$A1,$39,$D7,$7A,$21,$CD,$7D,$31,$E9,$A3,$61,$22,$E5,$AB)

dta b($73,$3E,$0B,$D9,$AA,$7C,$50,$25,$FC,$D4,$AE,$89,$65,$43,$21,$01)

dta b($E1,$C2,$A5,$88,$6C,$51,$37,$1D,$04,$EC,$D4,$BD,$A7,$91,$7C,$67)

dta b($53,$3F,$2C,$19,$07,$F5,$E3,$D2,$C1,$B1,$A1,$91,$82,$73,$64,$56)

dta b($48,$3A,$2C,$1F,$12,$06,$F9,$ED,$E1,$D5,$C9,$BE,$B3,$A8,$9D,$93)

dta b($88,$7E,$74,$6A,$61,$57,$4E,$45,$3C,$33,$2A,$22,$19,$11,$09,$01)

dta b($F9,$F1,$E9,$E1,$DA,$D3,$CB,$C4,$BD,$B6,$AF,$A9,$A2,$9C,$95,$8F)

dta b($88,$82,$7C,$76,$70,$6A,$65,$5F,$59,$54,$4E,$49,$43,$3E,$39,$34)

dta b($2F,$2A,$25,$20,$1B,$16,$11,$0D,$08,$04,$FF,$FB,$F6,$F2,$ED,$E9)

dta b($E5,$E1,$DD,$D9,$D5,$D1,$CD,$C9,$C5,$C1,$BD,$BA,$B6,$B2,$AF,$AB)

dta b($A8,$A4,$A1,$9D,$9A,$96,$93,$90,$8D,$89,$86,$83,$80,$7D,$7A,$77)

dta b($74,$71,$6E,$6B,$68,$65,$62,$5F,$5D,$5A,$57,$54,$52,$4F,$4C,$4A)

dta b($47,$44,$42,$3F,$3D,$3A,$38,$35,$33,$31,$2E,$2C,$2A,$27,$25,$23)

dta b($20,$1E,$1C,$1A,$17,$15,$13,$11,$0F,$0D,$0B,$09,$07,$05,$03,$01)

 

 

Index_15

dta $00,$00,$56,$2A,$1A,$11,$C,$9,$8,$5,$5,$4,$3,$3,$2,$2

dta $2,$2,$2,$1,$1,$1,$1,$1,$1,$1,$1,$0,$1,$80,$1,$80

dta $1,$80,$1,$80,$1,$80,$80,$1,$80,$80,$1,$80,$80,$80,$1,$80

dta $80,$80,$80,$1,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$80

dta $1,$80,$80,$80,$80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $1,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

 

 

Look_15

dta b($00,$00,$FF,$A9,$7F,$65,$54,$48,$3F,$37,$32,$2D,$29,$26,$23,$21)

dta b($1F,$1D,$1B,$19,$18,$17,$16,$15,$14,$13,$12,$11,$11,$10,$10,$0F)

dta b($0F,$0E,$0E,$0D,$0D,$0C,$0C,$0C,$0B,$0B,$0B,$0A,$0A,$0A,$0A,$09)

dta b($09,$09,$09,$09,$08,$08,$08,$08,$08,$07,$07,$07,$07,$07,$07,$07)

dta b($07,$06,$06,$06,$06,$06,$06,$06,$06,$06,$05,$05,$05,$05,$05,$05)

dta b($05,$05,$05,$05,$05,$05,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04)

dta b($04,$04,$04,$04,$04,$04,$04,$03,$03,$03,$03,$03,$03,$03,$03,$03)

dta b($03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03)

dta b($03,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

dta b($02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02)

 

; dla 64 khz

 

loval_64

dta b($00,$FF,$FF,$FF,$FF,$FF,$FF,$00,$FF,$9E,$75,$81,$B6,$5A,$E5,$F8)

dta b($A0,$D0,$B7,$3B,$44,$C1,$A3,$DC,$63,$2E,$35,$73,$E2,$7D,$3F,$25)

dta b($2C,$50,$90,$E8,$57,$DC,$74,$1E,$D8,$A2,$7B,$61,$53,$52,$5B,$6E)

dta b($8B,$B2,$E0,$17,$55,$9B,$E7,$3A,$93,$F1,$55,$BF,$2D,$A0,$17,$93)

dta b($13,$96,$1D,$A8,$37,$C8,$5D,$F4,$8F,$2C,$CC,$6E,$13,$BA,$64,$F)

dta b($BD,$6C,$1E,$D1,$87,$3E,$F6,$B1,$6D,$2A,$E9,$A9,$6B,$2E,$F2,$B7)

dta b($7E,$46,$F,$D9,$A4,$70,$3E,$C,$DB,$AB,$7C,$4E,$20,$F4,$C8,$9D)

dta b($73,$4A,$21,$F9,$D2,$AB,$85,$60,$3B,$17,$F3,$D0,$AE,$8C,$6A,$4A)

dta b($29,$A,$EA,$CB,$AD,$8F,$71,$54,$38,$1C,$0,$E4,$C9,$AF,$94,$7A)

dta b($61,$48,$2F,$16,$FE,$E6,$CF,$B7,$A0,$8A,$73,$5D,$48,$32,$1D,$8)

dta b($F3,$DF,$CA,$B6,$A3,$8F,$7C,$69,$56,$44,$31,$1F,$D,$FB,$EA,$D9)

dta b($C7,$B7,$A6,$95,$85,$75,$65,$55,$45,$36,$26,$17,$8,$F9,$EA,$DC)

dta b($CE,$BF,$B1,$A3,$95,$88,$7A,$6D,$5F,$52,$45,$38,$2C,$1F,$13,$6)

dta b($FA,$EE,$E2,$D6,$CA,$BE,$B3,$A7,$9C,$90,$85,$7A,$6F,$64,$5A,$4F)

dta b($44,$3A,$2F,$25,$1B,$11,$7,$FD,$F3,$E9,$DF,$D6,$CC,$C3,$B9,$B0)

dta b($A7,$9E,$95,$8C,$83,$7A,$71,$68,$60,$57,$4F,$46,$3E,$35,$2D,$25)

 

Index_64

dta $00,$00,$00,$00,$00,$00,$00,$00,$19,$17,$13,$10,$D,$C,$9,$9

dta $8,$7,$6,$5,$5,$5,$4,$4,$3,$3,$3,$3,$3,$2,$2,$2

dta $2,$2,$2,$2,$1,$2,$1,$1,$2,$1,$1,$1,$1,$1,$1,$1

dta $1,$1,$1,$80,$1,$1,$1,$80,$1,$1,$80,$1,$80,$1,$80,$1

dta $80,$1,$80,$1,$80,$1,$80,$1,$80,$80,$1,$80,$80,$1,$80,$80

dta $1,$80,$80,$1,$80,$80,$1,$80,$80,$80,$1,$80,$80,$80,$1,$80

dta $80,$80,$80,$1,$80,$80,$80,$80,$1,$80,$80,$80,$80,$1,$80,$80

dta $80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $1,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$1,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$1,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $1,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$1,$80,$80,$80,$80,$80,$80,$80,$80

dta $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80

 

 

Look_64

dta b($00,$00,$00,$00,$00,$00,$00,$00,$FF,$E6,$CF,$BC,$AC,$9F,$93,$8A)

dta b($81,$79,$72,$6C,$67,$62,$5D,$59,$55,$52,$4F,$4C,$49,$46,$44,$42)

dta b($40,$3E,$3C,$3A,$38,$37,$35,$34,$33,$31,$30,$2F,$2E,$2D,$2C,$2B)

dta b($2A,$29,$28,$27,$27,$26,$25,$24,$24,$23,$22,$22,$21,$21,$20,$20)

dta b($1F,$1F,$1E,$1E,$1D,$1D,$1C,$1C,$1B,$1B,$1B,$1A,$1A,$1A,$19,$19)

dta b($19,$18,$18,$18,$17,$17,$17,$16,$16,$16,$16,$15,$15,$15,$15,$14)

dta b($14,$14,$14,$14,$13,$13,$13,$13,$13,$12,$12,$12,$12,$12,$11,$11)

dta b($11,$11,$11,$11,$10,$10,$10,$10,$10,$10,$10,$F,$F,$F,$F,$F)

dta b($F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$E,$E,$E,$E,$E)

dta b($E,$E,$E,$E,$E,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D)

dta b($D,$C,$C,$C,$C,$C,$C,$C,$C,$C,$C,$C,$C,$C,$B,$B)

dta b($B,$B,$B,$B,$B,$B,$B,$B,$B,$B,$B,$B,$B,$B,$A,$A)

dta b($A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A,$A)

dta b($A,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9)

dta b($9,$9,$9,$9,$9,$9,$9,$9,$8,$8,$8,$8,$8,$8,$8,$8)

dta b($8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8,$8)

 

; TABLICE DLA ATTACK

 

att_a dta $0f,$0f,$0f,$0d,$08,$05,$04,$04,$03,$01,$00,$00,$00,$00,$00,$00

att_u dta $00,$00,$00,085,107,182,180,000,051,071,163,102,081,027,016,010

 

; TABLICE DLA DECAY

 

dec_a dta $0f,$0d,$06,$04,$02,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00

dec_u dta $00,085,170,113,206,231,145,085,017,109,054,034,027,009,005,003

 

x28tab dta 0,28,56,84,112,140,168,196,224,252,255

 

 

m_init jmp (init_adress)

m_play jmp (play_adress)

 

 

sid_version brk

sid_offset dta a(0)

hlenght dta $20

load_adress dta a($0010)

END_ADRESS dta a(sid_end)

init_adress dta a($1000)

play_adress dta a($1003)

buf_start dta a(0)

songs dta 1

defsong dta 1

 

header dta b($50,$53,$49,$44)

 

 

zp_bufor :4 brk

 

sid_regmap :32 brk

 

 

zp_tmp1 equ $f0 ; $20

zp_tmp2 equ zp_tmp1+1

 

zp_tmp6 equ zp_tmp2+1

zp_tmp7 equ zp_tmp6+1

 

c12_lo equ zp_tmp1

c12_hi equ zp_tmp2

 

 

c1_frqlo equ zp_tmp2

c1_frqhi equ zp_tmp1

c1_pwlo equ sid_regmap+2

c1_pwhi equ sid_regmap+3

c1_ctrl equ zp_tmp7

c1_atde equ sid_regmap+5

c1_stre equ sid_regmap+6

 

c2_frqlo brk

c2_frqhi brk

c2_pwlo equ sid_regmap+9

c2_pwhi equ sid_regmap+10

c2_ctrl brk

c2_atde equ sid_regmap+12

c2_stre equ sid_regmap+13

 

c3_frqlo brk

c3_frqhi brk

c3_pwlo equ sid_regmap+16

c3_pwhi equ sid_regmap+17

c3_ctrl brk

c3_atde equ sid_regmap+19

c3_stre equ sid_regmap+20

 

 

sid_init

 

sta defsong

 

nextsong

 

jsr siddescription

beq good_sid

 

good_sid equ *

 

lda load_adress+1

sta $fe

lda load_adress

sta $ff

ldx hlenght

 

test ldy #0

lda ($fe),y

; cmp #{ldx $8000,y}

; beq testd

 

cmp #{sta $8000}

beq testd

cmp #{sta $8000,x}

beq testd

cmp #{sta $8000,y}

beq testd

cmp #{stx $8000}

beq testd

cmp #{sty $8000}

bne testn

 

testd ldy #2

lda ($fe),y

cmp #$d4

; jmp testn

 

bne testn

 

dey

lda ($fe),y

; and #31

cmp #31

bcs testn

 

adc <sid_regmap

sta ($fe),y

 

lda >sid_regmap

adc #0

iny

sta ($fe),y

 

lda $fe

adc #3

sta $fe

bcc test

bcs sprhi

 

testn inc $fe

bne test

sprhi inc $ff

beq restart

dex

bpl test

 

lda #3

sta $d20f

sta $d21f

 

restart

 

ldx #0

 

txa

clr_sid sta sid_regmap,x

inx

cpx #$20

bne clr_sid

 

lda #0

sta $314

sta $315

 

ldx defsong

dex

txa

tay

jsr m_init

 

ldx $314

beq no_c64nmi

lda $315

beq no_c64nmi

 

stx play_adress

sta play_adress+1

 

; lda #{rts}

; sta $ea31

 

no_c64nmi

 

; sei

; lda #$fe

; sta $d301

 

ldy #0

sty c1_oldctrl

sty c2_oldctrl

sty c3_oldctrl

 

sty ch1_vol

sty ch2_vol

sty ch3_vol

 

sty ch1_adsr

sty ch2_adsr

sty ch3_adsr

 

sty ch1_cnt

sty ch2_cnt

sty ch3_cnt

 

rts

 

 

EMULATOR

 

; dec $d01a

JSR M_PLAY

 

 

 

; SID to POKEY routine ver. 2.99

; dynamic channel allocation

 

; lda #128

; sta $d01a

 

;-----------------

;Emulation AdSR procedure, and the rest of SID

;-----------------

 

MAX_15 EQU 13

 

lda zp_tmp1

sta zp_bufor

lda zp_tmp2

sta zp_bufor+1

lda zp_tmp6

sta zp_bufor+2

lda zp_tmp7

sta zp_bufor+3

 

 

; kopiowanie zmiennych do remapowania w locie !

 

lda sid_regmap+4

sta c1_ctrl

 

; AdSR service volume, and whether something should be played

 

; kanal 1

 

; lda c1_ctrl

lsr @

bcc new1

 

lda #0

c1_oldctrl equ *-1

and #1

bne new1

; lda #0

sta ch1_adsr

sta ch1_cnt

 

new1

lda c1_ctrl ; read the record of control

sta c1_oldctrl

 

and #8 ; bit test - 1 zero

beq play1

 

ldx #1 ; adsr =0

stx ch1_vol ; mute_channel

dex

stx ch1_cnt

stx ch1_adsr

beq mute1

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...