AppleLink
APPLE II DEVELOPMENT FORUM CONFERENCE LOG
August 8, 1989  10:00 p.m. eastern time
Topic:  Assembly Language
Forum Leader:  Dave Sugar  (AFL Dyfet)

A GibberFC Coach.... I think I might have a fix for Aple and the unclaimmed
          interrupt problem.
A GibberFC I am using a Practical Prepherials External... and I haven't run
          into a problem
A GibberFC yet.... I have been using the different modem for about 3 days
          now
Nagendra   I HAVE A QUESTION FOR PRE START
Nagendra   HOW DO I SET UP A FONT IN MEMORY?
Coach101   Hmmmmmm......   I am beginning to suspect that some interrupts are
          not
AFL Dyfet  Okay, LISTEN UP, we will be starting tonight's conference NOW
          *CRACK*
A GibberFC Got rid of my Internal Datalink 2400
A GibberFC Owwwwch
Coach101   claimed by ALPE when the 6850 reports errors via interrupts...
AFL Dyfet  Good evening and welcome to The Apple // Development Forum Tuesday
          night
AFL Dyfet  conference.  We WILL be using PROTOCOL here tonight, (And yes,
          your question
AFL Dyfet  was not forgotten, Nagendra...), which means that from now, if you
          wish to
AFL Dyfet  ask a question, please enter a '?' on a line by itself, and if you
          wish to
AFL Dyfet  comment on the question currently being discussed, enter a '!' on
          a line by
AFL Dyfet  itself.  Tonight's topic is Assembly Language Programming, and our
          first
AFL Dyfet  question will be from  Nagendra.  You have the floor now,
          Magendra, please go
AFL Dyfet  ahead...
Nagendra   I WANTED TO KNOW HOW TO SET UP A FONT IN MEMORY
Nagendra   MEANING HOW DO I TELL THE TOOLS THAT I WANT THE NEXT CHARACTER
          OUTPUT
Nagendra   TO BE IN THE FONT I SPECIFY
A2GS       Crowded!
AFL Dyfet  Are you wishing to use fonts already located in the fonts
          subdirectory or a
A GibberFC (afk)
AFL Dyfet  new font from your application only?
Nagendra   A NEW FONT NOT IN THE DIRECTORY
AFL Dyfet  Okay, who feels like tackeling this one tonight (looking at
          Matt)...GA Matt :)
Matt DTS   Given the lack of takers, may I suggest this moves to the message
          base where it can get the time it
Matt DTS   probably needs?  <GA>
AFL Dyfet  I think I will have to agree with you there, Matt...any other
          takers?
DavidD117  taken
AFL Dyfet  Okay.  GA Nagendra, you still have the floor...
Nagendra   I'M USING THE SETFONT(HANDLE) TOOLCALL, BUT THEN WHEN I DISPLAY
Nagendra   SOMETHING ON THE SCREEN, THE OUTPUT IS BLANK..
AFL Dyfet  GA Dave...seems we're narrowing down :)
Dave Lyons Lemme see if I understand this:  Are you loading a disk-based
          font, in exactly
Dave Lyons the same format as the ones in the Fonts directory, into a
          (locked) handle of
Dave Lyons your own, and using SetFont on it?  (If so, there is a problem.)
Nagendra   yes, that's a what I'm a doing
Dave Lyons Oh--and are you dereferencing the handle?  (SetFont takes a
          *pointer*, not
Dave Lyons a handle.)
Dave Lyons The first problem is that a font like the ones in the Fonts
          directory has some
Dave Lyons stuff *before* the real QuickDraw font.  There's a File Type Note
          on this,
Dave Lyons in the July batch, I think.  It's just a one-byte length count
          followed by
Dave Lyons a string that's the name of the font--but you'll have to skip over
          that before
Dave Lyons using SetFont on that data.
Matt DTS   (May batch, I think.)
Dave Lyons (Ok.)
Matt DTS   <GA>
Nagendra   O.K. what if I move the font into the /fonts/ directory?
Dave Lyons Then the new font is accessible the *next* time you start up the
          Font Manager,
Matt DTS   ! (unless you wanna keep going)
Dave Lyons which usually means the next time you run your program.  Shutting
          down and
