@ -0,0 +1,189 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en" data-bs-theme="auto"> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<link rel="shortcut icon" href="/img/favicon.ico"> |
||||
|
<title>RomWBW Documentation V3.6</title> |
||||
|
<link href="/css/bootstrap.min.css" rel="stylesheet"> |
||||
|
<link href="/css/fontawesome.min.css" rel="stylesheet"> |
||||
|
<link href="/css/brands.min.css" rel="stylesheet"> |
||||
|
<link href="/css/solid.min.css" rel="stylesheet"> |
||||
|
<link href="/css/v4-font-face.min.css" rel="stylesheet"> |
||||
|
<link href="/css/base.css" rel="stylesheet"> |
||||
|
<link id="hljs-light" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" disabled> |
||||
|
<link id="hljs-dark" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" disabled> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script> |
||||
|
<script>hljs.highlightAll();</script> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary"> |
||||
|
<div class="container"> |
||||
|
<a class="navbar-brand" href="/.">RomWBW Documentation V3.6</a> |
||||
|
<!-- Expander button --> |
||||
|
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation"> |
||||
|
<span class="navbar-toggler-icon"></span> |
||||
|
</button> |
||||
|
|
||||
|
<!-- Expanded navigation --> |
||||
|
<div id="navbar-collapse" class="navbar-collapse collapse"> |
||||
|
<!-- Main navigation --> |
||||
|
<ul class="nav navbar-nav"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/Introduction/" class="nav-link">Introduction</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/UserGuide/" class="nav-link">User Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/SystemGuide/" class="nav-link">System Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/Applications/" class="nav-link">Applications</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/Catalog/" class="nav-link">Catalog</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="/Hardware/" class="nav-link">Hardware</a> |
||||
|
</li> |
||||
|
</ul> |
||||
|
|
||||
|
<ul class="nav navbar-nav ms-md-auto"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="#" class="nav-link" data-bs-toggle="modal" data-bs-target="#mkdocs_search_modal"> |
||||
|
<i class="fa fa-search"></i> Search |
||||
|
</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="https://github.com/wwarthen/RomWBW" class="nav-link"><i class="fa-brands fa-github"></i> GitHub</a> |
||||
|
</li> |
||||
|
<li class="nav-item dropdown"> |
||||
|
<button id="theme-menu" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Toggle theme" class="nav-link dropdown-toggle"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="d-lg-none ms-2">Toggle theme</span> |
||||
|
</button> |
||||
|
<ul class="dropdown-menu dropdown-menu-end"> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-sun fa-fw"></i> |
||||
|
<span class="ms-2">Light</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-moon fa-fw"></i> |
||||
|
<span class="ms-2">Dark</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="true"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="ms-2">Auto</span> |
||||
|
<i class="fa-solid fa-check ms-auto"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script src="/js/darkmode.js"></script> |
||||
|
|
||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
|
||||
|
<div class="row-fluid"> |
||||
|
<div id="main-content" class="span12"> |
||||
|
<h1 id="404-page-not-found" style="text-align: center">404</h1> |
||||
|
<p style="text-align: center"><strong>Page not found</strong></p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<footer class="col-md-12"> |
||||
|
<hr> |
||||
|
<p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p> |
||||
|
</footer> |
||||
|
<script src="/js/bootstrap.bundle.min.js"></script> |
||||
|
<script> |
||||
|
var base_url = "/", |
||||
|
shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83}; |
||||
|
</script> |
||||
|
<script src="/js/base.js"></script> |
||||
|
<script src="/search/main.js"></script> |
||||
|
|
||||
|
<div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog modal-lg"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="searchModalLabel">Search</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<p>From here you can search these documents. Enter your search terms below.</p> |
||||
|
<form> |
||||
|
<div class="form-group"> |
||||
|
<input type="search" class="form-control" placeholder="Search..." id="mkdocs-search-query" title="Type search term here"> |
||||
|
</div> |
||||
|
</form> |
||||
|
<div id="mkdocs-search-results" data-no-results-text="No results found"></div> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<table class="table"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th style="width: 20%;">Keys</th> |
||||
|
<th>Action</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr> |
||||
|
<td class="help shortcut"><kbd>?</kbd></td> |
||||
|
<td>Open this help</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="next shortcut"><kbd>n</kbd></td> |
||||
|
<td>Next page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="prev shortcut"><kbd>p</kbd></td> |
||||
|
<td>Previous page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="search shortcut"><kbd>s</kbd></td> |
||||
|
<td>Search</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
@ -0,0 +1,691 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en" data-bs-theme="auto"> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<link rel="shortcut icon" href="../img/favicon.ico"> |
||||
|
<title>Introduction - RomWBW Documentation V3.6</title> |
||||
|
<link href="../css/bootstrap.min.css" rel="stylesheet"> |
||||
|
<link href="../css/fontawesome.min.css" rel="stylesheet"> |
||||
|
<link href="../css/brands.min.css" rel="stylesheet"> |
||||
|
<link href="../css/solid.min.css" rel="stylesheet"> |
||||
|
<link href="../css/v4-font-face.min.css" rel="stylesheet"> |
||||
|
<link href="../css/base.css" rel="stylesheet"> |
||||
|
<link id="hljs-light" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" disabled> |
||||
|
<link id="hljs-dark" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" disabled> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script> |
||||
|
<script>hljs.highlightAll();</script> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary"> |
||||
|
<div class="container"> |
||||
|
<a class="navbar-brand" href="..">RomWBW Documentation V3.6</a> |
||||
|
<!-- Expander button --> |
||||
|
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation"> |
||||
|
<span class="navbar-toggler-icon"></span> |
||||
|
</button> |
||||
|
|
||||
|
<!-- Expanded navigation --> |
||||
|
<div id="navbar-collapse" class="navbar-collapse collapse"> |
||||
|
<!-- Main navigation --> |
||||
|
<ul class="nav navbar-nav"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="./" class="nav-link active" aria-current="page">Introduction</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="../UserGuide/" class="nav-link">User Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="../SystemGuide/" class="nav-link">System Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="../Applications/" class="nav-link">Applications</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="../Catalog/" class="nav-link">Catalog</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="../Hardware/" class="nav-link">Hardware</a> |
||||
|
</li> |
||||
|
</ul> |
||||
|
|
||||
|
<ul class="nav navbar-nav ms-md-auto"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="#" class="nav-link" data-bs-toggle="modal" data-bs-target="#mkdocs_search_modal"> |
||||
|
<i class="fa fa-search"></i> Search |
||||
|
</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a rel="prev" class="nav-link disabled"> |
||||
|
<i class="fa fa-arrow-left"></i> Previous |
||||
|
</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a rel="next" href="../UserGuide/" class="nav-link"> |
||||
|
Next <i class="fa fa-arrow-right"></i> |
||||
|
</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="https://github.com/wwarthen/RomWBW" class="nav-link"><i class="fa-brands fa-github"></i> GitHub</a> |
||||
|
</li> |
||||
|
<li class="nav-item dropdown"> |
||||
|
<button id="theme-menu" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Toggle theme" class="nav-link dropdown-toggle"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="d-lg-none ms-2">Toggle theme</span> |
||||
|
</button> |
||||
|
<ul class="dropdown-menu dropdown-menu-end"> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-sun fa-fw"></i> |
||||
|
<span class="ms-2">Light</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-moon fa-fw"></i> |
||||
|
<span class="ms-2">Dark</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="true"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="ms-2">Auto</span> |
||||
|
<i class="fa-solid fa-check ms-auto"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script src="../js/darkmode.js"></script> |
||||
|
|
||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col-md-3"><div class="navbar-expand-md bs-sidebar hidden-print affix" role="complementary"> |
||||
|
<div class="navbar-header"> |
||||
|
<button type="button" class="navbar-toggler collapsed" data-bs-toggle="collapse" data-bs-target="#toc-collapse" title="Table of Contents"> |
||||
|
<span class="fa fa-angle-down"></span> |
||||
|
</button> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div id="toc-collapse" class="navbar-collapse collapse card bg-body-tertiary"> |
||||
|
<ul class="nav flex-column"> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#overview" class="nav-link">Overview</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#description" class="nav-link">Description</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#primary-features" class="nav-link">Primary Features</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#included-software" class="nav-link">Included Software</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#rom-distribution" class="nav-link">ROM Distribution</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#installation-operation" class="nav-link">Installation & Operation</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#documentation" class="nav-link">Documentation</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#support" class="nav-link">Support</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#getting-assistance" class="nav-link">Getting Assistance</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#contributions" class="nav-link">Contributions</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#acknowledgments" class="nav-link">Acknowledgments</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#related-projects" class="nav-link">Related Projects</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#licensing" class="nav-link">Licensing</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#license-terms" class="nav-link">License Terms</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div></div> |
||||
|
<div class="col-md-9" role="main"> |
||||
|
|
||||
|
<p><strong>RomWBW Introduction</strong> \ |
||||
|
Version 3.6 \ |
||||
|
Wayne Warthen (<a href="mailto:wwarthen@gmail.com">wwarthen@gmail.com</a>) \ |
||||
|
30 May 2025</p> |
||||
|
<h1 id="overview">Overview</h1> |
||||
|
<p>RomWBW software provides a complete, commercial quality implementation |
||||
|
of CP/M (and workalike) operating systems and applications for modern |
||||
|
Z80/180/280 retro-computing hardware systems.</p> |
||||
|
<p>A wide variety of platforms are supported including those produced by |
||||
|
these developer communities:</p> |
||||
|
<ul> |
||||
|
<li><a href="https://www.retrobrewcomputers.org">RetroBrew Computers</a> |
||||
|
(<a href="https://www.retrobrewcomputers.org">https://www.retrobrewcomputers.org</a>)</li> |
||||
|
<li><a href="https://rc2014.co.uk">RC2014</a> (<a href="https://rc2014.co.uk">https://rc2014.co.uk</a>),<br /> |
||||
|
<a href="https://groups.google.com/g/rc2014-z80">RC2014-Z80</a> |
||||
|
(<a href="https://groups.google.com/g/rc2014-z80">https://groups.google.com/g/rc2014-z80</a>)</li> |
||||
|
<li><a href="https://groups.google.com/g/retro-comp">Retro Computing</a> |
||||
|
(<a href="https://groups.google.com/g/retro-comp">https://groups.google.com/g/retro-comp</a>)</li> |
||||
|
<li><a href="https://smallcomputercentral.com/">Small Computer Central</a> |
||||
|
(<a href="https://smallcomputercentral.com/">https://smallcomputercentral.com/</a>)</li> |
||||
|
</ul> |
||||
|
<p>A complete list of the currently supported platforms is found in <a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf">RomWBW |
||||
|
Hardware</a> |
||||
|
.</p> |
||||
|
<h1 id="description">Description</h1> |
||||
|
<h2 id="primary-features">Primary Features</h2> |
||||
|
<p>By design, RomWBW isolates all of the hardware specific functions in the |
||||
|
ROM chip itself. The ROM provides a hardware abstraction layer such that |
||||
|
all of the operating systems and applications on a disk will run on any |
||||
|
RomWBW-based system. To put it simply, you can take a disk (or CF/SD/USB |
||||
|
Card) and move it between systems transparently.</p> |
||||
|
<p>Supported hardware features of RomWBW include:</p> |
||||
|
<ul> |
||||
|
<li>Z80 Family CPUs including Z80, Z180, and Z280</li> |
||||
|
<li>Banked memory services for several banking designs</li> |
||||
|
<li>Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, |
||||
|
Iomega</li> |
||||
|
<li>Serial drivers including UART (16550-like), ASCI, ACIA, SIO</li> |
||||
|
<li>Video drivers including TMS9918, SY6545, MOS8563, HD6445</li> |
||||
|
<li>Keyboard (PS/2) drivers via VT8242 or PPI interfaces</li> |
||||
|
<li>Real time clock drivers including DS1302, BQ4845</li> |
||||
|
<li>Support for CP/NET networking using Wiznet, MT011 or Serial</li> |
||||
|
<li>Built-in VT-100 terminal emulation support</li> |
||||
|
</ul> |
||||
|
<p>A dynamic disk drive letter assignment mechanism allows mapping |
||||
|
operating system drive letters to any available disk media. |
||||
|
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
||||
|
support the use of multiple slices (up to 256 per device). Each slice |
||||
|
contains a complete CP/M filesystem and can be mapped independently to |
||||
|
any drive letter. This overcomes the inherent size limitations in legacy |
||||
|
OSes and allows up to 2GB of addressable storage on a single device, |
||||
|
with up to 128MB accessible at any one time.</p> |
||||
|
<h2 id="included-software">Included Software</h2> |
||||
|
<p>Multiple disk images are provided in the distribution. Most disk images |
||||
|
contain a complete, bootable, ready-to-run implementation of a specific |
||||
|
operating system. A “combo” disk image contains multiple slices, each |
||||
|
with a full operating system implementation. If you use this disk image, |
||||
|
you can easily pick whichever operating system you want to boot without |
||||
|
changing media.</p> |
||||
|
<p>Some of the included software:</p> |
||||
|
<ul> |
||||
|
<li>Operating Systems (CP/M 2.2, ZSDOS, NZ-COM, CP/M 3, ZPM3, Z3PLUS, QPM |
||||
|
)</li> |
||||
|
<li>Support for other operating systems, p-System, FreeRTOS, and FUZIX.</li> |
||||
|
<li>Programming Tools (Z80ASM, Turbo Pascal, Forth, Cowgol)</li> |
||||
|
<li>C Compiler’s including Aztec-C, and HI-TECH C</li> |
||||
|
<li>Microsoft Basic Compiler, and Microsoft Fortran</li> |
||||
|
<li>Some games such as Colossal Cave, Zork, etc</li> |
||||
|
<li>Wordstar Word processing software</li> |
||||
|
</ul> |
||||
|
<p>Some of the provided software can be launched directly from the ROM |
||||
|
firmware itself:</p> |
||||
|
<ul> |
||||
|
<li>System Monitor</li> |
||||
|
<li>Operating Systems (CP/M 2.2, ZSDOS)</li> |
||||
|
<li>ROM BASIC (Nascom BASIC and Tasty BASIC)</li> |
||||
|
<li>ROM Forth</li> |
||||
|
</ul> |
||||
|
<p>A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
||||
|
The FAT filesystem may be coresident on the same disk media as RomWBW |
||||
|
slices or on stand-alone media. This makes exchanging files with modern |
||||
|
OSes such as Windows, MacOS, and Linux very easy.</p> |
||||
|
<h2 id="rom-distribution">ROM Distribution</h2> |
||||
|
<p>The <a href="https://github.com/wwarthen/RomWBW">RomWBW Repository</a> |
||||
|
(<a href="https://github.com/wwarthen/RomWBW">https://github.com/wwarthen/RomWBW</a>) on GitHub is the official |
||||
|
distribution location for all project source and documentation.</p> |
||||
|
<p>RomWBW is distributed as both source code and pre-built ROM and disk |
||||
|
images.</p> |
||||
|
<p>The pre-built ROM images distributed with RomWBW are based on the |
||||
|
default system configurations as determined by the hardware |
||||
|
provider/designer. The pre-built ROM firmware images are generally |
||||
|
suitable for most users.</p> |
||||
|
<p>The fully-built distribution releases are available on the <a href="https://github.com/wwarthen/RomWBW/releases">RomWBW |
||||
|
Releases Page</a> |
||||
|
(<a href="https://github.com/wwarthen/RomWBW/releases">https://github.com/wwarthen/RomWBW/releases</a>) of the repository.</p> |
||||
|
<p>On this page, you will normally see a Development Snapshot as well as |
||||
|
recent stable releases. Unless you have a specific reason, I suggest you |
||||
|
stick to the most recent stable release.</p> |
||||
|
<p>The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM and |
||||
|
Disk images as well as full source code. The other assets contain only |
||||
|
source code and do not have the pre-built ROM or disk images.</p> |
||||
|
<h4 id="distribution-directory-layout">Distribution Directory Layout</h4> |
||||
|
<p>The RomWBW distribution is a compressed zip archive file organized in a |
||||
|
set of directories. Each of these directories has its own ReadMe.txt |
||||
|
file describing the contents in detail. In summary, these directories |
||||
|
are:</p> |
||||
|
<table> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th><strong>Directory</strong></th> |
||||
|
<th><strong>Description</strong></th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr> |
||||
|
<td><strong>Binary</strong></td> |
||||
|
<td>The final output files of the build process are placed here. Most importantly, the ROM images with the file names ending in “.rom” and disk images ending in .img.</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><strong>Doc</strong></td> |
||||
|
<td>Contains various detailed documentation, both RomWBW specifically as well as the operating systems and applications.</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><strong>Source</strong></td> |
||||
|
<td>Contains the source code files used to build the software and ROM images.</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><strong>Tools</strong></td> |
||||
|
<td>Contains the programs that are used by the build process or that may be useful in setting up your system.</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
<h4 id="building-from-source">Building from Source</h4> |
||||
|
<p>It is also very easy to modify and build custom ROM images that fully |
||||
|
tailor the firmware to your specific preferences. All tools required to |
||||
|
build custom ROM firmware under Windows are included – no need to |
||||
|
install assemblers, etc. The firmware can also be built using Linux or |
||||
|
MacOS after confirming a few standard tools have been installed.</p> |
||||
|
<h2 id="installation-operation">Installation & Operation</h2> |
||||
|
<p>In general, installation of RomWBW on your platform is very simple. You |
||||
|
just need to program your ROM with the correct ROM image from the RomWBW |
||||
|
distribution. Subsequently, you can write disk images on your disk |
||||
|
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
||||
|
functionality.</p> |
||||
|
<p>Complete instructions for installation and operation of RomWBW are found |
||||
|
in the <a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf">RomWBW User |
||||
|
Guide</a>. |
||||
|
It is also a good idea to review the <a href="https://github.com/wwarthen/RomWBW/blob/master/RELEASE_NOTES.md">Release |
||||
|
Notes</a> |
||||
|
for helpful release-specific information.</p> |
||||
|
<h2 id="documentation">Documentation</h2> |
||||
|
<p>There are several documents that form the core of the RomWBW |
||||
|
documentation:</p> |
||||
|
<ul> |
||||
|
<li> |
||||
|
<p><a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf">RomWBW User |
||||
|
Guide</a> |
||||
|
is the main user guide for RomWBW, it covers the major topics of how |
||||
|
to install, manage and use RomWBW, and includes additional guidance to |
||||
|
the use of some of the operating systems supported by RomWBW</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Hardware.pdf">RomWBW |
||||
|
Hardware</a> |
||||
|
contains a description of all the hardware platforms, and devices |
||||
|
supported by RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Applications.pdf">RomWBW |
||||
|
Applications</a> |
||||
|
is a reference for the ROM-hosted and OS-hosted applications created |
||||
|
or customized to enhance the operation of RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Disk%20Catalog.pdf">RomWBW Disk |
||||
|
Catalog</a> |
||||
|
is a reference for the contents of the disk images provided with |
||||
|
RomWBW, with a description of many of the files on each image</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><a href="https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%20Guide.pdf">RomWBW System |
||||
|
Guide</a> |
||||
|
discusses much of the internal design and construction of RomWBW. It |
||||
|
includes a reference for the RomWBW HBIOS API functions.</p> |
||||
|
</li> |
||||
|
</ul> |
||||
|
<p>Each of the operating systems and ROM applications included with RomWBW |
||||
|
are sophisticated tools in their own right. It is not reasonable to |
||||
|
fully document their usage. However, you will find complete manuals in |
||||
|
PDF format in the Doc directory of the distribution. The intention of |
||||
|
this documentation is to describe the operation of RomWBW and the ways |
||||
|
in which it enhances the operation of the included applications and |
||||
|
operating systems.</p> |
||||
|
<p>Since RomWBW is purely a software product for many different platforms, |
||||
|
the documentation does <strong>not</strong> cover hardware construction, |
||||
|
configuration, or troubleshooting – please see your hardware provider |
||||
|
for this information.</p> |
||||
|
<h1 id="support">Support</h1> |
||||
|
<h2 id="getting-assistance">Getting Assistance</h2> |
||||
|
<p>The best way to get assistance with RomWBW or any aspect of the |
||||
|
RetroBrew Computers projects is via one of the community forums:</p> |
||||
|
<ul> |
||||
|
<li><a href="https://www.retrobrewcomputers.org/forum/">RetroBrew Computers Forum</a></li> |
||||
|
<li><a href="https://groups.google.com/forum/#!forum/rc2014-z80">RC2014 Google |
||||
|
Group</a></li> |
||||
|
<li><a href="https://groups.google.com/forum/#!forum/retro-comp">retro-comp Google |
||||
|
Group</a></li> |
||||
|
</ul> |
||||
|
<p>Submission of issues and bugs are welcome at the <a href="https://github.com/wwarthen/RomWBW">RomWBW GitHub |
||||
|
Repository</a>.</p> |
||||
|
<p>Also feel free to email Wayne Warthen at <a href="mailto:wwarthen@gmail.com">wwarthen@gmail.com</a>. I am |
||||
|
happy to provide support adapting RomWBW to new or modified systems</p> |
||||
|
<h1 id="contributions">Contributions</h1> |
||||
|
<p>All source code and distributions are maintained on GitHub. |
||||
|
Contributions of all kinds to RomWBW are very welcome.</p> |
||||
|
<h2 id="acknowledgments">Acknowledgments</h2> |
||||
|
<p>I want to acknowledge that a great deal of the code and inspiration for |
||||
|
RomWBW has been provided by or derived from the work of others in the |
||||
|
RetroBrew Computers Community. I sincerely appreciate all of their |
||||
|
contributions. The list below is probably missing many names – please |
||||
|
let me know if I missed you!</p> |
||||
|
<ul> |
||||
|
<li> |
||||
|
<p>Andrew Lynch started it all when he created the N8VEM Z80 SBC which |
||||
|
became the first platform RomWBW supported. Some of his original code |
||||
|
can still be found in RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dan Werner wrote much of the code from which RomWBW was originally |
||||
|
derived and he has always been a great source of knowledge and advice.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Douglas Goodall contributed code, time, testing, and advice in “the |
||||
|
early days”. He created an entire suite of application programs to |
||||
|
enhance the use of RomWBW. Unfortunately, they have become unusable |
||||
|
due to internal changes within RomWBW. As of RomWBW 2.6, these |
||||
|
applications are no longer provided.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Sergey Kiselev created several hardware platforms for RomWBW including |
||||
|
the very popular Zeta.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>David Giles created support for the Z180 CSIO which is now included SD |
||||
|
Card driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
||||
|
AY-3-8910 sound driver, DMA support, and a long list of general code |
||||
|
and documentation enhancements.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Ed Brindley contributed some of the code that supports the RCBus |
||||
|
platform.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Spencer Owen created the RC2014 series of hobbyist kit computers which |
||||
|
has exponentially increased RomWBW usage. Some of his kits include |
||||
|
RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Stephen Cousins has likewise created a series of hobbyist kit |
||||
|
computers at Small Computer Central and is distributing RomWBW with |
||||
|
many of them.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Alan Cox has contributed some driver code and has provided a great |
||||
|
deal of advice.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>The CP/NET client files were developed by Douglas Miller.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Phillip Stevens contributed support for FreeRTOS.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Curt Mayer contributed the original Linux / MacOS build process.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>UNA BIOS and FDISK80 are the products of John Coffman.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>FLASH4 is a product of Will Sowerbutts.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>CLRDIR is a product of Max Scane.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Tasty Basic is a product of Dimitri Theulings.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dean Netherton contributed eZ80 CPU support, the sound driver |
||||
|
interface, and the SN76489 sound driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>The RomWBW Disk Catalog document was produced by Mykl Orders.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Rob Prouse has created many of the supplemental disk images including |
||||
|
Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft BASIC Compiler, |
||||
|
Microsoft Fortran Compiler, and a Games compendium.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Martin R has provided substantial help reviewing and improving the |
||||
|
User Guide and Applications documents.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Mark Pruden has made a wide variety of contributions including:</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>significant content in the Disk Catalog and User Guide</p> |
||||
|
</li> |
||||
|
<li>creation of the Introduction and Hardware documents</li> |
||||
|
<li>Z3PLUS operating system disk image</li> |
||||
|
<li>COPYSL utility</li> |
||||
|
<li>SLABEL utility</li> |
||||
|
<li>a feature for RomWBW configuration by NVRAM</li> |
||||
|
<li> |
||||
|
<p>the /B bulk mode of disk assignment to the ASSIGN utility</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Jacques Pelletier has contributed the DS1501 RTC driver code.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Jose Collado has contributed enhancements to the TMS driver including |
||||
|
compatibility with standard TMS register configuration.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Kevin Boone has contributed a generic HBIOS date/time utility (WDATE).</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Matt Carroll has contributed a fix to XM.COM that corrects the port |
||||
|
specification when doing a send.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dean Jenkins enhanced the build process to accommodate the Raspberry |
||||
|
Pi 4.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Tom Plano has contributed a new utility (HTALK) to allow talking |
||||
|
directly to HBIOS COM ports.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Lars Nelson has contributed several generic utilities such as a |
||||
|
universal (OS agnostic) UNARC application.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dylan Hall added support for specifying a secondary console.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Bill Shen has contributed boot loaders for several of his systems.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Laszlo Szolnoki has contributed an EF9345 video display controller |
||||
|
driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol |
||||
|
that leverages RomWBW memory banking.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Les Bird has contributed support for the NABU w/ Option Board</p> |
||||
|
</li> |
||||
|
</ul> |
||||
|
<h2 id="related-projects">Related Projects</h2> |
||||
|
<p>Outside of the hardware platforms adapted to RomWBW, there are a variety |
||||
|
of projects that either target RomWBW specifically or provide a |
||||
|
RomWBW-specific variation. These efforts are greatly appreciated and are |
||||
|
listed below. Please contact the author if there are any other such |
||||
|
projects that are not listed.</p> |
||||
|
<h4 id="z88dk">Z88DK</h4> |
||||
|
<p>Z88DK is a software powerful development kit for Z80 computers |
||||
|
supporting both C and assembly language. This kit now provides specific |
||||
|
library support for RomWBW HBIOS. The Z88DK project is hosted at |
||||
|
<a href="https://github.com/z88dk/z88dk">https://github.com/z88dk/z88dk</a>.</p> |
||||
|
<h4 id="paleo-editor">Paleo Editor</h4> |
||||
|
<p>Steve Garcia has created a Windows-hosted IDE that is tailored to |
||||
|
development of RomWBW. The project can be found at |
||||
|
<a href="https://github.com/alloidian/PaleoEditor">https://github.com/alloidian/PaleoEditor</a>.</p> |
||||
|
<h4 id="z80-fig-forth">Z80 fig-FORTH</h4> |
||||
|
<p>Dimitri Theulings’ implementation of fig-FORTH for the Z80 has a |
||||
|
RomWBW-specific variant. The project is hosted at |
||||
|
<a href="https://github.com/dimitrit/figforth">https://github.com/dimitrit/figforth</a>.</p> |
||||
|
<h4 id="assembly-language-programming-for-the-rc2014-zed">Assembly Language Programming for the RC2014 Zed</h4> |
||||
|
<p>Bruce Hall has written a very nice document that describes how to |
||||
|
develop assembly language applications on RomWBW. It begins with the |
||||
|
setup and configuration of a new RC2014 Zed system running RomWBW. It |
||||
|
describes not only generic CP/M application development, but also RomWBW |
||||
|
HBIOS programming and bare metal programming. The latest copy of this |
||||
|
document is hosted at <a href="http://w8bh.net/Assembly%20for%20RC2014Z.pdf">http://w8bh.net/Assembly for |
||||
|
RC2014Z.pdf</a>.</p> |
||||
|
<h1 id="licensing">Licensing</h1> |
||||
|
<h2 id="license-terms">License Terms</h2> |
||||
|
<p>RomWBW is free software: you can redistribute it and/or modify it under |
||||
|
the terms of the GNU General Public License as published by the Free |
||||
|
Software Foundation, either version 3 of the License, or (at your |
||||
|
option) any later version.</p> |
||||
|
<p>RomWBW is distributed in the hope that it will be useful, but WITHOUT |
||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
|
more details.</p> |
||||
|
<p>You should have received a copy of the GNU General Public License along |
||||
|
with RomWBW. If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p> |
||||
|
<p>Portions of RomWBW were created by, contributed by, or derived from the |
||||
|
work of others. It is believed that these works are being used in |
||||
|
accordance with the intentions and/or licensing of their creators.</p> |
||||
|
<p>If anyone feels their work is being used outside of its intended |
||||
|
licensing, please notify:</p> |
||||
|
<blockquote> |
||||
|
<p>Wayne Warthen<br /> |
||||
|
<a href="mailto:wwarthen@gmail.com">wwarthen@gmail.com</a></p> |
||||
|
</blockquote> |
||||
|
<p>RomWBW is an aggregate work. It is composed of many individual, |
||||
|
standalone programs that are distributed as a whole to function as a |
||||
|
cohesive system. Each program may have its own licensing which may be |
||||
|
different from other programs within the aggregate.</p> |
||||
|
<p>In some cases, a single program (e.g., CP/M Operating System) is |
||||
|
composed of multiple components with different licenses. It is believed |
||||
|
that in all such cases the licenses are compatible with GPL version 3.</p> |
||||
|
<p>RomWBW encourages code contributions from others. Contributors may |
||||
|
assert their own copyright in their contributions by annotating the |
||||
|
contributed source code appropriately. Contributors are further |
||||
|
encouraged to submit their contributions via the RomWBW source code |
||||
|
control system to ensure their contributions are clearly documented.</p> |
||||
|
<p>All contributions to RomWBW are subject to this license.</p></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<footer class="col-md-12"> |
||||
|
<hr> |
||||
|
<p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p> |
||||
|
</footer> |
||||
|
<script src="../js/bootstrap.bundle.min.js"></script> |
||||
|
<script> |
||||
|
var base_url = "..", |
||||
|
shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83}; |
||||
|
</script> |
||||
|
<script src="../js/base.js"></script> |
||||
|
<script src="../search/main.js"></script> |
||||
|
|
||||
|
<div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog modal-lg"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="searchModalLabel">Search</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<p>From here you can search these documents. Enter your search terms below.</p> |
||||
|
<form> |
||||
|
<div class="form-group"> |
||||
|
<input type="search" class="form-control" placeholder="Search..." id="mkdocs-search-query" title="Type search term here"> |
||||
|
</div> |
||||
|
</form> |
||||
|
<div id="mkdocs-search-results" data-no-results-text="No results found"></div> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<table class="table"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th style="width: 20%;">Keys</th> |
||||
|
<th>Action</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr> |
||||
|
<td class="help shortcut"><kbd>?</kbd></td> |
||||
|
<td>Open this help</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="next shortcut"><kbd>n</kbd></td> |
||||
|
<td>Next page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="prev shortcut"><kbd>p</kbd></td> |
||||
|
<td>Previous page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="search shortcut"><kbd>s</kbd></td> |
||||
|
<td>Search</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,366 @@ |
|||||
|
html { |
||||
|
/* The nav header is 3.5rem high, plus 20px for the margin-top of the |
||||
|
main container. */ |
||||
|
scroll-padding-top: calc(3.5rem + 20px); |
||||
|
} |
||||
|
|
||||
|
/* Replacement for `body { background-attachment: fixed; }`, which has |
||||
|
performance issues when scrolling on large displays. See #1394. */ |
||||
|
body::before { |
||||
|
content: ' '; |
||||
|
position: fixed; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
background-color: var(--bs-body-bg); |
||||
|
background: url(../img/grid.png) repeat-x; |
||||
|
will-change: transform; |
||||
|
z-index: -1; |
||||
|
} |
||||
|
|
||||
|
body > .container { |
||||
|
margin-top: 20px; |
||||
|
min-height: 400px; |
||||
|
} |
||||
|
|
||||
|
.navbar.fixed-top { |
||||
|
position: -webkit-sticky; |
||||
|
position: sticky; |
||||
|
} |
||||
|
|
||||
|
.source-links { |
||||
|
float: right; |
||||
|
} |
||||
|
|
||||
|
.col-md-9 img { |
||||
|
max-width: 100%; |
||||
|
display: inline-block; |
||||
|
padding: 4px; |
||||
|
line-height: 1.428571429; |
||||
|
background-color: var(--bs-secondary-bg-subtle); |
||||
|
border: 1px solid var(--bs-secondary-border-subtle); |
||||
|
border-radius: 4px; |
||||
|
margin: 20px auto 30px auto; |
||||
|
} |
||||
|
|
||||
|
h1 { |
||||
|
color: inherit; |
||||
|
font-weight: 400; |
||||
|
font-size: 42px; |
||||
|
} |
||||
|
|
||||
|
h2, h3, h4, h5, h6 { |
||||
|
color: inherit; |
||||
|
font-weight: 300; |
||||
|
} |
||||
|
|
||||
|
hr { |
||||
|
border-top: 1px solid #aaa; |
||||
|
opacity: 1; |
||||
|
} |
||||
|
|
||||
|
pre, .rst-content tt { |
||||
|
max-width: 100%; |
||||
|
background-color: var(--bs-body-bg); |
||||
|
border: solid 1px var(--bs-border-color); |
||||
|
color: var(--bs-body-color); |
||||
|
overflow-x: auto; |
||||
|
} |
||||
|
|
||||
|
code.code-large, .rst-content tt.code-large { |
||||
|
font-size: 90%; |
||||
|
} |
||||
|
|
||||
|
code { |
||||
|
padding: 2px 5px; |
||||
|
background-color: rgba(var(--bs-body-bg-rgb), 0.75); |
||||
|
border: solid 1px var(--bs-border-color); |
||||
|
color: var(--bs-body-color); |
||||
|
white-space: pre-wrap; |
||||
|
word-wrap: break-word; |
||||
|
} |
||||
|
|
||||
|
pre code { |
||||
|
display: block; |
||||
|
border: none; |
||||
|
white-space: pre; |
||||
|
word-wrap: normal; |
||||
|
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
|
||||
|
kbd { |
||||
|
padding: 2px 4px; |
||||
|
font-size: 90%; |
||||
|
color: var(--bs-secondary-text-emphasis); |
||||
|
background-color: var(--bs-secondary-bg-subtle); |
||||
|
border-radius: 3px; |
||||
|
-webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); |
||||
|
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); |
||||
|
} |
||||
|
|
||||
|
a code { |
||||
|
color: inherit; |
||||
|
} |
||||
|
|
||||
|
a:hover code, a:focus code { |
||||
|
color: inherit; |
||||
|
} |
||||
|
|
||||
|
footer { |
||||
|
margin-top: 30px; |
||||
|
margin-bottom: 10px; |
||||
|
text-align: center; |
||||
|
font-weight: 200; |
||||
|
} |
||||
|
|
||||
|
.modal-dialog { |
||||
|
margin-top: 60px; |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* Side navigation |
||||
|
* |
||||
|
* Scrollspy and affixed enhanced navigation to highlight sections and secondary |
||||
|
* sections of docs content. |
||||
|
*/ |
||||
|
|
||||
|
.bs-sidebar.affix { |
||||
|
position: -webkit-sticky; |
||||
|
position: sticky; |
||||
|
/* The nav header is 3.5rem high, plus 20px for the margin-top of the |
||||
|
main container. */ |
||||
|
top: calc(3.5rem + 20px); |
||||
|
} |
||||
|
|
||||
|
.bs-sidebar.card { |
||||
|
padding: 0; |
||||
|
max-height: 90%; |
||||
|
overflow-y: auto; |
||||
|
} |
||||
|
|
||||
|
/* Toggle (vertically flip) sidebar collapse icon */ |
||||
|
.bs-sidebar .navbar-toggler span { |
||||
|
-moz-transform: scale(1, -1); |
||||
|
-webkit-transform: scale(1, -1); |
||||
|
-o-transform: scale(1, -1); |
||||
|
-ms-transform: scale(1, -1); |
||||
|
transform: scale(1, -1); |
||||
|
} |
||||
|
|
||||
|
.bs-sidebar .navbar-toggler.collapsed span { |
||||
|
-moz-transform: scale(1, 1); |
||||
|
-webkit-transform: scale(1, 1); |
||||
|
-o-transform: scale(1, 1); |
||||
|
-ms-transform: scale(1, 1); |
||||
|
transform: scale(1, 1); |
||||
|
} |
||||
|
|
||||
|
/* First level of nav */ |
||||
|
.bs-sidebar > .navbar-collapse > .nav { |
||||
|
padding-top: 10px; |
||||
|
padding-bottom: 10px; |
||||
|
border-radius: 5px; |
||||
|
width: 100%; |
||||
|
} |
||||
|
|
||||
|
/* All levels of nav */ |
||||
|
.bs-sidebar .nav > li > a { |
||||
|
display: block; |
||||
|
padding: 5px 20px; |
||||
|
z-index: 1; |
||||
|
} |
||||
|
.bs-sidebar .nav > li > a:hover, |
||||
|
.bs-sidebar .nav > li > a:focus { |
||||
|
text-decoration: none; |
||||
|
border-right: 1px solid; |
||||
|
} |
||||
|
.bs-sidebar .nav > li > a.active, |
||||
|
.bs-sidebar .nav > li > a.active:hover, |
||||
|
.bs-sidebar .nav > li > a.active:focus { |
||||
|
font-weight: bold; |
||||
|
background-color: transparent; |
||||
|
border-right: 1px solid; |
||||
|
} |
||||
|
|
||||
|
.bs-sidebar .nav .nav .nav { |
||||
|
margin-left: 1em; |
||||
|
} |
||||
|
|
||||
|
.bs-sidebar .nav > li > a { |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.bs-sidebar .nav .nav > li > a { |
||||
|
font-weight: normal; |
||||
|
} |
||||
|
|
||||
|
.headerlink { |
||||
|
font-family: FontAwesome; |
||||
|
font-size: 14px; |
||||
|
display: none; |
||||
|
padding-left: .5em; |
||||
|
text-decoration: none; |
||||
|
vertical-align: middle; |
||||
|
} |
||||
|
|
||||
|
h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink, h4:hover .headerlink, h5:hover .headerlink, h6:hover .headerlink { |
||||
|
display:inline-block; |
||||
|
} |
||||
|
|
||||
|
blockquote { |
||||
|
padding-left: 10px; |
||||
|
border-left: 4px solid #e6e6e6; |
||||
|
} |
||||
|
|
||||
|
.admonition, details { |
||||
|
padding: 15px; |
||||
|
margin-bottom: 20px; |
||||
|
border: 1px solid transparent; |
||||
|
border-radius: 4px; |
||||
|
text-align: left; |
||||
|
} |
||||
|
|
||||
|
.admonition.note, details.note { |
||||
|
color: var(--bs-primary-text-emphasis); |
||||
|
background-color: var(--bs-primary-bg-subtle); |
||||
|
border-color: var(--bs-primary-border-subtle); |
||||
|
} |
||||
|
|
||||
|
.admonition.note h1, .admonition.note h2, .admonition.note h3, |
||||
|
.admonition.note h4, .admonition.note h5, .admonition.note h6, |
||||
|
details.note h1, details.note h2, details.note h3, |
||||
|
details.note h4, details.note h5, details.note h6 { |
||||
|
color: var(--bs-primary-text-emphasis); |
||||
|
} |
||||
|
|
||||
|
.admonition.info, details.info { |
||||
|
color: var(--bs-info-text-emphasis); |
||||
|
background-color: var(--bs-info-bg-subtle); |
||||
|
border-color: var(--bs-info-border-subtle); |
||||
|
} |
||||
|
|
||||
|
.admonition.info h1, .admonition.info h2, .admonition.info h3, |
||||
|
.admonition.info h4, .admonition.info h5, .admonition.info h6, |
||||
|
details.info h1, details.info h2, details.info h3, |
||||
|
details.info h4, details.info h5, details.info h6 { |
||||
|
color: var(--bs-info-text-emphasis); |
||||
|
} |
||||
|
|
||||
|
.admonition.warning, details.warning { |
||||
|
color: var(--bs-warning-text-emphasis); |
||||
|
background-color: var(--bs-warning-bg-subtle); |
||||
|
border-color: var(--bs-warning-border-subtle); |
||||
|
} |
||||
|
|
||||
|
.admonition.warning h1, .admonition.warning h2, .admonition.warning h3, |
||||
|
.admonition.warning h4, .admonition.warning h5, .admonition.warning h6, |
||||
|
details.warning h1, details.warning h2, details.warning h3, |
||||
|
details.warning h4, details.warning h5, details.warning h6 { |
||||
|
color: var(--bs-warning-text-emphasis); |
||||
|
} |
||||
|
|
||||
|
.admonition.danger, details.danger { |
||||
|
color: var(--bs-danger-text-emphasis); |
||||
|
background-color: var(--bs-danger-bg-subtle); |
||||
|
border-color: var(--bs-danger-border-subtle); |
||||
|
} |
||||
|
|
||||
|
.admonition.danger h1, .admonition.danger h2, .admonition.danger h3, |
||||
|
.admonition.danger h4, .admonition.danger h5, .admonition.danger h6, |
||||
|
details.danger h1, details.danger h2, details.danger h3, |
||||
|
details.danger h4, details.danger h5, details.danger h6 { |
||||
|
color: var(--bs-danger-text-emphasis); |
||||
|
} |
||||
|
|
||||
|
.admonition, details { |
||||
|
color: var(--bs-light-text-emphasis); |
||||
|
background-color: var(--bs-light-bg-subtle); |
||||
|
border-color: var(--bs-light-border-subtle); |
||||
|
} |
||||
|
|
||||
|
.admonition h1, .admonition h2, .admonition h3, |
||||
|
.admonition h4, .admonition h5, .admonition h6, |
||||
|
details h1, details h2, details h3, |
||||
|
details h4, details h5, details h6 { |
||||
|
color: var(--bs-light-text-emphasis); |
||||
|
} |
||||
|
|
||||
|
.admonition-title, summary { |
||||
|
font-weight: bold; |
||||
|
text-align: left; |
||||
|
} |
||||
|
|
||||
|
.admonition>p:last-child, details>p:last-child { |
||||
|
margin-bottom: 0; |
||||
|
} |
||||
|
|
||||
|
@media (max-width: 991.98px) { |
||||
|
.navbar-collapse.show { |
||||
|
overflow-y: auto; |
||||
|
max-height: calc(100vh - 3.5rem); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.dropdown-item.open { |
||||
|
color: var(--bs-dropdown-link-active-color); |
||||
|
background-color: var(--bs-dropdown-link-active-bg); |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu > .dropdown-menu { |
||||
|
margin: 0 0 0 1.5rem; |
||||
|
padding: 0; |
||||
|
border-width: 0; |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu > a::after { |
||||
|
display: block; |
||||
|
content: " "; |
||||
|
float: right; |
||||
|
width: 0; |
||||
|
height: 0; |
||||
|
border-color: transparent; |
||||
|
border-style: solid; |
||||
|
border-width: 5px 0 5px 5px; |
||||
|
border-left-color: var(--bs-dropdown-link-active-color); |
||||
|
margin-top: 5px; |
||||
|
margin-right: -10px; |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu:hover > a::after { |
||||
|
border-left-color: var(--bs-dropdown-link-active-color); |
||||
|
} |
||||
|
|
||||
|
@media (min-width: 992px) { |
||||
|
.dropdown-menu { |
||||
|
overflow-y: auto; |
||||
|
max-height: calc(100vh - 3.5rem); |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu { |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu > .dropdown-menu { |
||||
|
position: fixed !important; |
||||
|
margin-top: -9px; |
||||
|
margin-left: -2px; |
||||
|
border-width: 1px; |
||||
|
padding: 0.5rem 0; |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu.pull-left { |
||||
|
float: none; |
||||
|
} |
||||
|
|
||||
|
.dropdown-submenu.pull-left > .dropdown-menu { |
||||
|
left: -100%; |
||||
|
margin-left: 10px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@media print { |
||||
|
/* Remove sidebar when print */ |
||||
|
.col-md-3 { display: none; } |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
/*! |
||||
|
* Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com |
||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) |
||||
|
* Copyright 2023 Fonticons, Inc. |
||||
|
*/ |
||||
|
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} |
||||
@ -0,0 +1,6 @@ |
|||||
|
/*! |
||||
|
* Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com |
||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) |
||||
|
* Copyright 2023 Fonticons, Inc. |
||||
|
*/ |
||||
|
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} |
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,537 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en" data-bs-theme="auto"> |
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
<meta name="description" content="None"> |
||||
|
|
||||
|
|
||||
|
<link rel="shortcut icon" href="img/favicon.ico"> |
||||
|
<title>RomWBW Documentation V3.6</title> |
||||
|
<link href="css/bootstrap.min.css" rel="stylesheet"> |
||||
|
<link href="css/fontawesome.min.css" rel="stylesheet"> |
||||
|
<link href="css/brands.min.css" rel="stylesheet"> |
||||
|
<link href="css/solid.min.css" rel="stylesheet"> |
||||
|
<link href="css/v4-font-face.min.css" rel="stylesheet"> |
||||
|
<link href="css/base.css" rel="stylesheet"> |
||||
|
<link id="hljs-light" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" disabled> |
||||
|
<link id="hljs-dark" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" disabled> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script> |
||||
|
<script>hljs.highlightAll();</script> |
||||
|
</head> |
||||
|
|
||||
|
<body class="homepage"> |
||||
|
<div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary"> |
||||
|
<div class="container"> |
||||
|
<a class="navbar-brand" href=".">RomWBW Documentation V3.6</a> |
||||
|
<!-- Expander button --> |
||||
|
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation"> |
||||
|
<span class="navbar-toggler-icon"></span> |
||||
|
</button> |
||||
|
|
||||
|
<!-- Expanded navigation --> |
||||
|
<div id="navbar-collapse" class="navbar-collapse collapse"> |
||||
|
<!-- Main navigation --> |
||||
|
<ul class="nav navbar-nav"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="Introduction/" class="nav-link">Introduction</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="UserGuide/" class="nav-link">User Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="SystemGuide/" class="nav-link">System Guide</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="Applications/" class="nav-link">Applications</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="Catalog/" class="nav-link">Catalog</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="Hardware/" class="nav-link">Hardware</a> |
||||
|
</li> |
||||
|
</ul> |
||||
|
|
||||
|
<ul class="nav navbar-nav ms-md-auto"> |
||||
|
<li class="nav-item"> |
||||
|
<a href="#" class="nav-link" data-bs-toggle="modal" data-bs-target="#mkdocs_search_modal"> |
||||
|
<i class="fa fa-search"></i> Search |
||||
|
</a> |
||||
|
</li> |
||||
|
<li class="nav-item"> |
||||
|
<a href="https://github.com/wwarthen/RomWBW" class="nav-link"><i class="fa-brands fa-github"></i> GitHub</a> |
||||
|
</li> |
||||
|
<li class="nav-item dropdown"> |
||||
|
<button id="theme-menu" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Toggle theme" class="nav-link dropdown-toggle"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="d-lg-none ms-2">Toggle theme</span> |
||||
|
</button> |
||||
|
<ul class="dropdown-menu dropdown-menu-end"> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-sun fa-fw"></i> |
||||
|
<span class="ms-2">Light</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false"> |
||||
|
<i class="fa-solid fa-moon fa-fw"></i> |
||||
|
<span class="ms-2">Dark</span> |
||||
|
<i class="fa-solid fa-check ms-auto d-none"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
<li> |
||||
|
<button class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="true"> |
||||
|
<i class="fa-solid fa-circle-half-stroke fa-fw"></i> |
||||
|
<span class="ms-2">Auto</span> |
||||
|
<i class="fa-solid fa-check ms-auto"></i> |
||||
|
</button> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script src="js/darkmode.js"></script> |
||||
|
|
||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col-md-3"><div class="navbar-expand-md bs-sidebar hidden-print affix" role="complementary"> |
||||
|
<div class="navbar-header"> |
||||
|
<button type="button" class="navbar-toggler collapsed" data-bs-toggle="collapse" data-bs-target="#toc-collapse" title="Table of Contents"> |
||||
|
<span class="fa fa-angle-down"></span> |
||||
|
</button> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div id="toc-collapse" class="navbar-collapse collapse card bg-body-tertiary"> |
||||
|
<ul class="nav flex-column"> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#overview" class="nav-link">Overview</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#acquiring-romwbw" class="nav-link">Acquiring RomWBW</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#installation-operation" class="nav-link">Installation & Operation</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
<li class="nav-item" data-bs-level="2"><a href="#documentation" class="nav-link">Documentation</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#acknowledgments" class="nav-link">Acknowledgments</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#licensing" class="nav-link">Licensing</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
|
||||
|
<li class="nav-item" data-bs-level="1"><a href="#getting-assistance" class="nav-link">Getting Assistance</a> |
||||
|
<ul class="nav flex-column"> |
||||
|
</ul> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div></div> |
||||
|
<div class="col-md-9" role="main"> |
||||
|
|
||||
|
<p>$define{doc_title}{ReadMe}$ |
||||
|
$include{"Basic.h"}$</p> |
||||
|
<h1 id="overview">Overview</h1> |
||||
|
<p>RomWBW software provides a complete, commercial quality |
||||
|
implementation of CP/M (and workalike) operating systems and |
||||
|
applications for modern Z80/180/280 retro-computing hardware systems.</p> |
||||
|
<p>A wide variety of platforms are supported including those |
||||
|
produced by these developer communities:</p> |
||||
|
<ul> |
||||
|
<li><a href="https://www.retrobrewcomputers.org">RetroBrew Computers</a> |
||||
|
(<a href="https://www.retrobrewcomputers.org">https://www.retrobrewcomputers.org</a>)</li> |
||||
|
<li><a href="https://rc2014.co.uk">RC2014</a> (<a href="https://rc2014.co.uk">https://rc2014.co.uk</a>), \ |
||||
|
<a href="https://groups.google.com/g/rc2014-z80">RC2014-Z80</a> |
||||
|
(<a href="https://groups.google.com/g/rc2014-z80">https://groups.google.com/g/rc2014-z80</a>)</li> |
||||
|
<li><a href="https://groups.google.com/g/retro-comp">Retro Computing</a> |
||||
|
(<a href="https://groups.google.com/g/retro-comp">https://groups.google.com/g/retro-comp</a>)</li> |
||||
|
<li><a href="https://smallcomputercentral.com/">Small Computer Central</a> |
||||
|
(<a href="https://smallcomputercentral.com/">https://smallcomputercentral.com/</a>)</li> |
||||
|
</ul> |
||||
|
<p>A complete list of the currently supported platforms is found in the |
||||
|
[Installation] section.</p> |
||||
|
<p>Supported hardware features of RomWBW include:</p> |
||||
|
<ul> |
||||
|
<li>Z80 Family CPUs including Z80, Z180, and Z280</li> |
||||
|
<li>Banked memory services for several banking designs</li> |
||||
|
<li>Disk drivers for RAM, ROM, Floppy, IDE ATA/ATAPI, CF, SD, USB, Zip, Iomega</li> |
||||
|
<li>Serial drivers including UART (16550-like), ASCI, ACIA, SIO</li> |
||||
|
<li>Video drivers including TMS9918, SY6545, MOS8563, HD6445</li> |
||||
|
<li>Keyboard (PS/2) drivers via VT8242 or PPI interfaces</li> |
||||
|
<li>Real time clock drivers including DS1302, BQ4845</li> |
||||
|
<li>Support for CP/NET networking using Wiznet, MT011 or Serial</li> |
||||
|
<li>Built-in VT-100 terminal emulation support</li> |
||||
|
</ul> |
||||
|
<p>RomWBW is distributed as both source code and pre-built ROM and disk |
||||
|
images. Some of the provided software can be launched directly from the |
||||
|
ROM firmware itself:</p> |
||||
|
<ul> |
||||
|
<li>System Monitor</li> |
||||
|
<li>Operating Systems (CP/M 2.2, ZSDOS)</li> |
||||
|
<li>ROM BASIC (Nascom BASIC and Tasty BASIC)</li> |
||||
|
<li>ROM Forth</li> |
||||
|
</ul> |
||||
|
<p>A dynamic disk drive letter assignment mechanism allows mapping |
||||
|
operating system drive letters to any available disk media. |
||||
|
Additionally, mass storage devices (IDE Disk, CF Card, SD Card, etc.) |
||||
|
support the use of multiple slices (up to 256 per device). Each slice |
||||
|
contains a complete CP/M filesystem and can be mapped independently to |
||||
|
any drive letter. This overcomes the inherent size limitations in legacy |
||||
|
OSes and allows up to 2GB of accessible storage on a single device, |
||||
|
with up to 128MB accessible at any one time.</p> |
||||
|
<p>The pre-built ROM firmware images are generally suitable for most |
||||
|
users. However, it is also very easy to modify and build custom ROM |
||||
|
images that fully tailor the firmware to your specific preferences. |
||||
|
All tools required to build custom ROM firmware under Windows are |
||||
|
included -- no need to install assemblers, etc. The firmware can also |
||||
|
be built using Linux or MacOS after confirming a few standard tools |
||||
|
have been installed.</p> |
||||
|
<p>Multiple disk images are provided in the distribution. Most disk |
||||
|
images contain a complete, bootable, ready-to-run implementation of a |
||||
|
specific operating system. A "combo" disk image contains multiple |
||||
|
slices, each with a full operating system implementation. If you use |
||||
|
this disk image, you can easily pick whichever operating system you |
||||
|
want to boot without changing media.</p> |
||||
|
<p>By design, RomWBW isolates all of the hardware specific functions in |
||||
|
the ROM chip itself. The ROM provides a hardware abstraction layer |
||||
|
such that all of the operating systems and applications on a disk |
||||
|
will run on any RomWBW-based system. To put it simply, you can take |
||||
|
a disk (or CF/SD/USB Card) and move it between systems transparently.</p> |
||||
|
<p>A tool is provided that allows you to access a FAT-12/16/32 filesystem. |
||||
|
The FAT filesystem may be coresident on the same disk media as RomWBW |
||||
|
slices or on stand-alone media. This makes exchanging files with modern |
||||
|
OSes such as Windows, MacOS, and Linux very easy.</p> |
||||
|
<h1 id="acquiring-romwbw">Acquiring RomWBW</h1> |
||||
|
<p>The <a href="https://github.com/wwarthen/RomWBW">RomWBW Repository</a> |
||||
|
(<a href="https://github.com/wwarthen/RomWBW">https://github.com/wwarthen/RomWBW</a>) on GitHub is the official |
||||
|
distribution location for all project source and documentation. |
||||
|
The fully-built distribution releases are available on the |
||||
|
<a href="https://github.com/wwarthen/RomWBW/releases">RomWBW Releases Page</a> |
||||
|
(<a href="https://github.com/wwarthen/RomWBW/releases">https://github.com/wwarthen/RomWBW/releases</a>) of the repository. |
||||
|
On this page, you will normally see a Development Snapshot as well as |
||||
|
recent stable releases. Unless you have a specific reason, I suggest you |
||||
|
stick to the most recent stable release.</p> |
||||
|
<p>The asset named RomWBW-vX.X.X-Package.zip includes all pre-built ROM |
||||
|
and Disk images as well as full source code. The other assets contain |
||||
|
only source code and do not have the pre-built ROM or disk images.</p> |
||||
|
<p>All source code and distributions are maintained on GitHub. Code |
||||
|
contributions are very welcome.</p> |
||||
|
<h1 id="installation-operation">Installation & Operation</h1> |
||||
|
<p>In general, installation of RomWBW on your platform is very simple. You |
||||
|
just need to program your ROM with the correct ROM image from the RomWBW |
||||
|
distribution. Subsequently, you can write disk images on your disk |
||||
|
drives (IDE disk, CF Card, SD Card, etc.) which then provides even more |
||||
|
functionality.</p> |
||||
|
<p>Complete instructions for installation and operation of RomWBW are |
||||
|
found in the $doc_user$. It is also a good idea to review the |
||||
|
<a href="https://github.com/wwarthen/RomWBW/blob/master/RELEASE_NOTES.md">Release Notes</a> |
||||
|
for helpful release-specific information.</p> |
||||
|
<h2 id="documentation">Documentation</h2> |
||||
|
<p>Documentation for $doc_product$ includes:</p> |
||||
|
<ul> |
||||
|
<li>$doc_intro$</li> |
||||
|
<li>$doc_user$</li> |
||||
|
<li>$doc_sys$</li> |
||||
|
<li>$doc_apps$</li> |
||||
|
<li>$doc_catalog$</li> |
||||
|
<li>$doc_hardware$</li> |
||||
|
</ul> |
||||
|
<h1 id="acknowledgments">Acknowledgments</h1> |
||||
|
<p>I want to acknowledge that a great deal of the code and inspiration |
||||
|
for RomWBW has been provided by or derived from the work of others |
||||
|
in the RetroBrew Computers Community. I sincerely appreciate all of |
||||
|
their contributions. The list below is probably missing many names -- |
||||
|
please let me know if I missed you!</p> |
||||
|
<ul> |
||||
|
<li> |
||||
|
<p>Andrew Lynch started it all when he created the N8VEM Z80 SBC |
||||
|
which became the first platform RomWBW supported. Some of his |
||||
|
original code can still be found in RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dan Werner wrote much of the code from which RomWBW was originally |
||||
|
derived and he has always been a great source of knowledge and |
||||
|
advice.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Douglas Goodall contributed code, time, testing, and advice in "the |
||||
|
early days". He created an entire suite of application programs to |
||||
|
enhance the use of RomWBW. Unfortunately, they have become unusable |
||||
|
due to internal changes within RomWBW. As of RomWBW 2.6, these |
||||
|
applications are no longer provided.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Sergey Kiselev created several hardware platforms for RomWBW |
||||
|
including the very popular Zeta.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>David Giles created support for the Z180 CSIO which is now included |
||||
|
SD Card driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Phil Summers contributed the Forth and BASIC adaptations in ROM, the |
||||
|
AY-3-8910 sound driver, DMA support, and a long list of general code |
||||
|
and documentation enhancements.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Ed Brindley contributed some of the code that supports the RCBus |
||||
|
platform.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Spencer Owen created the RC2014 series of hobbyist kit computers |
||||
|
which has exponentially increased RomWBW usage. Some of his kits |
||||
|
include RomWBW.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Stephen Cousins has likewise created a series of hobbyist kit |
||||
|
computers at Small Computer Central and is distributing RomWBW |
||||
|
with many of them.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Alan Cox has contributed some driver code and has provided a great |
||||
|
deal of advice.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>The CP/NET client files were developed by Douglas Miller.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Phillip Stevens contributed support for FreeRTOS.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Curt Mayer contributed the original Linux / MacOS build process.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>UNA BIOS and FDISK80 are the products of John Coffman.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>FLASH4 is a product of Will Sowerbutts.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>CLRDIR is a product of Max Scane.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Tasty Basic is a product of Dimitri Theulings.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dean Netherton contributed eZ80 CPU support, the sound driver |
||||
|
interface, and the SN76489 sound driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>The RomWBW Disk Catalog document was produced by Mykl Orders.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Rob Prouse has created many of the supplemental disk images |
||||
|
including Aztec C, HiTech C, SLR Z80ASM, Turbo Pascal, Microsoft |
||||
|
BASIC Compiler, Microsoft Fortran Compiler, and a Games |
||||
|
compendium.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Martin R has provided substantial help reviewing and improving the |
||||
|
User Guide and Applications documents.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Mark Pruden has made a wide variety of contributions including:</p> |
||||
|
</li> |
||||
|
<li>significant content in the Disk Catalog and User Guide</li> |
||||
|
<li>creation of the Introduction and Hardware documents</li> |
||||
|
<li>Z3PLUS operating system disk image</li> |
||||
|
<li>COPYSL and SLABEL utility</li> |
||||
|
<li>a feature for RomWBW configuration by NVRAM</li> |
||||
|
<li> |
||||
|
<p>the /B bulk mode of disk assignment to the ASSIGN utility</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Jacques Pelletier has contributed the DS1501 RTC driver code.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Jose Collado has contributed enhancements to the TMS driver |
||||
|
including compatibility with standard TMS register configuration.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Kevin Boone has contributed a generic HBIOS date/time utility (WDATE).</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Matt Carroll has contributed a fix to XM.COM that corrects the |
||||
|
port specification when doing a send.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dean Jenkins enhanced the build process to accommodate the |
||||
|
Raspberry Pi 4.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Tom Plano has contributed a new utility (HTALK) to allow talking |
||||
|
directly to HBIOS COM ports.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Lars Nelson has contributed several generic utilities such as |
||||
|
a universal (OS agnostic) UNARC application.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Dylan Hall added support for specifying a secondary console.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Bill Shen has contributed boot loaders for several of his |
||||
|
systems.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Laszlo Szolnoki has contributed an EF9345 video display |
||||
|
controller driver.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Ladislau Szilagyi has contributed an enhanced version of |
||||
|
CP/M Cowgol that leverages RomWBW memory banking.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p>Les Bird has contributed support for the NABU w/ Option Board</p> |
||||
|
</li> |
||||
|
</ul> |
||||
|
<p>Contributions of all kinds to RomWBW are very welcome.</p> |
||||
|
<h1 id="licensing">Licensing</h1> |
||||
|
<p>RomWBW is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version.</p> |
||||
|
<p>RomWBW is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details.</p> |
||||
|
<p>You should have received a copy of the GNU General Public License |
||||
|
along with RomWBW. If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p> |
||||
|
<p>Portions of RomWBW were created by, contributed by, or derived from |
||||
|
the work of others. It is believed that these works are being used |
||||
|
in accordance with the intentions and/or licensing of their creators.</p> |
||||
|
<p>If anyone feels their work is being used outside of its intended |
||||
|
licensing, please notify:</p> |
||||
|
<blockquote> |
||||
|
<p>$doc_author$ \ |
||||
|
<a href="mailto:$doc_authmail$">$doc_authmail$</a></p> |
||||
|
</blockquote> |
||||
|
<p>RomWBW is an aggregate work. It is composed of many individual, |
||||
|
standalone programs that are distributed as a whole to function as |
||||
|
a cohesive system. Each program may have its own licensing which |
||||
|
may be different from other programs within the aggregate.</p> |
||||
|
<p>In some cases, a single program (e.g., CP/M Operating System) is |
||||
|
composed of multiple components with different licenses. It is |
||||
|
believed that in all such cases the licenses are compatible with |
||||
|
GPL version 3.</p> |
||||
|
<p>RomWBW encourages code contributions from others. Contributors |
||||
|
may assert their own copyright in their contributions by |
||||
|
annotating the contributed source code appropriately. Contributors |
||||
|
are further encouraged to submit their contributions via the RomWBW |
||||
|
source code control system to ensure their contributions are clearly |
||||
|
documented.</p> |
||||
|
<p>All contributions to RomWBW are subject to this license.</p> |
||||
|
<h1 id="getting-assistance">Getting Assistance</h1> |
||||
|
<p>The best way to get assistance with RomWBW or any aspect of the |
||||
|
RetroBrew Computers projects is via one of the community forums:</p> |
||||
|
<ul> |
||||
|
<li><a href="https://www.retrobrewcomputers.org/forum/">RetroBrew Computers Forum</a></li> |
||||
|
<li><a href="https://groups.google.com/forum/#!forum/rc2014-z80">RC2014 Google Group</a></li> |
||||
|
<li><a href="https://groups.google.com/forum/#!forum/retro-comp">retro-comp Google Group</a></li> |
||||
|
</ul> |
||||
|
<p>Submission of issues and bugs are welcome at the |
||||
|
<a href="https://github.com/wwarthen/RomWBW">RomWBW GitHub Repository</a>.</p> |
||||
|
<p>Also feel free to email $doc_author$ at <a href="mailto:$doc_authmail$">$doc_authmail$</a>.</p></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<footer class="col-md-12"> |
||||
|
<hr> |
||||
|
<p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p> |
||||
|
</footer> |
||||
|
<script src="js/bootstrap.bundle.min.js"></script> |
||||
|
<script> |
||||
|
var base_url = ".", |
||||
|
shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83}; |
||||
|
</script> |
||||
|
<script src="js/base.js"></script> |
||||
|
<script src="search/main.js"></script> |
||||
|
|
||||
|
<div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog modal-lg"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="searchModalLabel">Search</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<p>From here you can search these documents. Enter your search terms below.</p> |
||||
|
<form> |
||||
|
<div class="form-group"> |
||||
|
<input type="search" class="form-control" placeholder="Search..." id="mkdocs-search-query" title="Type search term here"> |
||||
|
</div> |
||||
|
</form> |
||||
|
<div id="mkdocs-search-results" data-no-results-text="No results found"></div> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true"> |
||||
|
<div class="modal-dialog"> |
||||
|
<div class="modal-content"> |
||||
|
<div class="modal-header"> |
||||
|
<h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4> |
||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
|
</div> |
||||
|
<div class="modal-body"> |
||||
|
<table class="table"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th style="width: 20%;">Keys</th> |
||||
|
<th>Action</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr> |
||||
|
<td class="help shortcut"><kbd>?</kbd></td> |
||||
|
<td>Open this help</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="next shortcut"><kbd>n</kbd></td> |
||||
|
<td>Next page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="prev shortcut"><kbd>p</kbd></td> |
||||
|
<td>Previous page</td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="search shortcut"><kbd>s</kbd></td> |
||||
|
<td>Search</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
<div class="modal-footer"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
|
|
||||
|
<!-- |
||||
|
MkDocs version : 1.6.1 |
||||
|
Build Date UTC : 2025-05-30 20:49:03.030937+00:00 |
||||
|
--> |
||||
@ -0,0 +1,287 @@ |
|||||
|
function getSearchTerm() { |
||||
|
var sPageURL = window.location.search.substring(1); |
||||
|
var sURLVariables = sPageURL.split('&'); |
||||
|
for (var i = 0; i < sURLVariables.length; i++) { |
||||
|
var sParameterName = sURLVariables[i].split('='); |
||||
|
if (sParameterName[0] == 'q') { |
||||
|
return sParameterName[1]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function applyTopPadding() { |
||||
|
// Update various absolute positions to match where the main container
|
||||
|
// starts. This is necessary for handling multi-line nav headers, since
|
||||
|
// that pushes the main container down.
|
||||
|
var container = document.querySelector('body > .container'); |
||||
|
var offset = container.offsetTop; |
||||
|
|
||||
|
document.documentElement.style.scrollPaddingTop = offset + 'px'; |
||||
|
document.querySelectorAll('.bs-sidebar.affix').forEach(function(sidebar) { |
||||
|
sidebar.style.top = offset + 'px'; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
document.addEventListener("DOMContentLoaded", function () { |
||||
|
var search_term = getSearchTerm(); |
||||
|
var search_modal = new bootstrap.Modal(document.getElementById('mkdocs_search_modal')); |
||||
|
var keyboard_modal = new bootstrap.Modal(document.getElementById('mkdocs_keyboard_modal')); |
||||
|
|
||||
|
if (search_term) { |
||||
|
search_modal.show(); |
||||
|
} |
||||
|
|
||||
|
// make sure search input gets autofocus every time modal opens.
|
||||
|
document.getElementById('mkdocs_search_modal').addEventListener('shown.bs.modal', function() { |
||||
|
document.getElementById('mkdocs-search-query').focus(); |
||||
|
}); |
||||
|
|
||||
|
// Close search modal when result is selected
|
||||
|
// The links get added later so listen to parent
|
||||
|
document.getElementById('mkdocs-search-results').addEventListener('click', function(e) { |
||||
|
if (e.target.tagName === 'A') { |
||||
|
search_modal.hide(); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// Populate keyboard modal with proper Keys
|
||||
|
document.querySelector('.help.shortcut kbd').innerHTML = keyCodes[shortcuts.help]; |
||||
|
document.querySelector('.prev.shortcut kbd').innerHTML = keyCodes[shortcuts.previous]; |
||||
|
document.querySelector('.next.shortcut kbd').innerHTML = keyCodes[shortcuts.next]; |
||||
|
document.querySelector('.search.shortcut kbd').innerHTML = keyCodes[shortcuts.search]; |
||||
|
|
||||
|
// Keyboard navigation
|
||||
|
document.addEventListener("keydown", function(e) { |
||||
|
if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return true; |
||||
|
var key = e.which || e.keyCode || window.event && window.event.keyCode; |
||||
|
var page; |
||||
|
switch (key) { |
||||
|
case shortcuts.next: |
||||
|
page = document.querySelector('.navbar a[rel="next"]'); |
||||
|
break; |
||||
|
case shortcuts.previous: |
||||
|
page = document.querySelector('.navbar a[rel="prev"]'); |
||||
|
break; |
||||
|
case shortcuts.search: |
||||
|
e.preventDefault(); |
||||
|
keyboard_modal.hide(); |
||||
|
search_modal.show(); |
||||
|
document.getElementById('mkdocs-search-query').focus(); |
||||
|
break; |
||||
|
case shortcuts.help: |
||||
|
search_modal.hide(); |
||||
|
keyboard_modal.show(); |
||||
|
break; |
||||
|
default: break; |
||||
|
} |
||||
|
if (page && page.hasAttribute('href')) { |
||||
|
keyboard_modal.hide(); |
||||
|
window.location.href = page.getAttribute('href'); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
document.querySelectorAll('table').forEach(function(table) { |
||||
|
table.classList.add('table', 'table-striped', 'table-hover'); |
||||
|
}); |
||||
|
|
||||
|
function showInnerDropdown(item) { |
||||
|
var popup = item.nextElementSibling; |
||||
|
popup.classList.add('show'); |
||||
|
item.classList.add('open'); |
||||
|
|
||||
|
// First, close any sibling dropdowns.
|
||||
|
var container = item.parentElement.parentElement; |
||||
|
container.querySelectorAll(':scope > .dropdown-submenu > a').forEach(function(el) { |
||||
|
if (el !== item) { |
||||
|
hideInnerDropdown(el); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
var popupMargin = 10; |
||||
|
var maxBottom = window.innerHeight - popupMargin; |
||||
|
var bounds = item.getBoundingClientRect(); |
||||
|
|
||||
|
popup.style.left = bounds.right + 'px'; |
||||
|
if (bounds.top + popup.clientHeight > maxBottom && |
||||
|
bounds.top > window.innerHeight / 2) { |
||||
|
popup.style.top = (bounds.bottom - popup.clientHeight) + 'px'; |
||||
|
popup.style.maxHeight = (bounds.bottom - popupMargin) + 'px'; |
||||
|
} else { |
||||
|
popup.style.top = bounds.top + 'px'; |
||||
|
popup.style.maxHeight = (maxBottom - bounds.top) + 'px'; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function hideInnerDropdown(item) { |
||||
|
var popup = item.nextElementSibling; |
||||
|
popup.classList.remove('show'); |
||||
|
item.classList.remove('open'); |
||||
|
|
||||
|
popup.scrollTop = 0; |
||||
|
var menu = popup.querySelector('.dropdown-menu'); |
||||
|
if (menu) { |
||||
|
menu.scrollTop = 0; |
||||
|
} |
||||
|
var dropdown = popup.querySelector('.dropdown-submenu > a'); |
||||
|
if (dropdown) { |
||||
|
dropdown.classList.remove('open'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
document.querySelectorAll('.dropdown-submenu > a').forEach(function(item) { |
||||
|
item.addEventListener('click', function(e) { |
||||
|
if (item.nextElementSibling.classList.contains('show')) { |
||||
|
hideInnerDropdown(item); |
||||
|
} else { |
||||
|
showInnerDropdown(item); |
||||
|
} |
||||
|
|
||||
|
e.stopPropagation(); |
||||
|
e.preventDefault(); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
document.querySelectorAll('.dropdown-menu').forEach(function(menu) { |
||||
|
menu.parentElement.addEventListener('hide.bs.dropdown', function() { |
||||
|
menu.scrollTop = 0; |
||||
|
var dropdown = menu.querySelector('.dropdown-submenu > a'); |
||||
|
if (dropdown) { |
||||
|
dropdown.classList.remove('open'); |
||||
|
} |
||||
|
menu.querySelectorAll('.dropdown-menu .dropdown-menu').forEach(function(submenu) { |
||||
|
submenu.classList.remove('show'); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
applyTopPadding(); |
||||
|
}); |
||||
|
|
||||
|
window.addEventListener('resize', applyTopPadding); |
||||
|
|
||||
|
var scrollSpy = new bootstrap.ScrollSpy(document.body, { |
||||
|
target: '.bs-sidebar' |
||||
|
}); |
||||
|
|
||||
|
/* Prevent disabled links from causing a page reload */ |
||||
|
document.querySelectorAll("li.disabled a").forEach(function(item) { |
||||
|
item.addEventListener("click", function(event) { |
||||
|
event.preventDefault(); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
// See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
|
||||
|
// We only list common keys below. Obscure keys are omitted and their use is discouraged.
|
||||
|
var keyCodes = { |
||||
|
8: 'backspace', |
||||
|
9: 'tab', |
||||
|
13: 'enter', |
||||
|
16: 'shift', |
||||
|
17: 'ctrl', |
||||
|
18: 'alt', |
||||
|
19: 'pause/break', |
||||
|
20: 'caps lock', |
||||
|
27: 'escape', |
||||
|
32: 'spacebar', |
||||
|
33: 'page up', |
||||
|
34: 'page down', |
||||
|
35: 'end', |
||||
|
36: 'home', |
||||
|
37: '←', |
||||
|
38: '↑', |
||||
|
39: '→', |
||||
|
40: '↓', |
||||
|
45: 'insert', |
||||
|
46: 'delete', |
||||
|
48: '0', |
||||
|
49: '1', |
||||
|
50: '2', |
||||
|
51: '3', |
||||
|
52: '4', |
||||
|
53: '5', |
||||
|
54: '6', |
||||
|
55: '7', |
||||
|
56: '8', |
||||
|
57: '9', |
||||
|
65: 'a', |
||||
|
66: 'b', |
||||
|
67: 'c', |
||||
|
68: 'd', |
||||
|
69: 'e', |
||||
|
70: 'f', |
||||
|
71: 'g', |
||||
|
72: 'h', |
||||
|
73: 'i', |
||||
|
74: 'j', |
||||
|
75: 'k', |
||||
|
76: 'l', |
||||
|
77: 'm', |
||||
|
78: 'n', |
||||
|
79: 'o', |
||||
|
80: 'p', |
||||
|
81: 'q', |
||||
|
82: 'r', |
||||
|
83: 's', |
||||
|
84: 't', |
||||
|
85: 'u', |
||||
|
86: 'v', |
||||
|
87: 'w', |
||||
|
88: 'x', |
||||
|
89: 'y', |
||||
|
90: 'z', |
||||
|
91: 'Left Windows Key / Left ⌘', |
||||
|
92: 'Right Windows Key', |
||||
|
93: 'Windows Menu / Right ⌘', |
||||
|
96: 'numpad 0', |
||||
|
97: 'numpad 1', |
||||
|
98: 'numpad 2', |
||||
|
99: 'numpad 3', |
||||
|
100: 'numpad 4', |
||||
|
101: 'numpad 5', |
||||
|
102: 'numpad 6', |
||||
|
103: 'numpad 7', |
||||
|
104: 'numpad 8', |
||||
|
105: 'numpad 9', |
||||
|
106: 'multiply', |
||||
|
107: 'add', |
||||
|
109: 'subtract', |
||||
|
110: 'decimal point', |
||||
|
111: 'divide', |
||||
|
112: 'f1', |
||||
|
113: 'f2', |
||||
|
114: 'f3', |
||||
|
115: 'f4', |
||||
|
116: 'f5', |
||||
|
117: 'f6', |
||||
|
118: 'f7', |
||||
|
119: 'f8', |
||||
|
120: 'f9', |
||||
|
121: 'f10', |
||||
|
122: 'f11', |
||||
|
123: 'f12', |
||||
|
124: 'f13', |
||||
|
125: 'f14', |
||||
|
126: 'f15', |
||||
|
127: 'f16', |
||||
|
128: 'f17', |
||||
|
129: 'f18', |
||||
|
130: 'f19', |
||||
|
131: 'f20', |
||||
|
132: 'f21', |
||||
|
133: 'f22', |
||||
|
134: 'f23', |
||||
|
135: 'f24', |
||||
|
144: 'num lock', |
||||
|
145: 'scroll lock', |
||||
|
186: ';', |
||||
|
187: '=', |
||||
|
188: ',', |
||||
|
189: '‐', |
||||
|
190: '.', |
||||
|
191: '?', |
||||
|
192: '`', |
||||
|
219: '[', |
||||
|
220: '\', |
||||
|
221: ']', |
||||
|
222: ''', |
||||
|
}; |
||||
@ -0,0 +1,65 @@ |
|||||
|
function setColorMode(mode) { |
||||
|
// Switch between light/dark theme. `mode` is a string value of either 'dark' or 'light'.
|
||||
|
var hljs_light = document.getElementById('hljs-light'), |
||||
|
hljs_dark = document.getElementById('hljs-dark'); |
||||
|
document.documentElement.setAttribute('data-bs-theme', mode); |
||||
|
if (mode == 'dark') { |
||||
|
hljs_light.disabled = true; |
||||
|
hljs_dark.disabled = false; |
||||
|
} else { |
||||
|
hljs_dark.disabled = true; |
||||
|
hljs_light.disabled = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function updateModeToggle(mode) { |
||||
|
// Update icon and toggle checkmarks of color mode selector.
|
||||
|
var menu = document.getElementById('theme-menu'); |
||||
|
document.querySelectorAll('[data-bs-theme-value]') |
||||
|
.forEach(function(toggle) { |
||||
|
if (mode == toggle.getAttribute('data-bs-theme-value')) { |
||||
|
toggle.setAttribute('aria-pressed', 'true'); |
||||
|
toggle.lastElementChild.classList.remove('d-none'); |
||||
|
menu.firstElementChild.setAttribute('class', toggle.firstElementChild.getAttribute('class')); |
||||
|
} else { |
||||
|
toggle.setAttribute('aria-pressed', 'false'); |
||||
|
toggle.lastElementChild.classList.add('d-none'); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function onSystemColorSchemeChange(event) { |
||||
|
// Update site color mode to match system color mode.
|
||||
|
setColorMode(event.matches ? 'dark' : 'light'); |
||||
|
} |
||||
|
|
||||
|
var mql = window.matchMedia('(prefers-color-scheme: dark)'), |
||||
|
defaultMode = document.documentElement.getAttribute('data-bs-theme'), |
||||
|
storedMode = localStorage.getItem('mkdocs-colormode'); |
||||
|
if (storedMode && storedMode != 'auto') { |
||||
|
setColorMode(storedMode); |
||||
|
updateModeToggle(storedMode); |
||||
|
} else if (storedMode == 'auto' || defaultMode == 'auto') { |
||||
|
setColorMode(mql.matches ? 'dark' : 'light'); |
||||
|
updateModeToggle('auto'); |
||||
|
mql.addEventListener('change', onSystemColorSchemeChange); |
||||
|
} else { |
||||
|
setColorMode(defaultMode); |
||||
|
updateModeToggle(defaultMode); |
||||
|
} |
||||
|
|
||||
|
document.querySelectorAll('[data-bs-theme-value]') |
||||
|
.forEach(function(toggle) { |
||||
|
toggle.addEventListener('click', function (e) { |
||||
|
var mode = e.currentTarget.getAttribute('data-bs-theme-value'); |
||||
|
localStorage.setItem('mkdocs-colormode', mode); |
||||
|
if (mode == 'auto') { |
||||
|
setColorMode(mql.matches ? 'dark' : 'light'); |
||||
|
mql.addEventListener('change', onSystemColorSchemeChange); |
||||
|
} else { |
||||
|
setColorMode(mode); |
||||
|
mql.removeEventListener('change', onSystemColorSchemeChange); |
||||
|
} |
||||
|
updateModeToggle(mode); |
||||
|
}); |
||||
|
}); |
||||
@ -0,0 +1,109 @@ |
|||||
|
function getSearchTermFromLocation() { |
||||
|
var sPageURL = window.location.search.substring(1); |
||||
|
var sURLVariables = sPageURL.split('&'); |
||||
|
for (var i = 0; i < sURLVariables.length; i++) { |
||||
|
var sParameterName = sURLVariables[i].split('='); |
||||
|
if (sParameterName[0] == 'q') { |
||||
|
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function joinUrl (base, path) { |
||||
|
if (path.substring(0, 1) === "/") { |
||||
|
// path starts with `/`. Thus it is absolute.
|
||||
|
return path; |
||||
|
} |
||||
|
if (base.substring(base.length-1) === "/") { |
||||
|
// base ends with `/`
|
||||
|
return base + path; |
||||
|
} |
||||
|
return base + "/" + path; |
||||
|
} |
||||
|
|
||||
|
function escapeHtml (value) { |
||||
|
return value.replace(/&/g, '&') |
||||
|
.replace(/"/g, '"') |
||||
|
.replace(/</g, '<') |
||||
|
.replace(/>/g, '>'); |
||||
|
} |
||||
|
|
||||
|
function formatResult (location, title, summary) { |
||||
|
return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ escapeHtml(title) + '</a></h3><p>' + escapeHtml(summary) +'</p></article>'; |
||||
|
} |
||||
|
|
||||
|
function displayResults (results) { |
||||
|
var search_results = document.getElementById("mkdocs-search-results"); |
||||
|
while (search_results.firstChild) { |
||||
|
search_results.removeChild(search_results.firstChild); |
||||
|
} |
||||
|
if (results.length > 0){ |
||||
|
for (var i=0; i < results.length; i++){ |
||||
|
var result = results[i]; |
||||
|
var html = formatResult(result.location, result.title, result.summary); |
||||
|
search_results.insertAdjacentHTML('beforeend', html); |
||||
|
} |
||||
|
} else { |
||||
|
var noResultsText = search_results.getAttribute('data-no-results-text'); |
||||
|
if (!noResultsText) { |
||||
|
noResultsText = "No results found"; |
||||
|
} |
||||
|
search_results.insertAdjacentHTML('beforeend', '<p>' + noResultsText + '</p>'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function doSearch () { |
||||
|
var query = document.getElementById('mkdocs-search-query').value; |
||||
|
if (query.length > min_search_length) { |
||||
|
if (!window.Worker) { |
||||
|
displayResults(search(query)); |
||||
|
} else { |
||||
|
searchWorker.postMessage({query: query}); |
||||
|
} |
||||
|
} else { |
||||
|
// Clear results for short queries
|
||||
|
displayResults([]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function initSearch () { |
||||
|
var search_input = document.getElementById('mkdocs-search-query'); |
||||
|
if (search_input) { |
||||
|
search_input.addEventListener("keyup", doSearch); |
||||
|
} |
||||
|
var term = getSearchTermFromLocation(); |
||||
|
if (term) { |
||||
|
search_input.value = term; |
||||
|
doSearch(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function onWorkerMessage (e) { |
||||
|
if (e.data.allowSearch) { |
||||
|
initSearch(); |
||||
|
} else if (e.data.results) { |
||||
|
var results = e.data.results; |
||||
|
displayResults(results); |
||||
|
} else if (e.data.config) { |
||||
|
min_search_length = e.data.config.min_search_length-1; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (!window.Worker) { |
||||
|
console.log('Web Worker API not supported'); |
||||
|
// load index in main thread
|
||||
|
$.getScript(joinUrl(base_url, "search/worker.js")).done(function () { |
||||
|
console.log('Loaded worker'); |
||||
|
init(); |
||||
|
window.postMessage = function (msg) { |
||||
|
onWorkerMessage({data: msg}); |
||||
|
}; |
||||
|
}).fail(function (jqxhr, settings, exception) { |
||||
|
console.error('Could not load worker.js'); |
||||
|
}); |
||||
|
} else { |
||||
|
// Wrap search in a web worker
|
||||
|
var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); |
||||
|
searchWorker.postMessage({init: true}); |
||||
|
searchWorker.onmessage = onWorkerMessage; |
||||
|
} |
||||
@ -0,0 +1,133 @@ |
|||||
|
var base_path = 'function' === typeof importScripts ? '.' : '/search/'; |
||||
|
var allowSearch = false; |
||||
|
var index; |
||||
|
var documents = {}; |
||||
|
var lang = ['en']; |
||||
|
var data; |
||||
|
|
||||
|
function getScript(script, callback) { |
||||
|
console.log('Loading script: ' + script); |
||||
|
$.getScript(base_path + script).done(function () { |
||||
|
callback(); |
||||
|
}).fail(function (jqxhr, settings, exception) { |
||||
|
console.log('Error: ' + exception); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function getScriptsInOrder(scripts, callback) { |
||||
|
if (scripts.length === 0) { |
||||
|
callback(); |
||||
|
return; |
||||
|
} |
||||
|
getScript(scripts[0], function() { |
||||
|
getScriptsInOrder(scripts.slice(1), callback); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function loadScripts(urls, callback) { |
||||
|
if( 'function' === typeof importScripts ) { |
||||
|
importScripts.apply(null, urls); |
||||
|
callback(); |
||||
|
} else { |
||||
|
getScriptsInOrder(urls, callback); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function onJSONLoaded () { |
||||
|
data = JSON.parse(this.responseText); |
||||
|
var scriptsToLoad = ['lunr.js']; |
||||
|
if (data.config && data.config.lang && data.config.lang.length) { |
||||
|
lang = data.config.lang; |
||||
|
} |
||||
|
if (lang.length > 1 || lang[0] !== "en") { |
||||
|
scriptsToLoad.push('lunr.stemmer.support.js'); |
||||
|
if (lang.length > 1) { |
||||
|
scriptsToLoad.push('lunr.multi.js'); |
||||
|
} |
||||
|
if (lang.includes("ja") || lang.includes("jp")) { |
||||
|
scriptsToLoad.push('tinyseg.js'); |
||||
|
} |
||||
|
for (var i=0; i < lang.length; i++) { |
||||
|
if (lang[i] != 'en') { |
||||
|
scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
loadScripts(scriptsToLoad, onScriptsLoaded); |
||||
|
} |
||||
|
|
||||
|
function onScriptsLoaded () { |
||||
|
console.log('All search scripts loaded, building Lunr index...'); |
||||
|
if (data.config && data.config.separator && data.config.separator.length) { |
||||
|
lunr.tokenizer.separator = new RegExp(data.config.separator); |
||||
|
} |
||||
|
|
||||
|
if (data.index) { |
||||
|
index = lunr.Index.load(data.index); |
||||
|
data.docs.forEach(function (doc) { |
||||
|
documents[doc.location] = doc; |
||||
|
}); |
||||
|
console.log('Lunr pre-built index loaded, search ready'); |
||||
|
} else { |
||||
|
index = lunr(function () { |
||||
|
if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { |
||||
|
this.use(lunr[lang[0]]); |
||||
|
} else if (lang.length > 1) { |
||||
|
this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility
|
||||
|
} |
||||
|
this.field('title'); |
||||
|
this.field('text'); |
||||
|
this.ref('location'); |
||||
|
|
||||
|
for (var i=0; i < data.docs.length; i++) { |
||||
|
var doc = data.docs[i]; |
||||
|
this.add(doc); |
||||
|
documents[doc.location] = doc; |
||||
|
} |
||||
|
}); |
||||
|
console.log('Lunr index built, search ready'); |
||||
|
} |
||||
|
allowSearch = true; |
||||
|
postMessage({config: data.config}); |
||||
|
postMessage({allowSearch: allowSearch}); |
||||
|
} |
||||
|
|
||||
|
function init () { |
||||
|
var oReq = new XMLHttpRequest(); |
||||
|
oReq.addEventListener("load", onJSONLoaded); |
||||
|
var index_path = base_path + '/search_index.json'; |
||||
|
if( 'function' === typeof importScripts ){ |
||||
|
index_path = 'search_index.json'; |
||||
|
} |
||||
|
oReq.open("GET", index_path); |
||||
|
oReq.send(); |
||||
|
} |
||||
|
|
||||
|
function search (query) { |
||||
|
if (!allowSearch) { |
||||
|
console.error('Assets for search still loading'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var resultDocuments = []; |
||||
|
var results = index.search(query); |
||||
|
for (var i=0; i < results.length; i++){ |
||||
|
var result = results[i]; |
||||
|
doc = documents[result.ref]; |
||||
|
doc.summary = doc.text.substring(0, 200); |
||||
|
resultDocuments.push(doc); |
||||
|
} |
||||
|
return resultDocuments; |
||||
|
} |
||||
|
|
||||
|
if( 'function' === typeof importScripts ) { |
||||
|
onmessage = function (e) { |
||||
|
if (e.data.init) { |
||||
|
init(); |
||||
|
} else if (e.data.query) { |
||||
|
postMessage({ results: search(e.data.query) }); |
||||
|
} else { |
||||
|
console.error("Worker - Unrecognized message: " + e); |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> |
||||
|
</urlset> |
||||