The Secret Life of Hardware

The Secret Life of Hardware
  • Generation A?
  • Ai medici condotti di Giovanni Pascoli (Italian Edition)!
  • The Psychology of Superheroes: An Unauthorized Exploration (Psychology of Popular Culture);
  • New Orleans Besieged;

In Figure 6c we will draw a vector 40 units along the X axis and 30 units along the Y axis. If we use a 1MHz clock on both the X and Y vector-length counters we end up with the vector shown in Figure 6c. It's clear that the X and Y vector length counters cannot use the same clock unless the X and Y vectors happen to be the same length. However, that would exceed the maximum drawing speed of the X deflection amplifier, so we have to scale the drawing speed to the longest axis in this example, the X axis. There are several methods for producing the clock rates we need.

A BRM is a counter that divides the input clock by a digital number. Although the pulses it produces are not guaranteed to be evenly distributed through the counting cycle they will be close enough for our purpose. The BRM used by Atari was the The is a 6-bit BRM.

With a digital input of 63, it will produce 63 output pulses for every 64 input clocks. With a digital input of 1 it will produce one output pulse every 64 input clocks. Two s were chained together to produce a bit BRM. Part way through the run of Asteroids, we used up the world's supply of s and Texas Instruments the only manufacturer of s did not have them on their schedule to make more for several months.

Rather than shut down the production of Asteroids, Howard Delman designed a daughter board with small-scale ICs to replace the s. A new layout for the Asteroids PCB was also done using the new circuitry. Now we have to either count the clocks or time them. Since the vector that results from 40 X units and 30 Y units is 50 units, the vector should be drawn so it takes 50 us.

Why do we want a constant brightness density? How much dimmer it will appear will be discussed shortly. Therefore, if we want a constant vector density, we would have to scale the clocks for both the X and Y by a factor of R so that:. Because we are interested in the length of the vectors, and not the sign, we need to take the absolute values of the vectors. In Figure 7a we will draw the vector in us, the maximum rate for the deflection amplifiers.

The resulting vector will be units long,. In Figure 7b we will draw the vector in us,. One of the downsides is that we have pissed away some drawing time, which we would probably rather use to put more vectors on the screen. The other downside is that we would have to do two multiplications, an add, a square root, and two divides one for each vector. This is a lot to do during program runtime, even if we simplify it by using a kludge for calculating R. The square root of the sum of the squares can be approximated by taking the absolute values of the two numbers, and by adding the larger one to a fraction of the smaller one.

If our game shows only predetermined pictures, as in Lunar Lander and Asteroids, we can do the calculations during program assembly and avoid doing them during program runtime. The cost is increased program storage. If the vectors are game dependent, as in the 3D objects in BattleZone, we don't have this option. Let's resume the discussion of whether this method, as precise as it is, is necessary.

In fact, the difference will be barely noticeable. The object of this exercise was simply to understand what's really going on so we can make an intelligent decision about what to do and be confident we are making a reasonable decision. The next choice of methods is to determine which axis is longer and use it to normalize the shorter vector. If X is longer: If Y is longer: We have simplified things a great deal but we still need to store more data if the calculations are performed during program assembly or, if performed during program runtime, we need a digital divider.

Atari's Digital Vector Generator simplifies one step further by using binary normalization performed during program assembly. The way binary normalization works is as follows. X and Y are each loaded into a shift register; the Time register is loaded with a preset value. The X and Y Shift Registers are shifted left made larger by a factor of two by each shift until either register is in danger of overflowing.

Each time the registers are shifted left the Time Register is shifted Right, decreasing the time the vector will be drawn by a factor of two each time. The X, Y and Timer registers always maintain the correct ratios. The vector is then drawn with the normalized values of X, Y and time from the Timer register The vectors are drawn at maximum speed within a worst case factor of almost two [] gets normalized the same as [].

Because the initial state of the Timer has only one bit set at a time the remainder are always zero it can be represented as a 4-bit number. Thus, in the Digital Vector Generator, Binary Normalization is performed during program assembly and the initial state of the Timer is stored as a 4-bit number in the vector database. A 4-bit Adder is used to allow for additional binary scaling for short vectors.

