<html>
    <head>
        <meta charset="UTF-8">

        <!-- Load the player -->
        <script type="text/javascript" src="player.js"></script>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <div class="title">
            <span class="episode_name">Studying the Machine Interrupt Registers</span>
            <div class="refs_container">
                <span>References &#9660;</span>
                <div class="mouse_catcher"></div>
                <div class="refs">
                    <a data-id="3" href="https://github.com/ucb-bar/rocket/blob/master/src/main/scala/instructions.scala" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">GitHub</div>
                            <div class="ref_title">instructions.scala</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="543" class="timecode"><span class="ref_index">[1]</span><span class="time">9:03</span></span>
                        </div>
                    </a>
                    <a data-id="3" href="https://en.wikipedia.org/wiki/Register-transfer_level" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">Wikipedia</div>
                            <div class="ref_title">Register-transfer level</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="543" class="timecode"><span class="ref_index">[2]</span><span class="time">9:03</span></span>
                        </div>
                    </a>
                    <a data-id="4" href="https://forums.sifive.com/t/confusion-regarding-freedom-e-sdk-inline-asm/383" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">SiFive Forums</div>
                            <div class="ref_title">Confusion Regarding Freedom E SDK inline asm</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="955" class="timecode"><span class="ref_index">[3]</span><span class="time">15:55</span></span>
                        </div>
                    </a>
                    <a data-id="6" href="https://riscv.org/specifications" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">RISC-V</div>
                            <div class="ref_title">User-Level ISA Specification v2.1</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="1344" class="timecode"><span class="ref_index">[4]</span><span class="time">22:24</span></span>
                        </div>
                    </a>
                    <a data-id="8" href="http://ericw.ca/notes/a-tiny-guide-to-gcc-inline-assembly.html" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">ericw.</div>
                            <div class="ref_title">A Tiny Guide to GCC Inline Assembly</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="1733" class="timecode"><span class="ref_index">[5]</span><span class="time">28:53</span></span>
                        </div>
                    </a>
                    <a data-id="10" href="https://riscv.org/specifications/privileged-isa/" target="_blank" class="ref">
                        <span class="ref_content">
                            <div class="source">RISC-V</div>
                            <div class="ref_title">Draft Privileged ISA Specification v1.9.1</div>
                        </span>
                        <div class="ref_indices">
                            <span data-timestamp="2421" class="timecode"><span class="ref_index">[6]</span><span class="time">40:21</span></span>
                        </div>
                    </a>
                </div>
            </div>
            <span class="annotator_container">Annotator: <span class="annotator">Miblo</span></span>
        </div>
        <div class="player_container">
            <div class="video_container" data-videoId="ug5WkCROkOk"></div>
            <div class="markers_container">
                <div class="marker" data-timestamp="6">
                    <div class="content"><span class="timecode">0:06</span>Recap and set the stage for the day</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">0:06</span>Recap and set the stage for the day</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">0:06</span>Recap and set the stage for the day</div>
                    </div>
                </div>
                <div class="marker blackboard" data-timestamp="51">
                    <div class="content"><span class="timecode">0:51</span>Intuition on two's complement</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">0:51</span>Intuition on two's complement</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">0:51</span>Intuition on two's complement</div>
                    </div>
                </div>
                <div class="marker blackboard" data-timestamp="250">
                    <div class="content"><span class="timecode">4:10</span>We are counting with zeroes</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">4:10</span>We are counting with zeroes</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">4:10</span>We are counting with zeroes</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="543" data-ref="3">
                    <div class="content"><span class="timecode">9:03</span>Revisit instructions.scala<sup>1</sup>  and research register-transfer level<sup>2</sup></div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">9:03</span>Revisit instructions.scala<sup>1</sup>  and research register-transfer level<sup>2</sup></div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">9:03</span>Revisit instructions.scala<sup>1</sup>  and research register-transfer level<sup>2</sup></div>
                    </div>
                </div>
                <div class="marker blackboard" data-timestamp="955" data-ref="4">
                    <div class="content"><span class="timecode">15:55</span>Come to understand how to specify that rs1 represents an immediate or a register, thanks to the reply to the "Confusion Regarding Freedom E SDK inline asm" forum thread<sup>3</sup></div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">15:55</span>Come to understand how to specify that rs1 represents an immediate or a register, thanks to the reply to the "Confusion Regarding Freedom E SDK inline asm" forum thread<sup>3</sup></div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">15:55</span>Come to understand how to specify that rs1 represents an immediate or a register, thanks to the reply to the "Confusion Regarding Freedom E SDK inline asm" forum thread<sup>3</sup></div>
                    </div>
                </div>
                <div class="marker blackboard" data-timestamp="1105">
                    <div class="content"><span class="timecode">18:25</span>Read clear_csr() to put csrrc into perspective with our new understanding of pseudo-instructions and the i vs r hints</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">18:25</span>Read clear_csr() to put csrrc into perspective with our new understanding of pseudo-instructions and the i vs r hints</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">18:25</span>Read clear_csr() to put csrrc into perspective with our new understanding of pseudo-instructions and the i vs r hints</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="1344" data-ref="6">
                    <div class="content"><span class="timecode">22:24</span>Read about CSRRCI in the CSR Instructions section of the User-Level ISA Specification<sup>4</sup></div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">22:24</span>Read about CSRRCI in the CSR Instructions section of the User-Level ISA Specification<sup>4</sup></div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">22:24</span>Read about CSRRCI in the CSR Instructions section of the User-Level ISA Specification<sup>4</sup></div>
                    </div>
                </div>
                <div class="marker" data-timestamp="1385">
                    <div class="content"><span class="timecode">23:05</span>Walk through clear_csr() again</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">23:05</span>Walk through clear_csr() again</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">23:05</span>Walk through clear_csr() again</div>
                    </div>
                </div>
                <div class="marker blackboard" data-timestamp="1733" data-ref="8">
                    <div class="content"><span class="timecode">28:53</span>GNU Assembly Syntax: Constraints and Syntax<sup>5</sup></div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">28:53</span>GNU Assembly Syntax: Constraints and Syntax<sup>5</sup></div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">28:53</span>GNU Assembly Syntax: Constraints and Syntax<sup>5</sup></div>
                    </div>
                </div>
                <div class="marker" data-timestamp="2115">
                    <div class="content"><span class="timecode">35:15</span>Continue reading clear_csr()</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">35:15</span>Continue reading clear_csr()</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">35:15</span>Continue reading clear_csr()</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="2421" data-ref="10">
                    <div class="content"><span class="timecode">40:21</span>Pop back up to the top of the stack, to reset_demo(), and read about the currently allocated RISC-V machine-level CSR addresses<sup>6</sup></div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">40:21</span>Pop back up to the top of the stack, to reset_demo(), and read about the currently allocated RISC-V machine-level CSR addresses<sup>6</sup></div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">40:21</span>Pop back up to the top of the stack, to reset_demo(), and read about the currently allocated RISC-V machine-level CSR addresses<sup>6</sup></div>
                    </div>
                </div>
                <div class="marker" data-timestamp="2651">
                    <div class="content"><span class="timecode">44:11</span>Read about Machine Interrupt Registers, including the mie (machine interrupt-enable) register</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">44:11</span>Read about Machine Interrupt Registers, including the mie (machine interrupt-enable) register</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">44:11</span>Read about Machine Interrupt Registers, including the mie (machine interrupt-enable) register</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="2966">
                    <div class="content"><span class="timecode">49:26</span>Note how common it is in plic_driver.c for us to compute an address of a memory mapped register in order to mess with interrupts</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">49:26</span>Note how common it is in plic_driver.c for us to compute an address of a memory mapped register in order to mess with interrupts</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">49:26</span>Note how common it is in plic_driver.c for us to compute an address of a memory mapped register in order to mess with interrupts</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="3105">
                    <div class="content"><span class="timecode">51:45</span>A few words on the sponge mode that we're in</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">51:45</span>A few words on the sponge mode that we're in</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">51:45</span>A few words on the sponge mode that we're in</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="3170">
                    <div class="content"><span class="timecode">52:50</span>Continue reading about the Machine Interrupt Registers</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">52:50</span>Continue reading about the Machine Interrupt Registers</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">52:50</span>Continue reading about the Machine Interrupt Registers</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="3513">
                    <div class="content"><span class="timecode">58:33</span>Return to demo_gpio.c and come to understand the clear_csr() calls in relation to the documentation</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">58:33</span>Return to demo_gpio.c and come to understand the clear_csr() calls in relation to the documentation</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">58:33</span>Return to demo_gpio.c and come to understand the clear_csr() calls in relation to the documentation</div>
                    </div>
                </div>
                <div class="marker" data-timestamp="4008">
                    <div class="content"><span class="timecode">1:06:48</span>We're out of time for today</div>
                    <div class="progress faded">
                        <div class="content"><span class="timecode">1:06:48</span>We're out of time for today</div>
                    </div>
                    <div class="progress main">
                        <div class="content"><span class="timecode">1:06:48</span>We're out of time for today</div>
                    </div>
                </div>
            </div>
        </div>
        <script>
            var player = new Player(document.querySelector(".player_container"), onRefChanged);
            window.addEventListener("resize", function() { player.updateSize(); });
                document.addEventListener("keypress", function(ev) {
                    switch (ev.key) {
                        case 'n':
                        case 'd':
                        case 's': {
                                player.jumpToNextMarker();
                        } break;

                        case 'p':
                        case 'a':
                        case 'w': {
                                player.jumpToPrevMarker();
                        } break;
    }
});

