<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Tue, 09 Mar 2004 12:07:11 +0000
From   : Richard Gellman <splodge@...>
Subject: Re: CLI then SEI

Now this is interesting. If CLI/SEI is an effective 
SEI-until-next-instruction, then it could explain why BeebEm has a few 
bugs in places.

I will investigate.

-- Richard

tom@... wrote:

>Here's an interesting thing that I found out whilst tearing my hair 
>out over Empire Strikes Back.
>
>Empire Strikes Back sets the OS' System VIA IRQ mask via OSBYTE &E9 
>such that the T1 flag is clear. Eventually, T1 times out, and never 
>gets acknowledged. Empire Strikes Back then calls OSBYTE &7A, which 
>after a bit of faffing runs this bit of code:
>
> F129    JSR     &F12E   ;call autoscan
> F12C    CLI             ;allow interrupts 
> F12D    SEI             ;disable interrupts
>
>On my emulator, the moment CLI is finished, the T1 interrupt happens. 
>The OS runs the IRQ routine, but doesn't acknowledge the T1 flag, and 
>so the moment RTI has run (popping the status register with I clear) 
>the interrupt happens again. And then again. And then again.
>
>But on a real BBC, it seems there's some kind of pipelining-like 
>behaviour going on. After a bit of playing around, I found that the 
>interrupt doesn't happen until after the instruction following the 
>CLI has run! So a CLI/SEI pair won't cause an infinite chain of 
>interrupts, though a CLI/NOP/SEI will. (The address on the stack on 
>entry to the IRQ routine is the instruction after the instruction 
>after the CLI.)
>
>Very strange.
>
>Should I have known this already?! :)
>
>--Tom
>  
>
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>