America Online
APPLE II DEVELOPMENT FORUM CONFERENCE LOG
Tuesday, December 18, 1990 10:00 p.m. Eastern Time
Topic: Assembly Language Programming
Forum Leader: Dave Sugar (AFL Dyfet)
AFL Dyfet Okay, good evening all, and welcome to the Apple II Development
AFL Dyfet Forum. Tonight we will be discussing Assembly Language
Programming
AFL Dyfet and the latest in Coach Hayden's life :).
AFL Dyfet I see Scott has snuck in with the first question for tonight
:)...GA Scott...
AFL Scott Does anyone have an alternative method of detecting low memory
situations? The method in the IIGS
AFL Scott Technotes and the method in TB Ref Vol3 doesn't really work
AFL Scott with my application.
AFL Dyfet GA Dave...
Dave Lyons Why/when doesn't it work? We can probably come up with some
refinements.
AFL Scott Well, basically, when the 32k handle gets purged, some damage has
already occurred. This leaves
AFL Scott my app in a rotten state (note that this is just for testing
purposes. The method I used
AFL Scott in the final release of Allison is still employed in the release).
See, I changed things to
AFL Scott allow the memory manager to do it's stuff. The release version of
Allison _depends_ on memory
AFL Scott to be fragmented, but this is very wasteful, IMHO.
AFL Scott I decided to change it to see what happens. The results weren't
good. GA.
Dave Lyons I'm missing something--do you know how the damage is occuring?
Dave Lyons I don't see how fragmentation helps.
AFL Scott Well, for starters, the text in several dialogs gets trashed.
Fragmentation ensures Quickdraw has
AFL Scott enough memory in most cases. And the chunks in varied memory
configurations are 32k.
AFL Scott On my machine, I've not seen this method fail no matter what I run
or what I do.
AFL Scott I haven't seen it fail on other machines, but I don't trust it.
It's very dependant on what the
Dave Lyons So is the problem that your app can suck up all the big chunks,
leaving QD insufficient memory?
AFL Scott user does and has loaded.
AFL Scott Big chunks.. in 32k and 85 byte swatches, yup.
Dave Lyons How 'bout this: Keep a *second* chunk of throw-away memory
allocated,
Dave Lyons and when you notice that your watchdog 32K handle got purged (and
maybe all got re-used!), you can
Dave Lyons dispose of the second one & be guaranteed enough free memory to
put up an out-of-memory dialog.
Dave Lyons Does that make sense?
AFL Scott Yes. You're saying reserve 64k and use the first 32k as a signal.
Well, that's fine, except the
AFL Scott app has to run in a 1meg ROM03 GS. The app needs alot of memory
to do what it has to do.
AFL Scott It's a toughie, and I don't think there's going to be a good
answer given the memory requirement of
AFL Scott the App.
Dave Lyons Understood, but keeping two chunks would seem to be at least as
good as creating extra fragmentation,
Dave Lyons no?
AFL Scott Yes, it would. I just cannot guarantee there will be 64k at the
outset. I'll try it again and see
AFL Scott what happens.
Dave Lyons Maybe both chunks don't have to be 32K--consider
Dave Lyons the relationships of the sizes of handles your app allocates,
maybe.
AFL Scott Explain. I don't follow.
Dave Lyons Well, I'm trying to get at this--
Dave Lyons if you allocate a lot of 32K handles normally, then you're likely
to
Dave Lyons make your watchdog 32K handle go away *and get completely reused*
all at once. So the technote
Dave Lyons is a good starting point, but you can fine-tune it to your
application by being paranoid & seeing
Dave Lyons how to let the system always have enough memory to put up your
warning dialogs.
Dave Lyons You could even do stuff like:
Dave Lyons Whenever you allocate a big handle, allocate some slop, allocate
your handle, and deallocate your
Dave Lyons slop. Then you haven't sucked up the last available memory if you
succeed in getting your
Dave Lyons handle. (If you have a watchdog handle, locking it during your
big allocation would have the same
Dave Lyons effect, as long as you're prepared for your big NewHandle to
fail).
Dave Lyons (ga)
AFL Scott Ok.. that makes sense. How about trying to allocate memory until
a failure, counting the handles and
AFL Scott using that as a watchdog, instead?
AFL Scott (should read.. gobble everything, give it back and
Dave Lyons Not sure I understand--have lots of smaller watchdogs instead of
one big one??
Dave Lyons Doesn't sound like a plan--if you allocate until failure all the
time, you'll make everything
Dave Lyons that's purgable get purged, unnecessarily.
AFL Scott Not really.. Just do it at startup, count the chunks subtract two
or so from the count, save the count
AFL Scott then kill all the "count handles". If I understand you right,
you're saying that I can purge restart
AFL Scott able apps doing it this way, right? I mean if the tools are
started before this happens, their memory
AFL Scott shouldn't get purged, right?
Dave Lyons DAs/etc could allocate memory while your app is up, though.
Dave Lyons Yes--not just restartable apps, but other stuff in
Dave Lyons memory that is purgable, like QD's work buffer & who knows what
else. If you can avoid purging
Dave Lyons everything, that's good. That why I'm recommending stuff like
"allocate with temporary slop".
Dave Lyons ga
AFL Scott Ok... I see your point. I'll try your suggestion and see how that
works. Thanks, Dave!
AFL Scott Done.
Dave Lyons okee dokee
AFL Dyfet Okay, who has the next question for tonight?
Dave Lyons I think Matt does.
Matt DTS My question: "Can we talk about something other than Scott's
memory allocation?"
Matt DTS :)
AFA Gary J Sure, Matt :)
AFL Scott (Sounds good to me. I'm tired of it, too.)
Coach101 What do you want to talk about Matt ?:)
AFL Scott :)
Matt DTS Something that more than Dave and Scott can get involved in. :)
AFL Scott Printing!:)
AFL Dyfet GA Scott :)
AFL Scott Is it necessary for the application to check what type of printer
is being used? Serious question.
AFL Scott (some how I knew he'd answer!:)
AFL Dyfet Yes, go ahead Matt...
Matt DTS It depends on what you're going to do with the information.
Usually not.
Matt DTS If you want to use driver-specific features, though, you should
check the iDev value for the one you
Matt DTS want (or use some other identification for $8001 iDev values -
maybe the driver file name). GA.
AFL Scott Ok, so Pic Comments shouldn't mess up well behaved
AFL Scott drivers?
Matt DTS Most PicComment *numbers* are reserved, so they shouldn't mess up
well-behaved drivers. However, if
Matt DTS you're using driver-specific PicComments, it certainly wouldn't
hurt to compare the iDev value just to
Matt DTS be safe. GA.
AFL Scott (make PicComments one word :))
AFL Scott Ok, I think I may have to do that. Harmonie seems to not like
PicComments. Thanks. Done!:)
Matt DTS Be sure to tell BurgerBill about it, Scott.
AFL Scott Wheels are in motion!:)
AFA Gary J :)
AFA Gary J How are the Seven Hills drivers?
Matt DTS (Was that fun?)
AFA Gary J Have you tried them?
AFL Scott Not here, I didn't have time test them at Applefest.
Matt DTS I've been impressed by what I've seen of the Seven Hills
drivers.
AFA Gary J That's good to know :)
Matt DTS I'm really impressed with how fast Steve learned how to write
Printer Drivers for Independence.
AFL Dyfet Okay, does anyone else have a non memory manager and non printer
question :)?
AFL Dyfet GA Scott
AFL Scott I haven't tried this yet, but it's going to pop up... is it
possible to start a user toolset using
AFL Scott StartTools? If not, and I wish to use StartTools to start the
"native" tools, how does one obtain the
AFL Scott direct page page space necessary for user toolset and does the
user toolset have to have the same
AFL Scott direct page as the "native" tools?
AFL Scott (dumb question, right?)
AFL Dyfet GA Dave...(I'm interested in user tools too :)
Dave Lyons LoadOneTool, LoadTools, and StartUpTools only know about system
tool sets. So, you have to
Dave Lyons get the code into memory on your own. For ex: Imbed it in your
app (ick), use InitialLoad or
Dave Lyons InitialLoad2, or use LoadResource with the CodeResConverter logged
in for your resource
Dave Lyons type.
Dave Lyons Once the code is in memory, use SetTSPtr (which *does* have a
System vs. User tool set flag) to
Dave Lyons tell the system where your tool set's function pointer table (FPT)
is.
Dave Lyons Direct page space--either have the app allocate it with NewHandle,
attributes $C015, and pass the
Dave Lyons pointer to the toolset's StartUp function, or have the toolset
allocate it itself (using its own
Dave Lyons ID, as determined by calling MMStartUp from the
Dave Lyons tool set), or using a memory ID specified by the application (as a
parameter to the StartUp function,
Dave Lyons or whatever). The tool set can use its work area pointer (GetWAP,
SetWAP) to store whatever
Dave Lyons information it wants--usually you'll just have the pointer to your
direct-page space, if any.
Dave Lyons ga
AFL Scott Thanks Dave!:)
AFL Scott done.
Dave Lyons (Of course, see technotes, too.)
AFA Gary J Any more questions, Scott???? :)
AFL Dyfet Thanks Dave!
AFL Dyfet Go ahead Coach!
Coach101 If two or more items (app & DA for example) utilize the same Run
Time Library, will the system
Coach101 have one or two copies of the library in memory?
AFL Dyfet I don't believe the IIgs loader has a concept of shared code
images....
AFL Dyfet (shades of VMS here)
Dave Lyons [I don't know. Never used run-time libraries. I thought they
were there to be shared, but I'm
Dave Lyons not sure.]
AFL Dyfet GA Winkie...
WinkieJim SHouldn't be a problem, because almost no one uses them :)
AFA Gary J Q = Coach (WinkieJim)
Coach101 But, they are a real neat idea and do work with the APW linker
(LinkIIGS)..... done
AFL Dyfet I think you stumped 'em Coach :)
WinkieJim Neat idea that never took off...
Dave Lyons (Yeah, you win a prize--you get to write in to DTS and wait until
the dude responsible for
Coach101 Yeah, I thought for sure Matt would jump on it since it was a ?
from other than Scott :)
Dave Lyons the Loader comes back from vacation. :)
AFL Scott :)
Coach101 Nah, its real easy to test. I was just curious and would rather
avoid the time to do the test....
Coach101 ga
AFL Dyfet My guess is that it will load a seperate image :)...I guess we
will eventually
AFL Dyfet find out who is right...
AFA Gary J I'd guess the same thing, Dave.
Matt DTS I *believe* the loader knows about run-time libraries and only
keeps one copy in memory.
Matt DTS I would also bet that this part of the Loader hasn't been
extensively field-tested. :)
Coach101 I tend to agree with Matt & Dave, but given the ill use of RTLs,
who knows....
Coach101 the system may even barf in that situation...
WinkieJim Since the library could change values in itself it would be
dangerous not to
WinkieJim have separate copies...I'd think.
AFL Dyfet I could see the possibility of stomping on data in the RTL if two
apps are
AFL Dyfet working with the same image (or as Winkie just said)
Coach101 I know it works fine for the single user RTL though... (cuts
linker time too!)
Dave Lyons (*If* the loader supports shared RTLs, the idea would be that RTLs
are supposed to be prepared
Dave Lyons to have multiple clients. Perfectly possible.)
Coach101 But, there is little value to an RTL if it is a single user entity
(barring the reduction in
Coach101 linker time).
Coach101 It is kind of like a *callable* user tool set....
Dave Lyons And reduction in disk space, if you have several apps that use the
same library at different times.
AFL Dyfet If the library only uses stack reference or dynamically allocated
work space,
AFL Dyfet it certainly could function as a shared image if supported by the
loader in
AFL Dyfet that manner. The burden would then simply be on the programmer to
write it
AFL Dyfet carefully :)
WinkieJim Oh, in that case it would always work perfectly...:)
Coach101 A big advantage of them, is that you can have
Coach101 several apps that use a common library. If you
Coach101 enhance the common library, you do not even need
Coach101 to re-link the apps. Just reform the library and
Coach101 immediately all the apps are using the new, improved, enhanced,
faster, less buggy, etc. library
AFL Dyfet Well, I guess we will have to wait to find out about how RTL's are
supported...
AFL Dyfet Okay, do we have any other questions for tonight?
Coach101 I will run the test next week....
AFL Dyfet GA Winkie...
WinkieJim I don't suppose there's any other way to put up a modal dialog
from a resource
WinkieJim other than using FakeModalDialog?
Dave Lyons Sure, just do part of what FakeModalDialog does, but do it
yourself. Call NewWindow2 to create
Dave Lyons your window, and go into a sepaate TaskMaster loop where you only
turn on the TaskMask bits you
Dave Lyons want. (For example, leave off the one that brings windows to the
front when you click on them.)
Dave Lyons If you're doing a complicated dialog, it's probably worth your
while to use FakeModalDialog instad
Dave Lyons of doing a lot of the work yourself. ga
WinkieJim Errr...that would be great for an App, but it's an NDA...
Dave Lyons Why not from an NDA?
WinkieJim I've always thought NDA's can ony have one window?
Dave Lyons You can do *modal* loops in your NDA--just *don't* allow
TaskMaster to do window updating for you,
Dave Lyons or you'll make the app's window-update routines get called with
the wrong CurResourceApp set. Turn
Dave Lyons off the task-mask update bit & respond to selected updates
yourself, when the event comes back from
Dave Lyons TaskMaster.
Dave Lyons You can only have one *modeless* window in an NDA--modal ones are
a different story. Just
Dave Lyons the main window is special to the system (no need to call
SetSysWindow on your modal windows, and
Dave Lyons I actually recommend your don't).
WinkieJim ah....
WinkieJim Now I just have to decide if it's worth the trouble to use the
resource window
WinkieJim or just do it the old fasioned way...
WinkieJim Wish List: Dialog Resources :)
Dave Lyons I suppose you want all the neat stuff that Extended Controls can
do added to the Dialog Manager,
Dave Lyons right?)
WinkieJim Not really, just want to be able to keep the dialog in a resource
so it can
WinkieJim be changed and updated easy.
Dave Lyons Well, once you have FakeModalDialog *or* a small collection of
your own routines, if you don't
Dave Lyons like FMD, existing window/control resources make great dialog
resources!
Dave Lyons Extended controls are spiffy and will be spiffier.
WinkieJim I have nothing against FMD, but I didn't realize I could open
another window
WinkieJim in a NDA...
WinkieJim Does FMD handle the updates right?
Dave Lyons (Never seen Memory Bar's about box? :)
Dave Lyons FMD has a flag bit where you tell it whether to update windows
Dave Lyons besides the dialog window. Just *don't* set that bit when you
call FMD from a NDA, and life
Dave Lyons is good.
WinkieJim Sounds good.
Dave Lyons Eventually I would like to make the restriction unnecessary--that
would
Dave Lyons mean the Window Manager would have to "know" the right resource
app for each window. This is
Dave Lyons probably do-able, but not in 5.0.4.
Dave Lyons (ga)
WinkieJim (and I don't use Memory Bar...I use a better memory bar NDA :)
WinkieJim IBdone
Dave Lyons (How 'bout the Control Panel's "Help" window? That's modal.)