OK...

I really stirred some of you (at last)...

Just some other small information...
(I should have put on the pages as well)

I only made the Frogger to get a bit more into vectrex programming.
I intend to make (some day in the future) a vectrex development
system arround DVE.
There are not many vectrex developers out there, and information
for programming is still not all that well available.

.....

I asked a few times for support in this newsgroup, and most
people said they would help in getting information together.
Sadly the only thing I ever got (besides the stuff I downloaded
from various pages) was the the sound routine of Clay for
digitized sound. Thanks for that, the emulation is now
pretty perfect concerning sound.
(by the way, CleanSweep, Spinball AND PolePosition work
flawlessly now)

.....

I thought in doing my own vectrex program I could figure out best
what would be needed...
(actually I'm thinking about dropping the whole notion of
 compiling from the emulator side, since some batch files really do
 a nice job as well)

And I honestly can say, the emulator is not yet a great help in
programming... :-(
...but perhaps will be some day, I implemented watches and
timing information commands... that's all what changed so far...
(well, I did all debugging and testing with the emulator, since I
have as yet not connected the vectrex to my pc, one could call that
a pretty decent help...)

......

BTW. Timing...
Someone asked if I had a vectrex system by now...
YES I have a vectrex (thanks to a christmas present of my girl... ;-)

I have also a cartridge that has an EPROM socket, but as yet
no EPROM emulator. I ordered one, and as far as I know
it lies somewhere in Frankfurt in a tax office waiting for being
declared 'ready to go' :-(

I have as yet not seen the frogger on a real vectrex, and I will not
release it untill I do (though I'm quite confident that it will work out
fine). Call it a test if emulation is good :-)

.......

John asked about flicker...
Well, that's a problem, the emulator only flickers if I tell it to :-)
So I can let every and no programm flicker.
Generally flicker relates to timing issues, how many screen updates
you can do in a second. Some time ago I asked what would
be an OK value (timing related) for a vectrex program, that would
still be called stable or 'flicker free' or just bearable...

.....

One person really answered!!!

And said somewhere between 25Hz (tv) and 50Hz (cinema)
(did I remember correctly?).
Gnmph, didn't help that much, vectrex related...
What I really ment was, how long stay the vectors on the screen
befor they have to be updated in order to produce a stable image...
(perhaps that even IS the same...)

.....

Anyway... I have (for now) only the information the emulator gives
me. That information is in TICKS.
One tick is 1/1,500,000 second, since the processor is running
at 1.5 MHz.

I have written an emulator timing function which watches
the ROM function WAIT_RECALL, which almost all games
(including frogger) use for timing and synchronizing.
With that function I was able to determine exactly how long
one 'update round' takes.
For now Vectrex frogger in no event uses more than 50,000 ticks.
That should be arround 30Hz, compared to todays SVGA cards
this sounds VERY bad, but with vectrex games this is 'normal'.
When I see it on a real vectrex and it flickers heavily, I might
get it downtuned to arround 40.000, but I would rather avoid it,
since I would have to redesign 'sprites'  to use less vectors,
and redesign levels to use less sprites, but it would be
possible...

Some values I got with the emulator for comparisson:
(all values describe a range... or two)
Minestorm 33,000
Dark Castle 40,000
Berzerk 40,000
Cosmic Chasm 30,000 - 60,000
Blitz 50,000
Fortress of Narzod 50,000 - 60,000
Head's Up 45,000
Hyper Chase 50,000 - 60,000
Patriots 40,000 - 90,000 (destroying all cities ;-))
Polar Rescue (no WAIT_RECALL used)
Spinball (no WAIT_RECALL used)
Pole Position 50,000 - 60,000
RipOff 25,000 - 30,000
Scramble 45,000 - 55,000
Solar Quest 25,000 - 30,000
Star Hawk 35,000 - 45,000
Vector Vaders 70,000 (all Invaders)
Web Wars 55,000 - 65,000

.......

Notice ALL values are in THOUSANDS.
Some time ago there was a discussion going on how programs
could be optimized using this and that better instruction.
They were talking about 100-200 (at MOST) cycles per round.
Squeezing out using inlining technics instead of JSR and
other (trickier than that) stuff.
As I now see it that is absolutely rediculous. While optimization is all
nice, there is NO way it is worth the effort :-)
(Even if it only takes a few minutes (exception to every rule certainly
apply)).
(you should try writting programs for VCS 2600...!!!)
IMHO the only thing worth optimizing is drawing and positioning
of vectors.
While we are at it, allways use the lowest possible scale and
the highest possible vector 'strength'. Since the scaling
value is a timer value, which DIRECTLY influences the time needed
for drawing (and/or positioning).
Changing one scaling value in Frogger will make that above value
from below 50,000 go up as high and over 100,000!!!

-------------
So what do you think should I stop babbling? Or not?

Well this group is not all that active, a longer letter won't hurt you all
that much...
-------------

