AMOS:Working with bitplanes
(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 exists of several layers (bitplanes) in which each byte contains 8 pixels.
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
If you want to know how many bytes a line takes in a bitplane use this formula:
size of one line within a bitplane | ScreenWidth / 8 |
---|---|
size of one bitplane | ScreenWidth / 8 * ScreenHeight |
Size of full picture | ScreenWidth / 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)