Do not mention tabs
Do not mention tabs
A coconut sapling growing on a tropical beach.
If you enjoy my work on ποΈ Isle.Computer, FPGAs, and RISC-V, consider sponsoring me: projectf.io/sponsor/
You get early access to source code and blog posts, and I send you a newsletter every month or so. Plus, you help me bring these open-source projects to life. βΊοΈ
Number guessing game. The user is asked to guess a number between 1-100 and is told at each step if their guess is too low or too high. Isle.Computer running in a Vertilator/SDL simulation window.
I've added more software to ποΈ Isle.Computer; all handwritten in bare-metal #riscv asm.The number guessing game exercises a surprising number of low-level features. Source code (on temp branch): github.com/projf/isle/t...
Chapter 6 features the FemtoRV "electron" RISC-V CPU. This CPU can multiply and divide all by itself! That comes in handy when converting integers to and from strings, amongst other things.
I've also got a whole blog post on the #riscv mul and div instructions: projectf.io/posts/riscv-...
"Sorry, I think you mean 'portentous', often confused by those with poor taste."
Verilator/SDL simulation running Isle hardware and software. The screen contents read: Hello, this is Isle.Computer demoing Unicode read line in RISC-V assembler. Open source Verilog hardware and bare metal RISC-V assembler. :) We have block elements in the character ROM.
Over the weekend I worked on ποΈIsle.Computer designs for chapter 6. I've now added the designs to a branch and you can already run the sim on your PC (Linux/Mac/Windows): github.com/projf/isle/t...
Please have a quick play and let me know how you get on. π
Or if wolves, goats, and cabbages are more your thing: en.wikipedia.org/wiki/File:Wo...
An animation of the wolf, goat and cabbage problem crossing a river
Sometimes Wikipedia gives you more than you dared hope (animated PNG). en.wikipedia.org/wiki/River_c...
# rand_pseudo - return a pseudorandom number using lfsr # a0: start of range (unsigned) # a1: end of range (unsigned) # return: pseudorandom number # rand_pseudo: li t6, SYS_DEV # check range is positive: ensure a1 β₯ a0 bleu a0, a1, 0f # skip if already in correct order mv t0, a0 mv a0, a1 mv a1, t0 0: # determine range: a2 = a1 - a0 + 1 sub a2, a1, a0 addi a2, a2, 1 beqz a2, 2f # branch if full range (a2 wraps to 0) # rejection threshold to remove bias neg t1, a2 # 2^32 - range remu t1, t1, a2 # threshold = 2^32 % range 1: # sample lfsr and check threshold lw t2, LFSR_32(t6) bltu t2, t1, 1b # reject if bias value (try again) # create random number in range remu t2, t2, a2 # divide by range add a0, t2, a0 # add start of range ret 2: # sample raw lfsr output for full range lw a0, LFSR_32(t6) ret
Linear-feedback shift registers (LFSR) are a classic way to generate pseudorandom numbers. I've written a #riscv asm function to return a random number using my lfsr hardware. This is part of the next instalment of ποΈ Isle.Computer.
Iβve been thinking about software on simple systems. How much it depends on trigonometry and randomness to give it life.
# sunshine on a rainy day
# makes my soul, makes my soul
# drip, drip, drip away
I found the old 35mm slide for the cover for Neuromancer and had it scanned in for your pleasure. Enjoy!
Sign in window of shop reads: !!!STOP!!! GIVING CATS !!!TREATS!!! DONT PUT HAND THROUGH LETTERBOX
This Hastings shop wants you to STOP! π Though I'm now thinking of @gossjam.bsky.social.
I searched for "gnu assembler directives" (without quotes) and the top match on DuckDuckGo and Google is: ftp.gnu.org/old-gnu/Manu...
Looks promising apart from the fact it's from 1994! Back when my computer was an Amiga 1200 and Linux 1.0 was released.
Current docs: sourceware.org/binutils/doc...
An image showing Scotland with Aberdeen Airport marked and a sunny spell symbol
After 21 days without sunshine, Aberdeen recorded its first sunshine since 21st January this afternoon π
It is rendered in hardware. The current design only has 128 8x16 glyphs in rom. I'm still working on how I handle the full GNU Unifont with a mix of full (16x16) and half-width (8x16) glyphs. I will share my findings.
Isle.Computer running on ULX3S dev board connected to computer monitor over HDMI. The text on the monitor reads: Isle.Computer Hello, hardware friends. Demos look better on a dev board :) Thanks to my sponsors.
And a quick lunchtime shot of ποΈ Isle.Computer running on #ULX3S.
Simulation may be practical for software dev, but it feels so much better seeing it running on real hardware. This is #riscv asm decoding UTF-8 sent over UART to Isle hardware running on #fpga. Verilog and asm written by hand. π
Verilator/SDL simulation window on macOS reads: Isle.Computer Hello, this is a 115200 baud test on Isle Computer. We also have delete and carriage return. Next up there's buffered input with a fifo...
I'm beavering away on practical input and output with UTF-8 on Isle.Computer. Text is a wonderful thing in its own right and also decidedly handy for debugging. The designs for the next chapter aren't too far away. #FPGA
You might be thinking, but Flux, if this is Unicode, why aren't you showing some cool Katakana, a little Hangul, or an emoji?
Alas, there's more to do, including full-width characters for text mode and larger storage to hold GNU Unifont (we currently only have basic Latin and block elements).
Verilator/SDL simulation running on macOS. The window displays the following text in orange on a dark background "ββ Hello, World! UTF-8 UART ββ".
Unicode UART goodness for ποΈ Isle #FPGA Computer.
SDL key presses to UART via C++, sent to Isle hardware running under Verilator. The Isle #riscv asm software decodes the UTF-8 for display, including β (U+259A).
We get Unicode user input in Verilator using same mechanism as physical dev boards. βΊοΈ
I'm trying trailing underscore style, though I am seeing this form of message quite a bit. π
error: use of undeclared identifier 'data_idx'; did you mean 'data_idx_'?
It's easy to make someone's day.
When someone shares something beautiful or cool they've made, don't just favourite, take 30 seconds to write a comment. βοΈ
Trite? Yes. But we still need reminding.
Well thatβs one way to lose these walking blues. Diamonds on the soles of our shoes.
What do C++ devs think of Google's convention of naming class data members with a trailing underscore? google.github.io/styleguide/c...
uint32_t cnt_ = 0;
This looks odd to me, but it's been a while since I've done much C++. Verilator simulation is giving me cause to get back into it a bit.
ULX3S PCB connected to computer monitor showing βHello, World! This is an Isle FPGA Computer UART test.β
Work on ποΈ Isle #FPGA computer input chapter continues. Here Iβm testing UART with #ULX3S dev board.
βWhile the RISC-V specification provides strong security primitivesβ¦ implementations consistently choose insecure defaultsβ¦ The decisions vendors make todayβ¦ will be baked into billions of chips we cannot patch.β #riscv #fosdem
fosdem.org/2026/schedul...
βWhile the tradition remains popular in the 21st century, studies have found no consistent association between a groundhog seeing its shadow and the subsequent arrival time of spring-like weather.β β Wikipedia
Saying a Makefile link command out loud is strange: "dash R dollar caret, dash O dollar snail..." π
I guess that's an AT not a snail, but after the carrot (caret) I unconsciously chose to say snail.
A thoughtful and informative article from Wiki Education on LLM use in #Wikipedia: wikiedu.org/blog/2026/01...
βOur fundamental conclusion about generative AI is: Wikipedia editors should never copy and paste the output from generative AI chatbots like ChatGPT into Wikipedia articles.β
I realised I never posted a video of the advanced asm animation introduced in this chapter.