Matt DTS   ! (anyway; Dave's missing something)
Dave Lyons restarting the FM is a possibility if you're the application, but
          you shouldn't
Dave Lyons do it unless you feel comfortable with the consequences.  What am
          I missing,
Dave Lyons Matt?
Nagendra   I don't know to approach it that way
AFL Dyfet  GA Matt...
Matt DTS   SetFont isn't an FM call - it's a QD call.  There may not be an FM
          here.  <GA>
Nagendra   That's correct it's tool 4, function 148
Dave Lyons (I wasn't missing that, I was just ignoring it.  To use the Font
          Manager,
Dave Lyons you'd use InstallFont instead of SetFont.)
AFL Dyfet  Okay...I think at this point we should probably move this to the
          appropriate
AFL Dyfet  discussion folder, so that others may have a chance to benifit
          from this
AFL Dyfet  insight...
AFL Dyfet  I see that the floor is now open for questions...feel free to get
          yours in :)
SUPERMAN20 I have a question!
AFL Dyfet  Okay, Superman, GA...
SUPERMAN20 How do you access the auxillary memory in the IIE/IIC?
AFL Dyfet  That depends on what you wish to do...there is a firmware routine
          at $c3xx for
AFL Dyfet  moving chunks of memory back and forth between main and auxillory
          memory.  You
AFL Dyfet  can also, concievably, use the ProDOS 8 ramdisk driver block I/O
          calls for the
AFL Dyfet  same purpose.
AFL Dyfet  GA Parik.
AFA Parik  $C311 moves memory between main and aux.  $C314 transfers control
          from main
AFA Parik  and aux.  you can also use softswitches to transfer between main
          and aux.
AFA Parik  ga
AFL Dyfet  You have to be careful using the softswitches though..you do not
          want the
AFL Dyfet  piece of code that is doing that to be in a part of memory that is
          being
AFL Dyfet  switched out :)
AFL Dyfet  Any further comments?
AFL Dyfet  Okay, I guess we will be turning the floor over to Parik,
          then...GA Parik...
AFA Parik  does anyone know of a good utility for Orca/M or APW that will let
          you see what
AFA Parik  parts of your source code are unused?  maybe something that uses
          the obj files?
AFA Parik  ga
AFL Dyfet  You mean to find dead end code and such?  Hmm...a tricky thing to
          do, even for
AFL Dyfet  most optimizing compilers :)..>GA Matt.
Matt DTS   I don't know of one.  It would be tricky to do all right,
          especially given GS tendencies...
Matt DTS   ...to push addresses on the stack and RTS or RTL.  :)  Sorry.
          GA.
AFL Dyfet  Coach?  GA...
Coach101   I have seen it done by compilers (and cursed the sons-of-bitches
          for
Coach101   complaining when I was commenting out code in a debugging session)
          but
A GibberFC cancell ?
Coach101   have never seen it done with object units.  I think it would be
          nearly
Coach101   impossible to do it from object units...   sorry....   gs
AFA Parik  bummer :)  how big is a relocation dictionary?
Coach101   gs ==> ga
AFA Parik  (sorry if I ramble, just thinking of things I've always wondered
          about :)
AFL Dyfet  Well, in regards to the relocation dictionary, since the 65xxx can
          do very
A GibberFC (brb)
AFL Dyfet  little with relative addressing, any memory reference will have to
          be adjusted,
AFL Dyfet  so they can get quite large...:)
AFA Parik  so is it better to use BRLs than jumps, etc?
AFL Dyfet  GA A2GS...
A2GS       I would assume that the larger your SRC the larger the Dictionary
          and would...
A2GS       have to definitely agree that BRL's are the way to make them
          shorter if...
A2GS       your really worried :)
AFA Parik  <done> :)
AFL Dyfet  I believe BRL's take a few more cycles than a pure JMP, but yes,
          there would
AFL Dyfet  not be a relocation entry for a BRL, and hence the resulting
          object module
AFL Dyfet  would be smaller on disk (although it will, after loading, still
          use the same
AFL Dyfet  ammount of memory, of course).
AFA Parik  (i wonder what orca/c and pascal and tml pascal II...etc use)
AFL Dyfet  GA A2GS...
A2GS       the # of cycles depends on whether your doing a JML as opposed to
          a JMP...
A2GS       in which case it would be the same. :) (just maintaining a level
          of accuracy)
AFL Dyfet  I would assume we would be comparing to a JMP, since BRL's cannot
          go beyond the
AFL Dyfet  current code segment.
A2GS       good point!
AFL Dyfet  Okay, I believe our next question is from Joe...Ga Joe...
JSchober   Mmm... _DrawString has really been acting strangely on me lately.
          I use it to
A2GS       Bra's tend to be equal or shorter to JMP's depending on whether
          their direct
A2GS       or nt.
JSchober   put comments and titles around my dialogs (modal), but instead of
          drawing the
JSchober   text I want it to, it just puts up all sorts of neat symbols.
          I've taken a
JSchober   look at what's being pushed onto the stack, tracing with NList,
          and it seems to
JSchober   all be in order.  Am I just flakey??  (What makes it worse is that
          this is
JSchober   =generated= code, from DLU)  GA...
Matt DTS   (drat; he beat me)
Dave Lyons Since you get symbols and not just garbage pixels, the Font is
          probably still
