Come prevedevo la fatica maggiore è stata cercare un SID adatto alle necessità. Comunque sia, ecco la routine.
Tieni presente che il player è rilocabile, io l'ho messo nel buffer tape ($033c) ma puoi metterlo dove ti pare.
Il SID che ho usato è "720 Degrees" che, per inciso, si carica in memoria alta e non (almeno mi pare) usa registri in zeropage.
Gli indirizzi di init e di play li puoi vedere usando un qualsiasi sidplayer per windows/mac oppure direttamente in HVSC guardando nei dettagli di un sid. Ti passo anche il disco di test.
Ricordati che per usare un SID devi "strippargli" l'header e tenere solo il programma vero e proprio.
10 rem programma di test
20 rem carico il sid in memoria
30 if ok=0 then ok=1:load"720degrees",8,1
40 sid=828:rem metto il player nel tape buffer
50 gosub 1000:rem carico la routine
60 init=53056:play=53062:num=0:rem $bf40/$bf46/0
70 gosub 1040:rem faccio partire il sid
80 print"...busy waiting...":geta$:if a$="" then 80
90 gosub 1050:rem stoppo il sid
100 end
1000 rem load sid routine
1001 rem sid = indirizzo di partenza
1002 data "78","85","02","a9","7f","8d","0d","dd","ad","0d","dd","a9"
1003 data "35","85","01","20","8a","00","ba","ca","18","bd","00","01"
1004 data "85","03","69","50","8d","18","03","bd","01","01","85","04"
1005 data "69","00","8d","19","03","a0","31","a5","fb","91","03","c8"
1006 data "a5","fc","91","03","a0","61","a5","fd","91","03","c8","a5"
1007 data "fe","91","03","a5","02","20","8a","00","a9","c7","8d","04"
1008 data "dd","a9","4c","8d","05","dd","a2","00","86","02","e8","8e"
1009 data "0e","dd","a9","81","8d","0d","dd","a9","37","85","01","58"
1010 data "60","2c","0d","dd","48","46","02","b0","12","8a","48","98"
1011 data "48","a9","35","85","01","20","8a","00","a9","37","85","01"
1012 data "4c","81","ea","a9","47","8d","18","03","a9","fe","8d","19"
1013 data "03","a9","7f","8d","0d","dd","68","40","--","69"
1014 i=0
1015 read a$:if a$="--" then 1017
1016 gosub 1060:pokesid+i,d:sum=sum+d:i=i+1:goto 1015
1017 read a$:gosub 1060
1018 sum=sum and 255:if sum<>d then 1020
1019 return
1020 print"errore nel checksum. controllare i data.":end
1040 rem start sid
1041 rem imposta init/play come indicato nel sid
1042 rem imposta num a 0 (diverso da 0 per multisid)
1043 poke252,int(init/256):poke251,init-(peek(252)*256):rem set init
1044 poke254,int(play/256):poke253,play-(peek(254)*256):rem set play
1045 poke 780,num:rem settings (num. sid)
1046 sys sid:return
1050 rem stop sid
1051 poke 2,1:return
1060 rem hex to dec
1061 d=0
1062 n=asc(mid$(a$,1,1))-48
1063 if n>16 then n=n-7
1064 d=d+n*16
1065 n=asc(mid$(a$,2,1))-48
1066 if n>16 then n=n-7
1067 d=d+n
1068 return
Moderatore: dove posso uppare il file?