README 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. The m68k2 back end is an EM code generator for the
  2. Motorola MC68000. It defines an integer to be 16 bits
  3. and a pointer to be 32 bits.
  4. The m68k2 back end generates code for the ACK 68000 assembler.
  5. (The mnemonics recognized by this assembler can be found in
  6. "as/mach3.c").
  7. Some parts of the back end are system dependent, i.e. they depend
  8. on the kind of target 68000 system.
  9. - The way to do a Unix system call may vary from system to system.
  10. For every system call you need to have an assembly routine that
  11. passes the arguments and the system call number to Unix.
  12. These routines should be put in the library file "lib/tail_mon".
  13. The distribution contains a tail_mon file tailored for
  14. UniSoft Unix (see directory "libsys").
  15. Beware that several Unix systems (e.g. UniSoft Unix) use 4-byte
  16. integers, whereas the m68k2 back end produces code for 2-byte
  17. integers. In this case all system calls having an "int" parameter
  18. should convert their parameters to "long"s.
  19. - Most systems require some sort of "test for enough stack space"
  20. at the beginning of every procedure, to get around the "back up"
  21. problem. E.g. UniSoft Unix requires a "tst.b N(sp)" instruction
  22. This instruction is generated by the routines "prolog()" and
  23. "save" in "cg/mach.c".
  24. - The output of the ACK 68000 linker is an a.out file that
  25. has a different format as an a.out file on your system. (As most
  26. 68000 systems have different a.out formats, there is no such thing
  27. as "the" 68000 a.out format). So a program is needed to convert the
  28. ACK a.out format to your a.out format (as defined in
  29. "/usr/include/a.out.h"). The program "cv/cv.c" does
  30. the job for UniSoft Unix. It probably need only be slightly
  31. modified for your system.
  32. If your target 68000 does not run Unix, but is e.g. a stand alone
  33. 68000, you will need a program to download the ACK a.out file.
  34. The program "dl/dl.c" produces Intel Hex format on standard output
  35. from an a.out file.
  36. - The EM runtime start-off ("libsys/head_em.s") may have to be modified.
  37. It should call the procedure __m_a_i_n with parameters (argc,argv,envp).
  38. Usually, Unix will put these on top of the stack before starting
  39. the program. Note, however, that for 4-byte systems Unix will provide
  40. a 4-byte argc, while __m_a_i_n expects a 2-byte argc; so the value
  41. must be shortened to 2 bytes.
  42. The m68k2 code generator translates most EM instructions in line.
  43. For some complex EM instructions it uses assembly routines (stored in the
  44. library "libem/libem_s.a").
  45. The generated code does not check for array bound errors, overflow in
  46. arithmetic operations or division by zero (the latter will cause a hardware
  47. trap).
  48. The code generator has the following register conventions:
  49. a7: stack pointer
  50. a6: local base pointer
  51. a0,a1,d0,d1,d2: scratch registers
  52. (d0 is also used for 2/4 bytes function results;
  53. d0 and d1 are used for 8 bytes function results)
  54. a2-a5,d3-d7: register variables.