TweetFollow Us on Twitter

Access to Traps
Volume Number:1
Issue Number:6
Column Tag:MacPascal

Access to OS traps

By Alan Wootton

MacPascal is a miracle. Although billed as an educational product, and many serious programmers probably regard it as a toy (just as many consider the Mac to be merely a toy), MacPascal can be used to prototype professional software products.

Since MacPascal is not sold and supported as a development tool, a small amount of homework is needed to assemble a useful system. First you will need MacPascal. Second you will need RMaker, the resource compiler that runs on the Mac. For some an assembler is nice. And a 68000 debugger may be needed (I use MacDB by Bill Duvall). Since there is no syntax check on inline procedures, a debugger is useful to check the stack at the start of the call even if you are relatively bad at assembly language. Eventually one needs a compiler. For now all that is available is the Lisa Pascal Workshop. Hopefully, a Mac compiler will become available. For my purposes it is necessary for the compiler to generate native code; this rules out a p-code type of system (SoftTech Pascal won’t do). Last but not least, Inside Macintosh is a must.

MacPascal provides methods to access almost all of the toolbox routines that make the Mac so great. The OS traps, however, are a bit tricky. As Steve Brecher showed us last month in MacTutor with his Advanced Mac’ing column, the undocumented GENERIC procedure is used to call OS traps. However, INLINE can also be used for OS traps, as we shall see this month in this example of using STUFFHEX from Pascal. (See Steve’s Advanced Mac’ing column in this month’s issue for an example of using STUFFHEX from Basic.)

TWO TYPES OF TOOLBOX TRAPS

There are two types of toolbox trap; those that are stack based and those that are register based. The stack based calls are supported using the INLINE procedure. The register based traps, of which most of the OS traps are typical, are more difficult to access because there is no way (other than using GENERIC) to set registers from Pascal. Fortunately, virtually all of the register traps use only D0 and A0. Therefore, if we could set D0 and A0 before the trap and read them afterwards, we would have an OS trap call mechanism using the INLINE procedure. I have written a short piece of 68000 code to accomplish this.

As an example, I have prepared a short program to read the date and time from the system. Two calls are made to the toolbox to do this; both are register based. Note that when a pointer is to be passed in A0, the @ operator must be used to set the variable to the correct value before the call. Also note that for any $A0xx calls that return a value to the calling routine, the flag $100 should be added to not preserve all registers.

GLUE ROUTINE FOR PASCAL TO OS

Our machine language routine will pop from the stack, the addresses of the variables which we wish to place in the registers A0 and D0. We will pop these addresses off the stack and use them to load the variables into the two registers. The new values returned in A0 and D0 will then be copied back into those same two Pascal variables. Note that after the inlineP call, all registers are saved so we can use them any way we please. To return to Pascal, we are using an RTS instruction so it will be necessary for our machine language routine to calculate our return address. Fortunately A0 points at the word before where we must return.

ROUTINE TO LOAD A0 AND D0 FOR OS TRAP CALLS FROM MACPASCAL.

126: 2848 MOVE.L A0,A4   ;SAVE RETURN
128: 548C ADDQ.L #$2,A4  ;POINT TO RET
;
;  get address where trap will go into A0
;
12A: 41FA 000C     LEA   *+$000E,A0
;
;  pop trap from stack and place into code
;
12E: 309F MOVE.W  (A7)+,(A0) 
;
;  get A0 and D0 from stack
;
130: 245F MOVE.L (A7)+,A2 ;POP A0 VAR
132: 265F MOVE.L (A7)+,A3 ;POP D0 VAR
134: 2052 MOVE.L (A2),A0   ;LOAD A0
136: 2013 MOVE.L (A3),D0    ;LOAD D0
;
;  this word gets overwritten by real trap
;
138: FFFF .word  $FFFF  ;do trap now
; 
;  pass back A0 and D0 contents 
;
13A: 2488 MOVE.L A0,(A2) ;SAVE RET A0
13C: 2680 MOVE.L D0,(A3) ;SAVE RET D0
13E: 4ED4 JMP  (A4);RETURN 

We will stuff the machine code for our little OS trap caller above into memory by using the STUFFHEX routine from our Pascal program. The above listing is provided to show how the machine language patch works. Two OS traps, ReadDateTime and Secs2Date will be called using our OS trap caller, returning the information in variables of our DateTime record. From this example, it should be obvious how to access other OS type traps using INLINE procedures. (As we mentioned, the undocumented GENERIC can also be used for this purpose.)

