Portabel SID-spelare med äkta SID-chip
Postat: 30 september 2009, 13:49:15
Hejhopp!
Minns inte när tanken slog mig, men det var ett tag sen. Härom månaden tänkte jag att nu ska jag ändå börja.
Öppnade en C64 och plockade ut SID-chippet (som visade sig vara en 6581). Satte det i mitt breadboard och
kopplade det till en ATmega168. Efter mycket pill och meckande var det fortfarande helt tyst så när som på ett knäpp när man satte på strömmen. Eftersom jag inte visste ens om SID-chipet var helt så satte jag tillbaka det i 64:an och googlade efter var i minnet det var inmappad och hittade ett litet exempelprogram i BASIC (poke). Där sist stod det något i stil med: Poke <addr>,15 REM master volume on.
Givetvis fungerade chippet och efter att ha lagt till denna skrivning till AVR-koden fungerade det.
Någon vecka senare fick jag tid att flytta om databussen till andra portar på AVR:en så jag kunde ansluta ett SD-kort till SPI-interfacet. Dessförinnan hade jag läste på allt vad jag kunde om hur sid-filformatet fungerade. Jag hittade c-kod (programmet siddump) som emulerar en 6502. Detta program fungerar bara på sid-filer i psid-format, men genererar en human readable lista över toner och tider. Jag modifierade programmet till att generera en datafil med adress-data-par för varje skrivning till SID-chippet, samt en skrivning till adress 0x80 för att indikera slutet på en frame. Jag genererade en rådatafil på en pc och lade den på SD-kortet. Här kan ni beskåda resultatet:
Obs frekvenser och timing är inte vidare exakta än. Något som vore grymt kul vore om det gick att emulera 6502:an PÅ AVR:en i realtid (så man inte behöver förkonvertera låtarna). Jag tror det kan gå om man swappar mot SD-kortet (64:an har 64k ram, AVR:en har 2k). Är det inte tillräckligt snabbt kan man iaf generera raw-filerna i icke-realtid på AVR:en. Men det återstår att göra.
MVH: Mikael
Minns inte när tanken slog mig, men det var ett tag sen. Härom månaden tänkte jag att nu ska jag ändå börja.
Öppnade en C64 och plockade ut SID-chippet (som visade sig vara en 6581). Satte det i mitt breadboard och
kopplade det till en ATmega168. Efter mycket pill och meckande var det fortfarande helt tyst så när som på ett knäpp när man satte på strömmen. Eftersom jag inte visste ens om SID-chipet var helt så satte jag tillbaka det i 64:an och googlade efter var i minnet det var inmappad och hittade ett litet exempelprogram i BASIC (poke). Där sist stod det något i stil med: Poke <addr>,15 REM master volume on.
Givetvis fungerade chippet och efter att ha lagt till denna skrivning till AVR-koden fungerade det.
Någon vecka senare fick jag tid att flytta om databussen till andra portar på AVR:en så jag kunde ansluta ett SD-kort till SPI-interfacet. Dessförinnan hade jag läste på allt vad jag kunde om hur sid-filformatet fungerade. Jag hittade c-kod (programmet siddump) som emulerar en 6502. Detta program fungerar bara på sid-filer i psid-format, men genererar en human readable lista över toner och tider. Jag modifierade programmet till att generera en datafil med adress-data-par för varje skrivning till SID-chippet, samt en skrivning till adress 0x80 för att indikera slutet på en frame. Jag genererade en rådatafil på en pc och lade den på SD-kortet. Här kan ni beskåda resultatet:
Obs frekvenser och timing är inte vidare exakta än. Något som vore grymt kul vore om det gick att emulera 6502:an PÅ AVR:en i realtid (så man inte behöver förkonvertera låtarna). Jag tror det kan gå om man swappar mot SD-kortet (64:an har 64k ram, AVR:en har 2k). Är det inte tillräckligt snabbt kan man iaf generera raw-filerna i icke-realtid på AVR:en. Men det återstår att göra.
MVH: Mikael