TweetFollow Us on Twitter

Screen Buffer
Volume Number:1
Issue Number:9
Column Tag:Modula 2 Mods

"Using the Alternate Screen Buffer"

By Tom Taylor, Software Engineer, Modula-2 Corp., Provo, Ut., MacTutor Contributing Editor

This article discusses the "alternate screen" capabilities of the Macintosh and presents a module that allows easy access to this facility from MacModula-2.

The Alternate Screen

As far as I know, Inside Macintosh only mentions the alternate screen buffer in two places: in the Memory Manager Programmer's Guide and in the Segment Loader Programmer's Guide. The Memory Manager section simply says, "There are alternate screen and sound buffers for special applications. If you use either or both of these, the space available for use by your application is reduced accordingly..." The alternate screen buffer can be used for high-speed flicker free graphics or a slide show program. For example, an application can be drawing in one screen while displaying a different screen. The popular "Tumbling Mac" demo by Mainstay uses the alternate screen buffer to create a high-speed flicker-free animation application. According to figure 1, the alternate screen buffer is allocated 32768 bytes below the main screen buffer.

Figure 1. Partial memory map showing sizes of various buffers.

The Segment Loader section mentions that the Chain and Launch traps configure memory for the sound and screen buffers. Whenever one of these traps is called, a parameter is passed that determines how these buffers are set up. The word (16-bit) parameter has three possible values:

Zero - Only the main sound and screen buffers are allocated. This is the normal situation and gives an application the most possible memory.

Negative - The alternate sound buffer and main screen buffer is allocated.

Positive - Both the alternate sound and screen buffers are allocated.

A Screen Switcher Module

Instead of building a specific program to demonstrate the alternate screen in Modula-2, this article presents a library module that can be used in many different programs in many different types of applications. This article will also present a small program that uses the developed screen switcher module.

A screen switcher module should support at least four functions:

• launch a program with the alternate screen,

• copy the main screen into the alternate screen,

• change the screen back and forth between the main and alternate screens, and

• set the screen buffer to the main screen before a program exits.

Apparently, the Finder always launches a program with the main sound and screen buffers (parameter set to 0). In order for a program to use the alternate screen, the program must be re-launched with the appropriate parameter (-1). The procedure LaunchWithAltScreen re-launches the program with the alternate screen if the alternate screen is not already allocated.

Here are the Definition and Implementation modules for handling the alternate screen:


  PROCEDURE LaunchWithTwoScreens;
    (* This procedure re-launches the
       current program with the alternate
       screen.  If the alternate screen is
       already installed, this procedure 
       does nothing. *)

  PROCEDURE CopyScreens;
    (* CopyScreens copies the main screen
       into the alternate screen. *)
  PROCEDURE SwitchScreens;
    (* SwitchScreens alternately switches
       what is being displayed from the
       one screen to the other. *)
  PROCEDURE SetMainScreen;
    (* Sets the current screen buffer to
       the main screen so that when the
       program exits to the Finder
       the screen will be the right one. *)
