[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