Journal of Retro Native Forth
Volume II, Started April 20, 2003

April 20, 2003
--------------
Well, I'm working on the RETRO-NG codebase again; it's starting to improve (which is a good thing!)

Today I revamped the assembler, simplifying the code quite a bit. I also added an IF/THEN construct which works fairly well (logic support at last!) Later I'll bring over RETRO5's logic words and start more complete testing. I'll backport this into RETRO5 (that should please some people who need logic support)

I'm looking into another redesign of the web site, this will NOT come out until I actually release RETRO6 as a working solution (i.e. when it replaces RETRO5)

There is now a forum as well as the Wiki, other bits will come as well. (There will be a wiki, polls, etc; all in a consistant interface). The forum replaces the discussion board.

I'm considering adding a binary runtime option to RETRO6. It'll let you load a compiled application (e.g. from RETRO/C) and run it. Maybe. No promises though.

More later...
[9 hours later]
Still working on IF/THEN, there are a few bugs to be worked out yet...

[5 hours later]
Continuing to work on IF/THEN - these are annoying bits of code!
I'm also starting to move the math words into Forth instead of assembly.

[30 minutes later]
Completed move of all math words (except '+') into Forth

I'll clean up the words/ directory to remove all the old, unused ASM code now.


April 21, 2003
--------------
I finished cleaning up the forth/words/ directory, no unused code now :-)

Still trying to get IF/THEN working... This is a pain in the neck. Once it works it'll be pretty good, but until then it's just annoying.

Here's a basic idea of what needs to be implemented:
: if $72 1, here ;
: then here swap ! ;


April 22, 2003
--------------
Still havn't finished IF/THEN, but I'm starting several new things (including Common Driver Interface specifications and support, a BLOCK editor, and some tools to manage BLOCKS.) Most of this code will be written in Forth. I'll also start to enhance the interface...


April 23, 2003
--------------
Well, IF/THEN don't crash anymore, though they always return the same result...
Here's the current code:
: ?branch ? [ $72 1, ] ;
: >mark [ here 0 , ] ;
: >resolve [ here over - swap ! ] ;
: if [ ?branch >mark ] ;
: then >resolve ;
: a if drop emit then . ;

As you can see, I added support for [ ] as well. Kind of useful IMO.

I'm starting work on a small book (tutorials, developer's guide, articles) about Retro. I'll call it Retro Native Forth Handbook. It'll be a pretty big task, but that's ok with me.

Maybe I'll submit my code to the #forth people and see if they can help me get it working...


April 24, 2003
--------------
Well, I'm finally releasing a snapshot of the new RETRO. Be warned, it's no where near complete, but works fairly well for allowing development. I'll release 3.3.2 soon as well.

I am also posting a copy of the first draft proposal of the new site design today, I hope everyone will like it.

What's high on the priority chart?
1) IF/THEN
2) Return stack
   >R R> R@ R!
3) Common Driver Inititive compatible drivers
  a) Floppy
  b) ATA/IDE
  c) SCSI
  d) VGA/SVGA/VESA
  e) Keyboard
  f) Parallel Port
  g) Printers
  h) Serial Ports
  i) USB
5) Applications
  a) Improved BLOCK editor
  b) Basic drawing program
  c) Terminal

This will take a while, but should be doable given enough time...

I have an ugly, but workable block editor in place now (eventually it should be quite usable). You have to select a block, then you can edit, load, save, view, or delete it. 'Words' is also implemented again, though I should try to factor out some of the added code into Forth.


[Later on]
I've moved these words into the assembler: ? cmove fill
The assembler instruction set is growing, but the assembly code is still pretty hairy. (Just try to grasp it quickly!) Hopefully I can improve it before I release the next build. I decided to stop using version numbers and just rely on build numbers instead. It's easier that way...

The web site has a new layout too.

[A few hours later]
cmove has been moved back into the nasm primitives, it was too long to implement in the assembler. I added a word 'bytes' that helped me clean up the longer definitions quite a bit.

Work on improving the interface is under way. The look is based loosely on the website and supports a nice header at the top of the screen and a footer on the bottom. It eats a few lines of screen space, but looks good so I'll keep it.

I'm about half done my first draft of the Common Driver Interface Specification. Once it's done I'll redo the drivers to comply with it. (It'll make code sharing with other OSes a lot easier).

