THE Sega Genesis Tiny BASIC Compiler
By DevSter (Joseph Norman)

The NEW BasiEgaXorz Help Page!



What is it?

Simple, BasiEgaXorz is a BASIC compiler for the Sega Genesis consoles. That means, by using this compiler, you can program in a form of BASIC language to create awesome programs, or games for your old Sega Genesis game console. The compiler will also compile CD ISOs for the Sega CD attachment, ROMs that can use the features of the 32x extension, and not to mention, creating ROMs for the regular console without attachements. Today, when most programmers think of the BASIC language, they think about Visual Basic. The language BasiEgaXorz uses is not like Visual Basic, and it certianly wasn't derived from it. This compiler is aimed for speed, so there are many things that cannot be dynamic within the environment, everything is stayed static (like variables for example, no such thing as REDIM). BasiEgaXorz is intended for a beginer's platform in order to give an opportunity to make fun and simple games easy to make on an awesome gaming console!

What are the main features?

BasiEgaXorz language features:
  • Support for both line numbered labels and just regular plain old labels
  • User defined subroutines and functions
  • Integer (16 bit), Long (32 bit), and String (limited 8 bit) data types
  • Multiplication, division, addition, subtraction, bit shift, modulo, compare, and logical operator support
  • A wide variety of string data type commands and functions
  • Argunerics
  • Do....Loop, For....Next, While....Wend looping
  • Data storage using the classical BASIC Data statement approach
  • Single dimension arrays for integer and long data types
BasiEgaXorz system implementation features:
  • Full text displaying and color features withe the PRINT and INK commands
  • User input using the INPUT command
  • Background tile graphics (for both planes) and sprite graphics of the VDP supported
  • Joypad functions included
  • Pallette changing and loading commands are there
  • Tile graphics changing and loading commands there too
  • Limited tile mapping supported
  • Background plane scrolling supported
  • PSG sound effects support

Getting Starting

Installation using the ZIP process (if you downloaded the compiler from here)

Inside your Windows environment, un-zip the main compiler package into its own directory somewhere (try to make the directory as close to the root of the drive as possible, for errors have been reported that the assembler doesn't like path names greater than a certain number of characters). After that, try running the IDE program and see if it runs. If it doesn't, and gives you an error and immediately quits, then download the Visual Basic support files in the downloads section. Once you've confirmed that the IDE runs, now go on to download the SNASM68K assembler. Be sure to download the appropriate version for your operating system (eg: the Windows 2000 version of SNASM68K won't run on Windows 98, and vice-versa) and extract the program in the same directory as the BasiEgaXorz IDE.

Getting some code working

If you haven't done so already, make sure you've downloaded a Sega Genesis emulator that will run your compiled ROM. Without a way to test your program, the compiler is pretty useless =P. Here is some sample exercises and code samples for the begining coder.

Excercise 1: For a simple, working program, type in this line and run it (make sure there is a space, or tab before the word "print"):
	print "Hello World!"
If you ran compiled the program, and have run it in an emulator, you would have seen that the screen showed Hello World! in big white text. The BASIC language uses commands that are issued to the compiler to tell what you want your program to do. What we have done is use the PRINT command, which simply displays text onto the screen. We always use a space, or tab in front of the command to tell the compiler that we are issuing it a command (if there were no space or tab, the compiler would think the line is a label, which will do nothing then).

Next, we insert a space after PRINT, and type in the first argument. In a compiler, an argument is a word, or a set of words that support the command in performing its function. Without arguments, PRINT couldn't do much, and couldn't display your set of words. We now type in "Hello World!" as our argument. As you can see when running the program, the output showed Hello World! on the screen, which is what was enclosed inside the quotes in the argument. The compiler will never make your program display the quotes, the quotes are there to help the compiler distinguish that you want to use a string of words instead of an expression inside the argument. Also, commands with arguments are called statements.

Excercise 2: This next program will then display two different phrases, but now in a different color:
	ink 1
	print "This is one line"
	print "...and this is the next!"
