Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!sdd.hp.com!spool.mu.edu!news.cs.indiana.edu!mips!dimacs.rutgers.edu!rutgers!cmcl2!sbcs!libserv1.ic.sunysb.edu!jallen From: jallen@libserv1.ic.sunysb.edu (Joseph Allen) Newsgroups: comp.arch Subject: Re: Dynamic Display Architecture Message-ID: <1991Apr17.051746.15592@sbcs.sunysb.edu> Date: 17 Apr 91 05:17:46 GMT Article-I.D.: sbcs.1991Apr17.051746.15592 References: <1991Apr15.200955.3438@waikato.ac.nz> <3340@crdos1.crd.ge.COM> <20670@cbmvax.commodore.com> Sender: usenet@sbcs.sunysb.edu (Usenet poster) Organization: State University of New York at Stony Brook Lines: 72 In article <20670@cbmvax.commodore.com> jesup@cbmvax.commodore.com (Randell Jesup) writes: >In article <3340@crdos1.crd.ge.COM> davidsen@crdos1.crd.ge.com (bill davidsen) writes: >> This sounds like the Intel video controller, part number forgotten. >> I believe the ability to have a list of frame buffers, with the size >>and starting pixel of each, was one of the features > I think that was a "hardware windows" chip - a fixed number of hardware >windows, each with their own display memory ptrs, modes, color tables, etc. >The problem with this approach is "what happens when I need N+1 windows?" >Another thing the copper get you is an arbitrary number of virtual screens >than can be slid over each other, flipped between, etc, all very fast. Then >there are tricks you can play with a copper like scrolling a screen without >moving any bits (Amiga Unix terminal screens use this trick). I had an idea for a hardware windowing circuit once which was very simple and which would eliminate most of the problems windows have today. All you do is break up the screen into small (maybe character sized) blocks. Then for each block you have a pointer to where in memory the actual data is. It's really as simple as normal character refresh memory, but with no font chip and with wider (32-bits instead of 8) refresh memory. Then: Moving windows is easy, just move pointers around. Since you only have (say) 4096 pointers instead of an entire video screen to move it's very fast. Processes can simply write to their "local" screens instead of having to go through software to calculate the window addresses. If you have a machine in which the main memory is also the video memory, then each process can appear to have it's own video memory. Higher-level video chips could be used on the "local" screens directly instead of having to know about windows. When a window overlaps another, pointers are simply not made to the hidden parts- and the program in the window doesn't have to know that it has been overlapped. The only real disadvantage is that the window sizes are quantized on the block sizes instead of on pixels. I feel this is a very small price to pay compared to having to calculate window overlaps everytime you write to the screen or any of the other perversions done in current window technology. So.. has anyone used/seen/proposed something like this? Why are all modern screens simple flat Mac-like clones (I suppose portability is one issue)? > Of course, the current Amiga Copper is old technology (released in >1985). Given more and faster silicon (the original custom chips are in 3u >NMOS) there are many enhancements and additions one would make to them. >Some are quite obvious, like bulk color register loads. Some are more >esoteric. As to what enhancements are or will be made, I'm afraid I can't >talk about that subject. Aw... >Randell Jesup, Keeper of AmigaDos, Commodore Engineering. Ah-Ha! So now we see who's responsible for AmigaDOS not being a UNIX port/clone as it should have been... (whoever made ':' mean "start the path in root" for AmigaDOS path strings should be shot along with the person who made the shell wildcard '#*' (or whatever) and not just '*' along with whoever decided to copy the MS-DOS device: convention etc., etc., etc.. :-) (well at least it's better than MAC-OS) -- #define h 23 /* Height */ /* jallen@ic.sunysb.edu (129.49.12.74) */ #define w 79 /* Width */ /* Amazing */ int i,r,b[]={-w,w,1,-1},d,a[w*h];m(p){a[p]=2;while(d=(p>2*w?!a[p-w-w]?1:0:0)|( p