home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Falcon 030 Power 2
/
F030_POWER2.iso
/
ST_STE
/
MAGS
/
ICTARI08.ARJ
/
ictari.08
/
GFA
/
BITMAP_U.GFA
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Atari
|
1994-01-08
|
2KB
|
73 lines
' -------- BEGIN constants --------
no_planes|=4 ! Number of planes (1 to 16) => Colors
plane_bits|=16 ! Size of each plane: 16, ### DO NOT ALTER 16 ###
s_addr%=XBIOS(2) ! EVEN bitmap address (in bytes)
s_leng%=32000 ! Bitmap length (in bytes): Needed for exist only
'
plane_size|=plane_bits| DIV 8
block_size|=no_planes|*plane_size|
total_blocks%=s_leng% DIV block_size|
total_pixels%=total_blocks%*plane_bits|
plane_mask%=2^plane_bits|-1
' -------- END constants --------
'
'
' -------- BEGIN main program --------
color%=3
pixel%=319+199*320
IF pixel%<total_pixels%
write_pixel(pixel%,color%)
PRINT @read_pixel(pixel%)
ENDIF
'
pixel%=0
WHILE pixel%<total_pixels%
write_pixel(pixel%,color%)
INC pixel%
WEND
'
PRINT CHR$(7);
~INP(2)
EDIT
' -------- END main program --------
'
'
' -------- BEGIN utilities --------
'
> FUNCTION read_pixel(pixel%) !--ULTRA SPEEDY--
LOCAL b_addr%,mask%,plane_count|,l_addr%,plane%,color%
b_addr%=s_addr%+(pixel% DIV plane_bits|)*block_size|
mask%=2^(plane_bits|-pixel% MOD plane_bits|-1)
plane_count|=0
color%=0
WHILE plane_count|<no_planes|
l_addr%=b_addr%+plane_count|*plane_size|
plane%=DPEEK(l_addr%)
IF (plane% AND mask%) DIV mask%=1
color%=color% OR 2^plane_count|
ENDIF
INC plane_count|
WEND
RETURN color%
ENDFUNC
'
> PROCEDURE write_pixel(pixel%,color%) !--ULTRA SPEEDY--
LOCAL b_addr%,mask%,plane_count|,l_addr%,plane%
b_addr%=s_addr%+(pixel% DIV plane_bits|)*block_size|
mask%=2^(plane_bits|-pixel% MOD plane_bits|-1)
plane_count|=0
WHILE plane_count|<no_planes|
l_addr%=b_addr%+plane_count|*plane_size|
plane%=DPEEK(l_addr%)
IF (color% AND 2^plane_count|) DIV 2^plane_count|=1
plane%=plane% OR mask%
ELSE
plane%=mask% XOR plane_mask% AND plane%
ENDIF
DPOKE l_addr%,plane%
INC plane_count|
WEND
RETURN
'
' -------- END utilities --------