πŸ’Ύ Archived View for thingvellir.net β€Ί atom.xml captured on 2024-12-17 at 11:34:56.

View Raw

More Information

-=-=-=-=-=-=-

<?xml version='1.0' encoding='utf-8'?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>thingvellir.net Þog</title><link href="https://thingvellir.net/atom.xml" rel="self" /><link href="https://thingvellir.net/" /><entry><link href="https://thingvellir.net/log/2024-12-12.html" /><id>urn:uuid:fb6dea11-6998-54b5-a29a-ff24dfc19408</id><published>2024-12-12T00:00:00.000000+10:00</published><updated>2024-12-12T13:12:51.193126+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>OpenXR for Overte</h1><p>I've been building on top of Lubosz Sarnecki's OpenXR PR for Overte to bring it up to an MVP state.</p><p>Today I got general controller inputs working using OpenXR actions duct-taped to Overte's in-desperate-need-of-cleanup input system, and (from my limited testing with a Vive and the Monado qwerty driver) it's looking pretty good!</p><p>Things that still need attention are:</p><ul><li>Hand-controller offset (better than it was, though still slightly wrong)</li><li>Head-HMD offset (the HMD views seems to be pushed too far back through the avatar's head)</li><li>Overlay flickering, things in the HUD layer sometimes flicker or disappear (no clue as to what causes this)</li></ul><p>I knew barely anything of OpenXR programming before I joined the Overte project, and I originally got into the OpenXR plugin because I couldn't get OpenComposite to cooperate with either VRChat or Overte. About two months later, I've both figured out what was making OpenComposite upset with Overte, and I've been slowly bringing the OpenXR plugin closer to being ready for general use (at least on Linux).</p><p><a href="https://overte.org/">Overte</a></p><p><a href="https://github.com/overte-org/overte/pull/1129">Overte PR #1129 "Add support for OpenXR"</a></p><p><a href="https://thingvellir.net/git/overte/">My git branch built on Lubosz's work</a></p></div></content><title>OpenXR for Overte</title></entry><entry><link href="https://thingvellir.net/log/2024-11-03.html" /><id>urn:uuid:d1c9d41b-b700-5e21-a8c1-35cefe4b1228</id><published>2024-11-03T00:00:00.000000+10:00</published><updated>2024-11-03T22:45:18.684462+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>Atom!</h1><p>I've added support for generating Atom feeds with my site generator tool. Maybe I'll post a bit more often?</p><p>I'm using the xml.eetree.ElementTree library included with Python 3. I've tried to test it how I can, but if you spot some weirdness let me know!</p></div></content><title>Atom!</title></entry><entry><link href="https://thingvellir.net/log/2024-08-11.html" /><id>urn:uuid:c243c3a8-fe0c-5d8d-9f34-d189e3e65100</id><published>2024-08-11T00:00:00.000000+10:00</published><updated>2024-11-03T22:06:34.446040+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2024-08-11 β€” Gender &amp; Language</h1><p>I'm non-binary. I don't identify closely with either masculinity or femininity and I'm not a fan of being pushed into picking a side of a binary I'm have to pretend I'm a part of. I have an  interest in languages and it saddens me seeing debates around the usage of various words in languages that have a grammatical gender system labeled with "male" and "female".</p><p>Unfortunately, even languages like Deutsch, Nederlands, and English that have grammatically "neuter" cases, which would initially be an obvious choice for gender neutral-language, many speakers feel like referring to people with them is dehumanising. In many languages, the "neuter" case is often an "inanimate" case, with "male" and "female" being two branches of an "animate" case. In most European languages, this system was inherited from an ancient parent language that was never written down but has been reconstructed in detail using the child languages that were written down.</p></div></content><title>The Þog of 2024-08-11 β€” Gender &amp; Language</title></entry><entry><link href="https://thingvellir.net/log/2023-12-12.html" /><id>urn:uuid:346d0e11-501b-5ea6-8ad4-a159397169e3</id><published>2023-12-12T00:00:00.000000+10:00</published><updated>2024-11-03T22:06:24.766133+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2023-12-12 β€” Phonology Analysis of Catperson English</h1><p>This analysis overlaps slightly with the speech of dogpeople and some human voice actors.</p><p>(This is technically just the phonology, as I'm not aware of any catperson English dialect that differs to standard English in places other than just the phonology.)</p><h2>Common Phonology Features</h2><ul><li>Rhoticism, usually expressed as [w] or [Κ‹] (sometimes [wΛ ]?)</li><li>Palatalisation in many, but not all, positions, especially after /n/.</li><li>All vowels are usually a bit fronted. Fully-back vowels are extremely rare.</li><li>English-speaking catpeople seem to usually speak in their own distinct dialects. It's very rare (in my experience) for a catperson to speak with RP or GenAm English. Expressions of 'bath' with a back vowel /bɑːθ/ or 'water' with tap or a rhotic /wΙ‘ΛΙΎΙš/ seem almost non-existent.</li><li>[ΙΉ], [w], [Κ‹], or non-rhotic diphthong can appear in words ending with a rhotic, depending on the speaker.</li></ul><h2>Less Common Phonology Features</h2><ul><li>Lambdacism, usually only in non-onset syllable positions. Some of the expressions I've heard (using the word 'lollipop' as an example) are [lÀːlipΚ°ap], [wΙ’wipΚ°ap], and [ΚŽΙ”ΚŽipʰʌ̞p].</li><li>Expressions of /t/, /d/ as [tΜͺΚ°]/[dΜͺΚ°], [t̘ʰ]/[d̘ʰ], or [tΙ•]/[dΚ‘].</li><li>Expressions of /ΞΈ/, /Γ°/ as [tΚ°]/[dΚ°].</li><li>Expressions of /Κƒ/, /Κ’/ as [s]/[z].</li><li>Expressions of /v/ as [Κ‹].</li><li>Expressions of /s/, /z/, /Κƒ/. /Κ’/ all as [Ι•]/[Κ‘].</li><li>Expressions of /j/ as [ʝ]</li><li>Expressions of /w/ as [Κ‹] and rarely [v]</li><li>Post-rounding of some consonants.  e.g. 'pool' expressed as [pʰʷʉːwʎ].</li><li>Some vowels expressed nasally? (I'm not 100% sure if that's what this is)</li></ul><h1>Sentence Examples</h1><h2>"My hovercraft is full of eels." (English)</h2><h3>MY AUSTRALIAN IDIOLECT</h3><p>[mɒ̝Ιͺ h̞ovɐkˣɹɑːft ɘz fʊɫ Ι™v ijΙ™Ι«z]</p><h3>GenAm</h3><p>[mΙ‘i hΙ”Μžvɚkɹæ̝͑æːft Ιͺ̈z fɔ̝ɫ Ι™v iːɫz]</p><h3>CATPERSON RECONSTRUCTION</h3><p>[mÀʝ hΙ”ΜˆvΙ™wkʋæ̝͑æːft ΙͺΚ‘ fʊwΛ Ι™v iΛΚΙ™Ν‘ΚŠΚ‹Κ‘]</p><h2>"luka len pi moli la, o pini e awen sina" (toki pona)</h2><h3>MY IDIOLECT (as I naturally speak, without extra effort)</h3><p>[lΙ―kʰɐ lΙ›n pΚ°i mΙ”li lΓ€ Ι” pΚ°ini Ι› Γ€wΙ›n sinɐ]</p><h3>CATPERSON RECONSTRUCTION</h3><p>[ʎykΚ°a̝ ʎen pΚ°i moʎi ʎa̝ Ι” pΚ°iΙ²i e a̝weΙ² Ι•ina̝]</p><h2>"De wind blies de stapel bladeren omver." (Nederlands)</h2><h3>MY IDIOLECT (a non-native beginner, as it would naturally occur to me without thought)</h3><p>[dΚ°Ι™ Κ‹Ιͺnt bliːs dΚ°Ι™ stɐːpΚ°Ι™Ι« blÀːdΙ™ΚΜžΙ›Μƒ Ι”mfeΙΎ]</p><h3>CATPERSON RECONSTRUCTION</h3><p>[dΚ°a Κ‹Ιͺnd bΚ‹iːɕ dΚ°a Ι•ta̝pʰɜw bʎaːdΙΚ‹ΙœΙ² Ι”mveΚ‹]</p></div></content><title>The Þog of 2023-12-12 β€” Phonology Analysis of Catperson English</title></entry><entry><link href="https://thingvellir.net/log/2023-10-21.html" /><id>urn:uuid:556a709a-379d-563a-96b3-12a64c515a37</id><published>2023-10-21T00:00:00.000000+10:00</published><updated>2024-11-03T22:06:21.459499+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2023-10-21 β€” If Modern English was Directly Descended from West Saxon OE</h1><p>NOTE: I'm not an expert in OE or linguistics. My 'reconstructions' are purely on gut feeling with some basic knowledge of the sound shifts between OE and NE. I'm sure to have made mistakes or uneducated guesses in places. Please let me know if you have any corrections!</p><p>Modern English derives from the Mercian dialect of early middle English, which in its older form, was different in a few ways from the literary standard West Saxon dialect of old English. This lead to a few words in modern English which seem unrelated to the standard OE ones.</p><h2>Word Sound Differences</h2><p>Below is a list of terms in modern English, the OE it came from, the West Saxon OE equivalent, and what the West Saxon word would look like with modern spelling and sound rules.</p><ul><li>calf ← cΓ¦lf | Δ‹ealf β†’ chalve</li><li>lay (setting something down) ← leΔ‘an | leΔ‹Δ‘an β†’ ledge</li><li>lie (i.e. on a bed) ← *liΔ‘an | liΔ‹Δ‘e β†’ lidge</li><li>sleep ← slΔ“pan | slΗ£pan β†’ slap</li><li>milk ← *milc | meolc β†’ melk (compare Dutch melk)</li><li>river ← riviere (old French) | Δ“a β†’ aa (cognate with Swedish Γ₯, archaic Dutch a)</li></ul></div></content><title>The Þog of 2023-10-21 β€” If Modern English was Directly Descended from West Saxon OE</title></entry><entry><link href="https://thingvellir.net/log/2023-04-23.html" /><id>urn:uuid:34980400-c62e-50cd-9f13-1df994a0ee7f</id><published>2023-04-23T00:00:00.000000+10:00</published><updated>2024-11-03T22:05:44.033193+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2023-04-23 β€” Voot, Nooby Artlang #1</h1><h2>Phonology</h2><h3>Consonants</h3><pre>β”Œβ”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”
β”‚   β”‚ n β”‚   β”‚   β”‚   β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
β”‚ p β”‚ t β”‚   β”‚ k β”‚   β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
β”‚ Κ‹ β”‚ s β”‚(Γ§)β”‚x Ι£β”‚ ʍ β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€
β”‚   β”‚ ΙΎ β”‚   β”‚   β”‚   β”‚
β””β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”˜
</pre><ul><li>/Γ§/ is an allophone of /x/ when pronounced after /i/</li><li>/v/ is an allophone of /Κ‹/ for some speakers</li><li>/ʍ/ can be pronounced [hΚ·], [xΚ·] or [hw]</li></ul><h3>Vowels</h3><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚i, iː│o, oː│
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚a, aː│     β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre><p>These allophones also apply, to both short and long vowels:</p><ul><li>/Ιͺ/ is an allophone of /i/</li><li>/ʊ/ is an allophone of /o/</li><li>/Ι‘/ is an allophone of /a/</li></ul><h3>Rules</h3><ul><li>(C)(C)V(C)(C) syllable structure</li><li>/x/ cannot appear in a segment of stress containing /Ι£/</li><li>/ΙΎ/ cannot appear at the start or end of a word</li><li>/ʍ/ must be at the start or end of a word</li><li>/Κ‹/ cannot appear at the end of a word</li></ul><h2>Orthography</h2><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚ IPA β”‚Orth.β”‚ IPA β”‚Orth.β”‚
β•žβ•β•β•β•β•β•ͺ═════β•ͺ═════β•ͺ═════║
β”‚ /n/ β”‚  n  β”‚ /t/ β”‚  t  β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /s/ β”‚  s  β”‚ /x/ β”‚  h  β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /k/ β”‚  c  β”‚ /Ι£/ β”‚  g  β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /Κ‹/ β”‚  v  β”‚ /p/ β”‚  p  β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /ΙΎ/ β”‚  d  β”‚ /hΚ·/β”‚  w  β”‚
β•žβ•β•β•β•β•β•ͺ═════β•ͺ═════β•ͺ═════║
β”‚ /i/ β”‚  i  β”‚ /iː/β”‚  ii β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /o/ β”‚  o  β”‚ /oː/β”‚  oo β”‚
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ /a/ β”‚  a  β”‚ /aː/β”‚  aa β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre><h2>Grammar</h2><ul><li>SOV word order</li><li>Stress falls on the first syllable with a long vowel, or the first syllable if there are none</li><li>Plural forms are formed by suffixing ⟨on⟩, e.g. ⟨Wos⟩ β†’ ⟨Woson⟩</li><li>The progressive aspect is formed by suffixing with ⟨ig⟩, e.g. ⟨gan⟩ β†’ ⟨ganig⟩</li><li>The perfective aspect is formed by prefixing with ⟨ga⟩, e.g. ⟨gan⟩ β†’ ⟨gagan⟩</li><li>The future aspect is formed by prefixing with ⟨viv⟩, e.g., ⟨gan⟩ β†’ ⟨vivgan⟩</li><li>Agent nouns are formed by suffixing with ⟨iit⟩, e.g., ⟨gan⟩ β†’ ⟨ganiit⟩</li><li>Adjectives are negated by prefixing with ⟨na⟩, e.g., ⟨siiga⟩ β†’ ⟨nasiiga⟩</li><li>If a suffix adds a vowel to a word already ending in a vowel, the suffix replaces the final vowel.</li></ul><h2>Vocabulary</h2><pre>Ortho.     Broad      Narrow        Meaning/Section

                                    Pronouns
⟨hi⟩       /xi/       [ˈxi]         me, myself, I, 1st person singular pronoun
⟨higon⟩    /xiɣon/    [ˈxiɣːˌon]    us, we, 1st person plural pronoun
⟨to⟩       /to/       [ˈto]         you, 2nd person familiar singular pronoun
⟨tohon⟩    /toxon/    [ˈtoxːˌon]    y'all, 2nd person familiar plural pronoun
⟨woo⟩      /ʍoː/      [ˈʍoː]        you, 2nd person formal singular pronoun
⟨vii⟩      /Κ‹iː/      [ΛˆΚ‹iː]        it, 3rd person singular pronoun
⟨viigon⟩   /Κ‹iːɣon/   [ΛˆΚ‹iːɣon]     they, 3rd person plural pronoun
⟨viipi⟩    /Κ‹iːpi/    [ΛˆΚ‹iːpi]      this
⟨viipipon⟩ /Κ‹iːpipon/ [ΛˆΚ‹iːpipːon]  these
⟨viic⟩     /Κ‹iːk/     [ΛˆΚ‹iːk]       that
⟨viicon⟩   /Κ‹iːkon/   [ΛˆΚ‹iːkːon]    those

                                    Verbs
⟨gan⟩      /ɣan/      [ˈɣan]        to travel by own feet, to walk
⟨sogan⟩    /soɣan/    [ˈsoˌɣan]     to travel with assistance, to ride
⟨caag⟩     /kaːɣ/     [ˈkaːɣ]       to swim
⟨aac⟩      /aːk/      [ˈaːk]        to use, to be aided by
⟨haatsa⟩   /xaːtsa/   [ˈxaːtsa]     to call out, to give a name
⟨tisc⟩     /tisk/     [ˈtisk]       to hold, to contain, to protect
⟨voot⟩     /Κ‹oːt/     [ΛˆΚ‹oːt]       to speak, to write
⟨cooca⟩    /koːka/    [ˈkoːka]      to cook
⟨ocoo⟩     /okoː/     [ˌoˈkoː]      to search
⟨xant⟩     /xant/     [ˈxant]       to hunt
⟨cist⟩     /kist/     [ˈkist]       to kill

                                    Nouns (capitalised in the orthography)
⟨Wos⟩      /ʍos/      [ˈʍos]        home, preferred dwelling place
⟨Hot⟩      /xot/      [ˈxot]        building
⟨Asag⟩     /asaɣ/     [ˈa.saɣ]      place, area, zone
⟨Poon⟩     /poːn/     [ˈpoːn]       plant, bush, shrub
⟨Poodas⟩   /poːɾas/   [ˈpoːˌɾas]    tree
⟨Todoon⟩   /toɾoːn/   [ˌtoˈɾoːn]    grass, moss
⟨Pas⟩      /pas/      [ˈpas]        fruit, vegetable, edible plant part
⟨Tii⟩      /tiː/      [ˈtiː]        animal, creature
⟨Vootiit⟩  /Κ‹oːtiːt/  [ΛˆΚ‹oːtiːt]    speaker of Voot, person
⟨Wiit⟩     /ʍiːt/     [ˈʍiːt]       scrap, waste
⟨Aga⟩      /aɣa/      [ˈa.ɣa]       mistake, accident

                                    Adjectives
⟨cada⟩     /kaɾa/     [ˈkaɾa]       NOUN-colored
⟨siic⟩     /siːk/     [ˈsiːk]       NOUN-like
⟨tagi⟩     /taɣi/     [ˈta.ɣi]      dry, dead
⟨sat⟩      /sat/      [ˈsat]        wet
⟨siiga⟩    /siiɣa/    [ˈsiː.ɣa]     tasty, sweet
⟨ast⟩      /ast/      [ˈast]        old, derelict (for inanimate objects)
⟨atsa⟩     /atsa/     [ˈaˌtsa]      old (for people and creatures)

                                    Auxillaries/Particles/Adverbs
⟨i⟩        /i/        [ΛˆΚ”i]         distress marker
⟨ca⟩       /ka/       [ˈka]         what
⟨po⟩       /po/       [ˈpo]         for
</pre><h3>Idioms</h3><pre>Orthography  Literal              Translation

⟨po ca?⟩     {for what}            Why?
⟨i!⟩         (distress, loud)      Look out!
⟨i...⟩       (distress, sad)       Aw...
⟨ca?⟩        {for}                 Hm? (Requesting the speaker to repeat)

</pre><h2>Examples</h2><p>The examples below are written in the order of orthography, phonetic notation, interlinear gloss, literal meaning, and colloqueal meaning in English, if applicable.</p><pre> ⟨To   hi   Aat   vivhaatsig.⟩
[ˈto   xi  ˈaːt  ΛŒΚ‹iΚ‹ΛˆxaːtsiΙ£]
  2PS  1PS  NAME  FUT-PRG-call
  You are going to call me Aat.
</pre><pre> ⟨Higon  to  gahaatsa  i!    To  gagan  po  ca?⟩
[ˈxi.Ι£on to ˌɣaˈxaːtsa Κ”i | ˈto ˈɣa.Ι£an po ˈka]
  1PP 2PS PRF-call DISTRESS, 2PS PRF-walk for QUESTION
  We called out for you! Where were you?
</pre><h2>Changelog</h2><ul><li>2023-04-23: Start, document created</li><li>2023-04-27: Initial incomplete draft posted</li><li>2023-04-27: Corrected orthography errors, added more vocab</li><li>2023-04-30: Allow [hw] for /ʍ/</li></ul></div></content><title>The Þog of 2023-04-23 β€” Voot, Nooby Artlang #1</title></entry><entry><link href="https://thingvellir.net/log/2023-03-07.html" /><id>urn:uuid:ae162739-d727-5325-b5fa-3b0ee1541422</id><published>2023-03-07T00:00:00.000000+10:00</published><updated>2024-11-03T22:06:11.532928+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2023-03-07 β€” Another Fantasy ISA</h1><p>This is another yet-unnamed fantasy CPU instruction set inspired by RISC-V, MIPS, and Professor Bruce Jacob's RiSC-16. It has fixed-length 16 bit instructions, 7 general purpose registers, and a zero register.</p><h2>Instruction Encoding</h2><p>The eight registers directly available contain 16 bit, two's-compliment integers. The zero register always returns 0, and all writes to it are ignored. Whether an instruction's immediate value is interpreted as signed or unsigned depends on the opcode.</p><p>A fault will be triggered if the program counter or a SW/LW is not word-aligned.</p><figure><figcaption>RRR Encoding</figcaption><pre>F   E   D   C   B   A   9   8   7   6   5   4   3   2   1   0  Bit
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 0 β”‚    rs2    β”‚    rs1    β”‚    rd     β”‚      opcode       β”‚  RRR Type
β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>RRI Encoding</figcaption><pre>F   E   D   C   B   A   9   8   7   6   5   4   3   2   1   0  Bit
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚     imm5      β”‚    rs1    β”‚    rd     β”‚      opcode       β”‚  RRI Type
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>RI Encoding</figcaption><pre>F   E   D   C   B   A   9   8   7   6   5   4   3   2   1   0  Bit
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚           imm8            β”‚    rd     β”‚      opcode       β”‚  RI Type
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
</pre></figure><h2>Opcodes</h2><figure><figcaption>Arithmetic operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚00000β”‚00β”‚RRRβ”‚  ADDβ”‚ rd := rs1 + rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00001β”‚01β”‚RRRβ”‚  SUBβ”‚ rd := rs1 - rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00010β”‚02β”‚RRRβ”‚  SLLβ”‚ rd := rs1 &lt;&lt; rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00011β”‚03β”‚RRRβ”‚  SRLβ”‚ rd := rs1 &gt;&gt;&gt; rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00100β”‚04β”‚RRRβ”‚  SRAβ”‚ rd := rs1 &gt;&gt; rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00101β”‚05β”‚RRIβ”‚  ADIβ”‚ rd := rs1 + (signed)imm5
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00110β”‚06β”‚RI β”‚  LUIβ”‚ rd := imm8 &lt;&lt; 8
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚00111β”‚07β”‚RI β”‚  LLIβ”‚ rd := (rd &amp; 0xFF00) | imm8
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>Memory operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚01000β”‚08β”‚RRIβ”‚   SWβ”‚ *(u16)(rd + imm5) := rs1
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚01001β”‚09β”‚RRIβ”‚   LWβ”‚ rd := *(u16)(rs1 + imm5)
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚01010β”‚0Aβ”‚RRIβ”‚   SBβ”‚ *(u8)(rd + imm5) := rs1 &amp; 0xFF
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚01011β”‚0Bβ”‚RRIβ”‚   LBβ”‚ rd := *(i8)(rs1 + imm5)
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚01100β”‚0Cβ”‚RRIβ”‚  LBUβ”‚ rd := *(u8)(rs1 + imm5)
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚01101β”‚0Dβ”‚   β”‚     β”‚
β”‚01110β”‚0Eβ”‚   β”‚     β”‚ Reserved
β”‚01111β”‚0Fβ”‚   β”‚     β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>Bit operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚10000β”‚10β”‚RRRβ”‚  ANDβ”‚ rd := rs1 &amp; rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10001β”‚11β”‚RRRβ”‚   ORβ”‚ rd := rs1 | rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10010β”‚12β”‚RRRβ”‚  XORβ”‚ rd := rs1 ^ rs2
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>Comparison operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚10011β”‚13β”‚RRRβ”‚   EQβ”‚ rd := rs1 == rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10100β”‚14β”‚RRRβ”‚   GTβ”‚ rd := (signed)rs1 &gt; (signed)rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10101β”‚15β”‚RRRβ”‚   GEβ”‚ rd := (signed)rs1 &gt;= (signed)rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10110β”‚16β”‚RRRβ”‚  GTUβ”‚ rd := (unsigned)rs1 &gt; (unsigned)rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚10111β”‚17β”‚RRRβ”‚  GEUβ”‚ rd := (unsigned)rs1 &gt;= (unsigned)rs2
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>Jump operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚11000β”‚18β”‚RRRβ”‚  JLRβ”‚ rd := pc + 2; pc := rs1 + (signed)rs2
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11001β”‚19β”‚RI β”‚  BNSβ”‚ if rd == 0 then pc := pc + (signed)(imm8 * 2)
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11010β”‚1Aβ”‚RI β”‚   BSβ”‚ if rd != 0 then pc := pc + (signed)(imm8 * 2)
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11011β”‚1Bβ”‚   β”‚     β”‚ Reserved
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><figure><figcaption>Special operations</figcaption><pre>β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚11100β”‚1Cβ”‚RI β”‚   SFβ”‚ csr[imm8] := rd
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11101β”‚1Dβ”‚RI β”‚   LFβ”‚ rd := csr[imm8]
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11110β”‚1Eβ”‚RI β”‚  SYCβ”‚ System call
β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”Όβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚11111β”‚1Fβ”‚RI β”‚  BRKβ”‚ Break to debugger/environment
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜
</pre></figure><h2>Assembler Syntax</h2><figure><figcaption>Example assembler program</figcaption><pre>; routine that prints 'hello, world\n' to an imaginary uart
.org $0100
Start:
	li  r1, Hello
	add r2, r0, 13
	add r3, r0, 4  ; the imaginary uart's address

@Loop:
	lbu r4, r1, 0
	sb  r1, r4, 0
	adi r1, r1, 1
	adi r2, r2, -1
	eq  r4, r2, r0
	bns r4, @Loop

	brk  $00


.org $0200
Hello:
	.ascii "hello, world"
	.byte $0a
</pre></figure><figure><figcaption>Pseudo-ops and their expansions</figcaption><pre>β”Œβ”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚nopβ”‚     add r0, r0, r0β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚notβ”‚       sub A, B, r0β”‚
β”œβ”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚li β”‚lui A, IMM &amp; 0xFF00β”‚
β”‚   β”‚lli A, IMM &amp; 0x00FFβ”‚
β””β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
</pre></figure></div></content><title>The Þog of 2023-03-07 β€” Another Fantasy ISA</title></entry><entry><link href="https://thingvellir.net/log/2023-01-04.html" /><id>urn:uuid:46d41af7-22f7-5a56-babb-8e15ddace30f</id><published>2023-01-04T00:00:00.000000+10:00</published><updated>2024-11-03T22:06:02.683013+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2023-01-04 β€” Public-Domain Projects I Appreciate</h1><p><a href="https://prng.di.unimi.it/xoshiro256plusplus.c">Xoroshiro256++ β€” A fast, simple PRNG algorithm.</a></p><p><a href="https://github.com/KdotJPG/OpenSimplex2">OpenSimplex2 β€” A set of reasonably fast, relatively simple algorithms for generating gradient noise. Similar to Perlin or Simplex noise, but with less artifacts.</a></p><p><a href="https://landley.net/toybox/">toybox β€” A collection of Unix-like command-line utilities, including a basic shell and text editor. It also includes some handy libraries, such as: a UTF-8 parser, a Base64 codec, a DEFLATE codec, a LZMA decoder, a bzip2 decoder, and a TTY helper library.</a></p><p><a href="https://github.com/hboetes/mg">mg β€” A basic clone of the GNU Emacs text editor, maintained by the OpenBSD project. This link points to a cross-platform port.</a></p><p><a href="https://github.com/cnlohr/mini-rv32ima">mini-rv32ima β€” A single-header-library for emulating 32-bit RISC-V, capable of booting Linux.</a></p></div></content><title>The Þog of 2023-01-04 β€” Public-Domain Projects I Appreciate</title></entry><entry><link href="https://thingvellir.net/log/2022-06-04.html" /><id>urn:uuid:bd7be4d2-b3ac-52f5-bf59-e15c9b06c1ad</id><published>2022-06-04T00:00:00.000000+10:00</published><updated>2024-11-03T22:05:58.099724+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2022-06-04 β€” Fake S-Expression Systems Language</h1><p><a href="https://thingvellir.net/log/2022-06-04_tok.html">sina toki e toki pona la, o lukin e ni!</a></p><p>Lisp and Scheme weren't designed for writing bare-metal programs on the type of computers we have today. Disassembled WebAssembly text is sort of close, but what would the point be to writing platform-specific assembly with parentheses everywhere?</p><p>Let's ruin Lisp by turning it into Worse C. Thankfully, this is only theoretical, so it won't cause harm by having programmers attempt to actually use this.</p><h2>Informal syntax and grammar</h2><ul><li>Everything is surrounded with parentheses. Addition is written as `(+ 1 1)`.</li><li>kebab-case is permitted in identifiers; snake_case should be used for library functions interfacing with C or Rust. Identifiers are case-sensitive.</li><li>Strings are delimited by `"`. They are always encoded as UTF-8 `[]u8`.</li><li>Single-quotes `'` delimit a single Unicode codepoint, encoded as UTF-32 `u32`.</li><li>Type information is written as `identifier.type`, with no whitespace. Types are not inferred automatically. `.&amp;type` indicates an immutable pointer, and `.*type` indicates a mutable one. `.[]type` indicates a fat-pointer array that has a fixed length. `identifier.` with nothing after the dot indicates the unit type that has no storage or return value.</li><li>`int` and `uint` are aliases for the platform's native integer types. On 32-bit platforms, these are `i32` and `u32`. On 64-bit platforms they are `i64` and `u64`.</li><li>`real` is an alias to the platform's native floating point type. This will be `f32` on most systems.</li><li>`bool` is a specialized form of `u8`. `True` and `False` are the only valid values a variable of this type can have.</li></ul><h2>Builtins</h2><ul><li>`+ - * /` β€” Addition, subtraction, multiplication, division `(+ 1 2)`</li><li>`^` β€” Pointer dereference, array access with offset `(^ var [offset])`</li><li>`&amp;` β€” Address of variable `(&amp; var)`</li><li>`.` β€” Structure member access `(. member var)`</li><li>`:` β€” Variable assignment `(: var value)`</li><li>`not and or xor` β€” Bitwise and boolean operations `(or a b)`</li><li>`fn` β€” Locally-visible function `(fn (name.type arg.type) ...)`</li><li>`fn.export` β€” Externally-visible function</li><li>`fn.import` β€” Declare externally linked function, no body permitted</li><li>`let` β€” Scope-local variable binding `(let (name.type value))`</li><li>`ret` β€” Return from function `(ret [value])`</li><li>`if` β€” Only runs first body if first argument is equivalent to True. Otherwise, runs second body if supplied. `(if expr true-body [false-body])`</li><li>`while` β€” Repeatedly evaluates body while first argument is equivalent to True. `(while expr ...)`</li><li>`trace` β€” Debugging aid, displays arguments space-separated `(trace "hello")`</li></ul><h2>Examples</h2><h3>"Hello world!"</h3><pre>(fn.export (main.)
  (trace "Hello world!"))
</pre><h3>Array and single characters</h3><pre>(fn.export (main.)
  (let (hello.[]u32 'h 'e 'l 'l 'o))
  (trace hello))
</pre><h3>Calculate the magnitude of a 3-dimensional vector</h3><pre>(fn (vec3-length.real x.real y.real z.real)
  (ret (sqrt (+ (* x x) (* y y) (* z z))))

(fn.export (main.)
  (trace (vec3-length 0.0 0.5 1.0))) ; -&gt; ~1.118
</pre><h3>Calculate the length of a C-style NUL terminated string</h3><pre>(fn (my-strlen.uint str.&amp;u8)
  (let (i.uint 0))
  (while (^ str i) (: i (+ i 1)))
  (ret count))

(fn.export (main.)
  (trace (my-strlen "How long is this?"))) ; -&gt; 17
</pre></div></content><title>The Þog of 2022-06-04 β€” Fake S-Expression Systems Language</title></entry><entry><link href="https://thingvellir.net/log/2022-05-29.html" /><id>urn:uuid:9b4d9f61-c970-5839-be9a-7fb153e19816</id><published>2022-05-29T00:00:00.000000+10:00</published><updated>2024-11-03T22:05:51.743118+10:00</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><h1>The Þog of 2022-05-29 β€” Enkalets</h1><p>It's fun to speak English Incorrectly, so let's ruin it.</p><h2>Phonology</h2><p>Vanilla English has too many weird noises. Let's snip all of those away.</p><h3>Consonants</h3><figure><figcaption>IPA consonant table</figcaption><pre>m	n
p	t			k
f		s			h
		z
		l		w
</pre></figure><h3>Vowels</h3><figure><figcaption>IPA vowel table</figcaption><pre>		u
e	a
</pre></figure><p>That's it. No more /i/ or /Γ°/. All of those sounds are written the same as the IPA symbols. You might notice some existing words have conflicting pronunciations with this phoneme set; We'll have fun resolving that later.</p><p>(Note: I removed /i/ and the rhotic /ΙΉ/ simply because they feel ugly. /o/ was omitted to have a fun three-vowel system.)</p><h2>Grammar &amp; Syntax</h2><p>The syllable structure is (C)V(C)(C) and the word order is SVO. Not too far from the unbridled English mess, but still enough to have fun.</p><p>The suffix -s always marks possession and the suffix -z always marks plurality. For existing English words that end in /s/ or /z/, those sounds are removed. The -n suffix marks a word as being an adjective rather than a noun. If the word ends with a consonant, this becomes -in.</p><p>There is no tense or grammatical gender.</p><h3>Examples</h3><p>In each block, the first line is Enkalets, second is transliteration, and third is the equivalent in English.</p><ul><li>1st, first person, "me", "I"</li><li>2nd, second person, "you"</li><li>3rd, third person, "they", "it"</li><li>-POS, posessive, "-'s"</li></ul><pre>mes pesen walkin.
1st-POS person moving
My walking friend.
</pre><pre>Wilams kukin kan leta
William-POS cooking going later
William's cooking will happen later.
</pre><pre>mes want te hethe retkalan.
1st-POS want the hair red
I want my hair reddened.
</pre></div></content><title>The Þog of 2022-05-29 β€” Enkalets</title></entry></feed>