*****SPRITE ATTRIBUTE TABLE*****
Row 0: Vertical Position (sprite 1)
Row 1: Horizontal Position (sprite 1)
Row 2: Sprite 1 Address in generator table
Row 3: Unused
Row 4: Vertical Position (sprite 2) 
Row 5: Horizontal Position (sprite 2)
Row 6: Sprite 2 Address in generator table
Row 7: Unused
...
Since our game will start at a vertical position of 20 and horizontal position of 64, setting vertical position to 0 and horizontal position of 0 will draw the sprite at pixel coordinates v=20 and h=64. 

Note: Due to the limitation of 8 bits, the vertical and horizontal positions of the sprite will be double the value in the table. For example, setting vertical position to 50 and horizontal position of 80 will draw the sprite at pixel coordinates v=20+2*50=120, h=64+80*2=224.

Addressing is relative. Sprite address of 8'b1 points to the 1st sprite, and 8'b10 points to the 2nd sprite.


*****SPRITE GENERATOR TABLE*****
Row 0: |Pixel 1 | Pixel 2| (1st pixel row)
Row 1: |Pixel 3 | Pixel 4| (1st pixel row)
...
Row 7: |Pixel 15 | Pixel 16| (1st pixel row)
Row 8: |Pixel 1 | Pixel 2| (2nd pixel row)
Row 9: |Pixel 3 | Pixel 4| (2nd pixel row)
...
Row 15: |Pixel 15 | Pixel 16| (2nd pixel row)
...
Row 128: |Pixel 1 | Pixel 2| (2nd sprite, 1st pixel row)
Row 129: |Pixel 3 | Pixel 4| (2nd sprite, 1st pixel row)
...
Each pixel consists of 4 bits, which corresponds to a RGB value in the color lookup table. Each row in the generator table stores two pixels. Therefore, one 16 pixel row of a sprite uses 8 rows in the generator table, and an entire 16*16 sprite uses 8*16=128 rows in the generator table


*****PATTERN NAME TABLE*****
Row 0: Address of 1st tile
Row 1: Address of 2nd tile
...
Row N: Address of Nth tile
...
Since our game will start at a vertical position of 20 and horizontal position of 100, 1st tile will start at v=20, h=64.

64 tiles per row, 55 tiles per column

Addressing is relative. Tile address of 8'b1 points to the 1st pattern in the generator table, and 8'b10 points to the 2nd pattern.

*****PATTERN GENERATOR TABLE*****
Row 0: |Pixel 1 | Pixel 2| (1st pixel row)
Row 1: |Pixel 3 | Pixel 4| (1st pixel row)
Row 2: |Pixel 5 | Pixel 6| (1st pixel row)
Row 3: |Pixel 7 | Pixel 8| (1st pixel row)
Row 4: |Pixel 1 | Pixel 2| (2nd pixel row)
Row 5: |Pixel 3 | Pixel 4| (2nd pixel row)
Row 6: |Pixel 5 | Pixel 6| (2nd pixel row)
Row 7: |Pixel 7 | Pixel 8| (2nd pixel row)
...
Row 32: |Pixel 1 | Pixel 2| (2nd pattern, 1st pixel row)
Row 33: |Pixel 3 | Pixel 4| (2nd pattern, 1st pixel row)
...
Each pixel consists of 4 bits, which corresponds to a RGB value in the color lookup table. Each row in the generator table stores two pixels. Therefore, one 8 pixel row of a pattern uses 8 rows in the generator table, and an entire 8*8 pattern uses 4*8=32 rows in the generator table