Otherwise, the 4-bit value would overflow This is especially useful for small objects such as asteroids. As we will see later in the Analog Vector Generator, circuitry was added to perform binary normalization during program runtime. This has nothing to do with whether the vector generator is Digital or Analog. It was added because the Analog Vector Generator was used in BattleZone where the object vectors were the result of 3D calculations performed during program runtime and therefore, could not be done during program assembly time.

Feeding the DACs with data and keeping everything going at full speed is a formidable task. The was nowhere near fast enough even if it didn't have to do anything else, like run the game. The PROM is programmed so that the data at each address selects the next address. The Latch allows the output of the PROM to stabilize before it is applied back to its input, and provides the basic timing of the machine.

Clearing the Latch causes the machine to enter State 0. The data at State 0 determines the next State. Because this machine allows us to select different states, it is called a State Machine. We can decode the states to provide the maximum number of functions eight. The disadvantage is that we will only be able to perform one function per machine cycle. By not decoding the states we will be able to perform several functions per machine cycle but then we will need a bit for each function.

Or, we can do a little of each. We could also combine decoded states on the back-end, but since this is a teaching example, we won't. In Figure 9 we have added a Decoder to the output of the Latch so each state can be used to perform a function. The Decoder is gated by the Clock signal to produce strobed signals for each state.

These Functions will normally be performed at the end of the machine cycle. We have also added two outputs to the PROM. We have not increased the number of states. These outputs are only there for the ride so we will be able to perform some functions in parallel with the strobed functions. In Figure 10a on the next page we have added a ROM memory, controlled by a Counter which can be cleared and incremented.

The next state will be State 1. State 1 will load the data into the Y Latch and increment the Program Counter to address 2. The next state will be State 2. State 2 will trigger the Sample-and-Hold circuits. The next state will be State 0. We have now created a simple processor with one Instruction consisting of three micro-instructions. We will continue to execute this Instruction, fetching and loading data for the X and Y DACs and strobing their Sample-and-Holds forever, or until we get tired of it and turn it off.

In this example, if we were to get a glitch that put us into an unused state we will end up spinning in State 7. We could have just as easily programmed it to go to State 0 in order to continue. Or perhaps we should generate a Reset pulse. We could also have programmed it so that all errors go to State 7 and then used the signal to turn on an LED. Let's make our State Machine more interesting. Referring to Figures 11a and 11b, we have added several items.

As a result, we now have the capability of performing eight different sequences. In other words, we now have eight instructions. If you look at the Program Counter you will see that we can now load it as well as increment it. Not only that, but the Multiplexer Mux gives us a choice of two different sources to load it from. The other source requires some explanation. It loads the data for the Program Counter from the Register File Memory see Figure 11b which is configured as a memory stack. It will allow us to do subroutines.

When we write to the current Register File address and increment the counter, it is called Pushing the Data on the Stack otherwise known as a Push. When we decrement the counter and read the current Register File address, it is called Popping the Data from the Stack otherwise known as a Pop. Returning from a subroutine poses a subtle problem. The Stack pointer points to the next available address, so we have to use one state to pop the Stack and another one to Load the Program Counter.

In this example it is a no-op whose strobe signal is not used for anything else. The remaining instructions are all programmed the same as the Halt Instruction. Replace the Program ROM with RAM and add multiplexers so that a host processor like a can access it to change the program and data to display different patterns.

We probably also want to increase the size of the memory. We are using only three of the eight bits in the command byte. We can use two of the five unused bits to control screen intensity. While we're at it we should add screen blanking so that the screen is blanked during the DAC Sample phase and unblanked during the Hold phase. We can add a Timer so we can control how long the dots are displayed. There are unused three bits left in the command byte. We can use them to select eight different timing lengths, or we can add an instruction to load eight bits of data into a Timer Register.

  • Product details.
  • 1st Foundations LEGO Brick Creations -Instructions for a Rocking Drum Set.
  • See a Problem?.
  • .

If we choose to add an eight-bit Timer Register we will need another strobe to load the data into it. For this we would need to either expand the State PROM to increase the number of states or squeeze in the extra instruction by creative state decoding. This amounts to creating a second block of instructions where all the instructions are the same.

We'll call it the Spin instruction. Since the Program Counter was incremented before we entered the Spin cycle, when the timer is done we will be ready to decode the next instruction.

KIRKUS REVIEW

We can reduce the number of memory accesses by increasing the size width of the data bus to 16 bits so that both X and Y DAC values can be loaded in the same instruction. The cost is that the single bye instructions will also now be 16 bits, thereby wasting some memory. If we were to keep adding these things, pretty soon we would end up with the Asteroids Vector Generator State Machine.

