Jump to content

vidak's Photo


Member Since 10 Jul 2017
OFFLINE Last Active Sep 30 2018 2:19 AM

#4121798 4K VCS/2600 Programming Competition

Posted by vidak on Wed Sep 26, 2018 5:08 PM

I am going to sponsor an Atari 2600 game development competition!
I will make a limited run of cartridges. The best three entries will be included in the limited run of cartridges as a multi-cart.
The development time will be six months. The competition will begin on 1 November 2018 at midnight in your timezone, and end on 30 April 2019 at midnight in your timezone.
The theme and genre of the game is completely open! It can be anything!
You may submit a game you have previously started. Use this opportunity to finish your game!
Entries must be 4KB (4096 bytes) in size when compiled!
- A standard binary that is executable by the Stella Emulator.
- Entries can be either in Assembly or batari BASIC
- The source code must be made freely available.
- Some brief instructions about how to play the game.
- Instructions made freely available about how to compile the source code.
- The source code 
- Borrowed from the IntyBASIC contest: As part of the validation process, each entry's source code will be built using its instructions and the final binary produced must match the submitted binary image 100%. Any entry that fails this criteria will not be judged.
- I encourage you to start a thread discussing your competition entry, where you post photos of your WIP, WIP ROMs and source code, and provide other information about your entry.
- You may co-author entries with people. That means more than one person can be an author to a game entry.
Your entry must be submitted to vidak@riseup.net
The panel of judges is as follows:
- vidak (myself)
Anyone who wants to be a judge can become one!
I /will/ permit judges to enter the contest, but they cannot score their own game entries. Anyone is allowed to give technical assistance
The criteria upon which 4K VCS ASM entries will be assessed are:
Originality (1 to 10) - Is the game based on a new idea or a twist on an established design?
Concept (1 to 10) -The ''audacity'' of the game, how impressive the general idea of the game is.
Presentation (1 to 10)
Gameplay (1 to 10) - A measure of how enjoyable the game is to play.
Replay Value (1 to 10)
When the panel has scored each game accordingly, the totals for each criteria will be added together for each game to give it a final score.

#4121609 4K VCS Assembly Programming Competition

Posted by vidak on Wed Sep 26, 2018 1:19 PM



If I have understood everyone's suggestions correctly, this is what I should change:


- have an open contest between BASIC and Assembly games

- create a limited run multicart with the top three games

- have a six month timeframe

- remove the fake label requirement


If I have understood you all correctly, I'll go ahead and post this in the 2600 forum, with all the rules!

#4117717 4K VCS Assembly Programming Competition

Posted by vidak on Thu Sep 20, 2018 6:09 PM



I am back! I have a job now! So with my first few pays, I am going to sponsor a 4K VCS/2600 Assembly programming competition.


I can muster up US$100, so that will be the prize for the best entry. This is just a post flagging my intention to run this competition, I will provide more details about the rules soon!


The competition will start on the 1st October, and finish on midnight 31 October in your timezone.


There is a webpage somewhere that has imaginative fake video game covers for 8 bit games, that is the theme! I will find the link to the page, I think it is on itch.io. So take inspiration from the cartridge label or box from a game, and make a game that reflects that.


The point of this competition is to popularise assembly language! Use this competition as an opportunity to learn it!

#4081530 Question for 1970s-1980s vintage console / computer homebrew developers

Posted by vidak on Sun Jul 29, 2018 6:27 AM

