TweetFollow Us on Twitter

Call Register Routines
Volume Number:1
Issue Number:5
Column Tag:Undocumented procedure

Call register-based Toolbox/OS routines

By Steve Brecher

Macintosh Pascal provides a built-in procedure named Generic that is not documented. Generic permits you to call register-based Toolbox/OS routines. It can also be used to execute any machine language code that you have stored in a Pascal data structure. This article describes the use of the Generic procedure.

In effect, the following procedure is pre-declared:

procedure Generic(InstructionWord :integer;
                  VAR Registers : RegRcd);

“RegRcd” denotes a data structure consisting of 13 32-bit values -- five address register values (A0..A4), followed by eight data register values (D0..D7). The exact type of Registers is immaterial, i.e., you could declare:

var
 Registers : record
   A : array[0..4] of longint;
   D : array[0..7] of longint
  end;

Or in some cases you might prefer something like:

var
 Registers : record
   A0, A1, A2, A3, A4 : ^char;
   D0, D1, D2, D3, D4, D5, D6, D7 : longint
  end;

The register values that you pass to Generic are written to the MC68000 registers. Then the one-word instruction denoted by the InstructionWord argument is executed. Finally, your Registers structure is updated with the (possibly) new values of the MC68000 registers before Generic returns to your program.

Any registers that are not used by the machine language routine you’re invoking do not have to have their corresponding elements in the Registers data structure initialized. The machine language routine will have garbage in those registers (but, since it’s not using them, it won’t care).

Usually, Generic will be used to execute a register-based Toolbox/OS trap. In such cases the value you pass to Generic via the InstructionWord argument is the trap value. Here’s an example routine that resets the modem output port to establish new communications parameters:

type
  DataBitsT = (Five, Seven, Six, Eight);  
                               { ^--sic--^ }
  ParityT = (OddParity, NoParity, EvenParity);
  StopBitsT = (One, OnePointFive, Two);

 function ResetSer (Baud : longint;
         DataBits : DataBitsT;
         Parity : ParityT;
         StopBits : StopBitsT) : boolean;
{returns true if no error, false if modem}
{port hasn’t been opened yet}
{}
 const
   PBControl = $A004; {trap value}
   noErr = 0;
   ModemOutRefNum = -7;
   SerReset = 8;      {CScode}
{}
  var
   ParamBlockRec : record
     Filler : array[0..11] of integer;
     ioRefNum : integer;
     csCode : integer;
     csParam : integer
    end;
   Registers : record
     A : array[0..4] of longint;
     D : array[0..7] of longint
    end;
   serConfig : longint;
 begin {ResetSer}
  with ParamBlockRec do
   begin
    ioRefNum := ModemOutRefNum;
    csCode := SerReset;
    serConfig := trunc(114571.7 / baud -
                                              1.338395)
                 + 1024 * ord(DataBits)
                 + 4096 * (ord(Parity) + 1)
                 + 16384 * (ord(StopBits) + 1);
    csParam := loword(serConfig);
   end;
  Registers.A[0] := ord(@ParamBlockRec);
  Generic(PBControl, Registers);
  ResetSer := (Registers.D[0] = noErr)
 end; {ResetSer}

The InstructionWord argument to Generic does not have to be a trap value, however. It can be any 16-bit MC68000 instruction, as shown in the following example:

 procedure CallCode(VAR Result :integer);
{}
{This example assumes a global integer }
{array named Code which contains a       }
{machine language subroutine that takes}
{one VAR (address) argument on the       }
{stack.  CallCode calls the routine,        }
{passing it the address of the Result     }
{parameter. }
{}
 const
  JsrIndirectA0 = $4E90; { Jsr (A0) }
 var
  Registers : record
    A : array[0..4] of ^integer;
    D : array[0..7] of longint
   end;
  Glue : array[1..4] of integer;
 begin
{ MoveA.L (SP),A0 ;return addr }
  Glue[1] := $2057;
{ Move.L A2,(SP) ;ptr to Result }
  Glue[2] := $2E8A;
{ Move.L A0,-(SP) ;return addr }
  Glue[3] := $2F08;
{ Jmp (A1)        ;to subr in Code array }
  Glue[4] := $4ED1;
  with Registers do
   begin
    A[0] := @Glue[1];
    A[1] := @Code[1];
    A[2] := @Result;
   end;
  {Call Glue routine, which invokes Code}
  {routine...}
  Generic(JsrIndirectA0, Registers);
 end; {CallCode}

