Paolo Amoroso's Journal

Tech projects, hobby programming, and geeky thoughts of Paolo Amoroso

I resumed working on Suite8080 and fixed the assembler's db directive to accept uppercase symbols as in this example:

SYM		equ	1
label:  	db	SYM

I changed the code that adds symbols to the symbol table to canonicalize to lowercase, and the db processing code to convert symbols to lowercase before checking if they're in the table.

Suite8080 is a suite of Intel 8080 Assembly cross-development tools I'm writing in Python.

#Suite8080 #Python

Discuss... Email | Reply @amoroso@fosstodon.org

Google released a Gmail redesign that finally rolled out to me. Here are my first impressions after a few days.

What's new?

The redesign integrates the Gmail email client with Google Chat messaging and Google Meet video calling. The early feedback I read was from unhappy users who made it seem the sky was falling.

But I kind of like the refreshed look and don't mind the new layout.

Now i notice a new color palette, the toolbars framing the window sides have a different background shade, and there are a few more tweaks. The only major addition is a thin left sidebar with tabs for Gmail, Chat conversations and spaces, and Meet meetings.

The left sidebar does reduce horizontal space and leaves less room for the email subject and snippet in the inbox list view, especially on small screens such as those of Chromebooks. But there's still enough context and on the 1080p monitor of my daily desktop driver, an ASUS Chromebox 3, the extra sidebar space is not an issue.

The new layout comes with some handy extra funcionality. For example, the Chat notification badges for incoming messages, and the lists of conversations and spaces that pop up when hovering over the Chat icons. This may make redundant the separate Chat window I usually keep open.

Too bad Google Chat is not even a blip on the radar of the messaging market and I have so few contacts left on Chat.

#Google

Discuss... Email | Reply @amoroso@fosstodon.org

Is Write.as usable on mobile?

Let's find out. I'm writing this with the Write.as plain text editor in Chrome on a Pixel 4 XL Android phone.

I can use nearly all the editor's features except for attaching images, which I'm not sure is possible on mobile. The distraction-free environment is clean and makes a lot of text fit on the screen.

Markdown formatting

Here's some rich text I'm typing with Markdown syntax in italics and bold. Some Python code:

def square(x):
    return x * x

A bullet list:

  • one
  • two
  • three

A numbered list:

  1. one
  2. two
  3. three

Quoted text:

This is quoted text. I wish I had some witty thought to share for the occasion.

And finally some displayed MathJax: $$y = f(x)$$

Conclusion

The Write.as editor is quite usable for posting text content on mobile. The only limit is how fast I can type with the on-screen keyboard.

#blogging #Android

Discuss... Email | Reply @amoroso@fosstodon.org

I wrote Twirl, an Intel 8080 Assembly program that displays the ASCII animation of a bar twirling at the home position of the terminal screen. To make things a bit more clear I recorded a screencast to show the running program and what the animation looks like.

Motivation

I developed this short program as an Assembly learning exercise related to Suite8080, a suite of Intel 8080 Assembly cross-development tools in Python I'm working on. The project, which is a lot of fun, drove me down a rabbit hole of Intel 8080 Assembly, CP/M, and retrocomputing.

I additionally wanted to explore the emuStudio execution environment and get the algorithm working. Now that it does, I can port Twirl to CP/M and add the program to Suite8080 as an Assembly demo.

The execution environment

Twirl runs on a virtual Altair 8800 computer in emuStudio, a beautiful emulator and Assembly development environment that can recreate a number of classic computers and CPUs.

I designed Twirl to run on a bare Altair 8800 connected to a Lear Siegler ADM-3A terminal. Any amount of RAM will do as the assembled code is only a few dozen bytes long. In the execution environment there's no host operating system or resident monitor, just a few basic character I/O subroutines emuStudio ships with.

Once started, Twirl runs an infinite animation loop. To terminate it I click the emuStudio Stop emulation button.

By default the Altair 8800 runs at 2 Mhz in emuStudio, which causes some terminal flicker when executing Twirl. That's why I usually set the CPU frequency to 4 MHz, closer to that of late CP/M computers.

The code

Here's the source code of Twirl:

