Difference between revisions of "Motorola 68000"
(35 intermediate revisions by 6 users not shown) | |||
Line 5: | Line 5: | ||
=== The Motorola 68k processor === | === The Motorola 68k processor === | ||
− | The Motorola 68k processor | + | The Motorola 68k processor is a 16-bit Big-Endian format processor, using 32-bit register and addresses. |
− | + | This means that instruction sizes on average are either 2 or 4 bytes each, and 6 bytes for longword / 32-bit instructions. | |
− | + | Note: The assigment direction is source,dest instead of dest,source !!! | |
− | |||
− | == | + | ==== Registers ==== |
− | |||
− | + | * D0..D7 - 8 x 32 bit General Purpose Registers | |
− | |||
− | * | + | * A0..A6 - 7 x 32 bit Address Registers |
− | |||
− | + | * A7 - 32-bit Stack-Address Register | |
− | |||
− | === | + | ==== Instructions timing ==== |
− | + | The number of cycles for each instruction is different depending of processor model in M68K family. | |
+ | : http://oldwww.nvg.ntnu.no/amiga/MC680x0_Sections/mc68000timing.HTML | ||
− | + | == Size considerations == | |
+ | Here are some general rule of thumbs when it comes to size consideration when programming the M68000 | ||
+ | * Moving/Calculating Register from/to registers - 2 bytes | ||
+ | * Moving/Calculating with byte or word values - 4 bytes | ||
+ | * Moving/Calculating with long values - 6 bytes | ||
− | + | Shorter variants: | |
− | + | * moveq #value, reg : 2 bytes - Moves a values -128...127 to a register | |
+ | * addq #value, reg : 2 bytes - Adds a values 0..8 to a register | ||
+ | * subq #value, reg : 2 bytes - Subtracts a values 0..8 from a register | ||
− | |||
− | |||
− | |||
− | |||
− | + | == Generic 68K sinus table generator == | |
− | + | Here is a fairly generic 68k sinus table generator (16 bytes on Atari ST) as well as a 10-byte zigzag generator. | |
− | + | * [https://demozoo.org/productions/310191/ Singen68k] | |
− | |||
− | |||
− | == | + | == Resources == |
− | + | * [http://www.beycan.net/eklenen/M68000_Instruction_Set.pdf M68000 Instruction Set] | |
+ | * [http://www.easy68k.com/ EASy68K Editor/Assembler/Simulator for the 68000] | ||
+ | * [http://www.easy68k.com/paulrsm/index.html Various Motorola 68k resources] | ||
− | + | == Motorola M68K Platforms == | |
− | + | *'''[[Atari ST]]''' - Atari ST Sizecoding information | |
− | + | *'''[[Atari Jaguar]]''' - Atari Jaguar Sizecoding information | |
− | + | *'''[[Commodore Amiga]]''' - Commodore Amiga Sizecoding information | |
− | + | *'''[[Spectrum QL]]''' - Spectrum QL information | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 12:51, 8 April 2024
Contents
Introduction
Wanting to start sizecoding on a Motorola 68k platform in this day and age can be tough.
So here is a bit of help to get you started:
The Motorola 68k processor
The Motorola 68k processor is a 16-bit Big-Endian format processor, using 32-bit register and addresses.
This means that instruction sizes on average are either 2 or 4 bytes each, and 6 bytes for longword / 32-bit instructions.
Note: The assigment direction is source,dest instead of dest,source !!!
Registers
- D0..D7 - 8 x 32 bit General Purpose Registers
- A0..A6 - 7 x 32 bit Address Registers
- A7 - 32-bit Stack-Address Register
Instructions timing
The number of cycles for each instruction is different depending of processor model in M68K family.
Size considerations
Here are some general rule of thumbs when it comes to size consideration when programming the M68000
- Moving/Calculating Register from/to registers - 2 bytes
- Moving/Calculating with byte or word values - 4 bytes
- Moving/Calculating with long values - 6 bytes
Shorter variants:
- moveq #value, reg : 2 bytes - Moves a values -128...127 to a register
- addq #value, reg : 2 bytes - Adds a values 0..8 to a register
- subq #value, reg : 2 bytes - Subtracts a values 0..8 from a register
Generic 68K sinus table generator
Here is a fairly generic 68k sinus table generator (16 bytes on Atari ST) as well as a 10-byte zigzag generator.
Resources
- M68000 Instruction Set
- EASy68K Editor/Assembler/Simulator for the 68000
- Various Motorola 68k resources
Motorola M68K Platforms
- Atari ST - Atari ST Sizecoding information
- Atari Jaguar - Atari Jaguar Sizecoding information
- Commodore Amiga - Commodore Amiga Sizecoding information
- Spectrum QL - Spectrum QL information