END ScreenSwitcher.


  FROM Launcher IMPORT

  FROM Terminal IMPORT

  FROM MacSystemTypes IMPORT
          Str255, LongCard;


          ADR, WORD, ADDRESS;

  FROM MacInterface IMPORT

  FROM QuickDraw1 IMPORT

    vBufA = 1e00h; (* Buffer A offset from
                                VIA interface chip *)
    vPage2 = 1;    (* This is a bit into
                              vBufA, if 0, select
                              alternate screen *)

        = POINTER TO ARRAY [1..10944] OF
      (* The Mac screen buffer is 10944
           16-bit words long *)


    CurPageOption [936h] : INTEGER;
       (* Mac global variable containing
           value of parameter at launch time
           that determines sound and screen
           buffers. *)
    ScrnBase [824h] : ScreenPtr;
       (* Mac global containing address of
           main screen. *)
    AltBase : ScreenPtr;
       (* Our homebrew alternate screen
            pointer. *)
    VIA6522Chip [1d4h] : FlagsPtr;
       (* VIA base address - from MDS's
           SysEqu.txt *)
    BufferA : FlagsPtr;
       (* Our pointer to vBuffer A *)
    originalPort  : GrafPtr;
       (* Save GrafPtr to whole screen *)

  PROCEDURE LaunchWithTwoScreens;
      PrintOrWhat, count : INTEGER;
      launchRec : LaunchRec;
      prog : Str255;
    IF CurPageOption >= 0 THEN
        (* Get the number of Modula-2
            programs launched.  It better
            be one... this one! *)
      IF count # 1 THEN
        WriteString('Double-click the ');
        WriteString('program icon to start');
        WriteString(' the program');
      launchRec.Name := ADR(prog);
      launchRec.SoundScreenBuffer := -1;
  END LaunchWithTwoScreens;
  PROCEDURE CopyScreens;
    AltBase^ := ScrnBase^;
  END CopyScreens;
  PROCEDURE SwitchScreens;
    (* According to the MDS SysEqu.Txt
        file, the vPage2 bit in the BufferA
        flags is zero for the alternate
        screen and one for the main screen.
    WITH originalPort^.portBits DO
      IF baseAddr = ADDRESS(ScrnBase)
          (* Graphical operations apply
              to alternate screen while
              displaying main screen. *)
 baseAddr := ADDRESS(AltBase);
          (* Turn on bit *)
          (* Graphical operations apply
              to main screen while displaying
              alternate screen. *)
 baseAddr := ADDRESS(ScrnBase);
          (* Turn off  bit *)
  END SwitchScreens;
  PROCEDURE SetMainScreen;
    IF NOT(vPage2 IN BufferA^) THEN
  END SetMainScreen;

  AltBase := ScrnBase;
   (* Set up pointer to alt screen *)
  BufferA := VIA6522Chip;
   (* Set up pointer to Buffer A flags *)
   (* Save screen GrafPort *)
  originalPort := thePort;
END ScreenSwitcher.

            Here is a program module that actually uses the ScreenSwitcher module.  The 
program simply bounces a picture of a Lisa computer around the screen.  The program draws 
the picture in one screen, switches screens, erases the old picture, moves to a new position, 
draws the picture, and switches to the other screen and applies the same sequence of operations. 
 In order for this program to run properly, it is important to have this program and the 
Modula-2 program on the system disk.  Click the mouse to exit the program.

MODULE Animate;

  FROM QuickDraw1 IMPORT
          QDPtr, StuffHex, HideCursor,
          BitMap, Rect, SetRect,
          srcOr, srcBic, OffsetRect,

  FROM QuickDraw2 IMPORT
  FROM MacSystemTypes IMPORT

          ADR, WORD;

  FROM MacInterface IMPORT
          thePort, Write;

  FROM EventManager IMPORT

  FROM ScreenSwitcher IMPORT
          CopyScreens, SwitchScreens;

    icon : ARRAY [0..95] OF WORD;
       (* Storage to hold icon data *)
    x, y : ARRAY [0..1] OF INTEGER;
       (* coordinates of icon for each
           screen *)
    screen : [0..1];
       (* current screen reminder *)
    xDir, yDir : INTEGER;
       (* offset for each icon move *)

    PROCEDURE MyStuffHex(ptr: QDPtr;
                         s : ARRAY OF CHAR);
    (* This procedure isolates the body of
       InitIcon from having to convert
       the Modula-style hex strings to
       Pascal format *)
 macStr : Str255;
    END MyStuffHex;

    (* Picture of a Lisa hoisted from
        Apple's QDSample program *)
    MyStuffHex(ADR(icon[ 0]),
  END InitIcon;

  PROCEDURE DrawIcon(h,v: INTEGER;  mode : INTEGER);
      srcBits : BitMap;
      srcRect, dstRect : Rect;
    srcBits.baseAddr := ADR(icon);
    srcBits.rowBytes := 6;
    srcRect := srcBits.bounds;
    dstRect := srcRect;
  END DrawIcon;

    (* Erase the old icon *)
    DrawIcon (x[screen],y[screen], srcBic);
    (* Calculate new position *)
    x[screen] := x[1-screen] + xDir;
    (* Don't let icon go off screen *)
    IF (x[screen] < 0) OR (x[screen] > 460) 
      xDir := -xDir;
    y[screen] := y[1-screen] + yDir;
    IF (y[screen] < 0) OR (y[screen] > 310) 
      yDir := -yDir;
    (* Draw the icon *)
    (* Swap our screen reminder *)
    screen := 1 - screen;
  END MoveIcon;
  (* Re-launch ourself with alt. screen *)
  Write(14c); (* Clear Screen *)
  screen := 0;
  x[0] := 100;
  y[0] := 100;
  x[1] := 100;
  y[1] := 100;
  xDir := 1;
  yDir := 1;
  WHILE NOT Button() DO
END Animate.

Community Search:
MacTech Search:

Software Updates via MacUpdate

Dash 3.4.0 - Instant search and offline...
Dash is an API documentation browser and code snippet manager. Dash helps you store snippets of code, as well as instantly search and browse documentation for almost any API you might use (for a full... Read more
RapidWeaver 7.1.7 - Create template-base...
RapidWeaver is a next-generation Web design application to help you easily create professional-looking Web sites in minutes. No knowledge of complex code is required, RapidWeaver will take care of... Read more
Printopia 2.1.22 - Share Mac printers wi...
Run Printopia on your Mac to share its printers to any capable iPhone, iPad or iPod Touch. Printopia will also add virtual printers, allowing you to save print-outs to your Mac and send to apps.... Read more
SteerMouse 5.0 - Powerful third-party mo...
SteerMouse is an advanced driver for USB and Bluetooth mice. It also supports Apple Mighty Mouse very well. SteerMouse can assign various functions to buttons that Apple's software does not allow,... Read more
Arq 5.5.1 - Online backup to Google Driv...
Arq is super-easy online backup for Mac and Windows computers. Back up to your own cloud account (Amazon Cloud Drive, Google Drive, Dropbox, OneDrive, Google Cloud Storage, any S3-compatible server... Read more
Slack 2.3.0 - Collaborative communicatio...
Slack is a collaborative communication app that simplifies real-time messaging, archiving, and search for modern working teams. Version 2.3.0: Note: Now requires OS X 10.8 or later New The app... Read more
Cocktail 10.1 - General maintenance and...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
Firefox 49.0.2 - Fast, safe Web browser.
Firefox offers a fast, safe Web browsing experience. Browse quickly, securely, and effortlessly. With its industry-leading features, Firefox is the choice of Web development professionals and casual... Read more
Art Text 3.1 - $49.99
Art Text is graphic design software to create stunning illustrations, such as badges, flyers, logos, social headers and icons, text mockups, website graphics and buttons, picture captions, word art,... Read more
AirRadar 3.1.9 - $9.95
With AirRadar, scanning for wireless networks is now easier and more personalized! It allows you to scan for open networks and tag them as favourites or filter them out. View detailed network... Read more

Latest Forum Discussions

See All

Oh...Sir! The Insult Simulator (Games)
Oh...Sir! The Insult Simulator 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: | Read more »
WitchSpring2 (Games)
WitchSpring2 1.27 Device: iOS Universal Category: Games Price: $3.99, Version: 1.27 (iTunes) Description: This is the story of Luna, the Moonlight Witch as she sets out into the world. This is a sequel to Witch Spring. Witch Spring 2... | Read more »
4 popular apps getting a Halloween makeo...
'Tis the season for all things spooky. So much, so, in fact, that even apps are getting into the spirt of things, dressing up in costume and spreading jack o' lanterns all about the place. These updates bring frightening new character skins, scary... | Read more »
Pokémon GO celebrates Halloween with can...
The folks behind Pokémon GO have some exciting things planned for their Halloween celebration, the first in-game event since it launched back in July. Starting October 26 and ending on November 1, trainers will be running into large numbers of... | Read more »
Best Fiends Forever Guide: How to collec...
The fiendship in Seriously's hit Best Fiends has been upgraded this time around in Best Fiends Forever. It’s a fast-paced clicker with lots of color and style--kind of reminiscent of a ‘90s animal mascot game like Crash Bandicoot. The game... | Read more »
5 apps for the budding mixologist
Creating your own cocktails is something of an art form, requiring a knack for unique tastes and devising interesting combinations. It's easy to get started right in your own kitchen, though, even if you're a complete beginner. Try using one of... | Read more »
5 mobile strategy games to try when you...
Strategy enthusiasts everywhere are celebrating the release of Civilization VI this week, and so far everyone seems pretty satisfied with the first full release in the series since 2010. The series has always been about ultra-addictive gameplay... | Read more »
Popclaire talk to us about why The Virus...
Humanity has succumbed to a virus that’s spread throughout the world. Now the dead have risen with a hunger for human flesh, and all that remain are a few survivors. One of those survivors has just called you for help. That’s the plot in POPCLAIRE’... | Read more »
Oceans & Empires preview build sets...
Hugely ambitious sea battler Oceans & Empires is available to play in preview form now on Google Play - but download it quickly, as it’s setting sail away in just a few days. [Read more] | Read more »
Rusty Lake: Roots (Games)
Rusty Lake: Roots 1.1.4 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1.4 (iTunes) Description: James Vanderboom's life drastically changes when he plants a special seed in the garden of the house he has inherited.... | Read more »

Price Scanner via

Apple refurbished 2015 13-inch MacBook Airs a...
Apple has Certified Refurbished 2015 13″ MacBook Airs available starting at $759. An Apple one-year warranty is included with each MacBook, and shipping is free: - 2015 13″ 1.6GHz/4GB/128GB MacBook... Read more
64GB Apple TV on sale for $159, save $40
Best Buy has the 64GB Apple TV on sale for $40 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Sale price for online orders only, in-store price may... Read more
EyeQue Introduces iOS And Android Based Advan...
Affordable vision technologies developers EyeQue have announced what they claim to be the world’s most advanced intelligent vision solution, pitched as enabling anyone, anywhere to easily and... Read more
Smartwatch Market Tanks, Declining 51.6% in 2...
The worldwide smartwatch market experienced a round of growing pains in the third quarter of 2016 (3Q16), resulting in a year-over-year decline in shipment volumes. According to data from the... Read more
CAZE announces Ultra Thin Glass Screen Protec...
Hong Kong based CAZE has announced its first ultra thin glass screen protector, the Glazz Pro for iPhone 7/7 Plus. Glazz Pro is made from chemically reinforced glass with an anti-fingerprint... Read more
11-inch MacBook Airs on sale for up to $120 o...
Newegg has 11″ MacBook Airs on sale for up to $120 off MSRP. Shipping is free: - 11″ 1.6GHz/128GB MacBook Air: $799.99 $100 off MSRP - 11″ 1.6GHz/256GB MacBook Air: $979 $120 off MSRP Read more
Up to $300 off Macs, $20 off iPads with Apple...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free, and... Read more
Apple’s Thursday “Hello Again” Event A Largel...
KGI Securities analyst Ming-Chi Kuo, who has a strong record of Apple hardware prediction accuracy, forecasts in a new note to investors released late last week that a long-overdue redo of the... Read more
12-inch Retina MacBooks on sale for $100 off...
Amazon has 2016 12″ Apple Retina MacBooks on sale for $100 off MSRP. Shipping is free: - 12″ 1.1GHz Silver Retina MacBook: $1199.99 $100 off MSRP - 12″ 1.1GHz Gold Retina MacBook: $1199.99 $100 off... Read more
Save up to $600 with Apple refurbished Mac Pr...
Apple has Certified Refurbished Mac Pros available for up to $600 off the cost of new models. An Apple one-year warranty is included with each Mac Pro, and shipping is free. The following... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 52812872 Houston, Texas, United States Posted: Oct. 18, 2016 Weekly Hours: 40.00 **Job Summary** As an Apple Solutions Read more
Lead *Apple* Solutions Consultant - Apple (...
# Lead Apple Solutions Consultant Job Number: 52812906 Houston, Texas, United States Posted: Oct. 18, 2016 Weekly Hours: 40.00 **Job Summary** The Lead ASC is an Read more
*Apple* Retail - Multiple Positions- Towson,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Software Engineering Intern: Integration / QA...
Job Summary Apple is currently seeking enthusiastic interns who can work full-time for a minimum of 12-weeks between Fall 2015 and Summer 2016. Our software Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.