TweetFollow Us on Twitter

Mar 97 Tips

Volume Number: 13 (1997)
Issue Number: 3
Column Tag: Tips & Tidbits

Tips & Tidbits

By Steve Sisak

Whenever you directly or indirectly modify code, you need to make sure the processor caches are synchronized in order to avoid confusing the processor and/or emulator. This includes not only self-modifying code, but also creating routine descriptors and loading code resources by hand.

If you move 68k code with BlockMove on any system (68k or PowerPC) the caches are flushed automatically (assuming blocks greater than 12 bytes). Use BlockMoveData for blocks containing no code, since they do not require the cache flushing overhead.

Note that on a PowerPC, BlockMove does not flush PPC caches at all. The only reason BlockMove flushes 68k code is for backward compatibility with software written before the '040s. It is unfortunate that a frequently-used routine like BlockMove should have to know anything about instruction caches. On the bright side, most developers do not need to copy PPC code around, since fragment preparation occurs within CFM.

On a PPC machine, calls to the 68k cache flushing routines (including FlushCodeCacheRange and indirectly via BlockMove) do everything necessary to maintain 68k instruction cache coherency. On the original 68k emulator, this meant nothing needed to be done since there was no cached code. On the DR Emulator and Speed Emulator, these calls force the emulator to "throw out" any recompiled code associated with the specified code range.

I know the different cache flushing routines are confusing and not very well documented. Here are some simple rules:

If you are dealing with 68k instructions, use BlockMove or FlushCodeCacheRange. They both specify a range of memory and therefore do not require the newer recompiling 68k emulators to perform a complete cache flush (a very time-intensive operation that can degrade performance significantly.)

If you are dealing with PPC code, you probably don't need to worry about the issue because your code was probably directly or indirectly prepared by CFM. However, if you do generate PPC code on the fly, you should call MakeDataExecutable on the range. Note that this does more than just flushing the cache. It does everything (including flushing the processor's prefetch queue) necessary to deal with newly-generated code.

Hope this helps clear things up. If you want more details, check out the tech note I wrote while I was still at Apple on the DR Emulator.

Eric Traut
Connectix Corp.

(Almost) Painless Mixing of C and Pascal Strings

It's fair to say that most of us have found ourselves in this situation: "The API wants C-style strings and all I have are these Pascsal strings!". The typical solution is to use utilities like PtoCStr and CtoPStr to shuffle the bytes around. Consider the following example where sprintf is being used to create a menu title.

void DescribeFile (Str255 title, Str255 fileName, Str255 volumeName, 
unsigned long size)
{
    // Temporarily convert fileName and volumeName to C strings
 PtoCStr (fileName);
 PtoCStr (volumeName);
    // Use sprintf to describe the file eg. "File foo on bar (120.5K)"
 sprintf ((char*) title, "File %s on %s (%.2fK)",
 (char*) fileName,
 (char*) volumeName,
 (double) size / 1024.0);
    // Convert title, fileName and volumeName to Pascal strings
    // back to Pascal strings
 CtoPStr ((char*) title);
 CtoPStr ((char*) fileName);
 CtoPStr ((char*) volumeName);
}

As you know there's at least one unused byte at the end of the Pascal string, and the string is not a literal, you can take a shortcut by making the Pascal strings "hybrid strings". A "hybrid string" is a null-terminated pascal string. Observe:

void DescribeFile (Str255 title, Str255 fileName, Str255 volumeName,unsigned 
long size)
{
    // Convert fileName and volumeName to hybrid strings
 fileName [fileName [0] + 1] = ‘\0';
 volumeName [volumeName [0] + 1] = ‘\0';
    // Use sprintf to describe the file eg. "File foo on bar (120.5K)"
    // Note that we skip the first byte of the hybrid strings
 sprintf ((char*) &title [1], "File %s on %s (%.2fK)",
 (char*) &fileName [1],
 (char*) &volumeName [1],
 (double) size / 1024.0);
    // ‘title' is not yet a hybrid string, it has an undefined length byte
 title [0] = strlen ((char*) &title [1]);
}

Remember, you can't always get away with this. In the above we know that title, fileName and volumeName are non-const strings with room for 255 characters. Since ‘fileName' and ‘volumeName' will never be more than 63 and 27 bytes respectively, we're sure there is room to add the length byte to the end. Similarly, ‘title' won't break 130 bytes.

Damon Cokenias
<http://www.netgate.net/~cokenias>

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

