Jump to content
IGNORED

7800 question


Schmutzpuppe

Recommended Posts

and which isn't too hard as you just have to check the sprite coordinates if they overlapp... ("bounded box method"?). it's common even if you use software sprites on every other machine...

 

it's better that way... think of MARIA possibility of more than 100 sprites.... you would need a lot of collission detection registers which might complicated as well to check bitwise...so...i am sure this way is better... and even c64 has no "real" collision detection between sprites...

 

7800 is a quite "clean" baby... raw power with no OS overhead or other "schnickschnack"... pure power...

Link to comment
Share on other sites

Thanks for the answer.

The 7800 architecture is really uncommon but interesting.

I guess I will take a deeper look into it.

To define and moving objects doesn’t seems to be a problem, until now I didn’t get the point of the indirect mode but only read a few hours so maybe I’ll manage it.

Is there any other documentation beside the well known software guide (which I read)?

 

Matthias

Link to comment
Share on other sites

Ah, one more answer :)

 

and which isn't too hard as you just have to check the sprite coordinates if they overlapp... ("bounded box method"?). it's common even if you use software sprites on every other machine...

[...]

Sure this will work but if there would be such a mechanism why don't use it :)

 

7800 is a quite "clean" baby... raw power with no OS overhead or other "schnickschnack"... pure power...

 

less "schnickschnack" is surely better :)

Link to comment
Share on other sites

mattias,

 

indirect mode is just same as the charmodes on atari 800... antic 4 etc...

 

you have gfx data in rom... tell maria where the data is via charmode register and then the ascii byte defines where maria looks for data...

same as on every 8bit computer having a charmode...

 

so it's mainly used for playfields etc...

Link to comment
Share on other sites

mattias,

 

indirect mode is just same as the charmodes on atari 800... antic 4 etc...

 

you have gfx data in rom... tell maria where the data is via charmode register and then the ascii byte defines where maria looks for data...

same as on every 8bit computer having a charmode...

 

so it's mainly used for playfields etc...

 

Ok, I understood that so far but I don't excactly know how to handle that.

If I have a displaylist like that

 

$00,$60,$94,$12,$10

 

this would mean (if I understand it correctly):

 

get data from $9400

Indirect mode on/Writemode 0

HPOS $10

Palette $1

And (here starts the trouble) width $2

What about that width?

Get first byte in $9400 than $9401 or repeat byte in $9400 2 times?

 

The byte in $9400 holds the lowbyte of charset if I understand it correctly, right?

That would mean if charbase is $90 and $9400 contains $00 the content of $9000 would be displayed.

What about the next line (if we assume that offfset of DLL is >0)?

 

A lot of questions... :)

 

Matthias

Link to comment
Share on other sites

Thanks, I know this links, I downloaded the doc file from atari archive yesterday (good side btw.).

But further documentation/sourcecode would be helpfull.

 

Matthias

 

Well, I think all of the Atari made 7800 docs that are currently available are on one of those two links. But there are a few other people that have written their own findings up. Dan Boris probably has the most well know page. There are a few others as well. Good luck.

 

Mitch

Link to comment
Share on other sites

here is the snippets of code of my scroller:

 


bounce  	.byte	$0f,>DLBlank,<DLBlank  ;buffer for bouncing   

  

               .byte   $07,>DLscroller,<DLscroller	;scroll-text



DLscroller:

               .byte   <scrolltext,$60,>scrolltext,$40,0

   .byte	<scrolltext+32,$60,>scrolltext,$50,128

               .byte   $00,$00

               Align   8



scrolltext  .byte "WELCOME TO MY FIRST ATARI DEMO ON THIS CONSOLE  "

   .byte "WELCOME TO MY FIRST ATARI DEMO ON THIS CONSOLE  "

   .byte "WELCOME TO MY FIRST ATARI DEMO ON THIS CONSOLE  "

   .byte "WELCOME TO MY FIRST ATARI DEMO ON THIS CONSOLE  "



ORG $5000



fontdata:  incbin armfont.raw



       lda     #>fontdata     ;the font data is located at $5000

       sta     CHARBASE         ;





