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