program show_date_time;

{ This is a test of a method of accessing   }
{ the Mac OS toolbox traps from Mac         }
{ Pascal that are register based, using    }
{ A0 and D0 only. The call will be:            }
{inlineP($4E75,@d0, @a0, trap,@access)}
{ d0 and a0 hold values of registers D0      }
{ and A0 before and after the call. Trap   }
{ refers to the trap address being called.}

type
 DaTimRec = record
 year: integer;
 month: integer;
 day: integer;
 hour: integer;
 minute: integer;
 second: integer;
 dayofweek: integer;
 end;

var
 currentTime: DatimRec;

procedure GetTime(var date: DaTimRec);
 var
 access: array[0..12] of integer;
 d0,a0, secs: longint;
begin
 stuffhex(@access,’2848548C41FA000C309F245F265F20522013FFFF248826804ED4');
a0:=ord(@secs);

inlineP($4E75,@d0,@a0,$A139, @access);
{ReadDateTime, pointer to secs in A0}

a0:=ord(@date);

inlineP($4E75,@secs,@a0,$A9C6,@access);
{Secs2Date, secs in d0, pointer to record}
{is in A0.}

end;
begin {main}
 GetTime(currentTime);
 with currentTime do
 begin
 writeln(‘year is’, year);
 writeln(‘month is’, month);
 writeln(‘day is’, day);
 writeln(‘hour is’, hour);
 writeln(‘minute is’, minute);
 writeln(‘second is’, second);
 writeln(‘year is’, year);
 writeln(‘day of week is’, dayofweek);
 end;
end.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Sandvox 2.10.2 - Easily build eye-catchi...
Sandvox is for Mac users who want to create a professional looking website quickly and easily. With Sandvox, you don't need to be a Web genius to build a stylish, feature-rich, standards-compliant... Read more
LibreOffice 5.0.1.2 - Free, open-source...
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
f.lux 36.1 - Adjusts the color of your d...
f.lux makes the color of your computer's display adapt to the time of day, warm at night and like sunlight during the day. Ever notice how people texting at night have that eerie blue glow? Or wake... Read more
VirtualBox 5.0.2 - x86 virtualization so...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
File Juicer 4.43 - Extract images, video...
File Juicer is a drag-and-drop can opener and data archaeologist. Its specialty is to find and extract images, video, audio, or text from files which are hard to open in other ways. In computer... Read more
Apple MainStage 3.2 - Live performance t...
MainStage 3 makes it easy to bring to the stage all the same instruments and effects that you love in your recording. Everything from the Sound Library and Smart Controls you're familiar with from... Read more
formZ 8.5 - Solid and surface modeler. (...
formZ pro is a powerful 3D design application featuring a variety of modeling personalities and tools with an easy to use interface to express and communicate your imagination. It is based on... Read more
PopChar 7.2 - Floating window shows avai...
We're also selling a 5-license family pack for only $25.99! PopChar helps you get the most out of your font collection. With its crystal-clear interface, PopChar provides a frustration-free way to... Read more
FileMaker Pro 14.0.2 - Powerful, easy-to...
FileMaker Pro is powerful, easy-to-use software used to create custom solutions for your business that run on iPad, iPhone, Windows, Mac and the web. Use FileMaker Pro to manage and share information... Read more
djay Pro 1.2 - Transform your Mac into a...
djay Pro provides a complete toolkit for performing DJs. Its unique modern interface is built around a sophisticated integration with iTunes and Spotify, giving you instant access to millions of... Read more

ReBoard: Revolutionary Keyboard (Utilit...
ReBoard: Revolutionary Keyboard 1.0 Device: iOS Universal Category: Utilities Price: $1.99, Version: 1.0 (iTunes) Description: Do everything within the keyboard without switching apps! If you are in WhatsApp, how do you schedule a... | Read more »
Tiny Empire (Games)
Tiny Empire 1.1.3 Device: iOS Universal Category: Games Price: $2.99, Version: 1.1.3 (iTunes) Description: Launch cannonballs and blow tiny orcs into thousands of pieces in this intuitive fantasy-themed puzzle shooter! Embark on an... | Read more »
Astropad Mini (Productivity)
Astropad Mini 1.0 Device: iOS iPhone Category: Productivity Price: $4.99, Version: 1.0 (iTunes) Description: *** 50% off introductory price! ​*** Get the high-end experience of a Wacom tablet at a fraction of the price with Astropad... | Read more »
Emo Chorus (Music)
Emo Chorus 1.0.0 Device: iOS Universal Category: Music Price: $1.99, Version: 1.0.0 (iTunes) Description: Realistic Choir simulator ranging from simple Chorus emulation to full ensemble Choir with 128 members. ### introductory offer... | Read more »
Forest Spirit (Games)
Forest Spirit 1.0.5 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.5 (iTunes) Description: | Read more »
Ski Safari 2 (Games)
Ski Safari 2 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: The world's most fantastical, fun, family-friendly skiing game is back and better than ever! Play as Sven's sister Evana, share... | Read more »
Lara Croft GO (Games)
Lara Croft GO 1.0.47768 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.47768 (iTunes) Description: Lara Croft GO is a turn based puzzle-adventure set in a long-forgotten world. Explore the ruins of an ancient... | Read more »
Whispering Willows (Games)
Whispering Willows 1.23 Device: iOS Universal Category: Games Price: $4.99, Version: 1.23 (iTunes) Description: **LAUNCH SALE 50% OFF** - Whispering Willows is on sale for 50% off ($4.99) until September 9th. | Read more »
Calvino Noir (Games)
Calvino Noir 1.1 Device: iOS iPhone Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: The film noir stealth game. Calvino Noir is the exploratory, sneaking adventure through the 1930s European criminal underworld.... | Read more »
Angel Sword (Games)
Angel Sword 1.0 Device: iOS Universal Category: Games Price: $6.99, Version: 1.0 (iTunes) Description: Prepare to adventure in the most epic full scale multiplayer 3D RPG for mobile! Experience amazing detailed graphics in full HD.... | Read more »

Price Scanner via MacPrices.net

Tablet Screen Sizes Expanding as iPad Pro App...
Larger screen sizes are gaining favor as the tablet transforms into a productivity device, with shipments growing 185 percent year-over-year in 2015. According to a new Strategy Analytics’ Tablet... Read more
Today Only: Save US$50 on Adobe Elements 13;...
Keep the memories. lose the distractions. Summer’s winding down and it’s time to turn almost perfect shots into picture perfect memories with Elements 13. And get the power to edit both photos and... Read more
1.4GHz Mac mini on sale for $449, save $50
Best Buy has the 1.4GHz Mac mini on sale for $50 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Price for online orders only, in-store price may vary... Read more
12-inch 1.1GHz Gold MacBook on sale for $1149...
B&H Photo has the 12″ 1.1GHz Gold Retina MacBook on sale for $1149.99 including free shipping plus NY sales tax only. Their price is $150 off MSRP, and it’s the lowest price available for this... Read more
27-inch 3.3GHz 5K iMac on sale for $1849, sav...
Best Buy has the 27″ 3.3GHz 5K iMac on sale for $1849.99. Their price is $150 off MSRP, and it’s the lowest price available for this model. Choose free shipping or free local store pickup (if... Read more
Worldwide Tablet Shipments Expected to Declin...
Does Apple badly need a touchscreen convertible/hybrid laptop MacBook? Yes, judging from a new market forecast from the International Data Corporation (IDC) Worldwide Quarterly Tablet Tracker, which... Read more
Continued PC Shipment Shrinkage Expected Thro...
Worldwide PC shipments are expected to fall by -8.7 percent in 2015 and not stabilize until 2017, according to the latest International Data Corporation (IDC) Worldwide Quarterly PC Tracker data. The... Read more
Imminent iPhone 6s Announcement Leads To 103%...
NextWorth Solutions, with its online and in-store electronics trade-in programs including http://NextWorth.com, reports that it has experienced a 103 percent surge in quoted trade-in values over the... Read more
Weekend Deal: 13-inch Retina MacBook Pros for...
Save up to $100 on the purchase of a new 2015 13″ Retina MacBook Pro at the following resellers this weekend. Shipping is free with each model: 2.7GHz/128GB MSRP $1299 2.7GHz/... Read more
13-inch 2.5GHz MacBook Pro on sale for $999,...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $999.99 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Read more

Jobs Board

Product Design Engineer - *Apple* Watch - A...
**Job Summary** Product Design Engineer Job Description As a member of Apple 's Watch product design team, you will help to create the next generation of the world's Read more
*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
Software QA Engineer, *Apple* Pay Security...
Changing the world is all in a day039s work at Apple . If you love innovation, here039s your chance to make a career of it. You039ll work hard. But the job comes with Read more
*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* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.