scroll	dec shscrol

 beq	scroller0

 inc	DLscroller+4

 inc DLscroller+9

 rts

scroller0 lda #3

 sta shscrol

 lda #0

 sta DLscroller+4

 lda #128

 sta DLscroller+9

 inc DLscroller

 lda DLscroller

 clc

 adc #32

 sta DLscroller+5

 rts



 

please note that this stuff is copied straitgh out of the intro code... it's just for educational proposes...

 

as you'll see...the font is located at $5000 and i have a DLL entry for the scroll line. this points to a DL with 2 entries as with one DL entry i can max. put 32 bytes on screen. so the next DL entry puts the bytes 32-... on screen... the scroll code looks very similar to atari 800 code... ;)

Link to comment
Share on other sites

Thanks, I know this links, I downloaded the doc file from atari archive yesterday (good side btw.).

But further documentation/sourcecode would be helpfull.

 

Matthias

 

Well, I think all of the Atari made 7800 docs that are currently available are on one of those two links. But there are a few other people that have written their own findings up. Dan Boris probably has the most well know page. There are a few others as well. Good luck.

 

Mitch

 

Unfortunately the link is dead :(

But this forum is also helpfull :)

 

Matthias

Link to comment
Share on other sites

here is the snippets of code of my scroller:

 

[...]

 

please note that this stuff is copied straitgh out of the intro code... it's just for educational proposes...

 

as you'll see...the font is located at $5000 and i have a DLL entry for the scroll line. this points to a DL with 2 entries as with one DL entry i can max. put 32 bytes on screen. so the next DL entry puts the bytes 32-... on screen... the scroll code looks very similar to atari 800 code... ;)

 

Thanks Heaven!

That helps :)

 

Matthias

Link to comment
Share on other sites

schmutzpuppe... the scroll routine is completly wrong... i haven't noticed that with MESS running very slow at home...

 

of course we must move the scroll line to the left and this is done by "DEC DLscroller+4" and not by "INC DLscroller+4" that's why it is flickering like hell... my gut feeling was right...

 

 


scroll   dec shscrol 

     beq   scroller0 

     dec   DLscroller+4 

     dec DLscroller+9 

     rts 

scroller0 lda #3 

     sta shscrol 

     lda #0 

     sta DLscroller+4 

     lda #128 

     sta DLscroller+9 

     inc DLscroller 

     lda DLscroller 

     clc 

     adc #32 

     sta DLscroller+5 

     rts 

Link to comment
Share on other sites

schmutzpuppe... the scroll routine is completly wrong... i haven't noticed that with MESS running very slow at home...

 

of course we must move the scroll line to the left and this is done by "DEC DLscroller+4" and not by "INC DLscroller+4" that's why it is flickering like hell... my gut feeling was right...

 

 

Ok but the general structure was more importent for me.

 

Matthias

Link to comment
Share on other sites

What about that width?

Get first byte in $9400 than $9401 or repeat byte in $9400 2 times?

 

The byte in $9400 holds the lowbyte of charset if I understand it correctly, right?

That would mean if charbase is $90 and $9400 contains $00 the content of $9000 would be displayed.

What about the next line (if we assume that offfset of DLL is >0)?

 

For direct sprite, the address pointer in the display list entry points to the first byte of the last line of the sprite (the bottom left corner). (See HoleyDMA & Atari 7800 for basic info on direct sprites and vertical scrolling.) The width is the number of bytes in the sprite.

 

For indirect sprites, the address pointer in the display list entry points to the first byte in the character/tile string and the width is the number bytes in the character/tile string. The address pointer formed by the CHARBASE register * 256 + the byte value from the character/tile string is then used the same way as the address pointer in the direct sprite case.

Link to comment
Share on other sites

Thanks again.

Meanwhile I understood how the graphics is organised (thanks to heaven for the sourcecode it was really helpfull).

The handling is very unusual if you are used to program on atari xl (or c64 or whatever ;))

Maybe that's the reason why there are nearly no homebrews available?

 

Matthias

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