OnyX 3.2.4 - Maintenance and optimizatio...
OnyX is a multifunction utility that you can use to verify the startup disk and the structure of its system files, to run miscellaneous maintenance and cleaning tasks, to configure parameters in the... Read more
VueScan 9.5.71 - 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
Slack 2.5.1 - Collaborative communicatio...
Slack is a collaborative communication app that simplifies real-time messaging, archiving, and search for modern working teams. Version 2.5.1: New The way we load teams you don't view often has been... Read more
HandBrake 1.0.3 - Versatile video encode...
HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs. Features Supported Sources VIDEO_TS folder, DVD image or real DVD (unencrypted... Read more
Vivaldi 1.7.735.46 - An advanced browser...
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
Vivaldi 1.7.735.46 - An advanced browser...
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
HandBrake 1.0.3 - Versatile video encode...
HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs. Features Supported Sources VIDEO_TS folder, DVD image or real DVD (unencrypted... Read more
Slack 2.5.1 - Collaborative communicatio...
Slack is a collaborative communication app that simplifies real-time messaging, archiving, and search for modern working teams. Version 2.5.1: New The way we load teams you don't view often has been... Read more
BBEdit 11.6.4 - Powerful text and HTML e...
BBEdit is the leading professional HTML and text editor for the Mac. Specifically crafted in response to the needs of Web authors and software developers, this award-winning product provides a... Read more
BBEdit 11.6.4 - Powerful text and HTML e...
BBEdit is the leading professional HTML and text editor for the Mac. Specifically crafted in response to the needs of Web authors and software developers, this award-winning product provides a... Read more

Mudd Masher arrives this week
Atooi Games, the minds behind Totes the Goat and Mutant Mudds, have a new game in the works -- Mudd Masher. The game, a hybrid of the independent studio's first two titles, is expected to launch this week on March 2. [Read more] | Read more »
The best sales on the App Store this wee...
The App Store has quite an exciting lineup of discount games this week that range across a variety of genres. It's a great opportunity to catch up on some of the premium games you may have been holding off on -- and some you can even grab for free... | Read more »
The best new games we played this week
Ah, here we are again at the close of another busy week. Don't rest too easy, though. We had a lot of great new releases in mobile games this week, and now you're going to have to spend all weekend playing them. That shouldn't be too much of a... | Read more »
Rollercoaster Tycoon Touch Guide: How to...
| Read more »
Rabbids Crazy Rush Guide: How to unlock...
The Rabbids are back in a new endless running adventure, Rabbids Crazy Rush. It's more ridiculous cartoon craziness as you help the little furballs gather enough fuel (soda) to get to the moon. Sure, it's a silly idea, but everyone has dreams --... | Read more »
Tavern Guardians (Games)
Tavern Guardians 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Tavern Guardians is a Hack-and-Slash action game played in the style of a match-three. You can experience high pace action... | Read more »
Slay your way to glory in idle RPG Endle...
It’s a golden age for idle games on the mobile market, and those addictive little clickers have a new best friend. South Korean developer Ekkorr released Endless Frontier last year, and players have been idling away the hours in the company of its... | Read more »
Tiny Striker: World Football Guide - How...
| Read more »
Good news everyone! Futurama: Worlds of...
Futurama is finding a new home on mobile in TinyCo and Fox Interactive's new game, Futurama: Worlds of Tomorrow. They're really doing it up, bringing on board Futurama creator Matt Groening along with the original cast and writers. TinyCo wants... | Read more »
MUL.MASH.TAB.BA.GAL.GAL (Games)
MUL.MASH.TAB.BA.GAL.GAL 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: ENDLESS UPGRADES. CONSTANT DANGER. ANCIENT WISDOM. BOUNCY BALLS. Launch Sale, 40% OFF for a very limited time!!! MUL.... | Read more »

Price Scanner via MacPrices.net

27-inch 3.3GHz 5K iMac on sale for $2099, sav...
B&H Photo has the 27″ 3.3GHz 5K Apple iMac on sale for $2099.99 including free shipping plus NY sales tax only. Their price is $200 off MSRP. Amazon also has the 27″ 3.3GHz 5K iMac on sale for $... Read more
21-inch iMacs on sale for up to $111 off MSRP
B&H Photo has select 21″ Apple iMacs on sale for up to $110 off MSRP, each including free shipping plus NY sales tax only: - 21″ 2.8GHz iMac: $1189 $110 off MSRP - 21″ 1.6GHz iMac: $999 $100 off... Read more
12-inch 1.2GHz Retina MacBooks on sale for $2...
Newegg has the 12″ 1.2GHz Space Gray Retina MacBook (sku MLH82LL/A) on sale for $1349.99 including free shipping. Their price is $250 off MSRP, and it’s the lowest price available for this model.... Read more
13-inch MacBook Airs on sale for $100 off MSR...
B&H Photo has 13″ MacBook Airs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 1.6GHz/128GB MacBook Air (MMGF2LL/A): $899 $100 off MSRP - 13″ 1.6GHz/... Read more
9-inch 32GB Silver iPad Pro on sale for $549,...
B&H Photo has the 9.7″ 32GB Silver Apple iPad Pro on sale for $549 for a limited time. Shipping is free, and B&H charges NY sales tax only. Their price is $50 off standard MSRP for this model... Read more
13-inch 2.0GHz Apple MacBook Pros on sale for...
B&H has the non-Touch Bar 13″ 2.0GHz MacBook Pros in stock today and on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray (... Read more
15-inch Touch Bar MacBook Pros on sale for up...
B&H Photo has the new 2016 15″ Apple Touch Bar MacBook Pros in stock today and on sale for up to $150 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.7GHz Touch Bar... Read more
12-inch Retina MacBooks on sale for $1150, $1...
B&H has 12″ 1.1GHz Retina MacBooks on sale for $150 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 12″ 1.1GHz Space Gray Retina MacBook: $1149 $150 off MSRP - 12″ 1.1GHz... Read more
Apple restocks refurbished 11-inch MacBook Ai...
Apple has Certified Refurbished 11″ MacBook Airs (the latest models recently discontinued by Apple), available for up to $170 off original MSRP. An Apple one-year warranty is included with each... Read more
Apple Park Opens to Employees in April With T...
Apple has announced that Apple Park, the company’s new 175-acre campus, will be ready for employees to begin occupying in April. The process of moving more than 12,000 people will take over six... Read more

Jobs Board

*Apple* Wireless Lead - T-ROC - The Retail O...
…of knowledge in wireless sales and activations to the Beautiful and NEW APPLE Experiencestore within MACYS. THIS role, APPLE Wireless Lead, isbrandnewas MACYS Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
*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* Retail - Multiple Positions- Chicago...
SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Manager *Apple* Systems Administration - Pu...
Req ID 3315BR Position Title Manager, Apple Systems Administration Job Description The Manager of Apple Systems Administration oversees the administration and Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.