Dave Lyons okay.  Are you pushing a pointer to something that can't move?
          (Don't pass
Dave Lyons a pointer to a string in an unlocked&unfixed handle.)  ga
AFL Dyfet  Matt?  GA...
JSchober   Mmm, well, it's to a static text string within the code itself..
Matt DTS   Mine was simpler - make sure the high bits are cleared.
          (sometimes assembler directives can
Matt DTS   sneak up on you.)  GA.
Dave Lyons What language is DLU generating the source for, Joe?
JSchober   Zat's not it, Matt -- sometimes I get parts of directory listings,
          mail from
JSchober   ALink, anything.  ;)  '816, Dave.  I'm using pure assembly, no
          bizarre multi-
JSchober   language development.
Matt DTS   Are you using 16-bit addressing and pushing a pointer when the B
          register may not be set?
Matt DTS   (B = DBR)
Dave Lyons (That was my next guess.)
Dave Lyons (So DR=1. :-)
Matt DTS   (that's *always* his next guess.  It's embarassing at restaurants
          when they're out of Pepsi.)
JSchober   Mmmmm... I'm pushing a pointer to a text string.  Don't think I
          fiddle with
JSchober   the registers.  Funny thing is, some DrawStrings work, others
          (still made by
Matt DTS   What's the "push the pointer" code look like?
JSchober   DLU) don't.  Seems random.
JSchober   Hold a sec, Matt.
Dave Lyons So you have PUSHLONG #xyz, or PEA xyz|-16, PEA xyz ??
Matt DTS   (or ph4 #xyz, for ORCA/Maniacs)
AFL Dyfet  :)
JSchober   PushLong #SvTypDLHeader, _DrawString, [...]
A2GS       Is it always the same string which get's screwed up?
JSchober   SvTypDLHeader   DW 'Save picture in which format:'
JSchober   Yes, A2GS.
JSchober   (the colors are all correct, BTW, and I use a MoveTo to put the
          symbols in the
JSchober   right place... %)
A2GS       You sure your not changing the DBR anytime previously?
Matt DTS   What's the "DW" directive do?
JSchober   I'm =pretty= sure, but I'll check.  Think it's identical to STR,
          Matt.
Dave Lyons Have you located the string in memory before and/or after the code
          gets
Dave Lyons executed?
JSchober   After.  It's in the same place where the PEA's in the code are
          pointing to.
Matt DTS   (The debugger init comes in real handy for these kinds of
          things.)
Matt DTS   Something else must be wrong.  Send us a sample that fails and
          we'll track it down.
JSchober   Ok, it'll be in your box right after this chat.  Thanks.  :)
Dave Lyons After the thing gets drawn wrong, the string is still in memory &
          correct?
JSchober   Yuppers, Dave.
A2GS       try doing a phk, plb before running the DrawString routine if you
          are
A2GS       supposed to be in the same bank as where your code is executing
          from.
Dave Lyons The B register doesn't matter for DrawString--if he's using PH4 #
          or whatever,
Dave Lyons it doesn't matter for that, either.
Dave Lyons (ga)
Matt DTS   (ga)
A2GS       is he using a label for the pointer push address?
JSchober   Right, it's a long address.  Well, I'll just beam over the code
          fragment.
JSchober   Thanks.  :)   GA...  (yup, A2GS...)
AFL Dyfet  Okay, any further comments?
JSchober   (but I only have one segment of code)
AFA Parik  (never mind mine)
AFL Dyfet  (your question, Parik?)
A2GS       could have something to do with it, would have to look at src :)
AFA Parik  yes
AFL Dyfet  Okay, the floor is open to questions again...
A2GS       Why does hair turn gray (sometimes)? hehe :)
AFL Dyfet  Don't all rush now...
Matt DTS   I think Earthquakes are a large part of it, A2GS.
AFL Dyfet  I heard about that, Matt...
A2GS       Been to San Fran. lately?
Matt DTS   The quake was centered about 5-15 miles south of Cupertino.
AFL Dyfet  5.1 was it?
Matt DTS   5.1, with 4.1 and 4.2 aftershocks.
A2GS       Their goes the new GS.
A2GS       The Apple II production plant fell into a huge hole created by the
          earthquake..
AFL Dyfet  Still some aftershocks for 5.0??? :)
AFA Gary J How was the 8th floor?  (or whatever it is)
A2GS       as claimed by Apple.
Matt DTS   The Apple II production line is in Singapore!
A2GS       Their feeling the aftershocks.
AFA Gary J Ahhh!  It fell all the way to China!
AFA Gary J Wow.
AFL Dyfet  The Mac plants are still in the US, I believe...:)
Dave Lyons We're only on the 3rd floor...no damage in *my* cube.
A2GS       I wonder why?  Mothers always like to keep their children near
          them :)
