"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:41 -->
+<!-- 2025-07-29 ti 16:03 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Fractals</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orge4c43a4">1. Fractal circles</a></li>
-<li><a href="#org894e516">2. Fractal circles animated</a></li>
-<li><a href="#orge04687d">3. Fractal of squares</a></li>
-<li><a href="#org9c796a9">4. Fractal of squares animated</a></li>
-<li><a href="#org6b507f3">5. Fractal of trees</a></li>
+<li><a href="#org6b5da24">1. Fractal circles</a></li>
+<li><a href="#org4ccbf5e">2. Fractal circles animated</a></li>
+<li><a href="#orgc14e984">3. Fractal of squares</a></li>
+<li><a href="#orgb305042">4. Fractal of squares animated</a></li>
+<li><a href="#org7b1aff1">5. Fractal of trees</a></li>
</ul>
</div>
</div>
</style>
-<div id="outline-container-orge4c43a4" class="outline-2">
-<h2 id="orge4c43a4"><span class="section-number-2">1.</span> Fractal circles</h2>
+<div id="outline-container-org6b5da24" class="outline-2">
+<h2 id="org6b5da24"><span class="section-number-2">1.</span> Fractal circles</h2>
<div class="outline-text-2" id="text-1">
<p>
This QBasic program generates a visually captivating spiral fractal
</p>
-<div id="org10abd1c" class="figure">
+<div id="orgd6628aa" class="figure">
<p><a href="fractal circles.bas" class="responsive-img"><img src="fractal%20circles.png" alt="fractal%20circles.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org894e516" class="outline-2">
-<h2 id="org894e516"><span class="section-number-2">2.</span> Fractal circles animated</h2>
+<div id="outline-container-org4ccbf5e" class="outline-2">
+<h2 id="org4ccbf5e"><span class="section-number-2">2.</span> Fractal circles animated</h2>
<div class="outline-text-2" id="text-2">
<p>
This QBasic program creates an animated fractal composed of circles,
</div>
</div>
-<div id="outline-container-orge04687d" class="outline-2">
-<h2 id="orge04687d"><span class="section-number-2">3.</span> Fractal of squares</h2>
+<div id="outline-container-orgc14e984" class="outline-2">
+<h2 id="orgc14e984"><span class="section-number-2">3.</span> Fractal of squares</h2>
<div class="outline-text-2" id="text-3">
<p>
This QBasic program generates and displays a fractal pattern composed of squares.
</p>
-<div id="org0c1f39e" class="figure">
+<div id="orgae6b11b" class="figure">
<p><a href="fractal squares.bas" class="responsive-img"><img src="fractal%20squares,%201.png" alt="fractal%20squares,%201.png" class="responsive-img" /></a>
</p>
</div>
-<div id="orge6bc79a" class="figure">
+<div id="org7f2ac54" class="figure">
<p><a href="fractal squares.bas" class="responsive-img"><img src="fractal%20squares,%202.png" alt="fractal%20squares,%202.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org9c796a9" class="outline-2">
-<h2 id="org9c796a9"><span class="section-number-2">4.</span> Fractal of squares animated</h2>
+<div id="outline-container-orgb305042" class="outline-2">
+<h2 id="orgb305042"><span class="section-number-2">4.</span> Fractal of squares animated</h2>
<div class="outline-text-2" id="text-4">
<p>
This QBasic program generates an animated fractal pattern composed of
</div>
</div>
-<div id="outline-container-org6b507f3" class="outline-2">
-<h2 id="org6b507f3"><span class="section-number-2">5.</span> Fractal of trees</h2>
+<div id="outline-container-org7b1aff1" class="outline-2">
+<h2 id="org7b1aff1"><span class="section-number-2">5.</span> Fractal of trees</h2>
<div class="outline-text-2" id="text-5">
<p>
QBasic program that generates a visually appealing fractal tree
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:41</p>
+<p class="date">Created: 2025-07-29 ti 16:03</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:41 -->
+<!-- 2025-07-29 ti 16:04 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Spiral series</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orgcf596f5">1. Spiral with increasing density</a></li>
-<li><a href="#org0afe5c2">2. Spiral with varying height</a></li>
-<li><a href="#org1de700b">3. Shaded spiral</a></li>
-<li><a href="#orge60ab97">4. Sphere forming spiral</a></li>
-<li><a href="#orgf158dad">5. Textured spherical spiral</a></li>
-<li><a href="#org6611bd5">6. Textured and shaded spherical spiral</a></li>
+<li><a href="#orge1c351f">1. Spiral with increasing density</a></li>
+<li><a href="#org3179eac">2. Spiral with varying height</a></li>
+<li><a href="#orgd7fcc05">3. Shaded spiral</a></li>
+<li><a href="#orgbb9678e">4. Sphere forming spiral</a></li>
+<li><a href="#orgffc6b61">5. Textured spherical spiral</a></li>
+<li><a href="#orgb1aa930">6. Textured and shaded spherical spiral</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-orgcf596f5" class="outline-2">
-<h2 id="orgcf596f5"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
+<div id="outline-container-orge1c351f" class="outline-2">
+<h2 id="orge1c351f"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
<div class="outline-text-2" id="text-1">
-<div id="orgc11a2d7" class="figure">
+<div id="org7fe9118" class="figure">
<p><img src="spiral.png" alt="spiral.png" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-org0afe5c2" class="outline-2">
-<h2 id="org0afe5c2"><span class="section-number-2">2.</span> Spiral with varying height</h2>
+<div id="outline-container-org3179eac" class="outline-2">
+<h2 id="org3179eac"><span class="section-number-2">2.</span> Spiral with varying height</h2>
<div class="outline-text-2" id="text-2">
-<div id="orgb06fd3e" class="figure">
+<div id="orga2c24d2" class="figure">
<p><img src="spiral, 2.png" alt="spiral, 2.png" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-org1de700b" class="outline-2">
-<h2 id="org1de700b"><span class="section-number-2">3.</span> Shaded spiral</h2>
+<div id="outline-container-orgd7fcc05" class="outline-2">
+<h2 id="orgd7fcc05"><span class="section-number-2">3.</span> Shaded spiral</h2>
<div class="outline-text-2" id="text-3">
-<div id="org071b93e" class="figure">
+<div id="org77fa3e4" class="figure">
<p><img src="spiral, 3.png" alt="spiral, 3.png" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-orge60ab97" class="outline-2">
-<h2 id="orge60ab97"><span class="section-number-2">4.</span> Sphere forming spiral</h2>
+<div id="outline-container-orgbb9678e" class="outline-2">
+<h2 id="orgbb9678e"><span class="section-number-2">4.</span> Sphere forming spiral</h2>
<div class="outline-text-2" id="text-4">
<p>
Similar to previous spiral, Line segments are connected between the
</p>
-<div id="orgb6c2a3b" class="figure">
+<div id="org4e5ebfc" class="figure">
<p><img src="spiral, 4, 1.png" alt="spiral, 4, 1.png" class="responsive-img" />
</p>
</div>
</p>
-<div id="orgc533828" class="figure">
+<div id="org0ae594d" class="figure">
<p><img src="spiral, 4, 2.png" alt="spiral, 4, 2.png" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-orgf158dad" class="outline-2">
-<h2 id="orgf158dad"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
+<div id="outline-container-orgffc6b61" class="outline-2">
+<h2 id="orgffc6b61"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
<div class="outline-text-2" id="text-5">
-<div id="org08103c6" class="figure">
+<div id="org6467b0a" class="figure">
<p><img src="spiral, 5.png" alt="spiral, 5.png" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-org6611bd5" class="outline-2">
-<h2 id="org6611bd5"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
+<div id="outline-container-orgb1aa930" class="outline-2">
+<h2 id="orgb1aa930"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
<div class="outline-text-2" id="text-6">
-<div id="org4e4231e" class="figure">
+<div id="org341d209" class="figure">
<p><img src="spiral, 6.png" alt="spiral, 6.png" class="responsive-img" />
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:41</p>
+<p class="date">Created: 2025-07-29 ti 16:04</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:42 -->
+<!-- 2025-07-29 ti 16:04 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Algorithmic textures</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orgdf6232c">1. Circular waves</a></li>
-<li><a href="#orgdef712c">2. Diamond square clouds</a></li>
-<li><a href="#org92cc251">3. Old paper</a></li>
-<li><a href="#org99a4221">4. Wood</a></li>
-<li><a href="#orgf68cc9d">5. Yellow flame</a></li>
+<li><a href="#org7a60866">1. Circular waves</a></li>
+<li><a href="#org33c2078">2. Diamond square clouds</a></li>
+<li><a href="#orga8bafca">3. Old paper</a></li>
+<li><a href="#org4ac15df">4. Wood</a></li>
+<li><a href="#org7e3a64f">5. Yellow flame</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-orgdf6232c" class="outline-2">
-<h2 id="orgdf6232c"><span class="section-number-2">1.</span> Circular waves</h2>
+<div id="outline-container-org7a60866" class="outline-2">
+<h2 id="org7a60866"><span class="section-number-2">1.</span> Circular waves</h2>
<div class="outline-text-2" id="text-1">
<p>
This QBasic program creates visually captivating circular wave
</div>
</div>
-<div id="outline-container-orgdef712c" class="outline-2">
-<h2 id="orgdef712c"><span class="section-number-2">2.</span> Diamond square clouds</h2>
+<div id="outline-container-org33c2078" class="outline-2">
+<h2 id="org33c2078"><span class="section-number-2">2.</span> Diamond square clouds</h2>
<div class="outline-text-2" id="text-2">
<p>
This QBasic program demonstrates the Diamond-Square algorithm, a
</div>
</div>
-<div id="outline-container-org92cc251" class="outline-2">
-<h2 id="org92cc251"><span class="section-number-2">3.</span> Old paper</h2>
+<div id="outline-container-orga8bafca" class="outline-2">
+<h2 id="orga8bafca"><span class="section-number-2">3.</span> Old paper</h2>
<div class="outline-text-2" id="text-3">
<p>
This QBasic program generates a procedural texture that simulates the
</div>
</div>
-<div id="outline-container-org99a4221" class="outline-2">
-<h2 id="org99a4221"><span class="section-number-2">4.</span> Wood</h2>
+<div id="outline-container-org4ac15df" class="outline-2">
+<h2 id="org4ac15df"><span class="section-number-2">4.</span> Wood</h2>
<div class="outline-text-2" id="text-4">
<p>
This QBasic program creates a visually appealing simulation of a wood
</div>
</div>
-<div id="outline-container-orgf68cc9d" class="outline-2">
-<h2 id="orgf68cc9d"><span class="section-number-2">5.</span> Yellow flame</h2>
+<div id="outline-container-org7e3a64f" class="outline-2">
+<h2 id="org7e3a64f"><span class="section-number-2">5.</span> Yellow flame</h2>
<div class="outline-text-2" id="text-5">
<p>
"Yellow Flame" is a visually captivating program written in QBasic
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:42</p>
+<p class="date">Created: 2025-07-29 ti 16:04</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:42 -->
+<!-- 2025-07-29 ti 16:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>3D Synthezier</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orgc26a1fd">1. Operating principle</a>
+<li><a href="#org00c21c4">1. Operating principle</a>
<ul>
-<li><a href="#org31c5b69">1.1. Rectangular city</a></li>
-<li><a href="#orga8661f4">1.2. Hexagonal city</a></li>
+<li><a href="#org15ec995">1.1. Rectangular city</a></li>
+<li><a href="#org566efa4">1.2. Hexagonal city</a></li>
</ul>
</li>
-<li><a href="#orgb79799c">2. Scene description language</a>
+<li><a href="#orgaca8d69">2. Scene description language</a>
<ul>
-<li><a href="#org7173fc6">2.1. here</a></li>
-<li><a href="#org3e7173a">2.2. p</a></li>
-<li><a href="#org7dac96c">2.3. f</a></li>
-<li><a href="#org2793f8d">2.4. warn</a></li>
-<li><a href="#org17b4720">2.5. end</a></li>
-<li><a href="#orge048b17">2.6. mtl</a></li>
-<li><a href="#orgb5bdd20">2.7. mtlrnd</a></li>
-<li><a href="#org93b7719">2.8. obj</a></li>
-<li><a href="#orgcba6920">2.9. rnd</a></li>
-<li><a href="#org9220bb9">2.10. #</a></li>
-<li><a href="#org59f3555">2.11. out</a></li>
-<li><a href="#orga51e314">2.12. set</a></li>
-<li><a href="#org4e1ea52">2.13. variables usage</a></li>
-<li><a href="#org86ce053">2.14. cmp</a></li>
-<li><a href="#orgddc82bb">2.15. ?</a></li>
-<li><a href="#org6188d94">2.16. dum</a></li>
+<li><a href="#orga7672bb">2.1. here</a></li>
+<li><a href="#org75c4d85">2.2. p</a></li>
+<li><a href="#orgd312cd6">2.3. f</a></li>
+<li><a href="#org2bcb25f">2.4. warn</a></li>
+<li><a href="#org3b35c8f">2.5. end</a></li>
+<li><a href="#orgad8644e">2.6. mtl</a></li>
+<li><a href="#org43244cd">2.7. mtlrnd</a></li>
+<li><a href="#org110ad5d">2.8. obj</a></li>
+<li><a href="#org70c0be0">2.9. rnd</a></li>
+<li><a href="#org0d1dc55">2.10. #</a></li>
+<li><a href="#org83b8466">2.11. out</a></li>
+<li><a href="#org3bfdb4c">2.12. set</a></li>
+<li><a href="#orgfc040ed">2.13. variables usage</a></li>
+<li><a href="#org2bb2004">2.14. cmp</a></li>
+<li><a href="#orge11ca35">2.15. ?</a></li>
+<li><a href="#org6e2e93c">2.16. dum</a></li>
</ul>
</li>
-<li><a href="#orgbf7aeba">3. Installation</a>
+<li><a href="#org1fdc27a">3. Installation</a>
<ul>
-<li><a href="#org2bd0251">3.1. System requirements</a></li>
-<li><a href="#org22e403e">3.2. Directory layout</a></li>
+<li><a href="#orgbf08478">3.1. System requirements</a></li>
+<li><a href="#org3dc8f23">3.2. Directory layout</a></li>
</ul>
</li>
-<li><a href="#orgd314fba">4. Usage</a></li>
+<li><a href="#org2417251">4. Usage</a></li>
</ul>
</div>
</div>
</style>
-<div id="outline-container-orgc26a1fd" class="outline-2">
-<h2 id="orgc26a1fd"><span class="section-number-2">1.</span> Operating principle</h2>
+<div id="outline-container-org00c21c4" class="outline-2">
+<h2 id="org00c21c4"><span class="section-number-2">1.</span> Operating principle</h2>
<div class="outline-text-2" id="text-1">
<p>
Parses scene definition language and creates 3D world based on
</p>
</div>
-<div id="outline-container-org31c5b69" class="outline-3">
-<h3 id="org31c5b69"><span class="section-number-3">1.1.</span> Rectangular city</h3>
+<div id="outline-container-org15ec995" class="outline-3">
+<h3 id="org15ec995"><span class="section-number-3">1.1.</span> Rectangular city</h3>
<div class="outline-text-3" id="text-1-1">
-<div id="org418c227" class="figure">
+<div id="org0e5ea21" class="figure">
<p><img src="rectangular city, 1.jpeg" alt="rectangular city, 1.jpeg" class="responsive-img" />
</p>
</div>
-<div id="orgeb81080" class="figure">
+<div id="orga4f3392" class="figure">
<p><img src="rectangular city, 2.jpeg" alt="rectangular city, 2.jpeg" class="responsive-img" />
</p>
</div>
-<div id="org07af2c6" class="figure">
+<div id="org63a213f" class="figure">
<p><img src="rectangular city, 3.jpeg" alt="rectangular city, 3.jpeg" class="responsive-img" />
</p>
</div>
</div>
</div>
-<div id="outline-container-orga8661f4" class="outline-3">
-<h3 id="orga8661f4"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
+<div id="outline-container-org566efa4" class="outline-3">
+<h3 id="org566efa4"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
<div class="outline-text-3" id="text-1-2">
-<div id="org0434c28" class="figure">
+<div id="org54048ec" class="figure">
<p><img src="hexagonal city, 1.jpeg" alt="hexagonal city, 1.jpeg" class="responsive-img" />
</p>
</div>
-<div id="orgc534ca4" class="figure">
+<div id="org0ec8298" class="figure">
<p><img src="hexagonal city, 2.jpeg" alt="hexagonal city, 2.jpeg" class="responsive-img" />
</p>
</div>
-<div id="org0d7ce19" class="figure">
+<div id="org2b59f15" class="figure">
<p><img src="hexagonal city, 3.jpeg" alt="hexagonal city, 3.jpeg" class="responsive-img" />
</p>
</div>
</div>
</div>
</div>
-<div id="outline-container-orgb79799c" class="outline-2">
-<h2 id="orgb79799c"><span class="section-number-2">2.</span> Scene description language</h2>
+<div id="outline-container-orgaca8d69" class="outline-2">
+<h2 id="orgaca8d69"><span class="section-number-2">2.</span> Scene description language</h2>
<div class="outline-text-2" id="text-2">
<p>
See also examples.
</p>
</div>
-<div id="outline-container-org7173fc6" class="outline-3">
-<h3 id="org7173fc6"><span class="section-number-3">2.1.</span> here</h3>
+<div id="outline-container-orga7672bb" class="outline-3">
+<h3 id="orga7672bb"><span class="section-number-3">2.1.</span> here</h3>
<div class="outline-text-3" id="text-2-1">
<pre class="example">
here
</p>
</div>
</div>
-<div id="outline-container-org3e7173a" class="outline-3">
-<h3 id="org3e7173a"><span class="section-number-3">2.2.</span> p</h3>
+<div id="outline-container-org75c4d85" class="outline-3">
+<h3 id="org75c4d85"><span class="section-number-3">2.2.</span> p</h3>
<div class="outline-text-3" id="text-2-2">
<pre class="example">
p x y z
</p>
</div>
</div>
-<div id="outline-container-org7dac96c" class="outline-3">
-<h3 id="org7dac96c"><span class="section-number-3">2.3.</span> f</h3>
+<div id="outline-container-orgd312cd6" class="outline-3">
+<h3 id="orgd312cd6"><span class="section-number-3">2.3.</span> f</h3>
<div class="outline-text-3" id="text-2-3">
<pre class="example">
f p1 p2 p3 p4
</p>
</div>
</div>
-<div id="outline-container-org2793f8d" class="outline-3">
-<h3 id="org2793f8d"><span class="section-number-3">2.4.</span> warn</h3>
+<div id="outline-container-org2bcb25f" class="outline-3">
+<h3 id="org2bcb25f"><span class="section-number-3">2.4.</span> warn</h3>
<div class="outline-text-3" id="text-2-4">
<pre class="example">
warn <message>
</p>
</div>
</div>
-<div id="outline-container-org17b4720" class="outline-3">
-<h3 id="org17b4720"><span class="section-number-3">2.5.</span> end</h3>
+<div id="outline-container-org3b35c8f" class="outline-3">
+<h3 id="org3b35c8f"><span class="section-number-3">2.5.</span> end</h3>
<div class="outline-text-3" id="text-2-5">
<pre class="example">
end
</p>
</div>
</div>
-<div id="outline-container-orge048b17" class="outline-3">
-<h3 id="orge048b17"><span class="section-number-3">2.6.</span> mtl</h3>
+<div id="outline-container-orgad8644e" class="outline-3">
+<h3 id="orgad8644e"><span class="section-number-3">2.6.</span> mtl</h3>
<div class="outline-text-3" id="text-2-6">
<pre class="example">
mtl material
</p>
</div>
</div>
-<div id="outline-container-orgb5bdd20" class="outline-3">
-<h3 id="orgb5bdd20"><span class="section-number-3">2.7.</span> mtlrnd</h3>
+<div id="outline-container-org43244cd" class="outline-3">
+<h3 id="org43244cd"><span class="section-number-3">2.7.</span> mtlrnd</h3>
<div class="outline-text-3" id="text-2-7">
<pre class="example">
mtlrnd material ...
</p>
</div>
</div>
-<div id="outline-container-org93b7719" class="outline-3">
-<h3 id="org93b7719"><span class="section-number-3">2.8.</span> obj</h3>
+<div id="outline-container-org110ad5d" class="outline-3">
+<h3 id="org110ad5d"><span class="section-number-3">2.8.</span> obj</h3>
<div class="outline-text-3" id="text-2-8">
<pre class="example">
obj object xz45 xy20 x+3 y*2
</p>
-<div id="org1ecdca9" class="figure">
+<div id="org8581f80" class="figure">
<p><img src="rotation.png" alt="rotation.png" />
</p>
</div>
</div>
</div>
-<div id="outline-container-orgcba6920" class="outline-3">
-<h3 id="orgcba6920"><span class="section-number-3">2.9.</span> rnd</h3>
+<div id="outline-container-org70c0be0" class="outline-3">
+<h3 id="org70c0be0"><span class="section-number-3">2.9.</span> rnd</h3>
<div class="outline-text-3" id="text-2-9">
<pre class="example">
rnd p^1^2^3 p^7^2^1
</p>
</div>
</div>
-<div id="outline-container-org9220bb9" class="outline-3">
-<h3 id="org9220bb9"><span class="section-number-3">2.10.</span> #</h3>
+<div id="outline-container-org0d1dc55" class="outline-3">
+<h3 id="org0d1dc55"><span class="section-number-3">2.10.</span> #</h3>
<div class="outline-text-3" id="text-2-10">
<pre class="example">
# whatever text
</p>
</div>
</div>
-<div id="outline-container-org59f3555" class="outline-3">
-<h3 id="org59f3555"><span class="section-number-3">2.11.</span> out</h3>
+<div id="outline-container-org83b8466" class="outline-3">
+<h3 id="org83b8466"><span class="section-number-3">2.11.</span> out</h3>
<div class="outline-text-3" id="text-2-11">
<pre class="example">
out file
</p>
</div>
</div>
-<div id="outline-container-orga51e314" class="outline-3">
-<h3 id="orga51e314"><span class="section-number-3">2.12.</span> set</h3>
+<div id="outline-container-org3bfdb4c" class="outline-3">
+<h3 id="org3bfdb4c"><span class="section-number-3">2.12.</span> set</h3>
<div class="outline-text-3" id="text-2-12">
<pre class="example">
set variable contents
</p>
</div>
</div>
-<div id="outline-container-org4e1ea52" class="outline-3">
-<h3 id="org4e1ea52"><span class="section-number-3">2.13.</span> variables usage</h3>
+<div id="outline-container-orgfc040ed" class="outline-3">
+<h3 id="orgfc040ed"><span class="section-number-3">2.13.</span> variables usage</h3>
<div class="outline-text-3" id="text-2-13">
<pre class="example">
anycommand %1 anything
</p>
</div>
</div>
-<div id="outline-container-org86ce053" class="outline-3">
-<h3 id="org86ce053"><span class="section-number-3">2.14.</span> cmp</h3>
+<div id="outline-container-org2bb2004" class="outline-3">
+<h3 id="org2bb2004"><span class="section-number-3">2.14.</span> cmp</h3>
<div class="outline-text-3" id="text-2-14">
<pre class="example">
cmp flag string1 string2
</p>
</div>
</div>
-<div id="outline-container-orgddc82bb" class="outline-3">
-<h3 id="orgddc82bb"><span class="section-number-3">2.15.</span> ?</h3>
+<div id="outline-container-orge11ca35" class="outline-3">
+<h3 id="orge11ca35"><span class="section-number-3">2.15.</span> ?</h3>
<div class="outline-text-3" id="text-2-15">
<pre class="example">
?flag anycommand
</p>
</div>
</div>
-<div id="outline-container-org6188d94" class="outline-3">
-<h3 id="org6188d94"><span class="section-number-3">2.16.</span> dum</h3>
+<div id="outline-container-org6e2e93c" class="outline-3">
+<h3 id="org6e2e93c"><span class="section-number-3">2.16.</span> dum</h3>
<div class="outline-text-3" id="text-2-16">
<pre class="example">
dum
</div>
</div>
-<div id="outline-container-orgbf7aeba" class="outline-2">
-<h2 id="orgbf7aeba"><span class="section-number-2">3.</span> Installation</h2>
+<div id="outline-container-org1fdc27a" class="outline-2">
+<h2 id="org1fdc27a"><span class="section-number-2">3.</span> Installation</h2>
<div class="outline-text-2" id="text-3">
<p>
Edit <b>bin/3dparse.bas</b> file and update include path in there.
</p>
</div>
-<div id="outline-container-org2bd0251" class="outline-3">
-<h3 id="org2bd0251"><span class="section-number-3">3.1.</span> System requirements</h3>
+<div id="outline-container-orgbf08478" class="outline-3">
+<h3 id="orgbf08478"><span class="section-number-3">3.1.</span> System requirements</h3>
<div class="outline-text-3" id="text-3-1">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</div>
</div>
-<div id="outline-container-org22e403e" class="outline-3">
-<h3 id="org22e403e"><span class="section-number-3">3.2.</span> Directory layout</h3>
+<div id="outline-container-org3dc8f23" class="outline-3">
+<h3 id="org3dc8f23"><span class="section-number-3">3.2.</span> Directory layout</h3>
<div class="outline-text-3" id="text-3-2">
<dl class="org-dl">
<dt>bin</dt><dd><dl class="org-dl">
</div>
</div>
-<div id="outline-container-orgd314fba" class="outline-2">
-<h2 id="orgd314fba"><span class="section-number-2">4.</span> Usage</h2>
+<div id="outline-container-org2417251" class="outline-2">
+<h2 id="org2417251"><span class="section-number-2">4.</span> Usage</h2>
<div class="outline-text-2" id="text-4">
<p>
Make sure you have QB binaries in your PATH. Execute
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:42</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Miscellaneous 3D graphics demos</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#orgb93cd08">1. Rotating exclamation mark</a></li>
-<li><a href="#org0559a58">2. 3D bouncing ball</a></li>
-<li><a href="#orgd0abed8">3. 3D text in a room</a></li>
-<li><a href="#orge24ac53">4. 3D bouncing cubes on grid floor</a></li>
-<li><a href="#org351cde8">5. Matrix math for rotation in 3D space</a></li>
-<li><a href="#orga499e0b">6. Maze explorer</a></li>
-<li><a href="#org88987d3">7. Tank animation</a></li>
-<li><a href="#org12c45e5">8. Tiled room</a></li>
+<li><a href="#orgdd8cb02">1. Rotating exclamation mark</a></li>
+<li><a href="#org4d0cd09">2. 3D bouncing ball</a></li>
+<li><a href="#orga69214a">3. 3D text in a room</a></li>
+<li><a href="#orga2dee81">4. 3D bouncing cubes on grid floor</a></li>
+<li><a href="#org0f8c735">5. Matrix math for rotation in 3D space</a></li>
+<li><a href="#org710611f">6. Maze explorer</a></li>
+<li><a href="#org5223306">7. Tank animation</a></li>
+<li><a href="#org17a1c70">8. Tiled room</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-orgb93cd08" class="outline-2">
-<h2 id="orgb93cd08"><span class="section-number-2">1.</span> Rotating exclamation mark</h2>
+<div id="outline-container-orgdd8cb02" class="outline-2">
+<h2 id="orgdd8cb02"><span class="section-number-2">1.</span> Rotating exclamation mark</h2>
<div class="outline-text-2" id="text-1">
<p>
Wireframe 3D model of a rotating exclamation mark.
</div>
</div>
-<div id="outline-container-org0559a58" class="outline-2">
-<h2 id="org0559a58"><span class="section-number-2">2.</span> 3D bouncing ball</h2>
+<div id="outline-container-org4d0cd09" class="outline-2">
+<h2 id="org4d0cd09"><span class="section-number-2">2.</span> 3D bouncing ball</h2>
<div class="outline-text-2" id="text-2">
<p>
This QBasic program creates a visually engaging 3D animation of a
</div>
</div>
-<div id="outline-container-orgd0abed8" class="outline-2">
-<h2 id="orgd0abed8"><span class="section-number-2">3.</span> 3D text in a room</h2>
+<div id="outline-container-orga69214a" class="outline-2">
+<h2 id="orga69214a"><span class="section-number-2">3.</span> 3D text in a room</h2>
<div class="outline-text-2" id="text-3">
<p>
Wireframe 3D text hanging in a wireframe 3D room. User can look and
</div>
</div>
-<div id="outline-container-orge24ac53" class="outline-2">
-<h2 id="orge24ac53"><span class="section-number-2">4.</span> 3D bouncing cubes on grid floor</h2>
+<div id="outline-container-orga2dee81" class="outline-2">
+<h2 id="orga2dee81"><span class="section-number-2">4.</span> 3D bouncing cubes on grid floor</h2>
<div class="outline-text-2" id="text-4">
<p>
3D wireframe cubes bouncing on a grid floor, creating an immersive and
</div>
</div>
-<div id="outline-container-org351cde8" class="outline-2">
-<h2 id="org351cde8"><span class="section-number-2">5.</span> Matrix math for rotation in 3D space</h2>
+<div id="outline-container-org0f8c735" class="outline-2">
+<h2 id="org0f8c735"><span class="section-number-2">5.</span> Matrix math for rotation in 3D space</h2>
<div class="outline-text-2" id="text-5">
<p>
Instead of combining simple 2D rotors, pixels in this 3D space are
</div>
</div>
-<div id="outline-container-orga499e0b" class="outline-2">
-<h2 id="orga499e0b"><span class="section-number-2">6.</span> Maze explorer</h2>
+<div id="outline-container-org710611f" class="outline-2">
+<h2 id="org710611f"><span class="section-number-2">6.</span> Maze explorer</h2>
<div class="outline-text-2" id="text-6">
<p>
The Evolving 3D Maze Explorer is a QBasic program that generates and
</p>
-<div id="org722cab7" class="figure">
+<div id="orgad4d17f" class="figure">
<p><a href="Maze%20explorer.bas" class="responsive-img"><img src="Maze%20explorer.png" alt="Maze%20explorer.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org88987d3" class="outline-2">
-<h2 id="org88987d3"><span class="section-number-2">7.</span> Tank animation</h2>
+<div id="outline-container-org5223306" class="outline-2">
+<h2 id="org5223306"><span class="section-number-2">7.</span> Tank animation</h2>
<div class="outline-text-2" id="text-7">
<p>
Animated tank driving through the bridge back and forward. User can
</div>
</div>
-<div id="outline-container-org12c45e5" class="outline-2">
-<h2 id="org12c45e5"><span class="section-number-2">8.</span> Tiled room</h2>
+<div id="outline-container-org17a1c70" class="outline-2">
+<h2 id="org17a1c70"><span class="section-number-2">8.</span> Tiled room</h2>
<div class="outline-text-2" id="text-8">
<p>
Room with some tiles on the wall and on the floor. User can freely fly
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:05 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Space themed 3D graphics</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#org6e74448">1. Galaxy explorer</a></li>
-<li><a href="#org326a757">2. Rocket simulator</a></li>
-<li><a href="#orgd248793">3. Stars</a></li>
-<li><a href="#org7441c56">4. Universe explorer</a></li>
+<li><a href="#orgc556a1b">1. Galaxy explorer</a></li>
+<li><a href="#orgb69772c">2. Rocket simulator</a></li>
+<li><a href="#orgefe80cb">3. Stars</a></li>
+<li><a href="#org4d721c2">4. Universe explorer</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-org6e74448" class="outline-2">
-<h2 id="org6e74448"><span class="section-number-2">1.</span> Galaxy explorer</h2>
+<div id="outline-container-orgc556a1b" class="outline-2">
+<h2 id="orgc556a1b"><span class="section-number-2">1.</span> Galaxy explorer</h2>
<div class="outline-text-2" id="text-1">
<p>
This QBasic program renders a navigable 3D point cloud galaxy,
</p>
-<div id="orgaf1e200" class="figure">
+<div id="org3b42f4d" class="figure">
<p><a href="Galaxy%20explorer.bas" class="responsive-img"><img src="Galaxy%20explorer.png" alt="Galaxy%20explorer.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org326a757" class="outline-2">
-<h2 id="org326a757"><span class="section-number-2">2.</span> Rocket simulator</h2>
+<div id="outline-container-orgb69772c" class="outline-2">
+<h2 id="orgb69772c"><span class="section-number-2">2.</span> Rocket simulator</h2>
<div class="outline-text-2" id="text-2">
<p>
QBasic program that simulates the takeoff and flight of a rocket from
</div>
</div>
-<div id="outline-container-orgd248793" class="outline-2">
-<h2 id="orgd248793"><span class="section-number-2">3.</span> Stars</h2>
+<div id="outline-container-orgefe80cb" class="outline-2">
+<h2 id="orgefe80cb"><span class="section-number-2">3.</span> Stars</h2>
<div class="outline-text-2" id="text-3">
<p>
The 3D Starfield Simulation is a QBasic program that creates a
</div>
</div>
-<div id="outline-container-org7441c56" class="outline-2">
-<h2 id="org7441c56"><span class="section-number-2">4.</span> Universe explorer</h2>
+<div id="outline-container-org4d721c2" class="outline-2">
+<h2 id="org4d721c2"><span class="section-number-2">4.</span> Universe explorer</h2>
<div class="outline-text-2" id="text-4">
<p>
This QBasic program that simulates a navigable 3D universe. Users can
</dl>
-<div id="orgf7531c9" class="figure">
+<div id="org57b2194" class="figure">
<p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/1.png" alt="1.png" class="responsive-img" /></a>
</p>
</div>
-<div id="org6e10fc6" class="figure">
+<div id="orgb0be70b" class="figure">
<p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/2.png" alt="2.png" class="responsive-img" /></a>
</p>
</div>
-<div id="orge207011" class="figure">
+<div id="org0c3a3b8" class="figure">
<p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/3.png" alt="3.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:06 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Plotting</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#org69dfe12">1. 2D graph</a></li>
-<li><a href="#orgb8c9d7f">2. 3D graph</a></li>
-<li><a href="#org64fee3d">3. Deriviative calculator</a></li>
-<li><a href="#org99e1486">4. Sine and cosine table</a></li>
+<li><a href="#org897d1b0">1. 2D graph</a></li>
+<li><a href="#orgefadea3">2. 3D graph</a></li>
+<li><a href="#orgc65037c">3. Deriviative calculator</a></li>
+<li><a href="#org0fb749d">4. Sine and cosine table</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-org69dfe12" class="outline-2">
-<h2 id="org69dfe12"><span class="section-number-2">1.</span> 2D graph</h2>
+<div id="outline-container-org897d1b0" class="outline-2">
+<h2 id="org897d1b0"><span class="section-number-2">1.</span> 2D graph</h2>
<div class="outline-text-2" id="text-1">
<p>
The 2D Graph Plotter is a simple yet effective program written in
</p>
-<div id="orgff40591" class="figure">
+<div id="orga16bf9b" class="figure">
<p><a href="2D%20graph%20plot.bas" class="responsive-img"><img src="2D%20graph%20plot.png" alt="2D%20graph%20plot.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-orgb8c9d7f" class="outline-2">
-<h2 id="orgb8c9d7f"><span class="section-number-2">2.</span> 3D graph</h2>
+<div id="outline-container-orgefadea3" class="outline-2">
+<h2 id="orgefadea3"><span class="section-number-2">2.</span> 3D graph</h2>
<div class="outline-text-2" id="text-2">
<p>
The 3D Heightmap Explorer is a QBasic program designed to visualize
</p>
-<div id="org6ac00d6" class="figure">
+<div id="orgf0d1ada" class="figure">
<p><a href="3D%20graph.bas" class="responsive-img"><img src="3D%20graph.png" alt="3D%20graph.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org64fee3d" class="outline-2">
-<h2 id="org64fee3d"><span class="section-number-2">3.</span> Deriviative calculator</h2>
+<div id="outline-container-orgc65037c" class="outline-2">
+<h2 id="orgc65037c"><span class="section-number-2">3.</span> Deriviative calculator</h2>
<div class="outline-text-2" id="text-3">
<p>
This QBasic program is designed to compute and plot an arbitrary
</p>
-<div id="org8417cc1" class="figure">
+<div id="orgc7ba304" class="figure">
<p><a href="Deriviative%20calculator.bas" class="responsive-img"><img src="Deriviative%20calculator.png" alt="Deriviative%20calculator.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org99e1486" class="outline-2">
-<h2 id="org99e1486"><span class="section-number-2">4.</span> Sine and cosine table</h2>
+<div id="outline-container-org0fb749d" class="outline-2">
+<h2 id="org0fb749d"><span class="section-number-2">4.</span> Sine and cosine table</h2>
<div class="outline-text-2" id="text-4">
<p>
The SIN & COS Table Generator is a QBasic program designed to visually
</p>
-<div id="org844353d" class="figure">
+<div id="org4273963" class="figure">
<p><a href="Sine%20and%20cosine%20table.bas" class="responsive-img"><img src="Sine%20and%20cosine%20table.png" alt="Sine%20and%20cosine%20table.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:06</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:06 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Simulation</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#org7d871ab">1. Explosion simulator</a></li>
-<li><a href="#org30edadb">2. Gravity in 2D</a></li>
-<li><a href="#orgae9b19c">3. Gravity in 3D</a></li>
-<li><a href="#orgaa05529">4. Interference</a></li>
-<li><a href="#org4100662">5. Interferogram</a></li>
-<li><a href="#orgc8f7a90">6. Surface tension</a></li>
-<li><a href="#org629d730">7. Wave 1</a></li>
-<li><a href="#orga165433">8. Wave 2</a></li>
+<li><a href="#org8ca8926">1. Explosion simulator</a></li>
+<li><a href="#org4f9f0fc">2. Gravity in 2D</a></li>
+<li><a href="#orgfef3869">3. Gravity in 3D</a></li>
+<li><a href="#org542ea2e">4. Interference</a></li>
+<li><a href="#orgbd90d7c">5. Interferogram</a></li>
+<li><a href="#orge493555">6. Surface tension</a></li>
+<li><a href="#org71a85af">7. Wave 1</a></li>
+<li><a href="#orge75165a">8. Wave 2</a></li>
</ul>
</div>
</div>
}
</style>
-<div id="outline-container-org7d871ab" class="outline-2">
-<h2 id="org7d871ab"><span class="section-number-2">1.</span> Explosion simulator</h2>
+<div id="outline-container-org8ca8926" class="outline-2">
+<h2 id="org8ca8926"><span class="section-number-2">1.</span> Explosion simulator</h2>
<div class="outline-text-2" id="text-1">
<p>
This QBasic program simulates the propagation of shock waves in a gas
</p>
-<div id="org3f7a424" class="figure">
+<div id="org9089fc2" class="figure">
<p><a href="Explosion%20simulator.bas" class="responsive-img"><img src="Explosion%20simulator.png" alt="Explosion%20simulator.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org30edadb" class="outline-2">
-<h2 id="org30edadb"><span class="section-number-2">2.</span> Gravity in 2D</h2>
+<div id="outline-container-org4f9f0fc" class="outline-2">
+<h2 id="org4f9f0fc"><span class="section-number-2">2.</span> Gravity in 2D</h2>
<div class="outline-text-2" id="text-2">
<p>
The Gravitation Simulation program is a simple yet insightful QBasic
</p>
-<div id="org8b7ec82" class="figure">
+<div id="org69e9140" class="figure">
<p><a href="Gravity%20in%202D.bas" class="responsive-img"><img src="Gravity%20in%202D.png" alt="Gravity%20in%202D.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-orgae9b19c" class="outline-2">
-<h2 id="orgae9b19c"><span class="section-number-2">3.</span> Gravity in 3D</h2>
+<div id="outline-container-orgfef3869" class="outline-2">
+<h2 id="orgfef3869"><span class="section-number-2">3.</span> Gravity in 3D</h2>
<div class="outline-text-2" id="text-3">
<p>
This QBasic program simulates the gravitational interactions between
</div>
</div>
-<div id="outline-container-orgaa05529" class="outline-2">
-<h2 id="orgaa05529"><span class="section-number-2">4.</span> Interference</h2>
+<div id="outline-container-org542ea2e" class="outline-2">
+<h2 id="org542ea2e"><span class="section-number-2">4.</span> Interference</h2>
<div class="outline-text-2" id="text-4">
<p>
This QBasic program simulates the interference pattern created by two
</div>
</div>
-<div id="outline-container-org4100662" class="outline-2">
-<h2 id="org4100662"><span class="section-number-2">5.</span> Interferogram</h2>
+<div id="outline-container-orgbd90d7c" class="outline-2">
+<h2 id="orgbd90d7c"><span class="section-number-2">5.</span> Interferogram</h2>
<div class="outline-text-2" id="text-5">
<p>
This QBasic program simulates the interference pattern created by
</p>
-<div id="orge499999" class="figure">
+<div id="orgaa739a1" class="figure">
<p><a href="Interferogram.bas" class="responsive-img"><img src="Interferogram.png" alt="Interferogram.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-orgc8f7a90" class="outline-2">
-<h2 id="orgc8f7a90"><span class="section-number-2">6.</span> Surface tension</h2>
+<div id="outline-container-orge493555" class="outline-2">
+<h2 id="orge493555"><span class="section-number-2">6.</span> Surface tension</h2>
<div class="outline-text-2" id="text-6">
<p>
This QBasic program simulates the behavior of water spills and the
</p>
-<div id="orga9b29a2" class="figure">
+<div id="org68aff70" class="figure">
<p><a href="Surface%20tension.bas" class="responsive-img"><img src="Surface%20tension.png" alt="Surface%20tension.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-org629d730" class="outline-2">
-<h2 id="org629d730"><span class="section-number-2">7.</span> Wave 1</h2>
+<div id="outline-container-org71a85af" class="outline-2">
+<h2 id="org71a85af"><span class="section-number-2">7.</span> Wave 1</h2>
<div class="outline-text-2" id="text-7">
<p>
This QBasic program simulates the propagation of waves across a
</p>
-<div id="org19c785a" class="figure">
+<div id="org5e50025" class="figure">
<p><a href="Wave%201.bas" class="responsive-img"><img src="Wave%201.png" alt="Wave%201.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
-<div id="outline-container-orga165433" class="outline-2">
-<h2 id="orga165433"><span class="section-number-2">8.</span> Wave 2</h2>
+<div id="outline-container-orge75165a" class="outline-2">
+<h2 id="orge75165a"><span class="section-number-2">8.</span> Wave 2</h2>
<div class="outline-text-2" id="text-8">
<p>
This QBasic program simulates and visualizes the behavior of water
</p>
-<div id="org927ae1b" class="figure">
+<div id="org32a98d3" class="figure">
<p><a href="Wave%202.bas" class="responsive-img"><img src="Wave%202.png" alt="Wave%202.png" class="responsive-img" /></a>
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:06</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<!-- 2025-07-29 ti 06:44 -->
+<!-- 2025-07-29 ti 16:07 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Truth table calculator</title>
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
-<li><a href="#org73b00ab">1. Implemented logical operations</a>
+<li><a href="#org2e92d8c">1. Implemented logical operations</a>
<ul>
-<li><a href="#org63ae8a0">1.1. Equivalent ( ⇔ , 1 )</a></li>
-<li><a href="#org866a499">1.2. Implies ( ⇒ , 2 )</a></li>
-<li><a href="#orge1b5035">1.3. OR ( ∨ , 3 )</a></li>
-<li><a href="#org07266ef">1.4. AND ( ∧ , 4 )</a></li>
-<li><a href="#orgb540306">1.5. NOT ( ¬ , 5 )</a></li>
+<li><a href="#org9d90ffe">1.1. Equivalent ( ⇔ , 1 )</a></li>
+<li><a href="#org625661c">1.2. Implies ( ⇒ , 2 )</a></li>
+<li><a href="#org4071cf1">1.3. OR ( ∨ , 3 )</a></li>
+<li><a href="#org58ba04e">1.4. AND ( ∧ , 4 )</a></li>
+<li><a href="#orge0d9af8">1.5. NOT ( ¬ , 5 )</a></li>
</ul>
</li>
-<li><a href="#orge23d70e">2. Examples</a>
+<li><a href="#org6b596bf">2. Examples</a>
<ul>
-<li><a href="#org71a5e0c">2.1. Example: (A ∧ B) ∨ ¬C</a></li>
-<li><a href="#orgce0ea0b">2.2. Example: A ⇒ (B ∨ ¬C)</a></li>
-<li><a href="#orgad68cd0">2.3. Example: (A ⇔ B) ∧ C</a></li>
+<li><a href="#org9e8d621">2.1. Example: (A ∧ B) ∨ ¬C</a></li>
+<li><a href="#org6919a8d">2.2. Example: A ⇒ (B ∨ ¬C)</a></li>
+<li><a href="#org7c7701b">2.3. Example: (A ⇔ B) ∧ C</a></li>
</ul>
</li>
</ul>
designing and understanding digital circuits, Boolean algebra, and logical expressions.
</p>
-<div id="outline-container-org73b00ab" class="outline-2">
-<h2 id="org73b00ab"><span class="section-number-2">1.</span> Implemented logical operations</h2>
+<div id="outline-container-org2e92d8c" class="outline-2">
+<h2 id="org2e92d8c"><span class="section-number-2">1.</span> Implemented logical operations</h2>
<div class="outline-text-2" id="text-1">
</div>
-<div id="outline-container-org63ae8a0" class="outline-3">
-<h3 id="org63ae8a0"><span class="section-number-3">1.1.</span> Equivalent ( ⇔ , 1 )</h3>
+<div id="outline-container-org9d90ffe" class="outline-3">
+<h3 id="org9d90ffe"><span class="section-number-3">1.1.</span> Equivalent ( ⇔ , 1 )</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The equivalent operation, also known as logical biconditional, is true if and only if
</div>
</div>
-<div id="outline-container-org866a499" class="outline-3">
-<h3 id="org866a499"><span class="section-number-3">1.2.</span> Implies ( ⇒ , 2 )</h3>
+<div id="outline-container-org625661c" class="outline-3">
+<h3 id="org625661c"><span class="section-number-3">1.2.</span> Implies ( ⇒ , 2 )</h3>
<div class="outline-text-3" id="text-1-2">
<p>
An implication asserts that if the first proposition is true, the
</div>
</div>
-<div id="outline-container-orge1b5035" class="outline-3">
-<h3 id="orge1b5035"><span class="section-number-3">1.3.</span> OR ( ∨ , 3 )</h3>
+<div id="outline-container-org4071cf1" class="outline-3">
+<h3 id="org4071cf1"><span class="section-number-3">1.3.</span> OR ( ∨ , 3 )</h3>
<div class="outline-text-3" id="text-1-3">
<p>
The OR operation, also known as logical disjunction, is true if at
</div>
</div>
-<div id="outline-container-org07266ef" class="outline-3">
-<h3 id="org07266ef"><span class="section-number-3">1.4.</span> AND ( ∧ , 4 )</h3>
+<div id="outline-container-org58ba04e" class="outline-3">
+<h3 id="org58ba04e"><span class="section-number-3">1.4.</span> AND ( ∧ , 4 )</h3>
<div class="outline-text-3" id="text-1-4">
<p>
The AND operation, also known as logical conjunction, is true if and
</div>
</div>
-<div id="outline-container-orgb540306" class="outline-3">
-<h3 id="orgb540306"><span class="section-number-3">1.5.</span> NOT ( ¬ , 5 )</h3>
+<div id="outline-container-orge0d9af8" class="outline-3">
+<h3 id="orge0d9af8"><span class="section-number-3">1.5.</span> NOT ( ¬ , 5 )</h3>
<div class="outline-text-3" id="text-1-5">
<p>
The NOT operation, also known as logical negation, inverts the value
</div>
</div>
</div>
-<div id="outline-container-orge23d70e" class="outline-2">
-<h2 id="orge23d70e"><span class="section-number-2">2.</span> Examples</h2>
+<div id="outline-container-org6b596bf" class="outline-2">
+<h2 id="org6b596bf"><span class="section-number-2">2.</span> Examples</h2>
<div class="outline-text-2" id="text-2">
</div>
-<div id="outline-container-org71a5e0c" class="outline-3">
-<h3 id="org71a5e0c"><span class="section-number-3">2.1.</span> Example: (A ∧ B) ∨ ¬C</h3>
+<div id="outline-container-org9e8d621" class="outline-3">
+<h3 id="org9e8d621"><span class="section-number-3">2.1.</span> Example: (A ∧ B) ∨ ¬C</h3>
<div class="outline-text-3" id="text-2-1">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</div>
</div>
-<div id="outline-container-orgce0ea0b" class="outline-3">
-<h3 id="orgce0ea0b"><span class="section-number-3">2.2.</span> Example: A ⇒ (B ∨ ¬C)</h3>
+<div id="outline-container-org6919a8d" class="outline-3">
+<h3 id="org6919a8d"><span class="section-number-3">2.2.</span> Example: A ⇒ (B ∨ ¬C)</h3>
<div class="outline-text-3" id="text-2-2">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
</div>
</div>
-<div id="outline-container-orgad68cd0" class="outline-3">
-<h3 id="orgad68cd0"><span class="section-number-3">2.3.</span> Example: (A ⇔ B) ∧ C</h3>
+<div id="outline-container-org7c7701b" class="outline-3">
+<h3 id="org7c7701b"><span class="section-number-3">2.3.</span> Example: (A ⇔ B) ∧ C</h3>
<div class="outline-text-3" id="text-2-3">
<p>
Truth Table:
</div>
</div>
<div id="postamble" class="status">
-<p class="date">Created: 2025-07-29 ti 06:44</p>
+<p class="date">Created: 2025-07-29 ti 16:07</p>
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<!-- 2025-07-29 ti 16:07 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Mouse driver for QBasic programs</title>
+<meta name="generator" content="Org Mode" />
+<style>
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<style type="text/css">
+ body {
+ max-width: 35cm !important;
+ }
+ #content {
+ max-width: 80em !important;
+ width: 90%;
+ }
+ </style>
+<link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
+</head>
+<body>
+<div id="content" class="content">
+<h1 class="title">Mouse driver for QBasic programs</h1>
+<p>
+This TSR written in x86 assembler, allows QBasic programs to use
+mouse, by writing mouse movement and button press info to memory,
+referenced by INT 79h. Afterwards QBasic programs can read mouse
+cursor position directly from RAM by using PEEK command.
+</p>
+</div>
+<div id="postamble" class="status">
+<p class="date">Created: 2025-07-29 ti 16:07</p>
+<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
+</div>
+</body>
+</html>
'\r
' Changelog:\r
' 2004.01, Initial version\r
+' 2025, Improve program readability\r
\r
DECLARE SUB mousedemo ()\r
DECLARE SUB putword (addr!, dat!)\r
DIM SHARED extSEG, extADDR\r
\r
start\r
-\r
mousedemo\r
\r
FUNCTION getbyte (addr)\r
- ' This function retrieves a byte from the specified address.\r
+ ' This function retrieves a byte from the specified address in RAM.\r
getbyte = PEEK(extADDR + addr)\r
END FUNCTION\r
\r
FUNCTION getword (addr)\r
- ' This function retrieves a word (2 bytes) from the specified address.\r
- a = PEEK(extADDR + addr)\r
- b = PEEK(extADDR + addr + 1)\r
-\r
- c$ = HEX$(a)\r
- IF LEN(c$) = 1 THEN c$ = "0" + c$\r
- IF LEN(c$) = 0 THEN c$ = "00"\r
-\r
+ ' This function retrieves a word (2 bytes) from the specified address in RAM.\r
+ a = PEEK(extADDR + addr) ' Read the first byte\r
+ b = PEEK(extADDR + addr + 1) ' Read the second byte\r
+ c$ = HEX$(a) ' Convert the first byte to hexadecimal\r
+ IF LEN(c$) = 1 THEN c$ = "0" + c$ ' Ensure two digits\r
+ IF LEN(c$) = 0 THEN c$ = "00" ' Ensure two digits if empty\r
' Combine the two bytes into a single word.\r
- c = VAL("&H" + HEX$(b) + c$)\r
-\r
+ c = VAL("&H" + HEX$(b) + c$) ' Combine the two bytes into a word\r
getword = c\r
END FUNCTION\r
\r
SUB mousedemo\r
' This subroutine demonstrates mouse movement and button clicks.\r
-\r
- cx = 150\r
- cy = 100\r
- maxmove = 50\r
-\r
+ cx = 150 ' Initial x-coordinate\r
+ cy = 100 ' Initial y-coordinate\r
+ maxmove = 50 ' Maximum movement in one step\r
+ frm = 0 ' Frame counter\r
1\r
- frm = frm + 1\r
-\r
+ frm = frm + 1 ' Increment frame counter\r
' Check for user input on keyboard and exit if any key is pressed\r
IF INKEY$ <> "" THEN SYSTEM\r
\r
' Print the current coordinates and frame number.\r
LOCATE 1, 1\r
- PRINT cx, cy\r
- PRINT frm\r
+ PRINT cx, cy ' Print current x and y coordinates\r
+ PRINT frm ' Print current frame number\r
\r
- ' Draw a circle at the current mouse position.\r
+ ' Erase circle at the old mouse position by drawing black circle\r
CIRCLE (cx, cy), 10, 0\r
\r
' Retrieve the x and y movement values from the mouse.\r
- xp = getword(2)\r
- putword 2, 0\r
- yp = getword(4)\r
- putword 4, 0\r
+ xp = getword(2) ' Get horizontal movement\r
+ putword 2, 0 ' Reset horizontal movement counter\r
+ yp = getword(4) ' Get vertical movement\r
+ putword 4, 0 ' Reset vertical movement counter\r
\r
' Retrieve the button status from the mouse.\r
- butt = getword(6)\r
- putword 6, 0\r
+ butt = getword(6) ' Get button status\r
+ putword 6, 0 ' Reset button status\r
\r
' Print the button status if a button is pressed.\r
IF butt <> 0 THEN\r
LOCATE 5\r
- PRINT butt\r
+ PRINT butt ' Print button status if pressed\r
END IF\r
\r
' Limit the mouse movement to within maxmove.\r
IF xp < -maxmove THEN xp = -maxmove\r
IF xp > maxmove THEN xp = maxmove\r
- cx = cx + xp\r
+\r
+ cx = cx + xp ' Update x-coordinate\r
\r
IF yp < -maxmove THEN yp = -maxmove\r
IF yp > maxmove THEN yp = maxmove\r
- cy = cy + yp\r
+ cy = cy + yp ' Update y-coordinate\r
\r
' Draw a circle at the new mouse position.\r
- CIRCLE (cx, cy), 10, 10\r
+ CIRCLE (cx, cy), 10, 10 ' Draw a circle with radius 10\r
\r
' Use sound command for adding short delay\r
SOUND 0, .05\r
\r
' Repeat the loop to continuously update the mouse position.\r
GOTO 1\r
-\r
END SUB\r
\r
SUB putword (addr, dat)\r
- ' This subroutine stores a word (2 bytes) at the specified address.\r
-\r
- b$ = HEX$(dat)\r
+ ' This subroutine stores a word (2 bytes) at the specified address in RAM.\r
+ b$ = HEX$(dat) ' Convert data to hexadecimal\r
\r
2\r
- IF LEN(b$) < 4 THEN b$ = "0" + b$: GOTO 2\r
+ IF LEN(b$) < 4 THEN b$ = "0" + b$: GOTO 2 ' Ensure four digits\r
\r
' Split the word into two bytes.\r
- n1 = VAL("&H" + LEFT$(b$, 2))\r
- n2 = VAL("&H" + RIGHT$(b$, 2))\r
+ n1 = VAL("&H" + LEFT$(b$, 2)) ' First byte\r
+ n2 = VAL("&H" + RIGHT$(b$, 2)) ' Second byte\r
\r
' Store the bytes at the specified address.\r
- POKE (extADDR + addr), n2\r
- POKE (extADDR + addr + 1), n1\r
-\r
+ POKE (extADDR + addr), n2 ' Store the first byte\r
+ POKE (extADDR + addr + 1), n1 ' Store the second byte\r
END SUB\r
\r
SUB start\r
' This subroutine initializes the screen and retrieves the segment and address of the mouse driver.\r
+ SCREEN 13 ' Set graphics mode\r
+ DEF SEG = 0 ' Read from interrupt table\r
\r
- SCREEN 13\r
-\r
- DEF SEG = 0 ' read first from interrupt table\r
-\r
+ ' Retrieve mouse data table address within TSR as pointed by interrupt 79h\r
extSEG = PEEK(&H79 * 4 + 3) * 256\r
extSEG = extSEG + PEEK(&H79 * 4 + 2)\r
+ PRINT "Segment is: " + HEX$(extSEG) ' Print segment address\r
\r
- PRINT "Segment is: " + HEX$(extSEG)\r
-\r
+ ' Retrieve the offset address of the mouse driver.\r
extADDR = PEEK(&H79 * 4 + 1) * 256\r
extADDR = extADDR + PEEK(&H79 * 4 + 0)\r
+ PRINT "relative address is:"; extADDR ' Print offset address\r
+ DEF SEG = extSEG ' Set segment for memory access\r
\r
- PRINT "relative address is:"; extADDR\r
-\r
- DEF SEG = extSEG\r
-\r
- ' Check if the mouse driver is loaded.\r
+ ' Check if the mouse driver is loaded by verifying the magic number (1983).\r
IF getword(0) <> 1983 THEN\r
PRINT "FATAL ERROR: you must load"\r
PRINT "QBasic extension TSR first!"\r
- SYSTEM\r
+ SYSTEM ' Exit program if mouse driver is not loaded\r
END IF\r
-\r
-END SUB
\ No newline at end of file
+END SUB\r
-; TSR hack that allows QBasic programs to use mouse.\r
-; Made by Svjatoslav Agejenko\r
-; in 2004.01\r
-; Homepage: http://svjatoslav.eu\r
- \r
-\r
-org 100h\r
-\r
-myint = 79h ; interrupt to hook, becomes pointer to data table\r
-\r
-\r
- mov dx, msg\r
- mov ah, 9\r
- int 21h\r
-\r
- mov ax, 0 ; Saves old interrupt vector\r
- mov es, ax\r
- mov eax, [es:32]\r
- mov [oldVector], eax \r
-\r
- cli\r
- mov ax, cs ; Set new interrupt vector for IRQ 0\r
- shl eax, 16\r
- mov ax, custom\r
- mov [es:32], eax\r
- mov ax, dataTable ; Set interrupt vector for INT 79 (default)\r
- mov [es:4 * myint], eax\r
- sti\r
-\r
- mov ax, endPointer ; Calculate needed memory size, become TSR\r
- add ax, 32\r
- mov dx, 0\r
- mov bx, 16\r
- div bx\r
- mov dx, ax\r
- mov ax, 3100h\r
- int 21h\r
+; DOS Terminate and Stay Resident (TSR) program that allows QBasic to read mouse input.\r
+;\r
+; This program is free software: released under Creative Commons Zero (CC0) license\r
+; by Svjatoslav Agejenko.\r
+; Email: svjatoslav@svjatoslav.eu\r
+; Homepage: http://www.svjatoslav.eu\r
+;\r
+; Changelog:\r
+; 2004.01, Initial version\r
+; 2025, Improved program readability\r
\r
+\r
+\r
+org 100h ; Origin set to 100h for COM files\r
+myint = 79h ; Define interrupt number to hook for data table\r
+\r
+ ; Display startup message\r
+ mov dx, msg ; DX points to the message to display\r
+ mov ah, 9 ; AH = 9 to display string\r
+ int 21h ; Call DOS interrupt to display message\r
+\r
+ ; Save old interrupt vector so that we can call in from new interrupt handler\r
+ mov ax, 0 ; AX = 0 to access interrupt vector table\r
+ mov es, ax ; ES set to interrupt vector segment\r
+ mov eax, [es:32] ; Save old interrupt vector at offset 32h\r
+ mov [oldVector], eax\r
+\r
+ ; Install our TSR as a new timer interrupt handler (IRQ 0)\r
+ cli ; Temporarily disable interrupts to safely update vector\r
+ mov ax, cs ; AX = code segment\r
+ shl eax, 16 ; Shift left by 16 to make room for offset\r
+ mov ax, custom ; AX = offset of custom handler\r
+ mov [es:32], eax ; Set new interrupt vector for IRQ 0\r
+\r
+ ; Here we use interrupt table (Interrupt # 79h) to point to data structure with mouse info within our TSR.\r
+ ; QBasic can then also read interrupt table and locate this important data structure within the RAM to read mouse status.\r
+ ; Here we hope that nobody else is using interrupt 79h, so that we can use it as a pointer to RAM instead.\r
+ mov ax, dataTable ; AX = offset of data table\r
+ mov [es:4 * myint], eax ; Set interrupt vector for INT 79h\r
+ sti ; Re-enable interrupts\r
+\r
+ ; Calculate RAM size that this TSR needs and tell DOS to make this program resident.\r
+ mov ax, endPointer ; Calculate memory size needed by TSR\r
+ add ax, 32 ; Add 32 bytes for safety margin\r
+ mov dx, 0 ; DX = 0 for division\r
+ mov bx, 16 ; BX = 16 for paragraph alignment\r
+ div bx ; Divide AX by BX, result in AX\r
+ mov dx, ax ; DX = memory size in paragraphs\r
+ mov ax, 3100h ; AX = function 31h (Keep Program Resident)\r
+ int 21h ; Call DOS to terminate and stay resident\r
+\r
+\r
+; Following code gets executed by timer interrupt in background multiple times per second\r
custom:\r
- pushf ; Execute default code in old int vector\r
- call dword [cs:oldVector]\r
-\r
- cmp [cs:isRunning], 0 ; Check if custom routine is already active\r
- jne EndOfRoutine\r
-\r
- mov [cs:isRunning], 1 ; Set active flag\r
- pusha\r
- push ds\r
- push es\r
-\r
- cli \r
- mov ax, 0bh ; Read Mouse Motion Counters\r
- int 33h\r
- add [CS:mouseHorisontal], cx\r
- add [CS:mouseVertical], dx\r
- mov ax, 3 ; read mouse buttons\r
- int 33h\r
- or [CS:mouseButtons], bx\r
- inc byte [CS:updated]\r
- sti\r
-\r
- pop es\r
- pop ds\r
- popa\r
- mov [cs:isRunning], 0 ; Terminate active flag\r
- EndOfRoutine:\r
- iret\r
-\r
-oldVector dd 0\r
-isRunning db 0\r
+ pushf ; Save flags\r
+ call dword [cs:oldVector] ; Call original interrupt handler\r
+\r
+ ; Ensure that TSR is not executed multiple times simultaneously\r
+ cmp [cs:isRunning], 0 ; Check if routine is already active\r
+ jne EndOfRoutine ; If active, jump to end\r
+ mov [cs:isRunning], 1 ; Set active flag.\r
+\r
+ ; Ensure that TSR will not affert state of program that it interrupted\r
+ pusha ; Save all general-purpose registers\r
+ push ds ; Save DS segment register\r
+ push es ; Save ES segment register\r
+\r
+ ; Read mouse moevement and button states and store them to dedicated RAM table\r
+ cli ; Disable interrupts for safe memory access\r
+ mov ax, 0bh ; AH = 0Bh, function to read mouse motion counters\r
+ int 33h ; Call mouse interrupt\r
+ add [CS:mouseHorisontal], cx ; Update horizontal movement counter\r
+ add [CS:mouseVertical], dx ; Update vertical movement counter\r
+ mov ax, 3 ; AH = 3, function to read mouse buttons\r
+ int 33h ; Call mouse interrupt\r
+ or [CS:mouseButtons], bx ; Update mouse button states\r
+ inc byte [CS:updated] ; Increment update flag. So that QBasic registers mouse update event.\r
+ sti ; Re-enable interrupts\r
\r
+ ; Restore interrupted program state and return control to it\r
+ pop es ; Restore ES segment register\r
+ pop ds ; Restore DS segment register\r
+ popa ; Restore all general-purpose registers\r
+ mov [cs:isRunning], 0 ; Clear active flag\r
+ EndOfRoutine:\r
+ iret ; Return from interrupt\r
+\r
+oldVector dd 0 ; Storage for old interrupt vector. Our new interrupt handler will also call old handler to not break it.\r
+isRunning db 0 ; Flag to check if routine is running\r
dataTable:\r
- dw 1983 ; check number, indicates that module is loaded\r
- mouseHorisontal dw 0\r
- mouseVertical dw 0\r
- mouseButtons dw 0\r
- updated db 0\r
- \r
-\r
-endPointer:\r
- \r
-msg:\r
-file 'readme.txt'\r
- db '$'\r
+ dw 1983 ; Check number indicating module is loaded\r
+ mouseHorisontal dw 0 ; Horizontal mouse movement counter\r
+ mouseVertical dw 0 ; Vertical mouse movement counter\r
+ mouseButtons dw 0 ; Mouse button states\r
+ updated db 0 ; Flag indicating data was updated\r
+\r
+endPointer: ; End of resident code pointer\r
+\r
+msg: ; Message to display at start\r
+file 'readme.txt' ; Include content of readme.txt\r
+ db '$' ; End of string marker\r