We should also add the capability of writing to main memory. The traditional view is that processors are divided into two types: Microprogrammed processors are faster to design, easier to modify, but slower in operation than Random Logic processors. Random Logic processors take longer to design, are more difficult to modify, but are faster in operation than Microprogrammed processors.

However, the tradeoffs between Microprogrammed processors and Random Logic processors are not as clear-cut as they used to be. If you are building the processor out of discrete logic, the traditional view is certainly correct. Changing a Random Logic requires rewiring physical devices.

The Secret Life of Snakes • 2016

Other software tools can also be used in designing the processor. When implemented in an FPGA this is not the case. Also, in the old days, software tools for designing ICs were crude or non-existent. You had to spend a large amount of money to fabricate an IC to find out if it worked. Also consider that regardless of whether the processor is Microprogrammed or uses Random Logic it still has to talk to the same registers and perform the same micro-operations. As an intellectual exorcise, let's look at how we could implement Figure 11's Microprogrammed machine using Random Logic.

This will be shown in Figures 12a - 12i. The design hasn't been optimized. It hasn't even been tested. You could probably improve it if you wanted to. Referring to Figure 12a, we'll start by generating a number of clock phases by using a Counter which is Decoded and gated to produce the timing chart as shown.

Clock is the Master Clock. Each Instruction will begin at Clk 0. When an Instruction ends, it will assert a Clear command to clear the Counter with the next Clock signal. In Figure 12b, we load the Instruction into the Instruction Latch and Decode it so we know what Instruction to execute. Each Instructions ends by providing the memory address of the next Instruction. This also ends the instruction. A JSR is almost as easy. Lunar Lander was released in August Asteroids came out in November Asteroids Deluxe came out in I have scanned the schematic for the Digital Vector Generator used in Asteroids and broken it down into printable sheets.

I have also included the commentary from the original schematic. As you can see, although it uses a State Machine there is also a considerable amount of random logic. The ADJ is generally considered difficult and expensive to find. I found it on the Analog Devices Web site www. This is shown in Figure 5 which has been reproduced here. If the current through a capacitor is zero, the voltage across the capacitor stays wherever it was. The longer we go, the slower it gets. It is not a very good ramp. The rise time for this RC circuit is defined as the time it takes for VC to reach An ideal op-amp has infinite gain and its inputs require zero current.

Since there is no current flowing into the negative input to the op amp, all the current through C will be the same as the current through R. Since the op-amp has infinite gain, the voltage across between op-amp's positive and negative inputs will be zero, assuming the op-amp's output is less than infinite. By referencing the op-amp's positive input to ground, the voltage at the negative input will be zero.

The circuit inverts the polarity of the input, so a positive voltage at Vin produces a negative ramp at Vout and a negative voltage at Vin produces a positive voltage at Vout. Officially, this circuit is an Integrator because the output is the sum over time of all the input voltages. As it turns out, most DACs produce a current output. However, because most DACs have a limited drive capabilty and want to see a low circuit impedance most DACs use an op-amp on their outputs.

Notice that we have also added two resistors. DACs require a reference voltage or current.

Open Library

It doesn't always end there, either. The next state will be State 1. A 4-bit Adder is used to allow for additional binary scaling for short vectors. We kept devising circuits to match the turn-on and turn-off characteristics of the DAC but the Programmers just drew the vectors faster in order to get more of them on the screen. Now we have to either count the clocks or time them. It wasn't much fun.

That's what R1 is for. This method was covered in the section on Digital Vector Generators. By the way, the DACs used in the earlier sections were assumed to have voltage outputs in order to avoid unnecessary detail. If we wanted a DAC with a voltage output that did not integrate the values we would replace the Capacitor with a Resistor and end up with the circuit shown in Figure Referring back to Figure 15, we now have a DAC that produces a bipolar output current that is the product of.

We are almost ready to draw some vectors. The problem is in starting and stopping the ramp. If we don't do a good job starting and stopping the ramp, the vectors will look pretty bad. If we give the DAC a digital input of zero, the output current will be zero and Vout will stay where it is. Unfortunately, the DAC takes too long to change its current for this to work. The DAC also produces glitches when it changes. How fast the vectors are drawn. The faster the vector is drawn, the more time it spends in the turn-on and turn-off periods, and therefore the more noticeable the turn-on and turn-off periods are.

