TweetFollow Us on Twitter

MDS->MPW
Volume Number:5
Issue Number:6
Column Tag:Developer Notes

MDS->MPW

By Dan Weston, Portland, OR

Converting MDS files to MPW

This article describes how to convert MDS assembler source files to the MPW environment. I don’t go into all the details, but try and give you enough of the major points so that you can get your old files over to MPW and get more productive. MPW is a very rich and wonderful environment and I am purposely ignoring many of its subtle and not-so-subtle features in this article for the sake of clarity (and deadline).

Declare a MAIN Procedure

MPW expects you to declare at least one code module in your source file. There are several ways to start a code module, but the easiest is to put the MAIN directive on the same line at the label at the start of your code producing statements. For example, the following code fragment establishes the label “Start” and the main code module.

Start MAIN; code statements start here

If you don’t declare a code module, either by using MAIN or PROC or FUNC, MPW will complain heartily.

Declare Global Data Record

In MDS, it is customary to declare global variables with the DS directive. The MDS assembler gathers all DS directives together into a common global data block and tells the linker to locate the data block at -256(a5) when the program is loaded. (This location is the default and you can change it with Link directives, although most people don’t bother to change it. Later in this article when we discuss the QuickDraw globals, you will see that the location of the application globals in MDS is important.) All the labels associated with the DS statements become negative offsets from A5 to the proper location in the data area. For example, if you have the following data statements in your MDS file:

thePointds.l1  ;space for a Point
theRect ds.w4  ;4 words for a Rect

You can access those variables by using the name of the variable as an offset from register a5, as in this line of code.

  move.l   thePoint(a5),-(sp) 

In MDS files, DS directives can be placed anywhere in the file, and the assembler will gather them all together and make a single data block. The MPW assembler also gathers up DS statements and makes code modules and the MPW linker combines all the data modules and place them just below the a5 boundary points when the program is loaded. The MPW linker does not give you an automatic 256 byte cushion below the a5 boundary the way the MDS linker does. Labels for DS statements become negative offsets from register a5, however, in much the same way as in MDS. You can access MPW assembler data variables by using the variable name (label) as as offset from register a5, as shown in the previous example.

A better way to declare global variables in MPW is to gather all your DS statements together into a RECORD and then use that data template to access all your globals as fields of the template. For example, to convert the global variables from the MDS example above, you would place the following data declaration at the beginning of your file (after the ‘INCLUDES’ and ‘EQU’ statements but before the first code statements).

MyData RECORD

thePoint ds.l 1

theRect ds.w 4

ENDR

Once you declare a block of globals this way, you can access the individual variables without referencing register a5, since the MPW assembler will automatically generate the ar reference for you. You access a variable by using its data module name ( eg. ‘MyData’) and a field name from the data template (eg. ‘thePoint’), much like a record structure in C or Pascal. For example, you can access the variable at the label ‘thePoint’ with the following code.

    move.l   MyData.thePoint,-(sp)  

You can also declare implicit data modules by using the WITH directive. For example, if you preceded the previous example with the statement:

Start MAIN
 WITH   MyData
 ; Code statements begin here

you could dispense with the data module name when accessing individual fields of the data module, so that the access statement becomes:

    move.l   thePoint,-(sp)  

In summary then; when converting an MDS file to MPW, gather all your DS directive lines into a single data module and give the data module name (the label that appears on the same line as the RECORD directive) in a WITH statement before accessing any of the variables in the data module. You can then access the variables by using their names without worrying about referencing register a5.

Declare QuickDraw Globals

One of the hidden features of the MDS linker is that it places the application globals 256 bytes below the a5 boundary by default. The MPW linker places the application globals right below the a5 boundary, without any cushion. Most casual assembly language programmers (is there such a thing?) just accept the default and don’t really think about it, but it can get you in a lot of trouble when converting between MDS and MPW if you don’t take this difference into account.

