Jump to content
IGNORED

Atari Dev Studio for Homebrew Development [Release]


mksmith

Which language do you develop with using Atari Dev Studio?  

88 members have voted

  1. 1. Which language do you develop with using Atari Dev Studio?

    • batari Basic
      45
    • 7800basic
      30
    • dasm (assembly)
      29

  • Please sign in to vote in this poll.

Recommended Posts

@mksmith Here is a simple question that might help a lot of new users of 7800 basic and your cool tool set. 

 

I can plot the same imported graphic on the screen multiple times (example is a "missile.png" sprite) , but is there a way to create a variable reference to each plotted version so I know which missile (for example) needs to be removed when a missile collides with an enemy?  
 

 

-Jeff

Link to comment
Share on other sites

2 hours ago, jefffulton said:

@mksmith Here is a simple question that might help a lot of new users of 7800 basic and your cool tool set. 

 

I can plot the same imported graphic on the screen multiple times (example is a "missile.png" sprite) , but is there a way to create a variable reference to each plotted version so I know which missile (for example) needs to be removed when a missile collides with an enemy?  
 

 

-Jeff

Jeff, yeah there are a few things you can do - this is along the lines of some things I've used in Arkanoid:

 

 rem configure vars
 dim index = var0
 dim renderX = var1
 dim renderY = var2
 dim bullet0Enabled = var31
 dim bullet1Enabled = var32
 dim bullet2Enabled = var33
 dim bullet3Enabled = var34
 dim bullet0X = var35
 dim bullet1X = var36
 dim bullet2X = var37
 dim bullet3X = var38
 dim bullet0Y = var39
 dim bullet1Y = var40
 dim bullet2Y = var41
 dim bullet3Y = var42
 
 rem graphics
 incgraphic gfx/bullet.png 160A

mainLoop
 
 rem process
 gosub updateBullets
 
 rem draw
 clearscreen
 gosub drawBullets
 drawscreen

 goto mainLoop

updateBullets
 for index = 0 to 3
   rem is bullet enabled? if no skip
   if !bullet0Enabled[index] then goto _skipUpdateBullet

   rem move bullet
   bullet0X[index] = dohBullet0X[index] + 1

   rem exited screen? if disable
   if bullet0X[index] > 160 then bullet0Enabled[index] = 0  : goto _skipUpdateBullet

   rem todo: add real collision check here - Pseudo code but gives you the picture...
   if [this] bullet collides with enemy then bullet0Enabled[index] = 0 : enemyDestroyed = 1 : score0 = score0 + 100

_skipUpdateBullet
 next
 return

drawBullets
 for index = 0 to 3
   rem draw?
   if bullet0Enabled[index] then renderX = bullet0X[index] : renderY = bullet0Y[index] : plotsprite bullet 0 renderX renderY 
 next
 return

So the key thing here is the layout of the variables. Each of the bullets (4 in this case) is laid out in list order, first the bullet enabled state, then bullet x position, then bullet y position.  This allows you to offset from the first item in each list using the index in this case.

 

The process becomes harder when using 8.8 vars as this process (i believe) can't be used (say we want more control of the x and y positions - i use these for the ball or doh bullets for example in Arkanoid) and you appear to need to revert back to manually checking each rather than being able to use the for/next loop.  I do need to go back and check some things myself here to see if that is correct!

 

Collisions are the hardest thing as there is no built-in hardware collision detection so you need to revert to either wrapping your own or using the boxcollision routine (see here).

 

 

  • Like 1
Link to comment
Share on other sites

32 minutes ago, mksmith said:

Jeff, yeah there are a few things you can do - this is along the lines of some things I've used in Arkanoid:

 


 rem configure vars
 dim index = var0
 dim renderX = var1
 dim renderY = var2
 dim bullet0Enabled = var31
 dim bullet1Enabled = var32
 dim bullet2Enabled = var33
 dim bullet3Enabled = var34
 dim bullet0X = var35
 dim bullet1X = var36
 dim bullet2X = var37
 dim bullet3X = var38
 dim bullet0Y = var39
 dim bullet1Y = var40
 dim bullet2Y = var41
 dim bullet3Y = var42
 
 rem graphics
 incgraphic gfx/bullet.png 160A

mainLoop
 
 rem process
 gosub updateBullets
 
 rem draw
 clearscreen
 gosub drawBullets
 drawscreen

 goto mainLoop