I enjoy the Atari 2600 because it is very well engineered. The 6502 processor has a wonderful instruction set, and the TIA is an ingenious solution to drawing video graphics with such a small number of transistors. I have been developing video games in the Unity game engine, which uses a high level language called C#, and it is fun to do incredible things with so few lines of code, but it honestly doesn't feel special. I spend a lot of time on the Atari because it has such a big community. I know Unity also has a community, but it's much more corporate. For me, the Atari 2600 /is/ a challenge, but I don't develop almost exclusively on it because it is such a challenge. For instance I am very annoyed that the system only has 128 bytes of RAM, and there are only 76 CPU clock cycles per scanline. I am also very frustrated that the maximum size your cartridge banks can be are 4 kilobytes. If the 2600 had a faster processor, more RAM, and a bigger address space, I honestly don't think I'd ever leave it. The fact it only has 2 hardware sprites is not an issue for me. I find modern consoles and platforms to be very unparsimonious and inefficient with their resources and architectures. Like Hennessey and Patterson (?) of the RISC-V processor foundation say, right now, because Moore's Law doesn't apply anymore, we have to return to a lot of the design priorities that were manifested in computer systems like the Atari 2600 which are Domain Specific - they have a very specialised architecture which does a small number of things /very well/. I suppose that's the reason why the 2600 is so special to me. It only tries to do one thing very well, and it really succeeds at that. The more I work on the 2600, the more beautiful I think it is. It's so easy to use and its architecture helps you achieve what you want to do. I feel like the dawn of the era of the minicomputer, say, the mid-1960s, up until say... the early 1980s is my favourite era of engineering, both at the mainframe/minicomputer and microcomputer level. There are so many beautiful processors and computer architectures that were realised during that time. The DEC minicomputers like the PDP-8 and PDP-11, the Commodore VIC-20 and Commodore 64, the Atari 2600, and the Z80 processor, as well as the Motorola 680X series of microprocessors were all such beautiful beautiful inventions. I look at processors today and they're just churned out for making money instead of being carefully and beautifully engineered. I also like the education and 'hope' for computers that characterise the culture of the mid-60s to early-80s. You had to prosecute an /argument/ for the introduction of computers into everyday life, and it wasn't always taken for granted (why get the newest phone? Honestly: why?). Entire documentaries and TV series were invented for explaining the purpose and need for computers, and a lot of this culture was reflected in the applications towards which computers were put, like the Atari 2600. We have none of that now. I feel very passionately about the Atari 2600, but I still haven't really discovered the /essence/ of that passion, so I'm still working away at my stupid game, and maybe the next game, until I really try and grasp the core of what is driving me.

#4081453 "Sierra Maestra", an Early WIP

Posted by vidak on Sat Jul 28, 2018 11:17 PM



I put a couple hours in today.


Today I:

  • Changed the random number generation to 24 bits
  • Linked the random number generator to the environmental graphics indexes (generator creates FOUR 6-bit numbers which are stored in memory as indexes)
  • Linked the indexes to the environmental graphics pointers (i.e. a 6-bit index will randomly select one graphical shape out of 64)
  • Created the pointer indexes for the environmental graphics (created a table of 64 pointers)
  • Created all the debugging symbols (Numbers 00 to 63) to use to check to see if the random number generation is working
  • Checked the timing on the random number generation (Seems OK)
  • Created the Overworld Kernel Bank

We are now very close to having a playable demo of the 256x256 overworld you can move around in.


A couple things I have to check are:

  • Which taps should I use for the random generation? (E.g. $B4, etc)
  • Is the Overworld Vertical Blank Bank too big and/or taking too long to execute (in which case I will move code into the Overworld Overscan Bank, which is empty [!!!])
  • Will the subroutine I created which increments map coordinates when you walk off the side of the screen work? (Will it be twitchy?)

I have not compiled and run my code, and I suspect it current DOES NOT work, but I am uploading it in any case.

Attached Files

#4075126 48 pixel timing diagram / formula

Posted by vidak on Fri Jul 20, 2018 7:48 AM

I think my compilation of the stella mailing list might have some information on it...


just Ctrl+F the whole page for "48 pixel" etc

#4073406 Programming ON the 2600: esoteric langauges

Posted by vidak on Wed Jul 18, 2018 8:45 AM

True - I'd like people to understand what they're doing, though.


Batari BASIC really is a great way to get going really quickly, though.


Most programming now is all about doing the most you can in the minimum amount of lines. Assembly is NOTHING like that.

#4073402 Programming ON the 2600: esoteric langauges

Posted by vidak on Wed Jul 18, 2018 8:40 AM

I'm actually thinking of doing some YouTube videos on how to learn 6502 assembly for making 2600 games.


In my experience, I don't think 6502 assembly is that difficult.


Most of the time you're just storing, loading, and branching. It's not that hard.


Anyway some lectures/tutorials would easily help more people grasp the concepts.