; twirl.asm
; Twirling bar animation
;
; Runs in emuStudio emulating an Altair 8800 with an
; ADM-3A terminal


FRAMES          equ     8               ; Number of animation frames


                push    h
                lxi     h, CLS
                call    putstr          ; Clear screen
                pop     h

loop:           lxi     h, ANIM
                mvi     b, FRAMES

loop1:          push    h
                lxi     h, HOME
                call    putstr          ; Go to home
                pop     h

                mov     a, m
                push    h
                call    putchar         ; Print current frame
                pop     h

                inx     h
                dcr     b
                jnz     loop1

                jmp     loop

                hlt


CLS:            db      1ah, 0          ; ADM-3A escape sequence
HOME:           db      1eh, 0          ; ADM-3A escape sequence
ANIM:           db      '|/-\|/-\'      ; 8 frames


include 'include\putstr.inc'
include 'include\putchar.inc'

After clearing the screen, the program starts an infinite loop that repeats going through each frame of the animation, moving the cursor to the home position, and printing the current frame. The animation consists of a byte array containing the sequence of characters — frames — to display.

Some data definitions follow, i.e. the ADM-3A escape sequences to clear the screen and go to home, as well as the animation array.

The program ends with include directives for importing the following I/O subroutines:

  • putstr: prints to the terminal the 0-terminated string pointed to by the HL register pair
  • putchar: prints to the terminal the character in register A

The calls are enclosed in code that saves and restores the registers the subroutines overwrite.

Future work

What does it take to port Twirl to CP/M?

I use z80pack as my main CP/M emulator, so I design the Suite8080 demos to run on a machine with a VT100 or compatible terminal like the CP/M systems z80pack emulates.

I'll begin by converting the terminal escape codes from ADM-3A to VT100. Next, I'll replace the subroutine calls to equivalent BDOS calls. Finally, I want to support terminating the program by pressing any key. This will require code to check the console status for key presses.

#intel8080 #Assembly

Discuss... Email | Reply @amoroso@fosstodon.org

Chrome OS is my only desktop operating system and I store nearly all data in the cloud.

When on a website or online platform I see a file I want to keep, such as a PDF document or an image, I save it from Chrome to the local storage of my Chrome OS device. From there I upload the file to Google Drive and remove the temporary local copy.

But I keep forgetting Chrome OS provides a more straightforward, cloud-to-cloud way of doing it without going through the local storage.

The Files app, the Chrome OS file manager, natively mounts my Google Drive space under Google Drive > My files and makes it accessible like a local folder tree. All I need to do to save an online file is to navigate to the desired Google Drive folder via the file save system dialog, a specialized version of the Files app.

#chromeOS

Discuss... Email | Reply @amoroso@fosstodon.org

I rarely post Twitter threads and grudgingly read the interesting ones that cross my feed.

Why? Because threads have terrible usability.

Twitter doesn't provide much support for writing threads, which often makes using specialized editing tools a necessity. But even then, there's significant friction that distracts from writing.

As a reader, consuming a thread feels like an obstacle course at each step of which I bump into buttons, icons, frames, and other user interface junk. I have to scroll, scroll, and scroll. Some authors make this worse by not numbering the individual tweets, or not giving an indication of how long a thread is and how much text is left to read.

It's incredible how many hoops authors are willing to jump through to cram long-from content into a glorified tweet, and how much readers are willing to endure not to click a link and consume elsewhere text optimized for reading.

Long-form belongs to blogs.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

It seemed simple enough.

I wanted to start a new blog, a journal for posting short and frequent notes about my geeky interests to complement my main blog. So I began looking for lightweight, minimalist blogging or microblogging platforms that are friendly to technical writing.

On the desktop I use exclusively Chrome OS, live in the browser, and work in the cloud. Therefore, I needed a hosted platform fully accessible via a browser and simple to operate. No static site generators or self-hosting. A platform that supports Markdown well (e.g. with extensions like tables), focuses on writing, has a clean design, and provides an uncluttered reading experience. MathJax support is a plus.

I had already found a good one, Typehut, but it's clearly abandoned. The site hasn't received any activity for the past couple of years, and the developer never replied to my inquiries to multiple email addresses and social profiles.

