[comp.sys.ti.explorer] various low-level grunging about

jwz@teak.berkeley.edu (Jamie Zawinski) (12/10/89)

Is there any way to do real double-buffering on the Explorer?

I could draw on an array and then blit it to the window, but without a
hardware blitter, this is a real lose.  Screen-arrays are displaced to a 
physical address so that writing into a screen-array writes to NuBus, where 
I assume the display hardware loops for each scanline.  What I want is to
change the address from which the display hardware reads (hopefully in synch
with vertical blanking).  Any chance?  Any chance at all..?


Ok, now try not to gag, but...  I want to walk through paged-in memory.  
So I want to do something like

	(dotimes (page-frame-number (1- (pages-of-physical-memory)))
	  (without-interrupts
	    (let* ((vpn (%virtual-page-number page-frame-number)))
	      ( ...iterate over region-ids on this page...
	        (map-objects-in-region ... )))))

How do I find out what regions are in a page?  I realize this is a horribly
evil thing to want to do, but I'm playing with this extremely unportable but
quite entertaining graphics hack which relies on pulling random strings out of
memory.  I'd rather pick them out of paged-in memory than all of vmem, because
picking a random area and then a random region in it (the way it does it now) 
causes it to thrash rather heroically.

(I'm also being confounded by the fact that map-objects sometimes gets an
error, because GC occasionally leaves cdr-error's before the free-pointer.
And more recently I've discovered that %structure-size-safe can illop even
when called only on things returned by %find-structure-header-safe.  Not
an error, mind you, which I'm prepared to ignore; it goes belly up.)

"What good's a program that can't modify itself?"

		#.Jamie