1. Directory
  2. Apple II Textfiles
  3. ml.part.ii
*                                     *
*                                     *
*                                     *
*      WRITTEN BY DR. FIRMWARE        *
*                                     *
*                                     *


Machine language command structure.

Even though this sounds complicated,   
the structure of machine language      
commands is quite simple. The command  
is one to three bytes long and consists
of two sections, the operator and the  
arguement. The operator is always one  
byte long and the arguement is either  
zero, one or two bytes long. If the    
arguement is zero bytes long, then     
it is said that there is no arguement  
for that command.

The accumulator

The accumulator is the primary register
in the 6502 microprocessor. It is an 8 
bit register, which means that it can  
handle only eight bits at a time or the
numbers from zero to 255.

To put numbers into the accumulator,   
we use a command called LDA which      
stands for LoaD Accumulator. This      
command takes the value generated by   
the arguemant and places it into the   

Addressing modes

Addressing modes are very important.   
These tell the computer how to deal    
with the arguement that it recieves. We
will only be dealing with two modes for
the present, immeadiate, and absolute.

In immeadiate addressing mode, the LDA 
command load the accummulator with the 
actual value of the arguement. Suppose 
that we wanted to load the value $6F   
into the accumulator. We would do this 
by telling the microprocessor to       
'LDA #$6F'. That is assembly language. 
In actual fact, the code used by the   
microprocessor would represent it as   
'$A9 $6F'. The $A9 tells the           
microprocessor that you want to load   
the accumulator in immeadiate          
addressing mode. The $6F is the        
arguement and is treated as described  
above. So then, the number $6F is put  
directly into the accumulator.

The LDA command in immeadiate          
addressing mode is two bytes long. The 
first byte being the operator ($A9) and
the second being the arguement.

Memory locations.

The Apple computer has 2~16 memory     
locations. Each memory location is 8   
bits large. Each memory location can be
referenced by a 4 digit hex number.    
A four digit hex number is 2 bytes long
and can be cut in half into two        
separate bytes. The byte on the left is
more significant than the one on the   
right, so the one on the left is called
the Most Significant Byte (MSB) and the
one on the right is the Least          
Significant Byte (LSB).

In absolute addressing mode, the LDA   
command takes the arguement as an      
address and then takes the value held  
in that address and transfers it to the
accumulator. The arguement is two bytes
long and it forms the address LSB first
and MSB second. The address is in      
effect backwards.

Say you wanted to load the accumulator 
with whatever was in location $456D.   
The operator is $AD, this is followed  
by the LSB which is $6D, and finally   
the MSB, $45.

Storing the accumulator.

To move the contents of the accumulator
to some other memory location, we use  
the command STA, which stands for STore

The STA command has an absolute        
addressing mode. The hex operator is   
$8D and it is followed by the LSB and  
MSB, in that order. After the command  
is executed, the accummulator still    
contains the value.

Now we can make a tiny program to store
the value $8D into location $2000.     
First, we have to load it into the     
accumulator. To do this, we'll load the
$8D into the accumulator through the   
LDA immeadiate command. So, then we'll 
store the accumulator into $2000 while 
it contains our value using the STA    
absolute command.

In assembly language, our program looks
like this:

LDA #$8D
STA $2000

Note: the '#' indicates that the       
command is in immediate addressing     
mode. The RTS is going to be used as a 
general 'end' command for now, until I 
can explain it's actual usage.

This assembly language version is not  
understandable by the microprocessor.  
It has to be translated into hex codes.
This translation is normally done by an
assenbly program, but since this is a  
short program, we'll do it by hand.

We are going to put this program at    
location $300-$306. This area can be   
used for short programs as $300-$3b0 is
free memory space. An extended memory  
map will be included in a later        

LDA #$8d   -->    $A9 8D
STA $2000  -->    $8D 00 20
RTS        -->    $60

hex location       contents
 $300               $A9
 $301               $8D
 $302               $8D
 $303               $00
 $304               $20
 $305               $60

The program can be entered into memory 
using the BASIC POKE command. $300 is  
equal to 768 and the rest of the hex   
numbers you should be able to convert  
into decimal yourselves.

This concludes PART II of the series.  
Coming next: X and Y registers.

DR. FIRMWARE, 1985.          
OR ON TRANSFERS AE, 514-738-1247       


AAAAH! MY EYES! Click here if you prefer a black and white color scheme.