Concerning the frogger again...
Nice that some of you are interested in obtaining a cartridge.
- but you won't get one...

At least not from me, I have not the resources nor the knowhow
for manufacturing them, perhaps I will make one, and only one
for personal use, so that I have at least one so called 'ultra rare'
cartridge, but I might as well not do it...

Frogger will be PUBLIC DOMAIN!!!
It will be free in every respect.
The source will be available, and if any or all of you guys want to
make money with it or publish it in any way you are welcome.

If anyone wants to make cartridges whether multi or not, produce
overlays or or or... you are all welcome... that's what public
domain is about.
(though I don't think anybody will become a second Bill Gates
because of vectrex frogger (and Hasbro whould probably have a
word with you if you did))...

It would be nice to know what comes from frogger, so
you are free to tell me what anybody wants and does...

But all I do is write the thing and make it available...

.......

Someone asked if it was difficult programming vectrex...
Whooo,
what a question.
All I can say is ... it depends on what you did before! :-)

I certainly didn't find it very difficult, but that doesn't mean anything.
I lived with computers happily the last 20 years or so.
I did write programs before in many languages, from BASIC, C,
C++, LISP, SCHEME, EIFFEL, PASCAL, COBOL, CLIPPER...
to name just a few... and some range of Assemblers from
6502 to 68000 to 80x86...

Frogger (and before vpong) were the first 6809 programs I did.
And for being firsts it was easy going.

I think there are only a few things anyone needs to do a decent
vectrex programm:

1. an assembler
(http://www.falstaff.demon.co.uk/cross.html a really nice
makro cross-assembler...)

2. emulator or vectrex system hooked to pc

3. The GREAT GREAT dissassembled rom listings, either Fred's or
 Bruce's (I used Bruce's, many many thanks for that work man...)

4. and some 6809 documentation (try motorolla, you'll get
 everything you need for free, or just some 6809 refference card...)

(
5. Once you really want to dig deeper into vectrex internals,
 like doing own vector routines, doing own sound routines,
 curved vectors, lightpen or 3d imager stuff or or or, you must
 dig deeper for appropriate documentation, but by then you
 will have the neccessary 'feeling' for digging :-)
 (VIA, Integration Hardware, PSG, in and outgoing ports...)
)

One thing I found curious and NICE was that you don't have to
worry about trash on your screen. If you ever did program a game
or a gui on a day to day computer you sooner or later have to
keep track where the last pixels were set in order to clean up the
screen. Not so with vectrex... the next round the whole screen is
clean again... a new and nice programming experience :-)


Now... all of you tired reading yet?

so I'll leave you to your own thoughts again...

Bye Chris


########


Re....

>I think the emulator is great for what it does! Namely, allow you to test 
>code without using an actual Vectrex. The only things I would change with 
>respect to the emulator would be to make it mimic a Vectrex "bugs" more 
>closely.. ie: Flicker, vector drift...

Flicker...
Hard to emulate better the way the emulator is set up now,...
The core of the problem probably is, that the emulator draws
vectors, these vectors are kept in memory as lines.
If you get many lines in a vectrex programm it really slows down
emulation... than you'll have flicker on the emulator side of the
program, not with vectrex. The emulation compares each new
line with lines in memory and only 'refreshes' a timer connected
to each line instead of drawing it new...
What really would be needed to emulate the hardware would be
a vector beam emulation that draws pixels on the position on the
screen the beam is currently on. And to each pixel a timer
should be connected. And further to each pixel also a counter
should be attached, to see if not another vector beam touches that
point and increases it's brighness in it's own update time...
As you can easily see this method would need a VERY FAST
computer... I don't think common computers of 1998 are really
up to it for a large number of pixels... All that (and all the
other emulation) in real time of course...

DRIFT...
Really hard, since that depends on the age, weather 
temperature and and and of the vectrex...
I wouldn't have a clue where to start...

>As far as debugging tools and such go, I don't think given the type of 
>software we're all working on that seriously sophisticated tools are all that
>
>neccessary. And even if they are, I expect they're already out there with 
>existing 6809 cross assembler packages.
>IMHO, the biggest impediment to Vectrex programming right now is the 
>difficulty in running code on an actual Vectrex. I know if I could actually 
>see stuff on my Vectrex, I would have gotten a lot more done in the last 
>several weeks rather than let the whole project slide the way I have...

...tell me about it... I'm still waiting for that stupid eprom emulator...
I haven't coded a single frogger line in a weeks time :-(

>It seems from your list that about 40,000 ticks per screen update is "Safe" 
>while it's possible to push that to about 60,000.
> 
>I think this is key information.
> 
>I would like to know the values for Berzerk with 8/9/10 robots on screen as 
>you can really see the deterioration of flicker in that game...

Berzerk 6 -> 40000
Berzerk 7 -> 44000
Berzerk 8 -> 48000
Berzerk 9 -> 51500
Berzerk 10 -> 54500

