Difference between revisions of "AMOS:Working with bitplanes"

From Amiga Coding
Jump to: navigation, search
(linked Phybase and Logbase to their pages)
Line 3: Line 3:
  
 
Amiga uses bitplanes, so instead of using one or more bytes per pixel,
 
Amiga uses bitplanes, so instead of using one or more bytes per pixel,
the screen exists of several layers (bitplanes) in which each byte contains 8 pixels.
+
the screen is made of several layers (bitplanes).
For every bitplane added the maximum amount of colors doubles:
+
 
 +
Each pixel has only one bit by bitplane. So using only one bitplane in a screen, there are only two colors available
 +
for a pixel: the color of index 0 (bit=0) and the color of index 1 in the palette (bit=1).
 +
Using 2 bitplanes, there are 4 colors available for a pixel : index 0 (bit 0 and bit 0), index 1 (bit 1 and bit 0), index 2
 +
(bit 0 and bit 1) and index 3 (bit 1 and bit 1 of both bitplanes). And so on.
 +
 
 +
The Amiga 500 has 6 bitplanes. So the color depth for a screen goes from 2 until 2 power 6=64 colors.
 +
 
 +
For every bitplane added, the maximum amount of colors doubles:
  
 
* 2^1 = 2 = 2 colors
 
* 2^1 = 2 = 2 colors
Line 13: Line 21:
 
* 2^6 = 2*2*2*2*2*2 = 64 colors
 
* 2^6 = 2*2*2*2*2*2 = 64 colors
  
 +
Example (taken from amcaf extension guide) :
 +
 +
We have an 16 colours screen. So it has got 4 bitplanes. Normally, the
 +
bitplanes are counted from 0 to n-1...
 +
 +
  Binary 0 1 0 1 = Decimal 5
 +
          | | | |    .---v---v---v---v--------------------
 +
          | | | `----+ 1 |  |  |  | Bitplane 0
 +
          | | |      |--v^--v^--v^--v^--v-------------------
 +
          | | `------+--+ 0 |  |  |  | Bitplane 1
 +
          | |        |  |--v^--v^--v^--v^--v------------------
 +
          | `--------+--+--+ 1 |  |  |  | Bitplane 2
 +
          |          |  |  |--v^--v^--v^--v^--v-----------------
 +
          `----------+--+--+--+ 0 |  |  |  | Bitplane 3
 +
                    |  |  |  |---^---^---^---'
 +
                    |  |  |  |
 +
                    |  |  |
 +
                    |  |
 +
                    |
 +
 +
 +
Note 1 : if we consider chip memory, one byte in a bitplane is associated to 8 pixels.
 +
Note 2 : There are in fact 2 special modes : "Extra Half Bright" (64 colors so 6 bitplanes) and Hold And Modify (4096 colors)
  
 
If you want to know how many bytes a line takes in a bitplane use this formula:
 
If you want to know how many bytes a line takes in a bitplane use this formula:

Revision as of 20:26, 7 October 2016

(this is a work-in-progress tutorial and has not been tested yet!!!!!)


Amiga uses bitplanes, so instead of using one or more bytes per pixel, the screen is made of several layers (bitplanes).

Each pixel has only one bit by bitplane. So using only one bitplane in a screen, there are only two colors available for a pixel: the color of index 0 (bit=0) and the color of index 1 in the palette (bit=1). Using 2 bitplanes, there are 4 colors available for a pixel : index 0 (bit 0 and bit 0), index 1 (bit 1 and bit 0), index 2 (bit 0 and bit 1) and index 3 (bit 1 and bit 1 of both bitplanes). And so on.

The Amiga 500 has 6 bitplanes. So the color depth for a screen goes from 2 until 2 power 6=64 colors.

For every bitplane added, the maximum amount of colors doubles:

  • 2^1 = 2 = 2 colors
  • 2^2 = 2*2 = 4 colors
  • 2^3 = 2*2*2 = 8 colors
  • 2^4 = 2*2*2*2 = 16 colors
  • 2^5 = 2*2*2*2*2 = 32 colors
  • 2^6 = 2*2*2*2*2*2 = 64 colors

Example (taken from amcaf extension guide) :

We have an 16 colours screen. So it has got 4 bitplanes. Normally, the bitplanes are counted from 0 to n-1...

  Binary 0 1 0 1 = Decimal 5
         | | | |    .---v---v---v---v--------------------
         | | | `----+ 1 |   |   |   | Bitplane 0
         | | |      |--v^--v^--v^--v^--v-------------------
         | | `------+--+ 0 |   |   |   | Bitplane 1
         | |        |  |--v^--v^--v^--v^--v------------------
         | `--------+--+--+ 1 |   |   |   | Bitplane 2
         |          |  |  |--v^--v^--v^--v^--v-----------------
         `----------+--+--+--+ 0 |   |   |   | Bitplane 3
                    |  |  |  |---^---^---^---'
                    |  |  |  |
                    |  |  |
                    |  |
                    |


Note 1 : if we consider chip memory, one byte in a bitplane is associated to 8 pixels. Note 2 : There are in fact 2 special modes : "Extra Half Bright" (64 colors so 6 bitplanes) and Hold And Modify (4096 colors)

If you want to know how many bytes a line takes in a bitplane use this formula:

size of one line within a bitplaneScreenWidth / 8
size of one bitplaneScreenWidth / 8 * ScreenHeight
Size of full pictureScreenWidth / 8 * ScreenHeight * AmountOfBitplanes


Reading and writing to a bitplane

AMOS has two screen buffers, the physical and logical. The physical screen buffer is the one that's visible and in case you're using double buffered screens the logical contains the screen you're drawing on. You can get the address of these with =Phybase(bitplane) and =Logbase(bitplane). Bitplanes are counted from 0 to 6.


So say you want to copy a bitplane from an AMOS screen to an AMOS bank:

BitplaneSize = Screen Width / 8 * Screen Height

Reserve As Work 10,BitplaneSize
Copy Phybase(0),Phybase(0)+BitplaneSize To Start(10)
Wsave "RAM:Bitplane",10


Or do it the other way around and copy an bitplane from an AMOS bank to an AMOS screen:

BitplaneSize = Screen Width / 8 * Screen Height

Reserve As Work 10,BitplaneSize
Wload "RAM:Bitplane",10
Copy Start(10),Start(10)+BitplaneSize To Phybase(0)