home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DCFG203.ZIP / DCFG2.DOC < prev    next >
Text File  |  1992-02-08  |  27KB  |  557 lines

  1.                  Dirt Cheap Frame Grabber V2.03
  2.                          by Michael Day
  3.                         as of 8 Feb 1992
  4.                           Public Domain
  5.  
  6. This device is free and released to the public domain. 
  7. If you actually find a use for it, all the more power to ya!
  8.  
  9. The purpose of the DCFG is to simply provide a very simple method 
  10. to grab video pictures and display them on a computer monitor. 
  11.  
  12. Version 1.01 of the DCFG only provided 4 levels of gray scale.
  13. Version 2.01 makes a modification which allows for 12 gray scales 
  14. by reading the port four times and interpolating the results.
  15. Version 2.02 fixes a schematic error (DO3 is pin 5, not pin 4).
  16. Version 2.03 fixes the lack of CLDs before doing string instructions.
  17.  
  18. The DCFG requires at least a 80286 or better and a VGA 
  19. display to run. While it is possible to change the program to 
  20. allow operation on a 8086 and/or a different display, I'm not 
  21. doing it. If you want to, you can. My intent was to just prove 
  22. that it was possible. 
  23.  
  24. The frame grabber program at this point is very simple, and as a 
  25. result has some problems. The heart of the program relies on a 
  26. very fast IO port to memory instruction. It can operate as fast 
  27. as the computer can shove data from the port to the memory. This 
  28. is as fast as DMAing the data could do.  This method is sensitive 
  29. to computer speed. As such, you may not get a stable picture at 
  30. first. If you don't, use the left or right arrow keys to adjust 
  31. the horizontal sample size. The up/down arrows adjust the 
  32. vertical sample size, but this normally doesn't need to be done. 
  33.  
  34. You will probably notice some sparkles (pixels shifting left and 
  35. right one pixel position). This is caused by sample jitter and is 
  36. normal. All sampling systems have this problem. Some less than 
  37. others. Even your TV has the problem, but it is normally good 
  38. enough that you don't see it. 
  39.  
  40. The jitter is caused by the fact that the sampler is not 
  41. perfectly synchronized to the incoming video signal. Your TV has 
  42. a lot of circuitry in it to achieve the synchronization. Being 
  43. that this is a dirt cheap frame grabber, there is only limited 
  44. synchronization of the picture, and no synchronization of the 
  45. sampler. If you want to try to improve on it, please do.
  46.  
  47. To use the Dirt Cheap Frame Grabber, plug it into a PC printer 
  48. port, and attach the other end to the video output from a VCR or 
  49. TV Monitor and run the program. Use the left or right arrow keys 
  50. to adjust the horizontal sample size to obtain a stable picture.
  51.  
  52. Do not attach the Dirt Cheap Frame Grabber to the computer with a 
  53. long printer cable. We are dealing with high speed signals here 
  54. (up to 4MHz). It requires as short a connection to the computer 
  55. as you can give it. I built my circuit inside the back shell of 
  56. the connector that plugs into the printer port on the computer.
  57.  
  58.                     Dirt Cheap Frame Grabber
  59.     (DB25P)                                     
  60.     DO0 ---330ohm-------------*--->|--*-->|---*    IC1 = LM339   
  61.     pin 2                  Vr |  red    1N914 |          quad    
  62.                        (2.4v) |  led          |        comparator
  63.     DO1 ---330ohm-------------*               |                   
  64.     pin 3                     |               |    * = connection    
  65.                              330ohm           |                       
  66.           1N914               |               |    ) = no connect
  67.     DO6 ---|<---*---1Kohm-----* Vc (2.21v)    |       (jump over)
  68.     pin 8                     |               | 
  69.           1N914               |               | Vr = ref voltage  
  70.     DO7 ---|<---*---510ohm----*------*        |      2.4 volts        
  71.     pin 9                     |      |        |                   
  72.                    (trimmer) 5Kohm<--*        | Vc = 00 = 1.65v   
  73.                               |               |      01 = 1.80v   
  74.     DO2 ----------*-----------)------| |------*      10 = 1.95v   
  75.     pin 4         |           |     .1uf      |      11 = 2.21v   
  76.                  3|           |               |                       
  77.     DC3           |/ |6       |               | Vz = 00 = 0.74v   
  78.     (slct)     1 /  -|--------* Vz (1.0v)     |      01 = 0.81v   
  79.     DS6 --------|IC1a|        |               |      10 = 0.88v   
  80.     (ack)        \  +|----*   |               |      11 = 1.00v   
  81.     pins 10,17     \ |7   |  360ohm           |                     
  82.                           |   |               | Vy = 00 = 0.45v   
  83.     DC2            / |4   |   |               |      01 = 0.54v     
  84.     (init)     2 /  -|----)---* Vy (0.66v)    |      10 = 0.59v   
  85.     DS5 --------|IC1b|    |   |               |      11 = 0.66v    
  86.     (pe)         \  +|----*   |               |                   
  87.     pins 12,16     \ |5   |  220ohm           | Vx = 00 = 0.34v   
  88.                           |   |               |      01 = 0.37v        
  89.     DC1            / |10  |   |               |      10 = 0.40v   
  90.     (afd)     13 /  -|----)---* Vx (0.45v)    |      11 = 0.45v   
  91.     DS4 --------|IC1c|    |   |               |                   
  92.     (slct)       \  +|----*   |               | Vs = 00 = 0.086v  
  93.     pins 13,14     \ |11  |  360ohm           |      01 = 0.093v  
  94.                           |   |               |      10 = 0.101v  
  95.     DC0            / |8   |   |               |      11 = 0.115v  
  96.     (stb)     14 /  -|----)---* Vs (0.12v)    |  Assumes Vz set
  97.     DS7 --------|IC1d|    |   |               |  for 1.0v using 
  98.     (busy)       \  +|----*   |               |  5Kohm trimmer 
  99.     pins 11,1   12|\ |9   |  120ohm           |  with DO6, DO7 
  100.                   |       |   |               |  set high.      
  101.     Gnd ----------*-------)---*---------------*------*--------*
  102.     pins                  |   |               |      |        |
  103.     18,19,20,21,          |  100Kohm          |     75ohm     |
  104.     22,23,24,25           |   |      .1uf     |      |        |
  105.                           *---*-------| |-----)------*------o )          
  106.                    2N2222 |                   |             RCA   
  107.             *---------C   E                   |            phono
  108.             |           B                     |            jack 
  109.     pin 5   |           |      1N914          | 
  110.     DO3 ----*--4.7Kohm--*-------->|-----------*
  111.  
  112. -----------------------------------------------------------------
  113.  
  114.  
  115.                          Parts List
  116.  
  117.     1ea  DB25P connector
  118.     1ea  RCA phono jack
  119.     1ea  5K ohm trimmer pot
  120.     1ea  510 ohm resistor
  121.     1ea  1K ohm resistor
  122.     2ea  330 ohm resistor
  123.     2ea  220 ohm resistor
  124.     2ea  360 ohm resistor
  125.     1ea  120 ohm resistor
  126.     1ea  100K ohm resistor
  127.     1ea  75 ohm resistor
  128.     1ea  4.7K ohm resistor
  129.     2ea  0.1uF capacitor 
  130.     1ea  red LED
  131.     4ea  1N914 diode (or 1N4148)
  132.     1ea  2N2222 transistor (NPN)
  133.     1ea  LM339 quad comparator
  134.  
  135.  
  136. -----------------------------------------------------------------
  137.  
  138.  
  139.                     Dirt Cheap Frame Grabber
  140.                        Circuit Description                        
  141.  
  142. It is assumed that the video signal will be a NTSC type signal 
  143. complying to the RS170A video standard with negative going sync 
  144. and a signal level between 0.5Vpp to 2Vpp (1Vpp desired). This is 
  145. the typical signal that is available on the video output jack of 
  146. a VCR or TV monitor. 
  147.  
  148. If you are using a VCR type video signal, you can get a quick 
  149. start by adjusting the bias trimmer (5Kohm pot) to obtain 
  150. 1.0volt at location Vz while insuring that the data output lines 
  151. on the printer port are set to 0FFH. Once you get going you can 
  152. fine tune the reference voltage by adjusting the trimmer to 
  153. obtain the best picture.
  154.  
  155. The video input comes in on the RCA phono jack. The 75ohm 
  156. resistor provides the proper load for the connection. The .1mf 
  157. capacitor isolates the signal from the rest of the circuit and is 
  158. used as a part of the level shifter to clamp the video input to 
  159. ground reference on the computer. The 1N914 diode and 4.7K ohm 
  160. resistor provides a voltage reference 0.7V above ground for the 
  161. 2N2222 clamp transistor. The transistor and diode get their 
  162. supply voltage from the DO3 output pin. Typically this is around 
  163. 3.3volts and should have enough power for our needs assuming that 
  164. the output driver is a 74LS374 driver which is the standard part 
  165. for a PC printer port.
  166.  
  167. The transistor provides a low impedance charge path for the 
  168. capacitor to clamp the sync tip to ground so as to insure the 
  169. video signal sync tip is referenced to ground. The 100K ohm 
  170. resistor provides a high resistance discharge path for the 
  171. capacitor. Enough to provide a discharge path for the capacitor, 
  172. but not enough to seriously affect the video signal level.
  173.  
  174. The clamped video signal is then applied to all four comparators 
  175. in the LM339. The LM339 gets its power from the DO2 output pin.
  176. Like the clamp transistor, normally there should be enough power 
  177. from the data output pin to supply the IC. A .1mf capacitor is 
  178. used to stabilize the power source. You can probably getaway 
  179. without using the capacitor, but I'm paranoid. 
  180.  
  181. The four comparators receive their reference voltage from a 
  182. resistor ladder consisting of 360ohm, 220ohm, and 360ohm 
  183. resistors in series with the 120ohm resistor tied to the common 
  184. ground. The voltage level on the 120ohm resistor provides the 
  185. sync detector reference.  The other three resistor positions 
  186. provide three increasing levels of amplitude detection. 
  187.  
  188. The resistor ladder voltages can be shifted up or down by the 
  189. computer using the DO6 and DO7 data output lines on the printer 
  190. port. This allows 12 gray scale levels to be detected instead of 
  191. the basic 4 levels that would otherwise be available.
  192.  
  193. The resistor ladder requires a regulated source voltage with an 
  194. adjustment to allow compensation for various input signal levels 
  195. depending on the signal source. The 5Kohm trimmer pot provides 
  196. for the bias adjustment which allows the circuit to be adapted to 
  197. the absolute signal source level. The regulated source voltage is 
  198. derived from the red LED in series with a 1N914 diode. A red LED 
  199. will have a typical voltage drop of about 1.7 volts and the diode 
  200. has a typical voltage drop of 0.7 volts giving a total of 2.4 
  201. volts for the reference. 
  202.  
  203. The absolute level is not important since the trimmer can 
  204. compensate for minor differences. The LED gets its power through 
  205. the two 330ohm resistors attached to the D0 and D1 outputs. Two 
  206. outputs are used here to insure that there is enough power to 
  207. drive the LED and the resistor ladder while maintaining a 
  208. regulated voltage source across the LED. 
  209.  
  210. The LED has a 1N914 diode in series with it to get the reference 
  211. voltage in the range that we need it. This is the one area where 
  212. I go beyond spec for the system. The 74LS374 driver is specified 
  213. to have an output voltage of greater than 2.5volts at 2.5ma. I'm 
  214. actually relying on the true output voltage for the part which is 
  215. typically 3.3volts. Should your printer port use a different part 
  216. than the 74LS374, the circuit may or may not work properly. A 
  217. 74HTC374 cmos type part will pull up to 5volts. This is not a 
  218. problem, since all we need is 3 volts or better source voltage to 
  219. supply the circuit. If the output device supplies less voltage, 
  220. the circuit will not work because the LED and diode will not be 
  221. able to maintain the required 2.4volt reference source.
  222.  
  223. The voltage reference is supplied through a 220ohm resistor to 
  224. the bias adjustment trimmer pot. The 220ohm resistor is a load 
  225. source for the 1Kohm and 510ohm gray level shift control 
  226. resistors attached to the DO6 and DO7 data output pins. The gray 
  227. level shift control lines change the reference voltage on the 
  228. resistor ladder to allow the computer to adjust the reference 
  229. voltage to four different levels. This allows us to multiply the 
  230. gray level detection by four by reading in four sequential video 
  231. frames at the four possible reference control levels and 
  232. selecting the highest determined video level from the four frames 
  233. that are collected. This gives us a total of 12 gray levels 
  234. instead of the four levels that would otherwise be available.
  235. The down side to this is that we have to collect four separate 
  236. video frames to do this which means that motion will be blurred.
  237.  
  238. The comparators receive their pull-ups from the control lines DC0, 
  239. DC1, DC2, and DC3. In a standard printer port these lines are 
  240. open collector outputs with 4.7Kohm pull up resistors. It is 
  241. presumed that this is the case for this circuit. It saves us the 
  242. four pull up resistors. If you feel nervous about this, you can 
  243. attach 4.7Kohm pull up resistors to the comparator outputs and 
  244. attach two each to the remaining DO4 and DO5 output pins (pins 6 
  245. and 7). Note that you should not draw more than 2.5ma from any 
  246. data output pin or the output voltage may sag.
  247.  
  248. When wiring the circuit, remember that you are working with video 
  249. signals. That means you are working with signals in the RF range 
  250. (up to 4MHz). Keep all wiring as short as possible and the 
  251. components close together. All grounds should be tied to one 
  252. single point at the 25pin connector. The circuit must be built as 
  253. close as possible to the DB25P connector. Do not attach this device 
  254. to the computer with a long cable. The DB25P connector must plug 
  255. directly into the computer to prevent signal loss. Any attaching 
  256. cable should be no more than six inches long (alright, I've gotten 
  257. away with cables as long as three feet, but it isn't recommended). 
  258. If possible, I suggest building the circuit into the back shell of 
  259. the connector so that there is no cable involved.
  260.  
  261. Remember that we are dealing with high speed signals here. 
  262. Long cables don't work. Failure to keep the connection short will 
  263. cause the sync signal not to be detected and the picture to blur 
  264. or smear. The video cable attached to the RCA jack can be any 
  265. length (within reason) since it is not as sensitive to cable 
  266. length problems. Video cable lengths longer than 20 feet 
  267. may cause problems, I haven't tried them that long.
  268.  
  269. If you are good at this stuff, it is possible to wire the whole 
  270. circuit inside the connector shell (don't use a shielded shell, 
  271. it will short out the circuitry). It's a very tight fit, but if 
  272. you pick a large shell, and are very careful, it can be all 
  273. stuffed in there. The trimmer pot should be made available for 
  274. easy adjustment (I drilled a hole in the shell for access). 
  275. Also, the led should be visible (another hole to drill) to be 
  276. able to quickly determine if the circuit is working.
  277.  
  278. To make it all work, simply plug the connector into a printer 
  279. port on the PC, and run the frame grabber program. When running 
  280. the program, the LED should turn on. That indicates that the 
  281. circuit has enough power to operate. If the LED does not come on, 
  282. or it is very dim, there may not be enough power, and you can't 
  283. use that printer port with the circuit. Try another port or a 
  284. different computer. Note that you may see some minor flickering 
  285. on the led when changing the DO6 and DO7 data output lines. This 
  286. is normal and indicates that the circuit is working properly. 
  287.  
  288. Changing the DO6 and DO7 data output lines causes the current 
  289. flow through the voltage reference ladder to change. This means 
  290. that more or less current will be available to the LED, causing 
  291. it to change in brightness. The LED should not go out completely 
  292. nor become very dim. That would indicate that there is not enough 
  293. power available to drive the voltage reference or a problem in 
  294. your program.
  295.  
  296. You can operate in the simple mode by outputting a 0FFH to the 
  297. data output port which sets all the output lines high. This 
  298. provides power to the comparators, voltage reference, and clamp 
  299. transistor. It also disables the gray scale control lines. 
  300.  
  301. To shift the gray scale reference voltage level, send either a 
  302. 03FH (gray ref 0), 07FH (gray ref 1), 0BFH (gray ref 2), or 0FFH 
  303. (gray ref 3) to the data output port. 
  304.  
  305. The resulting detected output from the port is as follows:
  306.  
  307.     76543210
  308.     1000xxxx  sync
  309.     0000xxxx  level 0 (black)
  310.     0001xxxx  level 1 (dark gray)
  311.     0011xxxx  level 2 (gray)
  312.     0111xxxx  level 3 (white)
  313.     
  314. Note that bits 0-3 are unknown and should not be relied on as 
  315. being valid.
  316.  
  317. -----------------------------------------------------------------
  318.  
  319.  
  320.                        Program Description
  321.  
  322. This program requires a 286 or better computer. A printer port 
  323. with the attached device described above with a video signal 
  324. driving it. And a MCGA or VGA type display system. You start the 
  325. program up by entering its name at the DOS prompt followed by the 
  326. printer port number you wish to use. 
  327.  
  328. Examples: DCFG2 1    <-- loads program for use with LPT1.
  329.           DCFG2 2    <-- loads program for use with LPT2.
  330.  
  331. If you don't give it a number, the program will default to LPT1. 
  332.  
  333.  
  334. Grabbing a Frame:
  335.  
  336. The program works by grabbing samples from the printer port in 
  337. frames. Once each time through the loop, it sucks in a video 
  338. frame from the video input.  
  339.  
  340. Actually, more than a frame is grabbed. How much is grabbed 
  341. depends on the speed of access to the printer port on your 
  342. computer. On a typical computer this is 1.5us per byte. At the 
  343. 1.5us access rate, 63.5us per scan line, and 265.5 scan lines per 
  344. video frame, that results in 11240 bytes per frame required to be 
  345. collected. The collection size is currently set to 20,000 bytes. 
  346. That provides enough space to handle buss speeds up to 12MHz which 
  347. should be adequate for most computers. 
  348.  
  349. The down side is that we collect 210 extra scan lines on a normal 
  350. computer. In most situations this isn't a problem since three to 
  351. four frames will typically be lost while the collected video data 
  352. is being processed anyway. The extra partial frame has only a
  353. slight effect on the over all collection time and results. The 
  354. effect is minimized on a fast machine since nearly the entire 
  355. array is filled anyway.
  356.  
  357. The maximum sample size allowed is 65520. More than that and we 
  358. run out of segment space in memory. Also during this period I 
  359. keep the system interrupts off so as to not have distortions of 
  360. the collected data caused by the system deciding to go off and do 
  361. something else.
  362.  
  363. In addition to the collection time, there is a pre-configure time 
  364. while the loop is waiting for the vertical sync pulse to come in. 
  365. I don't collect any data prior to the vertical sync pulse since 
  366. it would be ignored anyway. 
  367.  
  368. The vertical sync is determined by watching the sync line. When 
  369. it goes on for longer than 10us, you are in the vertical sync 
  370. time. Less then 10us, and it is a horizontal sync pulse. 
  371.  
  372. Once the video data is collected, I release the interrupts to 
  373. allow the computer to return to normal operation. Should no sync
  374. come in during the vertical sync detection period, I terminate 
  375. the loop after a while to allow the computer to continue to 
  376. operate, and return an error condition so that the program will 
  377. know that no data was collected. 
  378.  
  379. If you have an O'scope, you can verify the video collection time 
  380. by observing data output line DO7 (pin 9). This line should never 
  381. go high for longer than 50ms. Typically it should be around 20 to 
  382. 40ms in length. This should be the same whether you have a signal 
  383. going into the video line or not. Though there may be a 
  384. difference between the timing when a signal is present verses 
  385. when it is not present.
  386.  
  387.  
  388. Video Data Translation:
  389.  
  390. Once I get the data, I convert it to an intermediate form to be 
  391. stored in the interpretation array. This array keeps the gray 
  392. level values collected on the previous frames. The display 
  393. routine will later interpret the values stored in the 
  394. interpretation array into an absolute gray scale level for each 
  395. display pixel.
  396.  
  397. The video data is converted by searching for the horizontal sync 
  398. pulse. Once found, we search for the end of the sync pulse. 
  399. Following the end of the sync pulse is the actual video data. 
  400.  
  401. Each collected byte in the scan line is read and converted to the 
  402. intermediate gray scale level.  There are only four levels 
  403. involved; 00, 01, 10, and 11. Note that since sync is not video 
  404. data, it is not included in the gray scale level. Even if it were 
  405. included, it would be a 00 value. Once converted, the byte is 
  406. then shifted into it's proper frame position in the interpretation 
  407. array byte and stored in the array. 
  408.  
  409. This is repeated until either the full width of the 
  410. interpretation array is filled, or a new sync pulse is 
  411. encountered. Should a sync pulse be encountered, the rest of the 
  412. interpretation array values are filled with 00. Should the full 
  413. width of the interpretation array be encountered, then the rest 
  414. of the scan line is discarded until an new sync pulse is 
  415. encountered. This sequence is continued until the entire frame 
  416. has been converted.
  417.  
  418.  
  419. Displaying the Data:
  420.  
  421. Once the frame has been converted, the interpretation array is 
  422. then displayed. Each byte is read from the interpretation array 
  423. and translated to an absolute gray level using the translation 
  424. array located in the first 256 bytes of the interpretation array. 
  425. There are 12 levels of gray available, plus black. The 
  426. translation array was copied into the interpretation array at the 
  427. time the interpretation array was created.
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443. The translation array is formed from the following gray level 
  444. conversion chart:
  445.  
  446.      gray level interpretation chart                       
  447.           frame data                                       
  448. gray    F3  F2  F1  F0   F3 = frame 3, F2 = frame 2        
  449. level:  76  54  32  10   F1 = frame 1, F0 = frame 0        
  450.    12:  11  xx  xx  xx   each group of two bits            
  451.    11: <11  11  xx  xx   represent the video level         
  452.    10: <11 <11  11  xx   for the frame indicated           
  453.     9: <11 <11 <11  11                                     
  454.     8:  10 <11 <11 <11   xx = any bit pattern              
  455.     7: <10  10 <11 <11   <11 = less than 11; (10, 01, 00)  
  456.     6: <10 <10  10 <11   <10 = less than 10; (01 or 00)    
  457.     5: <10 <10 <10  10   11, 10, 01, or 00 = the indicated 
  458.     4:  01 <10 <10 <10                absolute bit pattern 
  459.     3:  00  01 <10 <10                                     
  460.     2:  00  00  01 <10   the gray level for the specified  
  461.     1:  00  00  00  01   bit pattern is shown at the left  
  462.     0:  00  00  00  00                                     
  463.  
  464. There are no sync bytes in the interpretation array since they 
  465. were stripped out during the process of converting the video data 
  466. to the interpretation data. Note that it takes four video frames 
  467. to completely update the interpretation array. However, the 
  468. actual displayed data will reflect the highest gray level 
  469. determined from the four previous reads. This means that if the 
  470. video level shifts towards the white level, the change on the 
  471. display will be immediate. If the video level moves towards the 
  472. black level, the change on the display will take up to four frame 
  473. grabs to reflect the lower video level for that pixel.  
  474.  
  475. One big problem is that since the number of scan lines collected 
  476. is much greater than the resolution of pixels collected in each 
  477. scan line, the aspect ratio of the picture would be out of whack 
  478. if we were to display the data pixel for pixel as we received it.
  479. In order to get the aspect ratio back to a reasonable value, we 
  480. must throw data away. We do this by discarding three scan lines 
  481. for every one that we show. If you have a very fast buss, you may 
  482. want to change this to discard two scan lines instead of three 
  483. in order to get a more reasonable aspect ratio.
  484.  
  485. The other thing I do is to pull a little trick to improve the 
  486. horizontal resolution. Normally there is a typical horizontal 
  487. resolution of about 40 pixels. This is not very much, and it 
  488. would be useful if there were a better resolution. There is a 
  489. halfway solution. 
  490.  
  491. What I do is display the even pixels on a scan line from the scan 
  492. line that I'm currently processing. I then display the odd pixels 
  493. from the next scan line on the succeeding video frame. What this 
  494. does is to provide a random selection on the odd pixels between 
  495. the normal two sequential scanned pixels that effectively 
  496. improves the display resolution by about 50%. 
  497.  
  498. The downside is that it worsens the jitter/twinkle problem since 
  499. the odd pixel is developed from a pseudo-random sampling 
  500. mechanism which is not consistent. 
  501.  
  502. One thing to keep in mind is that the frame grab routine normally 
  503. takes between one and three video frames to collect data, and 
  504. during this time the interrupts are disabled. What that means is 
  505. that if you are operating on a computer which has a clock 
  506. interrupt faster than the normal 55ms, you will lose time, and 
  507. may experience problems. 
  508.  
  509. Also note that since the interrupts are disabled, anything that 
  510. uses high speed interrupts during the time the video data is 
  511. being collected (such as RS232), will not work. The interrupts 
  512. will be lost.
  513.  
  514. The main factor that affects speed on slower machines are the 
  515. conversion and display routines. The INS instruction used to 
  516. collect the video data is relatively cpu performance independent. 
  517. The main thing that affects its operation is the buss performance 
  518. of the computer. The faster the buss, the more video pixels that 
  519. can be collected per scan line.
  520.  
  521. One possible consideration on slower machines would be to discard 
  522. the extra scan lines in the Video to interpretation array 
  523. conversion rather than in the interpretation to display routine. 
  524. That way the extra scan lines would not even be processed, thus 
  525. increasing the speed of the overall process loop. 
  526.  
  527. ---
  528.  
  529. Future considerations for someone to do if they wish to improve 
  530. on the design would be to improve the synchronization to reduce 
  531. the jitter problem. At this point I don't have any ideas on how 
  532. to improve the problem. 
  533.  
  534. Another improvement that is possible to do would be to analyze the 
  535. captured video frame to determine the proper values to use for 
  536. capturing the data such as scan line length in pixels, vertical 
  537. sync length, total scan lines, etc. 
  538.  
  539. A mechanism to increase the size of the displayed picture, and 
  540. maintain the best resolution possible while doing so. 
  541.  
  542. Save an image to disk or a series of images to make a movie.  
  543. (see update information)
  544.  
  545. Be able to print a captured image.
  546.  
  547. Integrate the image with sound.
  548.  
  549. Add color (that's a tough one).
  550.  
  551. And of course integrating this stuff into Windows would be nice. 
  552. (I'm working on it.)
  553.  
  554. That's all folks!
  555. <eof>
  556.  
  557.