Jump to content
IGNORED

Microvision Homebrew - Barrage 2021


5-11under

Recommended Posts

5 hours ago, derSammler said:

Very nice. I wish the guy who did the Tetris port had shown similar passion to create real carts from it. ?

I think all the games so far used the original microcontroller families, which makes it difficult to make a bunch of them. I'm using an Atmega328(P?), and programming it using the Arduino software (without the Arduino bootstrap which adds delay at start). Less pure from a 1979-1980 point of view, and not able to emulate using existing software, but easier to source parts.

7 minutes ago, jgkspsx said:

Making physical stuff is hard and this is harder than most!

Yes, and usually fun. At least the first one. ;)

We'll know hopefully in a week or two if the shells reproduction is successful.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

18 minutes ago, jgkspsx said:

Making physical stuff is hard and this is harder than most!

Not doubting this. That's why I used the word "passion". ;)

 

12 minutes ago, 5-11under said:

I think all the games so far used the original microcontroller families, which makes it difficult to make a bunch of them. I'm using an Atmega328(P?), and programming it using the Arduino software (without the Arduino bootstrap which adds delay at start).

The Tetris port used a modern microcontroller as well but was later back-ported to the original CPU (mainly so people can use it with emulators).

Edited by derSammler
  • Like 3
Link to comment
Share on other sites

23 hours ago, derSammler said:

The Tetris port used a modern microcontroller as well but was later back-ported to the original CPU (mainly so people can use it with emulators).

Do you have any information on the modern microcontroller version? I only see the "original CPU" version.

  • Like 1
Link to comment
Share on other sites

Ok, I guess my skills in reading Russian weren't that good back then. :D

 

He originally used an i8748, which is still widely available and uses EPROM, so even used chips are easy to reprogram. Not that "modern" I have to admit. He did a backport to the TMS1100, which was the CPU finally used for MV games.

Edited by derSammler
  • Like 1
Link to comment
Share on other sites

1 hour ago, derSammler said:

Ok, I guess my skills in reading Russian weren't that good back then. :D

 

He originally used an i8748, which is still widely available and uses EPROM, so even used chips are easy to reprogram. Not that "modern" I have to admit. He did a backport to the TMS1100, which was the CPU finally used for MV games.

No worries.

  • Like 1
Link to comment
Share on other sites

27 minutes ago, atari2600land said:

Tell me more about this:

 

More interesting stuff (in Russian): https://habr.com/en/post/416865/

Well, it's all there. Translate to English, and read.