By the time we got to Star Wars, the vector speed and monitor speed capability had increased to the point where the vectors looked really bad. We kept devising circuits to match the turn-on and turn-off characteristics of the DAC but the Programmers just drew the vectors faster in order to get more of them on the screen. The charge stored in the capacitor is a history of all the charge that has ever been stored in it, including all the turn-on and turn-off mismatches. In other words, the errors keep adding up. If allowed to continue, objects would not end up where they are supposed to be on the screen.

Eventually, the outputs would drift completely out of control. The simplest method, and the one chosen, was to periodically discharge the capacitor, as shown in Figure This was done with an LF Analog Switch. Analog switches like the and require that the control signal have a range somewhat greater than the analog signal to be controlled.

If you are controlling it with a TTL signal, it means making a level translator. It's more expensive, but worth it. Capacitors are more complicated than you may think. Not all capacitors work equally well in this application. In fact, there are very few capacitors that are acceptable here. It's like there is a resistor across our capacitor that causes it to discharge all by itself.

Item Preview

This would cause the position of the beam to drift to the center so it isn't where it is supposed to be. Leakage is a function of the type and quality of the dialectric used. Another is Inductance which will make the response of the Integrator change according to the vectors we are drawing. The Inductance of a capacitor depends on the construction of the capacitor. For example, take a capacitor whose plates are made by taking two foil strips of conducting material such as aluminum with a dialectric between them and rolling them up with an additional dielectric so that adjacent layers don't short out.

If the connections to the plates are made on only one end, the other end will have the entire length of the plates between it and the capacitor terminal. The length of the plates will have inductance. However, if the capacitor terminals are connected to each layer at the sides of the roll the distance of each segment of the plates will be much shorter. This is shown in Figures 19a, 19b, 20a, and 20b. In the interests of clarity I have shown only one plate. Another property of capacitors is Series Resistance. Like Inductance, Series Resistance will make the response of the Integrator change according to the vectors we are drawing.

Again, this is caused by the construction of the capacitor as well as the shape of the plates and the material used in the plates. A capacitor constructed as in Figures 19a, 19b will have a higher Series Resistance than the one in Figures 20a, 20b. By the way, the official term for Series Resistance is Equivalent Series Resistance ESR and is an important specification of capacitors used in high frequency switching power supplies. When the current that is charging and discharging the capacitor goes through the Equivalent Series Resistance it produces heat. The greater the ESR, the greater the heat produced.

You can't escape Ohm's Law. The final capacitor property we will consider is related the phenomenon known as Charge Redistribution. To start with, when you charge a capacitor to a particular voltage, the charges stored in the dielectric do not uniformly distribute themselves throughout the dielectric; they favor the positive plate.

After all, the charges are electrons which have a negative charge.

Editorial Reviews

The Secret Life of Hardware [Cheryl Lachowski] on bahana-line.com *FREE* shipping on qualifying offers. In this thematically creative chapbook of poems, we learn. The Secret Life of Hardware: A Science Experiment Book [Vicki Cobb, Bill Morrison] on bahana-line.com *FREE* shipping on qualifying offers. Examines the.

And when you discharge a capacitor, the charges do not immediately redistribute themselves throughout the dielectric. This is why, when you think you have discharged a capacitor, you can come back a short time later and a small amount of charge has magically reappeared. No, the capacitor has not been recharged by the atmosphere, or the aether, or by phlogiston.

I did the following experiment with a uF 25V electrolytic capacitor.

The reading was 0. Next I connected a 9V transistor battery across it, observing polarity. The reading was 9. When I disconnected the battery the voltage began to droop very slowly due to capacitor leakage. The results are shown in Figure It reached a peak of about 0. When we discharge the capacitor in our Integrator we want it really discharged.

Some capacitors do better than others for reasons that are not clear. Mylar Capacitors were used in BattleZone, but did not work very well in Star Wars, which had a faster drawing speed.

The Secret Life of Cosmetics: A Science Experiment Book

The capacitors that worked the best for us in Star Wars were Polycarbonate Capacitors. Polycarbonate is a clear and colorless amorphous thermoplastic notable for its high impact resistance. In addition to its use in capacitors it is used in glazing, safety shields, and CDs. An excellent Web site for the properties of materials is http: Polystyrene capacitors are also considered high quality capacitors but they worked poorly in the Integrator.

