514
val |= s->regs.default_tile << 16;
515
break;
516
case DEFAULT_SC_BOTTOM_RIGHT:
517
- val = s->regs.default_sc_bottom_right;
517
+ val = (s->regs.default_sc_bottom << 16) |
518
+ s->regs.default_sc_right;
519
+ break;
520
+ case SC_TOP:
521
+ val = s->regs.sc_top;
522
+ break;
523
+ case SC_LEFT:
524
+ val = s->regs.sc_left;
525
+ break;
526
+ case SC_BOTTOM:
527
+ val = s->regs.sc_bottom;
528
+ break;
529
+ case SC_RIGHT:
530
+ val = s->regs.sc_right;
531
+ break;
532
+ case SRC_SC_BOTTOM:
533
+ val = s->regs.src_sc_bottom;
534
+ break;
535
+ case SRC_SC_RIGHT:
536
+ val = s->regs.src_sc_right;
537
+ break;
538
+ case SC_TOP_LEFT:
539
+ case SC_BOTTOM_RIGHT:
540
+ case SRC_SC_BOTTOM_RIGHT:
541
+ qemu_log_mask(LOG_GUEST_ERROR,
542
+ "Read from write-only register 0x%x\n", (unsigned)addr);
543
break;
544
default:
545
break;
902
s->regs.dst_offset = s->regs.default_offset;
903
s->regs.dst_pitch = s->regs.default_pitch;
904
}
905
+ if (!(data & GMC_SRC_CLIPPING)) {
906
+ s->regs.src_sc_right = s->regs.default_sc_right;
907
+ s->regs.src_sc_bottom = s->regs.default_sc_bottom;
908
+ }
909
+ if (!(data & GMC_DST_CLIPPING)) {
910
+ s->regs.sc_top = 0;
911
+ s->regs.sc_left = 0;
912
+ s->regs.sc_right = s->regs.default_sc_right;
913
+ s->regs.sc_bottom = s->regs.default_sc_bottom;
914
+ }
915
break;
916
case DST_WIDTH_X:
917
s->regs.dst_x = data & 0x3fff;
991
}
992
break;
993
case DEFAULT_SC_BOTTOM_RIGHT:
959
- s->regs.default_sc_bottom_right = data & 0x3fff3fff;
994
+ s->regs.default_sc_right = data & 0x3fff;
995
+ s->regs.default_sc_bottom = (data >> 16) & 0x3fff;
996
+ break;
997
+ case SC_TOP_LEFT:
998
+ s->regs.sc_left = data & 0x3fff;
999
+ s->regs.sc_top = (data >> 16) & 0x3fff;
1000
+ break;
1001
+ case SC_LEFT:
1002
+ s->regs.sc_left = data & 0x3fff;
1003
+ break;
1004
+ case SC_TOP:
1005
+ s->regs.sc_top = data & 0x3fff;
1006
+ break;
1007
+ case SC_BOTTOM_RIGHT:
1008
+ s->regs.sc_right = data & 0x3fff;
1009
+ s->regs.sc_bottom = (data >> 16) & 0x3fff;
1010
+ break;
1011
+ case SC_RIGHT:
1012
+ s->regs.sc_right = data & 0x3fff;
1013
+ break;
1014
+ case SC_BOTTOM:
1015
+ s->regs.sc_bottom = data & 0x3fff;
1016
+ break;
1017
+ case SRC_SC_BOTTOM_RIGHT:
1018
+ s->regs.src_sc_right = data & 0x3fff;
1019
+ s->regs.src_sc_bottom = (data >> 16) & 0x3fff;
1020
+ break;
1021
+ case SRC_SC_RIGHT:
1022
+ s->regs.src_sc_right = data & 0x3fff;
1023
+ break;
1024
+ case SRC_SC_BOTTOM:
1025
+ s->regs.src_sc_bottom = data & 0x3fff;
1026
break;
1027
default:
1028
break;