updateBullets
 for index = 0 to 3
   rem is bullet enabled? if no skip
   if !bullet0Enabled[index] then goto _skipUpdateBullet

   rem move bullet
   bullet0X[index] = dohBullet0X[index] + 1

   rem exited screen? if disable
   if bullet0X[index] > 160 then bullet0Enabled[index] = 0  : goto _skipUpdateBullet

   rem todo: add real collision check here - Pseudo code but gives you the picture...
   if [this] bullet collides with enemy then bullet0Enabled[index] = 0 : enemyDestroyed = 1 : score0 = score0 + 100

_skipUpdateBullet
 next
 return

drawBullets
 for index = 0 to 3
   rem draw?
   if bullet0Enabled[index] then renderX = bullet0X[index] : renderY = bullet0Y[index] : plotsprite bullet 0 renderX renderY 
 next
 return

So the key thing here is the layout of the variables. Each of the bullets (4 in this case) is laid out in list order, first the bullet enabled state, then bullet x position, then bullet y position.  This allows you to offset from the first item in each list using the index in this case.

 

The process becomes harder when using 8.8 vars as this process (i believe) can't be used (say we want more control of the x and y positions - i use these for the ball or doh bullets for example in Arkanoid) and you appear to need to revert back to manually checking each rather than being able to use the for/next loop.  I do need to go back and check some things myself here to see if that is correct!

 

Collisions are the hardest thing as there is no built-in hardware collision detection so you need to revert to either wrapping your own or using the boxcollision routine (see here).

 

 

 

Yes, this is great. We did all box and circle collisions when blitting (just like plotting 7800vb soft sprites with no built in sprites or movie clips) when I wrote the Book The Essential Guide To Flash games with @fultonbot

I just need to "unlearn" a few c like structures and re-learn how to mimic them in basic with constants , variable arrays,  user functions and or gosubs etc to make up the same style of procedural code but for 7800b games.  Your VScode library helps a lot.  
 

My "Raiden / Xenon2" - Like will come out of this. ?

-Jeff

 

-Jeff

Link to comment
Share on other sites

45 minutes ago, jefffulton said:

 

Yes, this is great. We did all box and circle collisions when blitting (just like plotting 7800vb soft sprites with no built in sprites or movie clips) when I wrote the Book The Essential Guide To Flash games with @fultonbot

I just need to "unlearn" a few c like structures and re-learn how to mimic them in basic with constants , variable arrays,  user functions and or gosubs etc to make up the same style of procedural code but for 7800b games.  Your VScode library helps a lot.  
 

My "Raiden / Xenon2" - Like will come out of this. ?

-Jeff

 

-Jeff

Oh nice - congrats on the book!  

 

As said 7800basic comes with some interesting things due to the underlying conversion to assembly but its a fun language for sure!  A shooter sounds great - not a lot on the 7800 by the looks.  I'm going to take a look at one also eventually - was thinking something like a Gridrunner/Matrix (Jeff Minter) or always liked 1942 for vertical shooters.  Need to finish Arkanoid first though ?

  • Like 1
Link to comment
Share on other sites

21 hours ago, mksmith said:

Oh nice - congrats on the book!  

 

As said 7800basic comes with some interesting things due to the underlying conversion to assembly but its a fun language for sure!  A shooter sounds great - not a lot on the 7800 by the looks.  I'm going to take a look at one also eventually - was thinking something like a Gridrunner/Matrix (Jeff Minter) or always liked 1942 for vertical shooters.  Need to finish Arkanoid first though ?

I have a PD sprite library by Ari Fleishman that we used for the book. It contains everything necessary for a 1943 clone. I can probably convert all of the sprites to work on the 7800 and try that. I just want a good (besides Plutos) top down scroller on the 7800. I was thinking in the vein of the SMS classic AstroWarrior, but with planes and ships, so not a 100% clone, but a fun blast-em up. 

If we utilize zones, can we get more than 24 sprites on the screen? Or is that the limit in 7800b? (I think 24 is enough, but I want a lot of missiles to be firing from the player = )

Link to comment
Share on other sites

50 minutes ago, jefffulton said:

I have a PD sprite library by Ari Fleishman that we used for the book. It contains everything necessary for a 1943 clone. I can probably convert all of the sprites to work on the 7800 and try that. I just want a good (besides Plutos) top down scroller on the 7800. I was thinking in the vein of the SMS classic AstroWarrior, but with planes and ships, so not a 100% clone, but a fun blast-em up. 

If we utilize zones, can we get more than 24 sprites on the screen? Or is that the limit in 7800b? (I think 24 is enough, but I want a lot of missiles to be firing from the player = )

