Jump to content

Search the Community

Showing results for tags '7800basic'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Atari Systems
    • Atari General
    • Atari 2600
    • Atari 5200
    • Atari 7800
    • Atari Lynx
    • Atari Jaguar
    • Atari VCS
    • Dedicated Systems
    • Atari 8-Bit Computers
    • Atari ST/TT/Falcon Computers
  • Classic Consoles
  • Classic Computing
  • Modern Consoles
  • Gaming General
  • Marketplace
  • Community
  • Community
  • Game Programming
  • Site
  • PC Gaming
  • The Club of Clubs's Discussion
  • I Hate Sauron's Topics
  • 1088 XEL/XLD Owners and Builders's Topics
  • Atari BBS Gurus's Community Chat
  • Atari BBS Gurus's BBS Callers
  • Atari BBS Gurus's BBS SysOps
  • Atari BBS Gurus's Resources
  • Atari Lynx Programmer Club's CC65
  • Atari Lynx Programmer Club's ASM
  • Atari Lynx Programmer Club's Lynx Programming
  • Atari Lynx Programmer Club's Music/Sound
  • Atari Lynx Programmer Club's Graphics
  • The Official AtariAge Shitpost Club's Shitty meme repository
  • The Official AtariAge Shitpost Club's Read this before you enter too deep
  • Arcade Gaming's Discussion
  • Tesla's Vehicles
  • Tesla's Solar
  • Tesla's PowerWall
  • Tesla's General
  • Harmony/Melody's CDFJ
  • Harmony/Melody's DPC+
  • Harmony/Melody's BUS
  • Harmony/Melody's CDFJ+
  • Harmony/Melody's General
  • ZeroPage Homebrew's Discussion
  • Furry Club's Chat/RP
  • PSPMinis.com's General PSP Minis Discussion and Questions
  • PSPMinis.com's Reviews
  • Atari Lynx 30th Birthday's 30th Birthday Programming Competition Games
  • 3D Printing Club's Chat
  • Drivers' Club's Members' Vehicles
  • Drivers' Club's Drives & Events
  • Drivers' Club's Wrenching
  • Drivers' Club's Found in the Wild
  • Drivers' Club's General Discussion
  • Dirtarians's General Discussion
  • Dirtarians's Members' Rigs
  • Dirtarians's Trail Runs & Reports
  • Dirtarians's Wrenching
  • The Green Herb's Discussions
  • Robin Gravel's new blog's My blog
  • Robin Gravel's new blog's Games released
  • Robin Gravel's new blog's The Flintstones Comic Strip
  • Atari Video Club's Harmony Games
  • Atari Video Club's The Atari Gamer
  • Atari Video Club's Video Game Summit
  • Atari Video Club's Discsuuions
  • Star Wars - The Original Trilogy's Star Wars Talk
  • PlusCart User's Bug reports
  • PlusCart User's Discussion
  • DMGD Club's Incoming!
  • DASM's General
  • AtariVox's Topics
  • Gran Turismo's Gran Turismo
  • Gran Turismo's Misc.
  • Gran Turismo's Announcements
  • The Food Club's Food
  • The Food Club's Drinks
  • The Food Club's Read me first!
  • The (Not So) Official Arcade Archives Club's Rules (READ FIRST)
  • The (Not So) Official Arcade Archives Club's Feedback
  • The (Not So) Official Arcade Archives Club's Rumor Mill
  • The (Not So) Official Arcade Archives Club's Coming Soon
  • The (Not So) Official Arcade Archives Club's General Talk
  • The (Not So) Official Arcade Archives Club's High Score Arena
  • Adelaide South Australia Atari Chat's General Chat & Welcome
  • Adelaide South Australia Atari Chat's Meets
  • Adelaide South Australia Atari Chat's Trades & Swaps
  • KC-ACE Reboot's KC-ACE Reboot Forum
  • The Official Lost Gaming Club's Lost Gaming
  • The Official Lost Gaming Club's Undumped Games
  • The Official Lost Gaming Club's Tip Of My Tounge
  • The Official Lost Gaming Club's Lost Gaming Vault
  • The Official Lost Gaming Club's Club Info
  • GIMP Users's Discussion
  • The Homebrew Discussion's Topics
  • Hair Club for Men's Bald? BEGONE!


There are no results to display.

There are no results to display.


  • AtariAge Calendar
  • The Club of Clubs's Events
  • Atari BBS Gurus's Calendar

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start










Custom Status



Currently Playing

Playing Next

