Targets supported by ugBASIC

ATARI 400/800 (atari)

The atari target has been supported by ugBASIC since version 1.1. The compiler can produce both executable files in "xex" format and entire "atr" disks, including files that can be loaded using the language's primitives.



How to start

You can use the SANDBOX to try the ugBASIC compiler, without download anything. This tool has been designed to quickly test whether the code you are writing compiles correctly and determines the desired results.

Since the source is compiled thanks to dedicated servers, separate from the browser you are using, some commands are not available: for example, you cannot load external files or resources by using the LOAD command.

If you need to develop a program with a complete tool, we recommend installing the command line executables (see below) or UGBASIC-IDE.

To write the source code you can use a simply text editor. You can save the program in a text file and then to call the compiler, in order to convert it into an form that your ATARI 400/800 will be able to execute.


Otherwise you can download and use command line compilers. Here are the direct links to the compilers for the various operating systems. Select the most suitable one for your configuration:

In addition to compiling with the IDE, if you are using Linux or the command line version for Microsoft Windows, you can compile the BASIC source "source.bas" into an executable file using the following command:

ugbc.atari -o executable.xex -O xex source.bas
ugbc.atari -o executable.atr -O atr source.bas

It is therefore possible to run everything with an emulator, such as Altirra Atari800 , or to create a phisical storage, as well.

A good starting point to learn ugBASIC for the atari platform is the examples page. The examples provide insight into the syntax and usage of many of the commands and statements available for the language.

Since ugBASIC is an isomorphic language, which does not provide abstractions, it is possible that not all examples work on all targets: those labeled atari can be compiled to generate executable files.

If you need help and support, the best place is the official forum, where you can find answers to your questions and receive help.

Games written for ATARI 400/800 (more...)



HANGWORD!

Hangword! is the electronic version of a guessing game for one player. The computer chooses a word and the player tries to guess it by suggesting letters within seven (7) guesses. The game contains a vocabulary of 2.048 English words.
Italian version available.


SOKO64+

Sokoban (Japanese: 倉庫番 or "warehouse keeper") is a puzzle-type video game in which the player pushes crates through a maze and tries to place them in their assigned location.


ACME, inc. (10 liner)

This game is a multitasking arcade game for one player. The aim of the game is to make the coyote run for as long as possible, avoiding the barrels that roll towards him. The more barrels you avoid, the higher the score. It is a self-competiting game, and it is designed for one player. This game joins the "BASIC10Liner" competition 2024


FALLING BALLS (10 liner)

This game is a multitasking arcade game for one player. The player must drop balls into the baskets at the bottom of the screen, in the shortest possible path. The longer the ball travels across the screen, the fewer points he/she accumulates This game joins the "BASIC10Liner" competition 2024


PICK THE STAR (10 liner)

This game is a multitasking arcade game for one player. The player must pick mostly the stars that descend from the top of the screen, because they give to the player the higher score. This game joins the "BASIC10Liner" competition 2023


TIC-TAC-TOE (10 liner)

This game is a traditional paper-and-pencil game for two players who take turns marking the spaces in a three-by-three grid with X or O. This game joins the "BASIC10Liner" competition 2023


4GRAVITY!

This game is a "Connect Four" clone. The objective of the game is to be the first to form a horizontal, vertical, or diagonal line of four of one's own tokens.

Examples for ATARI 400/800 (more...)


















Plotting and graphic modes


The ugBASIC language provides access to all documented graphics modes of the GTIA chipset, that can be selected using the SCREEN # command, and used with graphics primitives. This is the value of the various constants in the various versions:

MODEDESCRIPTIONWIDTHxHEIGHTxCOLORS
2Graphics Mode 0 (ANTIC 2)40x24x1
3Antic 340x24x4
6Graphics 1 (ANTIC 6)20x24x4
7Graphics 2 (ANTIC 7)20x12x4
8Graphics 3 (ANTIC 8)40x24x4
9Graphics 4 (ANTIC 9)80x48x2
10Graphics 5 (ANTIC A or 10)80x48x4
11Graphics 6 (ANTIC B or 11)160x96x2
13Graphics 7 (ANTIC D or 13)160x96x4

Blitting images


Blitting operations are supported, although graphics modes implicitly benefit from the palette preservation property. It is therefore necessary to either remove this preservation with the command DEFINE PALETTE NOT PRESERVE or modulate the image palette to ensure that they are correctly allocated.

Calling and inlining assembly code

With the atari target you can include assembly code for the MOS 6502 processor. The code will be placed within the code bank.

Supported video standard

The ugBASIC compiler supports both the ATARI PAL (working frequency: 50 Hz) and NTSC (working frequency: 60 Hz) versions, and automatically detects the working frequency to calibrate the delays. In particular, it defines two constants with the same name, and initializes the constant TICKS PER SECOND.

This is the value of the various constants in the various versions:

VERSIONENTSCPALTICKS PER SECOND
NTSC-1 (TRUE)0 (FALSE)60
PAL0 (FALSE)-1 (TRUE)50
SECAM0 (FALSE)-1 (TRUE)50
NTSC-50(*)-1 (TRUE)0 (FALSE)60
PAL-60(*)0 (FALSE)-1 (TRUE)50
The standard noted with (*) are available only on Altirra emulator.

Audio support

The atari target supports audio commands, as described on the documentation page. However, it focuses more on "pure tones" and uses polynomial counters only to generate a basic form of noise. It would be useful to be able to implement more sophisticated techniques. In this regard, an issue has been opened on github.

Table of notes and frequencies

C C# D D# E F F# G G# A A# B
0 251251251251251251251251251251251251
1251251251251251251251251251251251251
2251251251251251251251251251251251251
3251251251251251251251251251251251251
4251251251251251251251251251251251263
5278295314332352372395418444471500529
656159362766770375379084288994110001067
7112312081280136214221524160017301829193920652133
8228624622560278329093048336835563765400042674571
949235333581864007111800091431066712800160002133332000
1064000

Joystick and keyboard support

The ugBASIC language supports up to 4 joysticks, using the JOY(n) statement, and the keyboard.