A simple golang CP/M emulator
Steve Kemp's Blog
by
1w ago
A couple of years ago I wrote a simple text-based adventure game in Z80 assembly language, to amuse our child. The game was written for CP/M, because that is the operating system my single-board Z80-based computer runs upon. Later I ported the game to the ZX Spectrum 48k. Recently I went through a burst of enthusiasm and started to overhaul the code a little, adding word-wrapping and fixing a couple of bugs. That lead to a new release, and also a brief amount of (positive) feedback on hacker news. After mulling it over I realized that the number of CP/M BIOS functions I was using was very mini ..read more
Visit website
A simple package for running many linters
Steve Kemp's Blog
by
1M ago
I used to configure Emacs to run a linter when saving some specific type of files. For example I'd have a perl-utilities package to reformat perl code, and run the perl-linter on saving, then I'd have a hook to do the same thing for Dockerfiles, etc, etc. It occurred to me recently that I should have a linter for both JSON and YAML files, since I have to edit those filetypes so damn often, and that there wasn't a great solution for those - Until it occurred to me I wrote sysbox which is a simple collection of tools in one binary, and that supports some validation commands: sysbox validate-js ..read more
Visit website
Falsehoods I used to believe about shoes
Steve Kemp's Blog
by
2M ago
Once upon a time I used to divide shoes, boots, and other footwear, into two categories: Things that had good soles and a good grip. Things that were slippery and treacherous. Nowadays I know better. When walking on snow, ice, or slush it isn't the sole of the shoe that causes you to slip, slide, and fall. It is you. The shoes do make a difference, which is why people use icebugs (i.e. shows with little nails sticking out) and similar things. But really it's all about walking "properly": One leg directly below you. Put your feet down flat. Shorter strides. Horizontal movement is dangerous ..read more
Visit website
Please to meet you, hope you guessed my name?
Steve Kemp's Blog
by
7M ago
"Hello, my name is Steve" - those are words I've said a million times in my life, however they are not true words. If you want to get all technical about things, my name has always been SteveN. Mostly this hasn't mattered to me, or anybody else, I introduce myself as Steve, people call me Steve, and Steve is the name that makes me turn my head, when shouted across a bar. However things changed when I moved to Finland. In Finland I had to open new bank accounts, sign mortgages, hand over IDs, and there were many many pieces of paper I signed, or forms I filled out. Unfortunately I screwed up ..read more
Visit website
Old-School CGI Scripts!
Steve Kemp's Blog
by
7M ago
I'm not sure if I've talked about my job here, but I recently celebrated my one year anniversary - whilst on a company offsite trip to Sweden. When I joined the company there were approximately 100 people employed by it. Nowadays the numbers are much higher. Having more people around is pretty awesome, but I realized that there were a lot of people wandering around the office who I didn't recognize so it occurred to me to make a game of it. I had the idea I could write a slack bot to quiz me on my colleagues: Show a random face, using the Slack profile picture. Give a list of 5 names. Ask me ..read more
Visit website
Simple REPL for CP/M, in Z80 assembly
Steve Kemp's Blog
by
10M ago
So my previous post documented a couple of simple "scripting languages" for small computers, allowing basic operations in a compact/terse fashion. I mentioned that I might be tempted to write something similar for CP/M, in Z80 assembly, and the result is here: https://github.com/skx/z80-cpm-scripting-interpreter To sum up it allows running programs like this: 0m 16k{rP _ _} C3 03 EA 00 00 C3 06 DC 00 00 00 00 00 00 00 00 Numbers automatically get saved to the A-register, the accumulator. In addition to that there are three dedicated registers: M-register is used to specify which RAM addre ..read more
Visit website
Simple toy languages
Steve Kemp's Blog
by
11M ago
Recently I was looking around the internet and looking for something to do with some ESP8266 devices, which I've been neglecting over recent years. When I was on paternity-leave, five years ago, I decided I wanted a new hobby for my "down" time. I had two obvious choices a) developing applications for mobiles, or b) working with "hardware". I chose the latter. By accident I came across a couple of simple scripting languages, FORTH-esque. Sample usage looks something like this (which obviously sends the command over a serial-device to the connected-board): $ echo '5{ 6d 1o 100m 0o 100m ..read more
Visit website
Managing header-spacing in markdown/org-mode files
Steve Kemp's Blog
by
1y ago
It seems I'm having a theme recently on this blog, of making emacs-related posts. Here's another. I write a bunch of stuff in markdown, such as my emacs init-file, blog-posts and other documents. I try to be quite consistent about vertical spacing, for example a post might look like this: # header1 Some top-level stuff. ## header2 Some more details. ## header2 Some more things on a related topic. # header2 Here I'm trying to breakup sections, so there is a "big gap" between H1 and smaller gaps between the lesser-level headings. After going over my init file recently, making some chan ..read more
Visit website
I put an LSP in your LISP ..
Steve Kemp's Blog
by
1y ago
I recently wrote about yet another lisp I'd been having fun with. Over the past couple of years I've played with a few toy scripting languages, or random interpreters, and this time I figured I'd do something beyond the minimum, by implementing the Language Server Protocol. In brief the language server protocol (LSP) is designed to abstract functionality that might be provided by an editor, or IDE, into a small "language server". If the language-server knows how to jump to definitions, provide completion, etc, etc, then the editor doesn't need to implement those things for NN different languag ..read more
Visit website
Alphabetical linting ..
Steve Kemp's Blog
by
1y ago
So this week I recycled a talk I'd given in the past, about how even using extremely simple parsers allows a lot of useful static-analysis to be done, for specific niche use-cases. This included examples of scanning comments above classes to ensure they referred to the appropriate object, ensuring that specific function calls always included a specific (optional) parameter, etc. Nothing too complex, but I figured I'd give a new example this time, and I remembered I'd recently written a bunch of functions for an interpreter which I'd ordered quite deliberately. Assume you're writing a BASIC int ..read more
Visit website

Follow Steve Kemp's Blog on FeedSpot

Continue with Google
Continue with Apple
OR