Googling around for alternatives, the first challenge was going beyond the high-ranking listicles that rehash the usual suspects like Medium and Tumblr. The best list I found is this, which features some little known and unique platforms: Blogging Platforms That Encourage You To Write.

A good entry is Silvrback, designed also for technical writing. It looks nice, supports Markdown extensions like tables, and also MathJax.

On Silvrback, however, Markdown code blocks wrap text lines, which is a deal breaker.

Wrapped code looks ugly on the desktop and a jumbled mess on mobile. I want lines not to wrap, with the ability to scroll code blocks horizontally to view the rest of long lines.

There's apparently no way of changing this behavior and Silvrback shows some hints of bitrot, such as an error when editing post metadata. Most troubling, the Silvrback site has little evidence of recent activity and the developer didn't reply to my email inquiries. Another abandoned platform or getting little work, so back to the drawing board. Update: after the publication of this post Silvrback's founder got in touch with me to confirm the platform is maintained and supported.

I ruled out Micro.blog. I already tried it and it and it's nice, but it comes with a few rough edges.

Is there still activity in this blogging platform space? To find out, I asked for recommendations on Reddit and Indie Hackers.

On Reddit, Jake LaCaze, who uses Write.as, helped me and made me realize that platform is the best fit for my needs. I read all the available documentation, how-tos, and support resources cover to cover. In addition, I created a free trial account to play with the product a bit.

It was love at first sight. Write.as has everything I was looking for, including Markdown tables and MathJax. Plus, a suite of companion tools such as an image hosting and a commenting platform, an active founder with a vision and love for the product, and a passionate community.

But, similarly to Silvrback, Write.as wraps code block lines by default.

I posted for help to the official community forum and Matt, the Write.as founder, provided a CSS code snippet that turns off wrapping. With this roadblock gone, I immediately purchased a paid plan and finally set up my new blog.

It's reassuring to see current activity in the blogging space. But I'm surprised technical blogging receives so little attention outside of dedicated but narrowly focused platforms like DEV.to.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

I'm Paolo Amoroso and I welcome you to my new blog, Paolo Amoroso's Journal.

I actually already have a personal blog, Moonshots Beyond the Cloud, where I write about my interests. The new blog, the one you're reading now, is more of a journal, a less structured collection of notes.

What am I going to blog about?

What are my interests, anyway?

I'll write mainly about astronomy and space, Google products and technologies, and Python. But I'm also interested in, and will blog about, software development and computing, retrocomputing, books, digital and self-publishing, blogging, content creation and monetization.

I'll share my projects, works-in-progress, readings, resources, experiences, and ideas on these topics.

Here you won't find any stock photos, clickbait, ads, SEO, or marketese. I'll write for adults with a long attention span who can decide whether they want to read my content.

Why this blog?

Although I already have a blog, it's hosted on an outdated and inflexible platform: Blogger.

I wanted an additional space for more frequent and possibly shorter notes on the same topics of the main blog, hosted on a platform that reduces friction and encourages writing. A space where I could publish thoughts I'd otherwise consider posting as Twitter threads.

I wanted a modern, lightweight blogging or microblogging platform with Makdown support, friendly to technical writing, with a clean design, and an uncluttered reading experience.

I also realized that by writing with a bit less polish, with no obligation to add a cover image to every post, and possibly even without a post title if not needed, I could shave off some more friction from the blogging process and decrease the time from idea to publication. I hoped valuable content would make up for less polish.

After considerable research, I ended up hosting this blog on the Write.as distraction-free blogging platform.

Who is Paolo Amoroso?

I live in Milan, Italy, where I work in astronomy and space outreach and education. Or that's what I did until the pandemic, we'll see.

I've always been interested in the universe and space exploration, and widened my interests to science, technology, computing, and Google — I'm a member of the Google Product Experts program. As a hobby programmer I focus on Python.

Yes, I'm a geek.

Sounds good?

Subscribe to this blog's RSS feed, follow me in the fediverse as @paolo@journal.paoloamoroso.com, or subscribe below to receive the posts via email.

#blogging

Discuss... Email | Reply @amoroso@fosstodon.org

Enter your email to subscribe to updates.