Nice!  Yeah a some good shooters would be great! Having a full background in these would be a reasonable challenge + 7800basic doesn't yet have pixel scrolling.  

 

Looking at the examples double-buffering can be used to add more.  When you compile it gives you a summary of the amount of objects you can run in a zone and you can also allocated more memory using the extradlmemory option.  Pretty much everything (bar the text) is a sprite in Arkanoid - some levels have 100+ sprites. I'm also 8 height zones where as a shooter could probably use 16 to get more objects. 

 

You do then get to a point where either slowdown will occur (i have this in Arkanoid - so split some functions over multiple frames) or in the extreme objects either disappear or mis-render (had this before when I was using characters before making everything sprite as suggested by RevEng).  I think it's one of those things you need to play around to find the best option for the game you are designing.  

Link to comment
Share on other sites

14 hours ago, mksmith said:

Nice!  Yeah a some good shooters would be great! Having a full background in these would be a reasonable challenge + 7800basic doesn't yet have pixel scrolling.  

 

Looking at the examples double-buffering can be used to add more.  When you compile it gives you a summary of the amount of objects you can run in a zone and you can also allocated more memory using the extradlmemory option.  Pretty much everything (bar the text) is a sprite in Arkanoid - some levels have 100+ sprites. I'm also 8 height zones where as a shooter could probably use 16 to get more objects. 

 

You do then get to a point where either slowdown will occur (i have this in Arkanoid - so split some functions over multiple frames) or in the extreme objects either disappear or mis-render (had this before when I was using characters before making everything sprite as suggested by RevEng).  I think it's one of those things you need to play around to find the best option for the game you are designing.  

Some of the traditional means of scrolling the screen might need needed here. Are you saying that a tile map can only be horizontally positioned at an 8 or pixel zone top and there is no way top position it to fake a scroll at other pixel locations?  In that case, a series of "banner" like objects that span more than a single zone could be used to push the background down the screen in a 1943 style auto scroll (think the islands and ocean) , while sprites are plotted on top in formations to fire at. 

I'll have to play with it to see what us possible. With a traditional full screen fine blit scroll, you would move a single tile at at time on the buffered screen, then translate back with a simulated matrix math "translate" to the actual pixel position needed, and then copy the full screen to the view-able screen. Might need VBL to to this or it will take up all of the processor time. 

Link to comment
Share on other sites

15 hours ago, jefffulton said:

Some of the traditional means of scrolling the screen might need needed here. Are you saying that a tile map can only be horizontally positioned at an 8 or pixel zone top and there is no way top position it to fake a scroll at other pixel locations?  In that case, a series of "banner" like objects that span more than a single zone could be used to push the background down the screen in a 1943 style auto scroll (think the islands and ocean) , while sprites are plotted on top in formations to fire at. 

I'll have to play with it to see what us possible. With a traditional full screen fine blit scroll, you would move a single tile at at time on the buffered screen, then translate back with a simulated matrix math "translate" to the actual pixel position needed, and then copy the full screen to the view-able screen. Might need VBL to to this or it will take up all of the processor time. 

I believe reading the forums that fine scrolling should be possible - but isn't implemented as yet into 7800basic.  There may be some assembly around that can do it though but how it could be integrated I'm not entirely sure...

  • Like 1
Link to comment
Share on other sites

  • 5 weeks later...

Is it possible for you to add the possibility to include text documents that aren't assembly files in bB? I would like to split my code up into different files so I can have them open in different windows and include them in the main source that I compile.

 

Example:

 include "init.bas"

or

 include "init.txt"

or whatever

 

only this works

 asm

 include "init.asm"

end

 

I tried to do that and put another end at the beginning and asm at the end of the included file but didn't work, maybe there is a way allready? Or else I request it ?

Link to comment
Share on other sites

21 minutes ago, Lillapojkenpåön said:

Is it possible for you to add the possibility to include text documents that aren't assembly files in bB? I would like to split my code up into different files so I can have them open in different windows and include them in the main source that I compile.

 

Example:

 include "init.bas"

or

 include "init.txt"

or whatever

 

only this works

 asm

 include "init.asm"

end

 

I tried to do that and put another end at the beginning and asm at the end of the included file but didn't work, maybe there is a way allready? Or else I request it ?

Hey @Lillapojkenpåön I think I asked the same question at one stage to RevEng in my early days of bB - that from memory would be a reasonable change to the compiler.  More likely a pre-processor would be required to merge the separate files together and then send through the result to the compiler - that is something to consider adding to Atari Dev Studio one day down the track but would be outside bB (or 7800basic as well). 

  • Like 1
