Jump to content
IGNORED

Fun with tiles: another weekend experiment


cmadruga

Recommended Posts

3 minutes ago, cmadruga said:

Would you say this is acceptable, or should I keep squeezing?

 

That seems pretty fast.

 

If Intellivision supports it, one way to make it *appear* faster would be to hide the drawing and then reveal all at once.

 

On an Atari 8-bit, you could have done that a few ways

- disable the video display, do the drawing, re-enable it (had a bonus of giving you about 30% extra CPU time while blanked!)

- set all colors to be the same (Atari had CLUT/index tables), draw, and then set the colors back to what you wanted

 

In both cases, drawing still happens block by block, but you get the illusion of the result appearing all at once.

 

Not sure if either of those are possible on Intellivision.

 

 

Link to comment
Share on other sites

10 hours ago, Kiwi said:

I was just curious.

I did have to change the foreground bit color from the screen data in ROM to change the building in Mad Bomber.  So I add or subtract the card number to change the color.


if BDrop=1 then 
SCREEN my_screen 

if BGcolor=5 then #AddColor=0 else #AddColor=-4 
'if BGcolor=11 then #AddColor=-4
if BGcolor=6 then #AddColor=$1000-1
if BGcolor=13 then #AddColor=-3
if BGcolor=12 then #AddColor=$1003
for i=0 to 139
'#MCard=0
#MCard=peek ($200+80+i)
#MCard=#MCard+#AddColor
poke $200+80+i,#MCard
next i

From here: http://wiki.intellivision.us/index.php?title=STIC

Register $20 said active display strobe.  I'm not sure if that blanks the screen.  But, I think either @nanochess or @intvnut may have the answer. 

Thanks for your question, it led me to take another look at the code today and improve a few things.

Relative to your code, I'd say I do something similar, but I do not retouch colors after drawing the screen. I do it as I draw each tile. 

Thanks for sharing!

How do you draw your screens? Do you use a tile editor?

Link to comment
Share on other sites

3 minutes ago, bhall408 said:

That seems pretty fast.

 

If Intellivision supports it, one way to make it *appear* faster would be to hide the drawing and then reveal all at once.

 

On an Atari 8-bit, you could have done that a few ways

- disable the video display, do the drawing, re-enable it (had a bonus of giving you about 30% extra CPU time while blanked!)

- set all colors to be the same (Atari had CLUT/index tables), draw, and then set the colors back to what you wanted

 

In both cases, drawing still happens block by block, but you get the illusion of the result appearing all at once.

 

Not sure if either of those are possible on Intellivision.

 

 

Thanks for the feedback, and for the suggestion. I'm not familiar at all with the Atari 8-bit, but that sounds like a neat technique.

 

Well, Artrag and Nanochess presented one option for disabling the screen, but it appears it would shut down music in the process.

 

For this game the music would need to keep playing continuously...

Link to comment
Share on other sites

1 minute ago, cmadruga said:

Thanks for the feedback, and for the suggestion. I'm not familiar at all with the Atari 8-bit, but that sounds like a neat technique.

 

Well, Artrag and Nanochess presented one option for disabling the screen, but it appears it would shut down music in the process.

 

For this game the music would need to keep playing continuously...

If you can write VBLANK routines, *and* those routines will execute when screen drawing is off (may or may not be true for Intellivision), one way to have the music continue would be to have the music logic handled during VBLANK (vertical blank) processing. Sort of an early days hardware multi-threading. I did this for my own Atari games. One nuance is that VBLANK is tied to screen refresh, and so you (optionally) would want to take into account if the system is 60 vs 50 hz (NTSC vs PAL) if you want consistent timing between systems.

 

Link to comment
Share on other sites

I see that MVO R0, $20 happens in _int_vector which is part of intybasic_epilogue.asm. If you make your custom epilogue, it might work?

 

_int_vector:     PROC

    MVI var_VIDEO_ENABLE, R1
    CMPI #1,R1
    BNE @@no_display

    MVO     R0,     $20     ; Activates display

@@no_display:
    BEGIN

 

given that you have defined a variable video_enable in your code. I briefly tested it with a music player which keeps playing the music, but I don't know how well it works in a real life application and you'd need to replace the standard epilogue with this custom one, unless there is a better way to inject code into it.

 

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

Thanks Carlsson, just so I understand how to apply this:

 

1- update the epilogue to show the code above.

2- define a video_enable variable as part of my game

3- set video_enable... 4 questions here:

         - Do I set it to 1 or 0 for enable/disable? It seems so from the ASM code, but just to make extra sure.

         - Would the change kick in immediately?

         - I don't need to do ASM EIS/DIS correct?

         - So basically... I turn video off... do whatever I want with the screen, then... voila, bring it back on and changes will be reflected there?

4- make sure to test it with music playing

 

Please let me know.

 

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

19 hours ago, bhall408 said:

If you can write VBLANK routines, *and* those routines will execute when screen drawing is off (may or may not be true for Intellivision), one way to have the music continue would be to have the music logic handled during VBLANK (vertical blank) processing. Sort of an early days hardware multi-threading. I did this for my own Atari games. One nuance is that VBLANK is tied to screen refresh, and so you (optionally) would want to take into account if the system is 60 vs 50 hz (NTSC vs PAL) if you want consistent timing between systems.

 

