Skip to content

Commit 6d28982

Browse files
improve keymaps so we can have £ symbol etc
1 parent c3f738b commit 6d28982

62 files changed

Lines changed: 2600 additions & 1207 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docpages/user-guide/07_INDEX.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ Welcome to Retro Rocket! This guide is for everyone who wants to use the system,
1515
- \subpage user-networking
1616
- \subpage saving-your-work
1717
- \subpage troubleshooting
18-
- \subpage glossary
18+
- \subpage customisation
19+
- \subpage glossary
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
\page customisation Customising Retro Rocket
2+
3+
Many things in Retro Rocket allow you to customise them to make better use of your system. These customisation options go above and beyond what was available on 80s microcomputers and are closer to what you would expect on a modern operating system.
4+
5+
Each has its own subsection, below.
6+
7+
- \subpage keymaps
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
\page keymaps Keyboard Layouts
2+
3+
Your keyboard layout is defined by a configuration file called a keymap, which controls what characters appear when you press keys.
4+
5+
They are used to change which key is mapped to which character add characters that are not on your keyboard, or not defined by the
6+
base set of characters.
7+
8+
Keymaps are stored in:
9+
10+
```
11+
/system/keymaps/
12+
```
13+
14+
For example:
15+
16+
```
17+
/system/keymaps/en-GB.keymap
18+
```
19+
20+
A keymap can be loaded at runtime by the \ref KEYMAP.
21+
22+
---
23+
24+
### Format
25+
26+
Each line is one of:
27+
28+
* a key mapping
29+
* a symbol definition
30+
* a comment (`# ...`)
31+
32+
---
33+
34+
### Key mappings
35+
36+
```
37+
&SCANCODE normal shifted
38+
```
39+
40+
This defines what a key produces:
41+
42+
* `normal` is the character without Shift
43+
* `shifted` is the character with Shift
44+
45+
Example:
46+
47+
```
48+
&02 1 !
49+
&04 3 &A3
50+
```
51+
52+
This makes the `3` key produce `£` when Shift is held.
53+
54+
---
55+
56+
### Symbol definitions
57+
58+
```
59+
SYM &XX &b0 &b1 &b2 &b3 &b4 &b5 &b6 &b7
60+
```
61+
62+
Defines how a character looks on screen.
63+
64+
* `&XX` is the character number (the `&` means the number is written in hex)
65+
* the eight values that follow are the 8 rows of the character
66+
* each value is a number from 0 to 255
67+
* each bit in that number controls one pixel (1 = on, 0 = off)
68+
* the character is 8 pixels high and 8 pixels wide
69+
70+
Example (`£`):
71+
72+
```
73+
SYM &A3 &1C &36 &30 &7C &30 &30 &7E &00
74+
```
75+
76+
This defines the shape used whenever character `&A3` is printed.
77+
78+
---
79+
80+
### How to read a row
81+
82+
Take this value:
83+
84+
```
85+
&1C
86+
```
87+
88+
In binary, this is:
89+
90+
```
91+
00011100
92+
```
93+
94+
This means:
95+
96+
```
97+
...###..
98+
```
99+
100+
Each `#` is a lit pixel, each `.` is empty.
101+
102+
---
103+
104+
### How it is used
105+
106+
If a key is mapped to a character number, and that character has a symbol definition, that symbol will be shown when the key is pressed.
107+
108+
Example:
109+
110+
```
111+
&04 3 &A3
112+
SYM &A3 &1C &36 &30 &7C &30 &30 &7E &00
113+
```
114+
115+
Pressing `Shift+3` will produce `£`.
116+
117+
---
118+
119+
### Notes
120+
121+
* symbol definitions only affect how a character looks
122+
* redefining a character replaces any previous definition
123+
* characters without a definition use the default font
124+
* keymaps override the built-in layout
125+
* only keys that are listed are changed
126+
* duplicate entries are ignored

