nec/pc88va_sgp.cpp: add RGB565 ROPs

nec/pc88va_v.cpp: use DSA in draw_packed_gfx_4bpp, halve pitch for draw_direct_gfx_rgb565
hash/pc88va.xml: update QA, and use saner defaults where applicable
This commit is contained in:
angelosa 2025-03-09 18:57:21 +01:00
parent b8de24c775
commit 631a761aba
4 changed files with 91 additions and 73 deletions

View File

@ -90,8 +90,8 @@ Operating Systems
<year>19??</year>
<publisher>NEC</publisher>
<notes><![CDATA[
1st sequence should [OFX/OFY] scroll, half height [gfx] layer
3rd sequence has half height [gfx] layer
1st sequence should [OFX/OFY] scroll
3rd sequence looks slow, [SGP]?
Transition fades out too late, sprite should supposedly fade out before reaching top of screen, requires [IDP] IBF flag
Transition between 3rd and 4th sequences don't look right, [IDP]
]]></notes>
@ -110,10 +110,7 @@ Transition between 3rd and 4th sequences don't look right, [IDP]
<year>19??</year>
<publisher>NEC</publisher>
<notes><![CDATA[
1st sequence should [OFX/OFY] scroll, half height [gfx] layer
3rd sequence has half height [gfx] layer
Transition fades out too late, sprite should supposedly fade out before reaching top of screen, requires [IDP] IBF flag
Transition between 3rd and 4th sequences don't look right, [IDP]
(same as pc88vad)
]]></notes>
<info name="alt_title" value="88VA1 店頭デモ" />
<part name="flop1" interface="floppy_5_25">
@ -128,10 +125,7 @@ Transition between 3rd and 4th sequences don't look right, [IDP]
<year>19??</year>
<publisher>NEC</publisher>
<notes><![CDATA[
1st sequence should [OFX/OFY] scroll, half height [gfx] layer
3rd sequence has half height [gfx] layer
Transition fades out too late, sprite should supposedly fade out before reaching top of screen, requires [IDP] IBF flag
Transition between 3rd and 4th sequences don't look right, [IDP]
(same as pc88vad)
]]></notes>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1331888">
@ -150,6 +144,7 @@ Transition between 3rd and 4th sequences don't look right, [IDP]
<notes><![CDATA[
[gfx] status bar has wrong colors [OFX/OFY]
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<info name="alt_title" value="アニメフレーマー" />
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Program Disk" />
@ -175,6 +170,7 @@ Transition between 3rd and 4th sequences don't look right, [IDP]
<notes><![CDATA[
[gfx] status bar has wrong colors [OFX/OFY]
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<!-- labels were swapped -->
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Program Disk" />
@ -196,8 +192,8 @@ Transition between 3rd and 4th sequences don't look right, [IDP]
<year>1989</year>
<publisher>Music Network</publisher>
<notes><![CDATA[
Very broken GFXs with extensive $510 [ROP] writes
Has unsupported MIF-201 [MIDI] interface cfr. http://www.pc88.gr.jp/vafaq/view.php/article/88va/vafaq/71
Uses opaque pen for [gfx] layer (white on black)
Incomplete MIF-201 [MIDI] emulation
]]></notes>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1331888">
@ -214,9 +210,13 @@ Has unsupported MIF-201 [MIDI] interface cfr. http://www.pc88.gr.jp/vafaq/view.p
<publisher>NEC</publisher>
<notes><![CDATA[
Has HDFORM.COM utility
Unsupported features in batch files
Untested directory NEC_SAMP (cannot type [keyboard] underscore char)
JTERM.BAT is for connecting to a PC-VAN or ANSI [terminal]
PCALC.BAT requires [keyboard] PC+V press to bring up
PLAYR.BAT has offset [IDP] text display
SKYBD.BAT wants a radio cassette player and a PC-KD861 color monitor for audio sampling thru OPNA EOS
VIDEO.BAT has various superimpose effects, requires dedicated board
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<info name="alt_title" value="PC-Engine(VA2添付版)" />
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1338960">
@ -230,11 +230,10 @@ Untested directory NEC_SAMP (cannot type [keyboard] underscore char)
<year>1988</year>
<publisher>NEC</publisher>
<notes><![CDATA[
Has HDFORM.COM utility
Unsupported features in batch files
Untested directory NEC_SAMP (cannot type [keyboard] underscore char)
(same as pceva2tb)
]]></notes>
<!-- baddump: NEC_SAMP directory edited in 2010 -->
<sharedfeat name="mouseport_default" value="mouse"/>
<!-- baddump: NEC_SAMP directory edited in 2010 (no active changes inside, remnants of a deleted file?) -->
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1331888">
<rom name="pc-engine 1.1 os.d88" size="1331888" crc="17d2e121" sha1="b88095cae4238a68833435ac0e3414081cb5a13b" status="baddump"/>
@ -290,7 +289,6 @@ Lists dual port 1/2 as a unsupported [DE-9] input method
Winning newspaper screen has [OFX/OFY] bug
How to exit from attract mode once you enter it?
]]></notes>
<info name="alt_title" value="ファミリースタジアム" />
<info name="usage" value="Menuing works with keyboard only until game prompts you to use a joystick"/>
<!--combined image-->
@ -349,7 +347,7 @@ Winning newspaper screen has [OFX/OFY] bug
<year>198?</year>
<publisher>スタークラフト (Starcraft)</publisher>
<notes><![CDATA[
Currently conceals/wipes out [GVRAM] display
Needs [IDP] text display to go off for bottommost row
]]></notes>
<info name="alt_title" value="マイトアンドマジック" />
<info name="usage" value="Boot with Disk C in drive 1"/>
@ -383,6 +381,7 @@ Currently conceals/wipes out [GVRAM] display
<notes><![CDATA[
Burps on [FDC] access after disk swap with program and player disks, trying to scan chrn=(4, 0, 1, 256)
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<info name="alt_title" value="マイトアンドマジック2" />
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Boot Disk" />
@ -418,7 +417,7 @@ Burps on [FDC] access after disk swap with program and player disks, trying to s
<year>1987</year>
<publisher>ウインキーソフト (Winky Soft)</publisher>
<notes><![CDATA[
Map select uses [ROP]
Display off in places during intro
Needs graphic [OFX/OFY] scroll on gameplay
Unplayable with [keyboard]
Gameplay start with [cliprect] mask effect
@ -460,10 +459,7 @@ Gameplay start with [cliprect] mask effect
<year>1987</year>
<publisher>ウインキーソフト (Winky Soft)</publisher>
<notes><![CDATA[
Map select uses [ROP]
Needs graphic [OFX/OFY] scroll on gameplay
Unplayable with [keyboard]
Gameplay start with [cliprect] mask effect
(same as olteus)
]]></notes>
<info name="alt_title" value="オルテウス" />
<info name="usage" value="Kana Lock on pauses the game"/>
@ -524,9 +520,9 @@ Needs graphic [OFX/OFY] scroll
<year>198?</year>
<publisher>スタークラフト (Starcraft)</publisher>
<notes><![CDATA[
Currently conceals/wipes out [GVRAM] display
Burps on [FDC] access after disk swap with program and player disks, trying to scan chrn=(38, 0, 1, 256)
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<info name="alt_title" value="ローグアライアンス" />
<part name="flop1" interface="floppy_5_25">
@ -557,11 +553,11 @@ Burps on [FDC] access after disk swap with program and player disks, trying to s
<publisher>システムソフト (System Soft)</publisher>
<notes><![CDATA[
Needs [dac1bit] clicks on gameplay
[mouse] is a requirement?
May crash with disk error when entering winning animation (verify)
Winning animation is glitchy [OFX/OFY]?, uses [IDP] text transpen with upper bits set (for flame effect?), press mouse left button to return to game
[OPNA] seems to cut off shortly on intro and winning screen compared to VAEG
]]></notes>
<sharedfeat name="mouseport_default" value="mouse"/>
<info name="alt_title" value="上海" />
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="1296112">
@ -576,7 +572,7 @@ Winning animation is glitchy [OFX/OFY]?, uses [IDP] text transpen with upper bit
<publisher>日本テレネット (Nihon Telenet)</publisher>
<notes><![CDATA[
Opening has a few weird places for [gfx] priority and half height [gfx]
Has [SGP] and [ROP] artifacts
Missing player shot and enemy sprites [gfx] during gameplay
Omake: if sound irqs don't run then needs to press key 0 pad to move on
]]></notes>
<info name="alt_title" value="神羅万象"/>
@ -872,8 +868,7 @@ Has unemulated [MIDI] options
<year>1990</year>
<publisher>マイクロキャビン (Micro Cabin)</publisher>
<notes><![CDATA[
Half height [gfx]s
Heavy [ROP] artifacts during gameplay
Offset [IDP] text display on setup mode and opening
Optionally wants kana lock enabled for entering a name for new game [keyboard] irq
]]></notes>
<info name="release" value="19901102"/>
@ -907,10 +902,8 @@ Optionally wants kana lock enabled for entering a name for new game [keyboard] i
<year>1991</year>
<publisher>マイクロキャビン (Micro Cabin)</publisher>
<notes><![CDATA[
Heavy [ROP] artifacts on intro, runs incredibly slow
Sprites don't draw properly during gameplay [ROP]
Runs too slow, [SGP]?
Ugly pitch for [OPNA] voice samples on intro
[gfx]s have halved height
]]></notes>
<info name="release" value="19911220"/>
<info name="alt_title" value="フレイ"/>
@ -947,29 +940,29 @@ Ugly pitch for [OPNA] voice samples on intro
<!-- Dual floppies, should work both on the PC88VA and on the X68000 (usually you just have to switch the first two disks depending on the system) -->
<!-- TODO: move to a shared SW list -->
<!-- TODO: all these .xdf entries wants Disk B as drive A: for 88VA -->
<!-- TODO: all these .xdf entries wants Disk B as drive A: for 88VA, annoyingly -->
<software name="abunaten" supported="no">
<description>Abunai Tengu Densetsu</description>
<year>1989</year>
<publisher>アリスソフト (Alicesoft)</publisher>
<notes><![CDATA[
Loads N88 BASIC then jumps to lalaland [FDC]
Offset [IDP] display
]]></notes>
<info name="release" value="198910xx"/>
<info name="alt_title" value="あぶない天狗伝説 (or あぶないてんぐ伝説 )"/>
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Disk A" />
<feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="disk a.xdf" size="1261568" crc="7614c8af" sha1="eeea190cf882eb91b55965553cf3bac64f09dee0"/>
<rom name="disk b.xdf" size="1261568" crc="9e83829f" sha1="e171236054d08b78b30657a3f7132e179de9a0cf"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<feature name="part_id" value="Disk B" />
<feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="disk b.xdf" size="1261568" crc="9e83829f" sha1="e171236054d08b78b30657a3f7132e179de9a0cf"/>
<rom name="disk a.xdf" size="1261568" crc="7614c8af" sha1="eeea190cf882eb91b55965553cf3bac64f09dee0"/>
</dataarea>
</part>
@ -986,22 +979,23 @@ Loads N88 BASIC then jumps to lalaland [FDC]
<year>1989</year>
<publisher>アリスソフト (Alicesoft)</publisher>
<notes><![CDATA[
Loads N88 BASIC then jumps to lalaland [FDC]
Offset [IDP] display
]]></notes>
<info name="release" value="198908xx"/>
<info name="alt_title" value="クレセントムーンがぁる"/>
<info name="usage" value="Mount Disk B in drive A to boot" />
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Disk A" />
<feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="disk a.xdf" size="1261568" crc="ccebcb01" sha1="fc6c8913c9e0fc70b0983d0d2dc8837e441ae567"/>
<rom name="disk b.xdf" size="1261568" crc="702de57e" sha1="1d7bfbcb3a2543abfadec1a5d999386994763384"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<feature name="part_id" value="Disk B" />
<feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="disk b.xdf" size="1261568" crc="702de57e" sha1="1d7bfbcb3a2543abfadec1a5d999386994763384"/>
<rom name="disk a.xdf" size="1261568" crc="ccebcb01" sha1="fc6c8913c9e0fc70b0983d0d2dc8837e441ae567"/>
</dataarea>
</part>
@ -1018,22 +1012,22 @@ Loads N88 BASIC then jumps to lalaland [FDC]
<year>1989</year>
<publisher>アリスソフト (Alicesoft)</publisher>
<notes><![CDATA[
Loads N88 BASIC then jumps to lalaland [FDC]
Offset [IDP] display
]]></notes>
<info name="release" value="198912xx"/>
<info name="alt_title" value="ディー・ピー・エス - ドリームプログラムシステム"/>
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Disk A" />
<feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="disk a.xdf" size="1261568" crc="f6078845" sha1="f1695e9b313daba8a93ee2d74aefe833262078f4"/>
<rom name="disk b.xdf" size="1261568" crc="224d3faf" sha1="300cf05020e91069c0fd54d2d992e5b7acccd1c9"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<feature name="part_id" value="Disk B" />
<feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="disk b.xdf" size="1261568" crc="224d3faf" sha1="300cf05020e91069c0fd54d2d992e5b7acccd1c9"/>
<rom name="disk a.xdf" size="1261568" crc="f6078845" sha1="f1695e9b313daba8a93ee2d74aefe833262078f4"/>
</dataarea>
</part>
</software>
@ -1154,22 +1148,23 @@ Loads N88 BASIC then jumps to lalaland [FDC]
<year>1989</year>
<publisher>アリスソフト (Alicesoft)</publisher>
<notes><![CDATA[
Loads N88 BASIC then jumps to lalaland [FDC]
Throws "ERR=7 8550, Break in 60050" when after prologue
Offset [IDP] text display
]]></notes>
<info name="release" value="198907xx"/>
<info name="alt_title" value="ランス 光を求めて"/>
<part name="flop1" interface="floppy_5_25">
<feature name="part_id" value="Disk A" />
<feature name="part_id" value="Disk B" />
<dataarea name="flop" size="1261568">
<rom name="disk a.xdf" size="1261568" crc="7512d4ff" sha1="a442213bf7330548ef012f3e0623b1df5fb2142e"/>
<rom name="disk b.xdf" size="1261568" crc="fa088a6f" sha1="7ddcace8d5e42a75b0ca30f262f71159844ee69d"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<feature name="part_id" value="Disk B" />
<feature name="part_id" value="Disk A" />
<dataarea name="flop" size="1261568">
<rom name="disk b.xdf" size="1261568" crc="fa088a6f" sha1="7ddcace8d5e42a75b0ca30f262f71159844ee69d"/>
<rom name="disk a.xdf" size="1261568" crc="7512d4ff" sha1="a442213bf7330548ef012f3e0623b1df5fb2142e"/>
</dataarea>
</part>
@ -1248,10 +1243,9 @@ All disks fail initial bootstrap [FDC]
<year>1996</year>
<publisher>&lt;doujin&gt;</publisher>
<notes><![CDATA[
Requires [ROP] for intro and title screen
Has glitchy [gfx] after starting a game
Has badly colored sprites on character select
Doesn't draw background in gameplay, uses direct color layers
Has unemulated [SGP] operand for shot 1
[SGP] leaves trails during gameplay
]]></notes>
<info name="developer" value="Fredia" />
<info name="alt_title" value="ばる〜んぶ れ〜か〜" />
@ -1522,8 +1516,7 @@ https://youtu.be/zxy8lTZ_w_k
<year>2023</year>
<publisher>Inufuto</publisher>
<notes><![CDATA[
[gfx] wrong palette bank
[gfx] Requires fractional scrolling (vertical)
Randomly draws with the wrong [gfx] wrong palette bank
https://youtu.be/JIK3ruhURG4
]]></notes>
<part name="flop1" interface="floppy_5_25">

View File

@ -264,7 +264,7 @@ private:
void draw_indexed_gfx_1bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u8 pal_base);
void draw_indexed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height);
void draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height);
void draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u16 fb_width, u16 fb_height);
void draw_direct_gfx_rgb565(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height);
void draw_packed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height);

View File

@ -21,10 +21,10 @@ TODO:
#include "emu.h"
#include "pc88va_sgp.h"
//#include <iostream>
#define LOG_COMMAND (1U << 1)
//#include <iostream>
#define VERBOSE (LOG_GENERAL)
//#define LOG_OUTPUT_STREAM std::cout
@ -420,9 +420,12 @@ void pc88va_sgp_device::execute_blit(u16 draw_mode, bool is_patblt)
return;
}
if (m_src.pixel_mode == 0 || m_src.pixel_mode == 3 || m_src.pixel_mode != m_dst.pixel_mode)
// TODO: pceva2tb:SKYBD.BAT wants a 1bpp to 4bpp translation
if (m_src.pixel_mode == 0 || m_src.pixel_mode != m_dst.pixel_mode)
{
LOG("SGP: Warning BITBLT pixel mode %d x %d\n", m_src.pixel_mode, m_dst.pixel_mode);
static const char *const pixel_mode[] = { "1bpp", "4bpp", "8bpp", "rgb565" };
LOG("SGP: Warning BITBLT pixel mode src %s against dst %s\n", pixel_mode[m_src.pixel_mode], pixel_mode[m_dst.pixel_mode]);
return;
}
@ -472,6 +475,24 @@ void pc88va_sgp_device::execute_blit(u16 draw_mode, bool is_patblt)
break;
}
// RGB565 (ballbrkr title)
case 3:
{
const u32 dst_offset = dst_address + ((xi + m_dst.start_dot) << 1);
u16 src = m_data->read_word(src_address + (xi << 1)) & 0xffff;
u16 dst = m_data->read_word(dst_offset) & 0xffff;
u16 result = dst;
if ((this->*tpmod_table[tp_mod])(src, dst))
{
result = (this->*rop_table[logical_op])(src, dst);
m_data->write_word(dst_offset, result);
}
break;
}
}
}
}