Link to comment
Share on other sites

Hey everyone,

 

I'll be putting out a new build with the update to Stella some time this week. 

 

Been busy getting Arkanoid ready for the PRGE event the past couple of weeks but there may be a couple of additional little changes coming in Atari Dev Studio in this build also.  You'll be notified here and via VS Code when available.

  • Like 3
Link to comment
Share on other sites

A new release (v0.3.0) is now available with the following changes:

  • Updated Stella to 6.0.2 (Windows, Linux)
  • Added settings option to activate the A7800 emulator debugger

Update will be available via VS Code.

 

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
11 hours ago, Jean-Marc Lebourg said:

Hi and congrats for Atari Dev Studio, what an achievement!

Is there any chance to have Atari 8-bit computers (800...) development support in your roadmap for Atari Dev Studio and in how long? ;-) 
JMLC

Hi - thanks for downloading Dev Studio.  

 

I may need to reconsider how I distribute the extension before adding any further compilers as I think the size of the extension is getting out of hand for the way extensions are supposed to work.  I still need to get back and add some compilers for macOS which will swell the size even more.  I also was asked to add a compiler for the jaguar (from memory) and that was going to add 60+ meg.

 

I still have a lot of things I'd like to do just for what there now but certainly something to consider. All in all I really like using it to develop Arkanoid on the 7800 so the appeal is there especially the instant setup and configuration.

  • Like 1
Link to comment
Share on other sites

  • 2 months later...

Hi everyone, I'm in the process of finally getting macOS properly supported but am having trouble determining the correct way to launch Stella from a process.  Anyone got any suggestions, please help here:

It should be reasonably straight forward I'd imagine but as I'm a newbie on mac any help would be appreciated.

 

 

Link to comment
Share on other sites

I'll be watching the other thread with interest, but this at least works for me:

 

open -a Stella the /path/to/therom.bin

 

"Stella" here would be the name of the app in the Applications folder, including capitalization. You will probably want to let the user specify it,  defaulting to Stella as above.

  • Thanks 1
Link to comment
Share on other sites

8 minutes ago, Karl G said:

I'll be watching the other thread with interest, but this at least works for me:

 

open -a Stella the /path/to/therom.bin

 

"Stella" here would be the name of the app in the Applications folder, including capitalization. You will probably want to let the user specify it,  defaulting to Stella as above.

Thanks Karl! Will give that a go ?

Link to comment
Share on other sites

A new release (v0.3.1) is now available with the following changes:

  • Officially (finally!) included compiler and emulator packages for macOS (Mojave).
  • Added Stella 6.0.2 (macOS)
  • Updated dasm to the latest 32 and 64 bit packages (Windows, Linux and macOS).
  • Updated internal dev packages

Update will be available via VS Code.

 

Note: for those compiling directly against dasm you will be using the latest release provided by the new dasm team.  batari Basic and 7800basic are maintained separately and will be updated to the latest dasm in due course. 

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

In case anyone else has trouble finding it, here's how to change to a white background:

 

Click on File, hover over Preferences, click on Color Theme, move through the themes with the up/down arrow keys to preview the themes, then click on the theme you want to use.

Link to comment
Share on other sites

  • 2 weeks later...

A new release (v0.3.2) is now available with the following changes:

  • Updated to latest batari Basic release v1.2 20012020 (Windows, Linux, macOS)

Update will be available via VS Code.

 

I'm going to have a look at advancing the intellisense initially for 7800basic but bB should follow reasonably quickly if I can get something working.  I may have found a sample for the language server I can utilise.

  • Like 1
Link to comment
Share on other sites

51 minutes ago, mksmith said:

A new release (v0.3.2) is now available with the following changes:

  • Updated to latest batari Basic release v1.2 20012020 (Windows, Linux, macOS)

Update will be available via VS Code.

 

I'm going to have a look at advancing the intellisense initially for 7800basic but bB should follow reasonably quickly if I can get something working.  I may have found a sample for the language server I can utilise.

Awesome, is that with the fixed score_graphics.asm?

 

Link to comment
Share on other sites

56 minutes ago, TwentySixHundred said:

Awesome, is that with the fixed score_graphics.asm?

 

@TwentySixHundred No not as yet - that release is currently in beta by the looks (I did think about it but thought best to stick to the full releases).  I'll update just as soon as the next build is finalised by Mike ?

 

If you access the settings you can override the built-in compiler for the time being (see Files -> Preferences -> Settings -> Extensions -> Atari Dev Studio then Compiler > Batari Basic: Folder).

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...