bobp@amiga.UUCP (Robert S. Pariseau) (11/04/85)
The following program may be used to experiment with the appearance of your Amiga text and graphics when interlace is turned on. For non- interlaced "screens", the effect will be to line-double each raster line. The visual result is that the black "gaps" between raster lines are dramatically reduced (the pixels appear to have become somewhat taller). For text, this yields a "fuller" character that many people find more pleasing. Because interlace is turned on, many people will notice "flicker" in the image. The physiology of flicker perception is pretty well understood. The eye's ability to see flicker increases as the overall luminence (display plus room light) goes up and as the contrast between adjacent horizontal lines goes up. Flicker can be dramatically reduced -- even to the point that you may not see it at all -- by adjusting the color, contrast, and brightness of your display. Many folks have turned up the contrast and brightness controls of their display to get a more striking effect with the Amiga graphics. I would suggest you start out your experiment by resetting those controls to their center position. I have found that I get a pleasing image by adjusting the Workbench colors in Preferences such that the "white" color is a light grey (4-6 clicks in each of R, G, and B to the left of the indicator triangle) and the "blue" color is somewhat darker than default (2 clicks to the left of G and B). I also reduce the "orange" for balance. As with any display, you may find it better to use incandescent room lighting. Flourescent lights also flicker and can "beat" with the display giving your eyes a real workout. If you like the results, I'd suggest you stick a SetLace command in your startup script (s/startup-sequence) just prior to the LoadWB command. -------------------- Program Notes: The program will compile cleanly using the standard V1.0 Lattice C release stuff. The Make script in the C exmples directory will do all the work. The rather large list of include files is necessary to keep Lattice C from warning about undefined structures. The warnings refer to structures referenced as the target of pointers in OTHER structure definitions. We're working on getting the C to be not quite so picky, so that you can limit your includes to those definitions you actually use in expressions. These warnings can be safely ignored, but they don't look clean. The program is designed to be run from the CLI only. The command SetLace will turn on the forced interlace mode. The command SetLace off will turn it off again. Note that forcing interlace does not change either the amount of memory or bus bandwidth used by text or graphics programs. The same bitmap is just repeated one half raster line down by the hardware in the odd frame. --------------------- Program Source Follows: /************************************************************************ * SetLace -- Program to force the Amiga into interlaced display * regardless of the interlace status of the currently * active Screens (ViewPorts). Run from the CLI (only). * * 1>SetLace -- Set forced Interlace mode * 1>SetLace off -- Clear forced Interlace mode * * Bob Pariseau -- November 2, 1985 * ************************************************************************/ #include <exec/types.h> #include <exec/tasks.h> #include <exec/libraries.h> #include <graphics/copper.h> #include <graphics/display.h> #include <graphics/gfxbase.h> #include <graphics/text.h> #include <graphics/view.h> #include <hardware/blit.h> #include <intuition/intuitionbase.h> struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; main(argc, argv) int argc; char *argv[]; { BOOL TurnItOn; TurnItOn = TRUE; if (argc > 1) if (!strcmp(argv[1], "off")) TurnItOn = FALSE; GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0); if (GfxBase == NULL) exit(1000); IntuitionBase = (struct IntuitionBase*) OpenLibrary("intuition.library", 0); if (IntuitionBase == NULL) { CloseLibrary(GfxBase); exit(2000); } /* The system_bplcon0 value is ORed into all copper instructions that * change bplcon0 (one of the hardware bitplane control registers) * whenever copper lists are formed by the graphics library copper * list management routines. This value provides a control context * for system display that overrides the normal control values usually * managed by Intuition. In particular, Intuition manages the interlace * control in the View structure, so we have to do our control here * to give it some permanence. */ if (TurnItOn) GfxBase->system_bplcon0 |= INTERLACE; else GfxBase->system_bplcon0 &= !INTERLACE; /* Now we have to get all the copper lists rebuilt. The easiest way * to do this is to have Intuition do it for us. The correct way to * do THAT is to call RemakeDisplay() which is (sigh) broken in V1.0. * Therefore, we get by with the following hack. */ myRemakeDisplay(IntuitionBase); /*??? RemakeDisplay();*/ /* Be good, and clean up. */ CloseLibrary(GfxBase); CloseLibrary(IntuitionBase); } myRemakeDisplay(IntuitionBase) struct /* Cheat and use private knowledge */ { /* of the initial portion of the */ struct Library LibNode; /* Intuition Base structure. */ struct View ViewLord; } *IntuitionBase; { struct View *View; struct ViewPort *ViewPort; Forbid(); /* The V1.0 Intuition internal */ /* locking protocol uses Forbid() */ /* and Permit(). Under V1.1, this */ /* code could be unreliable if */ /* another task was simultaneously */ /* manipulating the View. */ View = &IntuitionBase->ViewLord; ViewPort = View->ViewPort; while (ViewPort) { MakeVPort(View, ViewPort); ViewPort = ViewPort->Next; } Permit(); RethinkDisplay(); } ----------------------- That's it for now. Don't forget to adjust your colors!