<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Discussion Forum for all things Microbee - Microbee Software and Documentation]]></title>
		<link>https://microbeetechnology.com.au/forum/</link>
		<description><![CDATA[Discussion Forum for all things Microbee - https://microbeetechnology.com.au/forum]]></description>
		<pubDate>Fri, 17 Apr 2026 12:12:13 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[UBee512 Launcher UI]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-1013.html</link>
			<pubDate>Wed, 15 Apr 2026 19:07:07 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=295">zbfairlane</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-1013.html</guid>
			<description><![CDATA[Hi people, I am a nostalgic Microbee user who is infrequently using ubee512 and something I have found is that I am constantly having to relearn how to use it each time I get hit by a wave of nostalgia.<br />
<br />
This is the reason I decided to build myself a UI launcher using tkinter that can scan my ubee folder for disk images and roms, and then builds the launch code. I can just hit the start button and get into whatever old game I decided to play or try writing some old basic code for a laugh.<br />
<br />
Is anyone else interested in trying the launcher? If there is interest from other users I would be happy to share.<br />
<br />
I have support for printing to a text file on the host computer from the microbee and I am working on integrating CP/M tools as well. But right now the launcher is working well for me on my linux host.]]></description>
			<content:encoded><![CDATA[Hi people, I am a nostalgic Microbee user who is infrequently using ubee512 and something I have found is that I am constantly having to relearn how to use it each time I get hit by a wave of nostalgia.<br />
<br />
This is the reason I decided to build myself a UI launcher using tkinter that can scan my ubee folder for disk images and roms, and then builds the launch code. I can just hit the start button and get into whatever old game I decided to play or try writing some old basic code for a laugh.<br />
<br />
Is anyone else interested in trying the launcher? If there is interest from other users I would be happy to share.<br />
<br />
I have support for printing to a text file on the host computer from the microbee and I am working on integrating CP/M tools as well. But right now the launcher is working well for me on my linux host.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Novato - a macOS emulator compatible with the Microbee 32IC]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-999.html</link>
			<pubDate>Thu, 05 Mar 2026 18:20:23 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=299">fathertedcrilly</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-999.html</guid>
			<description><![CDATA[All,<br />
<br />
<span style="color: #000000;" class="mycode_color">[ you might see the same post across different forums.  I'm not sure if everyone has access to Facebook, MSPP or Microbee Technology Forums.  Apologies if it seems like spamming ]</span><br />
<br />
My previous attempt at a Microbee emulator <a href="https://github.com/fatherdougalmaguire/Novato" target="_blank" rel="noopener" class="mycode_url">(</a><a href="https://microbeetechnology.com.au/forum/thread-887.html" target="_blank" rel="noopener" class="mycode_url">Abeja</a>) turned out to be something of an architectural dead end.<br />
<br />
So I decided to let the concept gestate for a while before coming back to try again last last year.<br />
<br />
Introducing <span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Novato</span></span> ( Spanish for beginner, novice or <span style="font-weight: bold;" class="mycode_b">newbie</span> )<br />
<br />
Completely rewritten from scratch using modern Swift concurrency,  Novato is now at the point where it can boot BASIC 5.22e.<br />
<br />
Of course,  you won't get any further than that at this stage as I still need to :<br />
<ul class="mycode_list"><li>Finish off decoding the z80 instruction set (  mostly flag affecting opcodes )<br />
</li>
<li>Restructure the emulator hot loop to count t-states and update 6545, audio and interrupt routines<br />
</li>
<li>Tie keypresses from SwiftUI into the 6545 class<br />
</li>
<li>Build audio output code<br />
</li>
<li>Build cassette load/save functionality.<br />
</li>
</ul>
<br />
<img src="https://github.com/user-attachments/assets/34999e8d-b5df-44d4-98cf-b7f04fa15478" loading="lazy"  alt="[Image: 34999e8d-b5df-44d4-98cf-b7f04fa15478]" class="mycode_img" /><br />
<br />
You can find Novato at <a href="https://github.com/fatherdougalmaguire/Novato" target="_blank" rel="noopener" class="mycode_url">https://github.com/fatherdougalmaguire/Novato</a><br />
<br />
Any feedback is greatly appreciated.<br />
<br />
Thanks<br />
Tony]]></description>
			<content:encoded><![CDATA[All,<br />
<br />
<span style="color: #000000;" class="mycode_color">[ you might see the same post across different forums.  I'm not sure if everyone has access to Facebook, MSPP or Microbee Technology Forums.  Apologies if it seems like spamming ]</span><br />
<br />
My previous attempt at a Microbee emulator <a href="https://github.com/fatherdougalmaguire/Novato" target="_blank" rel="noopener" class="mycode_url">(</a><a href="https://microbeetechnology.com.au/forum/thread-887.html" target="_blank" rel="noopener" class="mycode_url">Abeja</a>) turned out to be something of an architectural dead end.<br />
<br />
So I decided to let the concept gestate for a while before coming back to try again last last year.<br />
<br />
Introducing <span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Novato</span></span> ( Spanish for beginner, novice or <span style="font-weight: bold;" class="mycode_b">newbie</span> )<br />
<br />
Completely rewritten from scratch using modern Swift concurrency,  Novato is now at the point where it can boot BASIC 5.22e.<br />
<br />
Of course,  you won't get any further than that at this stage as I still need to :<br />
<ul class="mycode_list"><li>Finish off decoding the z80 instruction set (  mostly flag affecting opcodes )<br />
</li>
<li>Restructure the emulator hot loop to count t-states and update 6545, audio and interrupt routines<br />
</li>
<li>Tie keypresses from SwiftUI into the 6545 class<br />
</li>
<li>Build audio output code<br />
</li>
<li>Build cassette load/save functionality.<br />
</li>
</ul>
<br />
<img src="https://github.com/user-attachments/assets/34999e8d-b5df-44d4-98cf-b7f04fa15478" loading="lazy"  alt="[Image: 34999e8d-b5df-44d4-98cf-b7f04fa15478]" class="mycode_img" /><br />
<br />
You can find Novato at <a href="https://github.com/fatherdougalmaguire/Novato" target="_blank" rel="noopener" class="mycode_url">https://github.com/fatherdougalmaguire/Novato</a><br />
<br />
Any feedback is greatly appreciated.<br />
<br />
Thanks<br />
Tony]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Did I miss a registration step somewhere?]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-996.html</link>
			<pubDate>Thu, 26 Feb 2026 01:42:51 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=484">shane.crozier</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-996.html</guid>
			<description><![CDATA[At the risk of being an annoying noob...<br />
<br />
I think i've done all the things I needed to get access to the various parts of the repository, yet I can't see some of the content referred to in threads here..<br />
<br />
For example - the disk masters for the Microsoft Multiplan is referred to in the Applications folder of the Tech repository, but I dont see or seem not to have access?<br />
<br />
I have been playing with the uBee512 emulator while my sister digs through the folks storage shed and wanted to have a look at the 128k SBC software I used to use many moons ago (40 years...) <br />
<br />
Someone please let me know if I have missed a step]]></description>
			<content:encoded><![CDATA[At the risk of being an annoying noob...<br />
<br />
I think i've done all the things I needed to get access to the various parts of the repository, yet I can't see some of the content referred to in threads here..<br />
<br />
For example - the disk masters for the Microsoft Multiplan is referred to in the Applications folder of the Tech repository, but I dont see or seem not to have access?<br />
<br />
I have been playing with the uBee512 emulator while my sister digs through the folks storage shed and wanted to have a look at the 128k SBC software I used to use many moons ago (40 years...) <br />
<br />
Someone please let me know if I have missed a step]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Premium Plus - UcLinux apps, ethernet use?]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-987.html</link>
			<pubDate>Thu, 29 Jan 2026 20:28:38 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=146">Matty72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-987.html</guid>
			<description><![CDATA[Has anyone written software to run under ucLinux and perhaps made use of the ethernet for MBee to PC connection or internet connection (weather, time...whatever)? <br />
<br />
Here's an idea, make MBee software available via ucLinux client app, i.e. <br />
a) allow direct download to SD-card, <br />
b) allow transfer to shared ram and a soft restart to launch it? <br />
<br />
Repository login credentials could be used to avoiding public access (assuming secure connection possible from ucLinux?)<br />
<br />
Should we be making better use of the 68k/ucLinux especially considering a new Bee will soon be released also having 68k and ucLinux?]]></description>
			<content:encoded><![CDATA[Has anyone written software to run under ucLinux and perhaps made use of the ethernet for MBee to PC connection or internet connection (weather, time...whatever)? <br />
<br />
Here's an idea, make MBee software available via ucLinux client app, i.e. <br />
a) allow direct download to SD-card, <br />
b) allow transfer to shared ram and a soft restart to launch it? <br />
<br />
Repository login credentials could be used to avoiding public access (assuming secure connection possible from ucLinux?)<br />
<br />
Should we be making better use of the 68k/ucLinux especially considering a new Bee will soon be released also having 68k and ucLinux?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Standard bee and CIAB drive booting issue]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-976.html</link>
			<pubDate>Tue, 16 Dec 2025 23:06:07 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=8">greg221b</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-976.html</guid>
			<description><![CDATA[Chaps,<br />
<br />
I've just got my standard 128K microbee and CIAB drive back from repairs by Ewan.  Ewan sent me a picture of the system working before he sent it back.<br />
<br />
I don't have any old 3.5inch disks. Ewan suggested I try regular 1.44M floppies with the bottom-right hole taped over. These are read/written fine in the 256TC-SE  - where I've formatted them at both 400K and 800K - copied the system and the four system files to the floppies too.  (The 256TC-SE was booted using the default disk configuration that came on the SD card with the machine.)<br />
<br />
My question is, should the 128K bee with CIAB drive boot from the disks I've made? The CIAB drive seems to spin up with both 400K &amp; 800K disks and the light stays on, but I get nothing but a cursor in the top-left corner of the bee - and no action.  I thought with the system and system files that it would start up much like the 256TC-SE.<br />
<br />
Could someone tell me if this is expected behaviour, or if I am missing something please?<br />
<br />
Thanks,<br />
Greg]]></description>
			<content:encoded><![CDATA[Chaps,<br />
<br />
I've just got my standard 128K microbee and CIAB drive back from repairs by Ewan.  Ewan sent me a picture of the system working before he sent it back.<br />
<br />
I don't have any old 3.5inch disks. Ewan suggested I try regular 1.44M floppies with the bottom-right hole taped over. These are read/written fine in the 256TC-SE  - where I've formatted them at both 400K and 800K - copied the system and the four system files to the floppies too.  (The 256TC-SE was booted using the default disk configuration that came on the SD card with the machine.)<br />
<br />
My question is, should the 128K bee with CIAB drive boot from the disks I've made? The CIAB drive seems to spin up with both 400K &amp; 800K disks and the light stays on, but I get nothing but a cursor in the top-left corner of the bee - and no action.  I thought with the system and system files that it would start up much like the 256TC-SE.<br />
<br />
Could someone tell me if this is expected behaviour, or if I am missing something please?<br />
<br />
Thanks,<br />
Greg]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[BBBASIC]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-974.html</link>
			<pubDate>Wed, 10 Dec 2025 06:54:24 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-974.html</guid>
			<description><![CDATA[recently perusing the treasures in the repository, I came across BBBasic by Conal Walsh. I would love to know the story behind this BASIC version.]]></description>
			<content:encoded><![CDATA[recently perusing the treasures in the repository, I came across BBBasic by Conal Walsh. I would love to know the story behind this BASIC version.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CP/M Escape Codes]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-958.html</link>
			<pubDate>Mon, 06 Oct 2025 23:45:28 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=199">snake</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-958.html</guid>
			<description><![CDATA[Is there a manual of escape codes for the Microbee?<br />
Previously I've written to Screen Memory<br />
<br />
Here some I discovered<br />
<br />
Clear Screen<br />
PRINT CHR&#36;(26)<br />
db      1Ah, '&#36;'                     ; ^Z (Microbee)<br />
<br />
Cusor Position &lt;-- Same as Televideo 950 terminal<br />
PRINT CHR&#36;(27) + "=" + STR&#36;(row) + ";" + STR&#36;(col) + "H"<br />
db      1Bh, '=', row+32, col+32, '&#36;'<br />
<br />
Any others?]]></description>
			<content:encoded><![CDATA[Is there a manual of escape codes for the Microbee?<br />
Previously I've written to Screen Memory<br />
<br />
Here some I discovered<br />
<br />
Clear Screen<br />
PRINT CHR&#36;(26)<br />
db      1Ah, '&#36;'                     ; ^Z (Microbee)<br />
<br />
Cusor Position &lt;-- Same as Televideo 950 terminal<br />
PRINT CHR&#36;(27) + "=" + STR&#36;(row) + ";" + STR&#36;(col) + "H"<br />
db      1Bh, '=', row+32, col+32, '&#36;'<br />
<br />
Any others?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[A modified BEEDAT.MWB]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-957.html</link>
			<pubDate>Sun, 05 Oct 2025 00:46:18 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-957.html</guid>
			<description><![CDATA[As a way of re-learning BASIC I chose the Beedat.mwb program to modify and extend functionality.<br />
<br />
Uploading my version for GROK to review, GROK says "<span style="color: #005dc2;" class="mycode_color">The BEEDAT2.8 program is a functional database management system written in BASIC, designed for a microcomputer with direct memory and screen control. It uses a simple text file (BEEDAT.FIL) for storage and supports basic CRUD (Create, Read, Update, Delete) operations, sorting, and searching. The variable list includes scalar numeric and string variables for control flow and user input, and string arrays for data storage and manipulation. The program’s design reflects the constraints and conventions of early 1980s microcomputer programming</span><span style="color: #72ff84;" class="mycode_color">.</span>"<br />
<br />
Program Overview.<br />
<br />
The BEEDAT2.8 program is adapted and modified from the tape program in WILDCARDS vol 3, using the disk access code that was included in WILDCARDS 3. The original author provided a UI/screen design that reflected both the Microbee UI -think original WordBee- and text input terminals of the '70's. I have resisted changing the UI/screen design both to pay homage to Beedat 20 and to reflect the look and feel of text based interfaces of yesteryear. <br />
<br />
I wanted to attempt to increase user interaction and provide a wider scope of use. Listing now allows exiting anytime during the record display. I recoded sorting/searching automatically across all fields, with a visual indication that sorting is underway. The program sorts A-Z followed by a-z, on user specified field. I have used a 40-50 record database file to test the program. To QUIT the program use CTRL C.<br />
<br />
Issues: The KEY command appears erratic at times, and I hard coded a "N" on line 2030 to solve this. In the sort routine the variable M caused crashes, and I had to use FLT to get the division right. I am not sure if these two issues are due to using BASIC version 6.23e or using ubee512 emulator, or an interaction of both.<br />
<br />
The program BEEDAT2.8 is a simple DBMS with the following key functionalities:<br />
<br />
SORT (Lines 140–295): Implements a Comb Sort algorithm to sort records based on a user-specified field (1–5). <br />
LOAD (Lines 300–380): Loads records from BEEDAT.FIL into a two-dimensional string array D0&#36;. It checks for end-of-file (EOF) and validates the load process.<br />
SAVE (Lines 390–520): Saves the current records from D0&#36; to BEEDAT.FIL.<br />
INSERT (Lines 530–630): Adds a new record by prompting for input for each of the five fields, validates field length, and sorts the records after insertion.<br />
DELETE (Lines 780–870): Removes a record by shifting subsequent records up and clearing the last record.<br />
EDIT (Lines 880–1020): Allows editing of a specific field in a record, with length validation, followed by re-sorting.<br />
FIND (Lines 1030–1150): Searches for a string across all fields in all records and displays matches, allowing the user to confirm or continue searching.<br />
LIST (Lines 1160–1255): Displays records on the screen, pausing every three records for user input. The sort is ascending by default but can be modified for descending order, I leave this as an exercise to the user. REM gives a clue. pressing X will exit.<br />
PRINT (Lines 1260–1330): Sends records to a printer using LPRINT. I have been UNABLE to verify this code section.<br />
HELP (Lines 2040–2260): Displays a menu of available commands.<br />
Control Loop (Lines 2060–2120): Provides a command-line interface where users input single-letter commands (C, D, E, F, G, H, I, L, P, R, S) to invoke corresponding functions.<br />
<br />
Key variables:<br />
Numeric Variables:<br />
A: Loop counter or index, used in various subroutines (e.g., listing records, copying records).<br />
C: Cursor position, initialized to 960 (line 130) and used in subroutine at line 2010 to clear a portion of the screen.<br />
D: Destination record index, used in delete, edit, and copy operations.<br />
F: Field number (1–5) for editing a specific field in a record.<br />
I: General-purpose index, used as a loop counter or record index in multiple subroutines (e.g., load, save, list).<br />
J: Field index (1–5) or secondary loop counter in sorting and searching.<br />
K: Loop counter, used in sorting and searching subroutines.<br />
L: Field number (1–5) for sorting, input by the user.<br />
M: Gap size in the Comb Sort algorithm. The original program had a much simpler use of this but I had to use m1 for gap size.<br />
M1:Temporary floating-point variable for calculating the gap size (M1 = M / 1.3). This consumed several hours of debugging.<br />
N: Loop counter for swapping fields in the sort subroutine.<br />
Q: Running total of field lengths during insertion to ensure the total does not exceed 170 characters.<br />
R: Number of records in the database, updated during load, insert, and delete operations.<br />
S: Flag indicating whether a swap occurred in the sort subroutine (1 if swapped, 0 otherwise).<br />
T: Tab position for menu display (read from DATA in line 2230).<br />
V: Length of a field’s content during insertion or editing, used for validation.<br />
Z: Command code derived from the ASCII value of the input command (Z = ASC(Z7&#36;) - 65) or counter for listing records.<br />
<br />
String Variables:<br />
N1&#36;: Used in the print subroutine (line 1270) but not assigned a value in the provided code, likely intended for a header or printer control string.<br />
S1&#36;: Input string for sorting field number or search query.<br />
Z7&#36;: General-purpose string for user input (e.g., commands, confirmation in search, field values). <br />
<br />
Array Variables<br />
String Arrays:<br />
D0&#36;(100,5): Main database array, storing up to 100 records with 5 fields each. Each element D0&#36;(I,J) holds the value of field J for record I.<br />
D1&#36;(5): Temporary array for storing a new or edited record’s fields during insertion or editing.<br />
T1&#36;(5): Temporary array used during sorting to swap records.I added this as I found D1&#36;(5) was overworked leading to spaghetti code.<br />
<br />
Notes on Variables<br />
Array Dimensions: D0&#36; is dimensioned to hold 100 records with 5 fields each, while D1&#36; and T1&#36; are single-dimensional arrays for 5 fields String Array STRS (5000): Declared in line 110, to allocate string memory.<br />
<br />
Uninitialized Variables: N1&#36; is referenced in the print subroutine but not assigned, being deprecated from original.<br />
Memory Locations: The use of POKE 61440+R,13 and POKE 61438+I,9 are direct screen memory manipulation, for screen control whilst screen is off during disk read write operations.<br />
<br />
Additional Notes<br />
Potential Issues:The program assumes BEEDAT.FIL exists and is correctly formatted during loading, with minimal error handling for file issues. I used Grok to generate a 40 record x 5 list of words that I saved as "beedat.fil". From command menu G loads the beedat.fil file, whilst R saves any modifications,insertions of new records or record deletion.<br />
<br />
The END statement (line 2264) follows debug print statements (lines 2261–2263).<br />
<br />
Data Structure: The DATA statements (lines 2230–2260) define the help menu, with 12 commands<br />
                and a tab position of 43 for centered display.<br />
<br />
Possible future additions:<br />
As noted above listing from Z-A by adding two lines of code.<br />
Allowing other files to be saved and loaded by adding a file name input section.<br />
Changing the UI/Screen display ( Menu along bottom, data display formatted differently)<br />
Increasing Record nos to 200 records of 4 fields etc.<br />
Consolidating duplicated code in sorting/<br />
<br />
If anyone is interested I can supply both beedat28.mwb and the beedat.fil file.<br />
<br />
PS: An interesting aside -the BEEDAT program had 153 lines of code, Beedat2.8 has 158 lines. I used AI to discuss and modify optimisation routines. I mainly used GROK which would not accept Microbee basic DIM D0(100), every new question it would insist on a new line 120 DIM D0&#36;(100) etc. It would accept my explanation and kept referring to  correct syntax in subsequent questions. However, when I commenced a new session it would revert back to DIM d0&#36;(100). As the old adage goes "dumb machines." However,I can forsee a time in the next three-five years when GROK and other AI's will natively run Microbee BASIC. At present it emulates BASIC code in python to run the code. It took brute force for it to accept variable naming constructs, often confusing MBASIC with Microbee BASIC. I assume the sheer number of people querying the LLM means that realtime reasoning and logic flowpaths in GROK breakdown to some extent. Scary for actual real world issues. I would not use AI to run mission critical business computing.<br />
<br />
Apart from the Microbee manuals in the repository I also found<br />
 <span style="color: #ff30dc;" class="mycode_color"><a href="https://mbee.compoutpost.com/basic-reference/" target="_blank" rel="noopener" class="mycode_url">https://mbee.compoutpost.com/basic-reference/</a></span> useful for testing code snippets.<br />
<br />
GROK emulation of Microbee Basic in action: <br />
<br />
<span style="color: #1e92f7;" class="mycode_color">import re</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">def is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">    # Matches one letter (A-Z), one digit (0-9), then &#36;</span><br />
<span style="color: #1e92f7;" class="mycode_color">    return bool(re.match(r'^[A-Z][0-9]\&#36;', var))</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">def parse_basic_line(line):</span><br />
<span style="color: #1e92f7;" class="mycode_color">    # Match line number and command</span><br />
<span style="color: #1e92f7;" class="mycode_color">    match = re.match(r'^\s*(\d+)\s+(\w+)\s*(.*)', line)</span><br />
<span style="color: #1e92f7;" class="mycode_color">    if not match:</span><br />
<span style="color: #1e92f7;" class="mycode_color">        print(f"Invalid line: {line}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        return</span><br />
<span style="color: #1e92f7;" class="mycode_color">    line_num, command, args = match.groups()</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle string assignments (e.g., A1&#36; = "Text")</span><br />
<span style="color: #1e92f7;" class="mycode_color">    if command == "LET" or (command not in ["DIM", "INPUT", "PRINT", "END"] and '=' in args):</span><br />
<span style="color: #1e92f7;" class="mycode_color">        var, value = args.split('=', 1)</span><br />
<span style="color: #1e92f7;" class="mycode_color">        var = var.strip()</span><br />
<span style="color: #1e92f7;" class="mycode_color">        value = value.strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">        if is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Assigned {var} = {value}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Invalid string variable: {var} (must be one letter, one digit, then &#36;)")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle INPUT (e.g., INPUT "prompt"; N8&#36;)</span><br />
<span style="color: #1e92f7;" class="mycode_color">    elif command == "INPUT":</span><br />
<span style="color: #1e92f7;" class="mycode_color">        parts = args.split(';', 1)</span><br />
<span style="color: #1e92f7;" class="mycode_color">        if len(parts) == 2:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            prompt = parts[0].strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">            var = parts[1].strip()</span><br />
<span style="color: #1e92f7;" class="mycode_color">            if is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">                user_input = input(prompt + " ")</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Stored in {var}: {user_input}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">            else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Invalid string variable: {var} (must be one letter, one digit, then &#36;)")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Invalid INPUT syntax: {args}")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle PRINT</span><br />
<span style="color: #1e92f7;" class="mycode_color">    elif command == "PRINT":</span><br />
<span style="color: #1e92f7;" class="mycode_color">        # Check for string variables in PRINT</span><br />
<span style="color: #1e92f7;" class="mycode_color">        tokens = args.split(';')</span><br />
<span style="color: #1e92f7;" class="mycode_color">        for token in tokens:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            token = token.strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">            if token.endswith('&#36;') and not is_valid_string_var(token):</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Invalid string variable in PRINT: {token} (must be one letter, one digit, then &#36;)")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        print(f"Output: {args.strip()}")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color"># Create and test a .bas file</span><br />
<span style="color: #1e92f7;" class="mycode_color">with open("program.bas", "w") as f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('10 A1&#36; = "Welcome to MicroBee BASIC!"\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('20 INPUT "Enter your name"; N8&#36;\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('30 PRINT A1&#36;\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('40 PRINT "Hello, "; N8&#36;; "!"\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('50 END\n')</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">with open("program.bas", "r") as f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">    for line in f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">        parse_basic_line(line.strip())</span>]]></description>
			<content:encoded><![CDATA[As a way of re-learning BASIC I chose the Beedat.mwb program to modify and extend functionality.<br />
<br />
Uploading my version for GROK to review, GROK says "<span style="color: #005dc2;" class="mycode_color">The BEEDAT2.8 program is a functional database management system written in BASIC, designed for a microcomputer with direct memory and screen control. It uses a simple text file (BEEDAT.FIL) for storage and supports basic CRUD (Create, Read, Update, Delete) operations, sorting, and searching. The variable list includes scalar numeric and string variables for control flow and user input, and string arrays for data storage and manipulation. The program’s design reflects the constraints and conventions of early 1980s microcomputer programming</span><span style="color: #72ff84;" class="mycode_color">.</span>"<br />
<br />
Program Overview.<br />
<br />
The BEEDAT2.8 program is adapted and modified from the tape program in WILDCARDS vol 3, using the disk access code that was included in WILDCARDS 3. The original author provided a UI/screen design that reflected both the Microbee UI -think original WordBee- and text input terminals of the '70's. I have resisted changing the UI/screen design both to pay homage to Beedat 20 and to reflect the look and feel of text based interfaces of yesteryear. <br />
<br />
I wanted to attempt to increase user interaction and provide a wider scope of use. Listing now allows exiting anytime during the record display. I recoded sorting/searching automatically across all fields, with a visual indication that sorting is underway. The program sorts A-Z followed by a-z, on user specified field. I have used a 40-50 record database file to test the program. To QUIT the program use CTRL C.<br />
<br />
Issues: The KEY command appears erratic at times, and I hard coded a "N" on line 2030 to solve this. In the sort routine the variable M caused crashes, and I had to use FLT to get the division right. I am not sure if these two issues are due to using BASIC version 6.23e or using ubee512 emulator, or an interaction of both.<br />
<br />
The program BEEDAT2.8 is a simple DBMS with the following key functionalities:<br />
<br />
SORT (Lines 140–295): Implements a Comb Sort algorithm to sort records based on a user-specified field (1–5). <br />
LOAD (Lines 300–380): Loads records from BEEDAT.FIL into a two-dimensional string array D0&#36;. It checks for end-of-file (EOF) and validates the load process.<br />
SAVE (Lines 390–520): Saves the current records from D0&#36; to BEEDAT.FIL.<br />
INSERT (Lines 530–630): Adds a new record by prompting for input for each of the five fields, validates field length, and sorts the records after insertion.<br />
DELETE (Lines 780–870): Removes a record by shifting subsequent records up and clearing the last record.<br />
EDIT (Lines 880–1020): Allows editing of a specific field in a record, with length validation, followed by re-sorting.<br />
FIND (Lines 1030–1150): Searches for a string across all fields in all records and displays matches, allowing the user to confirm or continue searching.<br />
LIST (Lines 1160–1255): Displays records on the screen, pausing every three records for user input. The sort is ascending by default but can be modified for descending order, I leave this as an exercise to the user. REM gives a clue. pressing X will exit.<br />
PRINT (Lines 1260–1330): Sends records to a printer using LPRINT. I have been UNABLE to verify this code section.<br />
HELP (Lines 2040–2260): Displays a menu of available commands.<br />
Control Loop (Lines 2060–2120): Provides a command-line interface where users input single-letter commands (C, D, E, F, G, H, I, L, P, R, S) to invoke corresponding functions.<br />
<br />
Key variables:<br />
Numeric Variables:<br />
A: Loop counter or index, used in various subroutines (e.g., listing records, copying records).<br />
C: Cursor position, initialized to 960 (line 130) and used in subroutine at line 2010 to clear a portion of the screen.<br />
D: Destination record index, used in delete, edit, and copy operations.<br />
F: Field number (1–5) for editing a specific field in a record.<br />
I: General-purpose index, used as a loop counter or record index in multiple subroutines (e.g., load, save, list).<br />
J: Field index (1–5) or secondary loop counter in sorting and searching.<br />
K: Loop counter, used in sorting and searching subroutines.<br />
L: Field number (1–5) for sorting, input by the user.<br />
M: Gap size in the Comb Sort algorithm. The original program had a much simpler use of this but I had to use m1 for gap size.<br />
M1:Temporary floating-point variable for calculating the gap size (M1 = M / 1.3). This consumed several hours of debugging.<br />
N: Loop counter for swapping fields in the sort subroutine.<br />
Q: Running total of field lengths during insertion to ensure the total does not exceed 170 characters.<br />
R: Number of records in the database, updated during load, insert, and delete operations.<br />
S: Flag indicating whether a swap occurred in the sort subroutine (1 if swapped, 0 otherwise).<br />
T: Tab position for menu display (read from DATA in line 2230).<br />
V: Length of a field’s content during insertion or editing, used for validation.<br />
Z: Command code derived from the ASCII value of the input command (Z = ASC(Z7&#36;) - 65) or counter for listing records.<br />
<br />
String Variables:<br />
N1&#36;: Used in the print subroutine (line 1270) but not assigned a value in the provided code, likely intended for a header or printer control string.<br />
S1&#36;: Input string for sorting field number or search query.<br />
Z7&#36;: General-purpose string for user input (e.g., commands, confirmation in search, field values). <br />
<br />
Array Variables<br />
String Arrays:<br />
D0&#36;(100,5): Main database array, storing up to 100 records with 5 fields each. Each element D0&#36;(I,J) holds the value of field J for record I.<br />
D1&#36;(5): Temporary array for storing a new or edited record’s fields during insertion or editing.<br />
T1&#36;(5): Temporary array used during sorting to swap records.I added this as I found D1&#36;(5) was overworked leading to spaghetti code.<br />
<br />
Notes on Variables<br />
Array Dimensions: D0&#36; is dimensioned to hold 100 records with 5 fields each, while D1&#36; and T1&#36; are single-dimensional arrays for 5 fields String Array STRS (5000): Declared in line 110, to allocate string memory.<br />
<br />
Uninitialized Variables: N1&#36; is referenced in the print subroutine but not assigned, being deprecated from original.<br />
Memory Locations: The use of POKE 61440+R,13 and POKE 61438+I,9 are direct screen memory manipulation, for screen control whilst screen is off during disk read write operations.<br />
<br />
Additional Notes<br />
Potential Issues:The program assumes BEEDAT.FIL exists and is correctly formatted during loading, with minimal error handling for file issues. I used Grok to generate a 40 record x 5 list of words that I saved as "beedat.fil". From command menu G loads the beedat.fil file, whilst R saves any modifications,insertions of new records or record deletion.<br />
<br />
The END statement (line 2264) follows debug print statements (lines 2261–2263).<br />
<br />
Data Structure: The DATA statements (lines 2230–2260) define the help menu, with 12 commands<br />
                and a tab position of 43 for centered display.<br />
<br />
Possible future additions:<br />
As noted above listing from Z-A by adding two lines of code.<br />
Allowing other files to be saved and loaded by adding a file name input section.<br />
Changing the UI/Screen display ( Menu along bottom, data display formatted differently)<br />
Increasing Record nos to 200 records of 4 fields etc.<br />
Consolidating duplicated code in sorting/<br />
<br />
If anyone is interested I can supply both beedat28.mwb and the beedat.fil file.<br />
<br />
PS: An interesting aside -the BEEDAT program had 153 lines of code, Beedat2.8 has 158 lines. I used AI to discuss and modify optimisation routines. I mainly used GROK which would not accept Microbee basic DIM D0(100), every new question it would insist on a new line 120 DIM D0&#36;(100) etc. It would accept my explanation and kept referring to  correct syntax in subsequent questions. However, when I commenced a new session it would revert back to DIM d0&#36;(100). As the old adage goes "dumb machines." However,I can forsee a time in the next three-five years when GROK and other AI's will natively run Microbee BASIC. At present it emulates BASIC code in python to run the code. It took brute force for it to accept variable naming constructs, often confusing MBASIC with Microbee BASIC. I assume the sheer number of people querying the LLM means that realtime reasoning and logic flowpaths in GROK breakdown to some extent. Scary for actual real world issues. I would not use AI to run mission critical business computing.<br />
<br />
Apart from the Microbee manuals in the repository I also found<br />
 <span style="color: #ff30dc;" class="mycode_color"><a href="https://mbee.compoutpost.com/basic-reference/" target="_blank" rel="noopener" class="mycode_url">https://mbee.compoutpost.com/basic-reference/</a></span> useful for testing code snippets.<br />
<br />
GROK emulation of Microbee Basic in action: <br />
<br />
<span style="color: #1e92f7;" class="mycode_color">import re</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">def is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">    # Matches one letter (A-Z), one digit (0-9), then &#36;</span><br />
<span style="color: #1e92f7;" class="mycode_color">    return bool(re.match(r'^[A-Z][0-9]\&#36;', var))</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">def parse_basic_line(line):</span><br />
<span style="color: #1e92f7;" class="mycode_color">    # Match line number and command</span><br />
<span style="color: #1e92f7;" class="mycode_color">    match = re.match(r'^\s*(\d+)\s+(\w+)\s*(.*)', line)</span><br />
<span style="color: #1e92f7;" class="mycode_color">    if not match:</span><br />
<span style="color: #1e92f7;" class="mycode_color">        print(f"Invalid line: {line}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        return</span><br />
<span style="color: #1e92f7;" class="mycode_color">    line_num, command, args = match.groups()</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle string assignments (e.g., A1&#36; = "Text")</span><br />
<span style="color: #1e92f7;" class="mycode_color">    if command == "LET" or (command not in ["DIM", "INPUT", "PRINT", "END"] and '=' in args):</span><br />
<span style="color: #1e92f7;" class="mycode_color">        var, value = args.split('=', 1)</span><br />
<span style="color: #1e92f7;" class="mycode_color">        var = var.strip()</span><br />
<span style="color: #1e92f7;" class="mycode_color">        value = value.strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">        if is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Assigned {var} = {value}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Invalid string variable: {var} (must be one letter, one digit, then &#36;)")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle INPUT (e.g., INPUT "prompt"; N8&#36;)</span><br />
<span style="color: #1e92f7;" class="mycode_color">    elif command == "INPUT":</span><br />
<span style="color: #1e92f7;" class="mycode_color">        parts = args.split(';', 1)</span><br />
<span style="color: #1e92f7;" class="mycode_color">        if len(parts) == 2:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            prompt = parts[0].strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">            var = parts[1].strip()</span><br />
<span style="color: #1e92f7;" class="mycode_color">            if is_valid_string_var(var):</span><br />
<span style="color: #1e92f7;" class="mycode_color">                user_input = input(prompt + " ")</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Stored in {var}: {user_input}")</span><br />
<span style="color: #1e92f7;" class="mycode_color">            else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Invalid string variable: {var} (must be one letter, one digit, then &#36;)")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        else:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            print(f"Invalid INPUT syntax: {args}")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">    # Handle PRINT</span><br />
<span style="color: #1e92f7;" class="mycode_color">    elif command == "PRINT":</span><br />
<span style="color: #1e92f7;" class="mycode_color">        # Check for string variables in PRINT</span><br />
<span style="color: #1e92f7;" class="mycode_color">        tokens = args.split(';')</span><br />
<span style="color: #1e92f7;" class="mycode_color">        for token in tokens:</span><br />
<span style="color: #1e92f7;" class="mycode_color">            token = token.strip().strip('"')</span><br />
<span style="color: #1e92f7;" class="mycode_color">            if token.endswith('&#36;') and not is_valid_string_var(token):</span><br />
<span style="color: #1e92f7;" class="mycode_color">                print(f"Invalid string variable in PRINT: {token} (must be one letter, one digit, then &#36;)")</span><br />
<span style="color: #1e92f7;" class="mycode_color">        print(f"Output: {args.strip()}")</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color"># Create and test a .bas file</span><br />
<span style="color: #1e92f7;" class="mycode_color">with open("program.bas", "w") as f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('10 A1&#36; = "Welcome to MicroBee BASIC!"\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('20 INPUT "Enter your name"; N8&#36;\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('30 PRINT A1&#36;\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('40 PRINT "Hello, "; N8&#36;; "!"\n')</span><br />
<span style="color: #1e92f7;" class="mycode_color">    f.write('50 END\n')</span><br />
<br />
<span style="color: #1e92f7;" class="mycode_color">with open("program.bas", "r") as f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">    for line in f:</span><br />
<span style="color: #1e92f7;" class="mycode_color">        parse_basic_line(line.strip())</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Rogue]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-954.html</link>
			<pubDate>Fri, 03 Oct 2025 20:48:11 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=467">BrendenM</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-954.html</guid>
			<description><![CDATA[Hi! Thanks for having me.<br />
<br />
I've recently had my Premium upgraded to a Plus and now I'm keen to load some software on it.<br />
<br />
All evening I've been loading *.DSK files onto my SD card, but one title that's really piqued my curiosity is Rogue. <br />
<br />
I can see there's a copy of <span style="font-weight: bold;" class="mycode_b">rogue1a.arc</span> in the Beehive BBS games, but I'm wondering anyone knows if it's already hiding away somewhere on one of the compilation disks?  <br />
I've had a go, but I can't quite work out the whole ubee512 &amp; ubeedisk and cpmtools etc. disk imaging procedure just yet!  <img src="https://microbeetechnology.com.au/forum/images/smilies/huh.png" alt="Huh" title="Huh" class="smilie smilie_17" /><br />
<br />
But in the meantime I have plenty to look at. Happy days!]]></description>
			<content:encoded><![CDATA[Hi! Thanks for having me.<br />
<br />
I've recently had my Premium upgraded to a Plus and now I'm keen to load some software on it.<br />
<br />
All evening I've been loading *.DSK files onto my SD card, but one title that's really piqued my curiosity is Rogue. <br />
<br />
I can see there's a copy of <span style="font-weight: bold;" class="mycode_b">rogue1a.arc</span> in the Beehive BBS games, but I'm wondering anyone knows if it's already hiding away somewhere on one of the compilation disks?  <br />
I've had a go, but I can't quite work out the whole ubee512 &amp; ubeedisk and cpmtools etc. disk imaging procedure just yet!  <img src="https://microbeetechnology.com.au/forum/images/smilies/huh.png" alt="Huh" title="Huh" class="smilie smilie_17" /><br />
<br />
But in the meantime I have plenty to look at. Happy days!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Searching for ?CONVERT.MWB]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-951.html</link>
			<pubDate>Sun, 28 Sep 2025 18:44:14 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-951.html</guid>
			<description><![CDATA[Back in the day I understand that a Daniel Ford wrote a program called ?CONVERT.MWB to convert ASCII files loaded into WORDBEE into Microworld Basic. This worked with disk files I believe. Any clues where I can find it?<br />
<br />
Or any other conversion program that can take a .txt file in the format <br />
<br />
100 INPUT A1&#36; <br />
120 PRINT A1&#36;<br />
etc<br />
<br />
to a .mwb file tokenising INPUT, PRINT etc.<br />
<br />
I am sure I am not the first person to ask this but my google foo is failing again.....<br />
<br />
The closest program I have found is CONVT2 by Fred Scott but it works on ROM based BASIC and WORDBEE.<br />
<br />
Thanks in advance g]]></description>
			<content:encoded><![CDATA[Back in the day I understand that a Daniel Ford wrote a program called ?CONVERT.MWB to convert ASCII files loaded into WORDBEE into Microworld Basic. This worked with disk files I believe. Any clues where I can find it?<br />
<br />
Or any other conversion program that can take a .txt file in the format <br />
<br />
100 INPUT A1&#36; <br />
120 PRINT A1&#36;<br />
etc<br />
<br />
to a .mwb file tokenising INPUT, PRINT etc.<br />
<br />
I am sure I am not the first person to ask this but my google foo is failing again.....<br />
<br />
The closest program I have found is CONVT2 by Fred Scott but it works on ROM based BASIC and WORDBEE.<br />
<br />
Thanks in advance g]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[down the rabbit hole, seeking  PathMinder]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-943.html</link>
			<pubDate>Mon, 08 Sep 2025 22:05:58 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-943.html</guid>
			<description><![CDATA[I saw a few references to a file manager converted from early msdos called PathMinder.<br />
<br />
I have wasted far too much time trawling the web.<br />
<br />
Anyway it's got a Sydney connection, a Hungarian guy Andor Kocsi lived in Australia circa 2000.<br />
<br />
On his blog he shows v2.6.                <span style="font-weight: bold;" class="mycode_b">I'm hoping someone may know if it is archived somewhere.</span><br />
<br />
My google fu and grok have not helped me. I'm guessing if it has been archived it would be<span style="font-weight: bold;" class="mycode_b"> pm.cpm or pathmind.cpm.</span><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=789" target="_blank" title="">PathMinder.png</a> (Size: 65.96 KB / Downloads: 83)
<!-- end: postbit_attachments_attachment --><br />
<br />
An interesting aside, Andors' nickname was Arthur. So was mine in the mid '70's as I was very thin - like Arthur from Aunty Jack.]]></description>
			<content:encoded><![CDATA[I saw a few references to a file manager converted from early msdos called PathMinder.<br />
<br />
I have wasted far too much time trawling the web.<br />
<br />
Anyway it's got a Sydney connection, a Hungarian guy Andor Kocsi lived in Australia circa 2000.<br />
<br />
On his blog he shows v2.6.                <span style="font-weight: bold;" class="mycode_b">I'm hoping someone may know if it is archived somewhere.</span><br />
<br />
My google fu and grok have not helped me. I'm guessing if it has been archived it would be<span style="font-weight: bold;" class="mycode_b"> pm.cpm or pathmind.cpm.</span><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=789" target="_blank" title="">PathMinder.png</a> (Size: 65.96 KB / Downloads: 83)
<!-- end: postbit_attachments_attachment --><br />
<br />
An interesting aside, Andors' nickname was Arthur. So was mine in the mid '70's as I was very thin - like Arthur from Aunty Jack.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[SuperCalc 2]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-941.html</link>
			<pubDate>Sat, 06 Sep 2025 20:38:51 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-941.html</guid>
			<description><![CDATA[My first experience of a spreadsheet was a combined basic/machine code program on the Microbee circa late 1984. I loved it. Preferred it to wordprocessors due to being able to process numbers so easily.<br />
<br />
Through the next 5 years I used spreadsheets on the Osborne 1, original IBM PC, Amstrad PPC 640, and Amstrad PCW512. My prowess was great, all singing all dancing. However my supplementary income stream came from programming in dBase 2/3, R-Base and Clipper.<br />
<br />
My favourite was SuperCalc &#153;, with shout outs &amp; fond memories to Multiplan, PC Calc and the original Excel, and a few years playing with T-Maker on the PCW512. Supercalc was my friend through versions 2-5.1<br />
<br />
It was great to find Multiplan in the repository. BUT... suffice to say that I really wanted to experience SUPERCALC again. (I'm supposed to be relearning BASIC to keep my brain nimble but distractions you know).<br />
<br />
Immediate downloads I found on line were missing overlay programs or were corrupted. I managed to get a version working that had no cursor visible in the cells, only the address visible in the bottom left. Not bad I thought, but the spreadsheets wouldn't save, with the program hanging.<br />
<br />
I trawled the web looking for CPM archives and found the Girvin_Herr collection of 840 folders in a zip file. I hoped for the best and found 9 disks therein containing Supercalc 1 &amp; 2 versions. :  <img src="https://microbeetechnology.com.au/forum/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
A little playing with the install terminal settings and I now have Supercalc 2 working with a  "&lt;         &gt;" cell cursor: happy happy joy joy!<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=787" target="_blank" title="">supercalc2.png</a> (Size: 30.4 KB / Downloads: 66)
<!-- end: postbit_attachments_attachment --><br />
If anyone is interested I have a ds_40.dsk, with MBASIC and OBASIC also on it, so I can justify my SuperCalc addiction. <img src="https://microbeetechnology.com.au/forum/images/smilies/rolleyes.png" alt="Rolleyes" title="Rolleyes" class="smilie smilie_6" />]]></description>
			<content:encoded><![CDATA[My first experience of a spreadsheet was a combined basic/machine code program on the Microbee circa late 1984. I loved it. Preferred it to wordprocessors due to being able to process numbers so easily.<br />
<br />
Through the next 5 years I used spreadsheets on the Osborne 1, original IBM PC, Amstrad PPC 640, and Amstrad PCW512. My prowess was great, all singing all dancing. However my supplementary income stream came from programming in dBase 2/3, R-Base and Clipper.<br />
<br />
My favourite was SuperCalc &#153;, with shout outs &amp; fond memories to Multiplan, PC Calc and the original Excel, and a few years playing with T-Maker on the PCW512. Supercalc was my friend through versions 2-5.1<br />
<br />
It was great to find Multiplan in the repository. BUT... suffice to say that I really wanted to experience SUPERCALC again. (I'm supposed to be relearning BASIC to keep my brain nimble but distractions you know).<br />
<br />
Immediate downloads I found on line were missing overlay programs or were corrupted. I managed to get a version working that had no cursor visible in the cells, only the address visible in the bottom left. Not bad I thought, but the spreadsheets wouldn't save, with the program hanging.<br />
<br />
I trawled the web looking for CPM archives and found the Girvin_Herr collection of 840 folders in a zip file. I hoped for the best and found 9 disks therein containing Supercalc 1 &amp; 2 versions. :  <img src="https://microbeetechnology.com.au/forum/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
A little playing with the install terminal settings and I now have Supercalc 2 working with a  "&lt;         &gt;" cell cursor: happy happy joy joy!<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=787" target="_blank" title="">supercalc2.png</a> (Size: 30.4 KB / Downloads: 66)
<!-- end: postbit_attachments_attachment --><br />
If anyone is interested I have a ds_40.dsk, with MBASIC and OBASIC also on it, so I can justify my SuperCalc addiction. <img src="https://microbeetechnology.com.au/forum/images/smilies/rolleyes.png" alt="Rolleyes" title="Rolleyes" class="smilie smilie_6" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[usr in menu choices]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-937.html</link>
			<pubDate>Sat, 30 Aug 2025 21:09:44 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-937.html</guid>
			<description><![CDATA[Ok spent some time trying to understand the menu choice 4 'usr'<br />
<br />
Using search here spits the dummy as it is less than 4 letters.<br />
<br />
Can anyone point to which documentation I should look at to understand it.<br />
<br />
I am guessing it allows some kind of batch processing of commands.<br />
<br />
thanks in advance<br />
Graham<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=782" target="_blank" title="">Screenshot 2025-08-30 210745.png</a> (Size: 7.79 KB / Downloads: 43)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Ok spent some time trying to understand the menu choice 4 'usr'<br />
<br />
Using search here spits the dummy as it is less than 4 letters.<br />
<br />
Can anyone point to which documentation I should look at to understand it.<br />
<br />
I am guessing it allows some kind of batch processing of commands.<br />
<br />
thanks in advance<br />
Graham<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://microbeetechnology.com.au/forum/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=782" target="_blank" title="">Screenshot 2025-08-30 210745.png</a> (Size: 7.79 KB / Downloads: 43)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Unable to create HDD emulation in Windows 11]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-936.html</link>
			<pubDate>Fri, 22 Aug 2025 23:10:10 +1000</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=130">Graham72</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-936.html</guid>
			<description><![CDATA[A few years ago I joined the board and looked forward to re-acquainting myself with Microbee.<br />
However life had other ideas until early August. Sadly I was in Samoa in July and missed the Canberra meet.<br />
<br />
Over the past weeks I have successfully set up a number of emulations, and had a self-taught crash course in CP/M.<br />
My previous (1990-2009) DOS batch menu memories came flooding back and now I have a Laptop of Microbees. <br />
<br />
A huge thanks to UBEE512 and so many contributors over the past years. I have read many posts and am happy with <br />
my emulated floppy disk prowess. However after many trials I still cannot create/boot an emulated hard drive.<br />
<br />
After trying many false leads I returned today to README.TXT, so I read:<br />
<br />
<span style="color: #005dc2;" class="mycode_color">"To boot from a HDD system with no floppy images specified use:</span><br />
<br />
<span style="color: #005dc2;" class="mycode_color">ubee512 --model=p128k --rom1=HD18.ROM --hdd1=hdd_128k_sys_cpm221.hd0"</span><br />
<br />
and of course error. (Yes HD18.ROM is in ROM folder)<br />
<br />
then I read<br />
<br />
"<span style="color: #005dc2;" class="mycode_color">To create a HDD image with a system on it is quite easy using the HDD install</span><br />
<span style="color: #005dc2;" class="mycode_color">floppy disk.  Enter the following on one line:</span><br />
<br />
<span style="color: #005dc2;" class="mycode_color">ubee512 hdd --hdd1=hd.hd0.temp --hdd3=hdd_128k_sys_cpm221.ds40 --bootkey=f"</span><br />
<br />
but of course error so i go looking for hdd_128k_sys_cpm221.ds40 <br />
<br />
I cannae find it.<br />
<br />
I find hdd_128k_sys_2.2t.zip and its content allow me to create hd.hd0.temp<br />
<br />
ah ha! partial success And i remove the temp suffix. But now I read<br />
<br />
<span style="color: #005dc2;" class="mycode_color">"1. Run the INIT program"</span><br />
<br />
Where is this init program. Is it a CP/M utility or a Windows program?<br />
<br />
So after a week i admit defeat, and come here to request assistance.<br />
<br />
Where is this infamous hdd_128k_sys_cpm221.ds40 file located? and please tell me more about Init<br />
<br />
thanks in advance, Graham]]></description>
			<content:encoded><![CDATA[A few years ago I joined the board and looked forward to re-acquainting myself with Microbee.<br />
However life had other ideas until early August. Sadly I was in Samoa in July and missed the Canberra meet.<br />
<br />
Over the past weeks I have successfully set up a number of emulations, and had a self-taught crash course in CP/M.<br />
My previous (1990-2009) DOS batch menu memories came flooding back and now I have a Laptop of Microbees. <br />
<br />
A huge thanks to UBEE512 and so many contributors over the past years. I have read many posts and am happy with <br />
my emulated floppy disk prowess. However after many trials I still cannot create/boot an emulated hard drive.<br />
<br />
After trying many false leads I returned today to README.TXT, so I read:<br />
<br />
<span style="color: #005dc2;" class="mycode_color">"To boot from a HDD system with no floppy images specified use:</span><br />
<br />
<span style="color: #005dc2;" class="mycode_color">ubee512 --model=p128k --rom1=HD18.ROM --hdd1=hdd_128k_sys_cpm221.hd0"</span><br />
<br />
and of course error. (Yes HD18.ROM is in ROM folder)<br />
<br />
then I read<br />
<br />
"<span style="color: #005dc2;" class="mycode_color">To create a HDD image with a system on it is quite easy using the HDD install</span><br />
<span style="color: #005dc2;" class="mycode_color">floppy disk.  Enter the following on one line:</span><br />
<br />
<span style="color: #005dc2;" class="mycode_color">ubee512 hdd --hdd1=hd.hd0.temp --hdd3=hdd_128k_sys_cpm221.ds40 --bootkey=f"</span><br />
<br />
but of course error so i go looking for hdd_128k_sys_cpm221.ds40 <br />
<br />
I cannae find it.<br />
<br />
I find hdd_128k_sys_2.2t.zip and its content allow me to create hd.hd0.temp<br />
<br />
ah ha! partial success And i remove the temp suffix. But now I read<br />
<br />
<span style="color: #005dc2;" class="mycode_color">"1. Run the INIT program"</span><br />
<br />
Where is this init program. Is it a CP/M utility or a Windows program?<br />
<br />
So after a week i admit defeat, and come here to request assistance.<br />
<br />
Where is this infamous hdd_128k_sys_cpm221.ds40 file located? and please tell me more about Init<br />
<br />
thanks in advance, Graham]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Abeja - macOS emulator compatible with tape based models of Microbees]]></title>
			<link>https://microbeetechnology.com.au/forum/thread-887.html</link>
			<pubDate>Sun, 23 Feb 2025 22:00:39 +1100</pubDate>
			<dc:creator><![CDATA[<a href="https://microbeetechnology.com.au/forum/member.php?action=profile&uid=299">fathertedcrilly</a>]]></dc:creator>
			<guid isPermaLink="false">https://microbeetechnology.com.au/forum/thread-887.html</guid>
			<description><![CDATA[Abeja is a macOS emulator compatible with tape based models of the Microbee computer.<br />
<br />
<a href="https://github.com/fatherdougalmaguire/Abeja" target="_blank" rel="noopener" class="mycode_url">https://github.com/fatherdougalmaguire/Abeja</a><br />
<br />
<img src="https://1drv.ms/i/c/b32dc7ed1e16a876/IQTUtjoeEXAuQZKi7NlJJuC1AdeGGmdtT4gdDlhYGzlYV-g?width=660" loading="lazy"  alt="[Image: IQTUtjoeEXAuQZKi7NlJJuC1AdeGGmdtT4gdDlhY...?width=660]" class="mycode_img" /><br />
It is written in SwiftUI/Swift and will run on Intel and Apple Silicon Macs running macOS Sonoma or later.<br />
( Github repository contains a universal binary )<br />
<br />
Being a highly alpha piece of software, at the moment it doesn't do a real lot.<br />
<br />
The following code is executed from 0x0000 when you start the emulator to write <span style="font-weight: bold;" class="mycode_b">HELLO</span> to the screen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>0000 21 00 F0    LD  HL,61440  <br />
0003 3E 48       LD  A,72  <br />
0005 77          LD  (HL),A  <br />
0006 23          INC HL<br />
0007 3E 45       LD  A,69      <br />
0009 77          LD  (HL),A  <br />
000A 23          INC  HL  <br />
000B 3E 4C       LD  A,76  <br />
000D 77          LD  (HL),A      <br />
000E 23          INC  HL      <br />
000F 3E 4C       LD  A,76  <br />
0011 77          LD (HL),A      <br />
0012 23          INC  HL    <br />
0013 3E 4F       LD  A,79  <br />
0015 77          LD  (HL),A    <br />
0016 23          INC  HL</code></div></div><ul class="mycode_list"><li>You can start/stop the emulator or single step through<br />
</li>
<li>You can amend certain shader settings ( screen size/colour/interlace effect )<br />
</li>
</ul>
<br />
All documented and undocumented Z80A instructions are recognised by the emulator core but only 1/3 are fully implemented ( mostly those that have no effect on flags )<br />
<br />
I'm going to complete the emulation core next and then move onto keyboard/tape/sound code so I can<br />
<br />
<ol type="1" class="mycode_list"><li>Boot BASIC<br />
</li>
<li>Load/Save files to tape<br />
</li>
<li>Play Emu Joust<br />
</li>
</ol>
<br />
Any thoughts/comments/complaints are more than welcome.<br />
<br />
Thanks<br />
Tony]]></description>
			<content:encoded><![CDATA[Abeja is a macOS emulator compatible with tape based models of the Microbee computer.<br />
<br />
<a href="https://github.com/fatherdougalmaguire/Abeja" target="_blank" rel="noopener" class="mycode_url">https://github.com/fatherdougalmaguire/Abeja</a><br />
<br />
<img src="https://1drv.ms/i/c/b32dc7ed1e16a876/IQTUtjoeEXAuQZKi7NlJJuC1AdeGGmdtT4gdDlhYGzlYV-g?width=660" loading="lazy"  alt="[Image: IQTUtjoeEXAuQZKi7NlJJuC1AdeGGmdtT4gdDlhY...?width=660]" class="mycode_img" /><br />
It is written in SwiftUI/Swift and will run on Intel and Apple Silicon Macs running macOS Sonoma or later.<br />
( Github repository contains a universal binary )<br />
<br />
Being a highly alpha piece of software, at the moment it doesn't do a real lot.<br />
<br />
The following code is executed from 0x0000 when you start the emulator to write <span style="font-weight: bold;" class="mycode_b">HELLO</span> to the screen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>0000 21 00 F0    LD  HL,61440  <br />
0003 3E 48       LD  A,72  <br />
0005 77          LD  (HL),A  <br />
0006 23          INC HL<br />
0007 3E 45       LD  A,69      <br />
0009 77          LD  (HL),A  <br />
000A 23          INC  HL  <br />
000B 3E 4C       LD  A,76  <br />
000D 77          LD  (HL),A      <br />
000E 23          INC  HL      <br />
000F 3E 4C       LD  A,76  <br />
0011 77          LD (HL),A      <br />
0012 23          INC  HL    <br />
0013 3E 4F       LD  A,79  <br />
0015 77          LD  (HL),A    <br />
0016 23          INC  HL</code></div></div><ul class="mycode_list"><li>You can start/stop the emulator or single step through<br />
</li>
<li>You can amend certain shader settings ( screen size/colour/interlace effect )<br />
</li>
</ul>
<br />
All documented and undocumented Z80A instructions are recognised by the emulator core but only 1/3 are fully implemented ( mostly those that have no effect on flags )<br />
<br />
I'm going to complete the emulation core next and then move onto keyboard/tape/sound code so I can<br />
<br />
<ol type="1" class="mycode_list"><li>Boot BASIC<br />
</li>
<li>Load/Save files to tape<br />
</li>
<li>Play Emu Joust<br />
</li>
</ol>
<br />
Any thoughts/comments/complaints are more than welcome.<br />
<br />
Thanks<br />
Tony]]></content:encoded>
		</item>
	</channel>
</rss>