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

Latest Forum Discussions

See All

Combo Quest (Games)
Combo Quest 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Combo Quest is an epic, time tap role-playing adventure. In this unique masterpiece, you are a knight on a heroic quest to retrieve... | Read more »
Hero Emblems (Games)
Hero Emblems 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: ** 25% OFF for a limited time to celebrate the release ** ** Note for iPhone 6 user: If it doesn't run fullscreen on your device... | Read more »
Puzzle Blitz (Games)
Puzzle Blitz 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Puzzle Blitz is a frantic puzzle solving race against the clock! Solve as many puzzles as you can, before time runs out! You have... | Read more »
Sky Patrol (Games)
Sky Patrol 1.0.1 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.1 (iTunes) Description: 'Strategic Twist On The Classic Shooter Genre' - Indie Game Mag... | Read more »
The Princess Bride - The Official Game...
The Princess Bride - The Official Game 1.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: An epic game based on the beloved classic movie? Inconceivable! Play the world of The Princess Bride... | Read more »
Frozen Synapse (Games)
Frozen Synapse 1.0 Device: iOS iPhone Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Frozen Synapse is a multi-award-winning tactical game. (Full cross-play with desktop and tablet versions) 9/10 Edge 9/10 Eurogamer... | Read more »
Space Marshals (Games)
Space Marshals 1.0.1 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: ### IMPORTANT ### Please note that iPhone 4 is not supported. Space Marshals is a Sci-fi Wild West adventure taking place... | Read more »
Battle Slimes (Games)
Battle Slimes 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: BATTLE SLIMES is a fun local multiplayer game. Control speedy & bouncy slime blobs as you compete with friends and family.... | Read more »
Spectrum - 3D Avenue (Games)
Spectrum - 3D Avenue 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: "Spectrum is a pretty cool take on twitchy/reaction-based gameplay with enough complexity and style to stand out from the... | Read more »
Drop Wizard (Games)
Drop Wizard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Bring back the joy of arcade games! Drop Wizard is an action arcade game where you play as Teo, a wizard on a quest to save his... | Read more »

Price Scanner via MacPrices.net

Our MacBook Price Trackers will show you the...
Our Apple award-winning MacBook Price Trackers are continually updated with the latest information on prices, bundles, and availability for 16″ and 14″ MacBook Pros along with 13″ and 15″ MacBook... Read more
Amazon is offering a 10% discount on Apple’s...
Don’t pay full price! Amazon has 16-inch M4 Pro MacBook Pros (Silver and Black colors) on sale today for 10% off Apple’s MSRP. Shipping is free. These are the lowest prices currently available for 16... Read more
13-inch M4 MacBook Airs on sale for $150 off...
Amazon has new 13″ M4 MacBook Airs on sale for $150 off MSRP right now, starting at $849. Sale prices apply to most colors and configurations. Be sure to select Amazon as the seller, rather than a... Read more
15-inch M4 MacBook Airs on sale for $150 off...
Amazon has new 15″ M4 MacBook Airs on sale for $150 off Apple’s MSRP, starting at $1049. Be sure to select Amazon as the seller, rather than a third-party: – 15″ M4 MacBook Air (16GB/256GB): $1049, $... Read more
Amazon is offering a $50 discount on Apple’s...
Amazon has Apple’s 11th-generation A16 iPads in stock on sale for $50 (or a little more) off MSRP this week. Shipping is free: – 11″ 11th-generation 128GB WiFi iPads: $299 $50 off MSRP – 11″ 11th-... Read more
Clearance 13-inch M1 MacBook Airs available f...
Walmart has clearance, but new, Apple 13″ M1 MacBook Airs (8GB RAM, 256GB SSD) available online for $649, $360 off original MSRP, in Space Gray, Silver, and Gold colors. These are new MacBooks for... Read more
iPad minis on sale for $100 off Apple’s MSRP...
Amazon is offering $100 discounts (up to 20% off) on Apple’s newest 2024 WiFi iPad minis, each with free shipping. These are the lowest prices available for new minis among the Apple retailers we... Read more
AirPods Max headphones on sale for $479, $70...
Amazon has AirPods Max with USB-C on sale for $479.99 in all colors. Shipping is free. Their price is $70 off Apple’s MSRP, and it’s the lowest price available today for AirPods Max. Keep an eye on... Read more
14-inch M4 Pro/M4 Max MacBook Pros on sale th...
Don’t pay full price! Get a new 14″ MacBook Pro with an M4 Pro or M4 Max CPU for up to $320 off Apple’s MSRP this weekend at these retailers…they are the lowest prices available for these MacBook... Read more
Get a 15-inch M4 MacBook Air for $150 off App...
A couple of Apple retailers are offering $150 discounts on new 15″ M4 MacBook Airs this weekend. Prices at these retailers start at $1049: (1): Amazon has new 15″ M4 MacBook Airs on sale for $150 off... Read more

Jobs Board

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.