Here, we've used more than one command, compared to the previous exercise. You'll use a new line to specify a new command, or will use a colol (:) between statements. As shown, the INK command will switch text drawing colors between 4 different colors. The numerical argument that appears after INK specifies which color to use. A value of 0 will make text draw in white (white is the default color used if no INK command has changed colors), 1 draws in a light-blueish color, 2 draws in a bright green color, and 3 draws in purple. Text will be continued to be displayed in the color spcified by INK until another ink command is encountered, for example:
	ink 3: print "This is one line"
	ink 2: print " ...ooooh in green!"
	ink 1: print "  Now in cyan!"
This time, the statements are seperated by a colon, which is almost the same as useing a new line for code.

Excercise 3: Now we'll get into more intermediate topics, and fly right into using variables. Variables are very useful because they can store data, like numbers, or sets af characters. We can manipulate variables in different ways, some variables we can use elementary arithmetic. We know we are using variables when we simply type in a word without quotes in our code for an argument. For now, we'll start out with using integers:
	print "If we have ";apples;" apples and then we eat"
	print "one apple, we'll have ";
	print apples;" left!"
In the first line of code, we are storing the number 123 into variable apples. We use an equals (=) sign to store whatever's in the expression on the right of the equals sign into the variable on the left side. The variable apples will always have a value of 123 until the variable is changed again.

So, what else can we do with variables besides store numbers in them? Well, we can recall variables back, and print them onto the screen, which is what we've done in the second line. The PRINT may be more complicated in this line that what you've already seen in the previous exercises. First, we will print a set of words on the screen inside the quotes. After we're done displaying what's inside the quotes, there's more stuff inside the argument to be displayed, so we'll display that. We use a semi-color (;) to seperate different parts of what's being displayed. We do this because if we try to specify a variable inside quotes, it's not going to work because the compiler will literaly make your program display everything exectly what's inside those quotes, and will not take your variable to be a variable. To display the variable, we just simple type the name of our variable after the semi-colon, and it will be recognized as a variable. We'll want to display more text after the variable, so we use another semi-color, and then continue with using a set of words enclosed in quotes. Also, the semi-colon seperator will also ensure that whatever will be displayed next will display on the same line that's currently being displayed on, which is what the third line is emphasizing.

Now, we'll try to manipulate our variable, and subtract 1 from itself. The fourth line is a regular storing statement. First, on the right side of the equal sign, we'll recall our variable back, use the subtraction sign to subtract a number from the variable, and then we will specify a quantity to subtract from, which is 1. If we were to not include the variable name on the right side, it will act just like the first line of code in our code. We can also play around with the operations, and change it to addition, multiplication, and even division. We may also want to change the quantity of what operation we want to use by changing 1 to values like 2, 3, 4, etc. The expression can also be extended longer to include more operations, like: apples=apples*2+1 which will multiply the variable apples by a factor of 2, and then will add 1 to that result.

The fifth line will just display the modified variables apples, and then will display the last word of the sentance.

Demonstration Example Code