The properties of polystyrene are similar to polycarbonate but for reasons that are unknown the polystyrene capacitors exhibited problems that appear to be the result of charge redistribution. Finally, the issues of Leakage, Inductance, and Series Resistance are not confined to the capacitor itself. They can also be caused by circuit design and layout. The circuit layout can also screw things up if there is crosstalk from another signal trace.

It doesn't always end there, either. One time I was asked to look at a prototype AVG board for another project which was producing really nasty vectors. The digital circuitry had been checked and was ok. We ended up unsoldering all the parts in the Integrator and connecting them together off the board in the air. That fixed the problem and we concluded that the material used in the PC Board was contaminated. The next run of prototype boards was ok. We can now start and stop a ramp whose slope is determined by a bit digital word.

We can also discharge the Integration capacitor to center the beam. This is analogous to the Digital Vector Generator where we can start and stop a ramp produced by a Binary Rate Multiplier which clocks a counter that feeds a DAC whose output is deglitched by a Sample-and-Hold. The Digital Vector Generator produces vectors consisting of points at discrete coordinates.

While the Analog Vector Generator has discrete values representing the length of a vector, the values in-between are continuously and infinitesimally changed subject to the restrictions of living in a Quantum Universe. Thus, there is no stairstepping. The Digital Vector Generator can set the position to any coordinate by loading it into the counter.

The Analog Vector Generator can only center the beam and draw a blank vector to the desired position. The ability of the Digital Vector Generator to load the counter was mostly unused since the fastest the XY monitors could move the beam was about the same as the fastest drawing speed. The Counters in the Digital Vector Generator require different clock frequencies to make different X and Y values, while in the Analog Vector Generator the X and Y values automatically produce analog ramps of the proper ratio.

Since we are always working with changes in vector length, they are referred to as Delta values. At this point we are faced with some of the same issues for the Analog Vector Generator as we were with the Digital Vector Generator, namely, how fast to draw the vectors. This has already been discussed in the section on Digital Vector Generators.

The basic theory of State Machines has also been covered in the section on Digital Vector Generators. Some of the differences are due to the differences between the analog circuitry in the Analog Vector Generator and the digital circuitry used in the Digital Vector Generator.

Some of the differences are related to the type of game the Analog Vector Generator was designed to run. For example, because the trio of games scheduled to use the new Analog Vector Generator were 3D games where the vectors are the result of 3D transformations performed during program run-time, vector normalization must also be performed during program runtime. Therefore, the Analog Vector Generator performs vector Normalization as part of its operation. Another feature in the AVG used in these games is a Window circuit that allows the programmer to set a window.

Vectors that are drawn outside the window are blanked. This was used in BattleZone to keep game vectors out of the radar display. The way it works is quite elegant. No, I didn't design it. I think Howard Delman did. The programmer draws a vector which can be drawn at zero brightness to the desired position of the Lower Right Corner of the Window, and issues an HST Command. This operates Sample-and-Hold 1. The outputs of these Sample-and-Hold circuits are used with two sets of Comparators. At the same time, the other set of Comparators compares the current Y position to see if it is Less than the Y value of Sample-and-Hold 2 as well as Greater than the Y value of Sample-and-Hold 1.

If all these conditions are true, then we are inside the Window, and we refrain from blanking the vector. The Window circuit is active all the time; it cannot be disabled. For a full screen display you simply set the Window to the full screen. No doubt it would have been used in Malibu Grand Prix if the game had been produced. If we change VREF we will scale the vectors beginning from that starting point; we do not affect that starting point. However, this method of linear scaling does not change the vector drawing time, so that a vector that is linearly scaled takes the same amount of time to draw as a vector that has not been, thereby wasting vector drawing time.

Binary Scaling does adjust the vector drawing time. This combined use of Linear and Binary Scaling was used in Star Wars to blow up the Death Star along with one other trick that will be explained later. The final part of the Analog Vector Generator circuit, which was used in all of the XY games, selected either the regular X and Y signals or inverted versions of the signals.

Sometimes it was just a jumper on the board; sometimes it was under software control. This allowed maximum flexibility in doing cocktail games where players sitting across from each other took turns or games in which the monitor was viewed through a mirror. The company gave a party to commemorate this accomplishment. There was another game at the show that attracted very little attention at the time called Pac Man. BattleZone sold about 25, units.