Not too difficult to make one or more, but not trivial, either. Need a dedicated board for the game, need to get parts likely from eBay or equivalent, and need to make a programmer for this old chip (it looks like there's several programming options available). Maybe someday I'll investigate further, but first things first... .

 

Only "problem" besides that is it's a keypad-heavy game, which isn't the Microvision's strong point (but to each their own).

  • Like 2
Link to comment
Share on other sites

It's a bit too cold these days to work on making mold boxes and making molds for the shells, so instead, I've been working on a programming template. Barrage was programmed "closer to the metal", that is, outputting one row at a time, as required, just like the classic games. That worked fine for Barrage, but required a lot of effort in setting everything up.

 

This new template has a 16 x 16 background layer, and now I'm adding a sprite layer, or more accurately a rectangle layer, so it's easy to keep track of moving blocks sized from 1x1 up to 8x4. The rectangular sprites can be used as paddles, bullets, etc. I'll also be adding features to the background creation, including line/block/dot drawing/clearing, background on/off, and number/letter drawing (3x5 for the numbers and most of the letters). For any game, the programming is of course very open, so if someone wanted to create shapes that weren't rectangular, that would be do-able, but of course would require more work.

  • Like 2
Link to comment
Share on other sites

Hi @5-11under - Hope you don't mind my inserting myself into this conversation, but I was recently out looking at random antiques and things with my wife and found someone selling unpopulated PCBs that I thought were really cool. In researching them it turned out that they are "sheets" of Microvision cartridge PCBs (see attached pictures). During my research, I found this thread and figured I should contact you to see if you're interested in these. I'm an NES homebrewer and my first thought was that if someone found and offered me a bunch of original NROM or similar Nintendo made cartridge PCBs, I'd be psyched to use them. Anyway, wanted to let you know they're out there if you're interested. Take care.

IMG_0564.JPG

IMG_0563.JPG

  • Thanks 1
Link to comment
Share on other sites

27 minutes ago, Clearvus said:

Hi @5-11under - Hope you don't mind my inserting myself into this conversation, but I was recently out looking at random antiques and things with my wife and found someone selling unpopulated PCBs that I thought were really cool. In researching them it turned out that they are "sheets" of Microvision cartridge PCBs (see attached pictures). During my research, I found this thread and figured I should contact you to see if you're interested in these. I'm an NES homebrewer and my first thought was that if someone found and offered me a bunch of original NROM or similar Nintendo made cartridge PCBs, I'd be psyched to use them. Anyway, wanted to let you know they're out there if you're interested. Take care.

Those are very interesting, but useless from a practical point of view, unless you have original-style chips to put in them.

  • Like 1
Link to comment
Share on other sites

After shoveling snow all morning, I spent the afternoon working on the programming template, which features a background layer and a sprites layer. The sprites are all independent from each other, and they're also independent from the background layer. This is the same as the way sprites and background work on many classic consoles. Example: moving a sprite across the background does not ruin the background.

 

I've written and tested all the current background layer routines, which include printing bitmaps of any size, printing/clearing rectangles (including horizontal/vertical lines) and dots, 3x5 numbers and letters, scrolling in any of 4 direction, and up/down rolling (like scroll, but instead of adding specific data to the trailing row/column, the data on the leading side gets transferred back).

 

I've written the sprites routines, but I haven't tested them yet. You can have as many sprites as you want. These are limited to dots/rectangles at this point, which is probably good enough for most applications. As mentioned, the code is open, so features can be edited or added.

 

There's a few more display features I'd like to consider, such as blinking, and gray scale using fast blinking. For the display as well as for other input/output devices, there's plenty of clean-up to do, and more work to be done on speaker output function(s).

  • Thanks 1
Link to comment
Share on other sites

14 hours ago, 5-11under said:

Those are very interesting, but useless from a practical point of view, unless you have original-style chips to put in them.

Apart from that, you could also just order them from PCBWay in any amounts you need instead of relying on limited old stock. Eagle files are available.

 

Doesn't help you with obtaining the old chips, of course.

Link to comment
Share on other sites

51 minutes ago, derSammler said:

Apart from that, you could also just order them from PCBWay in any amounts you need instead of relying on limited old stock. Eagle files are available.

 

Doesn't help you with obtaining the old chips, of course.

Yep. These are more of a collector's item, for those who collect more than just games.

Link to comment
Share on other sites

I did some more work on the game-making template. I tested the sprite routines, and set up a simple sprite-to-background collision check.

 

Here's a simple proof-of-concept game that has about 30 lines of code including start-up, gameplay, and score at finish. The collisions vs. moving vs. scrolling isn't ordered properly, and the road is calculated very simply, with variety only in left/right position. Nevertheless, it's a playable demo written in less than an hour:

 

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

I guess it's about 50 or so lines of code added to the template.

Yes, I know it's super messy. Don't hurt me:

void setup()  // runs once
{
  int i;
  DEL = 80; // delay for screen
  counter10=0;
  score = 0;
  spriteset(0, 1, 1, 2); //  player sprite 1x2
  spriteloc(0, 7, 13);  // player location (7,13)
  show = 1;  // screen on

  Printletter(C,2,5);  // print the letter C
  Printletter(A,6,5);  // print the letter A
  Printletter(R,10,5);  // print the letter R
  Paint();  // prints everything to the screen

  i=1;
  while(i)
  {
    keycheck();
    if(key) i=0;  // wait for key press
    Paint();
  }

  Rectangleset(0,0,16,16,0);  // clear the whole screen
  Rectangleset(0,0,4,1,1);  // start the road 
  Rectangleset(12,0,4,1,1);

  width = 5;  // width of road
  left = 4;  // left part of road
}

void loop()  // runs continuously
{
  int i;
  int j;
  unsigned int top;  // the top row
  DEL=30;  // delay used in the screen refresh
  counter10=counter10+1; if (counter50>49) counter50=0;  // counter to slow down the game

  if(counter10==0)
  {
    potcheck();  // check the potentiometer, outputs anadiv
    if(anadiv<0) anadiv=0;
    if(anadiv>15) anadiv=15;  // math for the potentiometer to keep in bounds
    spriteloc(0, anadiv, 13);  // locates player based on paddle rotation

    i = random(1, 4);  // between 1 and 3, the way the generator works
    left = left + i -2;  // either move road left, stay same, or move road right (by 1)
    if(left<1) left=1;  // check for too far left
    if((left+width)>15) left=15-width;  // check for too far right

    top=0;  // calculate the new top row, one bit at a time
    for(i=0; i<16; i++)
    {
      if((i<left) || (i>(left+width))) bitSet(top, i);
    }

    scrollD(top);  // scroll down the background, add new top row
    score++;  // increase final score

    if(collisionflag)  // check if there is a collision between sprite and background
    {
      Rectangleset(0,0,16,16,0);  // clear screen
      score=score>>6;  // do some math on the score to decrease it (divide by 64)
      if(score>999) score=999;  // check for over limite
      Printnumb(score/100, 2,5);  // print the 100's
      Printnumb((score-100*(score/100))/10, 6,5);  // print the 10's
      Printnumb(score-100*(score/100)-10*(score/10), 10,5);  // print the 1's
      while(1) { Paint(); }  // keep refreshing screen
    }
  }

  Paint();  // print/refresh the screen
}

 

  • Thanks 2
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...