[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/7] sm501: Implement negated destination raster
From: |
BALATON Zoltan |
Subject: |
[Qemu-devel] [PATCH v2 4/7] sm501: Implement negated destination raster operation mode |
Date: |
Tue, 26 Jun 2018 23:18:20 +0200 |
From: Sebastian Bauer <address@hidden>
Add support for the negated destination operation mode. This is used e.g.
by AmigaOS for the INVERSEVID drawing mode. With this change, the cursor
in the shell and non-immediate window adjustment are working now.
Signed-off-by: Sebastian Bauer <address@hidden>
Signed-off-by: BALATON Zoltan <address@hidden>
---
hw/display/sm501.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index 8522042..08631d5 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -705,6 +705,8 @@ static void sm501_2d_operation(SM501State *s)
uint32_t color = s->twoD_foreground;
int format_flags = (s->twoD_stretch >> 20) & 0x3;
int addressing = (s->twoD_stretch >> 16) & 0xF;
+ int rop_mode = (s->twoD_control >> 15) & 0x1; /* 1 for rop2, else rop3 */
+ int rop = s->twoD_control & 0xFF;
/* get frame buffer info */
uint8_t *src = s->local_mem + (s->twoD_source_base & 0x03FFFFFF);
@@ -729,6 +731,8 @@ static void sm501_2d_operation(SM501State *s)
int y, x, index_d, index_s; \
for (y = 0; y < operation_height; y++) { \
for (x = 0; x < operation_width; x++) { \
+ _pixel_type val; \
+ \
if (rtl) { \
index_s = ((src_y - y) * src_width + src_x - x) * _bpp; \
index_d = ((dst_y - y) * dst_width + dst_x - x) * _bpp; \
@@ -736,7 +740,13 @@ static void sm501_2d_operation(SM501State *s)
index_s = ((src_y + y) * src_width + src_x + x) * _bpp; \
index_d = ((dst_y + y) * dst_width + dst_x + x) * _bpp; \
} \
- *(_pixel_type *)&dst[index_d] = *(_pixel_type *)&src[index_s];\
+ if (rop_mode == 1 && rop == 5) { \
+ /* Invert dest */ \
+ val = ~*(_pixel_type *)&dst[index_d]; \
+ } else { \
+ val = *(_pixel_type *)&src[index_s]; \
+ } \
+ *(_pixel_type *)&dst[index_d] = val; \
} \
} \
}
--
2.7.6
- [Qemu-devel] [PATCH v2 0/7] Misc sm501 improvements, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 6/7] sm501: Fix support for non-zero frame buffer start address, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 7/7] sm501: Set updated region dirty after 2D operation, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 4/7] sm501: Implement negated destination raster operation mode,
BALATON Zoltan <=
- [Qemu-devel] [PATCH v2 5/7] sm501: Log unimplemented raster operation modes, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 3/7] sm501: Use values from the pitch register for 2D operations, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 2/7] sm501: Perform a full update after palette change, BALATON Zoltan, 2018/06/26
- [Qemu-devel] [PATCH v2 1/7] sm501: Implement i2c part for reading monitor EDID, BALATON Zoltan, 2018/06/26
- Re: [Qemu-devel] [PATCH v2 0/7] Misc sm501 improvements, BALATON Zoltan, 2018/06/30