View source | |
# 2025-07-14 - OCC FreeBASIC, QBASIC.EXE, and WM Tweaks | |
I can't believe i forgot to install curl! Fixed. | |
* * * | |
Alpine Linux does not include a GUI mixer applet with XFCE. | |
I fussed around with various options and finally settled on | |
launching alsamixer like so: | |
* Right click panel | |
* Click Panel> | |
* Click Panel Preferences... | |
* Click Items | |
* Click +Add | |
* Click Launcher | |
* Click +Add | |
* Click Close | |
* Move Launcher below Power Manager Plugin | |
* Click Wrench icon | |
* Click + | |
* Scroll to bottom | |
* Select st | |
* Click +Add | |
* Click Close | |
* In Launcher window, click Wrench icon | |
* Replace values | |
* Name: Mixer | |
* Comment: alsamixer | |
* Command: alsamixer | |
* Click Icon | |
* Select audio-volume-high | |
* Click OK | |
* Check box at Run in terminal | |
* Click Save | |
Now i have a speaker icon in my tray that i can click to open | |
alsamixer. While i was at it, i set up XFCE key bindings to | |
adjust the audio volume. I would have used multimedia buttons, but | |
my keyboard doesn't have any. | |
* Click Applications | |
* Click Settings | |
* Click Keyboard | |
* Click Application Shortcuts | |
* Click +Add | |
* Command: amixer set Master toggle | |
* Click OK | |
* Press: Win 0 | |
* Click +Add | |
* Command: amixer set Master 5%- | |
* Click OK | |
* Press: Win - | |
* Click +Add | |
* Command: amixer set Master 5%+ | |
* Click OK | |
* Press: Win = | |
That creates the following key bindings: | |
* Win 0 Mute or unmute | |
* Win - Volume down | |
* Win = Volume up | |
* * * | |
audacious with the winamp / refugee theme looks exactly like xmms. | |
Yet another refugee from blackbox and xmms. :) | |
* * * | |
I noticed that gnumeric on this old hardware is considerably snappier | |
than libreoffice on my new hardware. I might want to consider | |
switching to gnumeric on my main machine. | |
* * * | |
I decided to go on a nostalgia trip and type in some BASIC listings. | |
I installed QBASIC.EXE and FreeBASIC in DOSBox-staging. I selected | |
the following book to type listings from. | |
Programming Tricks And Skills | |
This book discusses various programming tips and tricks relevant to | |
8-bit computers when they all shipped with BASIC built-in. The book | |
concludes with a BASIC listing for a simple CRUD application that | |
will run on all the major 8-bit computers, including models with | |
only 32KB RAM. It can save the database to file, floppy, or tape. | |
Quite an accomplishment back in the day. | |
CRUD | |
Specific lines in the main listing are marked by platform. After | |
the listing, each platform has a section of replacement lines. I | |
selected the TRS-80 variant and ported the code to QBASIC.EXE, | |
then FreeBASIC. | |
Pages 33 and 34 discusses micro-optimizations in program layout | |
that were relevant to the limitations of 8-bit computers. This | |
helps explain the horrendous formatting of some old BASIC code. | |
See the following excerpt for wisdom from a more innocent era. | |
More about memory | |
================= | |
Most home computers have between about 32K and 48K of RAM and | |
this is [massive] for even quite long programs. Some of the | |
RAM, though, is always used by the computer for housekeeping | |
tasks, that is, for storing information it needs while it | |
carries out the program. This can take up to 3K and reduces the | |
space available for the program itself. | |
Also, in high resolution graphics modes, most computers need | |
much more RAM space for storing graphics information. In the | |
highest resolution mode this can be up to 20K, which might only | |
leave you about 10K for the program. | |
The largest memory an eight-bit computer ... can have, is | |
64K ROM and RAM combined. This is because each location in the | |
memory has to have a number as its address. Each address is | |
represented by two bytes of computer code and the highest number | |
that can be made with two bytes (16 bits) is 65536. This allows | |
65536 locations numbered 0 through 65536, which is 64K | |
(65536 / 1024). | |
It is possible, though, to use more memory on an eight-bit | |
computer by switching in different blocks of memory at different | |
times. You can buy memory expansion units to do this. | |
# Reference materials | |
More TRS-80 BASIC | |
Personal Computer BASIC Reference Manual (TRS-80) | |
FreeBASIC | |
QBASIC.EXE (See help section) | |
I discovered a corner case with QBASIC.EXE line number support. | |
For example, the original code has: | |
1280 DIM C$(MX*CL) | |
I translated this to: | |
1280 DIM C(MX*CL) AS STRING | |
QBASIC.EXE throws the following error: | |
> AS clause required on first declaration | |
> | |
> A variable that has not been delcared using an AS clause is | |
> referred to with an AS clause. | |
The same error happens if i use the REDIM statement. This took a | |
little detective work to decipher. If i change the line to: | |
1280 CLS:PRINT UBOUND(C$):END | |
Then it prints that a 10 item array already exists. But i never | |
declared or used it before line 1280. My theory is that this is an | |
internal compiler artifact. I think QBASIC.EXE implicitly declares | |
C$ as a 10 item array here: | |
10 GOSUB 1260: REM INITIALIZATION | |
I worked around it by copying lines 1270, 80, and 90 to lines | |
7, 8, and 9. Then i commented out the original lines. | |
In other words, make sure DIM statements come *before* any GOSUB. | |
After adapting the code to run in QBASIC.EXE, i didn't need to | |
change much for FreeBASIC. I commented out line 6 CLEAR and added a | |
third parameter ",0" to my LOCATE statements to hide the cursor. | |
Then i can compile with `fbc -lang qb FLIP.BAS` | |
FLIP.BAS | |
tags: occ2025,retrocomputing | |
# Tags | |
occ2025 | |
retrocomputing |