Dave Lyons (My cube doesn't *need* any damage, of course...you couldn't tell
          by just
Dave Lyons *looking* at it that an earthquake hadn't caused all that stuff to
          be all over
Dave Lyons the floor. :)
Matt DTS   The main US Mac factory is in Fremont, CA; the main international
          one is in Cork, Ireland.
AFL Dyfet  Fremont is at the end of one of the Bart lines, from what I
          recall...
AFL Dyfet  South one, I believe...
Matt DTS   Anything else?
AFL Dyfet  The floor is still open for questions....feel free to ask
          away...
A2GS       Anyone had any experience with programming a Ray Tracer?
AFL Dyfet  Ray tracing?  No, I have not...now there is a good use for Math
          co-processors:)
AFL Dyfet  (I almost typed Matt co-processors :)
AFA Gary J heheh
A2GS       Anyone familiar with the algorithms associated with a Ray
          Tracer?
Matt DTS   Just what you need - extra power working at being me.
JSchober   Might want to get in touch with AFL Scott.  He's the graphics guru
          of ALink. :)
A2GS       Thanks.
AFL Dyfet  This is true...
AFL Dyfet  GA Doctor, you have the floor...
Doctor Why Any words of wisdom on using SetHeartBeat?
Matt DTS   We have words on ClrHeartBeat.  Boy, do we have words.
AFL Dyfet  Just don't use purge to remove your task when your done! :)...GA
          A2GS...
AFA Parik  and sentences?  and paragraphs?
A2GS       I could very well be wrong, but doesn't Gary Little have some
          example src in
A2GS       his book on operating systems?
AFL Dyfet  I do not recall offhand...the format and rules for a heartbeat
          task are fairly
AFL Dyfet  easy to follow, however....I should know, even I was able to do it
          :)
AFA Parik  yes - Little has stuff on heartbeat, 1 second, and other interrupt
          routines
A2GS       thought so, thanx
AFA Parik  in Exploring GS/OS and ProDOS 8
JSchober   Gotta cruise -- see y'all later!
AFL Dyfet  One think to keep in mind is that your heartbeat task will have to
          reset the
Matt DTS
A2GS       bye
AFL Dyfet  task tick counter when it's called, or your task will never be
          called again!
A2GS       I think its easier to use the softswitches and then patching the
          interrupt
Doctor Why Can the Heartbeat routine be written a higher level language?
A2GS       handler pointer in bank E1.
AFL Dyfet  I think that would be a no-no, A2GS :)
Matt DTS   It's easier to crash the system that way, for sure.
AFL Dyfet  Or as Matt said...
AFA Parik  why would it crash the system?
Doctor Why I seem to pretty good at that already.  :)
A2GS       against Apple, true, but easier to keep track of what's going on
          every step
A2GS       of the way.
Matt DTS   Softswitches and interrupt vectors are generally system resources
          that are finicky in nature.
Matt DTS   It especially tends to disagree with AppleTalk.
AFL Dyfet  And subject to change...
AFA Parik  but the main int vector is guaranteed not to change.  as long as
          you jsl back
AFA Parik  to the original one, I don't see why it would be "bad"?
AFA Parik  (er, JML
A2GS       Dyfet that's really the only problem....Heartbeat has to
          eventually patch
Matt DTS   As long as whatever interrupts you didn't process weren't lost in
          the time you took to look at them.
A2GS       the pointers.
AFL Dyfet  I've taken over the main int. vector myself to impliment multitask
          threading,
AFA Parik  ok, i see.
Matt DTS   I wouldn't feel so bad about patching the VBL interrupt vector,
          but please leave the main one
Matt DTS   alone if you possibly can.
AFL Dyfet  but it does add overhead chaining to the 'proper' routine down the
          road...
Matt DTS   (I think we've lost protocol, Dave)
Dave Lyons (Got kicked off trying to abort an upload. :-( )  You *can*
          legitimately do a
A2GS       the hard way :) going through the main interrupt manager.
Dave Lyons VBL task from C--I helped somebody do that a couple weeks ago.
          Just declare
Dave Lyons and fill in an appropriate header structure--when you get to where
          the code
Dave Lyons goes, put a CHAR with value 0x5C (a long Jump) and then a pointer
          to your
A2GS       HG
Dave Lyons function.  Works neat.  Remember to preserve and set the B
          register inside
A2GS       Had no problems patching it for a # of interrupts, so
          far....hehe
Dave Lyons your function if you're using global variables in there.  Also you
          need to
Dave Lyons REP #$30 in there somewhere.  That's important (& I forgot to do
          it the first
Dave Lyons time or two.)