<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="DE-CH" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">Wojtek<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">Just for your info:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">I wrote a little wrapper for an easy installation of an interrupt handler.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">Jörg<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">. . . .
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">MODULE Interrupt; (* jr/7feb20 *)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">IMPORT SYSTEM, Kernel;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">PROCEDURE* Empty; BEGIN END Empty;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">PROCEDURE Install*(handler: PROCEDURE);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                CONST PushR0ontoStack = 0A0E00000H; (* STW R0 SP 0 *)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                VAR instr: INTEGER;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                BEGIN<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                               SYSTEM.LDPSR(0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                               Kernel.Install(SYSTEM.ADR(Empty), 4);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                               SYSTEM.GET(ORD(handler)+4, instr);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                               IF instr = PushR0ontoStack THEN<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                                              
</span><span style="font-size:11.0pt;mso-fareast-language:EN-US">Kernel.Install(ORD(handler), 4);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">                                               SYSTEM.LDPSR(1)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">                              
</span><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">END<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                END Install;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">BEGIN<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">                Install(NIL)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">END Interrupt.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">ORP.Compile jr.Interrupt.Mod/s ~<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">ORTool.DecObj Interrupt.rsc ~<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">Von:
</span></b><span style="font-size:12.0pt;color:black">Joerg <joerg.straube@iaeth.ch><br>
<b>Datum: </b>Freitag, 13. Mai 2022 um 16:04<br>
<b>An: </b>ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br>
<b>Betreff: </b>Re: [Oberon] [EXT] ALU 2015 and 2018<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">Wojtek<br>
<br>
As can be seen in the Verilog code, Hardware-wise the CPU does a jump to memory location 4.<br>
Software-wise you can decide what you do with this HW capability.<br>
Either you put the code of your interrupt handler there or - the approach the Oberon OS takes - put a jump instruction at location 4 and thus allow to put the interrupt handler whereever you like to put it in memory.<br>
<br>
The SW code in chapter 4 explains how to use the interrupt capability. The SYSTEM.PUT is important!<br>
<br>
br<br>
Jörg<br>
<br>
> Am 13.05.2022 um 15:47 schrieb Skulski, Wojciech <skulski@pas.rochester.edu>:<br>
> <br>
> Joerg:<br>
> <br>
> the code which we discussed should not be defended. It should be rewritten. The number "1" needs to become a parameter. Relocating an Interrupt Service Routine is a legitimate request. Doing this should not require diving into code and finding "1" hidden
 somewhere w/o a line of comment. <br>
> <br>
>> I strongly assumed that the student or whoever studies RISC5 knows, <br>
>> that RISC5 handles memory as a bunch 32bit words. RISC5 is a 32bit machine.<br>
>> The document tells you that the interrupt handler sits at memory location 4 (in bytes).
<br>
>> This is adress 1 (in words)<br>
> <br>
> You also needs to add that RISC5 address is byte-wise rather than word-wise. This should be reiterated in the PDF in this particular place, and also in the comment in the code. Also, "1" should be a localparam rather than a literal.
<br>
> <br>
> You would be surprised what students do not know these days. I work with these students all the time. We hire them as interns. We need those guys to be productive, which will not be the case if we throw them into deep water w/o instruction.
<br>
> <br>
> If you have someone whom you educated well enough to not require such guidance, then please send this person to me because I need an EE right now. The one who can understand your code will be ideal. This person needs to be authorized to work in the USA.
<br>
> <br>
> W.<br>
> <br>
> <br>
> --<br>
> Oberon@lists.inf.ethz.ch mailing list for ETH Oberon and related systems<br>
> <a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><o:p></o:p></span></p>
</div>
</div>
</body>
</html>