Jump to content
IGNORED

F18A programming, info, and resources


matthew180

Recommended Posts

  • 3 weeks later...

Wow, that is quite a nice video! Thank you for the review and kind words, it is much appreciated!

 

That´s a pretty wild project you did there with the F18A. People do all kind of crazy stuff as a hobby, I for example built once a huge remote controlled robot and put it in an old cowshed just for fun, but you are the first guy I ever heard of that rebuilt and improved an old video processor. That´s just insane in a positive way. ;-)

And really useful for people like me that still play around with old home computers.

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

Hi Matthew,

 

I'm working on a demo that uses the scroll limit registers and I need some help. The F18A is set up for 4 page scrolling (horizontally and vertically, R30 = >7F). The right limit for scrolling is set to 192 (R53 = >C0) to allow the first 24 columns to scroll and to fix the last 8 columns. Now, if I set the horizontal scroll offset to 8 (R27 = 8), the content of screen columns 1-23 (1-based) is taken from page 1 while the content of column 24 is taken from page 2, right? Then I change the horizontal page to 2. Is it still working the same way, i.e. columns 1-23 are taken from page 2 while the content of column 24 is taken from page 1? Or does it go through all 32 columns of page 2 before it wraps to page 1? Does the bit (HBSIZE = horz banner size) play a role in this?

 

Thanks,

Rasmus

Link to comment
Share on other sites

Hi Matthew,

 

I'm working on a demo that uses the scroll limit registers and I need some help. The F18A is set up for 4 page scrolling (horizontally and vertically, R30 = >7F). The right limit for scrolling is set to 192 (R53 = >C0) to allow the first 24 columns to scroll and to fix the last 8 columns. Now, if I set the horizontal scroll offset to 8 (R27 = 8), the content of screen columns 1-23 (1-based) is taken from page 1 while the content of column 24 is taken from page 2, right? Then I change the horizontal page to 2. Is it still working the same way, i.e. columns 1-23 are taken from page 2 while the content of column 24 is taken from page 1? Or does it go through all 32 columns of page 2 before it wraps to page 1? Does the bit (HBSIZE = horz banner size) play a role in this?

 

Thanks,

Rasmus

 

There's something about the scroll limits registers that I don't understand. These are my observations with the setup described above:

 

 

Page 1 (note: height scaled down by a factor 2):
MMMMMMMMMMMMMMMMMMMMMMMM+------+
MMMMMMMMMMMMMMMMMMMMMMMM|      |
MMMM                    |      |
MMMM                    |      |
MMMM                    |non   |
MMMM                    |scrol-|
MMMM                    |ling  |
MMMM                    |      |
MMMM                    |      |
MMMM                    |      |
MMMMMMMMMMMMMMMMMMMMMMMM|      |
MMMMMMMMMMMMMMMMMMMMMMMM+------+
................................
............256 bytes...........
.............unused.............
................................
 
Page 2:
MMMMMMMM    MMMMMMMMMMMMMMMMMMMM
MMMMMMMM    MMMMMMMMMMMMMMMMMMMM
    MMMM    MMMM            MMMM
    MMMM    MMMM            MMMM
    MMMM    MMMMMMMMMMMMMMMMMMMM
    MMMM    MMMMMMMMMMMMMMMMMMMM
    MMMM    MMMM            MMMM
    MMMM    MMMM            MMMM
    MMMM    MMMM            MMMM
    MMMM    MMMM            MMMM
MMMMMMMM    MMMMMMMMMMMMMMMMMMMM
MMMMMMMM    MMMMMMMMMMMMMMMMMMMM
................................
............256 bytes...........
.............unused.............
................................
 
Set horizontal scroll offset to 64 (8 characters).
 
Expected screen:
MMMMMMMMMMMMMMMMMMMMMMMM+------+
MMMMMMMMMMMMMMMMMMMMMMMM|      |
                    MMMM|      |
                    MMMM|      |
                    MMMM|non   |
                    MMMM|scrol-|
                    MMMM|ling  |
                    MMMM|      |
                    MMMM|      |
                    MMMM|      |
MMMMMMMMMMMMMMMMMMMMMMMM|      |
MMMMMMMMMMMMMMMMMMMMMMMM+------+
 
Actual screen:
MMMMMMMMMMMMMMMM+------++------+
MMMMMMMMMMMMMMMM|      ||      |
                |      ||      |
                |      ||      |
                |      ||non   |
                |      ||scrol-|
                |      ||ling  |
                |      ||      |
                |      ||      |
                |      ||      |
MMMMMMMMMMMMMMMM|      ||      |
MMMMMMMMMMMMMMMM+------++------+
 
I.e. instead of moving to page 2 after displaying 16 columns of page 1 it displayes the characters from the non-scrolling region.
Link to comment
Share on other sites