var refTimecodes = document.querySelectorAll(".refs .ref .timecode");
for (var i = 0; i < refTimecodes.length; ++i) {
    refTimecodes[i].addEventListener("click", function(ev) {
        if (player) {
            var time = ev.currentTarget.getAttribute("data-timestamp");
            player.setTime(parseInt(time, 10));
            player.play();
            ev.preventDefault();
            ev.stopPropagation();
            return false;
        }
    });
}

var refSources = document.querySelectorAll(".refs .ref");
for (var i = 0; i < refSources.length; ++i) {
    refSources[i].addEventListener("click", function(ev) {
        if (player) {
            player.pause();
        }
    });
}

function onRefChanged(ref) {
    if (ref !== undefined && ref !== null) {
        document.querySelector(".refs_container").classList.add("current");
        var refElements = document.querySelectorAll(".refs .ref");
        var refs = ref.split(",");

        for (var i = 0; i < refElements.length; ++i) {
            if (refs.includes(refElements[i].getAttribute("data-id"))) {
                refElements[i].classList.add("current");
            } else {
                refElements[i].classList.remove("current");
            }
        }
    } else {
        document.querySelector(".refs_container").classList.remove("current");
        var refs = document.querySelectorAll(".refs .ref");
        for (var i = 0; i < refs.length; ++i) {
            refs[i].classList.remove("current");
        }
    }
}

        </script>
    </body>
</html>