In particular, it is common for MDS programs to assume that the QuickDraw globals will be placed just below the a5 boundary, extending downward in memory for 206 bytes. The ROM call InitGraf expects a pointer to the 203rd byte of a 206 byte area for the QuickDraw globals. Because MDS gives a 256 byte cushion below the a5 boundary before the application’s globals, MDS programs typically call InitGraf with a pointer to a long word four bytes below the a5 boundary, as shown below.

; typical MDS technique
 pea    -4(a5)   
 _InitGraf

This works great in MDS programs because the QuickDraw globals grow downward from the a5 boundary but are not large enough to outgrow the 256 byte cushion provided by the MDS linker.

In MPW, you are not so lucky. You must explicitly allocate some global storage for the Quickdraw globals in a data module and then pass a pointer to that module when calling InitGraf. If you don’t do this and use the previous code to initialize QuickDraw, your globals and the QuickDraw globals will share overlapping data space beneath the a5 boundary, and that will cause your program to crash as your program and QuickDraw write over each others globals.

The sample program provided with MPW shows a good method for allocating data space for the QuickDraw globals. Listed below is a simplified version of that method. First, declare a data module for the QD globals. This declaration should come just before or just after your application’s data declaration, but before any code statements, as shown below.

QDGlobals RECORD ,DECREMENT

thePort DS.L 1

white DS.B 8

black DS.B 8

gray DS.B 8

ltGray DS.B 8

dkGray DS.B 8

arrow DS.B cursRec

screenBits DS.B bitmapRec

randSeed DS.L 1

ORG -grafSize

ENDR

Once the QD globals data module is declared, it will be combined with any other data modules in your program and loaded just below the a5 boundary when the program is loaded. Because you don’t know exactly where the QD globals will be loaded in relation to the other data modules (alright, if you dig through the MPW manuals you can probably figure out how the data modules are ordered).

In order to use the QuickDraw globals that are defined as a data module, you should place the name of the data module in the WITH directive along with the name of your application’s data module, as shown below.

Start MAIN
 WITH   MyData,QDGlobals

 ; Code statements begin here

And, once you are using the QD globals you have defined, you can point directly to the QD data area when initializing QuickDraw, as shown below.

; thePort is a variable in QDGlobals
 pea    thePort  
 _InitGraf

By explicitly defining a data area for the QuickDraw globals and pointing to it when initializing QuickDraw you can avoid the data overlap that occurs when you convert an MDS program without thinking about the details.

Misc Details

-- MPW uses IMPORT and EXPORT instead of the XDEF and XREF directives found in MDS.

-- Macros are defined differently in MPW and MDS. For example, take a look at the following macro defined for both MDS and MPW:

MDS macro:

 MACRO   _SFGetFile =
 MOVE.W #2,-(SP)
 _Pack3
 |

MPW equivalent macro:

 MACRO   
 _SFGetFile 
 MOVE.W #2,-(SP)
 _Pack3
 ENDM

-- The labels used with EQU and SET statements in MPW must be in the first column, unlike MDS.

-- RMaker and rez source files are totally incompatable, but you use your old resource files by either “including” them in your rez file or running derez on them to get a rez compatable source file.

