From patchwork Mon May 16 14:29:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 12850936 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 02B91C433EF for ; Mon, 16 May 2022 14:54:10 +0000 (UTC) Received: from localhost ([::1]:47294 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nqc6r-0006uP-Up for qemu-devel@archiver.kernel.org; Mon, 16 May 2022 10:54:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nqbip-00037O-CR for qemu-devel@nongnu.org; Mon, 16 May 2022 10:29:20 -0400 Received: from mout.gmx.net ([212.227.17.22]:34989) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nqbin-0004vq-B1 for qemu-devel@nongnu.org; Mon, 16 May 2022 10:29:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1652711350; bh=XCzoKtLiqwB+wGIJydxODnfKgMRFnsuvuxrP+KHIzYo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=ghl0w5yvYFE0Mu31Cl9XLGwLOQoNlByER3GszJEjLCncHxkFYwy1Sw4NKwXip7qLa f/L6dGUe5vcDRk5o1HmMbKH1ibkQYttK5iYB181wAuM+HnachKJSoA/Ty1DF0WKkFI Ok++/DcMEFQn1QOep18aGYW12LChqzfwa4E+wcds= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from p100.fritz.box ([92.116.160.68]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MHoNC-1o4Moi30kg-00EvPC; Mon, 16 May 2022 16:29:10 +0200 From: Helge Deller To: Mark Cave-Ayland , qemu-devel@nongnu.org, Richard Henderson , Sven Schnelle , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Cc: Helge Deller , Stefano Repici Subject: [PATCH v2 6/7] artist: Emulate screen blanking Date: Mon, 16 May 2022 16:29:06 +0200 Message-Id: <20220516142907.32827-7-deller@gmx.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220516142907.32827-1-deller@gmx.de> References: <20220516142907.32827-1-deller@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:Guc79zQl5HaXOMTmpaLn/G1ldWcvHVq4+G7clX0sYkf3V6bJfZ6 lz5K8b4uXjQYSm0On0ayxBfqN7E3Jko5H349r6fXpPOJXxpMgPmwkjBcKQ0o+oNX8EvvsK7 mvZsRvGflF9+9l1xxB+MF6YFKrcy2/H4fVck3cY6HDt0hjInsBOA6AQNuXSLpidksDK+Zdn oeozRSu/onhe1h1HkkUuA== X-UI-Out-Filterresults: notjunk:1;V03:K0:fLp3dRxNtG4=:iTTR7Rv1bDavyjsyU5KDNz mBM6zAepBurfio/C2ZudW96g7u9xWry6dd6jOrEdReU8GctqhLLv9nyByUe8Z5RGMOGo1Awpg PtqNyM6EZzjAdDyqNxeWey0b2UEDMcQEOmSk+w3M3a/k7Efdixp6VOd4NuHNYdCGv4CKtyXEk ISECVJIHmbvRFxwQpauEwyg7FilSOAjpYVE4DEsqOphxmtiasPj3mtxfo0bmlOmlHLT/whBDs y1AyTcjJP+dT5OYseTZgm3eHsNqfYgVk2tSiNPqt5R3CJstSngrG0VvHREi3bO/HhF0UdVXQb TqIXbnAdBPdDC7AhWPecdu8EFk1e/PFebJLpdjfqvM1kL5ZVnIUvMdh+2rL1d3IHSZPq8Save 3mYn50TQBTH8VlvRuZzhWfZGV7CSnOkYTZQrtQAhoG8/hitgUIGGwOJCq6irt/nBvatnSY9kg THkiM6O5h1/12bSEiCmGMktbolgaVuEk3w7A5j+AkHJvJ48EoBfrvV9Hkrd/mGiMVzqMBJ9kO hZKfifciANZtP30kFYt1gW6NaSnTEpnFguikrd5QpshqWyvtHwrJKiaG8Z/WJA48Am2Gd2sIs +4yocN/WizsTDbqJACVoNWOel3mS2OVQj9UnoysF1IhuO+7IGz6tKU4fxYmRQmqucOpeaJt9U ALm0tVlBqa9a7pxo4M2YhGv/zD3uYkBATO49j8sfzO84Wu8yoDe9tLftzBDf/MQquYYybkO3l ZvU8CcWbekO+7KJC27MKROLW5S/0uVfTZ8IeXSbxz4kzkG1wjSaim0Kaf/KKzLo9HVBRaHhzp Z2QOgFXOLW+EM2DBk4ZPE2e8GVcHTaiLONuoNJtuGQTENG9iprBSdxUgpbFSsIv9cfLdRnaII +AE8xPfYuLGUZNzumO3eP6NKgzZz6tVm2CE9e+9h9/Nj0dBrbx0fqPnJXqdO6cZ+lQdU/lGDv VbRCiMbsZpIxkyWqmu68i/wSfXIaY5MOSFWMtXu+fMwlWrmpL8ar096RSwY+zx+Hb5+5aiIOn OY70P22S1TQORi5OC09z99kd2yBZKh92ZmIMDSTVecMj1Wu1lslzBNP8kijQgJ9DXEgXIVdXx XgU6gX/AuIxLTmr6t7sYkVU5VHxCzLE9CgV41OE1Cw1Cf23yWyEPFqMgQ== Received-SPF: pass client-ip=212.227.17.22; envelope-from=deller@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" The misc_video and misc_ctrl registers control the visibility of the screen. Start with the screen turned on, and hide or show the screen based on the control registers. Signed-off-by: Helge Deller Acked-by: Mark Cave-Ayland --- hw/display/artist.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) -- 2.35.3 diff --git a/hw/display/artist.c b/hw/display/artist.c index b8930b7c5a..49dad2b824 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -201,6 +201,8 @@ static const char *artist_reg_name(uint64_t addr) } #undef REG_NAME +static void artist_invalidate(void *opaque); + /* artist has a fixed line length of 2048 bytes. */ #define ADDR_TO_Y(addr) extract32(addr, 11, 11) #define ADDR_TO_X(addr) extract32(addr, 0, 11) @@ -903,6 +905,7 @@ static void artist_reg_write(void *opaque, hwaddr addr, uint64_t val, { ARTISTState *s = opaque; int width, height; + uint64_t oldval; trace_artist_reg_write(size, addr, artist_reg_name(addr & ~3ULL), val); @@ -1061,7 +1064,18 @@ static void artist_reg_write(void *opaque, hwaddr addr, uint64_t val, break; case MISC_VIDEO: + oldval = s->misc_video; combine_write_reg(addr, val, size, &s->misc_video); + /* Invalidate and hide screen if graphics signal is turned off. */ + if (((oldval & 0x0A000000) == 0x0A000000) && + ((val & 0x0A000000) != 0x0A000000)) { + artist_invalidate(s); + } + /* Invalidate and redraw screen if graphics signal is turned back on. */ + if (((oldval & 0x0A000000) != 0x0A000000) && + ((val & 0x0A000000) == 0x0A000000)) { + artist_invalidate(s); + } break; case MISC_CTRL: @@ -1263,6 +1277,12 @@ static void artist_draw_cursor(ARTISTState *s) } } +static bool artist_screen_enabled(ARTISTState *s) +{ + /* We could check for (s->misc_ctrl & 0x00800000) too... */ + return ((s->misc_video & 0x0A000000) == 0x0A000000); +} + static void artist_draw_line(void *opaque, uint8_t *d, const uint8_t *src, int width, int pitch) { @@ -1270,6 +1290,12 @@ static void artist_draw_line(void *opaque, uint8_t *d, const uint8_t *src, uint32_t *cmap, *data = (uint32_t *)d; int x; + if (!artist_screen_enabled(s)) { + /* clear screen */ + memset(data, 0, s->width * sizeof(uint32_t)); + return; + } + cmap = (uint32_t *)(s->vram_buffer[ARTIST_BUFFER_CMAP].data + 0x400); for (x = 0; x < s->width; x++) { @@ -1384,6 +1410,10 @@ static void artist_realizefn(DeviceState *dev, Error **errp) s->image_bitmap_op = 0x23000300; s->plane_mask = 0xff; + /* enable screen */ + s->misc_video |= 0x0A000000; + s->misc_ctrl |= 0x00800000; + s->con = graphic_console_init(dev, 0, &artist_ops, s); qemu_console_resize(s->con, s->width, s->height); }