-scripts/minimaws: Removed Python 2 support.

-igs/igs027a.cpp, igs/xamcu.cpp: Slight simplification.

-sony/news_r3k.cpp: Sorted #includes.
This commit is contained in:
Vas Crabb 2024-09-17 05:11:19 +10:00
parent b5e6be9444
commit 8cd1eac323
14 changed files with 79 additions and 95 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb

View File

@ -1,13 +1,10 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb
import sqlite3
import sys
if sys.version_info >= (3, 4):
import urllib.request
import urllib.request
class SchemaQueries(object):
@ -1067,10 +1064,7 @@ class UpdateCursor(object):
class QueryConnection(object):
def __init__(self, database, **kwargs):
super(QueryConnection, self).__init__(**kwargs)
if sys.version_info >= (3, 4):
self.dbconn = sqlite3.connect('file:' + urllib.request.pathname2url(database) + '?mode=ro', uri=True, check_same_thread=False)
else:
self.dbconn = sqlite3.connect(database, check_same_thread=False)
self.dbconn = sqlite3.connect('file:' + urllib.request.pathname2url(database) + '?mode=ro', uri=True, check_same_thread=False)
self.dbconn.row_factory = sqlite3.Row
self.dbconn.execute('PRAGMA foreign_keys = ON')

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb
@ -6,6 +6,7 @@
from . import dbaccess
from . import htmltmpl
import html
import inspect
import json
import mimetypes
@ -13,21 +14,14 @@ import os.path
import re
import sys
import urllib
import urllib.parse
import wsgiref.util
try:
import html
htmlescape = html.escape
except ImportError:
import cgi
htmlescape = cgi.escape
try:
import urllib.parse as urlparse
urlquote = urlparse.quote
except ImportError:
import urlparse
urlquote = urllib.quote
htmlescape = html.escape
shiftpath = wsgiref.util.shift_path_info
urljoin = urllib.parse.urljoin
urlparsequery = urllib.parse.parse_qs
urlquote = urllib.parse.quote
class HandlerBase(object):
@ -72,7 +66,7 @@ class AssetHandler(HandlerBase):
def __init__(self, directory, app, application_uri, environ, start_response, **kwargs):
super(AssetHandler, self).__init__(app=app, application_uri=application_uri, environ=environ, start_response=start_response, **kwargs)
self.directory = directory
self.asset = wsgiref.util.shift_path_info(environ)
self.asset = shiftpath(environ)
def __iter__(self):
if not self.asset:
@ -109,16 +103,16 @@ class QueryPageHandler(HandlerBase):
self.dbcurs = app.dbconn.cursor()
def machine_href(self, shortname):
return htmlescape(urlparse.urljoin(self.application_uri, 'machine/%s' % (urlquote(shortname), )), True)
return htmlescape(urljoin(self.application_uri, 'machine/%s' % (urlquote(shortname), )), True)
def sourcefile_href(self, sourcefile):
return htmlescape(urlparse.urljoin(self.application_uri, 'sourcefile/%s' % (urlquote(sourcefile), )), True)
return htmlescape(urljoin(self.application_uri, 'sourcefile/%s' % (urlquote(sourcefile), )), True)
def softwarelist_href(self, softwarelist):
return htmlescape(urlparse.urljoin(self.application_uri, 'softwarelist/%s' % (urlquote(softwarelist), )), True)
return htmlescape(urljoin(self.application_uri, 'softwarelist/%s' % (urlquote(softwarelist), )), True)
def software_href(self, softwarelist, software):
return htmlescape(urlparse.urljoin(self.application_uri, 'softwarelist/%s/%s' % (urlquote(softwarelist), urlquote(software))), True)
return htmlescape(urljoin(self.application_uri, 'softwarelist/%s/%s' % (urlquote(softwarelist), urlquote(software))), True)
def bios_data(self, machine):
result = { }
@ -198,7 +192,7 @@ class QueryPageHandler(HandlerBase):
class MachineRpcHandlerBase(QueryPageHandler):
def __init__(self, app, application_uri, environ, start_response, **kwargs):
super(MachineRpcHandlerBase, self).__init__(app=app, application_uri=application_uri, environ=environ, start_response=start_response, **kwargs)
self.shortname = wsgiref.util.shift_path_info(environ)
self.shortname = shiftpath(environ)
def __iter__(self):
if not self.shortname:
@ -223,7 +217,7 @@ class MachineRpcHandlerBase(QueryPageHandler):
class MachineHandler(QueryPageHandler):
def __init__(self, app, application_uri, environ, start_response, **kwargs):
super(MachineHandler, self).__init__(app=app, application_uri=application_uri, environ=environ, start_response=start_response, **kwargs)
self.shortname = wsgiref.util.shift_path_info(environ)
self.shortname = shiftpath(environ)
def __iter__(self):
if not self.shortname:
@ -250,7 +244,7 @@ class MachineHandler(QueryPageHandler):
description = machine_info['description']
yield htmltmpl.MACHINE_PROLOGUE.substitute(
app=self.js_escape(htmlescape(self.application_uri, True)),
assets=self.js_escape(htmlescape(urlparse.urljoin(self.application_uri, 'static'), True)),
assets=self.js_escape(htmlescape(urljoin(self.application_uri, 'static'), True)),
sourcehref=self.sourcefile_href(machine_info['sourcefile']),
description=htmlescape(description),
shortname=htmlescape(self.shortname),
@ -514,7 +508,7 @@ class SourceFileHandler(QueryPageHandler):
heading = self.linked_title(pattern)
title = 'Source Files: ' + htmlescape(pattern)
yield htmltmpl.SOURCEFILE_LIST_PROLOGUE.substitute(
assets=htmlescape(urlparse.urljoin(self.application_uri, 'static'), True),
assets=htmlescape(urljoin(self.application_uri, 'static'), True),
title=title,
heading=heading).encode('utf-8')
for filename, machines in self.dbcurs.get_sourcefiles(pattern):
@ -525,7 +519,7 @@ class SourceFileHandler(QueryPageHandler):
def sourcefile_page(self, id):
yield htmltmpl.SOURCEFILE_PROLOGUE.substitute(
assets=htmlescape(urlparse.urljoin(self.application_uri, 'static'), True),
assets=htmlescape(urljoin(self.application_uri, 'static'), True),
filename=htmlescape(self.filename),
title=self.linked_title(self.filename)).encode('utf-8')
@ -558,13 +552,13 @@ class SourceFileHandler(QueryPageHandler):
parts = filename.split('/')
final = parts[-1]
del parts[-1]
uri = urlparse.urljoin(self.application_uri, 'sourcefile')
uri = urljoin(self.application_uri, 'sourcefile')
title = ''
for part in parts:
uri = urlparse.urljoin(uri + '/', urlquote(part))
uri = urljoin(uri + '/', urlquote(part))
title += '<a href="{0}">{1}</a>/'.format(htmlescape(uri, True), htmlescape(part))
if linkfinal:
uri = urlparse.urljoin(uri + '/', urlquote(final))
uri = urljoin(uri + '/', urlquote(final))
return title + '<a href="{0}">{1}</a>'.format(htmlescape(uri, True), htmlescape(final))
else:
return title + final
@ -584,8 +578,8 @@ class SourceFileHandler(QueryPageHandler):
class SoftwareListHandler(QueryPageHandler):
def __init__(self, app, application_uri, environ, start_response, **kwargs):
super(SoftwareListHandler, self).__init__(app=app, application_uri=application_uri, environ=environ, start_response=start_response, **kwargs)
self.shortname = wsgiref.util.shift_path_info(environ)
self.software = wsgiref.util.shift_path_info(environ)
self.shortname = shiftpath(environ)
self.software = shiftpath(environ)
def __iter__(self):
if self.environ['PATH_INFO']:
@ -627,7 +621,7 @@ class SoftwareListHandler(QueryPageHandler):
else:
title = heading = 'Software Lists: ' + htmlescape(pattern)
yield htmltmpl.SOFTWARELIST_LIST_PROLOGUE.substitute(
assets=htmlescape(urlparse.urljoin(self.application_uri, 'static'), True),
assets=htmlescape(urljoin(self.application_uri, 'static'), True),
title=title,
heading=heading).encode('utf-8')
for shortname, description, total, supported, partiallysupported, unsupported in self.dbcurs.get_softwarelists(pattern):
@ -649,7 +643,7 @@ class SoftwareListHandler(QueryPageHandler):
title = 'Software List: %s (%s): %s' % (htmlescape(softwarelist_info['description']), htmlescape(softwarelist_info['shortname']), htmlescape(pattern))
heading = '<a href="%s">%s</a>: %s' % (self.softwarelist_href(softwarelist_info['shortname']), htmlescape(softwarelist_info['description']), htmlescape(pattern))
yield htmltmpl.SOFTWARELIST_PROLOGUE.substitute(
assets=htmlescape(urlparse.urljoin(self.application_uri, 'static'), True),
assets=htmlescape(urljoin(self.application_uri, 'static'), True),
title=title,
heading=heading,
shortname=htmlescape(softwarelist_info['shortname']),
@ -707,7 +701,7 @@ class SoftwareListHandler(QueryPageHandler):
def software_page(self, software_info):
yield htmltmpl.SOFTWARE_PROLOGUE.substitute(
assets=htmlescape(urlparse.urljoin(self.application_uri, 'static'), True),
assets=htmlescape(urljoin(self.application_uri, 'static'), True),
title=htmlescape(software_info['description']),
heading=htmlescape(software_info['description']),
softwarelisthref=self.softwarelist_href(self.shortname),
@ -811,7 +805,7 @@ class RomIdentHandler(QueryPageHandler):
def form_page(self):
yield htmltmpl.ROMIDENT_PAGE.substitute(
app=self.js_escape(htmlescape(self.application_uri, True)),
assets=self.js_escape(htmlescape(urlparse.urljoin(self.application_uri, 'static'), True))).encode('utf-8')
assets=self.js_escape(htmlescape(urljoin(self.application_uri, 'static'), True))).encode('utf-8')
class BiosRpcHandler(MachineRpcHandlerBase):
@ -850,7 +844,7 @@ class RomDumpsRpcHandler(QueryPageHandler):
return self.error_page(405)
else:
try:
args = urlparse.parse_qs(self.environ['QUERY_STRING'], keep_blank_values=True, strict_parsing=True)
args = urlparsequery(self.environ['QUERY_STRING'], keep_blank_values=True, strict_parsing=True)
crc = args.get('crc')
sha1 = args.get('sha1')
if (len(args) == 2) and (crc is not None) and (len(crc) == 1) and (sha1 is not None) and (len(sha1) == 1):
@ -907,7 +901,7 @@ class DiskDumpsRpcHandler(QueryPageHandler):
return self.error_page(405)
else:
try:
args = urlparse.parse_qs(self.environ['QUERY_STRING'], keep_blank_values=True, strict_parsing=True)
args = urlparsequery(self.environ['QUERY_STRING'], keep_blank_values=True, strict_parsing=True)
sha1 = args.get('sha1')
if (len(args) == 1) and (sha1 is not None) and (len(sha1) == 1):
sha1 = sha1[0]
@ -970,7 +964,7 @@ class MiniMawsApp(object):
application_uri = wsgiref.util.application_uri(environ)
if application_uri[-1] != '/':
application_uri += '/'
module = wsgiref.util.shift_path_info(environ)
module = shiftpath(environ)
if module == 'machine':
return MachineHandler(self, application_uri, environ, start_response)
elif module == 'sourcefile':
@ -982,7 +976,7 @@ class MiniMawsApp(object):
elif module == 'static':
return AssetHandler(self.assetsdir, self, application_uri, environ, start_response)
elif module == 'rpc':
service = wsgiref.util.shift_path_info(environ)
service = shiftpath(environ)
if not service:
return ErrorPageHandler(403, self, application_uri, environ, start_response)
elif service in self.RPC_SERVICES:

View File

@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
##
## license:BSD-3-Clause
## copyright-holders:Vas Crabb

View File

@ -79,8 +79,7 @@ void igs027a_cpu_device::onboard_peripherals(address_map &map)
map(0x4000'000c, 0x4000'000f).r(FUNC(igs027a_cpu_device::in_port_r));
map(0x4000'0018, 0x4000'001b).umask32(0x0000'00ff).w(FUNC(igs027a_cpu_device::out_port_w));
map(0x7000'0100, 0x7000'0103).umask32(0x0000'00ff).w(FUNC(igs027a_cpu_device::timer_rate_w<0>));
map(0x7000'0104, 0x7000'0107).umask32(0x0000'00ff).w(FUNC(igs027a_cpu_device::timer_rate_w<1>));
map(0x7000'0100, 0x7000'0107).umask32(0x0000'00ff).w(FUNC(igs027a_cpu_device::timer_rate_w));
map(0x7000'0200, 0x7000'0203).umask32(0x0000'00ff).rw(FUNC(igs027a_cpu_device::irq_pending_r), FUNC(igs027a_cpu_device::irq_enable_w));
map(0xf000'0008, 0xf000'000b).umask32(0x0000'00ff).w(FUNC(igs027a_cpu_device::bus_sizing_w));
@ -101,19 +100,18 @@ void igs027a_cpu_device::out_port_w(u8 data)
m_out_port_cb(0, data & OUT_PORT_MASK, OUT_PORT_MASK);
}
template <unsigned N>
void igs027a_cpu_device::timer_rate_w(u8 data)
void igs027a_cpu_device::timer_rate_w(offs_t offset, u8 data)
{
// TODO: determine how timer intervals are derived from clocks
if (data)
{
constexpr u32 TIMER_DIVISOR = 4263;
auto const period = attotime::from_ticks(TIMER_DIVISOR * (data + 1), clock());
m_irq_timers[N]->adjust(period, 0, period);
m_irq_timers[offset]->adjust(period, 0, period);
}
else
{
m_irq_timers[N]->adjust(attotime::never, 0, attotime::never);
m_irq_timers[offset]->adjust(attotime::never, 0, attotime::never);
}
}

View File

@ -30,7 +30,7 @@ private:
u32 in_port_r();
void out_port_w(u8 data);
template <unsigned N> void timer_rate_w(u8 data);
void timer_rate_w(offs_t offset, u8 data);
u8 irq_pending_r();
void irq_enable_w(u8 data);

View File

@ -2156,7 +2156,7 @@ ROM_END
/*
D (Zhōngguó chú dà D)
D (Zhōngguó Chú Dà D)
IGS, 2000
PCB Layout

View File

@ -165,8 +165,8 @@ void igs_m027xa_state::main_map(address_map &map)
map(0x50000000, 0x500003ff).umask32(0x000000ff).w(FUNC(igs_m027xa_state::xor_table_w));
map(0x58000000, 0x58000003).umask32(0x0000ffff).rw(m_xa, FUNC(igs_xa_mcu_subcpu_device::response_r), FUNC(igs_xa_mcu_subcpu_device::cmd_w));
map(0x58000000, 0x58000003).umask32(0xffff0000).w(m_xa, FUNC(igs_xa_mcu_subcpu_device::irqack_w));
map(0x58000000, 0x58000003).umask32(0x0000ffff).r(m_xa, FUNC(igs_xa_mcu_subcpu_device::response_r));
map(0x58000000, 0x58000003).w(m_xa, FUNC(igs_xa_mcu_subcpu_device::cmd_w));
}
void igs_m027xa_state::main_xor_map(address_map &map)

View File

@ -37,12 +37,6 @@ igs_xa_mcu_device_base::~igs_xa_mcu_device_base()
}
void igs_xa_mcu_device_base::cmd_w(u16 data)
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(igs_xa_mcu_device_base::do_cmd_w), this), s32(u32(data)));
}
void igs_xa_mcu_device_base::device_add_mconfig(machine_config &config)
{
MX10EXA(config, m_mcu, DERIVED_CLOCK(1, 1)); // MX10EXAQC (Philips 80C51XA)
@ -168,6 +162,12 @@ igs_xa_mcu_ics_sound_device::~igs_xa_mcu_ics_sound_device()
}
void igs_xa_mcu_ics_sound_device::cmd_w(u16 data)
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(igs_xa_mcu_ics_sound_device::do_cmd_w), this), s32(u32(data)));
}
void igs_xa_mcu_ics_sound_device::device_add_mconfig(machine_config &config)
{
igs_xa_mcu_device_base::device_add_mconfig(config);
@ -259,10 +259,17 @@ igs_xa_mcu_subcpu_device::~igs_xa_mcu_subcpu_device()
}
void igs_xa_mcu_subcpu_device::irqack_w(u16 data)
void igs_xa_mcu_subcpu_device::cmd_w(offs_t offset, u16 data)
{
LOG("%s: lower IRQ %08x\n", machine().describe_context(), data);
set_irq(0);
if (!BIT(offset, 0))
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(igs_xa_mcu_subcpu_device::do_cmd_w), this), s32(u32(data)));
}
else
{
LOG("%s: lower IRQ %08x\n", machine().describe_context(), data);
set_irq(0);
}
}

View File

@ -16,7 +16,6 @@ public:
auto irq() { return m_irq_cb.bind(); }
void cmd_w(u16 data);
int irq_r() const { return m_irq; }
protected:
@ -61,6 +60,7 @@ public:
igs_xa_mcu_ics_sound_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
virtual ~igs_xa_mcu_ics_sound_device();
void cmd_w(u16 data);
u16 response_low_r() { return m_response[0]; }
u16 response_high_r() { return m_response[1]; }
@ -85,9 +85,9 @@ public:
igs_xa_mcu_subcpu_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
virtual ~igs_xa_mcu_subcpu_device();
void set_disable() { m_mcu.lookup()->set_disable(); }
void set_disable() { m_mcu.lookup()->set_disable(); } // for systems where the microcontroller has not been dumped
void irqack_w(u16 data);
void cmd_w(offs_t offset, u16 data);
u16 response_r() { return m_response; }
protected:

View File

@ -21,34 +21,25 @@
#include "emu.h"
#include "cpu/mips/mips1.h"
// memory
#include "machine/ram.h"
// various hardware
#include "machine/timekpr.h"
#include "machine/z80scc.h"
#include "machine/am79c90.h"
#include "machine/upd765.h"
#include "dmac_0448.h"
#include "news_hid.h"
#include "machine/cxd1185.h"
// video
#include "screen.h"
// audio
#include "sound/spkrdev.h"
#include "speaker.h"
// busses and connectors
#include "machine/nscsi_bus.h"
#include "bus/nscsi/cd.h"
#include "bus/nscsi/hd.h"
#include "bus/rs232/rs232.h"
#include "cpu/mips/mips1.h"
#include "imagedev/floppy.h"
#include "machine/am79c90.h"
#include "machine/cxd1185.h"
#include "machine/nscsi_bus.h"
#include "machine/ram.h"
#include "machine/timekpr.h"
#include "machine/upd765.h"
#include "machine/z80scc.h"
#include "sound/spkrdev.h"
#include "screen.h"
#include "speaker.h"
#define VERBOSE 0
#include "logmacro.h"
@ -277,7 +268,7 @@ void news_r3k_base_state::cpu_map(address_map &map)
// 1fcc0000 // cstrobe?
// 1fcc0002 // sccstatus0?
map(0x1fcc0003, 0x1fcc0003).rw(FUNC(news_r3k_base_state::debug_r), FUNC(news_r3k_base_state::debug_w));
map(0x1fcc0007, 0x1fcc0007).lr8([this](){ return m_scc->m1_r(); }, "sccvect_r");
map(0x1fcc0007, 0x1fcc0007).lr8([this] () { return m_scc->m1_r(); }, "sccvect_r");
map(0x1fd00000, 0x1fd00007).m(m_hid, FUNC(news_hid_hle_device::map));
map(0x1fd40000, 0x1fd40003).noprw(); // FIXME: ignore buzzer for now