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?

有帮助吗?

解决方案

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.)

其他提示

The 68000 provides 16 user traps (software interrupts/exceptions) but doesn't specify what they do. That is down to the system BIOS/OS, whether that be a simulator or Amiga, Atari ST etc. You can find a list of tasks performed by TRAP 15 in Easy68k at the bottom of this document http://www.easy68k.com/files/EASy68KQuickRef.pdf.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top