Scrolling in general was not well thought out, and the scroll borders were added because they were easy (at least the vertical ones were, but that changed for the horizontal limits...) I was not in the middle of writing a game, so I was not sure what would be good features to have or how they would work.

 

The scroll borders do not work how you would like them to, sorry. :-(

 

Talking about horizontal only here (vertical works the same way, only it is based on lines rather than tile pixels):

 

There are two horizontal counters that determine what pixels are displayed for tiles. One counter always starts at zero and is the counter used for "normal" display. The other counter is offset by the horizontal scroll register. The counters are used to address the name table to pick up patterns, as well as pixel offsets withing the patterns. These are 9-bit counters and the MSB is affected by the "page size" register. If the horizontal page size is 0 (1 page), then the 9th bit is never set to '1' and patterns wrap in the same name table, otherwise the 9th bit is set and addressing extends into the next name table.

 

During horizontal line rasterization, if the current X pixel (0 to 255) is less than the left-scroll-border, then the "normal" counter is used to address the name table and pixel offsets. If the current X pixel is greater than the left-scroll-border then the "offset" counter is used. Same for the right border. This is also how the "fixed table" works, i.e. is simply designates which counter is used, for a given X screen location, to address the name table.

 

So in your example, if the horizontal scroll is at 8, the first column in the non-scrolling area to the right would show up in your window, i.e. tiles from the non-scrolling area do show up.

 

To have a "border" around a screen with a scrolling region in the window area, you could set up the "static" page, i.e. the stuff you want in the border area on name table 1 (or name table 0 depending on how you are counting), and put the scrolling content on name table 2. You can set the Horizontal Start Page (VR29) to '1', which should only affect the scrolling content, and use the scroll register to scroll around name table 2. I'll have to confirm the functionality of VR29 though, that is works how I just described. But I'm pretty sure all "non scrolling" content is always taken from name table 1 no matter the page-start bits or page-size settings.

 

The horizontal banner is just a modification of the top-vertical scroll register. Let me check a few things and I'll provide more info.

Link to comment
Share on other sites

Thanks, so I basically have to avoid scrolling around in the non-scrolling region, e.g. I can scroll in page 2 between 0 and 192 pixels, and at the extreme it will only scroll 128 pixels into page 0.

 

But for for vertical scrolling it looks more difficult. Again with the 8 column fixed area to the right, when I start scrolling down into page 3 it looks like it's just overwriting my fixed area with page 3 content. E.g. if I scroll down 8 pixels all of the bottom row will come from page 3. I can't figure out how to avoid that except moving the fixed region to the top when I scroll vertically!

Link to comment
Share on other sites

  • 4 weeks later...

Hi Matthew,

I have a quick question, basically because I don't have time to look it up (I have to leave in 10 minutes) and I want to ask the question before I forget to ask it...

 

I think I remember reading somewhere that the F18A has some RAM that the user can access, is that right? If so, how much was that again? I'm thinking ahead... if anyone ever gets the source code for Telco and can do that 80 column mod for it... why not use that extra space for Telco's additional overlays? I mean this will be an F18A specific modification, so why not?

 

On a slightly different topic, still Telco related... it would be awesome to get this into a cart too (except for the user generated data, that would still have to go to disk).

 

Well, I'm outta here, I'll be back this evening.

Link to comment
Share on other sites

The F18A has 2K of RAM, above the standard 16K of VRAM, that is accessible only by the GPU.

 

Thanks, not exactly big enough for overlays or what I had in mind for a place to stick some deceptive data that might possibly be used to trick Telco into thinking it's a different card.

Link to comment
Share on other sites

Nope, and like VRAM the extra 2K is not directly accessible by the host system. Remember, the F18A lives in the same socket as the original VDP and has the same electrical connections. The F18A can not interact with the host system in any why that the original VDP could not also do.

Link to comment
Share on other sites

  • 4 weeks later...

Did you know the F18A is capable of lowering the TI-99/A sound frequency by setting a single register?

 

On the attached disk there is a small program to do just that. Load it from E/A #3 (GCLOCK) or from XB (GC). The computer resets and you should immediately notice the difference in the beep sound.

 

Now try running something with sound without hard resetting the computer. I have included one of Tursi's music demos (E/A#5: MUSIC) on the disk as an example. The other files on the disk are just some of my old F18A demos.

 

;-) Rasmus

GROMCLOCK.dsk

source.zip

  • Like 1
Link to comment
Share on other sites

Tonight I decided I would give the update a try. I am also using the CF7+. At first it would not run, E/A kept telling me there were unresolved references. I removed power from everything and after a few tries it would run but just reset the computer. With a little trickery I managed to get the F18A screen to come up (is there a key press to do this?) and it turns out I already have v1.5 firmware installed.

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