#4073398 Programming ON the 2600: esoteric langauges

Posted by vidak on Wed Jul 18, 2018 8:35 AM

Fair enough, dude!!

#4073376 Programming ON the 2600: esoteric langauges

Posted by vidak on Wed Jul 18, 2018 8:11 AM

I think it's possible - the idea just dawned on me, though.


People have already written compilers for brainfuck, and have done it in around 1KB.


I suppose I would just have to reimplement their sourcecode.


I think I would perhaps implement the 7-bit ASCII character set, but that would take up room. Perhaps I could go with a 5-bit character set, and forego lower case characters.


The code for "Hello World" looks like this:

1 +++++ +++               Set Cell #0 to 8
 2 [
 3     >++++               Add 4 to Cell #1; this will always set Cell #1 to 4
 4     [                   as the cell will be cleared by the loop
 5         >++             Add 4*2 to Cell #2
 6         >+++            Add 4*3 to Cell #3
 7         >+++            Add 4*3 to Cell #4
 8         >+              Add 4 to Cell #5
 9         <<<<-           Decrement the loop counter in Cell #1
10     ]                   Loop till Cell #1 is zero
11     >+                  Add 1 to Cell #2
12     >+                  Add 1 to Cell #3
13     >-                  Subtract 1 from Cell #4
14     >>+                 Add 1 to Cell #6
15     [<]                 Move back to the first zero cell you find; this will
16                         be Cell #1 which was cleared by the previous loop
17     <-                  Decrement the loop Counter in Cell #0
18 ]                       Loop till Cell #0 is zero
20 The result of this is:
21 Cell No :   0   1   2   3   4   5   6
22 Contents:   0   0  72 104  88  32   8
23 Pointer :   ^
25 >>.                     Cell #2 has value 72 which is 'H'
26 >---.                   Subtract 3 from Cell #3 to get 101 which is 'e'
27 +++++ ++..+++.          Likewise for 'llo' from Cell #3
28 >>.                     Cell #5 is 32 for the space
29 <-.                     Subtract 1 from Cell #4 for 87 to give a 'W'
30 <.                      Cell #3 was set to 'o' from the end of 'Hello'
31 +++.----- -.----- ---.  Cell #3 for 'rl' and 'd'
32 >>+.                    Add 1 to Cell #5 gives us an exclamation point
33 >++.                    And finally a newline from Cell #6

The same program in minimised form:


The main problem is having enough RAM. Writing brainfuck as an interpreter would take up RAM, and writing a compiler would require the 2600 to /write/ the program somewhere on the cart, and that may be possible with some extra bankswitched SRAM or some sort of non-volatile RAM?

Anyway I just wanted to bring this idea I had up to see if anyone found it interesting.

#4070883 Flexible Kernel Code

Posted by vidak on Sun Jul 15, 2018 5:10 AM

I've done some googling, and it is possible. I also know you can do self modifying code - changing the code in RAM and /then/ executing it.

I think the general idea is to point the program counter to the address locations in RAM.

So you'd need to set RORG to somewhere between the beginning of RAM ($80) and the end of RAM, I think.

#4065311 "Sierra Maestra", an Early WIP

Posted by vidak on Sat Jul 7, 2018 10:28 PM






I am making the world procedurally generated. It is what I really and actually want to do.

#4012489 Nyan Cat Game - Work in Progress

Posted by vidak on Sat Apr 21, 2018 6:43 PM


#4009383 "Sierra Maestra", an Early WIP

Posted by vidak on Tue Apr 17, 2018 1:06 AM

I realised after making the map that I could randomly generate a maze, but I think I will stick with a static world because the bosses and overall game progression would not really change

#4009291 "Sierra Maestra", an Early WIP

Posted by vidak on Mon Apr 16, 2018 8:45 PM



i have designed the overworld. it is 171 screens. i think a 32KB cartridge will have enough space to store all the information for this.


there are bosses and mini bosses. you will have to defeat a boss in order to unlock another area - i imagine to get to the mountain summit, you will have 2 boss areas accessible, and you will have to defeat both in any order in order to get to the final area.


i think i will draw up the code and the lookup table for each screen on another day.

Attached Thumbnails

  • Overworld Map.jpeg