mirror of
https://github.com/holub/mame
synced 2025-05-29 00:53:09 +03:00
-ut88.cpp: Eliminated *_OVERRIDE macro usage. [Ryan Holtz]
This commit is contained in:
parent
599453f6c2
commit
8f54672223
@ -38,15 +38,15 @@ static GFXDECODE_START( gfx_ut88 )
|
||||
GFXDECODE_END
|
||||
|
||||
/* Address maps */
|
||||
void ut88_state::ut88mini_mem(address_map &map)
|
||||
void ut88mini_state::mem_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x03ff).rom(); // System ROM
|
||||
map(0xc000, 0xc3ff).ram(); // RAM
|
||||
map(0x9000, 0x9fff).w(FUNC(ut88_state::ut88mini_write_led)); // 7seg LED
|
||||
map(0x9000, 0x9fff).w(FUNC(ut88mini_state::led_w)); // 7seg LED
|
||||
}
|
||||
|
||||
void ut88_state::ut88_mem(address_map &map)
|
||||
void ut88_state::mem_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x07ff).bankrw("bank1"); // First bank
|
||||
map(0x0800, 0xdfff).ram(); // RAM
|
||||
@ -56,16 +56,16 @@ void ut88_state::ut88_mem(address_map &map)
|
||||
map(0xf800, 0xffff).rom(); // System ROM
|
||||
}
|
||||
|
||||
void ut88_state::ut88mini_io(address_map &map)
|
||||
void ut88mini_state::io_map(address_map &map)
|
||||
{
|
||||
map(0xA0, 0xA0).r(FUNC(ut88_state::ut88mini_keyboard_r));
|
||||
map(0xA1, 0xA1).r(FUNC(ut88_state::ut88_tape_r));
|
||||
map(0xA0, 0xA0).r(FUNC(ut88mini_state::keyboard_r));
|
||||
map(0xA1, 0xA1).r(FUNC(ut88mini_state::tape_r));
|
||||
}
|
||||
|
||||
void ut88_state::ut88_io(address_map &map)
|
||||
void ut88_state::io_map(address_map &map)
|
||||
{
|
||||
map(0x04, 0x07).rw(FUNC(ut88_state::ut88_keyboard_r), FUNC(ut88_state::ut88_keyboard_w));
|
||||
map(0xA1, 0xA1).rw(FUNC(ut88_state::ut88_tape_r), FUNC(ut88_state::ut88_sound_w));
|
||||
map(0x04, 0x07).rw(FUNC(ut88_state::keyboard_r), FUNC(ut88_state::keyboard_w));
|
||||
map(0xA1, 0xA1).rw(FUNC(ut88_state::tape_r), FUNC(ut88_state::sound_w));
|
||||
}
|
||||
|
||||
/* Input ports */
|
||||
@ -191,9 +191,8 @@ void ut88_state::ut88(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
I8080(config, m_maincpu, 2000000);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ut88_state::ut88_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &ut88_state::ut88_io);
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ut88_state, ut88 )
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ut88_state::mem_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ut88_state::io_map);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
@ -201,11 +200,9 @@ void ut88_state::ut88(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
|
||||
screen.set_size(64*8, 28*8);
|
||||
screen.set_visarea(0, 64*8-1, 0, 28*8-1);
|
||||
screen.set_screen_update(FUNC(ut88_state::screen_update_ut88));
|
||||
screen.set_screen_update(FUNC(ut88_state::screen_update));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(ut88_state,ut88)
|
||||
|
||||
PALETTE(config, m_palette, palette_device::MONOCHROME);
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ut88);
|
||||
|
||||
@ -217,9 +214,9 @@ void ut88_state::ut88(machine_config &config)
|
||||
|
||||
/* Devices */
|
||||
I8255A(config, m_ppi);
|
||||
m_ppi->out_pa_callback().set(FUNC(ut88_state::ut88_8255_porta_w));
|
||||
m_ppi->in_pb_callback().set(FUNC(ut88_state::ut88_8255_portb_r));
|
||||
m_ppi->in_pc_callback().set(FUNC(ut88_state::ut88_8255_portc_r));
|
||||
m_ppi->out_pa_callback().set(FUNC(ut88_state::ppi_porta_w));
|
||||
m_ppi->in_pb_callback().set(FUNC(ut88_state::ppi_portb_r));
|
||||
m_ppi->in_pc_callback().set(FUNC(ut88_state::ppi_portc_r));
|
||||
|
||||
CASSETTE(config, m_cassette);
|
||||
m_cassette->set_formats(rku_cassette_formats);
|
||||
@ -230,14 +227,12 @@ void ut88_state::ut88(machine_config &config)
|
||||
SOFTWARE_LIST(config, "cass_list").set_original("ut88");
|
||||
}
|
||||
|
||||
void ut88_state::ut88mini(machine_config &config)
|
||||
void ut88mini_state::ut88mini(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
I8080(config, m_maincpu, 2000000);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ut88_state::ut88mini_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &ut88_state::ut88mini_io);
|
||||
MCFG_MACHINE_START_OVERRIDE(ut88_state,ut88mini)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ut88_state, ut88mini )
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ut88mini_state::mem_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ut88mini_state::io_map);
|
||||
|
||||
/* video hardware */
|
||||
config.set_default_layout(layout_ut88mini);
|
||||
@ -272,6 +267,6 @@ ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1989, ut88mini, 0, 0, ut88mini, ut88mini, ut88_state, init_ut88mini, "<unknown>", "UT-88 mini", 0)
|
||||
COMP( 1989, ut88, ut88mini, 0, ut88, ut88, ut88_state, init_ut88, "<unknown>", "UT-88", 0)
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1989, ut88mini, 0, 0, ut88mini, ut88mini, ut88mini_state, empty_init, "<unknown>", "UT-88 mini", 0)
|
||||
COMP( 1989, ut88, ut88mini, 0, ut88, ut88, ut88_state, empty_init, "<unknown>", "UT-88", 0)
|
||||
|
@ -16,90 +16,123 @@
|
||||
#include "imagedev/cassette.h"
|
||||
#include "emupal.h"
|
||||
|
||||
|
||||
class ut88_state : public driver_device
|
||||
class ut88_base_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ut88_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
ut88_base_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_ppi(*this, "ppi8255")
|
||||
, m_dac(*this, "dac")
|
||||
, m_p_videoram(*this, "videoram")
|
||||
, m_region_maincpu(*this, "maincpu")
|
||||
, m_region_proms(*this, "proms")
|
||||
, m_bank1(*this, "bank1")
|
||||
, m_io_line0(*this, "LINE0")
|
||||
, m_io_line1(*this, "LINE1")
|
||||
, m_io_line2(*this, "LINE2")
|
||||
, m_maincpu(*this, "maincpu")
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
DECLARE_READ8_MEMBER(tape_r);
|
||||
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_memory_region m_region_maincpu;
|
||||
required_ioport m_io_line0;
|
||||
required_ioport m_io_line1;
|
||||
required_ioport m_io_line2;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
class ut88_state : public ut88_base_state
|
||||
{
|
||||
public:
|
||||
ut88_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: ut88_base_state(mconfig, type, tag)
|
||||
, m_ppi(*this, "ppi8255")
|
||||
, m_dac(*this, "dac")
|
||||
, m_p_videoram(*this, "videoram")
|
||||
, m_bank1(*this, "bank1")
|
||||
, m_io_line3(*this, "LINE3")
|
||||
, m_io_line4(*this, "LINE4")
|
||||
, m_io_line5(*this, "LINE5")
|
||||
, m_io_line6(*this, "LINE6")
|
||||
, m_io_line7(*this, "LINE7")
|
||||
, m_io_line8(*this, "LINE8")
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_palette(*this, "palette")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void ut88(machine_config &config);
|
||||
void ut88mini(machine_config &config);
|
||||
|
||||
void init_ut88();
|
||||
void init_ut88mini();
|
||||
|
||||
private:
|
||||
virtual void driver_init() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_RESET,
|
||||
TIMER_UPDATE_DISPLAY
|
||||
};
|
||||
|
||||
DECLARE_READ8_MEMBER(ut88_keyboard_r);
|
||||
DECLARE_WRITE8_MEMBER(ut88_keyboard_w);
|
||||
DECLARE_WRITE8_MEMBER(ut88_sound_w);
|
||||
DECLARE_READ8_MEMBER(ut88_tape_r);
|
||||
DECLARE_READ8_MEMBER(ut88mini_keyboard_r);
|
||||
DECLARE_WRITE8_MEMBER(ut88mini_write_led);
|
||||
DECLARE_READ8_MEMBER(ut88_8255_portb_r);
|
||||
DECLARE_READ8_MEMBER(ut88_8255_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ut88_8255_porta_w);
|
||||
DECLARE_MACHINE_RESET(ut88);
|
||||
DECLARE_VIDEO_START(ut88);
|
||||
DECLARE_MACHINE_START(ut88mini);
|
||||
DECLARE_MACHINE_RESET(ut88mini);
|
||||
uint32_t screen_update_ut88(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_READ8_MEMBER(keyboard_r);
|
||||
DECLARE_WRITE8_MEMBER(keyboard_w);
|
||||
DECLARE_WRITE8_MEMBER(sound_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portb_r);
|
||||
DECLARE_READ8_MEMBER(ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
|
||||
void ut88_io(address_map &map);
|
||||
void ut88_mem(address_map &map);
|
||||
void ut88mini_io(address_map &map);
|
||||
void ut88mini_mem(address_map &map);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void io_map(address_map &map);
|
||||
void mem_map(address_map &map);
|
||||
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
optional_device<i8255_device> m_ppi;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
optional_shared_ptr<uint8_t> m_p_videoram;
|
||||
int m_keyboard_mask;
|
||||
int m_lcd_digit[6];
|
||||
required_memory_region m_region_maincpu;
|
||||
optional_memory_region m_region_proms;
|
||||
optional_memory_bank m_bank1;
|
||||
required_ioport m_io_line0;
|
||||
required_ioport m_io_line1;
|
||||
required_ioport m_io_line2;
|
||||
optional_ioport m_io_line3;
|
||||
optional_ioport m_io_line4;
|
||||
optional_ioport m_io_line5;
|
||||
optional_ioport m_io_line6;
|
||||
optional_ioport m_io_line7;
|
||||
optional_ioport m_io_line8;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<gfxdecode_device> m_gfxdecode;
|
||||
optional_device<palette_device> m_palette;
|
||||
output_finder<6> m_digits;
|
||||
|
||||
required_device<i8255_device> m_ppi;
|
||||
required_device<dac_bit_interface> m_dac;
|
||||
required_shared_ptr<uint8_t> m_p_videoram;
|
||||
required_memory_bank m_bank1;
|
||||
required_ioport m_io_line3;
|
||||
required_ioport m_io_line4;
|
||||
required_ioport m_io_line5;
|
||||
required_ioport m_io_line6;
|
||||
required_ioport m_io_line7;
|
||||
required_ioport m_io_line8;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
class ut88mini_state : public ut88_base_state
|
||||
{
|
||||
public:
|
||||
ut88mini_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: ut88_base_state(mconfig, type, tag)
|
||||
, m_region_proms(*this, "proms")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void ut88mini(machine_config &config);
|
||||
|
||||
private:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
void io_map(address_map &map);
|
||||
void mem_map(address_map &map);
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_RESET,
|
||||
TIMER_UPDATE_DISPLAY
|
||||
};
|
||||
|
||||
DECLARE_READ8_MEMBER(keyboard_r);
|
||||
DECLARE_WRITE8_MEMBER(led_w);
|
||||
|
||||
required_memory_region m_region_proms;
|
||||
|
||||
int m_lcd_digit[6];
|
||||
output_finder<6> m_digits;
|
||||
};
|
||||
|
||||
/*----------- defined in video/ut88.c -----------*/
|
||||
|
@ -25,69 +25,69 @@ static const uint8_t hex_to_7seg[16] =
|
||||
|
||||
|
||||
/* Driver initialization */
|
||||
void ut88_state::init_ut88()
|
||||
void ut88_state::driver_init()
|
||||
{
|
||||
/* set initially ROM to be visible on first bank */
|
||||
uint8_t *RAM = m_region_maincpu->base();
|
||||
memset(RAM,0x0000,0x0800); // make first page empty by default
|
||||
m_bank1->configure_entries(1, 2, RAM, 0x0000);
|
||||
m_bank1->configure_entries(0, 2, RAM, 0xf800);
|
||||
uint8_t *ram = m_region_maincpu->base();
|
||||
memset(ram, 0x0000, 0x0800); // make first page empty by default
|
||||
m_bank1->configure_entries(1, 2, ram, 0x0000);
|
||||
m_bank1->configure_entries(0, 2, ram, 0xf800);
|
||||
}
|
||||
|
||||
|
||||
void ut88_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch (id)
|
||||
if (id == TIMER_RESET)
|
||||
{
|
||||
case TIMER_RESET:
|
||||
m_bank1->set_entry(0);
|
||||
break;
|
||||
case TIMER_UPDATE_DISPLAY:
|
||||
for (int i=0;i<6;i++)
|
||||
m_digits[i] = hex_to_7seg[m_lcd_digit[i]];
|
||||
timer_set(attotime::from_hz(60), TIMER_UPDATE_DISPLAY);
|
||||
break;
|
||||
default:
|
||||
throw emu_fatalerror("Unknown id in ut88_state::device_timer");
|
||||
}
|
||||
}
|
||||
|
||||
void ut88mini_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
if (id == TIMER_UPDATE_DISPLAY)
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
m_digits[i] = hex_to_7seg[m_lcd_digit[i]];
|
||||
timer_set(attotime::from_hz(60), TIMER_UPDATE_DISPLAY);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER( ut88_state::ut88_8255_portb_r )
|
||||
READ8_MEMBER( ut88_state::ppi_portb_r )
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
if ( m_keyboard_mask & 0x01 )
|
||||
if (BIT(m_keyboard_mask, 0))
|
||||
data &= m_io_line0->read();
|
||||
if ( m_keyboard_mask & 0x02 )
|
||||
if (BIT(m_keyboard_mask, 1))
|
||||
data &= m_io_line1->read();
|
||||
if ( m_keyboard_mask & 0x04 )
|
||||
if (BIT(m_keyboard_mask, 2))
|
||||
data &= m_io_line2->read();
|
||||
if ( m_keyboard_mask & 0x08 )
|
||||
if (BIT(m_keyboard_mask, 3))
|
||||
data &= m_io_line3->read();
|
||||
if ( m_keyboard_mask & 0x10 )
|
||||
if (BIT(m_keyboard_mask, 4))
|
||||
data &= m_io_line4->read();
|
||||
if ( m_keyboard_mask & 0x20 )
|
||||
if (BIT(m_keyboard_mask, 5))
|
||||
data &= m_io_line5->read();
|
||||
if ( m_keyboard_mask & 0x40 )
|
||||
if (BIT(m_keyboard_mask, 6))
|
||||
data &= m_io_line6->read();
|
||||
if ( m_keyboard_mask & 0x80 )
|
||||
if (BIT(m_keyboard_mask, 7))
|
||||
data &= m_io_line7->read();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( ut88_state::ut88_8255_portc_r )
|
||||
READ8_MEMBER( ut88_state::ppi_portc_r )
|
||||
{
|
||||
return m_io_line8->read();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ut88_state::ut88_8255_porta_w )
|
||||
WRITE8_MEMBER( ut88_state::ppi_porta_w )
|
||||
{
|
||||
m_keyboard_mask = data ^ 0xff;
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(ut88_state,ut88)
|
||||
void ut88_state::machine_reset()
|
||||
{
|
||||
timer_set(attotime::from_usec(10), TIMER_RESET);
|
||||
m_bank1->set_entry(1);
|
||||
@ -95,31 +95,31 @@ MACHINE_RESET_MEMBER(ut88_state,ut88)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER( ut88_state::ut88_keyboard_r )
|
||||
READ8_MEMBER( ut88_state::keyboard_r )
|
||||
{
|
||||
return m_ppi->read(offset^0x03);
|
||||
return m_ppi->read(offset ^ 0x03);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( ut88_state::ut88_keyboard_w )
|
||||
WRITE8_MEMBER( ut88_state::keyboard_w )
|
||||
{
|
||||
m_ppi->write(offset^0x03, data);
|
||||
m_ppi->write(offset ^ 0x03, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ut88_state::ut88_sound_w )
|
||||
WRITE8_MEMBER( ut88_state::sound_w )
|
||||
{
|
||||
m_dac->write(BIT(data, 0));
|
||||
m_cassette->output(BIT(data, 0) ? 1 : -1);
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER( ut88_state::ut88_tape_r )
|
||||
READ8_MEMBER( ut88_base_state::tape_r )
|
||||
{
|
||||
double level = m_cassette->input();
|
||||
return (level < 0) ? 0 : 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER( ut88_state::ut88mini_keyboard_r )
|
||||
READ8_MEMBER( ut88mini_state::keyboard_r )
|
||||
{
|
||||
// This is real keyboard implementation
|
||||
uint8_t *keyrom1 = m_region_proms->base();
|
||||
@ -145,7 +145,7 @@ READ8_MEMBER( ut88_state::ut88mini_keyboard_r )
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( ut88_state::ut88mini_write_led )
|
||||
WRITE8_MEMBER( ut88mini_state::led_w )
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
@ -161,17 +161,13 @@ WRITE8_MEMBER( ut88_state::ut88mini_write_led )
|
||||
}
|
||||
}
|
||||
|
||||
void ut88_state::init_ut88mini()
|
||||
{
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(ut88_state,ut88mini)
|
||||
void ut88mini_state::machine_start()
|
||||
{
|
||||
m_digits.resolve();
|
||||
timer_set(attotime::from_hz(60), TIMER_UPDATE_DISPLAY);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(ut88_state,ut88mini)
|
||||
void ut88mini_state::machine_reset()
|
||||
{
|
||||
m_lcd_digit[0] = m_lcd_digit[1] = m_lcd_digit[2] = 0;
|
||||
m_lcd_digit[3] = m_lcd_digit[4] = m_lcd_digit[5] = 0;
|
||||
|
@ -24,20 +24,14 @@ const gfx_layout ut88_charlayout =
|
||||
8*8 /* size of one char */
|
||||
};
|
||||
|
||||
VIDEO_START_MEMBER(ut88_state,ut88)
|
||||
uint32_t ut88_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t ut88_state::screen_update_ut88(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int x,y;
|
||||
|
||||
for(y = 0; y < 28; y++ )
|
||||
for (int y = 0; y < 28; y++)
|
||||
{
|
||||
for(x = 0; x < 64; x++ )
|
||||
for (int x = 0; x < 64; x++)
|
||||
{
|
||||
int code = m_p_videoram[ x + y*64 ] & 0x7f;
|
||||
int attr = m_p_videoram[ x+1 + y*64 ] & 0x80;
|
||||
int code = m_p_videoram[x + y*64] & 0x7f;
|
||||
int attr = m_p_videoram[x+1 + y*64] & 0x80;
|
||||
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, code | attr, 0, 0,0, x*8,y*8);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user