4 #undef LOOKUP_YSCROLL_REC
5 #define LOOKUP_YSCROLL_REC(rec_no) \
7 yscroll_amount = get_word(vsram + rec_no * 2) & 0x7ff; \
11 yscroll_amount >>= 1; \
14 yscroll_amount += line; \
16 yoff = ((yscroll_amount >> 3) & (ysize - 1)); \
17 tile_line = (tiles + ((xsize * yoff) & 0x1fff)); \
18 scan = (yscroll_amount & 7); \
25 static int sizes[4] = { 32, 64, 64, 128 };
36 two_cell_vscroll = ((reg[11] >> 2) & 0x1);
44 if ((line >> 3) >= (reg[18] & 0x1f))
49 if ((line >> 3) < (reg[18] & 0x1f))
63 xsize = (sizes[(reg[16] & 3)] << 1);
64 ysize = sizes[((reg[16] >> 4) & 3)];
71 hscroll_rec_ptr = (vram + ((reg[13] << 10) & 0xfc00));
72 tiles = (vram + (reg[2] << 10));
74 hscroll_rec_ptr = (vram + ((reg[13] << 10) & 0xfc00) + 2);
75 tiles = (vram + (reg[4] << 13));
92 switch (reg[11] & 3) {
99 hscroll_rec_ptr += ((line & 7) << 2);
103 hscroll_rec_ptr += ((line & ~7) << 2);
107 hscroll_rec_ptr += (line << 2);
111 hscroll_amount =
get_word(hscroll_rec_ptr);
112 xoff_mask = xsize - 1;
113 xoff = ((-(hscroll_amount>>3) - 1)<<1) & xoff_mask;
114 where = dest + (xstart + (hscroll_amount & 7)) * (int)
Bpp;
120 if (two_cell_vscroll == 0)
127 for (x = -1; (x <=
w); x++) {
140 if ((two_cell_vscroll) && ((x % 2 == 0) || (x == -1))) {
148 uint8_t cell_index = (uint8_t) x %
w;
149 int vscroll_rec_no = 2 * (cell_index / 2);
162 if (reg[17] & 0x80) {
164 if (x >= ((reg[17] & 0x1f) << 1))
169 if ((x + 1) < ((reg[17] & 0x1f) << 1))
175 #if (FRONT == 0) && (PLANE == 1)
189 xoff = ((xoff + 2) & xoff_mask);