Scroll Rectangle Notes

(NOTE: did not appear with above article in MacTutor)

ScrollRect is a QuickDraw routine which scrolls a rectangle. Bits (pixels) scrolled out of the rectangle are lost, and the area near the side of the rectangle opposite to the scroll direction is filled with the current Grafport’s background pattern. [The rectangle defining the area to be scrolled must be larger than the screen object you wish to be moved by this procedure to allow room to be lost at the top.]

A Performance Note

ScrollRect will slow down by a factor of 3 or 4 if the scrolled rectangle includes one or more borders of the current Grafport’s portrect. For fast scrolling, assure that each side of the rectangle passed to ScrollRect is at least two pixels away from a border of the portrect.

A Usage Note

The UpdateRgn parameter (a region handle) passed to ScrollRect enables it to return to you the specification of the region that was vacated by scrolled bits and which ScrollRect filled with the background pattern. (Usually the vacated area will be a sub-rectangle of the scrolled rectangle; but it may be other than rectangular if an odd-shapped visRgn or clipRgn affects the ScrollRect.) The previous contents of the region (i.e., the data structure) are destroyed. If you don’t need to know the specification of the area filled with the background pattern (or if you already know), just allocate a dummy region (using NewRgn) and pass ScrollRect a handle to the dummy region. You can allocate the dummy region once at the beginning of your program; or you can allocate it before each call to ScrollRect and then use DisposRgn after each call to free the memory used by the region data structure.

 
AAPL
$99.72
Apple Inc.
-1.03
MSFT
$46.26
Microsoft Corpora
-0.10
GOOG
$570.06
Google Inc.
-7.30

MacTech Search:
Community Search:

Software Updates via MacUpdate

Cocktail 8.0 Beta 2 - General maintenanc...
Cocktail is a general purpose utility for OS X 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
QuickBooks 2015 16.0.0.1352 R1 - Financi...
QuickBooks 2015 helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save.... Read more
Mac DVDRipper Pro 5.0.1 - Copy, backup,...
Mac DVDRipper Pro is the DVD backup solution that lets you protect your DVDs from scratches, save your batteries by reading your movies from your hard disk, manage your collection with just a few... Read more
Apple OS X bash Update 1.0 - Fix for sec...
The OS X bash Update fixes a security flaw in the bash UNIX shell on OS X 10.9.5 (also on OS X 10.8 and 10.7 [see Related Links below]). OS X 10.9.5 or later Downloads for OS X 10.8 and OS X 10.7 in... Read more
SyncTwoFolders 2.0.5 - Syncs two user-sp...
SyncTwoFolders simply synchronizes two folders. It supports synchronization across mounted network drives and it is a possibility to run a simulation showing in a log what will be done. Please visit... Read more
FinderPop 2.5.7 - Classic Mac utility, n...
FinderPop is a Universal preference pane that extends OS X's contextual menus using a FinderPop Items folder much as the Apple Menu Items folder used to do for the Apple menu. It has other features... Read more
VueScan 9.4.45 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
LibreOffice 4.3.2.2 - Free Open Source o...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
calibre 2.4 - Complete e-library managem...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital... Read more
Default Folder X 4.6.9b1 - Enhances Open...
Default Folder X attaches a toolbar to the right side of the Open and Save dialogs in any OS X-native application. The toolbar gives you fast access to various folders and commands. You just click... Read more

Latest Forum Discussions

See All