Very cool! Let's see if the test described above will do the trick on the Inty.

 

What games have you written for the Atari? Do you have videos?

Link to comment
Share on other sites

On 5/31/2020 at 4:26 PM, nanochess said:

Currently there is no way to disable/enable the screen except using ASM DIS and ASM EIS like ARTRAG says but the side-effect is the background music interrupted.

 

This is because the video interrupt routine always kicks the port to keep the screen enabled.

Once you've included the above patch to the epilogue, put 

DIM VIDEO_ENABLE

in your code: if you reset VIDEO_ENABLE by

VIDEO_ENABLE = 0

the display will go off starting from the next frame until you set 

VIDEO_ENABLE = 1

the video with go active in the next frame

It should have no effect on the music and other code called by ON FRAME GOSUB

No need of ASM DIS and ASM EIS in this way

  • Like 2
Link to comment
Share on other sites

31 minutes ago, artrag said:

Once you've included the above patch to the epilogue, put 

DIM VIDEO_ENABLE

in your code: if you reset VIDEO_ENABLE by

VIDEO_ENABLE = 0

the display will go off starting from the next frame until you set 

VIDEO_ENABLE = 1

the video with go active in the next frame

It should have no effect on the music and other code called by ON FRAME GOSUB

No need of ASM DIS and ASM EIS in this way

Sweet! Thanks for the detailed explanation!

Will post it here once I'm able to test it.

Link to comment
Share on other sites

Notice that you'll spend an extra 25 cycles on every vertical blank. I don't know how much that affects other parts of timing, e.g. how many GRAM characters you have time to redefine but it is good to remember if the hack turns out to be working.

Link to comment
Share on other sites

33 minutes ago, cmadruga said:

Absolute success!!! Thanks!!!

 

Oscar: could we make this the standard epilogue from now on and create an Intybasic command like VIDEO ON/OFF? 

 

 

I've sent you a preview alpha release of IntyBASIC with SCREEN ENABLE / SCREEN DISABLE.

 

Needs testing because I earned some extra cycles so it is not so official yet, but I'll send it via PM to anyone asking for it. :)

 

Edited by nanochess
  • Thanks 1
Link to comment
Share on other sites

On 5/31/2020 at 4:33 PM, cmadruga said:

How do you draw your screens? Do you use a tile editor?

Back then when IntyBASIC was new, I drew the tiles in bitmap and figured out the pattern/color numbers by using the chart up on Intellivision Wiki to make the binary code, and then used the calculator to convert to hex.  So it's only that building screen I did that too. 

Now I do all my tiling in TileStudio and have intycolor process it.

Link to comment
Share on other sites

5 hours ago, carlsson said:

Just for fun, I tried yet another quick SID2MIDI conversion. It doesn't loop properly, and I didn't want it to be too long but it gives an idea.

 

Edit: Updated (further shortened) files, so they at least loop.

 

 

goonies.bas 17.12 kB · 1 download goonies.rom 6.56 kB · 2 downloads

Thank you! How do you do this conversion?

Link to comment
Share on other sites

I use SID2MIDI and choose text output instead of MIDI output. Then I massage the text file in Emacs, by removing all information about frequencies, waveforms, ADSR and filters and in this case also a simle awk script '{ NR = 3 }' to only get every third row of the raw data. I also need to convert all instances of +++ to s, all instances of --- to -, move all the # signs so instead of G#3 it says G3#, inject MUSIC at the beginning of the line and add commas between the columns. It might sound like a lot of work and yes, it takes some effort but compared to other forms of converting or by hand entering all the statements it is much less work. The above song took about one hour from running the SID tool to having the song compiled.

 

(Yeah, 60 minutes to make 50 seconds of music...)

Edited by carlsson
  • Thanks 1
Link to comment
Share on other sites

22 hours ago, cmadruga said:

What games have you written for the Atari? Do you have videos?

I wrote 2 games in 6502, and a few in BASIC. The 6502 ones were Mushrooms and Attack of the Killer Tomatoes.

 

I have printouts of the source which I have been scanning in with the idea to try and recompile them. No binaries. My disks were stolen (with my hardware) at some point in the late 80s.

 

I'd also worked on a sound digitizer (Vigitizer) and a BBS written in C (Plexus). I have the manuals scanned in for those. Seeing if I can get those back in binary form as well. The BBS eventually ended up ported to Atari ST and then MS-DOS. I think I have the source for at least the ST version on floppy (if the floppy can still be read).

 

No videos, but I'm thinking it may be possible that the original binaries turn up at some point. I'm pretty sure they may have been on user group disks (MACE or one of the others that were in Michigan), so that could be a spot to find them.

Link to comment
Share on other sites

2 hours ago, First Spear said:

The game looks so good! I think you have inadvertently created something that could be turned into Bruce Lee. :) 

I haven't really played Bruce Lee that much. I will check it out again.

 

Either way, I can see this game providing a standard approach for future platform games I might work on.

Link to comment
Share on other sites

Of course the interesting point is that Datasoft published the home computer versions of Bruce Lee, The Goonies, Zorro etc, all kind of similar in design. I don't know if those were developed by the same team(s) and how much of the base code they reused but it really looks like they made a niche of games.

 

(And yes, I know this version rather is inspired by Konami's versions for MSX and eventually perhaps mixed with the NES version as mentioned before)

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...