- This release is mainly for supporting RAM game compilation, and the LAKABAJO uploading system
- Added VRAM Initialization data instructions DATA, DATAINT, DATALONG, DATAFILE
- Added the TILEORG istruction for VRAM Initialization
- Some more bug fixes and stability issues fixed
- Fixed many bugs in assembly that ASMX made
- Fixed the INPUT and GETS commands to not break the heap inside functions
- Declaring a variable with an absolute address inside a function gives a compiler error now
- No more mot2bin.exe
- Doing a=a*-1 is functional again
- Compiling the fake_variables.bex example works
- The assemble function works again
- Bugs fixed with user-defined subs/functions breaking the heap
- A bug is fixed, where putting spaces in between parenthesis now works
- Fixed a bug with the DATALONG command
- Fixed a bug when entering strings with the INPUT command
- BasiEgaXorz now uses the ASMX assembler!
- Not everything has been tested 100% with this version, so if something is broken, report the bug, and revert back to version 1.20!
- Fixed the READ, and READINT commands when using long variables.
- Added support for arrays in the commands READ, READINT, READLONG, GETS
- Fixed the GETS command to not declare integer or long variables that are very big
- Improved the INPUT command to be more BASIC like
- Added lower case letters to the INPUT command. Press the C button to switch between lower case letters and upper case
- Fixed a major bug with storing data with the DATA command.
- Fixed a bug with the Mid$ function, which was broke in v1.00 of the compiler
- Fixed a compiler bug when opening a souce file that is in a completely different drive
TODO -> Add the command DataStr
- When a file has successfully compiled, the ending dialog will now show the time that was spent assembling the source with the SNASM assembler
- Fixed the VarPtr&() Function to work with the newer array data types
- Fixed expressions having the form: str$(val(a)+val(b)), str$(val(a)<>val(b))
TODO -> Print 1*65536 is broken
- Fixed a major bug when declaring more than one sub or function
- The compiler will no longer give an error when using the same labels in inline assembly
- Added the ability to transform data within code into variables, also called "Fake Variables"
- Fixed bugs with LoadTiles
- Fixed a bug with Datafile with even/odd addresses
- Fixed a bug when using &h0 as a constant
- Fixed a bug with EndCode&()
- Fixed a bug with using integer addresses inside the peek functions
- Replaced the buttons on the toolbar with an "imagebox", so mscomctl.ocx is no longer required
- Fixed a bug that would crash the program intermitently if the text window is maximized
- Added an option to change the font foreground and background colors
- User can now define a custom location for variables declared with Dim. See Dim xxx AT xxx
- Fixed SETSCROLLMODE and SETSCROLLPLANE to now work with lower case settings
- Fixed minor bugs with using strings inside DATA
- Added a feature to SLEEP and SLEEP2 to change between ending the sleep command at the begining of the blank, or at the begining of drawing the video
- Fixed a bug with the HV Counter and running on real hardware - The M3 bit in VDP register mode #0 was set, so the counter is latched when a trigger on HL is executed. On real hardware, triggers upon reset are common.
- Fixed major problems with the heap reallocating itself during interrupters
- Fixed more major problems with the displaying characters and using interrupters
- Fixed a bug with the interrupters. If your interrupter ran for too long, the interrupter would be called back again
- The external interrupter will now latch the HV counter upon enabling the external interrupter. When its disabled, it will turn latching off
- Individual string characters can now be accessed from String arrays
- 32X Support! Read the 32X special commands, and functions
- Fixed a bug when you put ENDIF and there's no preceeding IF, the compiler would crash and burn
- First version to use SyNtAx CoLoRiNg!
- Fixed a bug when doing PRINT 90+78*(3+4)
- A bug still exists, ie: PRINT 1+9999999999999 or PRINT 2+9999999999999, and cannot be fixed. However, doing PRINT 9999999999999+1 will work because the compiler will know in the begining that it will be dealing with long number data types!
- The compiler will no longer crash when there is an overflow in assigning large numbers, like long&=999999999999
- Fixed a bug with MEMCPY and printing text
- Fixed a bug with HBLANK always staying at 0
- Added the functions VBLANKON() and HBLANKON()
- Added the command WAITRASTER that will resume execution when the TV starts drawing on a specified line
- Fixed a bug with the compiler not finding snasm68k if the working directory was not in basiegaxorz
- Added a command VIDMODE to switch to either 40 cell mode (default) or 32 cell mode
- Added FontForeEntry and FontBackEntry to the list in the OPTIONS command
- Added OPTION Explicit to the option command, and can also be forced in the options menu
- Added the LOADFONT command
- Added more options to set the text drawing limits: TEXTHEIGHT, TEXTWIDTH and TEXTSTART options
- Forgot to halt the Z80 during CLS (clear screen uses video DMA)
- Custom functions and subs can now be declared
- Added OPTION CaseSense to the option command, and can also be forced in the options menu
- Added DO and LOOP loops
- Automatic Indentation and expanding tabs into spaces options have been added
- Made a new style options window since I couldn't cram more stuff in the old one
- Added the command DRAWTILESINC2 that will draw tiles up->down, left->right
- Added a check to halt the cpu if a RETURN instruction is used without calling a subroutine
- The DIM statement can accept more than one variable in a list, eg: Dim a as long, b as integer, ..... Due to this, some things are broken. Can't do: Dim a as string, b as long, c as integer: Print "Hello!"
- Limited user defined SUB/FUNCTION support
- Added the command FONTPAL
- Fixed a bug with horizontal scrolling problems on real hardware
- Fixed a mistake in scrolling plane B vertically for both SCROLL and SCROLL2
- Added the function READSCROLL() that will read the value of the scroll memory
- Fixed a bug with using the INPUT command with 6 button joypads on real hardware
- Fixed a bug in PRINT and PUTS that ignored seperators , and ; in multi-line commands
- Interrupters no longer save the data pointer, so data commands can be used in interrupters
- When a compiler error occurs, the editor cursor is moved to the line containing the error and the line is highlighted
- Fixed a bug with STR$() while using other string in the same expression before STR$() is evaluated
- Fixed a major bug with ELSEIF not being recognized as ELSEIF. This bug is different from the ELSEIF nesting bug, which might be fixed soon
- Fixed more bugs with the interrupters and heap allocating. The heap is now offset to an even address so assembly code can use word or long values in the heap, eg: command INPUT
- Fixed bugs with instructions that require a long data type, and didn't accept any integer constants. Some of these commands were POKEINT, POKELONG, etc
- If there are no arguments in WAITPADUP then joypad 0 is assumed
- Finally fixed the ELSEIF nesting bug that has been ignored since v0.08
- The number of consecutive IF...THEN or ELSEIF...THEN has been increased from 20 to infinite
- Fixed the SHLINK command to work a little better. Before, the heap and stack were reset to the default, but now they're just changed depending on the condition of run-time
- SPRITEPOSX() and SPRITEPOSY() now truncate values over 512
- Added options to select different text priorities so text can now be overlayed on top of sprites
- Fixed Redo bug that would crash the program
- Fixed a bug with using comments (begining with ') after THEN keyword
- UNIX line feeds in source files supported
- Added the commands GLOBAL and LOCAL to assign scopes for variables used in user defined subs and functions
- Added command WRITEP and the function READP to read and write to variables located in an external 8-bit ram
- Fixed some stuff in 32x headers so that roms can now run on the Gens emulator
- Fixed a major bug with the Genesis requesting frame buffer access from the 32x (now roms can run on real hardware!)
- Fixed a minor GUI bug that occurs when the user quits the application with two documents opened, with one docuemtn that has been modified that has lost its focus. Clicking YES on the form that asks if you wish to save will make the form keep popping up infinitely
- Now you don't need to use [AND], [XOR], or [OR] to specify logical operations =D! Just use the operators without the brackets, just like in regular basic, eg: a=&h1234 and &h0ff0. The NOT operator isn't like this yet because there are problems with ordering. [AND], [OR], and [XOR] with the brackets will still work for compatibility with old sources
- Fixed a bug with function LEN() that can mess up the heap
- Added more arguments to the INK command that will draw text and tiles in other different ways. Also added the COLOR command, that will do the exact same thing as INK
- When booting programs, the video draw mode will be set appropriately to PAL or NTSC so programmers don't need to set this themselves
- Fixed a bug with SCROLL2 LEFT and SCROLL2 DOWN
- Fixed some more bugs with the INPUT command, once again
- Fixed a bug, again, with the PRINT command that misinterprets semi-colons. For example, this works now like it's suppose to: PRINT "hi": INK 1: print "YO"
- If the third argument in DRAWTILE (the argument that asks for a Y coordinate) is omited, then Y is 0. The X coordinate can range from 0 to 16383 for planes that are 128x128 large
- Fixed a buncha argument parsing bugs with some commands
- Added more Sega CD specific commands that deal with external data loading
- LOADSCD can now copy data from a CD to variables, or directly to VRAM
- Multi-dimensional array support has now been added, even though I said it was impossible!
- Improved the way string arrays are handled
- Changed commands SLEEP, SLEEP2, VALT, HALT, DALT, HBLANKON(), VBLANKON() to now act upon the HV counter, not the VDP status register
- Fixed a bug in the command TVSET
- Fixed a bug with hexidecimal numbers. Anything like &hFFFF won't turn into a negative number.
- String constants in DATA statements no longer need to be zero-terminated. The compiler is still backwards compatible with strings that were zero-terminated by the programmer.
- There can now be ten files in the recently opened list instead of just one
- Right click on the source editor now works again
- Fixed some bugs that prevented Sega CD ISOs from playing on real hardware
- Lots of new GUI features
- Added the endcode data label
- Fixed a bug when using argunerics directly on a function, where the future expressions would not be interpreted. Eg: a=joypad().7+1, the +1 would be missed.
- Finally, other basic programs can be included into other basic programs using the INCLUDE command. There's a catch though, included can only be nested once, the begining line label check doed not work, you cannot add multiple statements on the INCLUDE command, and it is still very buggy and will be buggy for a long time. Including programs was a hard to do with the compiler since everything is compiled linearly.
- More IDE junk: In the options dialog, an emulator and tile editor can be searched for with an open dialog box
- Added an Open Recent menu
- Included a window that will display all Sega CD programs added with the ADDSCD command for Sega CD Boot ISOs. It shows the filename, and its assigned sector. This will be helpful for keeping track of sector numbers. - Added the support for in-line constants with the # symbol
- Improvements were made to assiging labels to data (data labels)
- Fixed yet another bug with DRAWTILES with the Tiles VRAM Offset argument, where it actually didn't work
- Added a new command, DRAWTILESINC which doesn't use any data labels, but draws tiles in an incrament fasion, eg: specify it to start at tile 128, and it will draw all tiles from 128 to etc
- Added a new commnad, DRAWTILESOVR which acts like DRAWTILES, but tiles marked 0 will not be drawn, preserving the background
- Fixed the clr.l d1 bug with the command DRAWTILES and DRAWTILE
- Added the functions POSX, POSY, CURINK to determine the cursor's position, and the current ink color
- Added the function READTILE
- The compiler adds a label to each ASM nested statements, and to libraries so the user can use @label and any label name for labels
- All 4 PSG channels are set to mute in the start up
- Fixed the Soft Reset bug on real hardware. The software would always check the status of the HV counter on startup, and would infinitely loop if it wasn't in a specific range - pretty nifty =D
- Some GUI optimizations here and there
- Fixed a bug when the last open document was closed, some buttons would dissapear, and some buttons would crash the program
- Splash screen (actually the about screen) added, and is shown when a new compiler version is executed for the first time
- When multiple documents are in the command line, the IDE will open them all in multiple windows
- The External TH Interrupter on the joypad port is now supported
- The command LoadTiles is now 3 times faster! Note: Speed is measured only when the screen is disabled. With the old routine, it would take 1.08 minutes to load 1024 sets of 1024 tiles (Equals 32mb). With the new routine, it took 0.37 minutes.
- The functions HFlipTile, VFlipTile, RotateTile, Priority, and Pallette have been added to customize drawing tiles
- Some Editing Enhancements: Find, Find Next, Search and Replace, Insert Date+Time, and Go To Line
- Fixed a bug with the Dim command that allocated 2 bytes to long variables
- Fixed a bug with ReadLong that allocated 2 bytes to long variables that haven't been created
- Added the commands FastTileCopy and MemCopy to do some low-level, high-speed memory copying
- <, >, <=, >=, and <> string comparisons works now. When a string is compared to another string, the destination value will be an integer.
- The function UnitType added to determine whether the machine is a domestic, or overseas unit
- The function TVType added to determine whether the machine is NTSC, or PAL
- The function VDPRAMRead() and the command VDPRAMWrite were added to read/write directly to the VDP RAM
- The functions Read$, Read, ReadINT(), and ReadLONG&() were created, so execution time is faster if data doesn't need to be read into a variable, but passed into an expression
- ReOrgCode option added to change the code address for Sega CD Porgrams
- ReOrgVars option added to change the next variables address to tack on more RAM storage for Sega CD games
- StartCode& function added to give the first byte of compiled code
- EndCode& function added to give the last byte of compiled code
- External RAM Support for variables
- .BEX file associations can now be done within the IDE
- The expression system now handles parenthesis, eg: a=4+((((7*2)*(1+2))*(2*2))+5) works
- Assembly code is automatically optimized
- The command FAKE has been added to virtually make variables into fake data labels for use with RELOAD, READ, WRITE, and tile/pallette loading commands
- Genesis roms can now be compiled for PAL machines with the command TVSET
- Regmove.x can now use immediate values for sourcing arguments
- Fixed a bug with LOADTILES. Now it clears register d1 before use.
- Fixed a bug in the INPUT command when the screen scrolls down
- Added font and tab options to the IDE
- Fixed a bug in the expression handling when you do if c then
- Fixed a bug in the bit argunerics
- Added a new command Sleep2 which delays on each horizontal blank instead of verticle blanks
- Added a new function: LBLPtr&() which gets the address of a data label
- Label in the Pallettes command can now have an offset
- Label in the DrawTiles command can now have an offset
- INPUT and GETS commands can now handle integer and long data types
- Fixed a bug when a cpu exception occurs, or when a breakpoint is reached
- Finally added long (4 byte) multiplication, division, and modulo
- Added the instruction RegMove.l, RegMove.w, RegMove.b to get assembly registers into variable, or vice versa
- Fixed a bug where if For, If, Dim, or Let were Uppercase, the compiler wouldn't identify it
- Added an option to run the the Compiled ROM/ISO in an emulator after it is compiled
- Changed the documentation: switched the Height and Width arguments around for the AddSprite function
- Added the Not() and Not&() Functions
- Can now open files from the command line, and the program can have more than one instance now
- Minimize bug fixed
- Fixed a bug in the Randmize command
- If While 1 is used, then the compiler will jump directly back the commands after the While command when a Wend command is encounterd. This makes While 1 loops very fast without having to solve expressions, or jump on a condition, etc
- Added the Exit While and Exit For commands
- Added the Continue While and Continue For commands
- Added the string functions: ChrW$ and ChrL$
- Added the functions: Asc and AscW and AscL&
- Now added the Let command
- When the Open/Save dialog is opened for the first time, its default directory will be the compiler's directory
- The Library command can now handle long file names
- Added the command: Incasm, which is like the Library command, except it doesn't search the "slibrary" directory for the assembler file. It either searches the project's own directory, or the compiler's directory if the source code is untitled
- Forgot to add the Ignore SCD Commands option. It is now added
- Fixed a bug with the Sega CD commands that froze the main CPU
- Fixed the LoadSCD command to disable interrupters when loading a cluster
- Fixed the text DMA commands (CLS, Line Feeds) to work for the different planes
- Fixed the clear length in CLS
- Big sprite commands added
- Fixed DataFile to recognize labels not on the same line
- Now aligns DataFile to EVEN bounds
- For the 4th time, the loop has been recoded, now even faster
- Compiler speed increase =D - by 200 times. The compiler doesn't use VB's buffers to store the compiled assembly file no more =). This bypasses all of VB's overhead, and makes it compile 100,000 number of lines of print "hi" in 48 seconds on a 1.2 ghz computer running number line checks.
- For the VB users, i created an option to save BASIC files with a .bex extension
- Fixed a bug where if you go print "wassup":a=a+1, it messes up
- Added a feature to the ASM command, where if you leave the second argument blank, the lines after ASM are the assembly source, and it end when it encounters an END ASM command.
- Added the Gets command, and changed the Input command around to act like the real basic Input command
- Added a color converter for color codes
- Data labels don't need to be on the same line as the data statement now. the compiler takes the last label encountered, and makes that the data label
- No more make.bat or make.pif files =D!
- No more rich text box :D!!! lots+lots of features with the ide were added/fixed because of this =P (too many to list here)
- Added more options for naming, and directories
- Sega CD audio playback commands added
- Datafile command now searches the project directory for the data file. If a project is untitled, the command will search the path of the compiler for the file. File names can no be longer than 8 characters (long file names)
- Drawing to different scroll planes, and to the window is now implemented for both text and graphics
- Added commands to format the window
- Updated the scroll command to do more things that take scrolling to the Genny's hardware capabilities
- Multiple Sega CD programs can be stored on one boot iso now
- Text+Graphics commands updated to change displaying properties
- Added a Puts command which displays text a whole lot faster, but more parameters are required for this
- Freed up 256 bytes of RAM
- List of New Commands: BGColor, FreeAllSprites, SetTextPlane, SetGfxPlane, WindowProp, Disable Window, Puts, Scroll2, SetScrollMode, SetScrollPlane, Write, WriteInt, WriteLong, AddSCD, LoadSCD, CDPlay, CDPlay2, CDStop
- More options for the option command: Option SegaCD, Option SegaCD Program, Option Cartridge - which overwrites the setting in the option menu to change the output file type
- Mostly fixes to the Master Routines:
- Fixed waitpadup. sometimes it messed up w/o detecting any key
- Fixed readint statement. putting in a variable causes an error
- Fixed drawtile. the x and y arguments were backwards
- Fixed chr$() function. the function never added a null to the heap
- Fixed data commands. the data command alligned all data to even bounds at the end of the data. if two data statements were one after the other, invalid data would appear if the first data statement was odd. this has been fixed by adding even allignments to the begining of all dataint and datalong commands, instead of data.
- Fixed data commands to accept &h as a hex number
- Fixed the immediate addition/subtraction operators to properly add long veriables. Before, it use to add 65536
- Redid the sprite system. Before, sprites were added by using the linking method of the Sega's hardware. Now, the routines don't even use linking, just straight 0-79. There were lots of bugs with the linking system.
- Sprites can now all be wiped out with a command
- When an interrupt occurs, 2048 bytes are added to the heap, which is gonna fix some interrupter bugs conflicting with surprise memory overwrites. Not very useful to know for beginers, but I thought I'd put it here for completeness =D
- Fixed traps and breakpoints to enable the screen if it was disabled
- Tab spaces are recognized as regular spaces
- Added a memory map viewer for variables in the gui for debugging
- Compilation of Sega CD isos supported (currently only 128k games)
- Compilation supported for Mask of Destiney's Transfer Suite
- Many many many fixes and optimizations to the expression engine and argument parser
- Added I/O functions poke and peek and their long/word subcommands
- Added a button on the toolbar to easily call the tile editor (custom sgtd.exe for basiegaxorz tiler will be released later)
- Added options for editor colors
- Interrupter handlers improved
- Performance improvements for the For...Next loop
- Added support for long 32 bit variables
- Random function finally added
- The horizontal blank interrupter is now supported
- Bug fixes to the shlink command - but still, just use sparingly, especially for testing games on the real system
- Cursor postion thing fixed in the gui
- DMA functions fixed from beta 0.05
- Made a much better joypad function. 6-button controller supported
- Hex$(), Chr$(), Bin$(), Mid$(), String$(), Left$(), Right$(), and Len functions added for string parsing
- Bit argunerics added
- Option command added for replacing the title header, and also to define Sega CD dedicated games, and default string size
- ShiftSprite added to relatively move the sprite without keeping track of its position
- Background plane scrolling added
- The ":" technique added (eg. the ":" in ink 3: print "wassup")
- Arithmetic shift added
- Negative number support for decimal numbers
- Support for hexidecimal arguments eg. &h1234
- And, Or, Xor operators added
- ElseIf finally added
- Sprite positions can be read with function SpritePosX or SpritePosY
- Single dimentsion arrays added only for Integer and Long data types
- 16 bit and 32 bit wide data supported with DataInt and DataLong, and for reading, ReadInt and ReadLong
- RGB function added
- Addsprite command is now a function
- Brighten and Darken commands added for fading in or out pallettes
- Increment and Decrement operations added
- Added sound commands for the PSG for making sound effects (Sound, SoundVol)
- User defined assembly routines support added for the more advanced programmers
- VarPrt& function added
- Display can now be turned on/off for faster tile data loading using the Disable/Enable commands
- Halt, Valt, and Dalt commands added to wait for the horizontal/verticle blank before anything else is executed
- TVScanX() and TVScanY() functions added to read the HV Counter
- Pallettes command added for adding multiple colors
- Input command added to easily get user input
- Str$ and Val functions implemented
- Assembly headers are built into the exe again
- Whenever an unexpected error occurs when assembling, an error log is created and displayed for debugging
- Fixed BasiEgaXorz to run on Windows 95 with a 486 running at 66 mhz =D
- Added a Trap command to act as a breakpoint for debugging
- Added error messages for CPU errors (eg. address error/illegal instruction/divide by zero) - these errors can not be recovered in run-time
- Rem and ' Comments supported
- Added a button to assemble a plain assembly file to binary
- A last quickie WaitPadUp Command added
- Fixed a string-function bug (eg. doing a$="asdf"+chr$(12))
- Fixed a bug with using an apostrophe in a string constant (eg: "what's up doc")
- Fixed a bug that messed up carriage returns in the editor

