1. more pixel questions

I've poked/mem_copied pixels to #A0000, and it worked perfectly in mode 19.

in 257 and 261, it worked for the top of the screen only

what's the address(addresses?) for the rest of the screen?
how do I access screen addresses past #A0000+#FA00?

TIA,
        isaac

P.S.  I know I could just borrow someone else's graphics library, but
what's the fun in that?  I love to reinvent the wheel.

new topic     » topic index » view message » categorize

2. Re: more pixel questions

>I've poked/mem_copied pixels to #A0000, and it worked perfectly in mode 19.
>
>in 257 and 261, it worked for the top of the screen only
>
>what's the address(addresses?) for the rest of the screen?
>how do I access screen addresses past #A0000+#FA00?

The video memory, is not managed in the same way as the other parts of
memory. Which are thanks to Euphoria (causeway dos extender actually) flat.
We can acces the memory as if it is a long one dimension sequence. But
actually it is not. At least, not for the video memory.

First of all, know, that poking in MCGA (Eu-mode 19) actually splits up the
bytes over a line of 4. So of you poke {1,2,3} it pokes 1, skips three,
pokes 2, skips three, pokes 3. The video card expects this. And will load it
up like that. Why is this done ? Internally the videocard always does things
4-bytes by 4-bytes. It's the size of an fast machine integer, speed is quite
crucial for a video card.

Pete's ModeX- hacks the registers and turns the 4-byte spread off, he can
poke {1,2,3} as expected. The use ? More memore available, because now we
have lost 3/4 of the screen's memory. (320*200=64000 and we have at *least*
for times as much video memory available.)

Pete has also made a svga library, but that's not a complete graphics
library. What it does, it puts pixel's on the screen itself by banking.
Banking is calling an interrupt and telling him we want to acces other parts
of the screen. The SVGA-driver than puts the stuff we poke, not in the 1st
byte, and then the 5th bytes, and so on. Now it could maybe put it in the
2nd byte, the 6th byte and so on. Because the code is not much and quite
clean, you can see the trick there. Like which interrupt and stuff. Just
take a look at Irv's Site. He has quite an archive there. I've told you all
this stuff, not because you need to know why we need to bank, but I think it
comes in hand when you want to speed up your code.

I hope all this info helps.

>P.S.  I know I could just borrow someone else's graphics library, but
>what's the fun in that?  I love to reinvent the wheel.

I know that feeling, sometimes I think, all us programmers, are actually
just a bit of control-freaks! Have fun, graphics coding is fun, really, I
can tell!

Ralf

new topic     » goto parent     » topic index » view message » categorize

3. Re: more pixel questions

>The video memory, is not managed in the same way as the other parts of
>memory. Which are thanks to Euphoria (causeway dos extender actually)
>flat.
>We can acces the memory as if it is a long one dimension sequence. But
>actually it is not. At least, not for the video memory.

>First of all, know, that poking in MCGA (Eu-mode 19) actually splits
>up the bytes over a line of 4. So of you poke {1,2,3} it pokes 1, skips
>three, pokes 2, skips three, pokes 3. The video card expects this. And
will
>load it up like that. Why is this done ? Internally the videocard always
>does things 4-bytes by 4-bytes. It's the size of an fast machine
integer,
>speed is quite crucial for a video card.

First: I thought that Mode 19 was the only flat mode video mode? (All
others are different. That's why Mode 19 is the fastest, as well as why
the double-buffer is 64000 bytes long. (320 * 200) Read this in a C Game
Programming book a while back.)

Second: poke() only sends the lower 8 bytes of the number. (Sorta like
remainder(value, 256)) This is in LIBRARY.DOC.


_____________________________________________________________________
You don't need to buy Internet access to use free Internet e-mail.
Get completely free e-mail from Juno at http://www.juno.com
Or call Juno at (800) 654-JUNO [654-5866]

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu