Files

1967 lines
64 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<title>nibbles.S</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul id="jump_to">
<li>
<a class="large" href="javascript:void(0);">Jump To &hellip;</a>
<a class="small" href="javascript:void(0);">+</a>
<div id="jump_wrapper">
<div id="jump_page">
<a class="source" href="cnibbles.html">
cnibbles.c
</a>
<a class="source" href="nibbles.html">
nibbles.S
</a>
<a class="source" href="start.html">
start.S
</a>
</div>
</li>
</ul>
<ul class="sections">
<li id="title">
<div class="annotation">
<h1>nibbles.S</h1>
</div>
</li>
<li id="section-1">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-1">&#182;</a>
</div>
<p>by Simon Holmberg</p>
<p>This is a document generated by <a href="http://jashkenas.github.io/docco/">docco</a>.
My report is interleaved with the source code in the form of comments in
<a href="http://daringfireball.net/projects/markdown/">markdown</a> format.</p>
</div>
<div class="content"><div class='highlight'><pre>#define WIDTH <span class="hljs-number">60</span>
#define HEIGHT <span class="hljs-number">40</span></pre></div></div>
</li>
<li id="section-2">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-2">&#182;</a>
</div>
<h1 id="-bss">.bss</h1>
</div>
</li>
<li id="section-3">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-3">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-string">.bss</span></pre></div></div>
</li>
<li id="section-4">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-4">&#182;</a>
</div>
<p>Array of longs representing the game field</p>
<p><code>world</code> is an array of increasing time values. By having the snake head set
the time value to 0 at its current position, the actual <strong>snake</strong> will be
defined by the locations where the time value is lesser than the snake
length. This makes the tail of the snake automatically “move” visually, and
allows for a snake with an arbitrary length without complicated arrays of
coordinates!</p>
<p><strong>Apples</strong> are defined by negative time values which do not get incremented
each frame. If we wanted to, we could instead decrease this value and
compare it with a lifetime value, to conveniently make apples disappear
after a set amount of time.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-string">.align</span> <span class="hljs-number">4</span>
<span class="hljs-label">world:</span> <span class="hljs-string">.space</span> WIDTH*HEIGHT*<span class="hljs-number">4</span></pre></div></div>
</li>
<li id="section-5">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-5">&#182;</a>
</div>
<h1 id="-data">.data</h1>
</div>
</li>
<li id="section-6">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-6">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-string">.data</span></pre></div></div>
</li>
<li id="section-7">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-7">&#182;</a>
</div>
<p>Current length of the snake</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">snakeLength:</span> <span class="hljs-string">.long</span> <span class="hljs-number">0</span></pre></div></div>
</li>
<li id="section-8">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-8">&#182;</a>
</div>
<p>Snake position (starts in the middle of the field)</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">snakePosX:</span> <span class="hljs-string">.long</span> WIDTH / <span class="hljs-number">2</span>
<span class="hljs-label">snakePosY:</span> <span class="hljs-string">.long</span> HEIGHT / <span class="hljs-number">2</span></pre></div></div>
</li>
<li id="section-9">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-9">&#182;</a>
</div>
<p>Snake direction (start moving to the right)</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">snakeDirX:</span> <span class="hljs-string">.long</span> <span class="hljs-number">1</span>
<span class="hljs-label">snakeDirY:</span> <span class="hljs-string">.long</span> <span class="hljs-number">0</span></pre></div></div>
</li>
<li id="section-10">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-10">&#182;</a>
</div>
<p>Number of apples</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">numApples:</span> <span class="hljs-string">.long</span> <span class="hljs-number">0</span></pre></div></div>
</li>
<li id="section-11">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-11">&#182;</a>
</div>
<p>Game over message</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">sgameover:</span> <span class="hljs-string">.string</span> <span class="hljs-string">" Game over! Score: %i "</span>
<span class="hljs-label">sgameover_end:</span></pre></div></div>
</li>
<li id="section-12">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-12">&#182;</a>
</div>
<p>Various utility strings mainly used for debugging</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">string1:</span> <span class="hljs-string">.string</span> <span class="hljs-string">"Started with snake length %i and %i apples!\n"</span>
<span class="hljs-label">string2:</span> <span class="hljs-string">.string</span> <span class="hljs-string">"Snake position: (%i, %i)\n"</span>
<span class="hljs-label">stringi:</span> <span class="hljs-string">.string</span> <span class="hljs-string">"%i\n"</span>
<span class="hljs-label">stringtest:</span> <span class="hljs-string">.string</span> <span class="hljs-string">"&gt; %i %i %c\n"</span></pre></div></div>
</li>
<li id="section-13">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-13">&#182;</a>
</div>
<h1 id="-text">.text</h1>
</div>
</li>
<li id="section-14">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-14">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-string">.text</span></pre></div></div>
</li>
<li id="section-15">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-15">&#182;</a>
</div>
<h1 id="start_game">start_game</h1>
</div>
</li>
<li id="section-16">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-16">&#182;</a>
</div>
<p><code>start_game(int len, int n_apples)</code></p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-string">.global</span> start_game
<span class="hljs-label">start_game:</span></pre></div></div>
</li>
<li id="section-17">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-17">&#182;</a>
</div>
<h2 id="initialization">Initialization</h2>
</div>
</li>
<li id="section-18">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-18">&#182;</a>
</div>
</div>
</li>
<li id="section-19">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-19">&#182;</a>
</div>
<p>Save our function arguments for later</p>
</div>
</li>
<li id="section-20">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-20">&#182;</a>
</div>
<p><code>snakeLength = len</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl <span class="hljs-number">4</span>(%<span class="hljs-literal">esp</span>), %<span class="hljs-number">eax</span>
movl %<span class="hljs-number">eax</span>, snakeLength</pre></div></div>
</li>
<li id="section-21">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-21">&#182;</a>
</div>
<p><code>numApples = n_apples</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl <span class="hljs-number">8</span>(%<span class="hljs-literal">esp</span>), %<span class="hljs-number">eax</span>
movl %<span class="hljs-number">eax</span>, numApples</pre></div></div>
</li>
<li id="section-22">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-22">&#182;</a>
</div>
<p>Store all registers so we can restore their state before we return later</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">pusha</span></pre></div></div>
</li>
<li id="section-23">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-23">&#182;</a>
</div>
<p>Call nib_init</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> nib_init</pre></div></div>
</li>
<li id="section-24">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-24">&#182;</a>
</div>
<p>Seed randomness by calling <code>srand</code> with a time value from <code>time</code></p>
</div>
<div class="content"><div class='highlight'><pre> pushl <span class="hljs-number">$0</span>
<span class="hljs-keyword">call</span> time
addl <span class="hljs-number">$4</span>, %<span class="hljs-literal">esp</span>
pushl %<span class="hljs-number">eax</span>
<span class="hljs-keyword">call</span> srand
addl <span class="hljs-number">$4</span>, %<span class="hljs-literal">esp</span></pre></div></div>
</li>
<li id="section-25">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-25">&#182;</a>
</div>
<p>Initialize the snake array by setting every cell to a time value greater
than <code>snakeLength</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl $world, %<span class="hljs-literal">edi</span>
movl snakeLength, %<span class="hljs-number">eax</span>
movl $WIDTH*HEIGHT, %<span class="hljs-number">ebx</span>
xorl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">ecx</span>
<span class="hljs-number">1</span>:
movl %<span class="hljs-number">eax</span>, (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">ecx</span>, <span class="hljs-number">4</span>)
incl %<span class="hljs-number">ecx</span>
cmpl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">jl</span> <span class="hljs-number">1b</span></pre></div></div>
</li>
<li id="section-26">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-26">&#182;</a>
</div>
<p>Spawn initial apples</p>
</div>
<div class="content"><div class='highlight'><pre> movl numApples, %<span class="hljs-number">ecx</span>
<span class="hljs-number">1</span>:
pushl %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">call</span> spawnApple
popl %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">loop</span> <span class="hljs-number">1b</span></pre></div></div>
</li>
<li id="section-27">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-27">&#182;</a>
</div>
<h2 id="game-loop">Game loop</h2>
</div>
</li>
<li id="section-28">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-28">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">loop:</span></pre></div></div>
</li>
<li id="section-29">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-29">&#182;</a>
</div>
<p>Sleep for a while using <code>usleep</code> so the snake doesnt wiggle at the
speed of light!</p>
</div>
<div class="content"><div class='highlight'><pre> pushl <span class="hljs-number">$250</span>*<span class="hljs-number">1000</span>
<span class="hljs-keyword">call</span> usleep
addl <span class="hljs-number">$4</span>, %<span class="hljs-literal">esp</span></pre></div></div>
</li>
<li id="section-30">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-30">&#182;</a>
</div>
<p>Jump to <code>tick</code>, our updating function, which later chain-jumps to <code>draw</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jmp</span> tick</pre></div></div>
</li>
<li id="section-31">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-31">&#182;</a>
</div>
<p>Restore all our registers as they were before <code>start_game</code> was called
and return</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">popa</span>
<span class="hljs-keyword">ret</span></pre></div></div>
</li>
<li id="section-32">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-32">&#182;</a>
</div>
<h1 id="tick">tick</h1>
</div>
</li>
<li id="section-33">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-33">&#182;</a>
</div>
<p>This is where we update the world.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">tick:</span>
movl $world, %<span class="hljs-literal">edi</span></pre></div></div>
</li>
<li id="section-34">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-34">&#182;</a>
</div>
<h2 id="increment-cell-times">Increment cell times</h2>
</div>
</li>
<li id="section-35">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-35">&#182;</a>
</div>
</div>
</li>
<li id="section-36">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-36">&#182;</a>
</div>
<p>Loop</p>
</div>
<div class="content"><div class='highlight'><pre> movl snakeLength, %<span class="hljs-number">ebx</span>
xorl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">ecx</span>
<span class="hljs-number">1</span>:
movl (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">ecx</span>, <span class="hljs-number">4</span>), %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-37">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-37">&#182;</a>
</div>
<p>If the value is negative its an apple we dont want to disappear</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">test</span> %<span class="hljs-number">eax</span>, %<span class="hljs-number">eax</span>
<span class="hljs-keyword">js</span> 2f</pre></div></div>
</li>
<li id="section-38">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-38">&#182;</a>
</div>
<p>No need to increment if its already greater than snakeLength</p>
</div>
<div class="content"><div class='highlight'><pre> cmpl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span>
<span class="hljs-keyword">jg</span> 2f</pre></div></div>
</li>
<li id="section-39">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-39">&#182;</a>
</div>
<p>Increment the cell value</p>
</div>
<div class="content"><div class='highlight'><pre> incl %<span class="hljs-number">eax</span>
movl %<span class="hljs-number">eax</span>, (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">ecx</span>, <span class="hljs-number">4</span>)
<span class="hljs-number">2</span>: incl %<span class="hljs-number">ecx</span> // <span class="hljs-keyword">Loop</span> increment
cmpl $WIDTH*HEIGHT, %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">jne</span> <span class="hljs-number">1b</span></pre></div></div>
</li>
<li id="section-40">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-40">&#182;</a>
</div>
<h2 id="input">Input</h2>
</div>
</li>
<li id="section-41">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-41">&#182;</a>
</div>
</div>
</li>
<li id="section-42">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-42">&#182;</a>
</div>
<p>Call nib_poll_kbd and check down, up, left and right in succession</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> nib_poll_kbd</pre></div></div>
</li>
<li id="section-43">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-43">&#182;</a>
</div>
<p>Down</p>
</div>
<div class="content"><div class='highlight'><pre> movl <span class="hljs-number">$258</span>, %<span class="hljs-number">ebx</span>
cmpl %<span class="hljs-number">eax</span>, %<span class="hljs-number">ebx</span>
<span class="hljs-keyword">jne</span> 1f
movl <span class="hljs-number">$0</span>, snakeDirX
movl <span class="hljs-number">$1</span>, snakeDirY</pre></div></div>
</li>
<li id="section-44">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-44">&#182;</a>
</div>
<p>Up</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-number">1</span>: movl <span class="hljs-number">$259</span>, %<span class="hljs-number">ebx</span>
cmpl %<span class="hljs-number">eax</span>, %<span class="hljs-number">ebx</span>
<span class="hljs-keyword">jne</span> 1f
movl <span class="hljs-number">$0</span>, snakeDirX
movl $-<span class="hljs-number">1</span>, snakeDirY</pre></div></div>
</li>
<li id="section-45">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-45">&#182;</a>
</div>
<p>Left</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-number">1</span>: movl <span class="hljs-number">$260</span>, %<span class="hljs-number">ebx</span>
cmpl %<span class="hljs-number">eax</span>, %<span class="hljs-number">ebx</span>
<span class="hljs-keyword">jne</span> 1f
movl $-<span class="hljs-number">1</span>, snakeDirX
movl <span class="hljs-number">$0</span>, snakeDirY</pre></div></div>
</li>
<li id="section-46">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-46">&#182;</a>
</div>
<p>Right</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-number">1</span>: movl <span class="hljs-number">$261</span>, %<span class="hljs-number">ebx</span>
cmpl %<span class="hljs-number">eax</span>, %<span class="hljs-number">ebx</span>
<span class="hljs-keyword">jne</span> 1f
movl <span class="hljs-number">$1</span>, snakeDirX
movl <span class="hljs-number">$0</span>, snakeDirY
<span class="hljs-number">1</span>:</pre></div></div>
</li>
<li id="section-47">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-47">&#182;</a>
</div>
<h2 id="move-snake">Move snake</h2>
</div>
</li>
<li id="section-48">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-48">&#182;</a>
</div>
</div>
</li>
<li id="section-49">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-49">&#182;</a>
</div>
<p><code>snakePosX = (snakePosX + snakeDirY + WIDTH) % WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl snakePosX, %<span class="hljs-number">eax</span>
movl snakeDirX, %<span class="hljs-number">ebx</span>
addl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-50">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-50">&#182;</a>
</div>
<p>Add width for modulo wrap-around</p>
</div>
<div class="content"><div class='highlight'><pre> addl $WIDTH, %<span class="hljs-number">eax</span>
xorl %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
movl $WIDTH, %<span class="hljs-number">ecx</span>
divl %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">mov</span> %<span class="hljs-number">edx</span>, snakePosX</pre></div></div>
</li>
<li id="section-51">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-51">&#182;</a>
</div>
<p><code>snakePosY = (snakePosY + snakeDirY + HEIGHT) % HEIGHT</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl snakePosY, %<span class="hljs-number">eax</span>
movl snakeDirY, %<span class="hljs-number">ebx</span>
addl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-52">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-52">&#182;</a>
</div>
<p>Add height for modulo wrap-around</p>
</div>
<div class="content"><div class='highlight'><pre> addl $HEIGHT, %<span class="hljs-number">eax</span>
xorl %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
movl $HEIGHT, %<span class="hljs-number">ecx</span>
divl %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">mov</span> %<span class="hljs-number">edx</span>, snakePosY</pre></div></div>
</li>
<li id="section-53">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-53">&#182;</a>
</div>
<h2 id="collision">Collision</h2>
</div>
</li>
<li id="section-54">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-54">&#182;</a>
</div>
</div>
</li>
<li id="section-55">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-55">&#182;</a>
</div>
<p>Get value at head position</p>
</div>
<div class="content"><div class='highlight'><pre> movl snakePosY, %<span class="hljs-number">eax</span>
movl $WIDTH, %<span class="hljs-number">edx</span>
mull %<span class="hljs-number">edx</span>
addl snakePosX, %<span class="hljs-number">eax</span>
movl (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">eax</span>, <span class="hljs-number">4</span>), %<span class="hljs-number">edx</span></pre></div></div>
</li>
<li id="section-56">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-56">&#182;</a>
</div>
<p>Collision with apple if negative</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">test</span> %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
<span class="hljs-keyword">js</span> 1f</pre></div></div>
</li>
<li id="section-57">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-57">&#182;</a>
</div>
<p>Compare value with <code>snakeLength</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl snakeLength, %<span class="hljs-number">ebx</span>
cmpl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">edx</span></pre></div></div>
</li>
<li id="section-58">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-58">&#182;</a>
</div>
<p>End the game if the snake collides with itself, i.e. <code>%edx &lt; snakeLength</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jge</span> 2f
<span class="hljs-keyword">jmp</span> gameOver</pre></div></div>
</li>
<li id="section-59">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-59">&#182;</a>
</div>
<p>Spawn a new apple and extend the snake!</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-number">1</span>: pushl %<span class="hljs-literal">edi</span>
pushl %<span class="hljs-number">eax</span>
<span class="hljs-keyword">call</span> spawnApple
popl %<span class="hljs-number">eax</span>
popl %<span class="hljs-literal">edi</span>
incl snakeLength
<span class="hljs-number">2</span>:</pre></div></div>
</li>
<li id="section-60">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-60">&#182;</a>
</div>
<h2 id="update-world">Update world</h2>
</div>
</li>
<li id="section-61">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-61">&#182;</a>
</div>
</div>
</li>
<li id="section-62">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-62">&#182;</a>
</div>
<p>Set time value to 0 at snake head position</p>
<p><code>i = x + y * WIDTH</code></p>
<p><code>%edi = %ebx + %ecx * $WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl <span class="hljs-number">$0</span>, (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">eax</span>, <span class="hljs-number">4</span>)</pre></div></div>
</li>
<li id="section-63">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-63">&#182;</a>
</div>
<p>Proceed to <code>draw</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jmp</span> draw</pre></div></div>
</li>
<li id="section-64">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-64">&#182;</a>
</div>
<p>jmp debug_draw</p>
</div>
</li>
<li id="section-65">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-65">&#182;</a>
</div>
<h1 id="draw">draw</h1>
</div>
</li>
<li id="section-66">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-66">&#182;</a>
</div>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">draw:</span></pre></div></div>
</li>
<li id="section-67">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-67">&#182;</a>
</div>
<p>Loop on Y-axis</p>
</div>
<div class="content"><div class='highlight'><pre> movl $HEIGHT, %<span class="hljs-number">ecx</span>
<span class="hljs-number">1</span>:</pre></div></div>
</li>
<li id="section-68">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-68">&#182;</a>
</div>
<p>Loop on X-axis</p>
</div>
<div class="content"><div class='highlight'><pre> movl $WIDTH, %<span class="hljs-number">ebx</span>
<span class="hljs-number">2</span>:</pre></div></div>
</li>
<li id="section-69">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-69">&#182;</a>
</div>
<p>Save loop registers</p>
</div>
<div class="content"><div class='highlight'><pre> pushl %<span class="hljs-number">ecx</span>
pushl %<span class="hljs-number">ebx</span>
subl <span class="hljs-number">$1</span>, %<span class="hljs-number">ecx</span>
subl <span class="hljs-number">$1</span>, %<span class="hljs-number">ebx</span></pre></div></div>
</li>
<li id="section-70">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-70">&#182;</a>
</div>
<p>Call <code>nib_put_scr</code> depending of the value in a cell</p>
</div>
</li>
<li id="section-71">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-71">&#182;</a>
</div>
<p><code>i = x + y * WIDTH</code></p>
<p><code>%eax = %ebx + %ecx * $WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>
movl $WIDTH, %<span class="hljs-number">edx</span>
mull %<span class="hljs-number">edx</span>
addl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-72">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-72">&#182;</a>
</div>
<p>Fetch the value of the cell</p>
</div>
<div class="content"><div class='highlight'><pre> movl $world, %<span class="hljs-literal">edi</span>
movl (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">eax</span>, <span class="hljs-number">4</span>), %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-73">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-73">&#182;</a>
</div>
<p>Compare with the snake length</p>
</div>
<div class="content"><div class='highlight'><pre> cmpl snakeLength, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-74">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-74">&#182;</a>
</div>
<p>If the value is negative, its an apple</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">test</span> %<span class="hljs-number">eax</span>, %<span class="hljs-number">eax</span>
<span class="hljs-keyword">js</span> 4f</pre></div></div>
</li>
<li id="section-75">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-75">&#182;</a>
</div>
<p>If its greater or equal to snakeLength, its empty</p>
</div>
<div class="content"><div class='highlight'><pre> cmpl snakeLength, %<span class="hljs-number">eax</span>
<span class="hljs-keyword">jge</span> 3f</pre></div></div>
</li>
<li id="section-76">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-76">&#182;</a>
</div>
<p>Else, its part of the snake</p>
</div>
<div class="content"><div class='highlight'><pre> pushl $<span class="hljs-string">'@'</span>
<span class="hljs-keyword">jmp</span> 5f
<span class="hljs-number">3</span>: pushl $<span class="hljs-string">' '</span>
<span class="hljs-keyword">jmp</span> 5f
<span class="hljs-number">4</span>: pushl $<span class="hljs-string">'o'</span>
<span class="hljs-number">5</span>:</pre></div></div>
</li>
<li id="section-77">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-77">&#182;</a>
</div>
<p>Push Y-coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>
pushl %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-78">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-78">&#182;</a>
</div>
<p>Push X-coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span>
pushl %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-79">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-79">&#182;</a>
</div>
<p><code>nib_put_scr(int x, int y, int c)</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> nib_put_scr
addl <span class="hljs-number">$4</span>*<span class="hljs-number">3</span>, %<span class="hljs-literal">esp</span></pre></div></div>
</li>
<li id="section-80">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-80">&#182;</a>
</div>
<p>Restore loop registers</p>
</div>
<div class="content"><div class='highlight'><pre> popl %<span class="hljs-number">ebx</span>
popl %<span class="hljs-number">ecx</span></pre></div></div>
</li>
<li id="section-81">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-81">&#182;</a>
</div>
<p>Decrement X</p>
</div>
<div class="content"><div class='highlight'><pre> decl %<span class="hljs-number">ebx</span></pre></div></div>
</li>
<li id="section-82">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-82">&#182;</a>
</div>
<p>End of X-loop</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jnz</span> 2b</pre></div></div>
</li>
<li id="section-83">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-83">&#182;</a>
</div>
<p>End of Y-loop</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">loop</span> <span class="hljs-number">1b</span></pre></div></div>
</li>
<li id="section-84">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-84">&#182;</a>
</div>
<p>Jump back to the start of our game loop!</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jmp</span> <span class="hljs-keyword">loop</span></pre></div></div>
</li>
<li id="section-85">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-85">&#182;</a>
</div>
<h1 id="gameover">gameOver</h1>
</div>
</li>
<li id="section-86">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-86">&#182;</a>
</div>
<p>Called when the game ends. It displays a game over message
and score, and quits after <strong>3 seconds</strong>.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">gameOver:</span></pre></div></div>
</li>
<li id="section-87">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-87">&#182;</a>
</div>
<h2 id="calculate-message-position">Calculate message position</h2>
</div>
</li>
<li id="section-88">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-88">&#182;</a>
</div>
</div>
</li>
<li id="section-89">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-89">&#182;</a>
</div>
<p>Calculate string length</p>
</div>
<div class="content"><div class='highlight'><pre> movl $sgameover_end, %<span class="hljs-number">eax</span>
subl $sgameover, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-90">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-90">&#182;</a>
</div>
<p>Discout null terminator</p>
</div>
<div class="content"><div class='highlight'><pre> subl <span class="hljs-number">$1</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-91">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-91">&#182;</a>
</div>
<p>Calculate X-pos in the middle of the screen</p>
</div>
<div class="content"><div class='highlight'><pre> movl <span class="hljs-number">$2</span>, %<span class="hljs-number">ebx</span>
xorl %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
divl %<span class="hljs-number">ebx</span>
negl %<span class="hljs-number">eax</span>
addl $WIDTH/<span class="hljs-number">2</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-92">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-92">&#182;</a>
</div>
<h2 id="print-game-over-message">Print game over message</h2>
</div>
</li>
<li id="section-93">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-93">&#182;</a>
</div>
</div>
</li>
<li id="section-94">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-94">&#182;</a>
</div>
<p>Push <code>snakeLength</code> as score</p>
</div>
<div class="content"><div class='highlight'><pre> pushl snakeLength</pre></div></div>
</li>
<li id="section-95">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-95">&#182;</a>
</div>
<p>Push printf-string</p>
</div>
<div class="content"><div class='highlight'><pre> pushl $sgameover</pre></div></div>
</li>
<li id="section-96">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-96">&#182;</a>
</div>
<p>Push X-coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> pushl %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-97">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-97">&#182;</a>
</div>
<p>Push Y-coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> pushl $HEIGHT/<span class="hljs-number">2</span></pre></div></div>
</li>
<li id="section-98">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-98">&#182;</a>
</div>
<p><code>mvprintw(int y, int x, const char *fmt, ...)</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> mvprintw
<span class="hljs-keyword">add</span> <span class="hljs-number">$4</span>*<span class="hljs-number">3</span>, %<span class="hljs-literal">esp</span></pre></div></div>
</li>
<li id="section-99">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-99">&#182;</a>
</div>
<p>Call <code>refresh</code> to refresh the screen </p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> refresh</pre></div></div>
</li>
<li id="section-100">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-100">&#182;</a>
</div>
<p>Sleep for 3 seconds before calling <code>nib_end</code></p>
</div>
<div class="content"><div class='highlight'><pre> pushl <span class="hljs-number">$3000</span>*<span class="hljs-number">1000</span>
<span class="hljs-keyword">call</span> usleep
addl <span class="hljs-number">$4</span>, %<span class="hljs-literal">esp</span>
<span class="hljs-keyword">call</span> nib_end</pre></div></div>
</li>
<li id="section-101">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-101">&#182;</a>
</div>
<h1 id="spawnapple">spawnApple</h1>
</div>
</li>
<li id="section-102">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-102">&#182;</a>
</div>
<p>Spawns an <strong>apple</strong> in a random location in the <code>world</code>.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">spawnApple:</span>
pushl %<span class="hljs-number">ebx</span></pre></div></div>
</li>
<li id="section-103">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-103">&#182;</a>
</div>
<p><code>%ecx = rand() % HEIGHT</code></p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">call</span> rand
xorl %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
movl $HEIGHT, %<span class="hljs-number">ebx</span>
divl %<span class="hljs-number">ebx</span>
movl %<span class="hljs-number">edx</span>, %<span class="hljs-number">ecx</span></pre></div></div>
</li>
<li id="section-104">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-104">&#182;</a>
</div>
<p><code>%ebx = rand() % WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> pushl %<span class="hljs-number">ecx</span>
<span class="hljs-keyword">call</span> rand
xorl %<span class="hljs-number">edx</span>, %<span class="hljs-number">edx</span>
movl $WIDTH, %<span class="hljs-number">ebx</span>
divl %<span class="hljs-number">ebx</span>
movl %<span class="hljs-number">edx</span>, %<span class="hljs-number">ebx</span>
popl %<span class="hljs-number">ecx</span></pre></div></div>
</li>
<li id="section-105">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-105">&#182;</a>
</div>
<p><code>i = x + y * WIDTH</code></p>
<p><code>%eax = %ebx + %ecx * $WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>
movl $WIDTH, %<span class="hljs-number">edx</span>
mull %<span class="hljs-number">edx</span>
addl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-106">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-106">&#182;</a>
</div>
<p>Set the cell negative to represent an apple</p>
</div>
<div class="content"><div class='highlight'><pre> movl $world, %<span class="hljs-number">ecx</span>
movl $-<span class="hljs-number">1</span>, %<span class="hljs-number">edx</span>
movl %<span class="hljs-number">edx</span>, (%<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>, <span class="hljs-number">4</span>)
popl %<span class="hljs-number">ebx</span>
<span class="hljs-keyword">ret</span></pre></div></div>
</li>
<li id="section-107">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-107">&#182;</a>
</div>
<h1 id="debug_draw">debug_draw</h1>
</div>
</li>
<li id="section-108">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-108">&#182;</a>
</div>
<p>This is basically the same as <code>draw</code>, except it draws the actual ASCII-value
of the world for debugging purposes.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-label">debug_draw:</span></pre></div></div>
</li>
<li id="section-109">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-109">&#182;</a>
</div>
<p>Loop Y</p>
</div>
<div class="content"><div class='highlight'><pre> movl $HEIGHT, %<span class="hljs-number">ecx</span>
<span class="hljs-number">1</span>:</pre></div></div>
</li>
<li id="section-110">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-110">&#182;</a>
</div>
<p>Loop X</p>
</div>
<div class="content"><div class='highlight'><pre> movl $WIDTH, %<span class="hljs-number">ebx</span>
<span class="hljs-number">2</span>:</pre></div></div>
</li>
<li id="section-111">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-111">&#182;</a>
</div>
<p>Save loop registers</p>
</div>
<div class="content"><div class='highlight'><pre> pushl %<span class="hljs-number">ecx</span>
pushl %<span class="hljs-number">ebx</span>
subl <span class="hljs-number">$1</span>, %<span class="hljs-number">ecx</span>
subl <span class="hljs-number">$1</span>, %<span class="hljs-number">ebx</span></pre></div></div>
</li>
<li id="section-112">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-112">&#182;</a>
</div>
<p>Call nib_put_scr</p>
</div>
</li>
<li id="section-113">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-113">&#182;</a>
</div>
<p><code>i = x + y * WIDTH</code></p>
<p><code>%edi = %ebx + %ecx * $WIDTH</code></p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>
movl $WIDTH, %<span class="hljs-number">edx</span>
mull %<span class="hljs-number">edx</span>
addl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-114">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-114">&#182;</a>
</div>
<p>Fetch the value of the cell</p>
</div>
<div class="content"><div class='highlight'><pre> movl $world, %<span class="hljs-literal">edi</span>
movl (%<span class="hljs-literal">edi</span>, %<span class="hljs-number">eax</span>, <span class="hljs-number">4</span>), %<span class="hljs-number">eax</span>
pushl %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-115">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-115">&#182;</a>
</div>
<p>Y coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ecx</span>, %<span class="hljs-number">eax</span>
pushl %<span class="hljs-number">eax</span></pre></div></div>
</li>
<li id="section-116">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-116">&#182;</a>
</div>
<p>X coordinate</p>
</div>
<div class="content"><div class='highlight'><pre> movl %<span class="hljs-number">ebx</span>, %<span class="hljs-number">eax</span>
pushl %<span class="hljs-number">eax</span>
<span class="hljs-keyword">call</span> nib_put_scr
addl <span class="hljs-number">$4</span>*<span class="hljs-number">3</span>, %<span class="hljs-literal">esp</span></pre></div></div>
</li>
<li id="section-117">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-117">&#182;</a>
</div>
<p>Restore loop registers</p>
</div>
<div class="content"><div class='highlight'><pre> popl %<span class="hljs-number">ebx</span>
popl %<span class="hljs-number">ecx</span></pre></div></div>
</li>
<li id="section-118">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-118">&#182;</a>
</div>
<p>Decrement X</p>
</div>
<div class="content"><div class='highlight'><pre> decl %<span class="hljs-number">ebx</span></pre></div></div>
</li>
<li id="section-119">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-119">&#182;</a>
</div>
<p>End of X-loop</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">jnz</span> 2b</pre></div></div>
</li>
<li id="section-120">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-120">&#182;</a>
</div>
<p>End of Y-loop</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">loop</span> <span class="hljs-number">1b</span></pre></div></div>
</li>
<li id="section-121">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-121">&#182;</a>
</div>
<p>Jump back to the start of our game loop!</p>
</div>
<div class="content"><div class='highlight'><pre>
<span class="hljs-keyword">jmp</span> <span class="hljs-keyword">loop</span></pre></div></div>
</li>
</ul>
</div>
</body>
</html>