BASIC - Status as of 2011-07-27
Wow! It’s been a month since my last update regarding this pet project. To be fair, I did go on vacation for a week, so it’s really only been about 3 weeks of spare time effort on this. With that said, I think it’s moving along at a rather excellent pace.
Parser
Additional work done to the parser. Decided to remove a lot of the validation and treat this layer as more of a tokenizer that can then be further validated at the interpreter level.
Portable Library
After getting everything working in Silverlight and continuing the project for several weeks, I recently attempted to get the interpreter working in Windows Phone 7. I created a new project and copied over the code. Tons of errors. Several VB language features not available, more .NET Framework elements MIA and slight differences with Silverlight implementation on both devices. I remembered a discussion about a relatively new project call the Portable Library Project. After getting the correct service packs and such, was able to create a Portable Library version of the interpreter which required that I split several pieces out (and up) to a platform specific layer. The portions are labeled as Display, Keyboard, Sound and File System. Once done, I now have a core assembly that is capable of being leveraged across .NET 4, Silverlight 4, Windows Phone 7 and Xbox 360 (in theory).
Display
A lot of work was still to be done since the last update in order to fully handle the “IDE” aspects; mostly related to what I’m calling “last line issues”.
Keyboard
OK, I thought Silverlight was limited with regards to intercepting and working with the keyboard. Wow! Windows Phone 7… you’re my new worst enemy. Why do you have a KeyUp
/K`eyDown event yet never can tell me the state of the Shift key? I had to work a serious hack that takes 50+ lines of code to do what should realistically be less than 3.
I also had to handle the concept of a key buffer so that “type ahead” would work while a pending task was executing (file system).
File System
One goal that I had in mind was I wanted to support the file system functionality in such a way that it was not “local storage”. I’d like to make it so that people can share content among one another, so it was necessary to create a file system that would work over the wire. All of the “IDE” functionality is fully supported. Eventually this layer will have to handle random access file functionality necessary to implement various file I/O keywords (which are not completed as yet).
Sound
The 5th keyword in the GW-BASIC manual is BEEP
. Since BEEP
is an 800 Hz for 1/4th of a second tone, it made sense to tackle two keywords at once since SOUND 800, 4.55
produces the same result. A fortune would have it, Silverlight 3+ has the ability for me to fiddle with the PCM stream. It does have it’s problems and, apparently, Silverlight 5 might be able to provide some solutions to the “lag” that I’m experiencing. I have not tried this code yet on WP7; however, what is coming to Silverlight 5 is already supported on the phone implementation of Silverlight.
Keywords
As of this writing, 114 keywords have been implemented. This is not to say they are 100% completed, but they are implemented enough to start testing and tweaking. Additionally, definable functions, arrays, nested for loops, etc. are all working. I’ve also implemented a few useful keywords that are not part of GW-BASIC which include OLD
, LBOUND
, UBOUND
, LCASE$
, and UCASE$
. LBOUND
and UBOUND
have been very helpful in working with getting arrays working.
Compatibility
As you can see, a lot of work for three weeks of spare time. To put things into perspective, I think I have all keywords implemented based on documentation for the Dartmouth Oct’64 version as well as all of the listed keywords necessary for both BASIC Computer Games - Microcomputer Edition books (c. 1979) which is based on Microsoft Basic, Revision 4.0. I have not done any testing of the programs included as a lot of them are kind of long. However, I’ve also been working my way through “A Bit of IBM BASIC” and all code samples up to page 90 are working. There’s still a potential for a lot of bugs, so testing…testing…testing…
Summary
So far this has been an awesome side project and there is still a ton of things to complete. I’m having a lot of opportunity to experience several technologies that I have not been able to play with in my “day job”; so this alone is worth the time and energy going into this project. Who knows where it will end up; however, I have to remind myself to not focus on the destination, otherwise I’ll miss out on the splendor that is the journey.