views:

50

answers:

1

I've been revisiting Motorola 68000 programming lately. Admittedly, when I took the course I just did what was necessary to pass (and had a horrible professor)...but NOW I'm actually interested in the stuff. Anyway, looking through my old textbook The 68000 Microprocessor by James L. Antonakos, he uses the following code:

      ORG     $8000
HMSG  DC.B    'Hello!'
      DC.B    0  
      ORG     #8100  
START MOVEA.L #HMSG,A3  
      TRAP    #3  
      TRAP    #9  
      END     START  

This would not compile in Easy68k, but the book has ASM68K referenced. When I changed the code to this, it worked.

      ORG   $1000
HSMG  DC.B  'Hello!',0

START LEA   HSMG,A1
      MOVE  #14,D0  
      TRAP  #15

END START

Is this just due to differences between the compilers? Or am I missing something bigger here? I understand that in the simulator TRAP #15 executes whatever task is in register D0 at the time, but are there different trap tasks per simulator, or is that standard across all 68000 processors?

Thanks!
Thomas

+2  A: 

The TRAP instruction just calls a routine that's pointed to by a longword somewhere in memory. That part of the behaviour is common to all 68000 CPUs. Where that longword points, and what the routine it points to does (and therefore how you pass it the data it needs and so on) depends on the particular system.

(The Atari ST for example used TRAP to call into the OS, and you generally passed all relevant information on the stack. The register contents were ignored. I believe Mac OS "System" used TRAP in a similar way, too, and the Amiga didn't use it at all.)

brone
+1 for mentioning difference between Atari and Amiga OS calling schemes. :)
Amigable Clark Kant