MaxCoderz

for your 1 bit pleasure!

All times are UTC




Post new topic Reply to topic  [ 120 posts ]  Go to page 1, 2, 3, 4, 5 ... 8  Next
Author Message
 Post subject: Original Progress Thread
PostPosted: Mon 19 May, 2008 12:41 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
This is a project I initially attempted to get off the ground about four years ago, but never did. Anyhow, I've started work on it, and thanks to help from Richard Russell (the original developer) and J.G.Harston (who comparatively recently developed the Sinclair ZX Spectrum port) it looks like it should be possible this time around. :)

BBC BASIC was the native programming language on Acorn's BBC Micro. It's a structured BASIC dialect and supports procedures and functions, permitting far nicer code than the line-numbered GOTO and GOSUB code on other contemporary machines. It also has a built-in assembler, for inline assembly.

There is no source available, which is where the problems start to come in. Fortunately, J.G.Harston has developed a utility that permits the platform-agnostic BBC BASIC interpreter to be relocated. However, it assumes that the system has a jump table in RAM from $FF80..$FFFF (this jump table would be used to call platform-specific code); this memory range is not executable on the TI-83+. Execution protection in the $C000..$FFFF range may also cause issues for inline assembly code (which is, naturally, executed from RAM).

The TI-OS does not offer an especially suitable environment for BBC BASIC either; it is mainly menu driven (a command-line driven environment is preferable), does not have a plain text editor and does not use ASCII. To resolve this issues, I've concentrated on developing a suitable environment for BBC BASIC to live in, including a command-line interface and text editor.

Image

Text files are stored as AppVars with a TEXTFILE header, and I've developed a Windows-based notepad clone for editing them (it saves and loads directly to and from .8xv). The following commands are currently supported (see here for a reference from the Windows verion): BYE, COPY, DELETE, DIR, ERASE, EXEC, QUIT, RENAME, TYPE, |.

To enter the editor, EDIT can be used. This presents a full-screen editor a little like the TI-OS program editor, but edits plain text files.

The interface transparently supports AT keyboards (which are rather easier to type on than the TI's keypad). The character resolution is 24 columns in 10 rows (4x6 pixel characters), giving you quite a lot of room to see what you're working on.

I intend on the final program being a 2-page Flash application; one page for BBC BASIC, and one page for the environment and OS interface. This unfortunately makes this a TI-83+ only project.

Even if I don't manage to shoe-horn BBC BASIC onto the TI-83+, the interface code (which uses direct hardware access for everything but opening and editing AppVars) could be useful for other projects.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon 19 May, 2008 8:59 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 01 Dec, 2005 9:04 am
Posts: 227
Location: Melbourne, Australia
That is uber cool :)

Are the text files all in one appvar with their own file system, or separate appvars?