- A total of ~50 additions/fixes/changes :-)!!!
v0.05 beta
- This update is for more commands, no optimizations/fixes have been done yet
- Graphics commands are now implemented
- Verticle blank interrupter implemented
- Colors commands and stuff added
- DMA functions are broke, use version 0.04
- Argument routine is redone (means that lots of things can be done now)
- Statements seperated by a colon now works
- More statements added: Data, Datafile, Read, Reload, While...Wend, End (Getting ready for graphics and sprites and tiles now and interrupts)
- There is now an option to disable the begining label check, and the proceeding label checks. If you're not keeping track of your labels, and you have this on, your program may refuse to compile. This option is for compiling larger programs quickly. If you have a program > 2000 lines, it'd be good to turn this on. If not, you don't need the option on.
- Comments added
- More tiny stupid bugs fixed
- Compiler optimized heavily
- Added a nicer font and changed to a better color =)
- Added Support for Functions to the expression routine
- Two character operators added (>=, <=, <>)
- Fixed stupid bug with pasting and saving
- Better shell() routine
- Compile time is faster (Can compile 3000 lines of "print 1+2-3" in 209 secs)
- Can compare strings now (Only = can be used for now)
- basichdr.s is not built into the compiler. The header can be modified if you want to add your own font for now, or change the colors, etc.
- Released first public release, version 0.01. Lots of things are unsupported, for I need to spend more time on the compiler (only took 4 days from now =D) and was released early for Christmas.

