home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / INC_MAG / INC_3.MSA / TEXT_BLITTER.TXT < prev    next >
Text File  |  1990-03-17  |  10KB  |  278 lines

  1. The blitter is the most amazing thing that can be found in a  STE 
  2. and the Mega St's why,  coz it's so fast!  Here will I have now a 
  3. go  through  of this amazing chip be published  along  with  some 
  4. illustrations and no source examples.  The sources will be  found 
  5. in the comming issues of the Inc, since I have planes of starting 
  6. up  a  special  blitter  section for  a  few  issues  where  I'll 
  7. confrontate some problems with the blitter and the solution to
  8. them.  Now let's start with the pin design and after that look at 
  9. the block diagram over it and the different registers it have and 
  10. what to put into them.
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. This one don't require    Gdb
  25. any comments just look
  26. at it since it's how it
  27. looks (it aint scale 1:1
  28. it's magnifyed a bit).
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. Now  let's look at the schematic flow diagram over  the  blitters 
  48. function.
  49.  
  50.         Gbf  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. The  source  is exactly what it sounds like it's the  source  and 
  64. it's read twice and shifted (if you want's shift and final source 
  65. read) the Halftone, that is a 16 bit mask that the shifted source 
  66. then is masked along with that's the HOP (halftone operating) and 
  67. then is the destination read and a logical operation between  the 
  68. source  and the destination is then  done  eg.  XOR,OR,AND,Source 
  69. replacement  and then masked with a end mask and placed  back  on 
  70. the  destination  address.  The blitter iis just  like  the  DMA, 
  71. ACIA's,  Floppy  controllers and Sound DMA (only STE) capable  of 
  72. generating  a  interrupt.  The  interrupt  is  cleared  when  the 
  73. operation  is  ready  the bit that is set it the  third  MFP  bit 
  74. (GPIP) but it's not usually used by the TOS.
  75.  
  76. Halftone:
  77. ---------
  78.  
  79. This  is  16  16  bit mask's that  are  masked  onto  the  source 
  80. data, the halftone is located at $FF8A00-$FF8A1E. And each one is 
  81. one word big in size.
  82.  
  83. $FF8A00  R/W x x x x x x x x x x x x x x x x Half tone 0 
  84. $FF8A02  R/W x x x x x x x x x x x x x x x x Half tone 0 
  85. $FF8A04  R/W x x x x x x x x x x x x x x x x Half tone 1 
  86. $FF8A06  R/W x x x x x x x x x x x x x x x x Half tone 2 
  87. $FF8A08  R/W x x x x x x x x x x x x x x x x Half tone 3 
  88. $FF8A0A  R/W x x x x x x x x x x x x x x x x Half tone 4 
  89. $FF8A0C  R/W x x x x x x x x x x x x x x x x Half tone 5 
  90. $FF8A0E  R/W x x x x x x x x x x x x x x x x Half tone 6 
  91. $FF8A10  R/W x x x x x x x x x x x x x x x x Half tone 7 
  92. $FF8A12  R/W x x x x x x x x x x x x x x x x Half tone 8 
  93. $FF8A14  R/W x x x x x x x x x x x x x x x x Half tone 9 
  94. $FF8A16  R/W x x x x x x x x x x x x x x x x Half tone A 
  95. $FF8A18  R/W x x x x x x x x x x x x x x x x Half tone B 
  96. $FF8A1A  R/W x x x x x x x x x x x x x x x x Half tone C 
  97. $FF8A1C  R/W x x x x x x x x x x x x x x x x Half tone D 
  98. $FF8A1E  R/W x x x x x x x x x x x x x x x x Half tone E
  99.  
  100. Source X and Y increment.
  101. -------------------------
  102.  
  103. In those two addresses must you put the X and Y incremant values, 
  104. those  values  decides how you will cut from the  source.  The  X 
  105. incremant  can't be a odd value since that bit  isn't  supported. 
  106. normally is it 2 since then will every bit be read, if a value of 
  107. 8 is placed in low res then will only bit plane 0 be read.  The Y 
  108. increment determinds how many bytes must be added to the  current 
  109. source address to reach the end of the line and the start of  the 
  110. line.  In monochrome is it 80 bytes on each line, and if I'd copy 
  111. 40  bytes (see later on) then would the value of 40 be placed  in 
  112. the source Y increment.  Or if I'd copy 10 bytes would the  value 
  113. of 70 be placed here.
  114.  
  115. $FF8A20  R/W x x x x x x x x x x x x x x x 0 Source X increment
  116. $FF8A22  R/W x x x x x x x x x x x x x x x 0 Source Y increment
  117.                                            |   
  118.                                            -- Even values only!
  119. Source address:
  120. ---------------
  121.  
  122. As the name says are it in this one that the source address  must 
  123. be  placed.  It  is one 16 bit register and one  8  bit  register 
  124. giving a 24 bit address register on location $FF8A24 in where the 
  125. source address start should be placed.
  126.  
  127. $FF8A24  R/W 0 0 0 0 0 0 0 0 x x x x x x x 0 High address
  128. $FF8A26  R/W x x x x x x x x x x x x x x x 0 Low address
  129.                                            |   
  130.                                            -- Even values only!
  131.  
  132. End mask:
  133. ---------
  134. Those  three  addresses  may contain a value  that  can  (if  the 
  135. programmer  wants to) be msked onto the end values of  the  whole 
  136. operation,  it can along with the Half tone created complex  full 
  137. patterns of nice effects.
  138.  
  139. $FF8A28  R/W x x x x x x x x x x x x x x x x End mask 1 
  140. $FF8A2A  R/W x x x x x x x x x x x x x x x x End mask 2
  141. $FF8A2C  R/W x x x x x x x x x x x x x x x x End mask 3
  142.  
  143. Destination X and Y increment
  144. -----------------------------
  145.  
  146. Those two are bult up exactly like the source X and Y increments. 
  147. To  understand  those go back and read about the X and  Y  source 
  148. increments.
  149.  
  150. $FF8A2E  R/W x x x x x x x x x x x x x x x 0 Dest. X increment
  151. $FF8A30  R/W x x x x x x x x x x x x x x x 0 Dest. Y increment
  152.                                            |   
  153.                                            -- Even values only!
  154. Destination address:
  155. --------------------
  156.  
  157. Just  look  at the Source address and you'll  understand  how  it 
  158. works except to that this one is for the destination and not  for 
  159. the source.
  160.  
  161.  
  162. $FF8A32  R/W 0 0 0 0 0 0 0 0 x x x x x x x 0 High address
  163. $FF8A34  R/W x x x x x x x x x x x x x x x 0 Low address
  164.                                            |   
  165.                                            -- Even values only!
  166.  
  167. X and Y count:
  168. --------------
  169.  In those two are the size of the block to be blitted putted.  If 
  170. I'd like to copy a 32 pixels width and 15 lines high object  then 
  171. I  would place 4 in the X count since 32 pixels is 4  words  from 
  172. left to right and in Y i'd place the value 15. 
  173.  
  174. $FF8A36  R/W x x x x x x x x x x x x x x x x X
  175. $FF8A38  R/W x x x x x x x x x x x x x x x x Y
  176.  
  177. HOP:
  178. ----
  179.  
  180. This is the Halftone operation mode. Depending on what value that 
  181. is placed here is different things done with the halftone and the 
  182. source. Most used is mode 2 source only.
  183.  
  184.      HOP  What:
  185.      0    Everything is set to 1 bit's
  186.      1    Half tone only 
  187.      2    Source only
  188.      3    Source and Half tone.
  189.  
  190. And the value for the decided operation is placed in here:
  191.  
  192. $FF8A3A  R/W - - - - - - x x Half tone operation
  193.  
  194. Logical operation:
  195. ------------------
  196. Now  this is a fun one,  with this one can you perform  different 
  197. logical operations berween the source and the destination,  let's 
  198. look at the operation overview.
  199.  
  200.      OP   Does what:
  201.      0    All bits are set to zeros ,good when deleteing areas
  202.      1    S and D
  203.      2    S and not D
  204.      3    S only
  205.      4    not S and D
  206.      5    D only
  207.      6    S xor D
  208.      7    S or D
  209.      8    not S and not D
  210.      9    not S xor D
  211.      10   not D
  212.      11   S or not D
  213.      12   not S
  214.      13   not S or D
  215.      14   not S or not D
  216.      15   All bits are set to ones.
  217.  
  218. (S=Source, D=Destination)
  219.  
  220. The  most intresting ones are 3 (source replaces background)  and 
  221. 7/1  source OR and source AND with destinations,  with those  can 
  222. sprites be generated.
  223.  
  224. $FF8A3B  R/W - - - - x x x x  logical operation
  225.  
  226. Skew and extra read:
  227. --------------------
  228.  
  229. With  this can one have the source to be shifted before  anyother 
  230. operations is preformed with it, can be useful from tile to time. 
  231. But  this register allso incoperates two more functions the  FXSR 
  232. and NFSR and the first one stands for Force eXtra Source Read and 
  233. when  that bit is set will the begining of the next line be  read 
  234. as  a extra word.  When the No Final Source Read is set when  the 
  235. last word of each line can not be read and the use of those three 
  236. registers  allso requires usage of source X and Y  increment  and 
  237. source address.
  238.  
  239. $FF8A3D  R/W x x - - x x x x 
  240.              | |     | | | |
  241.              | |     -------- Skew 
  242.              | -------------- NFSR 
  243.              ---------------- FXSR
  244.  
  245. Various extra functions:
  246. ------------------------
  247. Finaly we have reached the last register,  this one is allso  the 
  248. one that starts the operation when it's written to. Let's look at 
  249. it:
  250.  
  251. $FF8A3C  R/W x x x - x x x x 
  252.              | | |   | | | |
  253.              | | |   -------- Line number
  254.              | | ------------ SMUDGE
  255.              | -------------- HOG
  256.              ---------------- Busy
  257.  
  258. The  first one "Line number" indicates witch one of the  16  half 
  259. tone registers that is about to be used.  When the SMUDGE bit  is 
  260. set  is the selected line activated,  if it's a zero it  will  be 
  261. ignored.  The  next bit called "HOG" indicates what working  mode 
  262. that  should be used if it's a zero (0) than will  the  processor 
  263. and  the blitter share the bus and after 64 bus cycles  will  the 
  264. processor work for 64 cycles and after that will the blitter work 
  265. for 64 cycles etc.. When it's a one will the processor stop until 
  266. the  blitter have finished it's operation.  The last  bit  called 
  267. "Busy" is the one that startes the blitter, put a one here and it 
  268. will start. 
  269.  
  270.  
  271. That was all for now folks,  hope you did get something out of my 
  272. article  and I'll follow it up with a article about "how  to  use 
  273. the blitter in real life". Until then, let's wrap..
  274.  
  275.  
  276.  
  277. Kent Johansson +46(0)90139994        
  278.