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 >
GFA-BASIC Atari  |  1994-01-08  |  2KB  |  73 lines

  1. '  --------  BEGIN constants  --------
  2. no_planes|=4                  ! Number of planes (1 to 16) => Colors
  3. plane_bits|=16                ! Size of each plane: 16, ### DO NOT ALTER 16 ###
  4. s_addr%=XBIOS(2)              ! EVEN bitmap address (in bytes)
  5. s_leng%=32000                 ! Bitmap length (in bytes): Needed for exist only
  6. '
  7. plane_size|=plane_bits| DIV 8
  8. block_size|=no_planes|*plane_size|
  9. total_blocks%=s_leng% DIV block_size|
  10. total_pixels%=total_blocks%*plane_bits|
  11. plane_mask%=2^plane_bits|-1
  12. '  --------  END constants  --------
  13. '
  14. '
  15. '  --------  BEGIN main program  --------
  16. color%=3
  17. pixel%=319+199*320
  18. IF pixel%<total_pixels%
  19.   write_pixel(pixel%,color%)
  20.   PRINT @read_pixel(pixel%)
  21. ENDIF
  22. '
  23. pixel%=0
  24. WHILE pixel%<total_pixels%
  25.   write_pixel(pixel%,color%)
  26.   INC pixel%
  27. WEND
  28. '
  29. PRINT CHR$(7);
  30. ~INP(2)
  31. EDIT
  32. '  --------  END main program  --------
  33. '
  34. '
  35. '  --------  BEGIN utilities  --------
  36. '
  37. > FUNCTION read_pixel(pixel%)  !--ULTRA SPEEDY--
  38.   LOCAL b_addr%,mask%,plane_count|,l_addr%,plane%,color%
  39.   b_addr%=s_addr%+(pixel% DIV plane_bits|)*block_size|
  40.   mask%=2^(plane_bits|-pixel% MOD plane_bits|-1)
  41.   plane_count|=0
  42.   color%=0
  43.   WHILE plane_count|<no_planes|
  44.     l_addr%=b_addr%+plane_count|*plane_size|
  45.     plane%=DPEEK(l_addr%)
  46.     IF (plane% AND mask%) DIV mask%=1
  47.       color%=color% OR 2^plane_count|
  48.     ENDIF
  49.     INC plane_count|
  50.   WEND
  51.   RETURN color%
  52. ENDFUNC
  53. '
  54. > PROCEDURE write_pixel(pixel%,color%)  !--ULTRA SPEEDY--
  55.   LOCAL b_addr%,mask%,plane_count|,l_addr%,plane%
  56.   b_addr%=s_addr%+(pixel% DIV plane_bits|)*block_size|
  57.   mask%=2^(plane_bits|-pixel% MOD plane_bits|-1)
  58.   plane_count|=0
  59.   WHILE plane_count|<no_planes|
  60.     l_addr%=b_addr%+plane_count|*plane_size|
  61.     plane%=DPEEK(l_addr%)
  62.     IF (color% AND 2^plane_count|) DIV 2^plane_count|=1
  63.       plane%=plane% OR mask%
  64.     ELSE
  65.       plane%=mask% XOR plane_mask% AND plane%
  66.     ENDIF
  67.     DPOKE l_addr%,plane%
  68.     INC plane_count|
  69.   WEND
  70. RETURN
  71. '
  72. '  --------  END utilities  --------
  73.