Found 38 results

  1. Welcome to Atari Dev Studio for designing homebrew games for the Atari 8-bit systems (Atari 2600 and 7800). Atari Dev Studio is a one-stop-shop for any programmer and includes a number of built-in features to allow you to design, develop and test games for your favourite system. Get started with batari Basic (2600) or 7800basic (7800) using easy to learn BASIC-like languages or go hard-core with assembly using dasm. During development test your creation using the Stella (2600) or A7800 (7800) emulators right from within Atari Dev Studio. Requirements Atari Dev Studio is an extension for Microsoft's cross-platform IDE Visual Studio Code and will run on the Windows, Linux and macOS platforms. The latest releases of batari Basic, 7800basic, dasm, Stella and A7800 are included so you can begin coding straight after installing the extension. Features Atari Dev Studio includes the following features: Develop your game on Windows, Linux or macOS Compile source code for your Atari 2600 or 7800 using batari Basic, 7800basic or dasm Use scripting (makefile, batch or shell script files) to build your dasm projects [preview] Optionally launch and test your game using the Stella (2600) or A7800 (7800) emulators Document outline support (batari basic, 7800basic, dasm) Peek/Go to Definition and Reference support (batari basic, 7800basic, dasm) Built-in Sprite Editor (also suitable for tiles and other objects) [preview] Manage your project using the File Explorer or version-control your source code directly with GitHub (and others) using the built-in features of the Visual Studio Code platform. Provide references to your own specific releases of each language or emulator rather than use the includes ones via the Settings. Additional features are planned for the future. At this time the focus is on the core functionality and ensuring full cross-platform support. Installing Atari Dev Studio What is Visual Studio Code? Visual Studio Code (VS Code) is a streamlined code editor with support for development operations like debugging, task running, and version control. It aims to provide just the tools a developer needs for a quick code-build-debug cycle and leaves more complex workflows to fuller featured IDEs, such as Visual Studio. Which OSs are supported? VS Code is a cross-platform application which runs on Windows, Linux and macOS. See requirements for the supported versions. Note: Linux users on 64-bit systems will be required to install the 32-bit compatibility libraries on your system to ensure everything will run as expected. Note: macOS users will require a 64-bit operating system to fully utilise all features of Atari Dev Studio and will be required to install the SDL libraries on your system to ensure the A7800 emulator will run as expected. Note: M1 based Mac users will need to install the INTEL CHIP version of VS Code before installing Atari Dev Studio. The current dev stack is incompatible with the M1 chip for the time being. See here for further discussion around the potential issues you will encounter. Installing the extension Once you have installed VS Code (available here), open the VS Code program and complete the following: From the Activity Bar, click the Extensions button to display the Extensions window. From the Extensions window, type Atari into the Search box and press Enter to display the list of available extensions. From the list of available extensions, locate Atari Dev Studio and click the green Install button. Updating the extension Updates will be regularly provided and you will be notified via VS Code when one has been made available. Once an update has been installed you will generally be prompted to restart VS Code. Using Atari Dev Studio Compiling your program To display the available extension features press CTRL+SHIFT+P to display the Command Palette. From the command palette prompt type adv to short-list the available options: ads: Open the Welcome page ads: Compile source code (Shift+F5) ads: Compile source code and run in emulator (F5) ads: Kill build process ads: Open the Sprite Editor Language Selection When you load a file the initial language will be chosen based on the file extension. For example: batari Basic (.bas, .bb) [Default for .bas files] 7800basic (.bas, .78b) dasm (.dasm, .asm, .a, .h) To change a language you can click on the Status Bar Language selector and a list will be shown allowing you to choose another language. Optionally in the Settings you will be able to either let the extension choose based on the active language or set a specific language to always compile against. Build scripts [preview] Prefer using scripts to build your dasm games? If you have chosen to override the dasm compiler (select Make via the Settings) , Atari Dev Studio will scan and detect for makefile, batch (makefile.bat) or shell scripts (makefile.sh) files which are located in your root workspace folder to build your game. Note: You are totally responsible to ensure your environment is properly configured to allow you to utilise the tools and applications you will be interacting with. No support will be provided for this feature. Status Bar Apart from using the Command Palette to select compilation, there are a number of short-cut buttons on the Status Bar allowing you to: Display the extension version (might be useful at times) Open the Welcome page Open the Sprite Editor Compile source code (Shift+F5) Compile source code and run (F5) Note: The short-cut buttons on the Status Bar can be turned off via the Settings. Sprite Editor [preview] Atari Dev Studio includes a simple and easy to use Sprite Editor allowing you to create sprites, tiles and other objects for use in your projects. It has the following features: New Project wizard allowing you to select the console (2600 or 7800), size, region (NTSC or PAL palette) and total colors of your sprites Load and Save projects allowing you to save and come back to on-going work Editing features such and palette selector, zoom, pen, eraser, fill and move modes Ability to manage your sprites in a sortable list with options to copy, paste, duplicate, resize and delete Export sprites to batari Basic or assembly source code (2600) Export sprites to .png files (7800) - either selected or all (compatible with 7800basic 3+1 and 12+1 image requirements) Load and save palettes The Sprite Editor is based on Spritemate by Ingo Hinterding (GitHub) and was suggested by RandomTerrain for inclusion in Atari Dev Studio. I have customised the source to provide the required features necessary for editing sprites, tiles and objects for the Atari platforms. This work is currently in preview and will be on-going until all required features have been added. Settings There are a number of compiler, emulator and editor configuration options available in Atari Dev Studio which can be changed via the Settings (Preferences -> Settings -> Extensions -> Atari Dev Studio). Debugging the extension During the development phase of the extension I've added some developer output to assist with any issues that may appear. To view this output, open the VS Code Developer Tools by selecting Help -> Toggle Developer Tools from the menu, and in the debugger window ensure the Console tab is activated. This information may help identify the area where the extension is failing to process as expected. Known Issues There are currently no known feature issues. If you find a problem please raise an issue on GitHub or contact mksmith at the AtariAge community. Acknowledgements This extension is only available due to the great people of the AtariAge community who have created these tools to help developers build their vision. Special thanks to the following for either allowing the inclusion of their tools or for their ongoing help and encouragement: 7800basic - Mike Saarna (RevEng) batari Basic - Fred 'batari' Quimby dasm - the many contibutors Stella emulator - Stephen Anthony (stephena) A7800 emulator - Mike Saarna (RevEng) and Robert Tuccitto (Trebor). The AtariAge community including Albert, CPUWiz, Random Terrain, Trebor, Synthpopalooza, sramirez2008, Defender_2600, Gemintronic, Karl G, ZeroPage Homebrew, Muddyfunster, TwentySixHundred, Lillapojkenpåön, Andrew Davie, splendidnut, andyjp, sexyUnderwriter, MikeBrownEmplas, Generation2Games, cwieland, slacker Mats Engstrom (SmallRoomLabs) Languages Atari Dev Studio includes the following programming languages: batari Basic (release 1.5 - 20200307) batari Basic created by Fred 'batari' Quimby is a BASIC-like language used in the creation of Atari 2600 games. batari Basic is compiled to generate a binary file that can by used on actual Atari 2600 VCS hardware via cartridge (such as a Harmony or UNO cart) or by using an Atari 2600 VCS emulator such as Stella. batari Basic is an external project and can be downloaded separately from here. Further information is about this release is available here at AtariAge. 7800basic (release 0.19 - 20211231) 7800basic is a BASIC-like language for creating Atari 7800 games. It is a compiled language that runs on a computer, and it creates a binary file that can be run with an Atari 7800 emulator, or the binary file may be used to make a cartridge that will operate on a real Atari 7800. 7800basic is derived from batari basic, a BASIC-like language for creating Atari 2600 games. Special thanks to the bB creator, Fred Quimby, and all of the the bB contributors! 7800basic is included as part of this extension with many thanks to Mike Saarna (RevEng). 7800basic is an external project and can be downloaded separately here. Further information about this release is available here at AtariAge. dasm (release - 20201109) dasm is a versatile macro assembler with support for several 8-bit microprocessors including MOS 6502 & 6507, Motorola 6803, 68705 & 68HC11, Hitachi HD6303 (extended Motorola 6801), and Fairchild F8. Matthew Dillon started dasm in 1987-1988. Olaf 'Rhialto' Seibert extended dasm in 1995. dasm has also been maintained by Andrew Davie (2003-2008) and Peter Froehlich (2008-2015). The DASM team has taken over maintaining and updating dasm since 2019. dasm is an external project and can be downloaded separately here. Emulation Atari Dev Studio includes the following emulators for testing purposes: Stella (release 6.6.0 - 20211117) Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL). Stella was originally developed for Linux by Bradford W. Mott, and is currently maintained by Stephen Anthony. Since its original release several people have joined the development team to port Stella to other operating systems such as AcornOS, AmigaOS, DOS, FreeBSD, IRIX, Linux, OS/2, MacOS, Unix, and Windows. The development team is working hard to perfect the emulator and we hope you enjoy our effort. Stella is included as part of this extension with many thanks to Stephen Anthony. Stella is an external project and can be downloaded separately here. If you enjoy using Stella place consider donating to ensure it's continued development. A7800 (release 5.1 - 20220502) A7800 is a fork of the MAME Atari 7800 driver, with several enhancements added: Support for emulation of Proline Joysticks, VCS Joysticks, Lightguns, Paddles, Driving Controllers, Keypads, Trak-Balls, Amiga Mice, and ST Mice. Support for emulation of Proline Joysticks, VCS Joysticks, Lightguns, Paddles, Driving Controllers, Keypads, Trak-Balls, Amiga Mice, and ST Mice. Maria DMA timing has been improved further, with the addition of accurate DMA hole penalties. Selectable and improved palettes with enhanced screen options. Streamlined UI including menu options to have an Atari 7800 system focus. A bug in the existing RIOT emulation has been fixed. POKEY sound emulation improvements. SALLY (CPU) and MARIA (Graphics chip) performance adjustments. Audio indication of no ROM loaded silenced. BIOS files no longer required and made optional. Implementation of XM control registers updated. Graphical register updates made mid-scanline are now displayed mid-scanline. Bankset bankswitching support added. [email protected] added for non-banked, supergame, and bankset formats. Machine targets a7800dev and a7800pdev added, which display DMA usage per-scanline. MAME compatibility and syntax has been maintained, to allow for the reuse of MAME configuration files and front-ends. A7800 is included as part of this extension with many thanks to Mike Saarna (RevEng). A7800 is an external project and can be downloaded separately here. Further information about this release is available here at AtariAge. Releases 20220504 - Build v0.7.4 20220401 - Build v0.7.3 20220101 - Build v0.7.2 20210422 - Build v0.7.1 20210315 - Build v0.7.0 20210305 - Build v0.6.9 / 20210216 - Build v0.6.8 / 20210210 - Build v0.6.7 / 20201124 - Build v0.6.5 / 20201008 - Build v0.6.4 / 20200917 - Build v0.6.3 / 20200915 - Build v0.6.2 / 20200912 - Build v0.6.1 / 20200901 - Build v0.6.0 20200829 - Build v0.5.9 / 20200624 - Build v0.5.8 / 20200622 - Build v0.5.7 / 20200616 - Build v0.5.5 / Build v0.5.6 / 20200608 - Build v0.5.4 / 20200518 - Build v0.5.3 / 20200508 - Build v0.5.2 / 20200429 - Build v0.5.1 / 20200427 - Build v0.5.0 20200415 - Build v0.4.9 / 20200415 - Build v0.4.8 / 20200414 - Build v0.4.7 / 20200409 - Build v0.4.6 / 20200407 - Build v0.4.5 / 20200323 - Build v0.4.4 / 20200321 - Build v0.4.3 / 20200317 - Build v0.4.2 / 20200316 - Build v0.4.1 / 20200314 - Build v0.4.0 20200314 - Build v0.3.9 / 20200312 - Build v0.3.8 / 20200307 - Build v0.3.6/v0.3.7 / 20200305 - Build v0.3.5 / 20200217 - Build v0.3.4 / 20200129 - Build v0.3.3 / 20200128 - Build v0.3.2 / 20200108 - Build v0.3.1 / 20191022 - Build v0.3.0 20190807 - Build v0.2.8 / 20190711 - Build v0.2.7 / 20190614 - Build v0.2.5 / 20190611 - Build v0.2.4 / 20190604 - Build v0.2.3 / 20190528 - Build v0.2.2 / 20190522 - Build v0.2.1 / 20190521 - Build v0.2.0 20190513 - Build v0.1.9 / 20190510 - Build v0.1.8 / 20190506 - Build v0.1.7 / 20190428 - Build v0.1.6 / 20190425 - Build v0.1.5 / 20190421 - Build v0.1.2 & v0.1.3 / 20190420 - Build v0.1.1 20190419 - Build v0.1.0 - Initial release Manual download
  2. Hi guys, I'm working on a 7800 platformer called Morf, but hitting a few issues maybe you can point me in the right direction. Having trouble with sprites inverting their colors In the above image: - The main character Morf is inverted, green/black - The second tile set should be using a blue color palette for the water at the bottom of the screen. - Recently for no obvious reason the sprites break up when moving vertically like the drip from the pipe below. Also you can see the left moving sprite has the correct palette. Any help or advise would be awesome 😄
  3. I finally decided to announce something that I have been working on: Heofonfīr. (O. E. for Heaven Fire) Genre: Space Shooter (Vertical) Levels: 5 I was thinking about Sting's Baroque spinoff called Baroque Shooting, and decided to do something similar for the 7800. So, I decided to re-read Steve Engelhart's 7800Basic tutorials, and started to code. However, I hit numerous roadblocks during the process, such as figuring out how to do vertical scrolling, enemies that attack, power-ups, bosses, endings, and other things not covered in the 7800 Basic tutorial. To prove that I am not pulling people's chains, I'll even post some of my graphics. Update: Functioning ROM file can be found in the last two posts. After loading it up in your favorite emulator, push fire and try it out. Update 02: The latest version of the ROM can be found in the latest post.
  4. Hi everyone, A few of us (@Muddyfunster, @Synthpopalooza) were having a discussion about data compression and unpacking of data such as level maps and sound/tunes. I was doing a bit of study around the AA forum and came across some discussions here: https://atariage.com/forums/topic/316628-most-efficient-compression-for-atari/ https://atariage.com/forums/topic/291154-any-compressor-between-rle-and-lz4/ There appears to be a number of routines which might be useful some of which do have a 6502 conversion for other machines. I see the main feature having the ability to unpack stored data from ROM into RAM. For example both Millie & Molly and Exo have a huge amount of ROM set aside (eg. 1-2 banks!) for pokey music reducing our capacity to include more features etc. I see the process working as follows: Compress a binary data file using a command-line tool Convert compressed binary data in a data table To unpack - set the input (ROM) and output (RAM) pointers and process As an example I used the zx0 compressor to reduce 4096 bytes down to 680 bytes. Anyway, does anyone have any working examples which we could utilise in 7800basic? (assembly is fine for use in the backend) I feel this could be a really useful step for 7800 developers to have an ability to store compressed data. EXAMPLE CODE (currently LZ4, ZX0, ZX7) Thanks to @playsoft, @Eagle and @xxl for assisting with compression libraries and @RevEng for initial 7800basic compatibility 20220215.Compression.zip
  5. While I was working on my vertical engine, I also decided to make some other demos out of boredom. The first is a horizontal shooting demo, and the second a platformer. The .78b files are included in their respective .zip files. Horizontal Shooter 12-27-2020.zip Horizontal_Shooting_demo.78b.a78 Horizontal_Shooting_demo.78b.bin Horizontal_Shooting_demo.78b.list.txt Platformer Demo 3-18-2021.zip platformer_demo_v01.78b.a78 platformer_demo_v01.78b.bin platformer_demo_v01.78b.list.txt
  6. Welcome to the TIATracker module for batari Basic and 7800basic allowing you to play TIATracker music in your Atari console game. What is TIATracker TIATracker is a tool created by Kylearan for making Atari VCS music on the PC and a new sound routine for the VCS. It features ADSR envelopes, up to 7 melodic and 15 percussion instruments, customizable pitch guides for optimizing the number of in-tune notes, a size-optimized and configurable replayer routine and much more. More information is available here Example For a full example of incorporating your TIATracker music into your source check the following depending on your platform: batari Basic - TIATrackerPlayer.bas 7800basic - TIATrackerPlayer.78b Known issues Currently only one track per game can be added. Titlescreen Kernal Has been tested and works with the Titlescreen module Releases 20190926 - 20190926.TIATrackerPlayer.zip Previous Releases 20190125 - TIATrackerPlayer.v1.1.20190125.zip 20190123 - TIATrackerPlayer.20190123.zip Instructions The following outlines how to add the TIATracker module to your source and incorporate your music. If you are having issues refer to the example for assistance. 1. Copy the tiatracker folder into the root of your source folder 2. Copy the content of file tiatracker/tiatracker_variables.bas into your variable definitions of your source. 3. Add the following to your source (either at the bottom of your file or bank depending on your requirements): rem include the tiatracker source asm include "tiatracker/tiatracker.asm" end 4. In the initalisation of your screen add the following to initialise the tracker: rem initialise tiatracker gosub tiatrackerinit 5. In your screen loop, after the drawscreen call add the following: rem play track gosub tiatrackerplay TIATracker 1. Create your music or get someone to do the hard work! 2. Select File > Export track data to dasm... from the menu. On the Save As dialog locate your tiatracker/track folder in your batari Basic game folder, enter a filename of 'track' and click the Save button to export your music. 3. In file tiatracker/track/track_variables.asm remove the Permanent and Temporary variables from the file (otherwise you will receive a compilation error). Note: This will need to be done each time you export your data.
  7. Arkanoid The era and time of this story is unknown. After the mothership “Arkanoid” was destroyed, a spacecraft “Vaus” scrambled away from it. But only to be trapped in space warped by someone…… Download link below How to play You control a paddle (the spacecraft Vaus) at the bottom of the screen which you use to deflect an energy ball towards rows of “Bricks” at the top the screen, thus destroying them and eventually clearing the screen to progress to the next level. Certain bricks when destroyed release power-up capsules which grant additional powers such as capturing the energy ball, equipping your Vaus with a laser cannon or opening a warp gate allowing you to escape to the next level. The final 33rd stage is a confrontation between the Vaus and the entity “Doh”. To destroy the Doh and return from distorted space, hit the Doh repeatedly with your energy ball whilst avoiding the deadly projectiles he spits from his mouth. Controls Move the Vaus left and right to direct the energy ball back towards the bricks. The position the ball hits the Vaus will determine the direction of the energy ball. To change settings, on the Titlescreen press Select to change controller and left difficulty switch to change between Novice and Arcade State of the game This is an work in progress release. The following has been completed: Title/High Score/Credits, Intro, Outro and Game Over screens Difficulty - novice (3 lives) or arcade (2 lives). 20,000, 60,000, 60,000+ for additional lives Music (Pokey) and sound effects (Pokey and TIA) Controls: paddle, driving controller, trakball, joystick, Amiga or ST mouse (press Select to change controller) Variable speed ball movement and collisions All 33 levels and final DOH level Capsules layout, selection rules, dropping and animations. Activity on collection: Enlarge (E) - makes the vaus bigger Laser (L) - destroy bricks with your laser weapon Catch (C) - catch and hold the ball, press button to release (auto-releases after a period of time) Break (B) - open a warp gate and leave the level - 10,000 bonus points Slow (S) - slow the speed of the ball Disruption (D) - split the ball into 3 Extra Life (P) Brick animations (start of level) Vaus animations (transitions between normal, laser and large or any combination) In progress/to be started: Finalise intro/outro animations (in progress) Flying enemies (in progress) Brick animations (specific bricks on collision with the ball) High Score entry Lives indicator Fix ball collision sounds Demo The game is currently in beta and the demo release contains the first 10 levels and generally full functionality of the game. The game will be available for purchase on cart in the near future from AtariAge. Pokey Sound Arkanoid currently requires Pokey support to hear the music (you will not hear anything without it) but most sound effects (using TIA) will be heard regardless. A separate release with TIA music will be made available in the future. Note: if you are using A7800 to play the game you will need to activate the XM Expansion Module cart to hear the POKEY sound for the time being: command line: a7800 a7800 -cart1 xm -cart2 arkanoid.78b.a78 Emulation The A7800 emulator is the recommended emulator for playing Arkanoid on your computer and provides full support for the Pokey music contained in the game. The ProSystem emulator is no longer supported. Credits Thanks to the following people who though their contributions, wisdom and guidance are helping to create this game: Mike Saarna (code) Bobby Clark (music and sound) Marco Sabbetta (additional graphics) Robert Tuccitto, Steve Ramirez (testing) John Calcano (box, cart and poster design) Al Yarusso, CPUwiz (AtariAge) Latest release Demo release - contains first 10 levels + DOH level 20210103.arkanoid.demo.zip Previous releases 20191022.arkanoid.demo2.zip
  8. Note: Gameplay has changed a bit compared to what's explained below. I'll try to rewrite this to make sense later! For now keep in mind that the timer is increased a bit while you graze enemies. If it drops to 0 it's game over instantly! Object of the game is to try to tag the enemies flying and bouncing around the screen without getting hit directly. scoring will certainly change between now and then along with bonuses awarded between waves. Currently you gain points by grazing against enemies (Trying to touch the edges of the enemy without letting the enemy touch the center pixel of the player), or outright destroying them if your graze power is high enough. If you can manage a long enough graze you'll get more points than just destroying the enemy! Different enemies give different points for destroying them. Additionally you gain bonus points at the end of each wave based on the number of enemies you successfully touched without destroying, as well as a survival bonus for not dying during the wave that's relative to how much grazing you've managed to do! The waves included are mostly for testing. Enemies have different colors each wave, although they will all share the same palette due to the screen mode. Once the end of the wave data in the rom has been reached, it will begin looping. Enemies: Gears - simple bouncing enemies. Some wiggle in their path to make it harder to avoid/graze. (100pts) Heli-pod - A propeller based cannon. They can fire a variety of bullets. Their propeller can not be grazed so be careful when trying to graze the enemy! (500pts) Lancer - A simple two pronged spear enemy that flies, quickly, in a straight line. If it hits you, it'll take you with it and try to pin you to the wall for a time! Try to dash to make it release you! Bullet Types: Small bullet - simple energy shot that will despawn after hitting a player. Large bullet - A stronger punch compared to the small one. In effect it pulls a double-hit. If the player dies from the first hit, then the bullet will continue on as a small bullet. Paralyser - Grazing this bullet drains your Graze Charge instead of fills it. Quickly! If you're hit, it will slow the player for a couple of seconds. BossBullet - A rather large bullet that will crawl along the walls and occasionally attempt to jump across the screen at the player. Named because usually it will be bosses using them! (For now the helipod uses them but in the final game it won't.) Power Ups: Points (P) - simply awards a larger bonus for destroying the enemy. 1000 instead of the usual 100-200. Graze Bonus (G) - increases the points/enemy awarded at the end of the round for grazed enemies by 9pts. Reset at death. Minimum 9pts, maximum 99. Speed Bonus (S) - Increases player speed slightly. Reset at death. After 4 bonuses, you'll reach maximum speed. Regeneration ® - Causes the graze power to charge automatically for about 10 seconds. It'll stop automatically on death however! Right now G/S/R increases the points-to-destroy bonus of the gear from 100 to 200. When you've saturated the bonus of the powerup, the bonus will increase to 500pts since you won't get an increase in graze or speed bonus. In the case of Regen, you'll get the 500 bonus as well as reset the timer on the Regeneration to max. Controls: joystick moves the player. Fire Button 1 (or was it 2...): Dash! Fire Button 2 (or was it 1...): Slow speed! Console switches Reset - reboots the game. Select - returns to the title/menu screen. Right Difficulty: Enables/Disables Life Stealing in 2 player games. (If one player runs out of lives, they can take a reserve from the surviving player so long as they have more than 1.) Pause - should work with the default 7800basic behavior. Two-Player Modes: (Old versions only) Standard - the default mode. Basically no benefit or penalty is presented. It's pretty much like it is in 1-player. Co-op - Players share graze charge to help stay alive longer. It won't a player's charge go below 40, but above that it will attempt to share out the charge power between players. Versus - Players compete each round for points. Whoever has the higher bonus point score at the end of a round takes a spare life from the losing player, assuming they have one to spare. At present I can't test on real hardware so if anyone finds anything that seems weird let me know. Binaries for 2016-06-09 are the last ones with 2-player modes available. Leaving them here. 2016-06-09-graze.bas.a78 2016-06-09-graze.bas.bin 2017-09-21-graze.bas.a78 2017-09-21-graze.bas.bin
  9. Ok since I've been letting yet another side project rot away for too long and I really don't know if/when I'll get back to it, here's another little demo as I fiddle with scrolling. In a nutshell the program uses plotmapfile to display full screens in 160A and the player can move about in 4 directions, going 1 full tile at a time. When you reach the edge of the screen that is connected to a different map, it will scroll that map in black and white to the new screen then flash the color back. There are only two screens in this program. The screen you start in, and the screen to the left of it. Any other screen edges you can reach are "dead" and won't trigger a change. There's a "template" tmx file included that's got the embedded tiles, etc all set up for adding new screens for playing around with. Additionally this demo includes collision detection between the player and the map tiles. Changing around the order of tiles in the tmx files would obviously mess around with the collision code so keep that in mind. Compiling instructions in a command/dos window are listed in the bank0c.bas file. As mentioned in that file feel free to use anything in the code in your own projects. And yes, I suck at drawing hero sprites. rpg7800.zip rpg.bas.a78 rpg.bas.bin rpg7800-fixed.zip
  10. Hi everyone, I'm going to list some tricks, tips and examples for using 7800basic. Many have also been generously offered by Mike @RevEng and Lewis @Muddyfunster. I'll provide a Table of Contents so they will be easy to find as I add them or have questions about them. Display, Sprites and Images Clear Palette Clear Palette (Double-Buffer) Sprite Animation TallSprite [Updated] Quick Score [Updated] Centering Text Singlewide Text in Doublewide Mode [Updated] Sound Copy TIA Sound to Ram Controls Read Controller Data/Tables Large Data Table > 256 Bytes
  11. Mord

    I suck at sprites.

    So while trying to do up semi-humanoid characters, I realized I suck at doing this. More than I anticipated that is. So, let's just BS an armless blob of a monster with stubby feet and call it the hero! It's going to be "fun" trying to figure out what this guy's powers are going to be. XD Going to be more fun trying to figure out what kind of game I'm even making. Oh well, to heck with planning, it's only ever aided my procrastination anyway! Yes I'm aware of the number of colors used in the image, given any game with this little blob will likely be in 160A. That's not an issue as the teeth and eyes will be drawn first with a specific sprite, then the main monster plotted over it - letting the eyes and teeth shine through some transparent gaps in the main sprites. Animations for walking left and right are done. Up and Down walking are tentatively done but I want to try to rework them a bit more.
  12. Mord

    Horizontal Scrolling

    So a week overdue, and I only really made progress on the horizontal scrolling. I didn't add in solid wall type things yet as I was trying to fix up bugs and the like. You'd be surprised at some of the weird things that would happen... Going to clean the code up later today, but first, must sleep.... *edit* Now that sleep is over, I've tried to clean up the source a bit and here it is. I'm going to post it in the 7800 dev forum in a minute as well. But first, must eat! ... as well as upgrade my 7800Basic to the latest version to make sure it still compiles on that.
  13. Mord

    Graze (2015-05-18)

    The name of this game will likely change before it's finished. It just describes the goal of the game for the most part. Right now it's showing the maximum number of free-roaming enemies the engine can do before causing slowdown. The plotvalues and boxcollisions are a big cause of this but there's a lot of 7800basic commands I can re-write into assembly to get that number up again. In case it isn't obvious from playing it a bit, a successful graze flashes the background blue. A hit, which would normally cause a loss of a life, flashes it red. I don't have the second player in yet. When it's added, it will have a second color to flash the background on a graze. When both players graze at the same time, a third color will be used. I'm pondering doubling the size of the player to make it a bit easier to graze (plus give more detail.) but we'll see. That will be done before a second player is added at any rate. The game is running in 320B. The green backdrop on the status bar is using the same colors as the enemies so it'll change color as the enemies change. Most likely enemies will change with the Wave. What you see so far is a weekend of coding... well, not quite a weekend since I was visiting family most of the weekend.
  14. At times, when coding in 7800Basic with Windows, sometimes you may get one of those dreaded messages, '7800Basic Has Stopped Working', and crashes. Before you get really upset and throw your computer across the room, or get help as to wonder if there is a problem with the application itself, there are two instances in which this can happen. Sometimes 7800Basic can catch the error, but other times it'll crash. The first common mistake is inadvertently using an "if-then" statement without the "then" in the statement. For example: If boxcollision (x_thing,y_thing,16,16,ape_x,ape_y,16,16) goto __banana The "then" is missing from the code. It is easy to miss this after typing hundreds of lines of code. The other instance is also related to the "if-then" statement where the line is unfinished: if room>4 && This will also, at times, cause 7800Basic to crash since it is uncompleted. Sometimes you may just forget to finish it. So, these are two instances (from my own experiences) to as why 7800Basic may crash under Windows environments. I don't know if the same happens to Ubuntu/Mac users, but it might save someone from getting their blood pressure up to a boiling point.
  15. Since the last update, DQ has been a 48k, then a 128k, now a 256k game. I didn't release a 128k version since I wanted more maps. I've added several maps such as another overworld map, caves and additional dungeons. I've also started maps for a sky tower and so far two floors have been added. A title screen and "game over" have been added. This game is still a demo and there are still bugs and other things I need to fix. One noticeable one is the first cave map has slow down and I need to find what's (possibly a plotsprite issue) causing it. Please let me know through the blog comments or even PM if you run into any problems. Overview: You're a draker, a dragon-like creature, and while living on Draker Island, a mysterious spell has been cast all over the island. The spell cannot make the little drakers fly and it's up to you to find out what or whom is behind the spell. All you have is your fire orb to fight enemies that appeared after the spell was cast. Long ago, sections of the island were divided with gates. Dungeons below hold the keys to open the gates. But the dungeons are full of enemies. VERY IMPORTANT: The Prosystem emulator will NOT work with this game. You'll need to use MESS or some other emulator that can support 256K. http://www.mess.org/start DQ_Alpha.bas.a78 DQ_Alpha.bas.bin
  16. One of the things a have been struggling with at times is keeping data tables within the 256 byte size limit. This is two-fold issue - the table size and calculating an offset. According to the documentation on accessing regular data, the size is limited to 256 bytes and if you wanted to create larger it is suggested to use sequential tables - each has their pros and cons. So what if I told you there is a way to access tables larger than this quickly and easily?? Most of us probably use tables for either map data or some sort of grid style layout or lookup. During Millie and Molly development I discovered I could use the peekchar function to replace calculating an offset to my RAM based table containing the background layout (as objects move the background needed to be restored). This worked great as I could replace a convoluted offset calculation using co-ordinates. I then expanded this and used the pokechar function to update this and other tables in RAM as needed. Getting back to Arkanoid recently, I started reworking this with my learnings from M&M. Whilst building the background for the Doh level I required a more expansive table as this level background contains many more tiles (another learning from M&M - replace large sprite strips with tiles. Mike outlines this process here) than the standard levels. I initially looked at different methods to build the display but it was getting pretty messy (won't bore you with the details!). Anyway I eventually thought lets just put in the whole table (13*26-338 bytes) and set it up to copy into a RAM table and see what happens. So I fired up the debugger in A7800 and looking at this RAM area - wow hang-on the whole thing is in there! Ok great, so lets try just accessing it from ROM. Bingo, the level started up and displayed as I was expecting!! How does it work? The code below gives you the basics to configure and read your table from ROM (this will also work using a RAM table): Any limitations? Talking to @RevEng about it the only real limitation potentially is your X,Y needs to stay within the 256x256 limit (this is theory only!) rem vars dim offsetX = var0 dim offsetY = var1 dim objectIndex = var2 rem lookup loop for offsetY = 0 to 25 for offsetX = 0 to 12 rem get object objectIndex = peekchar(levelPlayfield,offsetX,offsetY,13,26) rem TODO: add you code here... next next data levelPlayfield 1, 2, 2,12, 13, 2, 2, 2, 12,13, 2, 2, 3 4,37,38,37, 45, 46, 47, 48, 49,37,38,37, 8 4,39,40,39, 50, 51, 52, 53, 54,39,40,39, 8 5,41,42,41, 55, 56, 57, 58, 59,41,42,41, 9 6,43,44,43, 60, 61, 62, 63, 64,43,44,43,10 7,37,38,37, 65, 66, 67, 68, 69,37,38,37,11 4,39,40,39, 70, 71, 72, 73, 74,39,40,39, 8 4,41,42,41, 75, 76, 77, 78, 79,41,42,41, 8 5,43,44,43, 80, 81, 82, 83, 84,43,44,43, 9 6,37,38,37, 85, 86, 87, 88, 89,37,38,37,10 7,39,40,39, 90, 91, 92, 93, 94,39,40,39,11 4,41,42,41, 95, 96, 97, 98, 99,41,42,41, 8 4,43,44,43,100,101,102,103,104,43,44,43, 8 5,37,38,37,105,106,107,108,109,37,38,37, 9 6,39,40,39,110,111,112,113,114,39,40,39,10 7,41,42,41,115,116,117,118,119,41,42,41,11 4,43,44,43,120,121,122,123,124,43,44,43, 8 4,37,38,37, 38, 37, 38, 37, 38,37,38,37, 8 5,39,40,39, 40, 39, 40, 39, 40,39,40,39, 9 6,41,42,41, 42, 41, 42, 41, 42,41,42,41,10 7,43,44,43, 44, 43, 44, 43, 44,43,44,43,11 4,37,38,37, 38, 37, 38, 37, 38,37,38,37, 8 4,39,40,39, 40, 39, 40, 39, 40,39,40,39, 8 5,41,42,41, 42, 41, 42, 41, 42,41,42,41, 9 6,43,44,43, 44, 43, 44, 43, 44,43,44,43,10 7,37,38,37, 38, 37, 38, 37, 38,37,38,37,11 end For me this opens up a whole lot of possibilities! I hope you can find it useful too!
  17. Does 7800basic have bit shift operators? I can't find them in the documentation here: http://www.randomterrain.com/7800basic.html And if it doesn't, then how would I use the 7800basic "asm" command to write the 6502 assembly code to perform the operation, say, num1 << num2 (logical shift left)? Thanks!
  18. Sorry couldn't think of a better title. So, I'm trying to implement moving and placing blocks in order to place them as defenses in front of the player's base. I wrote a simple code, just two lines, so that when the player's x and y are within a range of the block's x and y (15 pixels on the x, 10 on the y), and then the player presses a button, the block will jump to be 4 pixels away from the player's x and y ("carrying" the block). Everything works fine until the block gets to blockx=14 (and blocky=9) when the the block will detach from the player (the variable 'nearbase' is no longer true) and will not allow itself to be picked up again (nearbase is never re-set as 1), even if the player's x and y go away from the edge of the screen. I used plotvalue to display that the variables for player and base x and y are correct, stay what they should be and stay within range. There is no problem on the other end of the screen, only in the lower numbers. When the strange behaviour is happening, I ask (via plotting a debug image) if the playerx is within range, it says it isn't, despite the plotvalue clearly showing that, in fact, it is. playerx and playery are dimensioned as a and b while blockx and blocky are $2557 and $2561 so it doesn't seem to be an overwriting issue. The block is called 'base' in the code, so blockx=basex. if playerx<basex+15 && playerx>basex-15 && playery<basey+10 && playery>basey-10 then nearbase=1 else nearbase=0 if joy0fire1 && nearbase=1 then basex=playerx+4:basey=playery+4:basepickedup=1 else basepickedup=0 Anyone know what's going on?
  19. 7800 Pokey Engine Welcome to the 7800 pokey engine for music and sound effects playback on the Atari 7800 Console. This engine was initially developed (based on the disassembly and reverse engineering of Ms. Pac-man by Atari) by Perry Thuente (tep392) and Bob DeCrescenzo (pacmanplus) for the purpose of providing pokey sound playback for the Pac-man Collection. The engine has since been enhanced and is now also being used for other homebrew titles such as Millie & Molly 7800 (Matthew Smith), Popeye (Darryl Guenther) and Danger Zone (Lewis Hill) thanks to the awesome music abilities of Bobby Clark. The 7800 pokey engine has been kindly open-sourced by the contributors and is freely available to the AtariAge community for use within any project. The source is currently maintained by Matthew Smith (mksmith) and is available to download from Github. Contributors The following people have contributed to developing the pokey engine: Perry Thuente @tep392 Bob DeCrescenzo @PacManPlus Bobby Clark @Synthpopalooza Mike Saarna @RevEng Matthew Smith @mksmith Paul Lay @playsoft Additional Testing The following people have contributed to testing the pokey engine: Robert Tuccitto @Trebor Titles using the pokey engine The following titles are using variants of the pokey engine: Pac-man Collection Millie & Molly 7800 and Arkanoid Popeye Danger Zone Music development Bobby Clark is the first and foremost expert in developing music and sound effects using this engine and has produced some outstanding compositions. I'm sure he would be happy to help you if you ask! Compiling for the Concerto Beta When compiling builds for use on the Concerto beta there are a couple of things you need to be aware of: Enable the SKIPINITFORCONCERTO flag in pokeysound.asm 144k ROM is the best supported ROM size and should work without additional change 128K+RAM ROM will work but the ROM header will need to be manually changed to remove the pokey @ $450 flag 128K ROM does not produce any pokey sound These notes will be updated as batari makes enhancements and changes to the Concerto firmware. Changelog v1.03 (18 Feb 2021) v1.03 - re-implemented CHANNLSKCTLS lookup (mksmith) v1.02 - renamed SKIPCHECKFORPOKEY to SKIPINITFORCONCERTO and verified changes work (mksmith, trebor) v1.01 - updated SKIPCHECKFORPOKEY process to better handle $450 detection (playsoft) v1.00 - open sourced to Github (mksmith) v0.11 - added queue scheduling (playsoft) and SKIPCHECKFORPOKEY flag Concerto issue). Added RESETPOLYON and CHANNLRESETON table flags (mksmith) v0.10 - removed number of channels (not required) and added a tune-by-tune reset table (mksmith) v0.9 - removed SKCTL set and added ability to set number of channels to activate (mksmith) v0.8 - added MUTEMASKRESTFLG const so rest value can be customised (mksmith) v0.7 - re-implemented MUTEMASK change (reveng) v0.6 - fix 16-bit mode, SKCTL, or any mode requiring one channel be silenced and stops popping noises (sythnpopalooza) v0.5 - 7800basic Pause Support (mksmith) v0.4 - 7800basic PAL Support (mksmith) [suggestion on how to implement by reveng] v0.3 - Reset poly support (sythnpopalooza) v0.2 - Added PLAYPOKEYSFX enhancements, STOPPOKEYSFX (mksmith) v0.1 - Initial version provided by pacmanplus and sythnpopalooza Using the pokey engine in 7800basic The engine itself is reasonably straight forward to integrate into 7800basic and there is a detailed example for how to properly setup and configure your game to use it. Saying that it can be tricky at the beginning as you will need to determine the required features to be activated and also configure and locate the music itself potentially across various banks. The basic process is as follows: copy file pokeysound.asm into the base root folder of your game. 7800basic will automagically replace the base file in 7800basic during compilation. inline pokeyconfig.asm into your game source (this should be the end of the last shared bank so it can be accessed at all times) inline your musicxxx.asm file(s) into your game source. There can be one of more of these spread across multiple banks depending on how you game is structured but in reality as with bank sharing the tune data MUST be available to be currently active bank. Other changes to your source The following changes are required to be made to your 7800basic source: 1. Insert the following vars: dim POKEYADR = $450 ;$450 (modern homebrew) or $4000 dim TUNEAREA = $2200 ;range $2200-$2246 (46 bytes) dim SOUNDZP = y.z ;all pointers must be located in zeropage Note: The TUNEAREA location or SOUNDZP vars can be changed to suit your requirements. 2. Include the following to service the player each frame (this should be in the last shared bank so it can be accessed at all times): topscreenroutine rem call the pokey servicing routine asm jsr SERVICEPOKEYSFX end return Examples example1.78b - basic implementation showing how to integrate the 7800 pokey engine into 7800basic including adding pokeyconfig and music data assembly files via the inline feature, calling and playing multiple different tunes and sound effects. Additional notes tunes can be moved into RAM and played from there if required (example coming soon) an release for assembly users will be added soon Need some help? Contact Matthew Smith (mksmith) if need any assistance implementing this engine into your game.
  20. I think I already know the answer to this question through trial and error and experimenting but thought it a good idea to pop it hear incase i'm missing a trick I assume that once set, set zoneheight 8 set doublewide on -can not be changed for different screens ? to change something to add some text for in 320 for example I'd use a "topscreen" routine instead? Background : I want to use a nice small font (like "font" or "alphabet_4_wide") for a short status display but I find with doublewide on, this does not display correctly so I have to revert to a less elegant 8 pixel font with chunkier letters on screen. Assume I cannot change these settings between screens, so have the main game in zoneheight8 and doublewide and pause screen in zoneheight 16 and doublewide off for example? conclusion so far is that zone heights and doublewide cannot be adjusted after being set ? Is there any known workaround for this or am I missing something in my understanding of these commands ? Is there a way to use then thinner fonts with a doublewide setup using char tiles. Thanks
  21. Hi all, I have a question on the reserved area. In my current build of Dangerzone, I'm running out of space in the reserved area as I'm trying to add Pokey support and keep savekey support for saving settings. I believe that I can "inline" certain ome modules to free up space in the reserved area if needed. (inline 7800vox.asm, inline pokeysound.asm, inline tracker.asm) If I include the module using "inline" do I have to keep the "set" reference at the top of the code? For example, If I use inline tracker.asm, do I still need set trackersupport basic Thanks!
  22. I've been experimenting with the sample programs and putting simple banners on the screen. I made a simple 160B banner which is 80x96, indexed png with 13 colour (per the various tutorials and useful threads that I managed to find). When I load the banner using : incbanner gfx/lr1.png 160B and then display it with plotbanner, I only get the leftmost 20% or so of the image. Displaymode is set to 160B and palettes 0,1,2,3 are set to random colours. I've been beating my head against this one for a couple of hours, any suggestions on what I'm doing wrong would be appreciated!
  23. I plan on making a story based platformer, but How do I make bitmap screens on 7800 Basic let alone making a title screen? Is there any tools I should use?
  24. I'm having trouble understanding how to invoke 12 colours, I keep getting the following error: *** (48): ERROR, plotmapfile didn't find a palette for worldTiles Reading else where I've seen warnings not to use it for background or play field characters, and that you mix 160A and B graphics, although I don't know how this is done. I couldn't find any example code of 160B being used. Below is my modified version of the plotmapfile sample file but updated for 160B, any insight would be helpful. Points to note the PNG for the tiles has a 12 colour palette generated in ADS's sprite editor, the tiles are embedded in the Tiled map. What have I missed? set doublewide on set basepath gfx set romsize 48k set tv pal ; ntsc set trackersupport basic displaymode 160B _setupPalettes P0C1=$00 P0C2=$08 P0C3=$0F P1C1=$D2 P1C2=$D5 P1C3=$D7 P2C1=$A2 P2C2=$A5 P2C3=$A7 P3C1=$42 P3C2=$22 P3C3=$25 P4C1=$42 P4C2=$22 P4C3=$25 BACKGRND=$00 _import_tile_sets incgraphic brickTiles.png 160B 0 1 2 3 4 5 6 7 8 9 10 11 0 _import_maps incmapfile underGround.tmx gosub setupScreen goto mainLoop mainLoop restorescreen drawscreen goto mainLoop setupScreen rem characterset brickTiles clearscreen plotmapfile underGround.tmx underGround 0 0 40 12 savescreen drawscreen return
  • Create New...