Nexticy Review
Nexticy Review By Jennifer Allen on October 1st, 2014 Our Rating: :: IDEAL FORM CREATIONiPad Only App - Designed for the iPad Nexticy allows you to make your own forms for research purposes or to organize your business better. It’s... | Read more »
HeroCraft Introduces Unlimited Sequel to...
HeroCraft Introduces Unlimited Sequel to WW2: Sandbox. Strategy & Tactics Posted by Jessica Fisher on October 1st, 2014 [ permalink ] | Read more »
RGB Express Review
RGB Express Review By Jennifer Allen on October 1st, 2014 Our Rating: :: DELIGHTFUL PUZZLINGUniversal App - Designed for iPhone and iPad Guide trucks along their delivery routes in RGB Express, a testing but charming puzzle game... | Read more »
The Sagas of Fire*Wolf (Games)
The Sagas of Fire*Wolf 1.0 Device: iOS Universal Category: Games Price: $9.99, Version: 1.0 (iTunes) Description: | Read more »
BuggyFun Review
BuggyFun Review By Amy Solomon on October 1st, 2014 Our Rating: iPad Only App - Designed for the iPad BuggyFun allows children to create their own tracks for bugs to interact with for a unique open-ended experience.   | Read more »
Fold the Adventure Review
Fold the Adventure Review By Jennifer Allen on October 1st, 2014 Our Rating: :: AWKWARD FOLDSUniversal App - Designed for iPhone and iPad Fold pieces of paper to create platforms for a princely rabbit in this puzzle game; something... | Read more »
WW2: Sandbox. Strategy & Tactics (G...
WW2: Sandbox. Strategy & Tactics 1.0.0 Device: iOS Universal Category: Games Price: $9.99, Version: 1.0.0 (iTunes) Description: Sandbox is the unlimited sequel to our Strategy & Tactics: World War II. We've abandoned... | Read more »
apeFilter (Music)
apeFilter 1.0 Device: iOS Universal Category: Music Price: $6.99, Version: 1.0 (iTunes) Description: | Read more »
Shred It! Review
Shred It! Review By Jennifer Allen on September 30th, 2014 Our Rating: :: GORGEOUS BUT BASICUniversal App - Designed for iPhone and iPad It might look lovely, but Shred It! is a pretty shallow endless runner/snowboarding game.   | Read more »
Check Out the New Teaser Trailer forGAME...
Check Out the New Teaser Trailer forGAMEVIL’s Darkness Reborn Posted by Jessica Fisher on September 30th, 2014 [ permalink ] Darkness Reborn, by GAMEVIL< | Read more »

Price Scanner via MacPrices.net

Apple resting On Its iPhone Laurels? – The ‘B...
Apple calls its new iPhone 6 and 6 Plus “The Biggest Advancements in iPhone History,” but does reality live up to the hype? “Seldom have so many waited so breathlessly for so little,” tweeted veteran... Read more
Roundup of Apple Mac and iPad Education disco...
Purchase a new Mac or iPad at The Apple Store for Education and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free,... Read more
Apple Boycotts German Magazine Computer Bild...
Apple has revoked its PR accreditation of Germany’s Computer Bild, Europe’s best-selling PC magazine, in reaction to Bild’s posting of a “#Bentgate” YouTube video. Axel Telzerow, editor in chief of... Read more
iPhone 6 & iPhone 6 Plus Available in Chi...
Apple has announced that iPhone 6 and iPhone 6 Plus will be available in China beginning Friday, October 17 from the Apple Online Store (http://www.apple.com), Apple’s retail stores, and an expansive... Read more
MacBook Airs on sale for $100 off MSRP, start...
Best Buy has the new 2014 MacBook Airs on sale for $100 off MSRP on their online store. Choose free home shipping or free local store pickup (if available). Prices valid for online orders only, in-... Read more
Apple Releases OS X Mavericks bash Update 1.0...
Apple has released a patch update for OS X Mavericks users to address the recently-detected “Shellshock” security bug in BSD UNIX’s bash shell. Apple says only a few Mac users who had manually... Read more
Pivotal Payments Ready for Apple Pay – FlexPo...
Pivotal Payments, a provider of merchant services and global payment processing solutions, has announced its proprietary FlexPoint platform will support credit and debit transactions through Apple’s... Read more
iStabilizer Announces Tabarm — First Friction...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, dollies, mounts, and remotes for smartphones, tablets, and cameras, announced today the iStabilizer tabArm, the first... Read more
IStabilizer Flex Smartphone Tripod Wins Usa T...
iStabilizer, a specialist in universal lightweight compact tripods, steady cams, and other products for smartphones, tablets, and cameras, has announced today that its iStabilizer Flex smartphone... Read more
13-inch 2.8GHz Retina MacBook Pro on sale for...
B&H Photo has the new 2014 13″ 2.8GHz Retina MacBook Pro on sale for $1699.99 including free shipping plus NY sales tax only. They’ll also include free copies of Parallels Desktop and LoJack for... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Senior Event Manager, *Apple* Retail Market...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global event strategy. Delivering an overarching brand story; in-store, Read more
*Apple* Solutions Consultant (ASC) - Apple (...
**Job Summary** The ASC is an Apple employee who serves as an Apple brand ambassador and influencer in a Reseller's store. The ASC's role is to grow Apple Read more
Project Manager / Business Analyst, WW *Appl...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.