Difference between revisions of "Motorola 68000"

From SizeCoding
Jump to: navigation, search
(Size considerations)
 
(25 intermediate revisions by 5 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.
  
Note: Assigment direction is source,dest instead of dest,source !!!
+
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 ====
 
==== Registers ====
To be added.
 
 
== Atari ST ==
 
The Atari ST systems consists of the M68k system with custom hardware for graphics and sound.
 
 
=== Setting up ===
 
Setting up your development platform for the Atari ST systems is quite easy, first get the following tools:
 
 
* Assembler: VASM - This assembler is able to assemble directly to a TOS image
 
* Emulator(s): -. Make sure to use the original TOS 1.62 Image for best compatibility.
 
 
==== Compiling to a TOS image ====
 
Vasm -Ftos source.s -o source.tos
 
 
=== Video display ===
 
The Atari ST has a linear 320x200x4bit address space, which each nibble representing a color index 0..F from the palette.
 
 
To be added soon.
 
 
==== Setting a palette ====
 
Here is some code that will help you setup a palette
 
 
<syntaxhighlight lang="">
 
pea palette(pc)
 
move.w #6,-(sp)
 
trap #14
 
 
; Palette data
 
palette:
 
dc.w $000,$100,$200,$311,$422,$533,$644,$755
 
dc.w $575,$464,$353,$242,$131,$020,$010,$000
 
</syntaxhighlight>
 
 
==== Getting something on screen ====
 
Here is a bit of code to get you started:
 
 
<syntaxhighlight lang="">
 
;-----------------------
 
; Line-A Initialization
 
;-----------------------
 
; After calling this function, data register D0 and address register A0 point to a table ; with the starting address of the Line A variables.
 
; Address register A1 points to a table with the starting addresses for the three system ; font headers,
 
; and address register A2 points to a table that specifies the starting addresses of the; 15 Line A opcodes. There's no parameter required for this function, so all you have
 
; to do is call the word opcode label that you specified for the $A000 (Initialize)
 
; function.
 
dc.w $A000
 
movem.l (a0),a1-a4 ; A3=INTIN, A4=PTSIN
 
 
;---------
 
; For X&Y
 
;---------
 
frameloop:
 
move.w #200-1,d7 ; y
 
yLoop:
 
move.w #320-1,d6 ; x
 
xLoop:
 
 
; Putpixel
 
put_pixel:
 
move.b d6,d0 ; d0=x
 
eor d7,d0 ; d0=x^y
 
lsr.b #2,d0 ; d0>>=4
 
and #42,d0 ; d0&42
 
 
move.w d0,(a3) ; a3=color(d0)
 
movem.w d6/d7,(a4) ; a4=x,y`
 
 
dc.w $A001 ; put pixel command
 
 
dbra d6,xLoop ; decrease and branch
 
    dbra d7,yLoop
 
 
; Wait loop
 
bra frameloop ; .s *
 
 
</syntaxhighlight>
 
  
=== Sound ===
+
* D0..D7 - 8 x 32 bit General Purpose Registers
The Atari ST systems use the YM8192 chip to generate sound.
 
For more information check out https://www.atarimagazines.com/v4n7/stsound.html
 
  
To be added soon.
+
* A0..A6 - 7 x 32 bit Address Registers
  
==== Make some noise ====
+
* A7 - 32-bit Stack-Address Register
To be added soon.
 
  
=== Additional Resources ===
+
==== Instructions timing ====
Sizecoding on the Atari ST is not very huge yet, so resources are sparse.
+
The number of cycles for each instruction is different depending of processor model in M68K family.
* ST Soundchip: https://www.atarimagazines.com/v4n7/stsound.html
+
: http://oldwww.nvg.ntnu.no/amiga/MC680x0_Sections/mc68000timing.HTML
* Spkr's Github: to be added
 
  
== Commodore Amiga ==
+
== Size considerations ==
The Commodore Amiga system consists of the M68k system with custom hardware for graphics and sound.
+
Here are some general rule of thumbs when it comes to size consideration when programming the M68000
  
=== Setting up ===
+
* Moving/Calculating Register from/to registers - 2 bytes
 +
* Moving/Calculating with byte or word values - 4 bytes
 +
* Moving/Calculating with long values - 6 bytes
  
* Assembler: -
+
Shorter variants:
* Emulator(s): WinUAE
+
* 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
  
=== Video display ===
+
== Resources ==
No information yet
+
* [http://www.beycan.net/eklenen/M68000_Instruction_Set.pdf M68000 Instruction Set]
  
=== Sound ===
+
== Motorola M68K Platforms ==
No information yet
+
*'''[[Atari ST]]''' - Atari ST Sizecoding information
 +
*'''[[Atari Jaguar]]''' - Atari Jaguar Sizecoding information
 +
*'''[[Commodore Amiga]]''' - Commodore Amiga Sizecoding information

Latest revision as of 07:05, 20 June 2022

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.

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

Resources

Motorola M68K Platforms