Skip to main content

68000 MACHINE LANGUAGE COURSE PART I by Mark van de Boer

Originally  published in ST NEWS Volume 1 Issue  6,  launched  on 
November 15th 1986.

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

Disclaimer
The text of the articles is identical to the originals like they appeared in old ST NEWS issues. Please take into consideration that the author(s) was (were) a lot younger and less responsible back then. So bad jokes, bad English, youthful arrogance, insults, bravura, over-crediting and tastelessness should be taken with at least a grain of salt. Any contact and/or payment information, as well as deadlines/release dates of any kind should be regarded as outdated. Due to the fact that these pages are not actually contained in an Atari executable here, references to scroll texts, featured demo screens and hidden articles may also be irrelevant.