...
>If we assume a target of 40,000 ticks per program "cycle" (as above), just 
>how many of those cycles are involved in updating the screen? My guess is at 
>least half, if not more. Which means the programmer actually has maybe 20,000
>ticks to play with.... If the average op-code is 3 or 4 ticks that's 5000 to 
>6666 lines of code. Use some big loops or heavy duty number crunching (real 
>time 3D) and you'll gobble that up pretty quick.
>Given the flicker problems already evident, I think knowing the possible 
>solutions in optimisation is well worth the effort...

(screen update... Frogger probably 4/5 of all cycles)

Well certainly to some extend...
I implemented a divide routine... (for some special effects)...
You can surely waste time while not drawing, I tell you :-)
(I ended up dividing only be ^2 values (LSL))...
I tried from the start to save cycles where I could, but seeing how 
little it was worth in the end in general routines... I ended up
to not care much anymore...

But perhaps I will pick up clays idea with that huge counter field
for each instruction in code and look where it really could mean a
difference... (some day)

>>IMHO the only thing worth optimizing is drawing and positioning
>>of vectors.
> 
>This is an excellent point. While something like move_draw_VL4 is great for 
>general purpose vector drawing, maybe a routine or routines that are 
>optimised to draw a set of vectors at ALWAYS the same scale and intensity 
>would be helpfull since the same values for these attributes tend to be 
>used over and over (and this would eliminate uneeded variables and any 
>calculations based upon these variables). Or perhaps even routines that 
>would only draw a set of 4 vectors at pre-specified scale/intensity. 
>Another that would draw a set of 8 vectors, etc.

Actually what I did... I took some routines from the ROM
wrapped them in a macro and used that macro in places where I
thought it would be most beneficial...
(my fingers are also itching to change some rom routines, but
I'll wait till I get the vectrex system hooked to the computer...
since with vector drawing one never really knows what kind of
timing 'NOPS' are in there...)

>>While we are at it, allways use the lowest possible scale and
> 
>Really? 
> 
>So a vector (0,63) drawn at a scale of $80 is slower than a vector of
>(0,126) drawn at a scale of $40??

Defenitively! Exactly double!!!
Vector scaling factors are TIMER VALUES...

>What about drawing two vectors (0,127) at $40 instead of one vector (0,127)
>at $80? (ie: Just how much faster is and, and would it be worthwhile to draw 
>multiple vectors at smaller scale rather than 1 vector at a larger scale?)

That doesn't work, as mentioned above, $80 is double $40,
so it uses the double time...
But if you draw two small vectors you usually have some minor
overhead...

But that leads directly to the cycle saver discussed above...
A vector with scale factor $80 will take
($80 + c) cycles to be drawn. ('c' overhead constant... I can't remember.. at some stage I calculated it exactly for a vector routine... was something about 30-50 (dec)).

So... If you draw an object consisting of 10 lines
(that is not much if you want to be able to recognize the object as
something)...
than you'll have
($80 + c)*10 cycles
Than lets say you have 10 objects (that to is not much)...
($80+c)*10*10 cycles...
That is about... 15000 cycles... !!!
(and you did not yet position the sprites, that also takes 
 a scaling and an 'invisible' vector drawing...)
Now take a scaling of $10 instead (you can still make pretty big
sprites with that...) you'll have about 5000 cycles.

>If so, I thought the brighter the vector, the slower the "pen" was dragged 
>accross the screen so as to leave a brighter trail. So, a dimmer Vector would
>be drawn faster. Is this not correct?

No, not correct, brightness doesn't relate to any timing, the
vector beam somehow can have different brightnesses...

>Speaking of which, anyone done anything with Timer Interrupts on the Vectrex?
>I'd like to tie my movement (etc) routines to a timer as it's the IMHO
>easiest
>way to avoid "slow-downs". You either hook things up to a timer, or you have 
>to build in delay loops (NOPs) during the "faster" parts of your game (ie: If
>
>levels start with 10 aliens onscreen when you get down to 1 you want to 
>compensate for not having to do everything associated with the missing 9
>aliens (movement calcs, shooting calcs, drawing to screen, etc) by executing 
>the equivalent in looped NOPs so the game doesn't get faster when the CPU has
>less to do (ie: Berzerk).


Yes, that's what the WAIT_RECALL function is for.
You set a timer (or the OS does if you don't) and at the beginning
of each 'loop' you call that function. This resets the vector
system and synchronizes to the timer value you sat.
I think the BIOS value is pretty near 30000 ticks.
It is a 16 bit timer so there is a limit somewhere in the 40000-50000
range.

Some games do not use the Wait_recall function (see last message).
I haven't looked at how they do their synchronizing, but the 
3d imager game 'narrow escape' (thanks to Fred Taft's dissassembly) virtually runs only in timer interrupts...

Bye


Chris