Quote:
AT keyboards (which are rather easier to type on than the TI's keypad)


Understatement of the year! :mrgreen:

_________________
"I don't know why a refrigerator is now involved, but put that aside for now". - Jim e on unitedti.org

avatar courtesy of driesguldolf.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon 19 May, 2008 9:43 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
qarnos wrote:
Are the text files all in one appvar with their own file system, or separate appvars?
Each file (as seen by BBC BASIC) is its own variable, which would allow them to be moved between archive and RAM. I was thinking of implementing *LOCK and *UNLOCK as commands to copy the AppVars to and from the archive.

I'm currently working on a better file handling system that will transparently support files in RAM and in archive via handles (with simple methods such as File.OpenRead, File.ReadByte, File.Seek, File.Close and so on). It should be easy enough to have any number of files open for reading, but I'm not sure how well things are going to work with multiple files open for writing, as the TI-OS only supports one file at a time. Opening the file for editing, appending a byte, closing it again and marking all existing handles as invalid (so the next time they are accessed the variable is looked up again, as RAM has been juggled). As files opened for editing hog all of the free RAM, they can't be left open in case BBC BASIC needs to allocate some memory for itself.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Tue 20 May, 2008 7:00 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 4094
Location: I cant seem to get out of this cryogenic chamber!
Ahh so it has come to life (ive heard you talking about this project before). Great stuff ben, the text editor looks really nice.

Is that TI's font or your own?

_________________
"My world is Black & White. But if I blink fast enough, I see it in Grayscale."
Image
Image


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Tue 20 May, 2008 11:20 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
The font is a mish-mash of the TI-OS one, the Windows Terminal font and my own fiddling around to get it to fit into 3x5 pixel cells. If you think you can improve on it, here's the current resource file:

Image

(Or, if you prefer; the .fon file - I use Fony).

ASCII ` is replaced by £, | appears as ¦ and 127 (DEL) should be a solid block (as far as I can tell by examining the BBC Micro font). The two sequences of block graphics characters are Teletext "sixel" graphics.

I've redone (nearly) all of the file handling code, which is now handle-based and can support multiple open files as well as transparent support for files from the archive. When a file is opened, the internal TI-OS name is preserved, so if a ROM call is known to shuffle memory around all handles are marked as dirty and the next time a dirty one is accessed it is automatically re-opened. This means that fun can be had with EXEC:

Image

The command file creates a new file, ABC, then opens it for editing. It then pauses before executing ABC, then quits.

When I run the command file, I enter DIR twice as the content for ABC, which it then runs before quitting. This demonstrates having multiple files open (FILE and ABC) as well as the system remaining stable even when memory has been rearranged (by editing ABC).

For writing files, I imagine one way that might work quite well is to make the open file 256 bytes (or so) larger than its data. As data is written, it goes into this 256 byte dummy space. If it runs out of this dummy space, it is opened for editing (by the TI-OS), inflated another 256 bytes, then closed again (and all old handles re-opened automatically after memory is reshuffled). When the file handle is closed, it is opened for editing once again, and any remaining dummy space is removed. This should hopefully allow for multiple files to be open for reading and writing with reduced CPU overhead.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Wed 21 May, 2008 11:00 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
I've started working with the actual BBC BASIC interpreter. As it won't run in its current state on the TI calculator (it relies on a jump table at $FF80..$FFFF to interact with the host, which is protected) I'm using an Z80 emulator I wrote to try and puzzle out what the interface should be doing from the relative sanity of C# code (the jump table is populated with OUT (nn), A instructions which are subsequently trapped and handled by the emulator).

Image

Another advantage of this strategy is that a Windows implementation that covers everything that the TI version covers can be developed alongside, so BBC BASIC programs could be edited/debugged on Windows before being transferred to the calculator.

One thing I hadn't realised is that the graphics operations that BBC BASIC offers are actually implemented via the OSWRCH handler (OS WRite CHaracter), which means that BBC BASIC's PLOT, MOVE and DRAW commands will also be available, as well as any commands that use them indirectly (such as CIRCLE).


Last edited by benryves on Thu 22 May, 2008 3:29 pm, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 22 May, 2008 2:16 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 01 Dec, 2005 9:04 am
Posts: 227
Location: Melbourne, Australia
Would it be difficult to rewrite the code to use a different jump table address?

The C000h limit is the single most annoying thing TI have ever done.

_________________
"I don't know why a refrigerator is now involved, but put that aside for now". - Jim e on unitedti.org

avatar courtesy of driesguldolf.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 22 May, 2008 10:40 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
J.G.Harston, the author of the Spectrum port, has written a relocator program that will take an existing compiled BBC BASIC interpreter image and patch it to change the addresses that it relies on. He is very kindly working on updating this program to be able to change the offset of the jump table.

If BBC BASIC assembles any inline assembly in the protected area, this too will trigger a crash. I suppose one workaround would be to have a "safe" mode that sets HIMEM (the upper exclusive memory bound) to &C000; leading to the further irritation that TI stuffed all their fixed system variables into the executable portion of RAM. 8.8KB is still a little more memory than the shareware versions of x86 BBC BASIC permit (8KB), though.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 22 May, 2008 6:41 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Wed 15 Dec, 2004 6:06 am
Posts: 579
Location: Chicago!
Will this thing ever support RAM bankswitching on the 84+ or 83+SE?

_________________
You know your hexadecimal output routine is broken when it displays the character 'G'.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 22 May, 2008 6:59 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
It's doubtful as far as I'm concerned, as BASIC assumes a flat memory model for RAM, and I own neither calculator so wouldn't be able to develop/test the software. (Nor do I understand the operation of these extra pages).

If it's possible to swap out memory to give a fixed, free 32KB memory map from &8000..&FFFF, then that would probably work very nicely (when BBC BASIC returns to the host, the 32KB that the OS assumes is there for its own use could be swapped back).

I'll try and get it working for the regular 83+ first; if that proves a success I'm sure someone gifted in the ways of the 83+SE would be able to modify the code. :)


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Fri 23 May, 2008 12:34 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 01 Dec, 2005 9:04 am
Posts: 227
Location: Melbourne, Australia
benryves wrote:
J.G.Harston, the author of the Spectrum port, has written a relocator program that will take an existing compiled BBC BASIC interpreter image and patch it to change the addresses that it relies on. He is very kindly working on updating this program to be able to change the offset of the jump table.


Wow! That's pretty good of him :D

This reminds me of a trick the old spectrum programmers used to use. They would set the IM2 table to $FF, and insert a JR at $FFFF. The first byte of the spectrum ROM was as DI ($f3), which would make the code jump to $fff4, where they'd put a JP to the service routine.

I wish we could do something like that with the calcs.

Quote:
leading to the further irritation that TI stuffed all their fixed system variables into the executable portion of RAM.


Well, I guess you can forgive them for that, since this goes back to the 83-, which didn't have the C000 problem. But there was no real need for them to create this artificial obstacle in the first place :?

_________________
"I don't know why a refrigerator is now involved, but put that aside for now". - Jim e on unitedti.org

avatar courtesy of driesguldolf.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Wed 28 May, 2008 11:23 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
A minor update; I've added the ability to inject keys into the input buffer, which can then be used by something that mimics the TI-OS CATALOG menu. Anything that calls Keypad.GetChar or Console.ReadChar (note my consistent naming conventions?) will get this functionality. :)

Image

The list is populated from the BASIC commands from here; I might have missed a few that don't appear in the Z80 version of BBC BASIC (some of those listed are Windows-specific).

Depending on how much space is left in Flash I'd like to add at least basic syntax help information for each command. Failing that, an optional help dictionary could be stored in the archive (a bit like the CtlgHelp app).


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 29 May, 2008 10:04 pm 
Offline
New Member

Joined: Sat 02 Sep, 2006 8:39 pm
Posts: 22
That looks really cool. 8)


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu 29 May, 2008 11:46 pm 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 3064
Location: Croydon, England
Richard Russell has very kindly sent me copies of the BBC BASIC relocatable object modules. As Brass doesn't use a conventional linker I am currently working through Microsoft's documentation for their M80/L80 assembler and linker for CP/M to work out the file format (done) and how I should be translating the addresses (getting there).

What this means is that BBC BASIC can be split up and spread around ROM and RAM in a fashion that will work with the TI-OS. :)


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Fri 30 May, 2008 7:39 am 
Offline
Maxcoderz Staff
User avatar

Joined: Thu 16 Dec, 2004 10:06 pm
Posts: 4094
Location: I cant seem to get out of this cryogenic chamber!
Great stuff ... boy this project has like exploded with progress! (I wish mine moved this fast :S).

_________________
"My world is Black & White. But if I blink fast enough, I see it in Grayscale."
Image
Image


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 120 posts ]  Go to page 1, 2, 3, 4, 5 ... 8  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB ® Forum Software © phpBB Group | DVGFX2 by: Matt