-- Make files made by the “Create Build Commands...” menu option in MPW typically are a good way to build your programs, but you can remove the link files “Runtime.o” and “Interface.o” put in the make file by default.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Duet 1.7.0.2 - Use your iPad as an exter...
Duet is the first app that allows you to use your iDevice as an extra display for your Mac using the Lightning or 30-pin cable. Note: This app requires a $9.99 iOS companion app. Version 1.7.0.2:... Read more
BusyCal 3.2.8 - Powerful calendar app wi...
BusyCal is an award-winning desktop calendar that combines personal productivity features for individuals with powerful calendar sharing capabilities for families and workgroups. Its unique features... Read more
Vivaldi 1.13.1008.44 - An advanced brows...
Vivaldi is a browser for our friends. In 1994, two programmers started working on a web browser. Our idea was to make a really fast browser, capable of running on limited hardware, keeping in mind... Read more
rekordbox 5.1.1.0001 - Professional DJ m...
rekordbox is the best way of preparing and managing your tracks, be it at home, in the studio, or even on the plane! It allows you to import music from other music-management software using the... Read more
Opera 50.0.2762.67 - High-performance We...
Opera is a fast and secure browser trusted by millions of users. With the intuitive interface, Speed Dial and visual bookmarks for organizing favorite sites, news feature with fresh, relevant content... Read more
Luminar 2018 1.1.0 - Powerful, adaptive,...
Luminar 2018 is the new full-featured image editor that adapts to the way you edit photos. Over 300 essential tools to fix, edit, and enhance your photos with comfort. The future of photo editing is... Read more
Mactracker 7.7.1 - Database of all Mac m...
Mactracker provides detailed information on every Mac computer ever made, including items such as processor speed, memory, optical drives, graphic cards, supported OS X versions, and expansion... Read more
Spotify 1.0.69.336. - Stream music, crea...
Spotify is a streaming music service that gives you on-demand access to millions of songs. Whether you like driving rock, silky R&B, or grandiose classical music, Spotify's massive catalogue puts... Read more
BetterTouchTool 2.332 - Customize multi-...
BetterTouchTool adds many new, fully customizable gestures to the Magic Mouse, Multi-Touch MacBook trackpad, and Magic Trackpad. These gestures are customizable: Magic Mouse: Pinch in / out (zoom... Read more
BetterTouchTool 2.332 - Customize multi-...
BetterTouchTool adds many new, fully customizable gestures to the Magic Mouse, Multi-Touch MacBook trackpad, and Magic Trackpad. These gestures are customizable: Magic Mouse: Pinch in / out (zoom... Read more

Latest Forum Discussions

See All

Jydge hints, tips, and tricks - Everythi...
Just released on iOS, Jydge is a prequel to Neon Chrome and is set in the same universe. Not just that, but the games play in pretty similar ways with them both being twin stick shooters full of surprises. As you might expect from a 10tons game,... | Read more »
World of Warships Blitz: A guide to tact...
Ahoy mates! It's time to set out on the high seas for some PvP battles, and ... sorry, actually, World of Warships Blitz has nothing to do with pirates. Let's start over. [Read more] | Read more »
Around the Empire: What have you missed...
Around this time every week we're going to have a look at the comings and goings on the other sites in Steel Media's pocket-gaming empire. We'll round up the very best content you might have missed, so you're always going to be up to date with the... | Read more »
Everything about Hero Academy 2: Part 4...
In this part of our Hero Academy 2 guide, we're going to have a look at some of the tactics you're going to need to learn if you want to rise up the ranks. We're going to start off slow, then get more advanced in the next section. [Read more] | Read more »
All the best games on sale for iPhone an...
Another week has flown by. Sometimes it feels like the only truly unstoppable thing is time. Time will make dust of us all. But before it does, we should probably play as many awesome mobile videogames as we can. Am I right, or am I right? [Read... | Read more »
The 7 best games that came out for iPhon...
Well, it's that time of the week. You know what I mean. You know exactly what I mean. It's the time of the week when we take a look at the best games that have landed on the App Store over the past seven days. And there are some real doozies here... | Read more »
Popular MMO Strategy game Lords Mobile i...
Delve into the crowded halls of the Play Store and you’ll find mobile fantasy strategy MMOs-a-plenty. One that’s kicking off the new year in style however is IGG’s Lords Mobile, which has beaten out the fierce competition to receive Google Play’s... | Read more »
Blocky Racing is a funky and fresh new k...
Blocky Racing has zoomed onto the App Store and Google Play this week, bringing with it plenty of classic kart racing shenanigans that will take you straight back to your childhood. If you’ve found yourself hooked on games like Mario Kart or Crash... | Read more »
Cytus II (Games)
Cytus II 1.0.1 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.1 (iTunes) Description: "Cytus II" is a music rhythm game created by Rayark Games. It's our fourth rhythm game title, following the footsteps of three... | Read more »
JYDGE (Games)
JYDGE 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: Build your JYDGE. Enter Edenbyrg. Get out alive. JYDGE is a lawful but awful roguehate top-down shooter where you get to build your... | Read more »

Price Scanner via MacPrices.net

Clearance Apple refurbished iMacs available s...
Apple has previous-generation Certified Refurbished 2015 21″ & 27″ iMacs available starting at $849. Apple’s one-year warranty is standard, and shipping is free. The following models are... Read more
How to save $150-$420 on the purchase of a 20...
B&H Photo has 15″ MacBook Pros on sale for up to $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 15″ 2.8GHz Touch Bar MacBook Pro Space Gray (... Read more
How to save $100-$180 on the purchase of a 20...
B&H Photo has 13″ MacBook Airs on sale for $50-$120 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13″ 1.8GHz/128GB MacBook Air (MQD32LL/A): $899, $... Read more
Save on Beats: $30-$80 off headphones, earpho...
Walmart has Beats by Dr. Dre on sale on their online store for $30-$80 off MSRP, depending on the item: – Powerbeats3 Wireless Earphones: $134, save $65 – BeatsX Earphones: $109, save $40 – Beats... Read more
Deals on clearance 15″ Apple MacBook Pros wit...
B&H Photo has clearance 2016 15″ MacBook Pros available for up to $800 off original MSRP. Shipping is free, and B&H charges NY & NJ sales tax only: – 15″ 2.7GHz Touch Bar MacBook Pro... Read more
Apple restocked Certified Refurbished 13″ Mac...
Apple has restocked a full line of Certified Refurbished 2017 13″ MacBook Airs starting at $849. An Apple one-year warranty is included with each MacBook, and shipping is free: – 13″ 1.8GHz/8GB/128GB... Read more
How to find the lowest prices on 2017 Apple M...
Apple has Certified Refurbished 13″ and 15″ 2017 MacBook Pros available for $200 to $420 off the cost of new models. Apple’s refurbished prices are the lowest available for each model from any... Read more
The lowest prices anywhere on Apple 12″ MacBo...
Apple has Certified Refurbished 2017 12″ Retina MacBooks available for $200-$240 off the cost of new models. Apple will include a standard one-year warranty with each MacBook, and shipping is free.... Read more
Apple now offering a full line of Certified R...
Apple is now offering Certified Refurbished 2017 10″ and 12″ iPad Pros for $100-$190 off MSRP, depending on the model. An Apple one-year warranty is included with each model, and shipping is free: –... Read more
27″ iMacs on sale for $100-$130 off MSRP, pay...
B&H Photo has 27″ iMacs on sale for $100-$130 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 27″ 3.8GHz iMac (MNED2LL/A): $2199 $100 off MSRP – 27″ 3.... Read more

Jobs Board

AppleCare Support Engineer for *Apple* Medi...
# AppleCare Support Engineer for Apple Media Products Job Number: 113222855 Santa Clara Valley, California, United States Posted: 14-Nov-2017 Weekly Hours: 40.00 Read more
QA Automation Engineer, *Apple* Pay - Apple...
# QA Automation Engineer, Apple Pay Job Number: 113202642 Santa Clara Valley, California, United States Posted: 11-Dec-2017 Weekly Hours: 40.00 **Job Summary** At Read more
*Apple* Video Partnerships - Apple (United S...
# Apple Video Partnerships Job Number: 113059126 Santa Clara Valley, California, United States Posted: 15-Nov-2017 Weekly Hours: 40.00 **Job Summary** Partnerships Read more
Sr. Engineering Manager- *Apple* Media Produ...
# Sr. Engineering Manager- Apple Media Products Job Number: 113335268 Santa Clara Valley, California, United States Posted: 17-Jan-2018 Weekly Hours: 40.00 **Job Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.