Jump to content
IGNORED

Is this sort of thing possible, even if in Assembly?


Retrospect

Recommended Posts

I've been toying with the idea of a graphical adventure, and I made this image.

 

Is it at all possible in Assembly Language (obviously not TI Basic) to perhaps have a split bitmap / text screen, I'm sure it's possible with the Commodore C16 and C64, I need to know if this can be done ?

 

post-34058-0-78378200-1360284557_thumb.png post-34058-0-36725800-1360284565_thumb.png

Link to comment
Share on other sites

Yes, it's very possible. The TI Bitmap screen is actually divided into three sections, each 8 rows by 32 columns in size, top to bottom.

 

So, for the bottom section, instead of mapping characters 0-255 to create a bitmap pattern, you can just fill it with ASCII characters and use it like any other text screen for output.

 

That said, full bitmap mode does take 13k of VDP RAM space, and each "bitmap" alone will consume 8k (4k pattern, 4k color) of dataspace. The nasty part would be how to store it on disk in an efficient manner; image files are the easiest, but you could very quickly hit the TI file limit on a disk of 127.

 

A better idea would be a 128 fixed-length binary file which you could then store up multiple images, both color and pattern tables, and then load them into memory incrementally. You'd still have a practical limit of 10 screens or so on a 90k disk, 40 on a 360k disk.

 

Adamantyr

  • Like 1
Link to comment
Share on other sites

Could the TI do graphical interactive adventure stuff like Monkey Island by having sprites or character based stuff moving over a bitmap background? Nothing stopping a large graphical adventure being spanned over multiple DSDD images though?

 

I've often wandered that. I did an experiment on Classic99 , involving Tursi's Convert9918 program. I saved an image as an XB Program, and then inserted a line before any of Tursi's code, basically it was a one line something like ; "1 CALL CHAR(35,"18183CFF7E7E2442")::CALL SPRITE(#1,35,5,10,10)::CALL MOTION(#1,15,15)

 

What happened pleased me somewhat. I still had the bitmapped image displayed, and a sprite was in smooth motion over the top of it.

Obviously, due to me having no knowledge of programming anything other than a fruit machine I completely lost myself when it came to actually controlling the bloody sprite.

Link to comment
Share on other sites

I've often wandered that. I did an experiment on Classic99 , involving Tursi's Convert9918 program. I saved an image as an XB Program, and then inserted a line before any of Tursi's code, basically it was a one line something like ; "1 CALL CHAR(35,"18183CFF7E7E2442")::CALL SPRITE(#1,35,5,10,10)::CALL MOTION(#1,15,15)

 

What happened pleased me somewhat. I still had the bitmapped image displayed, and a sprite was in smooth motion over the top of it.

Obviously, due to me having no knowledge of programming anything other than a fruit machine I completely lost myself when it came to actually controlling the bloody sprite.

 

Aha! We need a mock-up, this could be a new era for TI99 gaming.

Link to comment
Share on other sites

You can have full motion sprites in bitmap... the main reason you don't normally have them is that the ROM routine is hard-coded to check address >0780, which is overwritten with character pattern data.

 

All you have to do is replicate the ROM code in your own routine and use a user-driven interrupt. Bruce Harrison illustrated the concept in one of his Art of Assembly articles, I believe.

 

I didn't mention it above, but you can economize on your bitmap usage by storing screen maps along with character data. That would let you use an identical tile for several places, and save characters to do on-the-spot changes or modifications.

 

Actually, there IS a graphic adventure that used all these techniques; the Return to Pirate Isle cartridge. Mind you, I hated the "I can't see anything" effect... plus the fact that the pirate just appears as a black silhouette. I was really disappointed they didn't spend extra effort to make him look like a real person.

 

Adamantyr

Link to comment
Share on other sites

The Missing Link was recently re-released, as Senior Falcon mentions, check out its thread here. It comes with a full manual, is free now, and allows full bitmap graphics in Extended BASIC, including fonts and loading of TI Artist pictures! For a text adventure, that'd even be fast enough, and yes, it supports sprites including automatic motion.

 

I used the concept of graphics on the top 2/3rds of the bitmap screen, with a "text" section on the bottom third, in my music demo on YouTube here:

- it works well!

 

  • Like 2
Link to comment
Share on other sites

There is another quite interesting thing about the 9938: the horizontal line interrupt (raster line interrupt). You could set the VDP to raise an interrupt when a certain line was drawn on the screen. This has never been used on the Geneve or the 80-column cards to my knowledge, but I heard that MSX2 systems very well exploited that feature.

 

What is interesting about this is that you can switch the graphics mode *while* the image is being drawn. In fact, the VDP creates the screen lines according to its current mode, and that way you could, in principle, switch from e.g. Graphics2 to Text mode when screen line 100 is reached.

 

(I remember this discussion was raised in the MESS forum, when people tried to figure out why the screen display of some MSX2 games was not correct. I think this feature is not properly emulated right now.)

 

Michael

Link to comment
Share on other sites

You can do this on the 9918 too, that is, change the screen mode during the display, but there are no interrupts to help you out. You have to time it -- one trick is to use the sprite collision or 5-on-a-line bits, set up your sprites where you want it to trigger, and poll the VDP status until it's set. (Apparently some MSX-1 demos use this). The accuracy varies, you usually are within a couple of scanlines rather than dead-on, but with a blank area at the transition the user won't see it.

 

Link to comment
Share on other sites

  • 3 weeks later...
  • 10 months later...

I have been making some adjustments to The Missing Link so it is better suited for the type of graphic adventure mentioned by Retrospect. This demo shows a picture being loaded into the top 2/3 of the screen, then text is displayed in the lower 1/3 of the screen in 48 columns. (Yes, that was 48 columns, not 40) The filenames of several pictures are entered and the pictures are displayed in the top 2/3 of the screen. This is all done in XB with assembly subroutines providing the bit mapped support. This should be all the tools that you need to write your own graphic adventure. I can post the modified version of TML if anyone is interested. Note that this updated version has 9 rows of text.

 

gallery_34177_1071_11360.gif

Edited by senior_falcon
  • Like 7
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...