[abc80] Registrera eget VBL-irq?
Anders Jansson
andj at hem.utfors.se
Tis Feb 14 15:07:11 PST 2017
Ja, för tangentbordspollning skulle ABCbus-kortet kunna generera interrupt
via kasettinterfacet eller bussen. Men skulle det fungera med hires-demon
också? ... och emulatorn :-)
Kan det gå med lite returadress-trix enligt nedan? Context saving med EXX
är också en ide men det kanske används redan?
mainloop:
Hanterar diverse saker ...
7.8kHz_isr: (interrupt av mainloopen)
EX AF, AF'
EXX (byter till alternativa register BC',DE',HL')
... uppdatera grafik och generera ljudfrekvens
DEC E (ett dedikerat register om det går)
JR Z, dax (7.8 kHz / 256 = 30 Hz)
EXX
EX AF, AF'
RETI (tillbaks till mainloopen)
dax:
pusha en ny returadress på stacken
EXX
EX AF, AF'
RETI (hoppar istället till ljudfunktionen)
ljudfunk: (returadress till mainloopen ligger på stacken)
push ... (context saving som en vanlig ISR)
... ändra ljudfrekvens
pop ...
RET (tillbaks till mainloop inom 30 Hz)
/Anders
Den 2017-02- 11:31:31 skrev Andreas Gustafsson
<andreas.gustafsson at gmail.com>:
> Det är just att ha en räknare på 7.8khz interruptet jag vill undvika, då
> jag försöker hålla den koden på absolut minimal som möjligt, då det äter
> upp >alldeles för mycket av CPU-tiden redan nu för att hålla ljudet
> igång. Man vill ju ha så mycket som möjligt kvar till demoeffekterna! :)
>
> Som det är nu kör jag alltså IRQ som håller igång en fast frekvens på
> ljudet, och sedan har jag en main-loop som går på 50Hz genom att köra
> busy-wait >som kollar efter när lägsta byten i klockan ändrar sig ( =
> VBL) och sedan kör mina grafisk effekter och därefter körs musikrutinen
> som petar in ny >frekvens på ljudet om det är dags.
> Det fungerar bra, men då kräver det att man inte använder mer än en
> frame till sina effekter, eftersom den i så fall missar
> ljuduppdateringen. För >"tyngre" effekter måste jag då dela upp det i
> flera block som klarar sig under 1/50s.
> Hade man kunnat köra ett VBL-irq hade jag kunnat köra min musikrutin som
> uppdaterar frekvens där, och låta de grafiska effekterna köra på
> asynkront >så snabbt de nu kan.
>
>
> 2017-02-06 8:56 GMT+01:00 juhasz <juhasz at abc.se>:
>> Jag tror tyvärr det är kört om man inte vill byta rom... nmi hoppar ju
>> alltid till #0066 och där uppdateras bara klockan. 7.8 khz är ju en
>> ide, men annars >>kanske kassettinterruptet går att använda?Robert
>> Skickat från min Samsung Galaxy-smartphone.
>> -------- Originalmeddelande --------Från: Anders Jansson
>> <andj at hem.utfors.se> Datum: 2017-02-06 08:40 (GMT+01:00) Till:
>> abc80 at abc80.org >>Rubrik: Re: [abc80] Registrera eget VBL-irq?
>> Den 2017-02- 12:55:54 skrev Andreas Gustafsson
>> <andreas.gustafsson at gmail.com>:
>>
>>> 7.8kHz IRQ funkar ju fint till musik etc. men ibland så hade det varit
>>> trevligt att kunna hooka in sig på ett VBL-irq, dvs. något som körs i
>>> 50Hz.
>>> Det finns ju ett NMI som körs då och uppdaterar någon intern klocka,
>>> men
>>> finns det något sätt att få sin egen kod att anropas också?
>>
>> Jag hade en plan att använda klockinterruptet för att polla externt
>> tangentbord. Men NMI verkar ju ha en fast adress i ROM... Kanske måste
>> man
>> räkna i 7.8 kHz interruptet och anropa kod därifrån.
>>
>> /Anders
>>
>>
>> _______________________________________________
>> ABC80 mailing list
>> ABC80 at abc80.org
>> http://www.abc80.org/mailman/listinfo/abc80
>> _______________________________________________
>> ABC80 mailing list
>> ABC80 at abc80.org
>> http://www.abc80.org/mailman/listinfo/abc80
More information about the ABC80
mailing list