+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tw+2), mv[id].map->tiles->tileHeight);
+ }else mapDrawRow(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);
+}
+
+
+//TODO finish this wwww
+void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* increment the pixel position and update the page */
+ mv[0].video->page[id].dx += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dx >= mv[0].dxThresh )
+ {
+ /* block copy pattern to where we will draw the sprite */
+ vga_setup_wm1_block_copy();
+// {
+// word i;
+// byte o,o2;
+// o2 = *mv[0].video->page[id].data+4;
+// o = *mv[0].video->page[id].data;
+// for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+// }
+ _fmemmove(mv[0].video->page[id].data+4, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+ vga_restore_rm0wm0();
+ /* Snap the origin forward */
+ mv[0].video->page[id].data += 4;
+ mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+ }
+}
+
+void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* decrement the pixel position and update the page */
+ mv[0].video->page[id].dx -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dx == 0)
+ {
+ /* block copy pattern to where we will draw the sprite */
+ vga_setup_wm1_block_copy();
+// {
+// word i;
+// byte o,o2;
+// o2 = *mv[0].video->page[id].data-4;
+// o = *mv[0].video->page[id].data;
+// for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+// }
+ _fmemmove(mv[0].video->page[id].data-4, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+ vga_restore_rm0wm0();
+ /* Snap the origin backward */
+ mv[0].video->page[id].data -= 4;
+ mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+ }
+}
+
+void near ScrollUp(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* decrement the pixel position and update the page */
+ mv[0].video->page[id].dy -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dy == 0)
+ {
+ /* block copy pattern to where we will draw the sprite */
+ vga_setup_wm1_block_copy();
+// {
+// word i;
+// byte o,o2;
+// o2 = *mv[0].video->page[id].data-mv[0].video->page[id].pi;
+// o = *mv[0].video->page[id].data;
+// for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+// }
+ _fmemmove(mv[0].video->page[id].data-mv[0].video->page[id].pi, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+ vga_restore_rm0wm0();
+ /* Snap the origin backward */
+ mv[0].video->page[id].data -= mv[0].video->page[id].pi;
+ mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+ }
+}
+
+void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid)
+{
+ /* increment the pixel position and update the page */
+ mv[0].video->page[id].dy += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[0].video->page[id].dy >= mv[0].dxThresh )
+ {
+ /* block copy pattern to where we will draw the sprite */
+ vga_setup_wm1_block_copy();
+// {
+// word i;
+// byte o,o2;
+// o2 = *mv[0].video->page[id].data+mv[0].video->page[id].pi;
+// o = *mv[0].video->page[id].data;
+// for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+// }
+ _fmemmove(mv[0].video->page[id].data+mv[0].video->page[id].pi, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
+ /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+ vga_restore_rm0wm0();
+ /* Snap the origin forward */
+ mv[0].video->page[id].data += mv[0].video->page[id].pi;
+ mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+ }