docs/customisation.html

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
<!DOCTYPE html>
2+
<html lang="en-US">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=11">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<title>Retro Rocket OS: Customising Retro Rocket</title>
8+
<link href="tabs.css" rel="stylesheet" type="text/css">
9+
<script type="text/javascript" src="jquery.js"></script>
10+
<script type="text/javascript" src="dynsections.js"></script>
11+
<script type="text/javascript" src="clipboard.js"></script>
12+
<link href="navtree.css" rel="stylesheet" type="text/css"/>
13+
<script type="text/javascript" src="navtreedata.js"></script>
14+
<script type="text/javascript" src="navtree.js"></script>
15+
<script type="text/javascript" src="cookie.js"></script>
16+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
17+
<script type="text/javascript" src="search/searchdata.js"></script>
18+
<script type="text/javascript" src="search/search.js"></script>
19+
<meta name="title" content="Customising Retro Rocket - Retro Rocket OS">
20+
<meta name="description" content="A small operating system in the spirit of the 1980s micros. A system you can actually understand, not just use.">
21+
<meta name="author" content="Retro Rocket Developers">
22+
<meta name="robots" content="index, follow">
23+
<link rel="canonical" href="https://retrorocket.dev/">
24+
<meta name="theme-color" content="#0b0f14">
25+
<link rel="icon" href="rr.png">
26+
<meta property="og:locale" content="en_GB">
27+
<meta property="og:title" content="Customising Retro Rocket - Retro Rocket OS">
28+
<meta property="og:description" content="A small operating system in the spirit of the 1980s micros. A system you can actually understand, not just use.">
29+
<meta property="og:type" content="website">
30+
<meta property="og:url" content="https://retrorocket.dev/">
31+
<meta property="og:image" content="https://retrorocket.dev/leader4.png">
32+
<meta property="og:image:alt" content="Retro Rocket OS running on a retro-style desktop">
33+
<meta property="og:site_name" content="Retro Rocket OS">
34+
<meta name="twitter:card" content="summary_large_image">
35+
<meta name="twitter:title" content="Customising Retro Rocket - Retro Rocket OS">
36+
<meta name="twitter:description" content="A small operating system in the spirit of the 1980s micros. A system you can actually understand, not just use.">
37+
<meta name="twitter:image" content="https://retrorocket.dev/leader4.png">
38+
<link rel="preload" as="image" href="https://retrorocket.dev/leader4.png">
39+
<script type="application/ld+json">
40+
{
41+
"@context": "https://schema.org",
42+
"@type": "SoftwareApplication",
43+
"name": "Retro Rocket OS",
44+
"operatingSystem": "x86-64",
45+
"applicationCategory": "OperatingSystem",
46+
"description": "A small operating system in the spirit of the 1980s micros. A system you can actually understand, not just use.",
47+
"url": "https://retrorocket.dev/"
48+
}
49+
</script>
50+
<link href="doxygen.css" rel="stylesheet" type="text/css">
51+
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
52+
<link href="style.css" rel="stylesheet" type="text/css"/>
53+
</head>
54+
<body>
55+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
56+
<div id="titlearea">
57+
<table cellspacing="0" cellpadding="0">
58+
<tbody>
59+
<tr id="projectrow">
60+
<td id="projectlogo"><img alt="Logo" src="rr.png"></td>
61+
<td id="projectalign">
62+
<div id="projectname">Retro Rocket OS</div>
63+
</td>
64+
</tr>
65+
</tbody>
66+
</table>
67+
</div>
68+
<!-- end header part -->
69+
<!-- Generated by Doxygen 1.14.0 -->
70+
<script type="text/javascript">
71+
var searchBox = new SearchBox("searchBox", "search/",'.html');
72+
</script>
73+
<script type="text/javascript">
74+
$(function() { codefold.init(); });
75+
</script>
76+
<script type="text/javascript" src="menudata.js"></script>
77+
<script type="text/javascript" src="menu.js"></script>
78+
<script type="text/javascript">
79+
$(function() {
80+
initMenu('',true,false,'search.php','Search',true);
81+
$(function() { init_search(); });
82+
});
83+
</script>
84+
<div id="main-nav"></div>
85+
</div><!-- top -->
86+
<div id="side-nav" class="ui-resizable side-nav-resizable">
87+
<div id="nav-tree">
88+
<div id="nav-tree-contents">
89+
<div id="nav-sync" class="sync"></div>
90+
</div>
91+
</div>
92+
<div id="splitbar" style="-moz-user-select:none;"
93+
class="ui-resizable-handle">
94+
</div>
95+
</div>
96+
<script type="text/javascript">
97+
$(function(){initNavTree('customisation.html','',''); });
98+
</script>
99+
<div id="container">
100+
<div id="doc-content">
101+
<!-- window showing the filter options -->
102+
<div id="MSearchSelectWindow"
103+
onmouseover="return searchBox.OnSearchSelectShow()"
104+
onmouseout="return searchBox.OnSearchSelectHide()"
105+
onkeydown="return searchBox.OnSearchSelectKey(event)">
106+
</div>
107+
108+
<!-- iframe showing the search results (closed by default) -->
109+
<div id="MSearchResultsWindow">
110+
<div id="MSearchResults">
111+
<div class="SRPage">
112+
<div id="SRIndex">
113+
<div id="SRResults"></div>
114+
<div class="SRStatus" id="Loading">Loading...</div>
115+
<div class="SRStatus" id="Searching">Searching...</div>
116+
<div class="SRStatus" id="NoMatches">No Matches</div>
117+
</div>
118+
</div>
119+
</div>
120+
</div>
121+
122+
<div><div class="header">
123+
<div class="headertitle"><div class="title">Customising Retro Rocket </div></div>
124+
</div><!--header-->
125+
<div class="contents">
126+
<div class="textblock"><p>Many things in Retro Rocket allow you to customise them to make better use of your system. These customisation options go above and beyond what was available on 80s microcomputers and are closer to what you would expect on a modern operating system.</p>
127+
<p>Each has its own subsection, below.</p>
128+
<ul>
129+
<li><a class="el" href="keymaps.html">Keyboard Layouts</a> </li>
130+
</ul>
131+
</div></div><!-- contents -->
132+
</div><!-- PageDoc -->
133+
</div><!-- doc-content -->
134+
<div id="page-nav" class="page-nav-panel">
135+
<div id="page-nav-resize-handle"></div>
136+
<div id="page-nav-tree">
137+
<div id="page-nav-contents">
138+
</div><!-- page-nav-contents -->
139+
</div><!-- page-nav-tree -->
140+
</div><!-- page-nav -->
141+
</div><!-- container -->
142+
<!-- HTML footer for doxygen 1.14.0-->
143+
<!-- start footer part -->
144+
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
145+
<ul>
146+
<li class="navelem"><a href="index.html">Retro Rocket OS Documentation</a></li><li class="navelem"><a href="user-guide.html">User Guide</a></li>
147+
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
148+
</ul>
149+
</div>
150+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/base16/dracula.min.css">
151+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
152+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
153+
<script src="rrbasic.js"></script>
154+
<link rel="preconnect" href="https://fonts.googleapis.com">
155+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
156+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@100&display=swap" rel="stylesheet">
157+
<script>
158+
$(function() {
159+
$(".fragment").each(function(i,node) {
160+
var $node = $(node);
161+
$node.children(":not(.line)").remove();
162+
var text = $node.text().trim();
163+
var lang = detect_language(text);
164+
$node.html("<pre><code class='" + lang + "'>" +
165+
text
166+
.replaceAll("&", "&amp;")
167+
.replaceAll("<", "&lt;")
168+
.replaceAll(">", "&gt;") +
169+
"</code></pre>");
170+
hljs.configure({
171+
languages: ['c', 'cpp', 'diff', 'basic', 'rrbasic', 'bash', 'sh', 'text'],
172+
ignoreUnescapedHTML: true
173+
});
174+
hljs.highlightAll(node);
175+
hljs.initLineNumbersOnLoad(node);
176+
$(node).find('.hljs-ln-n').each(function() {
177+
var n = $(this).attr('data-line-number');
178+
if (n) {
179+
this.textContent = n.padStart(2, '0');
180+
}
181+
});
182+
});
183+
$(".fragment").parent().parent().parent().parent().removeClass('doxtable');
184+
});
185+
</script><style>
186+
.hljs-ln-code, code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span {
187+
font-family: 'JetBrains Mono', monospace !important;
188+
font-size: 0.8rem !important;
189+
}
190+
.fragment {
191+
padding: 0 !important;
192+
margin-top: 0 !important;
193+
border: none !important;
194+
box-shadow: none !important;
195+
background: none !important;
196+
margin-bottom: 1em !important;
197+
}
198+
#nav-tree,
199+
div.fragment,
200+
pre.fragment {
201+
border: none !important;
202+
box-shadow: none !important;
203+
}
204+
.fragment .hljs {
205+
border: none;
206+
border-radius: 8px;
207+
margin-left: 1em;
208+
margin-right: 1em;
209+
}
210+
.hljs-ln-n::before {
211+
content: attr(data-line-number);
212+
padding-right: 1rem !important;
213+
}
214+
.hljs-ln-n {
215+
color: #2D4068;
216+
}
217+
.hljs-comment {
218+
color: var(--primary-color) !important;
219+
}
220+
</style>
221+
</body>
222+
</html>

docs/customisation.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
var customisation =
2+
[
3+
[ "Keyboard Layouts", "keymaps.html", null ]
4+
];

0 commit comments

Comments
 (0)