Need extra help? Go post in the forums, 99.9% of the time I myself will answer any question
Forums: - You do not need to register to post in the BasiEgaXorz Support Forum if you don't want to. Just post as a guest.
Website: DevSter Speicialties
My Email (i don't read my e-mail =P, it'd be better to PM me something on the forums):

Driector, Manager, Programmer, Graphics Designer, More Programming Stuff, Everything else - Me
The dude that made Snasm68k - you rock man
Mask of Destiney - Props go to him for the Sega CD tech stuff
Tomman - First one to report bugs =)

BasiEgaXorz is Copyright 2003-2008 by Joseph Norman. This software is provided as freeware. This software is provided as-is, and you may not distribute it to the masses (ex: on your web site), sell this software, or modify it without my written consent. I do not take any responsibility for things you mess up. READ the disclaimer below for the 200 word version of this.


User Agreement: You may not rent, lease, or assign this software. You may not decompile, disassemble, or modify this software. You may not transfer, distribute or bulk-distribute this product without Dester's express written permission. You assume responsibility for the use of this software to achieve your intended results, and for the installation, use, and results of using this software.

Disclaimer of Warranty and Liability: DevSter does not warrant that this software will download correctly or that it will install correctly on your machine. DevSter does not warrant that the functions contained in the software will meet your requirements or that the operation of the software will be uninterrupted or error-free or that any software defects will be corrected. This product is provided solely on an "as-is" basis, and nor DevSter make any claim as to fitness for a particular purpose whatsoever. To the maximum extent permitted by law, DevSter disclaims all warranties, expressed or implied, including but not limited to, implied warranties of merchantability or fitness for a particular purpose.

DevSter has no liabilities for consequential damages. In no event shall DevSter be liable for any damages whatsoever (including, but not limited to, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of, or out of the inability to use, this product, even if DevSter has been advised of the possibility of such damages. DevSter reserves the right to modify or update any part of this Agreement and Disclaimer without prior notification.

BasiEgaXorz Copyright Joseph Norman, 2003-2010
Sega Genesis is Copyrighted by Sega