View File

@ -4,8 +4,6 @@
#include "emu.h"
#include "pc88va.h"
//#include <iostream>
#define LOG_IDP (1U << 1) // TSP data
#define LOG_FB (1U << 2) // framebuffer strips (verbose)
@ -14,6 +12,8 @@
#define LOG_COLOR (1U << 5) // current color mode
#define LOG_TEXT (1U << 6) // text strips (verbose)
//#include <iostream>
#define VERBOSE (LOG_GENERAL | LOG_IDP)
//#define LOG_OUTPUT_STREAM std::cout
@ -29,11 +29,11 @@
void pc88va_state::video_start()
{
const u32 gvram_size = 0x40000;
m_gvram = std::make_unique<uint8_t[]>(gvram_size);
m_gvram = make_unique_clear<uint8_t[]>(gvram_size);
std::fill_n(m_gvram.get(), gvram_size, 0);
const u32 kanjiram_size = 0x4000;
m_kanji_ram = std::make_unique<uint8_t[]>(kanjiram_size);
m_kanji_ram = make_unique_clear<uint8_t[]>(kanjiram_size);
m_gfxdecode->gfx(2)->set_source(m_kanji_ram.get());
m_gfxdecode->gfx(3)->set_source(m_kanji_ram.get());
m_vrtc_irq_line = 432;
@ -55,6 +55,7 @@ void pc88va_state::video_start()
save_item(NAME(m_vrtc_irq_line));
}
// TODO: all needs to be verified
void pc88va_state::video_reset()
{
m_gden0 = false;
@ -63,6 +64,7 @@ void pc88va_state::video_reset()
m_color_mode = 0;
m_pltm = 0;
m_pltp = 0;
m_video_pri_reg[0] = m_video_pri_reg[1] = 0;
}
void pc88va_state::palette_init(palette_device &palette) const
@ -810,7 +812,7 @@ void pc88va_state::draw_graphic_layer(bitmap_rgb32 &bitmap, const rectangle &cli
draw_packed_gfx_5bpp(m_graphic_bitmap[which], split_cliprect, fsa, dsa, layer_pal_bank, fbw, fbl);
}
else
draw_direct_gfx_8bpp(m_graphic_bitmap[which], split_cliprect, fsa, fbw, fbl);
draw_direct_gfx_8bpp(m_graphic_bitmap[which], split_cliprect, fsa, dsa, fbw, fbl);
break;
case 3: draw_direct_gfx_rgb565(m_graphic_bitmap[which], split_cliprect, fsa, fbw, fbl); break;
default:
@ -902,7 +904,7 @@ void pc88va_state::draw_packed_gfx_5bpp(bitmap_rgb32 &bitmap, const rectangle &c
}
}
void pc88va_state::draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u16 fb_width, u16 fb_height)
void pc88va_state::draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u16 fb_width, u16 fb_height)
{
// const u16 y_min = std::max(cliprect.min_y, y_start);
// const u16 y_max = std::min(cliprect.max_y, y_min + fb_height);
@ -913,7 +915,7 @@ void pc88va_state::draw_direct_gfx_8bpp(bitmap_rgb32 &bitmap, const rectangle &c
for(int x = cliprect.min_x; x <= cliprect.max_x; x++)
{
u32 bitmap_offset = line_offset + x;
u32 bitmap_offset = (line_offset + x) & 0x3ffff;
uint32_t color = (m_gvram[bitmap_offset] & 0xff);
@ -937,7 +939,8 @@ void pc88va_state::draw_direct_gfx_rgb565(bitmap_rgb32 &bitmap, const rectangle
for(int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
const u32 line_offset = ((y * fb_width) + fb_start_offset) & 0x3ffff;
// pc88vad requires halved pitch for first screen
const u32 line_offset = ((y * fb_width >> 1) + fb_start_offset) & 0x3ffff;
for(int x = cliprect.min_x; x <= cliprect.max_x; x++)
{
@ -956,6 +959,7 @@ void pc88va_state::draw_direct_gfx_rgb565(bitmap_rgb32 &bitmap, const rectangle
}
}
// famista, probably all inufuto games
void pc88va_state::draw_packed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 fb_start_offset, u32 display_start_offset, u8 pal_base, u16 fb_width, u16 fb_height)
{
// const u16 y_min = std::max(cliprect.min_y, y_start);
@ -968,7 +972,7 @@ void pc88va_state::draw_packed_gfx_4bpp(bitmap_rgb32 &bitmap, const rectangle &c
for(int x = cliprect.min_x; x <= cliprect.max_x; x += 8)
{
u16 x_char = (x >> 3);
u32 bitmap_offset = line_offset + x_char;
u32 bitmap_offset = (line_offset + x_char + (display_start_offset >> 2)) & 0x0ffff;
for (int xi = 0; xi < 8; xi ++)
{