braner@batcomputer.tn.cornell.edu (braner) (04/20/88)
[] Two problems with the suggestion for "hardware scrolling": (1) The ST's video pointer must be on a 512-byte boundary, NOT 256. Thus, incrementing it by $500 (1280) (to scroll by one text line) is NOT feasible. (I tried it: the screen goes crazy!) One could scroll TWO text lines at a time, though. (2) This solution only applies to scrolling the entire screen, while Tempus, Laser C, etc fast-scroll arbitrary WINDOWS. Rather impressive. What I do in MORE.TTP for fast scrolling is: no scrolling. I clear the screen before writing the next one. That is a lot faster since, again, 32000 bytes need to be manipulated (cleared, in this case) only once per 25 lines. It is also faster in another sense: The user can glance at the top lines while the bottom ones are being printed. In MORE (and GNOME too!), if you see that you want to scroll further, you press the appropriate key and the printing of the current screen is aborted immediately, the screen is cleared, and the next screen is printed. - Moshe Braner
neil@cs.hw.ac.uk (Neil Forsyth) (04/22/88)
In article <4484@batcomputer.tn.cornell.edu> braner@tcgould.tn.cornell.edu (braner) writes: >(1) The ST's video pointer must be on a 512-byte boundary, NOT 256. >Thus, incrementing it by $500 (1280) (to scroll by one text line) >is NOT feasible. (I tried it: the screen goes crazy!) One could >scroll TWO text lines at a time, though. No. It can go on a 256 byte boundary. I tried, and suceeded long ago for some smooth scrolling I did and it worked just fine for me. The screen just looks crazy because 256 bytes doesn't use an integer number of scanlines. (1.6 in colour modes) >(2) This solution only applies to scrolling the entire screen, >while Tempus, Laser C, etc fast-scroll arbitrary WINDOWS. Rather >impressive. Yup! I have not seen Tempus but my guess is they use "movem.l" all over the place and possibly force the windows to lie on 8 or 16 pixel boundaries so that there is no half characters to slow the thing down. It is often the case that a little machine (not OS) dependance goes a long way. ------------------------------------------------------------------------------- "I think all right thinking people in this country are sick and tired of being told that ordinary decent people are fed up in this country with being sick and tired. I'm certainly not and I'm sick and tired of being told that I am!" - Monty Python Neil Forsyth JANET: neil@uk.ac.hw.cs Dept. of Computer Science ARPA: neil@cs.hw.ac.uk Heriot-Watt University UUCP: ..!ukc!cs.hw.ac.uk!neil Edinburgh Scotland -------------------------------------------------------------------------------
unpowell@csvax.liv.ac.uk (04/22/88)
In article <4484@batcomputer.tn.cornell.edu>, braner@batcomputer.tn.cornell.edu (braner) writes: > [] > > Two problems with the suggestion for "hardware scrolling": > > (1) The ST's video pointer must be on a 512-byte boundary, NOT 256. > Thus, incrementing it by $500 (1280) (to scroll by one text line) > is NOT feasible. The video pointer goes on a 256 byte boundary. You must have a pretty weird ST there. I've had the hardware scrolling working fine. The screen memory location is held in addresses $ff8201 (high byte) and $ff8203 (mid byte). The low byte is always taken as 0 by the ST. Thus, as you can see, this allows the screen to be put on 256 byte boundaries. > (I tried it: the screen goes crazy!) Maybe it's just you thats crazy? Mark Powell ******************************************************************************** "...I hate the white JANET unpowell@uk.ac.liv.csvax man, and the man UUCP {backbone}!mcvax!ukc!mupsy!liv-cs!unpowell who turned you all ARPA unpowell%csvax.liv.ac.uk@nss.cs.ucl.ac.uk loose..." R. Harper ********************************************************************************
poole@forty2.UUCP (Simon Poole) (04/27/88)
My two cents: - Screen refresh rate is 50/60/70 Hz, even if you switch screens faster, nobody actually sees your work of art, so you can just as well scroll 2-3 lines at once in software and synchronize it with the VBI and get the same effect. - Doesn't work in 50 line mode on monochrome screens. - As soon as you start having portions of the screen which should stay static, your performance win gets smaller and smaller (in uEmacs or in a VT100 Emulator this would lead to added complexity that's just not worth the trouble). - While hardware scrolling on the ST might be great to show off to your friends: "Hey look, it scrolls so fast that you can't read the text anymore!" it's not realy useful, typically 40 to 50 lines/second give a pleasing (and half legible) effect (Tempus does ~46 lines/second on normal text with full size window). -- ---------------------------------------------------------------------------- UUCP: ...mcvax!cernvax!forty2!poole Simon Poole BITNET: K538915@CZHRZU1A ----------------------------------------------------------------------------
magore@watdcsu.waterloo.edu (Mike Gore, Institute Computer Research - ICR) (04/28/88)
My 2 cents to do 'hardware' scrolling would be to do it partly in software and hardware. If we were to use the horizontal interrupt we could maintain a linked list of scan lines - or even a group of scan lines. This could be run as a interrupt driven display process that would then be a set up as a display list of sorts. In order to scroll the entry link for the beginning of the display would only need to be changed. If a group of scan lines were used to make up a single character line interrupt Overhead could be reduced and character I/O would be slightly easier. The disadvantage to this method would be the waisted space at the end of each line [ required to fall on 256 byte offsets ] and interrupt overhead. Comments ??? # Mike Gore # Institute for Computer Research. ( watmath!mgvax!root - at home ) # These ideas/concepts do not imply views held by the University of Waterloo.
poole@forty2.UUCP (Simon Poole) (04/29/88)
In article <4650@watdcsu.waterloo.edu> magore@watdcsu.waterloo.edu (Mike Gore) writes >My 2 cents to do 'hardware' scrolling would be to do it partly >in software and hardware. If we were to use the horizontal interrupt >we could maintain a linked list of scan lines - or even a group of >scan lines. This could be run as a interrupt driven display process that >would then be a set up as a display list of sorts. In order to scroll the >entry link for the beginning of the display would only need to be changed. If >a group of scan lines were used to make up a single character line interrupt >Overhead could be reduced and character I/O would be slightly easier. The >disadvantage to this method would be the waisted space at the end of each line >[ required to fall on 256 byte offsets ] and interrupt overhead. > Comments ??? If I understand you correctly, you want to change the current value of the display position counter on the fly in the HBI, well this is a very neat idea I had about two years ago , if possible it would allow some really nice effects like overlaying screens etc.. So what about writing to Atari and ask them to make the register writable in the next revision of the ST................ (BTW if you where thinking about actually copying the scanlines, a simple calculation shows (for mono screen): 1 Scanline = 80 Bytes = 20 Longs 1 move.l ~ 20 Cycles ~ 2 uS 20 * 2 uS = 40 uS (Time to copy a scanline) 400 * 40 uS = 16'000 uS = 16 mS (Total time used in one vertical scan) 70 * 16 mS = 1120 mS = 1.1 S (Total time used for 70 screen refreshes) and as you know 1.1s > 1s........) -- ---------------------------------------------------------------------------- UUCP: ...mcvax!cernvax!forty2!poole Simon Poole BITNET: K538915@CZHRZU1A ----------------------------------------------------------------------------
unpowell@csvax.liv.ac.uk (05/03/88)
In article <237@forty2.UUCP>, poole@forty2.UUCP (Simon Poole) writes: > > My two cents: > > - Screen refresh rate is 50/60/70 Hz, even if you switch > screens faster, nobody actually sees your work of art, > so you can just as well scroll 2-3 lines at once in > software and synchronize it with the VBI and get the > same effect. However, the hardware scrolling takes up (alot) less processor time than the software method. This is it's main advantage! I know you can only scroll a 25 line screen with it, but the speed achieved cannot be equaled by any of these "scroll as many times as the user lets you" methods. > - Doesn't work in 50 line mode on monochrome screens. Never said it did! > - As soon as you start having portions of the screen which > should stay static, your performance win gets smaller > and smaller (in uEmacs or in a VT100 Emulator this would > lead to added complexity that's just not worth the > trouble). I agree, your Uniterm wouldn't benefit from this method. > - While hardware scrolling on the ST might be great to > show off to your friends: > "Hey look, it scrolls so fast that you can't read the > text anymore!" > it's not realy useful, typically 40 to 50 lines/second > give a pleasing (and half legible) effect (Tempus does > ~46 lines/second on normal text with full size window). The method wasn't suggested as "the fastest and the only that you need use ever again", it is merely another method. Albeit the fastest! When I say fastest I mean, the method that uses up the least processor time (a factor which is pretty important in a lot of programs); not the method which produces the fastest line movement (which incidentaly, it does also do). A lot of programs which are written for speed, lose a considerable proportion of their speed on the output of data. If they used hardware scrolling they could devote more of the processor time to the job inhand than the actual outputting of results. This is the factor that first prompted me to write a hardware scrolling routine. I was timing a "super fast" (?) prime number generator, out of curiousity. It took 3 seconds to produce it's list of numbers when it was outputting them to the screen and less than one when it didn't do any outputting. Quite a difference, don't you agree? Well okay I'm a bit of a speed freak (like to make the best use of the processor not an amphetamine addict). Mark Powell ******************************************************************************** "...I hate the white JANET unpowell@uk.ac.liv.csvax man, and the man UUCP {backbone}!mcvax!ukc!mupsy!liv-cs!unpowell who turned you all ARPA unpowell%csvax.liv.ac.uk@nss.cs.ucl.ac.uk loose..." R. Harper ********************************************************************************
darin_wayrynen@pedro.UUCP (Darin Wayrynen) (05/09/88)
<1794@brahma.cs.hw.ac.uk> The fast screen text IO used in Tempus, Laser C, and the PD file lister called ASL all use the same basic technique for displaying text. They move the font information to the screen themselves using move.b (a1),(a2) instructions ( different registers of course, and a bit different semantics), and clear the screen using move.l's. If anyone is interested in Laser C source code and/or demos of screen IO faster than Tempus please contact me at my bbs: Think Tank BBS (602) 435-9645 between the hours of 9pm to 9am. Demos will be gladly given away, and source code will have to be discussed. Anyone who wanted to spend the time to write the routines to do it, could. I just don't want to release all of it and get nothing for my time. features... assembly/C mismash tweaked beyond belief... multiple (as many as you want) dega's 8 bit fonts on the same screen, changeable on the fly. Set up for TOS programs with variable number of lines saved at top of screen for a non-scrolling region. Can be used in GEM windows, but must do your own clipping of text before printing it. Speed of 33k buad (3,300 characters/second) with scrolling, and 134K baud (113,400 characters/second) without scrolling. Full screen of text in about 1/7th of a second. Darin