A project to create a QBASIC-compatible BASIC compiler that runs on MS Windows and Linux systems.
Be the first to post a text review of QB64 BASIC Compiler. Rate and review a project by clicking thumbs up or thumbs down in the right column.
QB64 COMPILER V0.79 DOCUMENTATION ================================= =================== V0.79 RELEASE NOTES =================== New samples! (not explained in samples.txt yet, but all good fun) nib64.bas,gor64.bas,frog.bas,3dexp2.bas,cabsmous.bas,shoot.bas,ripples.bas,carols.bas V0.79 is an unscheduled release due to: i) The long time (~1 months) it has been since the previous release (V0.7) ii) So many aspects of QB64 are being symultaneously developed that V8.0 will take at least another month to complete iii) User defined types, mouse functionality and PLAY already usable iv) Significant progress made in regards to resource usage(hogging)/memory required(0.79 uses ~70% less) and thread/speed management which if tested will provide valuable feedback V0.79 features are still incomplete, and some features planned for V0.8 are still unimplemented. Please refer to the following list. PROGRESS: (Percentage reflects the level of use-ability, not development progress) MOUSE(99%) this is only the first implementation with basic functions, many more options to come. Will return SCREEN 0 co-ords in characters, not pixels in the future. (See end of readme.txt for instructions on using the mouse in QB64) PLAY(99%) cannot execute substrings with X... yet (trivial to add later) USER DEFINED TYPES(95%) cannot GET/PUT or find the offset of UDTs CALL ABSOLUTE(1%) only PUSH/POP/MOV/far RET/INT opcodes implemented and can only call some int 33h subfunctions, many more opcodes/subfunctions to come soon CONST(0%) will be available in V8.0 STATIC(0%) will be available in V8.0 CALL INTERRUPT(0%) will be available in V8.0 DRAW(0%) will be available in V8.0 RECENTLY FOUND BUGS: (Does not include remaining bugs reported pre V0.7) 1. DIM SHARED a(b(0)) AS INTEGER If array b(0) isn't created yet, creation code for b() corrupts creation code for a() (It would be silly to do this, but it is worth noting) 2: DIM SHARED x AS INTEGER SUB g (x AS INTEGER) PRINT x END SUB PRINT x will print the value of SHARED x, not passed x (Will be fixed in V0.8) 4. LINE (150,50)-(50,???) (happens in a 3D wireframe rotating program) Line clipping on bottom edge of screen is sometimes incorrect 5. GET 10,,a$ Without # (as above), doesn't work yet 6. ??? Unreferenced line labels appear between functions of the C++ code making C++ compilation fail (Will be fixed in V0.8) 7. 1 GOTO 1 Cannot be CTRL+BREAK'ed out of (Will be fixed in V0.8) 8. CALL ABSOLUTE(...) Returned mouse co-ordinates by INT 33h are as yet unscaled ========================== END OF V0.79 RELEASE NOTES ========================== Thanks for trying QB64! The goal of QB64 is to create programs from BASIC source for Windows, Mac OSX and Linux whilst being 100% compatible with Microsoft QBASIC/QB4.5 At present, QB64 only compiles programs on/for Microsoft Windows. To compile a .BAS program simply run the program COMPILE.EXE It will prompt you to enter the .BAS file's name, or you can enter the file name on the command line (example compiles test.bas): COMPILE test Make sure your .BAS file was saved in text format not the QB4.5 compressed file format. Check "SAMPLES.TXT" for information about included .BAS example programs. Newly added samples include: nib64.bas,gor64.bas,frog.bas,3dexp2.bas,cabsmous.bas,shoot.bas,ripples.bas,carols.bas UNIMPLEMENTED FEATURES ====================== The majority of QBASIC commands are implemented. Only the following are NOT IMPLEMENTED yet: CONST ON ... GOTO/GOSUB EVENTS (however, ON ERROR GOTO is implemented) $INCLUDE metacommand Devices (COM...,SCRN:,LPT...,KYBD:,CONS:) in an OPEN statement CALL INTERRUPT CALL ABSOLUTE (very limited support) Port access very limited (OUT &H3C8, &H3C9 INP &H3DA, &H60 work) STATIC command in subs/functions (The $STATIC metacommand is implemented) Multimodular support (COMMON, etc.) Other commands: TRON/TROFF, CHAIN, RUN, FILES, FILEATTR, ENVIRON, ENVIRON$, PRINT USING, LPRINT, LPOS, DRAW, CLEAR, FIELD, LOCK, UNLOCK, IOCTL, IOCTL$, PEN, STICK, STRIG, SETMEM, FRE, FIELD QB64 SPECIFIC FEATURES (THAT QBASIC DOESN'T HAVE) ================================================= INPUT Protection ---------------- "Intelligently" restricts keyboard input. Avoids "redo from start" messages. Limits screen space used by input for fixed length strings and numbers (eg. INTEGER cannot use more than 6 spaces) New Data Types -------------- _BIT name` _UNSIGNED _BIT name~` _BIT*4 name`4 _UNSIGNED _BIT*4 name~`4 _BYTE name%% _UNSIGNED _BYTE name~%% INTEGER name% _UNSIGNED INTEGER name~% LONG name& _UNSIGNED LONG name~& _INTEGER64 name&& _UNSIGNED _INTEGER64 name~&& SINGLE name! DOUBLE name# _FLOAT name## STRING name$ STRING*100 name$100 _DEFINE Command --------------- Instead of having DEFBIT,DEFUBT,DEFBYT,DEFUBY etc. for all the new data types there is a simple command which can be used like DEFINT for new types (or old types if you want to) as follows: _DEFINE A-C,Z AS DOUBLE 'the same as DEFDBL A-C,Z Larger Maximum RANDOM File Access Field Sizes --------------------------------------------- For RANDOM access files, record lengths can now be greater than 32767 bytes. Variable length string headers allow for larger strings whilst still being 100% QBASIC compatible with smaller strings. ------------------------------------------------- BLOAD/BSAVE Limit ----------------- Can save/load 65536 bytes, not just 65535. _ROUND ------ This can be used to round values to integers (CINT & CLNG imposed limitations on the output) Graphics GET/PUT ---------------- GET supports a new optional argument. If used the area to store can be partially/all off-screen and off-screen pixels are set to the value specified: GET (-10,-10)-(10,10),a,3 PUT format has been extended to PUT[{STEP}](?,?),?[,[{_CLIP}][{PSET|PRESET|AND|OR|XOR}][,?]] where _CLIP allows drawing partially/all off-screen and the final optional argument can specify a mask color to skip when drawing. Better Sound/Audio Support -------------------------- Support for playing .MID, .WAV, .MP3 and many other formats. Commands include: _SNDPLAYFILE Simple command to play a sound file (with limited options) _SNDOPEN Returns a handle to a sound file _SNDCLOSE Unloads a sound file (waits until after it has finished playing) _SNDPLAY Plays a sound _SNDSTOP Stops a playing (or paused) sound _SNDPLAYING Returns whether a sound is being played _SNDLOOP Like _SNDPLAY but sound is looped _SNDLIMIT Stops playing a sound after it has been playing for a set number of seconds _SNDGETPOS Returns to current playing position in seconds _SNDCOPY Copies a sound (so two or more of the same sound can be played at once) _SNDPLAYCOPY Copies a sound, plays it and automatically closes the copy _SNDPAUSE Pauses a sound _SNDPAUSED Checks if a sound is paused _SNDLEN Returns the length of a sound in seconds _SNDVOL Sets the volume of a sound _SNDBAL Sets the balance/3D position of a sound _SNDSETPOS Changes the current/starting playing position of a sound in seconds For more information, read "AUDIO.TXT" in your "QB64" folder. Also check out "AUDIO.BAS" in the samples folder, you'll need some audio files to test this with! Mouse Support ------------- _MOUSESHOW Displays the mouse cursor (sub) _MOUSEHIDE Hides the mouse cursor (sub) _MOUSEINPUT MUST BE CALLED UNTIL IT RETURNS 0, it reads the next mouse message and returns -1 if new information was available otherwise 0 (func) _MOUSEX (func) _MOUSEY (func) _MOUSEBUTTON(n) -1 if button n (a value of 1 or more) is down
Be the first person to add a text review.
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use
Thanks for your rating!
Would you also like to write a review?