Red Baron was released in May It didn't do quite as well as BattleZone; it sold about units. One of those units was in an airport when Wild Bill Stealey and Sid Meier played it and decided they could do better, so they went on to found Microprose. Malibu Grand Prix was a driving game where you drove around a track. It was loosely modeled after the Malibu Grand Prix go-kart driving centers owned by Warner Communications, Atari's parent at the time. The game was fun to drive; the problem was that as you better at it your playing time went down.

In a desperate attempt to salvage it, it was given Sprint steering, from the game of the same name. In a real car, as long as the steering wheel is turned, the car continues to turn. In Sprint steering, the position of the wheel determines the position of the car. It's ok kinda in a third person game like Sprint. In a First Person game it's a disaster. Malibu was canceled shortly thereafter. Normally the Components Group evaluated parts to be added to the Approved Vendors List AVL but since this was an especially critical part I was asked to evaluate it, which I did, and gave it my blessing.

BattleZone and Red Baron both used another item of some interest, the Math Box, which did the arithmetic for the 3D math multiplies, adds, and divides. Each one was only 4-bits but had hooks so that it could be expanded. Four were used to produce a bit machine and they were controlled by another State Machine. At one time Bit Slices were very attractive to people designing their own computers but have largely been replaced by FPGAs, sometimes implementing the architecture.

At one time it was to be called Moon Tank. The BattleZone team was as follows:. Bit Slice Math Box: At the time, the game was going to be called Moon Tank which meant that the object in the sky would be the Earth, so I looked in my Almanac and used the East coast of Australia as a model. At one of the early game reviews, Gene Lipkin objected to the radar because it looked like the radar in Subs.

Since Subs had not been a successful game, Gene was afraid people would associate the radar with Subs, thereby dooming Battlezone. To give it a different appearance, Ed changed the radar so that it scanned from side to side. It looked so dumb that Gene relented and allowed us to restore the original radar. I used two counters with slightly different counting periods and summmed several outputs to produce a somewhat disreputable waveform. Since the counters had different periods they produced a beat note when summed. As the frequency of the counters was increased, the beat note also increased.

This is what makes the engine throb. The clock was generated by a and had only two frequencies. To control the frequencies I used a circuit to shift the 's threshhold voltage. This was done with a slow ramp so that the engine sound changed smoothly changed speeds. At one time, early in the game's development, it was configured to permit two people to play head-to-head on one monitor.

This was made possible by the Window Blanking circuit. The two-player version was dumped, possibly because the resulting screen size for each player was considered too small. Battlezone was the first game to use a new development system: It also had an external 8" floppy disk drive as well as a serial port for connecting to the VAX. The Blue Box was especially fond of reporting Comm Error 60 when it got confused, which was often.

With the Black Box system, programed were edited, assembled, and linked on the PDP11 Model 20s, and a paper tape was produced. The Black Box used its Paper Tape reader to load the program. A few months after BattleZone was released we received a letter from a fan who knew someone who knew someone who had seen someone drive up into the mountains, find a castle, and get a zillion points.

There was also a rumor that U. Army Recruiters used to hang around arcades and when they saw a likely-looking candidate playing BattleZone, would go up to him and ask, "How would you like to drive a real one? And finally, I want to mention Doug Snyder. Although he was officially a Technician, he was a skilled hardware engineer. Between Morgan, Doug, and Howard, there wasn't a whole lot of hardware for me to design in BattleZone.

Tempest came out in October and added color. Tempest did not have the Window circuit, either because it was not needed by the game or because the board space was needed by the pincushion correction circuitry. But it did have something new: Figure 24 shows what's in it, followed by the specification of the part. Black Widow was released in February I don't have a manual so I don't know what's in it.

If you are a seller for this product, would you like to suggest updates through seller support? Learn more about Amazon Prime. Read more Read less. Explore our editors' picks for the best kids' books of the month. See which new books our editors' chose as this month's favorites for kids of all ages. Lippincott; First Printing edition October Language: Be the first to review this item Amazon Best Sellers Rank: Related Video Shorts 0 Upload your video.

Customer reviews There are no customer reviews yet. Share your thoughts with other customers. Write a customer review. There's a problem loading this menu right now. Get fast, free shipping with Amazon Prime. Your recently viewed items and featured recommendations.