[8:03PM]
Just about done for the day; I've rewritten the BLOCK editor. It now has a colored background, looks nicer, and offers more editing features than Cards. I'll backport it into RETRO5.3.3.2 and enable Cards to use some of the new features. Once I finish the updates to the ATA driver I'll add support for loading and saving BLOCKS to a hard drive. It's pretty easy to use right now. (And a lot simpler than Cards)


April 25, 2003
--------------
Further interface enhancements. Now colors can be changed (I'll have two or three color themes to choose from in the next release)

The block editor uses the color themes as well.


April 27, 2003
--------------
Added >R R> R@ from Tom Novelli (not working yet)
Also added MACRO and FORTH to switch dictionaries - thanks again to Tom for pointing out this omission. (They don't seem to work properly either) I'll try to fix these later on.

I readded CREATE DOES> so you can use them now -- another nice addition
CONSTANT and VARIABLE are now implemented in Forth

Added:
  ALIGNED ALIGN ALLOT CELL+ CELLS CHAR+ CHARS ARRAY
I rewrote PAD as a side effect, it's better now.

ARRAY is quite useful - try something like:
  10 array foo
  2 foo
to obtain the address of the third element of the array.

I also added INSERT-LINE into the block editor, it's not perfect, but helps quite a bit.

Maybe I could implement the return stack in an array? I'll try later - it's 1:34AM here and I'm getting tired...


April 28, 2003
--------------
The return stack still isn't working, though I'm making a little progress on it.

INSERT-LINE works properly now

Fixed a few bugs in the alignment words

Began work on the new graphics subsystem. We'll eventually support: TEXT, 8, 16, and 32 bits.
Screen resolution will be predetermined... (80x25, 320x200, 640x400, 800x600); Color depths will be changable at runtime.

Further source cleanup too. A little redundancy is gone; I'm hoping the overhauls will prove helpful.

I should come up with a better scheme for handling the drawing words.



Hmm, 640x400 is working pretty good, though a few problems remain. As soon as I work out the details I should be able to do 320x200, 640x400, 640x480, 800x600 in 8-bit color without any problems. I'll add a nice 'select max res' menu to the bootup sequence (DOS/Fat12 loader only) You can set the screen resolution by doing something like: 
   640 480 setres
If it doesn't work, try:
   ati clear
and reset the resolution if needed. Increasing the mode makes everything look a lot nicer. For now you can edit system/headers.1 to choose the max resolution (I've only tested up through 640x480)

The key problem is that text only occupies half the screen. I'll have to work out a fix for this later on. At least it looks better than 320x200!


The 624 utility (in retro6/util, download and install the util6.zip package) can be used to compress the kernel+startup by roughly 50%. The resulting image is still bootable :-) Don't try it with the raw diskimage though.



April 29, 2003
--------------
Further refinements to the UI and scrolling down in console. It's not automatic yet, but works flawlessly other than that. More changes to the color-depth driver code and some refinements to the Forth part of the video drivers.

Oh, and the problems with High-res have been fixed now. We can finally do 640x480!


May 01, 2003
------------
Final tweaks to the VESA driver, it autodetects VESA support now. SCROLL is now tied into the system! Yes, a scrolling console is now working flawlessly (though slow!). I'll make an optional smoothscroll later.

I started some work on the textmode driver, it'll take a while to implement, but will ensure compatibility with nearly everything.

I'm still working on the Common Driver Interface Specification; once I complete it, I'll redo the ATA/IDE driver and keyboard driver to be compatible with it. The Video drivers will still be RETRO specific (though I'll use parts of them to implement a CDIS VGA driver)

The compiler is now nearly identical to Tom Novelli's old RETRO4b one; it works a little better than the one I had been using.


May 02, 2003
------------
I've been working on some fairly minor stuff today. Tom Novelli is porting Retro 6 to Linux, and I'll wait until I have his modifications before I proceed with any massive changes.

I am working on some interface refinements. They are based on some suggestions by Tom Novelli, and should be pretty good. The next release of RETRO6 will implement many of the new interface elements. Basically you'll have three interfaces:
  320x200, basic RETRO4/5 console
  640x480, "Rune" an Advanced Console
           Rune will have a sidebar, virtual consoles, and split screens.
  Text, Based on Rune, this should be pretty simple (and for now is the only thing for Linux)

You can use Rune with 320x200, but there is a lack of screen space at that resolution...

So far I've patched in the inital sidebar support code. Adding multiple consoles will be an interesting challenge; hopefully it won't be too difficult. Splitting the screen is also easy.


May 3, 2003
-----------
Well, it's getting better. The sidebar can now have simple plugins (a clock is included), I'll start on some other ones today. It's off by default, do a 'sidebar:on' to enable it.

I moved startup.f into its own folder and split it between standard forth, user interface, drivers, and the block editor.


Sidebar Todo:
   * Variable widths
   * More plugins
   * Changable colors


Well, I think it's improving nicely. I need to come up with more plugins (which are basically static bits of code that need to be executed frequently (e.g. every keystroke). A stack monitor would be a good use, some of DDR's features could slide in as well. It's more useful on a 640x480 screen than a 320x200 one though.


I got Tom's port of Retro to Linux; he made a large number of changes that should prove helpful, but they'll take a while to get working with both the native and linux versions. In the meantime, I used his init/driver code to add support for Linux to the existing branch. All new builds will support both raw hardware and Linux.

I'm redoing the block editor again, (just the output stuff!). It'll be able to work with a text screen so it can be used with Linux or Native.



May 04, 2003
------------
Ok, I finished the inital cleanup and added two more plugins to the sidebar. It is now a useful piece of code!

I redid the build.bat file, it can now compile all versions of Retro.

I did a quick port of 's' to the Linux version, and reworked the editor to avoid using the DRAW words, so it works under Linux and Native now.

The current (partial) source tree:

/retro6				ocumentation
/retro6/source			Main include files and shared startup code
/retro6/source/forth		Forth Interpreter/Compiler
/retro6/source/forth/words	Shared Primitives
/retro6/source/startup		Forth Code compiled at startup
/retro6/source/drivers		Base directory for drivers/platform primitives
/retro6/source/init		Initialization Code (OS or platform specific)
/retro6/source/loaders		Different boot sectors for loading Retro
/retro6/source/images		All binaries and disk images go here
/retro6/source/listings		All assembly listings go here


I'll be adding a few new features (from TCN's code) to the next release:

Build scripts (running on Linux or Cygwin)
mkincludes				Autogenerate lists of include files (e.g. forth/words/*)

Improved set of macros

More of the new Rune interface will make it into the next release as well...


Retro isn't going to be a big system, the native kernel (minus the disk driver) is just 5,460 bytes (just over 5k), and this could be shaved down to under 5k if you are willing to give up  some eyecandy :-)  I'll be doing some work on this in the near future; a 5k kernel and a 5k Forth? It's possible - 2k of the kernel is the VGA font, so the actual code is just 3,412 bytes right now. It'll be 12k (5k kernel + 5k Forth + 2k font), maybe 10-20k for a C compiler. A purely textbased system could be even smaller...

Retro isn't a complete OS by itself. It'll give you a tiny core to build your own OS on. You'll be able to write (or load) custom plugins like a CD player or IRC client. The core system is just the development tools and an editor, some drivers and a compact interface.

The next build will have some new options:
  traditional (text or VGA, depending on platform/options)
  eyecandy (BlueBar [Retro4a], Rune [Sidebar, etc])
  minimal (Build a minimal (small) system as small as possible, given the text or VGA options)

I'm content with text and 8-bit VGA modes, does anyone _really_ need more? (Unless you're a graphics artist...)

Retro on other platforms; I think TCN is right, each port should be its own project. That doesn't mean a total loss of compatibility - the apps should be fine, as long as the kernel + assembler can build the minimal Forth. You'd at least be able to do textmode.

I need to kill some words and variables in the next revision... It's getting to be too many. How to simplify? - Make some words (like CELL and CHAR) optional. You'd either specifically compile them in, or load them from a block.



May 05, 2003
------------
Fixed the logs a bit (previous entries this month were mislabeled 'March'

New filesizes for Native version:
Total: 8,402
VGA Font: 2,048
Forth Code: 3,556
Kernel: 2,798

As you can see, there's plenty of space left before the kernel reaches 5k :)
The core of the high-level Forth system (assembler, basic words, editor) is just 2,021; the rest is the welcome message (95 bytes), and RUNE user interface. Again, after compiling it's a lot smaller.

Redid the directory/file layout; I'm almost happy with it now. By the end of the week the directory tree will be 'stable', and I should have finished the new improvements to the block editor (and some new sidebar stuff too!). I have some other bits and pieces I'm working on as well.

The BlueBar input panel is gone, I'll make it an optional package (bluebar.zip will overwrite any files that it needs to in order to reinstitute support). HLINE, VLINE, and CIRCLE are gone. Add them if you need them. (I'll implement HLINE and VLINE in Forth soon)

There's a little bit of stub code for a BeOS version - it doesn't work yet, and since I can't get many of the details on memory layouts, syscalls, etc; it will probably remain so for an indefinite time. I'll make it an optional package (BeRETRO.ZIP), you'll still need the Native Sourcecode (RETRO6.ZIP). Should Linux support be optional as well? Once a version is working (like Native or Linux), I'll accept it into the source tree. There'll be an option to download everything, or individual packages. 

Eventually there'll be an 'UPDATE' utility for DOS/Windows/Linux/others that can use WGET to download the latest updates on demand. For instance, a daily UPDATE would check the server, get a list of the latest updates, and fetch them. When a new release is made, it would reset the update list and start over. I might need to support PATCH or other tools to do this though.

I'm reworking the sidebar (Full Size), it's pretty nice. I want a few more plugins though.

I'm also working on the CDI specification, I should have a proposal and some driver code (keyboard, ata/ide driver) soon. I'll stick with Retro's current KEY, to reduce bloat but use the CDI version of the ATA driver. Hopefully I can get these drivers working on at least one other OS before I release them or the specification. Binary compatibility may never come, but at least we can share source code! I'll have to write a 'C' interface (GCC?) which won't be fun: I havn't used C in nearly two years (well, just a little bit, no massive apps :) )



May 06, 2003
------------
I just got TCN's new macros working - the static dictionary is a thing of the past. It's simpler to add words and variables now, though I havn't tried everything yet, this works with the rawfloppy under Bochs. I'll be trying it on real hardware and Linux later today. Should all go well, a little cleanup and the new source tree will replace what I had prior to this.

I think it's nicer now. With a few scripts to autogenerate the include files, it'll make controlling the source tree a lot easier. To add a word, you'd just copy the file to the needed place, run something like '. mkincludes' and recompile. It'd be pretty easy to work with (in my opinion)

With the simplified Sidebar words to enable easier addition of plugins, I'm making progress. The split screen support shouldn't be too difficult to add either.

I'm also writing several new articles and some documentation on Retro, plus working on the online tutorial a bit.

I'm leaning towards a Friday or Saturday release of Build 5, it all depends on how much I get done by then :-)



May 07, 2003
------------
Made the sidebar a little thinner (1/4 screen)
Finished Native and Linux testing


--------------------
Word Change Summary:
--------------------
Fixed:
   ALIGN

Removed:
   ALIGNED
   CHARS
   CHAR+

Added:
   SIDEBARCOLOR

Renamed:
--------------------

I'm going to release several files:
RETRO6-ALL     -- Everything
RETRO6-CORE    -- The Forth Console (Native) + Standard Forth + Drivers
RETRO6-LINUX   -- Linux support, requires RETRO6-CORE
RETRO6-BEOS    -- BeOS support, requires RETRO6-CORE
RETRO6-RUNE    -- Rune Console, requires RETRO6-CORE; replaces a few words
RETRO6-UTILS   -- NASM, DD, Rawrite, 624 packer, etc for DOS/Windows
RETRO6-UPDATE  -- Compiled (DOS) and source code (Linux) versions of an update utility.
RETRO6-DOC     -- Full documentation for Retro Native Forth
RETRO6-FLOPPY  -- FAT12 Floppy Image of Retro Native Forth

Almost ready for releasing Build 5, just a few more tweaks still needed.



May 08, 2003
------------
Ok, the release of Build 5 will come today. I'll upload it this afternoon, along with the new Download Page :-) Building off of TCN's suggestions, this should make it a lot easier for people to find what they want.

Ok, the release files (including an updated floppy image) are done. What's next?

1) Redo the web site a little more
  a) Fill in incomplete Wiki content
  b) Upload new articles
  c) Replace download page
2) Recode HLINE and VLINE in Forth
3) Complete the BeOS port (still need more docs...)
4) Begin a FreeBSD port (need FreeBSD)
5) Support for Menuet???
6) Might not be too hard, see the simple Linux EMU souce
7) Improve sidebar more
8) Splitscreen sessions
9) Multiple sessions
10) Code an IDT in Forth
11) Multitasking!
12) Support for C
13) Write a "real" application

There is plenty more, and these aren't in any particular order. If you want to help, choose something that looks interesting and do it. It doesn't have to be on this list.


May 09, 2003
------------
Reorganized the inc/ directory. No more subdirs there.

Began researching framebuffer and VGA under Linux. I'm considering two main options for graphics under Linux, including:
  1) Raw access to the framebuffer
  2) SVGALIB
Perhaps I should offer both? We won't support (in the core releases):
  1) X11
  2) DirectFB
  3) GGI
  4) DINX
  5) MicroWindows / NanoGUI
  6) XFB
Mainly for the complexity they contain. Tom Novelli plans to do a port of Allegro to Retro. It'll be a fork of the main codebase, and skip a lot of the cruft that has built up over the years. I'm also considering a fork of SVGALIB that just contains the minimum stuff (setup VGA, draw rect, circle, pixels, or whatever) for use with Retro. It'd save a lot of bloat. Key problem: the GPL. If Retro links with a GPL library, it has to use GPL. If I can, I'll avoid this.

I started coding the BITMAP words, currently they are a part of Rune, eventually they'll be a separate set of words :) A quick and dirty CREATE-BITMAP is working. I still need to have it return the X Y values as well as the address of the buffer. Eventually we'll need to be able to create and delete the bitmaps, but for now we just create them. You'll need more than 1MB to handle them though - they are allocated above PAD (1.9MB address; I'll make it a fixed offset over the starting H soon)

Added HLINE and VLINE again. They're in Forth now :)  Oh, you can also set their width if you want. LINE:THIN, LINE:MEDIUM, LINE:HEAVY are preset widths, or set the lineWidth variable. I'll add support for drawing to bitmaps later.

My first stab at getting an IDT into Retro flopped. I'll try a different approach... I just need a minimal one for whenever we get ready to actually do anything beyond cooperative multitasking.

I added a macro that should make calling routines compiled in C easier. You can just push the args, do a 'callproc NAME, # of args', and read the return value in EAX. Not too difficult by any means. You need to know if your compiler adds an underscore to the routine name, the system will adapt for this is you compile with -Dunderscore

I wrote another article too. This one is on the distribution of the various components, and presents a general idea of how we can build complex code over a simple OS without loosing the overall simplicity.

Added another word: PIXEL which draws a single pixel wherever you're AT.

I'll be adding a Word Change Summary at the end of each entry in this log from now on. To view them (Today and later), do a:
  grep \>\>\> crc.journal.txt
Notes on file and directory changes can be found by doing a:
  grep @@@ crc.journal.txt
You may wish to use LESS to view the output.

>>> --------------------
>>> May 09, 2003     CRC
>>> --------------------
>>> Fixed:
>>> Removed:
>>> Added:
>>>   HLINE
>>>   VLINE
>>>   LINEWIDTH
>>>   LINE:THIN
>>>   LINE:MEDIUM
>>>   LINE:HEAVY
>>>   PIXEL
>>>   NEXTBITMAP
>>>   CREATE-BITMAP
>>>   LOAD-BITMAP
>>> Renamed:
>>> --------------------
>>> Total Changes: 10
>>> --------------------

@@@ --------------------
@@@ May 09, 2003     CRC
@@@ --------------------
@@@ Moved:
@@@   INC/COMMON/MACROS -> INC/MACROS
@@@   INC/NATIVE/HEADER -> INC/HEADER
@@@ Renamed:
@@@ Added:
@@@   RETRO6/LOG.TEMPLATE.TXT
@@@ Removed:
@@@ --------------------
@@@ Total Changes: 3
@@@ --------------------



May 10, 2003
------------
I'm hoping to try an interface to SVGALIB today. I don't expect to get it fully working, but a switch to VGA mode, drawing a few pixels, and switching back would be nice :) I'm also looking into direct access of the kernel framebuffer. It might prove a little more effective for Retro's use...

It appears that I may be able to implement the entire SVGALIB init code in the platform/linux.asm file. Should this work, it'll add just a minimal amount of size to the image. What I *want* to do is just get a handle to a start of a linear framebuffer; then I can pretty much use the existing drawing words under Linux. It would get painful to maintain two totally separate sets of drawing words.

CLIP is no longer a user-callable word. I'll do a special one for bitmaps. The variable FRAME might be renamed SCREEN later on...

A little more filesystem reorganization. The primitives/assembler are now in boot/asm.f; the words I and O are now in boot/native/drivers.f; This just helps clean it up a bit more. Oh, PAD now works under Linux, so arrays are supported properly.

The SVGALIB experiments are going fairly well too.

>>> --------------------
>>> May 10, 2003     CRC
>>> --------------------
>>> Fixed:
>>>    CLIP
>>>    PAD-BASE
>>> Removed:
>>> Added:
>>> Renamed:
>>> --------------------
>>> Total Changes: 2
>>> --------------------

@@@ --------------------
@@@ May 10, 2003     CRC
@@@ --------------------
@@@ Moved:
@@@ Renamed:
@@@ Added:
@@@   ASM.F
@@@ Removed:
@@@ --------------------
@@@ Total Changes: 1
@@@ --------------------



May 13, 2002
------------
After a whirlwind run of coding I managed to get at least a partially working set of enhancements to the Linux version. Using GCC and SVGALIB we now have a version of Retro 6 that runs in 320x200 (and maybe other modes) VGA graphics under Linux. At last, we can test the GUI stuff (and almost everything else too) under Linux. This fulfills another one of Tom Novelli's goals for the Linux port. Some code cleanup is still needed (I want to reduce the number of duplicated files; most words in the VGA versions are identical!), but that will come in Build 7.

I'm including the current collection of articles and tutorials in the Source.zip file now. My work on the web site is progressing, and everything should come together soon. It won't be long before we are linking with C.

The revamped ATA driver will have to wait until at least Retro 6, Build 7 (unless it's downloaded, and the kernel is rebuilt. Not a hard change, just a minor task!)


May 17, 2003
------------
Was working on paring down SVGALIB... I'll resume work on R6, Build 7 now :-)

Several ideas for different UI's. You'll eventually have a choice in how Retro looks and acts. Rune (with sessions, sidebar, etc) will be the main one, though I am working on at least one more option (for 320x200 [mainly]) with less interface bloat.


May 19, 2003
------------
Still playing with my modified (barely working) version of SVGALIB. It's slow going.

I've cut out the sidebar related stuff, and started moving the Imagine bitmap renderer to Retro 6. Once I get it working with the new bitmap framework, I'll start work on a better user interface.

The drawing words are being revamped a bit. The XY variable is still used internally, but its value is determined each time a word is called by using separate X and Y variables. This will make drawing a lot easier in some respects (and it'll aid in porting to non-framebuffer based drawing systems).

This should be ready for release by the middle of the week. I'll leave out my buggy attempt to cut down SVGALIB though.

I ran Retro 6 on my Zaurus SL-5500 today. It's pretty cool! A 200MHZ ARM-based handheld computer running Retro :) ok, ok, I cheated. I ran the native version using an SDL-equipped version of Bochs, but it worked, sort of. The zBochs system is still in early (pre2.0 cvs) development. It could really use a good update... I'll actually port it once I have the core system working well enough for "real" use. Read doc/ports.txt for details on what ports I plan to do.


May 21, 2003
------------
Fixed a handful of bugs that arose in my attempts to get separate X and Y variables working. These have some uses, but we'll have to wait and see if they are effective enough in the long run. I may revert back to just one XY variable...

I have an idea for a new interface, which is looking pretty good. I still need to get the bitmap and driver frameworks worked out, and finalize the drawing wordset... As I said, it's slow going. Hopefully things will get easier this summer after the drawing, bitmap, and driver frameworks are completed.


May 22, 2003
------------
The separate X and Y variables are useful for drawing bitmaps if nothing else...
The IMAGINE port is not going smoothly, I may need to rewrite it.

I readded the sidebar (thinner, will use icons and text for various purposes), I'm also planning to add a titlebar (with the unused 8 pixels at the top of the screen). This interface is geared towards the single process/minimal kernel system, though it may be useful later on as we get more advanced things working.

I'm delaying the release of Build 7 until Saturday, maybe even later if the need arises. I want to make some decent progress before I release it to the world. I have a much nice block editor (similar to the earlier build 2/3 releases) in the works. We're also looking into some nice stuff like a basic ABC editor and the start of APM support. (There's a rough battery monitor  shown in the new sidebar, though it isn't tied to a power monitor yet)

What'll be in the sidebar in R6B7:
  * Battery Indicator (not working, just a placeholder)
  * Volume Indicator (not working, just a placeholder)
  * Logo :)
  * Icons showing supported hardware (hard drives, VGA, keyboard, etc)


May 24, 2003
------------
Still more delays on releasing Build 7. I *really* want to get the bitmap framework into a more usable state before I release it. I'm also trying to finish up some more of the sidebar stuff. It'll be a pretty important component for information purposes, though it'll be a while before all of Tom Novelli's ideas for it come to pass.

The Linux/SVGALIB port now uses symlinks to the native and Linux/Text ports, so it will save space. There's an all new build script for Linux which pretty much replaces the mkincludes and build.bat combination. This one is a fairly nice piece of code in itself as it simplifies the build process quite a bit. Later on I'll be adding code to generate a glossary, make a boot disk directly, and cleanup all of the *~ files that are generated as I edit the source.

Things continue to shape up slowly. Hopefully I can finish most of this stuff by Monday or Tuesday.

As a final bit for today, I started on a new web-based configuration system for Retro 6. It'll have its uses once done...


May 25, 2003
------------
The ATA/IDE driver is back in place, with a few new features. I'll be doing an LBA emulation system pretty soon, it'll sit over this and work with it to provide a clean, guaranteed block layer. LBA doesn't work the same on all hardware (a sad thing).

Tested the ATA driver, it works just as well as it did under Retro 5. Still needs CHS-LBA conversions, but it'll work for now, which is always a Good Thing. For now, here's a couple of quick words that will allow a few blocks (0 - 15) to be saved; use beyond this at your own risk! They do protect against MBR corruption though. DO NOT USE IF YOU USE GRUB OR ANOTHER BOOT LOADER THAT USES THE FIRST TRACK!!!!! YOU WILL RENDER YOUR HARD DRIVE UNBOOTABLE IF YOU DO!!!


: save select block ata:buffer 512 cmove 0 0 2 lastBlock @ + ata:write ;
: load select drop 0 0 2 lastBlock @ + ata:read ata:buffer lastBlock @ block 512 cmove ;

If you want to view the MBR, add this word to the mix
: mbrdump 0 0 1 ata:read ata:buffer 512 type ;

I'll be adding another icon to the sidebar (a volume icon). Again, it won't be useful yet; but it will after I get audio support. (An audio driver for Linux should actually be pretty easy; just a front end to ALSA or OSS; a native driver is a little harder.)


May 26, 2003
------------
I finished the initial method of hard drive installation. This works, though it is not perfect. I'm using SYSLINUX and a FAT16 partition (which I also store Retro's source code on). It's a pain to get it working with XP, though not as hard with older versions of Windows or Linux.

I'll be uploading a package with instructions for those who are interested. I'm just happy not to need floppies for testing anymore. A better solution will come as time passes. Oh, you'll also need a boot mangager, such as GRUB, LILO, XOSL, GAG, SBM, or BootMan. I use either LILO or BootMan, though the others should also work.

The HDD install package is HDD.ZIP in http://retro.tunes.org/pub

Separate X and Y variables dropped for simplicity reasons.

If you use the native version, adding  -DXedit will enable loading and saving to/from the hard drive. Until we do an ATA emulator using a file under Linux, this won't be supported there. Sorry!

Todo in Build 8 (and beyond):
  Evaluate code in BLOCKS
  Improved ATA driver
  Improved build scripts
  Easier install to hard drive
  Debugger!
  Get the IMAGINE-based Bitmap Framework working (it isn't working, so I'm not including it!)
  Start coding an audio driver (and tie it in to the volume icon)
  Continue research on APM/APCI
  Expand UI Framework (TextLabels, Menus, etc)
  Write a Forth Glossary for those who don't know Retro's dialect of Forth
  Start writing a "real" application
  Look into doing a multiboot kernel (for GRUB users)
  Get the BeOS port working!

There's plenty more that's not on this list, (those who actually read all of these journals know that the lists are broad guidelines, not a real TODO list), but I'll keep working on them. I hereby declare Build 7 ready for release.
