68000 MACHINE LANGUAGE COURSE PART I by Mark van de Boer As the title already says this is the first part of an 68000 assembly language programming course. This course is intended for people who already have a little experience with programming in assembly language on microprocessors like the 6502 (6510 is in fact the same) and the 68xx (like 6800, 6801, 6805, 6809) series. In this course these two microprocessor-families will be referenced by their most famous members, the 6502 and the 6809. At this time it is not exactly known how many articles this course will have. I think it will be about six articles long. Now I will describe some features of the 68000. The 68000 is a sixteen-bit microprocessor. This means that an opcode is always sixteen bits (On the 6502 and 6809 an opcode is 8 bits, therefore they are called 8-bit microprocessors). The databus of the 68000 is 16 bits wide, this means that 16 bits can be transferred at once by the 68000 (The 6502 and 6809 both have a databus that is eight bits wide, so they can transfer 8 bits at once). Another important feature of the 68000 is its impressive set of registers. First there are the eight data registers, numbered D0- D7. They are 32 bits wide and can be used for operations on 8-bit, 16-bit and 32-bit quantities. Data registers can be compared with the A-register (Accumulator) on the 6502 and 6809, their function same, but the use of the data registers is much more convenient. Second, there are the eight address registers, numbered from A0-A7. They are 32 bits wide as well and their only use is in addressing memory. However, the upper 8 bits are ignored by the 68000 since its address bus is 'only' 24 bits wide, meaning that the 68000 can address up to 16 megabytes of memory. Register A7 has a special function; it is called the system stackpointer. This means that if you execute a JSR instruction, some data will be saved on the address contained in this register. By the way, you can use every address register very easily as a stackpointer. The third class consists of one register, the PC (program counter). This register always contains the address of the instruction to be executed next. Of course, the upper eight bits of the PC are also ignored. The fourth class consists of one 16 bit register, the status register, called SR. This register is built up like this: ------------------------------------------------------------- | T | | S | | I0| I1| I2| | | | X | N | Z | V | C | ------------------------------------------------------------- system-byte | user-byte The upper 8 bits are called the system byte. This byte contains information that is important to the system. Normally you can not change this byte if you run an application. Bit 15 is called the trace-bit. If this bit is set, every time after executing an instruction the 68000 will generate an exception (This is called an interrupt on the 6502 and 6809). This is especially useful when debugging programs. Bit 13 is called the supervisor bit. When this bit is set the 68000 is in supervisor mode; when this bit is cleared, however, the 68000 is in user mode. When executing in supervisor mode, the 68000 can execute the so called privileged instructions, which are not available in user mode. For example, it is illegal trying to change the upper 8 bits of the SR when in user mode. Bits 8, 9 and 10 are called the interrupt mask. In total they can contain eight different values ranging from zero to seven. For instance, if bits 8 and 10 are set and bit 9 is cleared, the value of the interrupt mask is 5. This means that only interrupts with a level of 5 and higher are recognized by the 68000 and interrupts with a level lower than 5 are ignored. Interrupts of level 7 can be considered as non maskable interrupts (compare this to the NMI on the 6502 and 6809). The lower 8 bits are called the conditioncode register, CCR (this can be compared to the CC of the 6502 and 6809). The CCR contains 5 bits, which contain useful data. Bit 0 is the carry-flag (C), bit 1 is the overflow-flag (V), bit 2 is the zero-flag (Z), bit 3 is the negative-flag (N). The meanings of these bits are exactly the same as on the 6502 and 6809. Then there is bit 4 which is called the extend-flag (X). It is nearly exactly the same as the carry- flag, but is not affected by every instruction that affects the carry-flag. This feature of the extend-flag is especially useful when using multiple precision arithmetic, e.g. adding 64-bit numbers. Another feature of the 68000 is its ability to access three data formats: byte (8 bits), word (16 bits) and longword (32 bits). You can indicate this with a suffix in the mnemonic field. The suffixes are .b for byte, .w for word and .l for longword. E.g. asr.b d0 , asr.w d0 , asr.l d0. These instructions shift data register d0 one place to the right. I think this is enough new stuff for today. Next time I will explain the addressing modes of the 68000. If you have any comments or questions on this article, please write to the correspondence address and I'll take your notes into account. A good Motorola MC 68000 book is: The Motorola 68000 programming guide, which unfortunately is not available in the stores. Further there are a number of books on the 68000. I would like to mention the book written by Lance Leventhal & Gerry Kane, which I think gives good value for its money. Another good book is Steve Williams' "Programming the 68000". Originally published in ST NEWS Volume 1 Issue 6.