mirror of
https://github.com/holub/mame
synced 2025-07-01 00:09:18 +03:00
Merge branch 'master' of https://github.com/mamedev/mame.git
This commit is contained in:
commit
40628a06a2
4
makefile
4
makefile
@ -1012,9 +1012,9 @@ ifdef CPPCHECK
|
||||
@$(CPPCHECK) $(CPPCHECKFLAGS) $<
|
||||
endif
|
||||
|
||||
$(DRIVLISTSRC): $(SRC)/$(TARGET)/$(SUBTARGET).lst $(MAKELIST_TARGET)
|
||||
$(DRIVLISTSRC): $(SRC)/$(TARGET)/$(SUBTARGET).lst $(SRC)/build/makelist.py
|
||||
@echo Building driver list $<...
|
||||
@$(MAKELIST) $< >$@
|
||||
$(PYTHON) $(SRC)/build/makelist.py $< >$@
|
||||
|
||||
ifeq ($(TARGETOS),emscripten)
|
||||
# Avoid using .a files with Emscripten, link to bitcode instead
|
||||
|
@ -20,20 +20,14 @@ OBJDIRS += \
|
||||
|
||||
MAKEDEP_TARGET = $(BUILDOUT)/makedep$(BUILD_EXE)
|
||||
MAKEMAK_TARGET = $(BUILDOUT)/makemak$(BUILD_EXE)
|
||||
MAKELIST_TARGET = $(BUILDOUT)/makelist$(BUILD_EXE)
|
||||
VERINFO_TARGET = $(BUILDOUT)/verinfo$(BUILD_EXE)
|
||||
|
||||
MAKEDEP = $(MAKEDEP_TARGET)
|
||||
MAKEMAK = $(MAKEMAK_TARGET)
|
||||
MAKELIST = $(MAKELIST_TARGET)
|
||||
VERINFO = $(VERINFO_TARGET)
|
||||
|
||||
ifneq ($(TERM),cygwin)
|
||||
ifeq ($(OS),Windows_NT)
|
||||
MAKEDEP = $(subst /,\,$(MAKEDEP_TARGET))
|
||||
MAKEMAK = $(subst /,\,$(MAKEMAK_TARGET))
|
||||
MAKELIST = $(subst /,\,$(MAKELIST_TARGET))
|
||||
VERINFO = $(subst /,\,$(VERINFO_TARGET))
|
||||
endif
|
||||
endif
|
||||
|
||||
@ -41,8 +35,6 @@ ifneq ($(CROSS_BUILD),1)
|
||||
BUILD += \
|
||||
$(MAKEDEP_TARGET) \
|
||||
$(MAKEMAK_TARGET) \
|
||||
$(MAKELIST_TARGET) \
|
||||
$(VERINFO_TARGET) \
|
||||
|
||||
|
||||
|
||||
@ -82,37 +74,6 @@ $(MAKEMAK_TARGET): $(MAKEMAKOBJS) $(LIBOCORE) $(ZLIB)
|
||||
$(LD) $(LDFLAGS) $^ $(BASELIBS) -o $@
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
# makelist
|
||||
#-------------------------------------------------
|
||||
|
||||
MAKELISTOBJS = \
|
||||
$(BUILDOBJ)/makelist.o \
|
||||
$(OBJ)/lib/util/astring.o \
|
||||
$(OBJ)/lib/util/corealloc.o \
|
||||
$(OBJ)/lib/util/cstrpool.o \
|
||||
$(OBJ)/lib/util/corefile.o \
|
||||
$(OBJ)/lib/util/unicode.o \
|
||||
$(OBJ)/lib/util/tagmap.o \
|
||||
|
||||
$(MAKELIST_TARGET): $(MAKELISTOBJS) $(LIBOCORE) $(ZLIB)
|
||||
@echo Linking $@...
|
||||
$(LD) $(LDFLAGS) $^ $(BASELIBS) -o $@
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
# verinfo
|
||||
#-------------------------------------------------
|
||||
|
||||
VERINFOOBJS = \
|
||||
$(BUILDOBJ)/verinfo.o
|
||||
|
||||
$(VERINFO_TARGET): $(VERINFOOBJS) $(LIBOCORE)
|
||||
@echo Linking $@...
|
||||
$(LD) $(LDFLAGS) $^ $(BASELIBS) -o $@
|
||||
|
||||
else
|
||||
#-------------------------------------------------
|
||||
# It's a CROSS_BUILD. Ensure the targets exist.
|
||||
@ -120,10 +81,4 @@ else
|
||||
$(MAKEDEP_TARGET):
|
||||
@echo $@ should be built natively. Nothing to do.
|
||||
|
||||
$(MAKELIST_TARGET):
|
||||
@echo $@ should be built natively. Nothing to do.
|
||||
|
||||
$(VERINFO_TARGET):
|
||||
@echo $@ should be built natively. Nothing to do.
|
||||
|
||||
endif # CROSS_BUILD
|
||||
|
@ -1,228 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Aaron Giles
|
||||
/***************************************************************************
|
||||
|
||||
makelist.c
|
||||
|
||||
Create and sort the driver list.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include "corefile.h"
|
||||
#include "cstrpool.h"
|
||||
|
||||
|
||||
static dynamic_array<const char *> drivlist;
|
||||
static dynamic_array<const char *> ignorelst;
|
||||
static const_string_pool string_pool;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// driver_sort_callback - compare two items in
|
||||
// a string array
|
||||
//-------------------------------------------------
|
||||
|
||||
int sort_callback(const void *elem1, const void *elem2)
|
||||
{
|
||||
const char **item1 = (const char **)elem1;
|
||||
const char **item2 = (const char **)elem2;
|
||||
return strcmp(*item1, *item2);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// isignored - return info if item is in ignore
|
||||
// list or not
|
||||
//-------------------------------------------------
|
||||
|
||||
bool isignored(const char *drivname)
|
||||
{
|
||||
for (int i = 0; i < ignorelst.count(); i++)
|
||||
if (strcmp(ignorelst[i], drivname) == 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// parse_file - parse a single file, may be
|
||||
// called recursively
|
||||
//-------------------------------------------------
|
||||
|
||||
int parse_file(const char *srcfile)
|
||||
{
|
||||
// read source file
|
||||
dynamic_buffer buffer;
|
||||
file_error filerr = core_fload(srcfile, buffer);
|
||||
if (filerr != FILERR_NONE)
|
||||
{
|
||||
fprintf(stderr, "Unable to read source file '%s'\n", srcfile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// rip through it to find all drivers
|
||||
char *srcptr = (char *)&buffer[0];
|
||||
char *endptr = srcptr + buffer.count();
|
||||
int linenum = 1;
|
||||
bool in_comment = false;
|
||||
while (srcptr < endptr)
|
||||
{
|
||||
char c = *srcptr++;
|
||||
|
||||
// count newlines
|
||||
if (c == 13 || c == 10)
|
||||
{
|
||||
if (c == 13 && *srcptr == 10)
|
||||
srcptr++;
|
||||
linenum++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip any spaces
|
||||
if (isspace(c))
|
||||
continue;
|
||||
|
||||
// look for end of C comment
|
||||
if (in_comment && c == '*' && *srcptr == '/')
|
||||
{
|
||||
srcptr++;
|
||||
in_comment = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip anything else inside a C comment
|
||||
if (in_comment)
|
||||
continue;
|
||||
|
||||
// look for start of C comment
|
||||
if (c == '/' && *srcptr == '*')
|
||||
{
|
||||
srcptr++;
|
||||
in_comment = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
// if we hit a C++ comment, scan to the end of line
|
||||
if (c == '/' && *srcptr == '/')
|
||||
{
|
||||
while (srcptr < endptr && *srcptr != 13 && *srcptr != 10)
|
||||
srcptr++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// look for an import directive
|
||||
if (c == '#')
|
||||
{
|
||||
char filename[256];
|
||||
filename[0] = 0;
|
||||
for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(filename) - 1 && !isspace(*srcptr); pos++)
|
||||
{
|
||||
filename[pos] = *srcptr++;
|
||||
filename[pos+1] = 0;
|
||||
}
|
||||
fprintf(stderr, "Importing drivers from '%s'\n", filename);
|
||||
parse_file(filename);
|
||||
continue;
|
||||
}
|
||||
if (c == '!')
|
||||
{
|
||||
char drivname[256];
|
||||
drivname[0] = 0;
|
||||
for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++)
|
||||
{
|
||||
drivname[pos] = *srcptr++;
|
||||
drivname[pos+1] = 0;
|
||||
}
|
||||
fprintf(stderr, "Place driver '%s' to ignore list\n", drivname);
|
||||
ignorelst.append(string_pool.add(drivname));
|
||||
continue;
|
||||
}
|
||||
|
||||
// otherwise treat as a driver name
|
||||
char drivname[32];
|
||||
drivname[0] = 0;
|
||||
srcptr--;
|
||||
for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++)
|
||||
{
|
||||
drivname[pos] = *srcptr++;
|
||||
drivname[pos+1] = 0;
|
||||
}
|
||||
|
||||
// verify the name as valid
|
||||
for (char *drivch = drivname; *drivch != 0; drivch++)
|
||||
{
|
||||
if ((*drivch >= 'a' && *drivch <= 'z') || (*drivch >= '0' && *drivch <= '9') || *drivch == '_')
|
||||
continue;
|
||||
fprintf(stderr, "%s:%d - Invalid character '%c' in driver \"%s\"\n", srcfile, linenum, *drivch, drivname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// add it to the list
|
||||
if (!isignored(drivname))
|
||||
drivlist.append(string_pool.add(drivname));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// main - primary entry point
|
||||
//-------------------------------------------------
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// needs at least 1 argument
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Usage:\n"
|
||||
" makelist <source.lst>\n"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// extract arguments
|
||||
const char *srcfile = argv[1];
|
||||
|
||||
// parse the root file, exit early upon failure
|
||||
if (parse_file(srcfile))
|
||||
return 1;
|
||||
|
||||
// output a count
|
||||
if (drivlist.count() == 0)
|
||||
{
|
||||
fprintf(stderr, "No drivers found\n");
|
||||
return 1;
|
||||
}
|
||||
fprintf(stderr, "%d drivers found\n", drivlist.count());
|
||||
|
||||
// add a reference to the ___empty driver
|
||||
drivlist.append("___empty");
|
||||
|
||||
// sort the list
|
||||
qsort(drivlist, drivlist.count(), sizeof(drivlist[0]), sort_callback);
|
||||
|
||||
// start with a header
|
||||
printf("#include \"emu.h\"\n\n");
|
||||
printf("#include \"drivenum.h\"\n\n");
|
||||
|
||||
// output the list of externs first
|
||||
for (int index = 0; index < drivlist.count(); index++)
|
||||
printf("GAME_EXTERN(%s);\n", drivlist[index]);
|
||||
printf("\n");
|
||||
|
||||
// then output the array
|
||||
printf("const game_driver * const driver_list::s_drivers_sorted[%d] =\n", drivlist.count());
|
||||
printf("{\n");
|
||||
for (int index = 0; index < drivlist.count(); index++)
|
||||
printf("\t&GAME_NAME(%s)%s\n", drivlist[index], (index == drivlist.count() - 1) ? "" : ",");
|
||||
printf("};\n");
|
||||
printf("\n");
|
||||
|
||||
// also output a global count
|
||||
printf("int driver_list::s_driver_count = %d;\n", drivlist.count());
|
||||
|
||||
return 0;
|
||||
}
|
94
src/build/makelist.py
Normal file
94
src/build/makelist.py
Normal file
@ -0,0 +1,94 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
drivlist = []
|
||||
|
||||
def parse_file(srcfile):
|
||||
try:
|
||||
fp = open(srcfile, 'rb')
|
||||
except IOError:
|
||||
print("Unable to open source file '%s'" % srcfile)
|
||||
return 1
|
||||
in_comment = 0
|
||||
linenum = 0
|
||||
for line in fp.readlines():
|
||||
drivname = ''
|
||||
linenum+=1
|
||||
srcptr = 0
|
||||
while srcptr < len(line):
|
||||
c = line[srcptr]
|
||||
srcptr+=1
|
||||
if c==13 or c==10:
|
||||
if c==13 and line[srcptr]==10:
|
||||
srcptr+=1
|
||||
continue
|
||||
if c==' ':
|
||||
continue;
|
||||
if in_comment==1 and c=='*' and line[srcptr]=='/' :
|
||||
srcptr+=1
|
||||
in_comment = 0;
|
||||
continue
|
||||
if (in_comment):
|
||||
continue
|
||||
if c=='/' and line[srcptr]=='*' :
|
||||
srcptr+=1
|
||||
in_comment = 1;
|
||||
continue
|
||||
if c=='/' and line[srcptr]=='/' :
|
||||
break
|
||||
drivname += c
|
||||
drivname = drivname.strip()
|
||||
if (len(drivname)>0):
|
||||
if drivname[0]=='#':
|
||||
sys.stderr.write("Importing drivers from '%s'\n" % drivname[1:])
|
||||
parse_file(drivname[1:])
|
||||
continue
|
||||
if not all(((c >='a' and c<='z') or (c>='0' and c<='9') or c=='_') for c in drivname):
|
||||
sys.stderr.write("%s:%d - Invalid character in driver \"%s\"\n" % (srcfile, linenum, drivname))
|
||||
return 1
|
||||
else:
|
||||
drivlist.append(drivname)
|
||||
return 0
|
||||
|
||||
|
||||
if (len(sys.argv) < 2) :
|
||||
print('Usage:')
|
||||
print(' makelist <source.lst>')
|
||||
sys.exit(0)
|
||||
|
||||
if (parse_file(sys.argv[1])) :
|
||||
sys.exit(1)
|
||||
|
||||
# output a count
|
||||
if (len(drivlist)==0) :
|
||||
sys.stderr.write("No drivers found\n")
|
||||
sys.exit(1)
|
||||
|
||||
sys.stderr.write("%d drivers found\n" % len(drivlist))
|
||||
|
||||
# add a reference to the ___empty driver
|
||||
drivlist.append("___empty")
|
||||
|
||||
# start with a header
|
||||
print('#include "emu.h"\n');
|
||||
print('#include "drivenum.h"\n');
|
||||
|
||||
#output the list of externs first
|
||||
for drv in sorted(drivlist):
|
||||
print("GAME_EXTERN(%s);" % drv)
|
||||
print("")
|
||||
|
||||
# then output the array
|
||||
print("const game_driver * const driver_list::s_drivers_sorted[%d] =" % len(drivlist))
|
||||
print("{")
|
||||
for drv in sorted(drivlist):
|
||||
print("\t&GAME_NAME(%s)," % drv)
|
||||
print("};");
|
||||
print("");
|
||||
|
||||
# also output a global count
|
||||
print("int driver_list::s_driver_count = %d;\n" % len(drivlist))
|
@ -1,308 +0,0 @@
|
||||
//============================================================
|
||||
//
|
||||
// verinfo.c - Version resource emitter code
|
||||
//
|
||||
// Copyright Nicola Salmoria and the MAME Team.
|
||||
// Visit http://mamedev.org for licensing and usage restrictions.
|
||||
//
|
||||
//============================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef unsigned char UINT8;
|
||||
|
||||
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))
|
||||
#define BUILD_MAME (0)
|
||||
#define BUILD_MESS (1)
|
||||
#define BUILD_UME (2)
|
||||
|
||||
//============================================================
|
||||
// TYPE DEFINITIONS
|
||||
//============================================================
|
||||
|
||||
struct version_info
|
||||
{
|
||||
int version_major;
|
||||
int version_minor;
|
||||
int version_build;
|
||||
int version_subbuild;
|
||||
const char *version_string;
|
||||
const char *author;
|
||||
const char *comments;
|
||||
const char *company_name;
|
||||
const char *file_description;
|
||||
const char *internal_name;
|
||||
const char *legal_copyright;
|
||||
const char *original_filename;
|
||||
const char *product_name;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// STATIC
|
||||
//============================================================
|
||||
|
||||
static int build;
|
||||
|
||||
|
||||
//============================================================
|
||||
// emit_version_info
|
||||
//============================================================
|
||||
|
||||
static void emit_version_info(const version_info *v)
|
||||
{
|
||||
printf("VS_VERSION_INFO VERSIONINFO\n");
|
||||
printf("\tFILEVERSION %d,%d,%d,%d\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
printf("\tPRODUCTVERSION %d,%d,%d,%d\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
printf("\tFILEFLAGSMASK 0x3fL\n");
|
||||
#ifdef MAME_DEBUG
|
||||
if (v->version_build == 0)
|
||||
printf("\tFILEFLAGS VS_FF_DEBUG\n");
|
||||
else
|
||||
printf("\tFILEFLAGS VS_FF_PRERELEASE | VS_FF_DEBUG\n");
|
||||
#else
|
||||
if (v->version_build == 0)
|
||||
printf("\tFILEFLAGS 0x0L\n");
|
||||
else
|
||||
printf("\tFILEFLAGS VS_FF_PRERELEASE\n");
|
||||
#endif
|
||||
printf("\tFILEOS VOS_NT_WINDOWS32\n");
|
||||
printf("\tFILETYPE VFT_APP\n");
|
||||
printf("\tFILESUBTYPE VFT2_UNKNOWN\n");
|
||||
printf("BEGIN\n");
|
||||
printf("\tBLOCK \"StringFileInfo\"\n");
|
||||
printf("\tBEGIN\n");
|
||||
printf("#ifdef UNICODE\n");
|
||||
printf("\t\tBLOCK \"040904b0\"\n");
|
||||
printf("#else\n");
|
||||
printf("\t\tBLOCK \"040904E4\"\n");
|
||||
printf("#endif\n");
|
||||
printf("\t\tBEGIN\n");
|
||||
if (v->author != NULL)
|
||||
printf("\t\t\tVALUE \"Author\", \"%s\\0\"\n", v->author);
|
||||
if (v->comments != NULL)
|
||||
printf("\t\t\tVALUE \"Comments\", \"%s\\0\"\n", v->comments);
|
||||
if (v->company_name != NULL)
|
||||
printf("\t\t\tVALUE \"CompanyName\", \"%s\\0\"\n", v->company_name);
|
||||
if (v->file_description != NULL)
|
||||
printf("\t\t\tVALUE \"FileDescription\", \"%s\\0\"\n", v->file_description);
|
||||
printf("\t\t\tVALUE \"FileVersion\", \"%d, %d, %d, %d\\0\"\n", v->version_major, v->version_minor, v->version_build, v->version_subbuild);
|
||||
if (v->internal_name != NULL)
|
||||
printf("\t\t\tVALUE \"InternalName\", \"%s\\0\"\n", v->internal_name);
|
||||
if (v->legal_copyright != NULL)
|
||||
printf("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"\n", v->legal_copyright);
|
||||
if (v->original_filename != NULL)
|
||||
printf("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"\n", v->original_filename);
|
||||
if (v->product_name != NULL)
|
||||
printf("\t\t\tVALUE \"ProductName\", \"%s\\0\"\n", v->product_name);
|
||||
printf("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"\n", v->version_string);
|
||||
printf("\t\tEND\n");
|
||||
printf("\tEND\n");
|
||||
printf("\tBLOCK \"VarFileInfo\"\n");
|
||||
printf("\tBEGIN\n");
|
||||
printf("#ifdef UNICODE\n");
|
||||
printf("\t\tVALUE \"Translation\", 0x409, 1200\n");
|
||||
printf("#else\n");
|
||||
printf("\t\tVALUE \"Translation\", 0x409, 1252\n");
|
||||
printf("#endif\n");
|
||||
printf("\tEND\n");
|
||||
printf("END\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// parse_version_digit
|
||||
//============================================================
|
||||
|
||||
static bool parse_version_digit(const char *str, int *position, int* value)
|
||||
{
|
||||
int res = 0;
|
||||
|
||||
while (str[*position] != 0 && !isspace((UINT8)str[*position]) && !isdigit((UINT8)str[*position]))
|
||||
(*position)++;
|
||||
|
||||
if (str[*position] != 0 && isdigit((UINT8)str[*position]))
|
||||
{
|
||||
res = sscanf(&str[*position], "%d", value);
|
||||
while (isdigit((UINT8)str[*position]))
|
||||
(*position)++;
|
||||
}
|
||||
return res == 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// parse_version
|
||||
//============================================================
|
||||
|
||||
static int parse_version(char *str, int *version_major, int *version_minor, const char **version_string)
|
||||
{
|
||||
char *version;
|
||||
int position = 0;
|
||||
|
||||
// find the version string
|
||||
version = strstr(str, "BARE_BUILD_VERSION");
|
||||
if (version != NULL)
|
||||
version = strchr(version, '"');
|
||||
if (version == NULL || *version == '\0' || strchr(version, '.') == NULL)
|
||||
{
|
||||
fprintf(stderr, "Unable to find version string\n");
|
||||
return 1;
|
||||
}
|
||||
version++;
|
||||
*strchr(version, '"') = 0;
|
||||
|
||||
*version_string = version;
|
||||
if (!parse_version_digit(version, &position, version_major))
|
||||
{
|
||||
fprintf(stderr, "Unable to parse major version\n");
|
||||
return 1;
|
||||
}
|
||||
if (!parse_version_digit(version, &position, version_minor))
|
||||
{
|
||||
fprintf(stderr, "Unable to parse minor version\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// main
|
||||
//============================================================
|
||||
static int usage(char *me)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [-b mame|mess|ume] <filename>\n", me);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
//============================================================
|
||||
// main
|
||||
//============================================================
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
version_info v;
|
||||
char legal_copyright[512];
|
||||
char *buffer;
|
||||
size_t size;
|
||||
int opt;
|
||||
FILE *f;
|
||||
|
||||
memset(&v, 0, sizeof(v));
|
||||
build = BUILD_MAME;
|
||||
|
||||
// validate parameters
|
||||
opt = 1;
|
||||
while (opt < argc && *argv[opt] == '-')
|
||||
{
|
||||
if (!strcmp(argv[opt], "-b"))
|
||||
{
|
||||
char *p = argv[++opt];
|
||||
if (!strcmp(p,"mame"))
|
||||
build = BUILD_MAME;
|
||||
else if (!strcmp(p,"mess"))
|
||||
build = BUILD_MESS;
|
||||
else if (!strcmp(p,"ume"))
|
||||
build = BUILD_UME;
|
||||
else
|
||||
return usage(argv[0]);
|
||||
}
|
||||
else
|
||||
return usage(argv[0]);
|
||||
opt++;
|
||||
}
|
||||
|
||||
if (opt != argc-1 )
|
||||
{
|
||||
return usage(argv[0]);
|
||||
}
|
||||
|
||||
// open the file
|
||||
f = fopen(argv[argc-1], "rb");
|
||||
if (f == NULL)
|
||||
{
|
||||
fprintf(stderr, "Error opening file %s\n", argv[argc-1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get the file size
|
||||
fseek(f, 0, SEEK_END);
|
||||
size = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
|
||||
// allocate a buffer
|
||||
buffer = (char *)malloc(size + 1);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
fclose(f);
|
||||
fprintf(stderr, "Error allocating %ld bytes\n", (long) size + 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// read the file contents and NULL-terminate
|
||||
fread(buffer, 1, size, f);
|
||||
fclose(f);
|
||||
buffer[size] = 0;
|
||||
|
||||
// parse out version string
|
||||
if (parse_version(buffer, &v.version_major, &v.version_minor, &v.version_string))
|
||||
{
|
||||
fprintf(stderr, "Error parsing version\n");
|
||||
free(buffer);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (build == BUILD_MESS)
|
||||
{
|
||||
// MESS
|
||||
v.author = "MESS Team";
|
||||
v.comments = "Multi Emulation Super System";
|
||||
v.company_name = "MESS Team";
|
||||
v.file_description = "Multi Emulation Super System";
|
||||
v.internal_name = "MESS";
|
||||
v.original_filename = "MESS";
|
||||
v.product_name = "MESS";
|
||||
}
|
||||
else if (build == BUILD_UME)
|
||||
{
|
||||
// UME
|
||||
v.author = "MAME and MESS Team";
|
||||
v.comments = "Universal Machine Emulator";
|
||||
v.company_name = "MAME and MESS Team";
|
||||
v.file_description = "Universal Machine Emulator";
|
||||
v.internal_name = "UME";
|
||||
v.original_filename = "UME";
|
||||
v.product_name = "UME";
|
||||
}
|
||||
else
|
||||
{
|
||||
// MAME
|
||||
v.author = "Nicola Salmoria and the MAME Team";
|
||||
v.comments = "Multiple Arcade Machine Emulator";
|
||||
v.company_name = "MAME Team";
|
||||
v.file_description = "Multiple Arcade Machine Emulator";
|
||||
v.internal_name = "MAME";
|
||||
v.original_filename = "MAME";
|
||||
v.product_name = "MAME";
|
||||
}
|
||||
|
||||
// build legal_copyright string
|
||||
v.legal_copyright = legal_copyright;
|
||||
snprintf(legal_copyright, ARRAY_LENGTH(legal_copyright), "Copyright Nicola Salmoria and the MAME team");
|
||||
|
||||
// emit the info
|
||||
emit_version_info(&v);
|
||||
|
||||
free(buffer);
|
||||
return 0;
|
||||
}
|
116
src/build/verinfo.py
Normal file
116
src/build/verinfo.py
Normal file
@ -0,0 +1,116 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
def usage():
|
||||
sys.stderr.write('Usage: verinfo.py [-b mame|mess|ume] <filename>\n')
|
||||
return 0
|
||||
|
||||
build = "mame"
|
||||
|
||||
if (len(sys.argv)==1):
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
if (sys.argv[1]=='-b'):
|
||||
if (sys.argv[2]=='mame'):
|
||||
build = "mame"
|
||||
elif (sys.argv[2]=='mess'):
|
||||
build = "mess"
|
||||
elif (sys.argv[2]=='ume'):
|
||||
build = "ume"
|
||||
else :
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
srcfile = sys.argv[len(sys.argv)-1]
|
||||
try:
|
||||
fp = open(srcfile, 'rb')
|
||||
except IOError:
|
||||
sys.stderr.write("Unable to open source file '%s'" % srcfile)
|
||||
sys.exit(1)
|
||||
|
||||
for line in fp.readlines():
|
||||
if line.find("BARE_BUILD_VERSION")!=-1 and line.find('"')!=-1 and line.find('.')!=-1:
|
||||
version_string = line[line.find('"')+1:]
|
||||
version_string = version_string[0:version_string.find('"')]
|
||||
break
|
||||
|
||||
version_major = version_string[0:version_string.find('.')]
|
||||
version_minor = version_string[version_string.find('.')+1:]
|
||||
version_build = "0"
|
||||
version_subbuild = "0"
|
||||
if (build == "mess") :
|
||||
# MESS
|
||||
author = "MESS Team";
|
||||
comments = "Multi Emulation Super System";
|
||||
company_name = "MESS Team";
|
||||
file_description = "Multi Emulation Super System";
|
||||
internal_name = "MESS";
|
||||
original_filename = "MESS";
|
||||
product_name = "MESS";
|
||||
elif (build == "ume") :
|
||||
# UME
|
||||
author = "MAME and MESS Team"
|
||||
comments = "Universal Machine Emulator"
|
||||
company_name = "MAME and MESS Team"
|
||||
file_description = "Universal Machine Emulator"
|
||||
internal_name = "UME"
|
||||
original_filename = "UME"
|
||||
product_name = "UME"
|
||||
else :
|
||||
# MAME
|
||||
author = "Nicola Salmoria and the MAME Team"
|
||||
comments = "Multiple Arcade Machine Emulator"
|
||||
company_name = "MAME Team"
|
||||
file_description = "Multiple Arcade Machine Emulator"
|
||||
internal_name = "MAME"
|
||||
original_filename = "MAME"
|
||||
product_name = "MAME"
|
||||
|
||||
legal_copyright = "Copyright Nicola Salmoria and the MAME team"
|
||||
|
||||
print("VS_VERSION_INFO VERSIONINFO")
|
||||
print("\tFILEVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\tPRODUCTVERSION %s,%s,%s,%s" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\tFILEFLAGSMASK 0x3fL")
|
||||
if (version_build == 0) :
|
||||
print("\tFILEFLAGS 0x0L")
|
||||
else :
|
||||
print("\tFILEFLAGS VS_FF_PRERELEASE")
|
||||
print("\tFILEOS VOS_NT_WINDOWS32")
|
||||
print("\tFILETYPE VFT_APP")
|
||||
print("\tFILESUBTYPE VFT2_UNKNOWN")
|
||||
print("BEGIN")
|
||||
print("\tBLOCK \"StringFileInfo\"")
|
||||
print("\tBEGIN")
|
||||
print("#ifdef UNICODE")
|
||||
print("\t\tBLOCK \"040904b0\"")
|
||||
print("#else")
|
||||
print("\t\tBLOCK \"040904E4\"")
|
||||
print("#endif")
|
||||
print("\t\tBEGIN")
|
||||
print("\t\t\tVALUE \"Author\", \"%s\\0\"" % author)
|
||||
print("\t\t\tVALUE \"Comments\", \"%s\\0\"" % comments)
|
||||
print("\t\t\tVALUE \"CompanyName\", \"%s\\0\"" % company_name)
|
||||
print("\t\t\tVALUE \"FileDescription\", \"%s\\0\"" % file_description)
|
||||
print("\t\t\tVALUE \"FileVersion\", \"%s, %s, %s, %s\\0\"" % (version_major, version_minor, version_build, version_subbuild))
|
||||
print("\t\t\tVALUE \"InternalName\", \"%s\\0\"" % internal_name)
|
||||
print("\t\t\tVALUE \"LegalCopyright\", \"%s\\0\"" % legal_copyright)
|
||||
print("\t\t\tVALUE \"OriginalFilename\", \"%s\\0\"" % original_filename)
|
||||
print("\t\t\tVALUE \"ProductName\", \"%s\\0\"" % product_name)
|
||||
print("\t\t\tVALUE \"ProductVersion\", \"%s\\0\"" % version_string)
|
||||
print("\t\tEND")
|
||||
print("\tEND")
|
||||
print("\tBLOCK \"VarFileInfo\"")
|
||||
print("\tBEGIN")
|
||||
print("#ifdef UNICODE")
|
||||
print("\t\tVALUE \"Translation\", 0x409, 1200")
|
||||
print("#else")
|
||||
print("\t\tVALUE \"Translation\", 0x409, 1252")
|
||||
print("#endif")
|
||||
print("\tEND")
|
||||
print("END")
|
@ -421,6 +421,7 @@ audit_record *media_auditor::audit_one_rom(const rom_entry *rom)
|
||||
|
||||
// find the file and checksum it, getting the file length along the way
|
||||
emu_file file(m_enumerator.options().media_path(), OPEN_FLAG_READ | OPEN_FLAG_NO_PRELOAD);
|
||||
file.set_restrict_to_mediapath(true);
|
||||
path_iterator path(m_searchpath);
|
||||
astring curpath;
|
||||
while (path.next(curpath, record.name()))
|
||||
|
@ -77,7 +77,7 @@ protected:
|
||||
UINT8 m_callstack_bits; // number of program counter bits held in callstack
|
||||
UINT16 m_callstack_mask;
|
||||
UINT8 m_callstack_depth; // callstack levels: 3 on 2000/2150, 5 on 2200/2400
|
||||
UINT16 m_callstack[5+1]; // max 5
|
||||
UINT16 m_callstack[5]; // max 5
|
||||
int m_icount;
|
||||
UINT16 m_pc; // 13-bit program counter
|
||||
UINT8 m_ppr; // prepared page register (PP 1)
|
||||
|
@ -17,11 +17,8 @@ inline void amis2000_device::ram_w(UINT8 data)
|
||||
void amis2000_device::pop_callstack()
|
||||
{
|
||||
m_pc = (m_pc & ~m_callstack_mask) | (m_callstack[0] & m_callstack_mask);
|
||||
for (int i = 0; i < m_callstack_depth; i++)
|
||||
{
|
||||
for (int i = 0; i < m_callstack_depth-1; i++)
|
||||
m_callstack[i] = m_callstack[i+1];
|
||||
m_callstack[i+1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void amis2000_device::push_callstack()
|
||||
|
@ -10,6 +10,7 @@
|
||||
I've also looked at asterick's JavaScript D553 emulator for verification, with permission.
|
||||
|
||||
TODO:
|
||||
- add external interrupt
|
||||
- what happens with uCOM-43 opcodes on an uCOM-44/45 MCU?
|
||||
- what's the data after the ROM data for? (eg. 2000-2047, official ROM size is 2000)
|
||||
|
||||
@ -122,6 +123,8 @@ void ucom4_cpu_device::device_start()
|
||||
m_datamask = (1 << m_datawidth) - 1;
|
||||
m_dph_mask = m_datamask >> 4;
|
||||
|
||||
m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ucom4_cpu_device::simple_timer_cb), this));
|
||||
|
||||
m_read_a.resolve_safe(0xf);
|
||||
m_read_b.resolve_safe(0xf);
|
||||
m_read_c.resolve_safe(0xf);
|
||||
@ -187,11 +190,12 @@ void ucom4_cpu_device::device_start()
|
||||
|
||||
void ucom4_cpu_device::device_reset()
|
||||
{
|
||||
m_inte_f = 1;
|
||||
m_pc = 0;
|
||||
m_op = 0;
|
||||
m_skip = false;
|
||||
|
||||
m_timer->adjust(attotime::never);
|
||||
|
||||
// clear i/o
|
||||
for (int i = NEC_UCOM4_PORTC; i <= NEC_UCOM4_PORTI; i++)
|
||||
output_w(i, 0xf);
|
||||
|
@ -133,7 +133,7 @@ protected:
|
||||
int m_datamask;
|
||||
int m_family; // MCU family (43/44/45)
|
||||
int m_stack_levels; // number of callstack levels
|
||||
UINT16 m_stack[3+1]; // max 3
|
||||
UINT16 m_stack[3]; // max 3
|
||||
UINT8 m_port_out[0x10]; // last value written to output port
|
||||
UINT8 m_op;
|
||||
UINT8 m_prev_op; // previous opcode
|
||||
@ -141,6 +141,7 @@ protected:
|
||||
UINT8 m_bitmask; // opcode bit argument
|
||||
bool m_skip; // skip next opcode
|
||||
int m_icount;
|
||||
emu_timer *m_timer;
|
||||
|
||||
UINT16 m_pc; // program counter
|
||||
UINT8 m_acc; // 4-bit accumulator
|
||||
@ -179,6 +180,7 @@ protected:
|
||||
void output_w(int index, UINT8 data);
|
||||
|
||||
bool check_op_43();
|
||||
TIMER_CALLBACK_MEMBER( simple_timer_cb );
|
||||
UINT8 ucom43_reg_r(int index);
|
||||
void ucom43_reg_w(int index, UINT8 data);
|
||||
|
||||
|
@ -17,11 +17,8 @@ inline void ucom4_cpu_device::ram_w(UINT8 data)
|
||||
void ucom4_cpu_device::pop_stack()
|
||||
{
|
||||
m_pc = m_stack[0] & m_prgmask;
|
||||
for (int i = 0; i < m_stack_levels; i++)
|
||||
{
|
||||
for (int i = 0; i < m_stack_levels-1; i++)
|
||||
m_stack[i] = m_stack[i+1];
|
||||
m_stack[i+1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ucom4_cpu_device::push_stack()
|
||||
@ -429,7 +426,8 @@ void ucom4_cpu_device::op_tpb()
|
||||
void ucom4_cpu_device::op_tit()
|
||||
{
|
||||
// TIT: skip next on Interrupt F/F, reset Interrupt F/F
|
||||
op_illegal();
|
||||
m_skip = (m_int_f != 0);
|
||||
m_int_f = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -489,6 +487,11 @@ inline bool ucom4_cpu_device::check_op_43()
|
||||
return (m_family == NEC_UCOM43);
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER( ucom4_cpu_device::simple_timer_cb )
|
||||
{
|
||||
m_timer_f = 1;
|
||||
}
|
||||
|
||||
// extra registers reside in RAM
|
||||
enum
|
||||
{
|
||||
@ -512,6 +515,7 @@ inline void ucom4_cpu_device::ucom43_reg_w(int index, UINT8 data)
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transfer
|
||||
|
||||
void ucom4_cpu_device::op_taw()
|
||||
@ -712,7 +716,12 @@ void ucom4_cpu_device::op_stm()
|
||||
if (!check_op_43()) return;
|
||||
|
||||
// STM X: Reset Timer F/F, Start Timer with X
|
||||
op_illegal();
|
||||
m_timer_f = 0;
|
||||
|
||||
// on the default clockrate of 400kHz, the minimum time interval is
|
||||
// 630usec and the maximum interval is 40320usec(630*64)
|
||||
attotime base = attotime::from_hz(unscaled_clock() / 4 / 63);
|
||||
m_timer->adjust(base * ((m_arg & 0x3f) + 1));
|
||||
|
||||
if ((m_arg & 0xc0) != 0x80)
|
||||
logerror("%s STM opcode unexpected upper arg $%02X at $%03X\n", tag(), m_arg & 0xc0, m_pc);
|
||||
@ -723,7 +732,7 @@ void ucom4_cpu_device::op_ttm()
|
||||
if (!check_op_43()) return;
|
||||
|
||||
// TTM: skip next on Timer F/F
|
||||
op_illegal();
|
||||
m_skip = (m_timer_f != 0);
|
||||
}
|
||||
|
||||
|
||||
@ -734,7 +743,7 @@ void ucom4_cpu_device::op_ei()
|
||||
if (!check_op_43()) return;
|
||||
|
||||
// EI: Set Interrupt Enable F/F
|
||||
op_illegal();
|
||||
m_inte_f = 1;
|
||||
}
|
||||
|
||||
void ucom4_cpu_device::op_di()
|
||||
@ -742,5 +751,5 @@ void ucom4_cpu_device::op_di()
|
||||
if (!check_op_43()) return;
|
||||
|
||||
// DI: Reset Interrupt Enable F/F
|
||||
op_illegal();
|
||||
m_inte_f = 0;
|
||||
}
|
||||
|
@ -141,13 +141,15 @@ const osd_directory_entry *file_enumerator::next()
|
||||
emu_file::emu_file(UINT32 openflags)
|
||||
: m_file(NULL),
|
||||
m_iterator(""),
|
||||
m_mediapaths(""),
|
||||
m_crc(0),
|
||||
m_openflags(openflags),
|
||||
m_zipfile(NULL),
|
||||
m_ziplength(0),
|
||||
m__7zfile(NULL),
|
||||
m__7zlength(0),
|
||||
m_remove_on_close(false)
|
||||
m_remove_on_close(false),
|
||||
m_restrict_to_mediapath(false)
|
||||
{
|
||||
// sanity check the open flags
|
||||
if ((m_openflags & OPEN_FLAG_HAS_CRC) && (m_openflags & OPEN_FLAG_WRITE))
|
||||
@ -157,13 +159,15 @@ emu_file::emu_file(UINT32 openflags)
|
||||
emu_file::emu_file(const char *searchpath, UINT32 openflags)
|
||||
: m_file(NULL),
|
||||
m_iterator(searchpath),
|
||||
m_mediapaths(searchpath),
|
||||
m_crc(0),
|
||||
m_openflags(openflags),
|
||||
m_zipfile(NULL),
|
||||
m_ziplength(0),
|
||||
m__7zfile(NULL),
|
||||
m__7zlength(0),
|
||||
m_remove_on_close(false)
|
||||
m_remove_on_close(false),
|
||||
m_restrict_to_mediapath(false)
|
||||
{
|
||||
// sanity check the open flags
|
||||
if ((m_openflags & OPEN_FLAG_HAS_CRC) && (m_openflags & OPEN_FLAG_WRITE))
|
||||
@ -354,17 +358,15 @@ file_error emu_file::open_next()
|
||||
{
|
||||
astring tempfullpath = m_fullpath;
|
||||
|
||||
filerr = attempt__7zped();
|
||||
filerr = attempt_zipped();
|
||||
if (filerr == FILERR_NONE)
|
||||
break;
|
||||
|
||||
m_fullpath = tempfullpath;
|
||||
|
||||
filerr = attempt_zipped();
|
||||
filerr = attempt__7zped();
|
||||
if (filerr == FILERR_NONE)
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
return filerr;
|
||||
@ -650,6 +652,21 @@ int emu_file::vprintf(const char *fmt, va_list va)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// part_of_mediapath - checks if 'path' is part of
|
||||
// any media path
|
||||
//-------------------------------------------------
|
||||
|
||||
bool emu_file::part_of_mediapath(astring path)
|
||||
{
|
||||
bool result = false;
|
||||
astring mediapath;
|
||||
m_mediapaths.reset();
|
||||
while (m_mediapaths.next(mediapath, NULL) && !result)
|
||||
if (path.cmpsubstr(mediapath, 0, mediapath.len()))
|
||||
result = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// attempt_zipped - attempt to open a ZIPped file
|
||||
@ -667,6 +684,10 @@ file_error emu_file::attempt_zipped()
|
||||
if (dirsep == -1)
|
||||
return FILERR_NOT_FOUND;
|
||||
|
||||
if (restrict_to_mediapath())
|
||||
if ( !part_of_mediapath(m_fullpath) )
|
||||
return FILERR_NOT_FOUND;
|
||||
|
||||
// insert the part from the right of the separator into the head of the filename
|
||||
if (filename.len() > 0)
|
||||
filename.ins(0, "/");
|
||||
@ -798,6 +819,10 @@ file_error emu_file::attempt__7zped()
|
||||
if (dirsep == -1)
|
||||
return FILERR_NOT_FOUND;
|
||||
|
||||
if (restrict_to_mediapath())
|
||||
if ( !part_of_mediapath(m_fullpath) )
|
||||
return FILERR_NOT_FOUND;
|
||||
|
||||
// insert the part from the right of the separator into the head of the filename
|
||||
if (filename.len() > 0)
|
||||
filename.ins(0, "/");
|
||||
|
@ -97,10 +97,13 @@ public:
|
||||
const char *fullpath() const { return m_fullpath; }
|
||||
UINT32 openflags() const { return m_openflags; }
|
||||
hash_collection &hashes(const char *types);
|
||||
bool restrict_to_mediapath() { return m_restrict_to_mediapath; }
|
||||
bool part_of_mediapath(astring path);
|
||||
|
||||
// setters
|
||||
void remove_on_close() { m_remove_on_close = true; }
|
||||
void set_openflags(UINT32 openflags) { assert(m_file == NULL); m_openflags = openflags; }
|
||||
void set_restrict_to_mediapath(bool rtmp = true) { m_restrict_to_mediapath = rtmp; }
|
||||
|
||||
// open/close
|
||||
file_error open(const char *name);
|
||||
@ -151,7 +154,8 @@ private:
|
||||
astring m_fullpath; // full filename
|
||||
core_file * m_file; // core file pointer
|
||||
path_iterator m_iterator; // iterator for paths
|
||||
UINT32 m_crc; // iterator for paths
|
||||
path_iterator m_mediapaths; // media-path iterator
|
||||
UINT32 m_crc; // file's CRC
|
||||
UINT32 m_openflags; // flags we used for the open
|
||||
hash_collection m_hashes; // collection of hashes
|
||||
|
||||
@ -164,6 +168,7 @@ private:
|
||||
UINT64 m__7zlength; // 7Z file length
|
||||
|
||||
bool m_remove_on_close; // flag: remove the file when closing
|
||||
bool m_restrict_to_mediapath; // flag: restrict to paths inside the media-path
|
||||
};
|
||||
|
||||
|
||||
|
@ -810,7 +810,7 @@ GAME( 1995, fastdraw_130,fastdraw, alg_r2, alg_2p, alg_state, palr6, ROT90,
|
||||
/* works ok but uses right player (2) controls only for trigger and holster */
|
||||
|
||||
/* NOVA games on ALG hardware with own address scramble */
|
||||
GAME( 199?, aplatoon, alg_bios, alg_r2, alg, alg_state, aplatoon, ROT0, "Nova?", "Platoon V.?.? US", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 199?, aplatoon, alg_bios, alg_r2, alg, alg_state, aplatoon, ROT0, "Nova?", "Platoon V.3.1 US", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
|
||||
|
||||
/* Web Picmatic games PAL tv standard, own rom board */
|
||||
GAME( 1993, zortonbr, alg_bios, picmatic, alg, alg_state, pal, ROT0, "Web Picmatic", "Zorton Brothers (Los Justicieros)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
|
||||
|
@ -143,19 +143,19 @@ WRITE8_MEMBER(chaknpop_state::coinlock_w)
|
||||
static ADDRESS_MAP_START( chaknpop_map, AS_PROGRAM, 8, chaknpop_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("mcu_ram")
|
||||
AM_RANGE(0x8800, 0x8800) AM_READWRITE(chaknpop_mcu_port_a_r, chaknpop_mcu_port_a_w)
|
||||
AM_RANGE(0x8801, 0x8801) AM_READWRITE(chaknpop_mcu_port_b_r, chaknpop_mcu_port_b_w)
|
||||
AM_RANGE(0x8802, 0x8802) AM_READWRITE(chaknpop_mcu_port_c_r, chaknpop_mcu_port_c_w)
|
||||
AM_RANGE(0x8800, 0x8800) AM_READWRITE(mcu_port_a_r, mcu_port_a_w)
|
||||
AM_RANGE(0x8801, 0x8801) AM_READWRITE(mcu_port_b_r, mcu_port_b_w)
|
||||
AM_RANGE(0x8802, 0x8802) AM_READWRITE(mcu_port_c_r, mcu_port_c_w)
|
||||
AM_RANGE(0x8804, 0x8805) AM_DEVREADWRITE("ay1", ay8910_device, data_r, address_data_w)
|
||||
AM_RANGE(0x8806, 0x8807) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w)
|
||||
AM_RANGE(0x8808, 0x8808) AM_READ_PORT("DSWC")
|
||||
AM_RANGE(0x8809, 0x8809) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x880a, 0x880a) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x880b, 0x880b) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x880c, 0x880c) AM_READWRITE(chaknpop_gfxmode_r, chaknpop_gfxmode_w)
|
||||
AM_RANGE(0x880c, 0x880c) AM_READWRITE(gfxmode_r, gfxmode_w)
|
||||
AM_RANGE(0x880d, 0x880d) AM_WRITE(coinlock_w) // coin lock out
|
||||
AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(chaknpop_txram_w) AM_SHARE("tx_ram") // TX tilemap
|
||||
AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE(chaknpop_attrram_w) AM_SHARE("attr_ram") // Color attribute
|
||||
AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(txram_w) AM_SHARE("tx_ram") // TX tilemap
|
||||
AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE(attrram_w) AM_SHARE("attr_ram") // Color attribute
|
||||
AM_RANGE(0x9840, 0x98ff) AM_RAM AM_SHARE("spr_ram") // sprite
|
||||
AM_RANGE(0xa000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xffff) AM_RAMBANK("bank1") // bitmap plane 1-4
|
||||
@ -362,7 +362,7 @@ static MACHINE_CONFIG_START( chaknpop, chaknpop_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(chaknpop_state, screen_update_chaknpop)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(chaknpop_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", chaknpop)
|
||||
@ -416,4 +416,4 @@ ROM_END
|
||||
|
||||
|
||||
/* ( YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME ) */
|
||||
GAME( 1983, chaknpop, 0, chaknpop, chaknpop, driver_device, 0, ROT0, "Taito Corporation", "Chack'n Pop", 0 )
|
||||
GAME( 1983, chaknpop, 0, chaknpop, chaknpop, driver_device, 0, ROT0, "Taito Corporation", "Chack'n Pop", GAME_SUPPORTS_SAVE )
|
||||
|
@ -801,7 +801,7 @@ ROM_START( talbot )
|
||||
ROM_LOAD( "16.11i", 0x5000, 0x1000, CRC(1612adf5) SHA1(9adeb21d5d1692f6e31460062f03f2008076b307) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8201.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
ROM_LOAD( "alpha-8201__44801a75__2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
|
||||
ROM_REGION( 0x1000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "7.6a", 0x0000, 0x1000, CRC(bde14194) SHA1(f8f569342a3094eb5450a30b8ab87901b98e6061) )
|
||||
@ -848,7 +848,7 @@ ROM_START( champbasj )
|
||||
ROM_LOAD( "18.2n", 0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8201.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
ROM_LOAD( "alpha-8201__44801a75__2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
|
||||
ROM_LOAD( "14.5e", 0x0000, 0x2000, CRC(1b8202b3) SHA1(889b77fc3d0cb029baf8c47be260f513f3ed59bd) )
|
||||
@ -897,7 +897,7 @@ ROM_START( champbb2 )
|
||||
|
||||
// the pcb has a 8302 on it, though only the 8201 instructions are used
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8302.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
ROM_LOAD( "alpha-8302__44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
|
||||
ROM_LOAD( "epr5936", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
|
||||
@ -925,7 +925,7 @@ ROM_START( champbb2a )
|
||||
|
||||
// the pcb has a 8302 on it, though only the 8201 instructions are used
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8302.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
ROM_LOAD( "alpha-8302__44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
|
||||
ROM_LOAD( "epr5936", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
|
||||
@ -953,7 +953,7 @@ ROM_START( champbb2j )
|
||||
|
||||
// the pcb has a 8302 on it, though only the 8201 instructions are used
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8302.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
ROM_LOAD( "alpha-8302__44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
|
||||
ROM_LOAD( "4.6a", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
|
||||
|
@ -1285,7 +1285,7 @@ Note: CPU - Main PCB
|
||||
|
||||
Main processor - 68000 2.988MHz
|
||||
|
||||
Video processor - ALPHA-8303 custom
|
||||
Protection processor - ALPHA-8303 custom
|
||||
|
||||
Sound processor - 8085 3.073MHz
|
||||
- TMP8155 RIOTs (RAM & I/O Timers)
|
||||
@ -1310,7 +1310,7 @@ ROM_START( equites )
|
||||
ROM_LOAD( "ev4.1h", 0x06000, 0x2000, CRC(b7917264) SHA1(e58345fda088b171fd348959de15082f3cb42514) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8303.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
ROM_LOAD( "alpha-8303__44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
|
||||
ROM_REGION( 0x1000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "ep9", 0x00000, 0x1000, CRC(0325be11) SHA1(d95667b439e3d97b08efeaf08022348546a4f385) )
|
||||
@ -1374,7 +1374,7 @@ ROM_START( equitess )
|
||||
ROM_LOAD( "ev4.1h", 0x06000, 0x2000, CRC(b7917264) SHA1(e58345fda088b171fd348959de15082f3cb42514) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8303.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
ROM_LOAD( "alpha-8303__44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
|
||||
ROM_REGION( 0x1000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "epr-ep0.3e", 0x00000, 0x1000, CRC(3f5a81c3) SHA1(8fd5bc621f483bfa46be7e40e6480b25243bdf70) )
|
||||
@ -1432,7 +1432,7 @@ ROM_START( bullfgtr )
|
||||
ROM_LOAD( "hv4vr.bin", 0x06000, 0x2000, CRC(62c7a25b) SHA1(237d3cbdfbf45b33c2f65d30faba151380866a93) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8303.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
ROM_LOAD( "alpha-8303__44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
|
||||
ROM_REGION( 0x1000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "h.bin", 0x000000, 0x1000, CRC(c6894c9a) SHA1(0d5a55cded4fd833211bdc733a78c6c8423897de) )
|
||||
@ -1514,7 +1514,7 @@ ROM_START( bullfgtrs )
|
||||
ROM_LOAD( "hv4vr.bin", 0x06000, 0x2000, CRC(62c7a25b) SHA1(237d3cbdfbf45b33c2f65d30faba151380866a93) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8303.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
ROM_LOAD( "alpha-8303__44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
|
||||
ROM_REGION( 0x1000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "h.bin", 0x000000, 0x1000, CRC(c6894c9a) SHA1(0d5a55cded4fd833211bdc733a78c6c8423897de) )
|
||||
@ -1712,7 +1712,7 @@ ROM_START( splndrbt )
|
||||
ROM_LOAD( "4_v.1h", 0x06000, 0x2000, CRC(10f45af4) SHA1(00fa599bad8bf3ba6deee54165f381403096e8f9) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8303.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
ROM_LOAD( "alpha-8303__44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "10.8c", 0x00000, 0x2000, CRC(501887d4) SHA1(3cf4401d6fddff1500066219a71ac3b30ecbdd28) )
|
||||
@ -1777,6 +1777,9 @@ ROM_START( hvoltage )
|
||||
ROM_LOAD( "6_v.1h", 0x04000, 0x4000, CRC(e9542211) SHA1(482f2c90e842fe5cc31cc6a39025adf65ba47ce9) )
|
||||
ROM_LOAD( "7_v.1e", 0x08000, 0x4000, CRC(44d38554) SHA1(6765971376eafa218fda1accb1e173a7c1850cc8) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "alpha-8304__44801bxx.bin", 0x0000, 0x2000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x2000, "gfx1", 0 ) // chars
|
||||
ROM_LOAD( "5.8c", 0x00000, 0x2000, CRC(656d53cd) SHA1(9971ed7e7da0e8bf46e97e8f75a2c2201b33fc2f) )
|
||||
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
DECLARE_DRIVER_INIT(gonefsh2);
|
||||
DECLARE_DRIVER_INIT(sddz);
|
||||
DECLARE_DRIVER_INIT(hauntedh);
|
||||
DECLARE_DRIVER_INIT(bigd2);
|
||||
DECLARE_DRIVER_INIT(zhongguo);
|
||||
DECLARE_DRIVER_INIT(klxyj);
|
||||
DECLARE_DRIVER_INIT(fearless);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tilemap_tile_info);
|
||||
@ -569,7 +569,7 @@ ROM_END
|
||||
|
||||
/*
|
||||
|
||||
Big D2
|
||||
Zhong Guo Chu Da D
|
||||
IGS, 2000
|
||||
|
||||
PCB Layout
|
||||
@ -612,10 +612,10 @@ Notes:
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( bigd2 )
|
||||
ROM_START( zhongguo )
|
||||
ROM_REGION( 0x04000, "maincpu", 0 )
|
||||
/* Internal rom of IGS027A ARM based MCU */
|
||||
ROM_LOAD( "bigd2_igs027a", 0x00000, 0x4000, NO_DUMP )
|
||||
ROM_LOAD( "zhongguo_igs027a", 0x00000, 0x4000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg
|
||||
ROM_LOAD( "p2600.u10", 0x000000, 0x80000, CRC(9ad34135) SHA1(54717753d1296efe49946369fd4a27181f19dbc0) )
|
||||
@ -953,9 +953,9 @@ DRIVER_INIT_MEMBER(igs_m027_state,gonefsh2)
|
||||
pgm_create_dummy_internal_arm_region();
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(igs_m027_state,bigd2)
|
||||
DRIVER_INIT_MEMBER(igs_m027_state,zhongguo)
|
||||
{
|
||||
big2_decrypt(machine());
|
||||
zhongguo_decrypt(machine());
|
||||
//sdwx_gfx_decrypt(machine());
|
||||
pgm_create_dummy_internal_arm_region();
|
||||
}
|
||||
@ -968,7 +968,7 @@ DRIVER_INIT_MEMBER(igs_m027_state,bigd2)
|
||||
|
||||
GAME( 2002, sdwx, 0, igs_majhong, sdwx, igs_m027_state, sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", GAME_IS_SKELETON ) // aka Christmas 5 Line?
|
||||
GAME( 200?, sddz, 0, igs_majhong, sdwx, igs_m027_state, sddz, ROT0, "IGS", "Super Dou Di Zhu", GAME_IS_SKELETON )
|
||||
GAME( 2000, bigd2, 0, igs_majhong, sdwx, igs_m027_state, bigd2, ROT0, "IGS", "Big D2", GAME_IS_SKELETON )
|
||||
GAME( 2000, zhongguo, 0, igs_majhong, sdwx, igs_m027_state, zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", GAME_IS_SKELETON )
|
||||
GAME( 200?, lhzb3, 0, igs_majhong, sdwx, igs_m027_state, lhzb3, ROT0, "IGS", "Long Hu Zheng Ba 3", GAME_IS_SKELETON )
|
||||
GAME( 200?, lhzb4, 0, igs_majhong, sdwx, igs_m027_state, lhzb4, ROT0, "IGS", "Long Hu Zheng Ba 4", GAME_IS_SKELETON )
|
||||
GAME( 200?, klxyj, 0, igs_majhong, sdwx, igs_m027_state, klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", GAME_IS_SKELETON )
|
||||
|
@ -459,7 +459,7 @@ ROM_START( shougi )
|
||||
/* shougi has one socket empty */
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8201.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
ROM_LOAD( "alpha-8201__44801a75__2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "pr.2l", 0x0000, 0x0020, CRC(cd3559ff) SHA1(a1291b06a8a337943660b2ef62c94c49d58a6fb5) )
|
||||
@ -481,7 +481,7 @@ ROM_START( shougi2 )
|
||||
ROM_LOAD( "10-2.3l", 0x5000, 0x1000, CRC(a26385fd) SHA1(2adb21bb4f67a378014bc1edda48daca349d17e1) )
|
||||
|
||||
ROM_REGION( 0x2000, "mcu", 0 )
|
||||
ROM_LOAD( "8201.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
ROM_LOAD( "alpha-8201__44801a75__2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "pr.2l", 0x0000, 0x0020, CRC(cd3559ff) SHA1(a1291b06a8a337943660b2ef62c94c49d58a6fb5) )
|
||||
|
@ -8,13 +8,18 @@ class chaknpop_state : public driver_device
|
||||
public:
|
||||
chaknpop_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_mcu_ram(*this, "mcu_ram"),
|
||||
m_tx_ram(*this, "tx_ram"),
|
||||
m_attr_ram(*this, "attr_ram"),
|
||||
m_spr_ram(*this, "spr_ram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_spr_ram(*this, "spr_ram") { }
|
||||
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<UINT8> m_mcu_ram;
|
||||
@ -37,30 +42,31 @@ public:
|
||||
UINT8 m_gfxmode;
|
||||
UINT8 m_flip_x;
|
||||
UINT8 m_flip_y;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(coinlock_w);
|
||||
DECLARE_READ8_MEMBER(chaknpop_mcu_port_a_r);
|
||||
DECLARE_READ8_MEMBER(chaknpop_mcu_port_b_r);
|
||||
DECLARE_READ8_MEMBER(chaknpop_mcu_port_c_r);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_mcu_port_a_w);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_mcu_port_b_w);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_mcu_port_c_w);
|
||||
DECLARE_READ8_MEMBER(chaknpop_gfxmode_r);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_gfxmode_w);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_txram_w);
|
||||
DECLARE_WRITE8_MEMBER(chaknpop_attrram_w);
|
||||
DECLARE_READ8_MEMBER(mcu_port_a_r);
|
||||
DECLARE_READ8_MEMBER(mcu_port_b_r);
|
||||
DECLARE_READ8_MEMBER(mcu_port_c_r);
|
||||
DECLARE_WRITE8_MEMBER(mcu_port_a_w);
|
||||
DECLARE_WRITE8_MEMBER(mcu_port_b_w);
|
||||
DECLARE_WRITE8_MEMBER(mcu_port_c_w);
|
||||
DECLARE_READ8_MEMBER(gfxmode_r);
|
||||
DECLARE_WRITE8_MEMBER(gfxmode_w);
|
||||
DECLARE_WRITE8_MEMBER(txram_w);
|
||||
DECLARE_WRITE8_MEMBER(attrram_w);
|
||||
DECLARE_WRITE8_MEMBER(unknown_port_1_w);
|
||||
DECLARE_WRITE8_MEMBER(unknown_port_2_w);
|
||||
TILE_GET_INFO_MEMBER(chaknpop_get_tx_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
DECLARE_PALETTE_INIT(chaknpop);
|
||||
UINT32 screen_update_chaknpop(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void tx_tilemap_mark_all_dirty();
|
||||
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void draw_bitmap( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void mcu_update_seed( UINT8 data );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void mcu_update_seed(UINT8 data);
|
||||
};
|
||||
|
@ -63,27 +63,27 @@ void chaknpop_state::mcu_update_seed( UINT8 data )
|
||||
Memory handlers
|
||||
***************************************************************************/
|
||||
|
||||
READ8_MEMBER(chaknpop_state::chaknpop_mcu_port_a_r)
|
||||
READ8_MEMBER(chaknpop_state::mcu_port_a_r)
|
||||
{
|
||||
//logerror("%04x: MCU port_a read\n", space.device().safe_pc());
|
||||
return m_mcu_result;
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(chaknpop_state::chaknpop_mcu_port_b_r)
|
||||
READ8_MEMBER(chaknpop_state::mcu_port_b_r)
|
||||
{
|
||||
//logerror("%04x: MCU port_b read\n", space.device().safe_pc());
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(chaknpop_state::chaknpop_mcu_port_c_r)
|
||||
READ8_MEMBER(chaknpop_state::mcu_port_c_r)
|
||||
{
|
||||
//logerror("%04x: MCU port_c read\n", space.device().safe_pc());
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_mcu_port_a_w)
|
||||
WRITE8_MEMBER(chaknpop_state::mcu_port_a_w)
|
||||
{
|
||||
UINT8 mcu_command;
|
||||
|
||||
@ -131,12 +131,12 @@ WRITE8_MEMBER(chaknpop_state::chaknpop_mcu_port_a_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_mcu_port_b_w)
|
||||
WRITE8_MEMBER(chaknpop_state::mcu_port_b_w)
|
||||
{
|
||||
//logerror("%04x: MCU port_b write 0x%02x\n", space.device().safe_pc(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_mcu_port_c_w)
|
||||
WRITE8_MEMBER(chaknpop_state::mcu_port_c_w)
|
||||
{
|
||||
//logerror("%04x: MCU port_c write 0x%02x\n", space.device().safe_pc(), data);
|
||||
}
|
||||
|
@ -1120,7 +1120,7 @@ void klxyj_decrypt(running_machine &machine)
|
||||
}
|
||||
}
|
||||
|
||||
static const UINT8 big2_tab[0x100] = {
|
||||
static const UINT8 zhongguo_tab[0x100] = {
|
||||
0x68, 0x56, 0xC2, 0x54, 0xA2, 0x8C, 0x7B, 0x4F, 0x37, 0xAC, 0x60, 0xF8, 0x24, 0xDF, 0x3E, 0x6B,
|
||||
0xE2, 0x89, 0x3D, 0xF3, 0x31, 0x83, 0x4A, 0x65, 0x27, 0x98, 0xC5, 0xBF, 0x78, 0x3E, 0x6C, 0x02,
|
||||
0x07, 0x96, 0x88, 0x4D, 0xAE, 0xA6, 0x56, 0x3A, 0x4A, 0xD5, 0xB8, 0x7E, 0x0B, 0xA7, 0x1D, 0xBC,
|
||||
@ -1139,7 +1139,7 @@ static const UINT8 big2_tab[0x100] = {
|
||||
0x1E, 0xA6, 0xFC, 0xFE, 0xE3, 0x8E, 0xB1, 0xB7, 0x0F, 0x32, 0xF1, 0xCF, 0x36, 0xFE, 0x65, 0x8E
|
||||
};
|
||||
|
||||
void big2_decrypt(running_machine &machine)
|
||||
void zhongguo_decrypt(running_machine &machine)
|
||||
{
|
||||
int i;
|
||||
UINT16 *src = (UINT16 *) machine.root_device().memregion("user1")->base();
|
||||
@ -1158,7 +1158,7 @@ void big2_decrypt(running_machine &machine)
|
||||
IGS27_CRYPT7
|
||||
IGS27_CRYPT8
|
||||
|
||||
x ^= big2_tab[(i>> 1) & 0xff] << 8;
|
||||
x ^= zhongguo_tab[(i>> 1) & 0xff] << 8;
|
||||
|
||||
src[i] = x;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ void sdwx_decrypt(running_machine &machine);
|
||||
void hauntedh_decrypt(running_machine &machine);
|
||||
void chessc2_decrypt(running_machine &machine);
|
||||
void klxyj_decrypt(running_machine &machine);
|
||||
void big2_decrypt(running_machine &machine);
|
||||
void zhongguo_decrypt(running_machine &machine);
|
||||
void gonefsh2_decrypt(running_machine &machine);
|
||||
void sddz_decrypt(running_machine &machine);
|
||||
void lhzb3_decrypt(running_machine &machine);
|
||||
|
@ -9766,7 +9766,7 @@ tarzana // (c) 1999?
|
||||
starzan // (c) 2000?
|
||||
|
||||
// IGS027A Cpu Games
|
||||
bigd2 // (c) 2000
|
||||
zhongguo // (c) 2000
|
||||
sdwx // (c) 2002
|
||||
sddz // (c) 200?
|
||||
lhzb3 // (c) 200?
|
||||
|
@ -25,9 +25,8 @@
|
||||
PALETTE_INIT_MEMBER(chaknpop_state, chaknpop)
|
||||
{
|
||||
const UINT8 *color_prom = memregion("proms")->base();
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 1024; i++)
|
||||
|
||||
for (int i = 0; i < 1024; i++)
|
||||
{
|
||||
int col, r, g, b;
|
||||
int bit0, bit1, bit2;
|
||||
@ -66,12 +65,12 @@ void chaknpop_state::tx_tilemap_mark_all_dirty()
|
||||
m_tx_tilemap->set_flip(m_flip_x | m_flip_y);
|
||||
}
|
||||
|
||||
READ8_MEMBER(chaknpop_state::chaknpop_gfxmode_r)
|
||||
READ8_MEMBER(chaknpop_state::gfxmode_r)
|
||||
{
|
||||
return m_gfxmode;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_gfxmode_w)
|
||||
WRITE8_MEMBER(chaknpop_state::gfxmode_w)
|
||||
{
|
||||
if (m_gfxmode != data)
|
||||
{
|
||||
@ -97,13 +96,13 @@ WRITE8_MEMBER(chaknpop_state::chaknpop_gfxmode_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_txram_w)
|
||||
WRITE8_MEMBER(chaknpop_state::txram_w)
|
||||
{
|
||||
m_tx_ram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chaknpop_state::chaknpop_attrram_w)
|
||||
WRITE8_MEMBER(chaknpop_state::attrram_w)
|
||||
{
|
||||
if (m_attr_ram[offset] != data)
|
||||
{
|
||||
@ -123,7 +122,7 @@ WRITE8_MEMBER(chaknpop_state::chaknpop_attrram_w)
|
||||
* I'm not sure how to handle attributes about color
|
||||
*/
|
||||
|
||||
TILE_GET_INFO_MEMBER(chaknpop_state::chaknpop_get_tx_tile_info)
|
||||
TILE_GET_INFO_MEMBER(chaknpop_state::get_tx_tile_info)
|
||||
{
|
||||
int tile = m_tx_ram[tile_index];
|
||||
int tile_h_bank = (m_gfxmode & GFX_TX_BANK2) << 2; /* 0x00-0xff -> 0x200-0x2ff */
|
||||
@ -150,7 +149,7 @@ void chaknpop_state::video_start()
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
|
||||
/* info offset type w h col row */
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(chaknpop_state::chaknpop_get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(chaknpop_state::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
|
||||
m_vram1 = &RAM[0x10000];
|
||||
m_vram2 = &RAM[0x12000];
|
||||
@ -175,10 +174,8 @@ void chaknpop_state::video_start()
|
||||
|
||||
void chaknpop_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
int offs;
|
||||
|
||||
/* Draw the sprites */
|
||||
for (offs = 0; offs < m_spr_ram.bytes(); offs += 4)
|
||||
for (int offs = 0; offs < m_spr_ram.bytes(); offs += 4)
|
||||
{
|
||||
int sx = m_spr_ram[offs + 3];
|
||||
int sy = 256 - 15 - m_spr_ram[offs];
|
||||
@ -246,7 +243,7 @@ void chaknpop_state::draw_bitmap( bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
}
|
||||
}
|
||||
|
||||
UINT32 chaknpop_state::screen_update_chaknpop(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 chaknpop_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
draw_sprites(bitmap, cliprect);
|
||||
|
@ -105,10 +105,10 @@ MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( advision )
|
||||
ROM_REGION( 0x1000, I8048_TAG, ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "avbios.u5", 0x000, 0x400, CRC(279e33d1) SHA1(bf7b0663e9125c9bfb950232eab627d9dbda8460) )
|
||||
ROM_LOAD( "b225__ins8048-11kdp_n.u5", 0x000, 0x400, CRC(279e33d1) SHA1(bf7b0663e9125c9bfb950232eab627d9dbda8460) ) // "<natsemi logo> /B225 \\ INS8048-11KDP/N"
|
||||
|
||||
ROM_REGION( 0x200, COP411_TAG, 0 )
|
||||
ROM_LOAD( "avsound.u8", 0x000, 0x200, CRC(81e95975) SHA1(8b6f8c30dd3e9d8e43f1ea20fba2361b383790eb) )
|
||||
ROM_LOAD( "b8223__cop411l-kcn_n.u8", 0x000, 0x200, CRC(81e95975) SHA1(8b6f8c30dd3e9d8e43f1ea20fba2361b383790eb) ) // "<natsemi logo> /B8223 \\ COP411L-KCN/N"
|
||||
ROM_END
|
||||
|
||||
/* Game Driver */
|
||||
|
@ -5,8 +5,16 @@
|
||||
Tomy Alien Chase (manufactured in Japan)
|
||||
* boards are labeled TN-16
|
||||
* NEC uCOM-43 MCU, labeled D553C 258
|
||||
* red/green VFD display with color overlay, 2-sided (opposing player sees a mirrored image)
|
||||
* red/green VFD display with color overlay, 2-sided*
|
||||
|
||||
*Player one views the VFD from the front (grid+filament side) while the
|
||||
opposite player views it from the back side (through the conductive traces),
|
||||
basically a mirror-image.
|
||||
|
||||
This is a space-themed tabletop VFD electronic game. To start, simply
|
||||
press [UP]. Hold a joystick direction to move around.
|
||||
|
||||
NOTE!: MESS external artwork is required to be able to play
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -23,18 +31,145 @@ public:
|
||||
alnchase_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_button_matrix(*this, "IN"),
|
||||
m_speaker(*this, "speaker")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport_array<2> m_button_matrix;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
|
||||
UINT8 m_input_mux;
|
||||
UINT32 m_plate;
|
||||
UINT16 m_grid;
|
||||
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(display_w);
|
||||
DECLARE_WRITE8_MEMBER(port_e_w);
|
||||
|
||||
UINT32 m_vfd_state[0x10];
|
||||
void update_vfd();
|
||||
|
||||
virtual void machine_start();
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void alnchase_state::update_vfd()
|
||||
{
|
||||
for (int i = 0; i < 9; i++)
|
||||
if (m_grid & (1 << i) && m_vfd_state[i] != m_plate)
|
||||
{
|
||||
// on difference, send to output
|
||||
for (int j = 0; j < 17; j++)
|
||||
output_set_lamp_value(i*100 + j, m_plate >> j & 1);
|
||||
|
||||
m_vfd_state[i] = m_plate;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
I/O
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
READ8_MEMBER(alnchase_state::input_r)
|
||||
{
|
||||
UINT8 inp = 0;
|
||||
|
||||
// read selected button rows
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (m_input_mux >> i & 1)
|
||||
inp |= m_button_matrix[i]->read();
|
||||
|
||||
return inp;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(alnchase_state::display_w)
|
||||
{
|
||||
int shift;
|
||||
|
||||
if (offset <= NEC_UCOM4_PORTE)
|
||||
{
|
||||
// C/D/E0: vfd matrix grid
|
||||
shift = (offset - NEC_UCOM4_PORTC) * 4;
|
||||
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
|
||||
|
||||
// C0(grid 0): input enable PL1
|
||||
// D0(grid 4): input enable PL2
|
||||
m_input_mux = (m_grid & 1) | (m_grid >> 3 & 2);
|
||||
}
|
||||
|
||||
if (offset >= NEC_UCOM4_PORTE)
|
||||
{
|
||||
// E23/F/G/H/I: vfd matrix plate
|
||||
shift = (offset - NEC_UCOM4_PORTE) * 4;
|
||||
m_plate = ((m_plate << 2 & ~(0xf << shift)) | (data << shift)) >> 2;
|
||||
}
|
||||
|
||||
update_vfd();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(alnchase_state::port_e_w)
|
||||
{
|
||||
display_w(space, offset, data);
|
||||
|
||||
// E1: speaker out
|
||||
m_speaker->level_w(data >> 1 & 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Inputs
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/* physical button layout and labels is like this:
|
||||
|
||||
POWER SOUND LEVEL PLAYER
|
||||
ON ON PRO TWO START
|
||||
o o | |
|
||||
| | | | [joystick]
|
||||
| | o o
|
||||
OFF OFF AMA ONE GAME 0,1,2,3
|
||||
|
||||
1 PLAYER SIDE
|
||||
|
||||
other player side only has a joystick
|
||||
*/
|
||||
|
||||
static INPUT_PORTS_START( alnchase )
|
||||
PORT_START("IN.0") // C0 port A
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
|
||||
PORT_START("IN.1") // D0 port A
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) // on non-mirrored view, swap P2 left/right
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) // "
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("SW") // port B
|
||||
PORT_CONFNAME( 0x01, 0x01, "Players" )
|
||||
PORT_CONFSETTING( 0x01, "1" )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
PORT_CONFNAME( 0x02, 0x00, DEF_STR( Difficulty ) )
|
||||
PORT_CONFSETTING( 0x00, "Amateur" )
|
||||
PORT_CONFSETTING( 0x02, "Professional" )
|
||||
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -47,6 +182,17 @@ INPUT_PORTS_END
|
||||
|
||||
void alnchase_state::machine_start()
|
||||
{
|
||||
// zerofill
|
||||
memset(m_vfd_state, 0, sizeof(m_vfd_state));
|
||||
m_input_mux = 0;
|
||||
m_plate = 0;
|
||||
m_grid = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_vfd_state));
|
||||
save_item(NAME(m_input_mux));
|
||||
save_item(NAME(m_plate));
|
||||
save_item(NAME(m_grid));
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +200,15 @@ static MACHINE_CONFIG_START( alnchase, alnchase_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz)
|
||||
MCFG_UCOM4_READ_A_CB(READ8(alnchase_state, input_r))
|
||||
MCFG_UCOM4_READ_B_CB(IOPORT("SW"))
|
||||
MCFG_UCOM4_WRITE_C_CB(WRITE8(alnchase_state, display_w))
|
||||
MCFG_UCOM4_WRITE_D_CB(WRITE8(alnchase_state, display_w))
|
||||
MCFG_UCOM4_WRITE_E_CB(WRITE8(alnchase_state, port_e_w))
|
||||
MCFG_UCOM4_WRITE_F_CB(WRITE8(alnchase_state, display_w))
|
||||
MCFG_UCOM4_WRITE_G_CB(WRITE8(alnchase_state, display_w))
|
||||
MCFG_UCOM4_WRITE_H_CB(WRITE8(alnchase_state, display_w))
|
||||
MCFG_UCOM4_WRITE_I_CB(WRITE8(alnchase_state, display_w))
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_alnchase)
|
||||
|
||||
@ -79,4 +234,4 @@ ROM_START( alnchase )
|
||||
ROM_END
|
||||
|
||||
|
||||
CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
CONS( 1984, alnchase, 0, 0, alnchase, alnchase, driver_device, 0, "Tomy", "Alien Chase", GAME_NOT_WORKING )
|
||||
|
@ -30,31 +30,6 @@
|
||||
- Although certain models came with particular drives as standard, users could add
|
||||
the other size if they wished. We support both sizes on any model.
|
||||
|
||||
Microbee Standard / Plus memory map
|
||||
|
||||
0000-7FFF RAM
|
||||
8000-BFFF SYSTEM roms
|
||||
C000-DFFF Edasm or WBee (edasm.rom or wbeee12.rom, optional)
|
||||
E000-EFFF Telcom 1.2 (netrom.ic34; optional)
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics)
|
||||
|
||||
Microbee IC memory map (preliminary)
|
||||
|
||||
0000-7FFF RAM
|
||||
8000-BFFF SYSTEM roms (bas522a.rom, bas522b.rom)
|
||||
C000-DFFF Edasm or WBee (edasm.rom or wbeee12.rom, optional)
|
||||
E000-EFFF Telcom (optional)
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics), Colour RAM (banked)
|
||||
|
||||
Microbee 56KB ROM memory map (preliminary)
|
||||
|
||||
0000-DFFF RAM
|
||||
E000-EFFF ROM 56kb.rom CP/M bootstrap loader
|
||||
F000-F7FF Video RAM
|
||||
F800-FFFF PCG RAM (graphics), Colour RAM (banked)
|
||||
|
||||
Early machines have 'standard' video (128 hires characters).
|
||||
Later machines had the option of 'premium' video which
|
||||
provides thousands of hires characters, enough to simulate
|
||||
@ -65,7 +40,7 @@
|
||||
This rom can be replaced with the Dreamdisk Chip-8 rom.
|
||||
Note that Telcom 3.21 is 8k, it uses a rombank switch
|
||||
(by reading port 0A) to swap between the two halves.
|
||||
See Telcom notes below.
|
||||
See Telcom notes below.
|
||||
|
||||
EDASM - Jump to C000, usually the Editor/Assembler package.
|
||||
|
||||
@ -75,7 +50,6 @@
|
||||
|
||||
These early colour computers have a PROM to create the foreground palette.
|
||||
|
||||
|
||||
Notes about the printer:
|
||||
- When computer turned on, defaults to 1200 baud serial printer
|
||||
- Change it to parallel by entering OUTL#1
|
||||
@ -96,24 +70,44 @@
|
||||
- Telcom 1.2 (used in mbeeic) has a bug. If you enter NET CLOCK, the status line is
|
||||
filled with inverse K. You can fix this from Basic by doing NET CLOCK 3 times.
|
||||
|
||||
Notes about Disk System
|
||||
- Ports 44 to 47 are for standard connection to FD2793.
|
||||
- Port 48 is used for drive/side/density select on write, and intrq/drq on read.
|
||||
intrq and drq are OR'd together, then gated to bit 7 of the data bus whenever
|
||||
port 48 is activated on read. There are no interrupts used.
|
||||
|
||||
Tests of old keyboard. Start mbeeic.
|
||||
1. Load ASTEROIDS PLUS, stay in attract mode, hold down spacebar,
|
||||
it should only fire bullets. If it sometimes starts turning,
|
||||
thrusting or using the shield, then there is a problem.
|
||||
|
||||
2. Load SCAVENGER and make sure it doesn't go to the next level
|
||||
until you find the Exit.
|
||||
|
||||
3. At the Basic prompt, type in EDASM press enter. At the memory size
|
||||
prompt press enter. Now, make sure the keyboard works properly.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
TODO/not working:
|
||||
|
||||
- Printer needs to be understood and fixed.
|
||||
- Keyboard loses characters if you type at a normal rate.
|
||||
- Fix Paste (it loses most of the characters)
|
||||
|
||||
- 256tc: Paste ignores shift key
|
||||
- All others: Paste drops most characters, shift operates randomly.
|
||||
|
||||
- various fdc issues:
|
||||
- B drive doesn't work.
|
||||
- some disks cause MESS to freeze.
|
||||
- ENMF pin missing from wd_fdc.
|
||||
- incorrect timing for track register causes 256tc failure to boot a disk.
|
||||
- 56k model takes about 2 minutes to boot a disk if loaded via command line.
|
||||
|
||||
- 56k model takes 120 seconds to boot a disk if loaded via command line.
|
||||
|
||||
- mbeeppc, mbee128p: In Basic, keyboard loses characters. Works fine in Wordbee.
|
||||
|
||||
- 256tc: At the menu, if F2 pressed to activate the Monitor, the emulated machine
|
||||
crashes due to a bug in z80pio emulation.
|
||||
|
||||
|
||||
- 256tc: Keyboard ROM U60 needs to be dumped.
|
||||
- 128k: GOLD PAL needs to be dumped for the bankswitching.
|
||||
- 64k: RED PAL needs to be dumped for the bankswitching.
|
||||
@ -125,25 +119,13 @@
|
||||
|
||||
- Mouse: a few programs support the use of a serial mouse which interfaced
|
||||
directly to the Z80PIO. However there's little info to be found.
|
||||
PIO B3 to ground activates the mouse pointer in Shell v3.01.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
Description of Disk System
|
||||
|
||||
- Ports 44 to 47 are for standard connection to FD2793.
|
||||
- Port 48 is used for drive/side/density select on write,
|
||||
and intrq/drq on read.
|
||||
intrq and drq are OR'd together, then gated to bit 7 of the
|
||||
data bus whenever port 48 is activated on read. There are
|
||||
no interrupts used.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "includes/mbee.h"
|
||||
#include "formats/mbee_cas.h"
|
||||
|
||||
|
||||
#define XTAL_13_5MHz 13500000
|
||||
|
||||
/********** NOTE !!! ***********************************************************
|
||||
@ -156,7 +138,7 @@ static ADDRESS_MAP_START(mbee_mem, AS_PROGRAM, 8, mbee_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot")
|
||||
AM_RANGE(0x1000, 0x3fff) AM_RAM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_WRITENOP /* Needed because quickload to here will crash MESS otherwise */
|
||||
AM_RANGE(0x4000, 0x7fff) AM_WRITENOP // Needed because quickload to here will crash MESS
|
||||
AM_RANGE(0x8000, 0xefff) AM_ROM
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w)
|
||||
AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbee_high_r, mbee_high_w)
|
||||
@ -312,6 +294,9 @@ static ADDRESS_MAP_START(mbee128_io, AS_IO, 8, mbee_state)
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt)
|
||||
AM_RANGE(0x04, 0x04) AM_WRITE(mbee_04_w)
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(mbee_06_w)
|
||||
AM_RANGE(0x07, 0x07) AM_READ(mbee_07_r)
|
||||
AM_RANGE(0x08, 0x08) AM_READWRITE(mbeeic_08_r, mbeeic_08_w)
|
||||
AM_RANGE(0x0b, 0x0b) AM_READWRITE(mbee_0b_r, mbee_0b_w)
|
||||
AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w)
|
||||
@ -363,7 +348,7 @@ static ADDRESS_MAP_START(mbeett_io, AS_IO, 8, mbee_state)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( mbee )
|
||||
PORT_START("X0") /* IN0 KEY ROW 0 [000] */
|
||||
PORT_START("X.0") /* IN0 KEY ROW 0 [000] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@') PORT_CHAR('`')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02)
|
||||
@ -373,7 +358,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07)
|
||||
|
||||
PORT_START("X1") /* IN1 KEY ROW 1 [080] */
|
||||
PORT_START("X.1") /* IN1 KEY ROW 1 [080] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR(0x08)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHAR(0x09)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(0x0a)
|
||||
@ -383,7 +368,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f)
|
||||
|
||||
PORT_START("X2") /* IN2 KEY ROW 2 [100] */
|
||||
PORT_START("X.2") /* IN2 KEY ROW 2 [100] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12)
|
||||
@ -393,7 +378,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17)
|
||||
|
||||
PORT_START("X3") /* IN3 KEY ROW 3 [180] */
|
||||
PORT_START("X.3") /* IN3 KEY ROW 3 [180] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('u') PORT_CHAR('Y') PORT_CHAR(0x19)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a)
|
||||
@ -403,7 +388,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("^") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~') PORT_CHAR(0x1e)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(0x5f) PORT_CHAR(0x1f) // port_char not working - hijacked
|
||||
|
||||
PORT_START("X4") /* IN4 KEY ROW 4 [200] */
|
||||
PORT_START("X.4") /* IN4 KEY ROW 4 [200] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 \"") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
|
||||
@ -413,7 +398,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 '") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
|
||||
|
||||
PORT_START("X5") /* IN5 KEY ROW 5 [280] */
|
||||
PORT_START("X.5") /* IN5 KEY ROW 5 [280] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
|
||||
@ -423,7 +408,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
|
||||
PORT_START("X6") /* IN6 KEY ROW 6 [300] */
|
||||
PORT_START("X.6") /* IN6 KEY ROW 6 [300] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Escape") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
@ -433,7 +418,7 @@ static INPUT_PORTS_START( mbee )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(3)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
|
||||
PORT_START("X7") /* IN7 KEY ROW 7 [380] */
|
||||
PORT_START("X.7") /* IN7 KEY ROW 7 [380] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Down)") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
@ -465,7 +450,7 @@ static INPUT_PORTS_START( mbee )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( mbee256 )
|
||||
PORT_START("X0") /* IN0 KEY ROW 0 [+00] */
|
||||
PORT_START("Y.0") /* IN0 KEY ROW 0 [+00] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Escape") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
@ -474,7 +459,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DEL (num)") PORT_CODE(KEYCODE_DEL_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
|
||||
PORT_START("X1") /* IN1 KEY ROW 1 [+08] */
|
||||
PORT_START("Y.1") /* IN1 KEY ROW 1 [+08] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11)
|
||||
@ -483,7 +468,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Linefeed") PORT_CODE(KEYCODE_HOME) PORT_CHAR(10)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert") PORT_CODE(KEYCODE_INSERT)
|
||||
|
||||
PORT_START("X2") /* IN2 KEY ROW 2 [+10] */
|
||||
PORT_START("Y.2") /* IN2 KEY ROW 2 [+10] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F3") PORT_CODE(KEYCODE_F3)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2 @") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17)
|
||||
@ -493,7 +478,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 (num)") PORT_CODE(KEYCODE_3_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a)
|
||||
|
||||
PORT_START("X3") /* IN3 KEY ROW 3 [+18] */
|
||||
PORT_START("Y.3") /* IN3 KEY ROW 3 [+18] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F4") PORT_CODE(KEYCODE_F4)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3 #") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05)
|
||||
@ -503,7 +488,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 (num)") PORT_CODE(KEYCODE_6_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
|
||||
|
||||
PORT_START("X4") /* IN4 KEY ROW 4 [+20] */
|
||||
PORT_START("Y.4") /* IN4 KEY ROW 4 [+20] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12)
|
||||
@ -513,7 +498,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 (num)") PORT_CODE(KEYCODE_9_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03)
|
||||
|
||||
PORT_START("X5") /* IN5 KEY ROW 5 [+28] */
|
||||
PORT_START("Y.5") /* IN5 KEY ROW 5 [+28] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F6") PORT_CODE(KEYCODE_F6)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14)
|
||||
@ -523,7 +508,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 (num)") PORT_CODE(KEYCODE_4_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16)
|
||||
|
||||
PORT_START("X6") /* IN6 KEY ROW 6 [+30] */
|
||||
PORT_START("Y.6") /* IN6 KEY ROW 6 [+30] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F7") PORT_CODE(KEYCODE_F7)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19)
|
||||
@ -533,7 +518,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Right)") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02)
|
||||
|
||||
PORT_START("X7") /* IN7 KEY ROW 7 [+38] */
|
||||
PORT_START("Y.7") /* IN7 KEY ROW 7 [+38] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F8") PORT_CODE(KEYCODE_F8)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7 &") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15)
|
||||
@ -541,7 +526,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Left)") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
|
||||
|
||||
PORT_START("X8") /* IN0 KEY ROW 0 [+40] */
|
||||
PORT_START("Y.8") /* IN0 KEY ROW 0 [+40] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F9") PORT_CODE(KEYCODE_F9)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8 *") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHAR(0x09)
|
||||
@ -549,7 +534,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Up)") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR(0x0d)
|
||||
|
||||
PORT_START("X9") /* IN1 KEY ROW 1 [+48] */
|
||||
PORT_START("Y.9") /* IN1 KEY ROW 1 [+48] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F10") PORT_CODE(KEYCODE_F10)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9 (") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f)
|
||||
@ -558,7 +543,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
|
||||
PORT_START("X10") /* IN2 KEY ROW 2 [+50] */
|
||||
PORT_START("Y.10") /* IN2 KEY ROW 2 [+50] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F11") PORT_CODE(KEYCODE_F11)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0 )") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
|
||||
@ -568,7 +553,7 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
|
||||
PORT_START("X11") /* IN3 KEY ROW 3 [+58] */
|
||||
PORT_START("Y.11") /* IN3 KEY ROW 3 [+58] */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F12") PORT_CODE(KEYCODE_F12)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b)
|
||||
@ -577,13 +562,13 @@ static INPUT_PORTS_START( mbee256 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("] }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') PORT_CHAR(0x1d)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
|
||||
PORT_START("X12") /* IN4 KEY ROW 4 [+60] */
|
||||
PORT_START("Y.12") /* IN4 KEY ROW 4 [+60] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
|
||||
PORT_START("X13") /* IN5 KEY ROW 5 [+68] */
|
||||
PORT_START("Y.13") /* IN5 KEY ROW 5 [+68] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
|
||||
|
||||
PORT_START("X14") /* IN6 KEY ROW 6 [+70] */
|
||||
PORT_START("Y.14") /* IN6 KEY ROW 6 [+70] */
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT)
|
||||
|
||||
// Autorun on quickload
|
||||
@ -619,15 +604,15 @@ static const gfx_layout mbee_charlayout =
|
||||
8*16 /* every char takes 16 bytes */
|
||||
};
|
||||
|
||||
static GFXDECODE_START( mbee )
|
||||
static GFXDECODE_START( mono )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( mbeeic )
|
||||
static GFXDECODE_START( standard )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 48 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( mbeeppc )
|
||||
static GFXDECODE_START( premium )
|
||||
GFXDECODE_ENTRY( "gfx", 0x0000, mbee_charlayout, 0, 8 )
|
||||
GFXDECODE_END
|
||||
|
||||
@ -662,10 +647,10 @@ static MACHINE_CONFIG_START( mbee, mbee_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0, 19*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mbee_state, screen_update_mbee)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbee)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mono)
|
||||
MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette") // usually sold with amber or green monitor
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbee)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mono)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -678,8 +663,8 @@ static MACHINE_CONFIG_START( mbee, mbee_state )
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_12MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbee_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mono_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, crtc_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
|
||||
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
|
||||
@ -718,12 +703,12 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 19*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mbee_state, screen_update_mbee)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbeeic)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", standard)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 96)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, mbeeic)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, standard)
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbeeic)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, standard)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -736,8 +721,8 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state )
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeic_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, colour_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, crtc_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
|
||||
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
|
||||
@ -773,19 +758,11 @@ static MACHINE_CONFIG_DERIVED( mbeeppc, mbeeic )
|
||||
MCFG_CPU_MODIFY( "maincpu" )
|
||||
MCFG_CPU_PROGRAM_MAP(mbeeppc_mem)
|
||||
MCFG_CPU_IO_MAP(mbeeppc_io)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, mbeeppc)
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", mbeeppc)
|
||||
MCFG_VIDEO_START_OVERRIDE(mbee_state, premium)
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", premium)
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
MCFG_PALETTE_ENTRIES(16)
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, mbeeppc)
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee_update_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mbee_state, crtc_vs))
|
||||
MCFG_PALETTE_INIT_OWNER(mbee_state, premium)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mbee56, mbeeic )
|
||||
@ -805,6 +782,7 @@ static MACHINE_CONFIG_DERIVED( mbee128, mbee56 )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee128_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc )
|
||||
@ -812,6 +790,7 @@ static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee128_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(mbee_state, fdc_intrq_w))
|
||||
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(mbee_state, fdc_drq_w))
|
||||
@ -824,14 +803,7 @@ static MACHINE_CONFIG_DERIVED( mbee256, mbee128p )
|
||||
MCFG_CPU_PROGRAM_MAP(mbee256_mem)
|
||||
MCFG_CPU_IO_MAP(mbee256_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee256)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr)
|
||||
MCFG_DEVICE_REMOVE("fdc:0")
|
||||
MCFG_DEVICE_REMOVE("fdc:1")
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbee_floppies, "drive3a", floppy_image_device::default_floppy_formats)
|
||||
@ -842,15 +814,8 @@ static MACHINE_CONFIG_DERIVED( mbeett, mbeeppc )
|
||||
MCFG_CPU_MODIFY( "maincpu" )
|
||||
MCFG_CPU_PROGRAM_MAP(mbeett_mem)
|
||||
MCFG_CPU_IO_MAP(mbeett_io)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbeett)
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", XTAL_13_5MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(mbee_state, mbeeppc_update_row)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(mbee_state, mbee256_update_addr)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* Unused roms:
|
||||
|
@ -9,12 +9,12 @@
|
||||
|
||||
The initial release of this game was in 1979, known as Pro-Tennis,
|
||||
it is unknown if the hardware and/or ROM contents differ.
|
||||
|
||||
|
||||
TODO:
|
||||
- 2-player mode doesn't work: the guys auto-serve and the left player
|
||||
always hits the net, mcu emulation bug?
|
||||
- difficulty switch changes mcu freq
|
||||
This is an early VFD simple electronic tennis game. Player 1 is on the right
|
||||
side, player 2 or CPU on the left. Each player has six possible positions
|
||||
where to hit the ball. A backdrop behind the VFD shows a tennis court.
|
||||
|
||||
NOTE!: MESS external artwork is required to be able to play
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -24,11 +24,6 @@
|
||||
|
||||
#include "tmtennis.lh" // this is a test layout, external artwork is necessary
|
||||
|
||||
// master clock is from an LC circuit oscillating by default at 360kHz,
|
||||
// the difficulty switch puts a capacitor across it to slow it down to 260kHz
|
||||
#define MASTER_CLOCK_PRO1 (260000)
|
||||
#define MASTER_CLOCK_PRO2 (360000)
|
||||
|
||||
|
||||
class tmtennis_state : public driver_device
|
||||
{
|
||||
@ -53,12 +48,26 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(plate_w);
|
||||
DECLARE_WRITE8_MEMBER(grid_w);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(difficulty_switch);
|
||||
void update_clock();
|
||||
|
||||
UINT16 m_vfd_state[0x10];
|
||||
void update_vfd();
|
||||
|
||||
virtual void machine_reset();
|
||||
virtual void machine_start();
|
||||
};
|
||||
|
||||
// master clock is from an LC circuit oscillating by default at 360kHz, but...
|
||||
#define MASTER_CLOCK (360000)
|
||||
|
||||
void tmtennis_state::update_clock()
|
||||
{
|
||||
// ...on PRO1, the difficulty switch puts a capacitor across the LC circuit
|
||||
// to slow it down to approx. 260kHz (28%)
|
||||
m_maincpu->set_clock_scale(m_button_matrix[1]->read() & 0x100 ? 0.72 : 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
@ -95,7 +104,7 @@ READ8_MEMBER(tmtennis_state::input_r)
|
||||
|
||||
// read selected button rows
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (~m_input_mux >> i & 1)
|
||||
if (m_input_mux >> i & 1)
|
||||
inp &= m_button_matrix[i]->read();
|
||||
|
||||
return inp >> (offset*4);
|
||||
@ -137,6 +146,11 @@ WRITE8_MEMBER(tmtennis_state::grid_w)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
INPUT_CHANGED_MEMBER(tmtennis_state::difficulty_switch)
|
||||
{
|
||||
update_clock();
|
||||
}
|
||||
|
||||
/* Pro-Tennis physical button layout and labels is like this:
|
||||
|
||||
[SERVE] [1] [2] [3] [3] [2] [1] [SERVE]
|
||||
@ -146,30 +160,30 @@ WRITE8_MEMBER(tmtennis_state::grid_w)
|
||||
*/
|
||||
|
||||
static INPUT_PORTS_START( tmtennis )
|
||||
PORT_START("IN.0") // E0 port A/B (left side)
|
||||
PORT_CONFNAME( 0x101, 0x001, DEF_STR( Difficulty ) )
|
||||
PORT_CONFSETTING( 0x000, "Practice" )
|
||||
PORT_CONFSETTING( 0x001, "Pro 1" )
|
||||
PORT_CONFSETTING( 0x101, "Pro 2" )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) // P2 serve
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("IN.1") // E1 port A/B (right side)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // P1 serve
|
||||
PORT_CONFNAME( 0x02, 0x02, "Players" )
|
||||
PORT_CONFSETTING( 0x02, "1" )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
PORT_START("IN.0") // E0 port A/B
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("P1 Serve")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("P2 Serve")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 )
|
||||
|
||||
PORT_START("IN.1") // E1 port A/B
|
||||
PORT_CONFNAME( 0x101, 0x101, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, tmtennis_state, difficulty_switch, NULL)
|
||||
PORT_CONFSETTING( 0x000, "Practice" )
|
||||
PORT_CONFSETTING( 0x101, "Pro 1" ) // -> difficulty_switch
|
||||
PORT_CONFSETTING( 0x001, "Pro 2" )
|
||||
PORT_CONFNAME( 0x02, 0x02, "Players" )
|
||||
PORT_CONFSETTING( 0x02, "1" )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -180,6 +194,11 @@ INPUT_PORTS_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void tmtennis_state::machine_reset()
|
||||
{
|
||||
update_clock();
|
||||
}
|
||||
|
||||
void tmtennis_state::machine_start()
|
||||
{
|
||||
// zerofill
|
||||
@ -199,7 +218,7 @@ void tmtennis_state::machine_start()
|
||||
static MACHINE_CONFIG_START( tmtennis, tmtennis_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", NEC_D552, MASTER_CLOCK_PRO2)
|
||||
MCFG_CPU_ADD("maincpu", NEC_D552, MASTER_CLOCK)
|
||||
MCFG_UCOM4_READ_A_CB(READ8(tmtennis_state, input_r))
|
||||
MCFG_UCOM4_READ_B_CB(READ8(tmtennis_state, input_r))
|
||||
MCFG_UCOM4_WRITE_C_CB(WRITE8(tmtennis_state, plate_w))
|
||||
@ -234,4 +253,4 @@ ROM_START( tmtennis )
|
||||
ROM_END
|
||||
|
||||
|
||||
CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomytronic)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomytronic)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -5,7 +5,11 @@
|
||||
Parker Brothers Wildfire, by Bob and Holly Doyle (prototype), and Garry Kitchen
|
||||
* AMI S2150, labeled C10641
|
||||
|
||||
x
|
||||
This is an electronic handheld pinball game. It has dozens of small leds
|
||||
to create the illusion of a moving ball, and even the flippers are leds.
|
||||
A drawing of a pinball table is added as overlay.
|
||||
|
||||
NOTE!: MESS external artwork is required to be able to play
|
||||
|
||||
|
||||
TODO:
|
||||
|
@ -52,23 +52,10 @@ public:
|
||||
, m_pak(*this, "pak")
|
||||
, m_telcom(*this, "telcom")
|
||||
, m_basic(*this, "basic")
|
||||
, m_io_x0(*this, "X0")
|
||||
, m_io_x1(*this, "X1")
|
||||
, m_io_x2(*this, "X2")
|
||||
, m_io_x3(*this, "X3")
|
||||
, m_io_x4(*this, "X4")
|
||||
, m_io_x5(*this, "X5")
|
||||
, m_io_x6(*this, "X6")
|
||||
, m_io_x7(*this, "X7")
|
||||
, m_io_extra(*this, "EXTRA")
|
||||
, m_io_config(*this, "CONFIG")
|
||||
, m_io_x8(*this, "X8")
|
||||
, m_io_x9(*this, "X9")
|
||||
, m_io_x10(*this, "X10")
|
||||
, m_io_x11(*this, "X11")
|
||||
, m_io_x12(*this, "X12")
|
||||
, m_io_x13(*this, "X13")
|
||||
, m_io_x14(*this, "X14")
|
||||
, m_io_oldkb(*this, "X")
|
||||
, m_io_newkb(*this, "Y")
|
||||
, m_screen(*this, "screen")
|
||||
{ }
|
||||
|
||||
@ -123,12 +110,12 @@ public:
|
||||
DECLARE_DRIVER_INIT(mbeeic);
|
||||
DECLARE_DRIVER_INIT(mbee128);
|
||||
DECLARE_MACHINE_RESET(mbee);
|
||||
DECLARE_VIDEO_START(mbee);
|
||||
DECLARE_VIDEO_START(mbeeic);
|
||||
DECLARE_PALETTE_INIT(mbeeic);
|
||||
DECLARE_VIDEO_START(mono);
|
||||
DECLARE_VIDEO_START(standard);
|
||||
DECLARE_VIDEO_START(premium);
|
||||
DECLARE_PALETTE_INIT(standard);
|
||||
DECLARE_PALETTE_INIT(mbeepc85b);
|
||||
DECLARE_VIDEO_START(mbeeppc);
|
||||
DECLARE_PALETTE_INIT(mbeeppc);
|
||||
DECLARE_PALETTE_INIT(premium);
|
||||
DECLARE_MACHINE_RESET(mbee56);
|
||||
DECLARE_MACHINE_RESET(mbee128);
|
||||
DECLARE_MACHINE_RESET(mbee256);
|
||||
@ -152,19 +139,18 @@ public:
|
||||
void mbee_video_kbd_scan(int param);
|
||||
UINT8 m_sy6545_cursor[16];
|
||||
|
||||
MC6845_UPDATE_ROW(mbee_update_row);
|
||||
MC6845_UPDATE_ROW(mbeeic_update_row);
|
||||
MC6845_UPDATE_ROW(mbeeppc_update_row);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(mbee_update_addr);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(mbee256_update_addr);
|
||||
MC6845_UPDATE_ROW(mono_update_row);
|
||||
MC6845_UPDATE_ROW(colour_update_row);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(crtc_update_addr);
|
||||
|
||||
required_device<palette_device> m_palette;
|
||||
private:
|
||||
bool m_is_premium;
|
||||
bool m_has_oldkb;
|
||||
size_t m_size;
|
||||
bool m_b7_rtc;
|
||||
bool m_b7_vs;
|
||||
UINT8 m_mbee256_key_available;
|
||||
bool m_b2;
|
||||
UINT8 m_mbee256_was_pressed[15];
|
||||
UINT8 m_mbee256_q[20];
|
||||
UINT8 m_mbee256_q_pos;
|
||||
@ -196,23 +182,10 @@ private:
|
||||
optional_memory_bank m_pak;
|
||||
optional_memory_bank m_telcom;
|
||||
optional_memory_bank m_basic;
|
||||
required_ioport m_io_x0;
|
||||
required_ioport m_io_x1;
|
||||
required_ioport m_io_x2;
|
||||
required_ioport m_io_x3;
|
||||
required_ioport m_io_x4;
|
||||
required_ioport m_io_x5;
|
||||
required_ioport m_io_x6;
|
||||
required_ioport m_io_x7;
|
||||
optional_ioport m_io_extra;
|
||||
optional_ioport m_io_config;
|
||||
optional_ioport m_io_x8;
|
||||
optional_ioport m_io_x9;
|
||||
optional_ioport m_io_x10;
|
||||
optional_ioport m_io_x11;
|
||||
optional_ioport m_io_x12;
|
||||
optional_ioport m_io_x13;
|
||||
optional_ioport m_io_x14;
|
||||
required_ioport m_io_config;
|
||||
optional_ioport_array<8> m_io_oldkb;
|
||||
optional_ioport_array<15> m_io_newkb;
|
||||
required_device<screen_device> m_screen;
|
||||
};
|
||||
|
||||
|
@ -5,27 +5,183 @@
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
|
||||
<element name="green" defstate="0">
|
||||
<disk state="0"><color red="0.0" green="0.1" blue="0.0" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.2" /></disk>
|
||||
</element>
|
||||
<element name="red" defstate="0">
|
||||
<disk state="0"><color red="0.1" green="0.0" blue="0.0" /></disk>
|
||||
<disk state="1"><color red="1.0" green="0.2" blue="0.2" /></disk>
|
||||
<element name="led" defstate="0">
|
||||
<disk state="0"><color red="0.1" green="0.2" blue="0.12" /></disk>
|
||||
<disk state="1"><color red="0.5" green="1.0" blue="0.6" /></disk>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Test Layout">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
<bezel element="static_black">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
</bezel>
|
||||
|
||||
<!-- matrix -->
|
||||
<!-- 17*9 matrix -->
|
||||
|
||||
<bezel name="lamp0" element="green"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp800" element="led"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp801" element="led"><bounds x="2" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp802" element="led"><bounds x="4" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp803" element="led"><bounds x="6" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp804" element="led"><bounds x="8" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp805" element="led"><bounds x="10" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp806" element="led"><bounds x="12" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp807" element="led"><bounds x="14" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp808" element="led"><bounds x="16" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp809" element="led"><bounds x="18" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp810" element="led"><bounds x="20" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp811" element="led"><bounds x="22" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp812" element="led"><bounds x="24" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp813" element="led"><bounds x="26" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp814" element="led"><bounds x="28" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp815" element="led"><bounds x="30" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp816" element="led"><bounds x="32" y="0" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp700" element="led"><bounds x="0" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp701" element="led"><bounds x="2" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp702" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp703" element="led"><bounds x="6" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp704" element="led"><bounds x="8" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp705" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp706" element="led"><bounds x="12" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp707" element="led"><bounds x="14" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp708" element="led"><bounds x="16" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp709" element="led"><bounds x="18" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp710" element="led"><bounds x="20" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp711" element="led"><bounds x="22" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp712" element="led"><bounds x="24" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp713" element="led"><bounds x="26" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp714" element="led"><bounds x="28" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp715" element="led"><bounds x="30" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp716" element="led"><bounds x="32" y="2" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp600" element="led"><bounds x="0" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp601" element="led"><bounds x="2" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp602" element="led"><bounds x="4" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp603" element="led"><bounds x="6" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp604" element="led"><bounds x="8" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp605" element="led"><bounds x="10" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp606" element="led"><bounds x="12" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp607" element="led"><bounds x="14" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp608" element="led"><bounds x="16" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp609" element="led"><bounds x="18" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp610" element="led"><bounds x="20" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp611" element="led"><bounds x="22" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp612" element="led"><bounds x="24" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp613" element="led"><bounds x="26" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp614" element="led"><bounds x="28" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp615" element="led"><bounds x="30" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp616" element="led"><bounds x="32" y="4" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp500" element="led"><bounds x="0" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp501" element="led"><bounds x="2" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp502" element="led"><bounds x="4" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp503" element="led"><bounds x="6" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp504" element="led"><bounds x="8" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp505" element="led"><bounds x="10" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp506" element="led"><bounds x="12" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp507" element="led"><bounds x="14" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp508" element="led"><bounds x="16" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp509" element="led"><bounds x="18" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp510" element="led"><bounds x="20" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp511" element="led"><bounds x="22" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp512" element="led"><bounds x="24" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp513" element="led"><bounds x="26" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp514" element="led"><bounds x="28" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp515" element="led"><bounds x="30" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp516" element="led"><bounds x="32" y="6" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp400" element="led"><bounds x="0" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp401" element="led"><bounds x="2" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp402" element="led"><bounds x="4" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp403" element="led"><bounds x="6" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp404" element="led"><bounds x="8" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp405" element="led"><bounds x="10" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp406" element="led"><bounds x="12" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp407" element="led"><bounds x="14" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp408" element="led"><bounds x="16" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp409" element="led"><bounds x="18" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp410" element="led"><bounds x="20" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp411" element="led"><bounds x="22" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp412" element="led"><bounds x="24" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp413" element="led"><bounds x="26" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp414" element="led"><bounds x="28" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp415" element="led"><bounds x="30" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp416" element="led"><bounds x="32" y="8" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp300" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp301" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp302" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp303" element="led"><bounds x="6" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp304" element="led"><bounds x="8" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp305" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp306" element="led"><bounds x="12" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp307" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp308" element="led"><bounds x="16" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp309" element="led"><bounds x="18" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp310" element="led"><bounds x="20" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp311" element="led"><bounds x="22" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp312" element="led"><bounds x="24" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp313" element="led"><bounds x="26" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp314" element="led"><bounds x="28" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp315" element="led"><bounds x="30" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp316" element="led"><bounds x="32" y="10" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp200" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp201" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp202" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp203" element="led"><bounds x="6" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp204" element="led"><bounds x="8" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp205" element="led"><bounds x="10" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp206" element="led"><bounds x="12" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp207" element="led"><bounds x="14" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp208" element="led"><bounds x="16" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp209" element="led"><bounds x="18" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp210" element="led"><bounds x="20" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp211" element="led"><bounds x="22" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp212" element="led"><bounds x="24" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp213" element="led"><bounds x="26" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp214" element="led"><bounds x="28" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp215" element="led"><bounds x="30" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp216" element="led"><bounds x="32" y="12" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp100" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp101" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp102" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp103" element="led"><bounds x="6" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp104" element="led"><bounds x="8" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp105" element="led"><bounds x="10" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp106" element="led"><bounds x="12" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp107" element="led"><bounds x="14" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp108" element="led"><bounds x="16" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp109" element="led"><bounds x="18" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp110" element="led"><bounds x="20" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp111" element="led"><bounds x="22" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp112" element="led"><bounds x="24" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp113" element="led"><bounds x="26" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp114" element="led"><bounds x="28" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp115" element="led"><bounds x="30" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp116" element="led"><bounds x="32" y="14" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp0" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp2" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp3" element="led"><bounds x="6" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp4" element="led"><bounds x="8" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp5" element="led"><bounds x="10" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp6" element="led"><bounds x="12" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp7" element="led"><bounds x="14" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp8" element="led"><bounds x="16" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp9" element="led"><bounds x="18" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp10" element="led"><bounds x="20" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp11" element="led"><bounds x="22" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp12" element="led"><bounds x="24" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp13" element="led"><bounds x="26" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp14" element="led"><bounds x="28" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp15" element="led"><bounds x="30" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp16" element="led"><bounds x="32" y="16" width="1" height="1" /></bezel>
|
||||
|
||||
|
||||
</view>
|
||||
|
@ -5,31 +5,173 @@
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
|
||||
<element name="cyan" defstate="0">
|
||||
<disk state="0"><color red="0.0" green="0.1" blue="0.1" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="1.0" /></disk>
|
||||
</element>
|
||||
<element name="green" defstate="0">
|
||||
<disk state="0"><color red="0.0" green="0.1" blue="0.0" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.2" /></disk>
|
||||
</element>
|
||||
<element name="red" defstate="0">
|
||||
<disk state="0"><color red="0.1" green="0.0" blue="0.0" /></disk>
|
||||
<disk state="1"><color red="1.0" green="0.2" blue="0.2" /></disk>
|
||||
<element name="led" defstate="0">
|
||||
<disk state="0"><color red="0.1" green="0.2" blue="0.2" /></disk>
|
||||
<disk state="1"><color red="0.5" green="1.0" blue="1.0" /></disk>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Test Layout">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
<bezel element="static_black">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
</bezel>
|
||||
|
||||
<!-- matrix -->
|
||||
<!-- 8*18 matrix -->
|
||||
|
||||
<bezel name="lamp0" element="green"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp700" element="led"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp701" element="led"><bounds x="0" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp702" element="led"><bounds x="0" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp703" element="led"><bounds x="0" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp704" element="led"><bounds x="0" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp705" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp706" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp707" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp708" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp709" element="led"><bounds x="0" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp710" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp711" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp712" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp713" element="led"><bounds x="0" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp714" element="led"><bounds x="0" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp715" element="led"><bounds x="0" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp716" element="led"><bounds x="0" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp717" element="led"><bounds x="0" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp600" element="led"><bounds x="2" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp601" element="led"><bounds x="2" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp602" element="led"><bounds x="2" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp603" element="led"><bounds x="2" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp604" element="led"><bounds x="2" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp605" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp606" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp607" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp608" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp609" element="led"><bounds x="2" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp610" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp611" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp612" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp613" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp614" element="led"><bounds x="2" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp615" element="led"><bounds x="2" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp616" element="led"><bounds x="2" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp617" element="led"><bounds x="2" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp500" element="led"><bounds x="4" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp501" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp502" element="led"><bounds x="4" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp503" element="led"><bounds x="4" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp504" element="led"><bounds x="4" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp505" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp506" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp507" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp508" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp509" element="led"><bounds x="4" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp510" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp511" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp512" element="led"><bounds x="4" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp513" element="led"><bounds x="4" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp514" element="led"><bounds x="4" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp515" element="led"><bounds x="4" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp516" element="led"><bounds x="4" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp517" element="led"><bounds x="4" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp400" element="led"><bounds x="6" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp401" element="led"><bounds x="6" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp402" element="led"><bounds x="6" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp403" element="led"><bounds x="6" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp404" element="led"><bounds x="6" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp405" element="led"><bounds x="6" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp406" element="led"><bounds x="6" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp407" element="led"><bounds x="6" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp408" element="led"><bounds x="6" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp409" element="led"><bounds x="6" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp410" element="led"><bounds x="6" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp411" element="led"><bounds x="6" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp412" element="led"><bounds x="6" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp413" element="led"><bounds x="6" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp414" element="led"><bounds x="6" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp415" element="led"><bounds x="6" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp416" element="led"><bounds x="6" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp417" element="led"><bounds x="6" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp300" element="led"><bounds x="8" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp301" element="led"><bounds x="8" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp302" element="led"><bounds x="8" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp303" element="led"><bounds x="8" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp304" element="led"><bounds x="8" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp305" element="led"><bounds x="8" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp306" element="led"><bounds x="8" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp307" element="led"><bounds x="8" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp308" element="led"><bounds x="8" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp309" element="led"><bounds x="8" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp310" element="led"><bounds x="8" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp311" element="led"><bounds x="8" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp312" element="led"><bounds x="8" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp313" element="led"><bounds x="8" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp314" element="led"><bounds x="8" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp315" element="led"><bounds x="8" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp316" element="led"><bounds x="8" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp317" element="led"><bounds x="8" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp200" element="led"><bounds x="10" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp201" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp202" element="led"><bounds x="10" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp203" element="led"><bounds x="10" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp204" element="led"><bounds x="10" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp205" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp206" element="led"><bounds x="10" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp207" element="led"><bounds x="10" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp208" element="led"><bounds x="10" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp209" element="led"><bounds x="10" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp210" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp211" element="led"><bounds x="10" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp212" element="led"><bounds x="10" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp213" element="led"><bounds x="10" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp214" element="led"><bounds x="10" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp215" element="led"><bounds x="10" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp216" element="led"><bounds x="10" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp217" element="led"><bounds x="10" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp100" element="led"><bounds x="12" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp101" element="led"><bounds x="12" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp102" element="led"><bounds x="12" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp103" element="led"><bounds x="12" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp104" element="led"><bounds x="12" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp105" element="led"><bounds x="12" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp106" element="led"><bounds x="12" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp107" element="led"><bounds x="12" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp108" element="led"><bounds x="12" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp109" element="led"><bounds x="12" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp110" element="led"><bounds x="12" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp111" element="led"><bounds x="12" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp112" element="led"><bounds x="12" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp113" element="led"><bounds x="12" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp114" element="led"><bounds x="12" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp115" element="led"><bounds x="12" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp116" element="led"><bounds x="12" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp117" element="led"><bounds x="12" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp0" element="led"><bounds x="14" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1" element="led"><bounds x="14" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp2" element="led"><bounds x="14" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp3" element="led"><bounds x="14" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp4" element="led"><bounds x="14" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp5" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp6" element="led"><bounds x="14" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp7" element="led"><bounds x="14" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp8" element="led"><bounds x="14" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp9" element="led"><bounds x="14" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp10" element="led"><bounds x="14" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp11" element="led"><bounds x="14" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp12" element="led"><bounds x="14" y="24" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp13" element="led"><bounds x="14" y="26" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp14" element="led"><bounds x="14" y="28" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp15" element="led"><bounds x="14" y="30" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp16" element="led"><bounds x="14" y="32" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp17" element="led"><bounds x="14" y="34" width="1" height="1" /></bezel>
|
||||
|
||||
|
||||
</view>
|
||||
|
@ -5,177 +5,177 @@
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
|
||||
<element name="green" defstate="0">
|
||||
<disk state="0"><color red="0.0" green="0.1" blue="0.0" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.2" /></disk>
|
||||
<element name="led" defstate="0">
|
||||
<disk state="0"><color red="0.05" green="0.15" blue="0.05" /></disk>
|
||||
<disk state="1"><color red="0.3" green="1.0" blue="0.3" /></disk>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Test Layout">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
<bezel element="static_black">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
</bezel>
|
||||
|
||||
<!-- matrix -->
|
||||
<!-- 12*12 matrix -->
|
||||
|
||||
<bezel name="lamp0" element="green"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1" element="green"><bounds x="0" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp2" element="green"><bounds x="0" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp3" element="green"><bounds x="0" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp4" element="green"><bounds x="0" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp5" element="green"><bounds x="0" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp6" element="green"><bounds x="0" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp7" element="green"><bounds x="0" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp8" element="green"><bounds x="0" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp9" element="green"><bounds x="0" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp10" element="green"><bounds x="0" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp11" element="green"><bounds x="0" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp0" element="led"><bounds x="0" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1" element="led"><bounds x="0" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp2" element="led"><bounds x="0" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp3" element="led"><bounds x="0" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp4" element="led"><bounds x="0" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp5" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp6" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp7" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp8" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp9" element="led"><bounds x="0" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp10" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp11" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp100" element="green"><bounds x="2" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp101" element="green"><bounds x="2" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp102" element="green"><bounds x="2" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp103" element="green"><bounds x="2" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp104" element="green"><bounds x="2" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp105" element="green"><bounds x="2" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp106" element="green"><bounds x="2" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp107" element="green"><bounds x="2" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp108" element="green"><bounds x="2" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp109" element="green"><bounds x="2" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp110" element="green"><bounds x="2" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp111" element="green"><bounds x="2" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp100" element="led"><bounds x="2" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp101" element="led"><bounds x="2" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp102" element="led"><bounds x="2" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp103" element="led"><bounds x="2" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp104" element="led"><bounds x="2" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp105" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp106" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp107" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp108" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp109" element="led"><bounds x="2" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp110" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp111" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp200" element="green"><bounds x="4" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp201" element="green"><bounds x="4" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp202" element="green"><bounds x="4" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp203" element="green"><bounds x="4" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp204" element="green"><bounds x="4" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp205" element="green"><bounds x="4" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp206" element="green"><bounds x="4" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp207" element="green"><bounds x="4" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp208" element="green"><bounds x="4" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp209" element="green"><bounds x="4" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp210" element="green"><bounds x="4" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp211" element="green"><bounds x="4" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp200" element="led"><bounds x="4" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp201" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp202" element="led"><bounds x="4" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp203" element="led"><bounds x="4" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp204" element="led"><bounds x="4" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp205" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp206" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp207" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp208" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp209" element="led"><bounds x="4" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp210" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp211" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp300" element="green"><bounds x="6" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp301" element="green"><bounds x="6" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp302" element="green"><bounds x="6" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp303" element="green"><bounds x="6" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp304" element="green"><bounds x="6" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp305" element="green"><bounds x="6" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp306" element="green"><bounds x="6" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp307" element="green"><bounds x="6" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp308" element="green"><bounds x="6" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp309" element="green"><bounds x="6" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp310" element="green"><bounds x="6" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp311" element="green"><bounds x="6" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp300" element="led"><bounds x="6" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp301" element="led"><bounds x="6" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp302" element="led"><bounds x="6" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp303" element="led"><bounds x="6" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp304" element="led"><bounds x="6" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp305" element="led"><bounds x="6" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp306" element="led"><bounds x="6" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp307" element="led"><bounds x="6" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp308" element="led"><bounds x="6" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp309" element="led"><bounds x="6" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp310" element="led"><bounds x="6" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp311" element="led"><bounds x="6" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp400" element="green"><bounds x="8" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp401" element="green"><bounds x="8" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp402" element="green"><bounds x="8" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp403" element="green"><bounds x="8" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp404" element="green"><bounds x="8" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp405" element="green"><bounds x="8" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp406" element="green"><bounds x="8" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp407" element="green"><bounds x="8" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp408" element="green"><bounds x="8" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp409" element="green"><bounds x="8" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp410" element="green"><bounds x="8" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp411" element="green"><bounds x="8" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp400" element="led"><bounds x="8" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp401" element="led"><bounds x="8" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp402" element="led"><bounds x="8" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp403" element="led"><bounds x="8" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp404" element="led"><bounds x="8" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp405" element="led"><bounds x="8" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp406" element="led"><bounds x="8" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp407" element="led"><bounds x="8" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp408" element="led"><bounds x="8" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp409" element="led"><bounds x="8" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp410" element="led"><bounds x="8" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp411" element="led"><bounds x="8" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp500" element="green"><bounds x="10" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp501" element="green"><bounds x="10" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp502" element="green"><bounds x="10" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp503" element="green"><bounds x="10" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp504" element="green"><bounds x="10" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp505" element="green"><bounds x="10" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp506" element="green"><bounds x="10" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp507" element="green"><bounds x="10" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp508" element="green"><bounds x="10" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp509" element="green"><bounds x="10" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp510" element="green"><bounds x="10" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp511" element="green"><bounds x="10" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp500" element="led"><bounds x="10" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp501" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp502" element="led"><bounds x="10" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp503" element="led"><bounds x="10" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp504" element="led"><bounds x="10" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp505" element="led"><bounds x="10" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp506" element="led"><bounds x="10" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp507" element="led"><bounds x="10" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp508" element="led"><bounds x="10" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp509" element="led"><bounds x="10" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp510" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp511" element="led"><bounds x="10" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp600" element="green"><bounds x="12" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp601" element="green"><bounds x="12" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp602" element="green"><bounds x="12" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp603" element="green"><bounds x="12" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp604" element="green"><bounds x="12" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp605" element="green"><bounds x="12" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp606" element="green"><bounds x="12" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp607" element="green"><bounds x="12" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp608" element="green"><bounds x="12" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp609" element="green"><bounds x="12" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp610" element="green"><bounds x="12" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp611" element="green"><bounds x="12" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp600" element="led"><bounds x="12" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp601" element="led"><bounds x="12" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp602" element="led"><bounds x="12" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp603" element="led"><bounds x="12" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp604" element="led"><bounds x="12" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp605" element="led"><bounds x="12" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp606" element="led"><bounds x="12" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp607" element="led"><bounds x="12" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp608" element="led"><bounds x="12" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp609" element="led"><bounds x="12" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp610" element="led"><bounds x="12" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp611" element="led"><bounds x="12" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp700" element="green"><bounds x="14" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp701" element="green"><bounds x="14" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp702" element="green"><bounds x="14" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp703" element="green"><bounds x="14" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp704" element="green"><bounds x="14" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp705" element="green"><bounds x="14" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp706" element="green"><bounds x="14" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp707" element="green"><bounds x="14" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp708" element="green"><bounds x="14" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp709" element="green"><bounds x="14" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp710" element="green"><bounds x="14" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp711" element="green"><bounds x="14" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp700" element="led"><bounds x="14" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp701" element="led"><bounds x="14" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp702" element="led"><bounds x="14" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp703" element="led"><bounds x="14" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp704" element="led"><bounds x="14" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp705" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp706" element="led"><bounds x="14" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp707" element="led"><bounds x="14" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp708" element="led"><bounds x="14" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp709" element="led"><bounds x="14" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp710" element="led"><bounds x="14" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp711" element="led"><bounds x="14" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp800" element="green"><bounds x="16" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp801" element="green"><bounds x="16" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp802" element="green"><bounds x="16" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp803" element="green"><bounds x="16" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp804" element="green"><bounds x="16" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp805" element="green"><bounds x="16" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp806" element="green"><bounds x="16" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp807" element="green"><bounds x="16" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp808" element="green"><bounds x="16" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp809" element="green"><bounds x="16" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp810" element="green"><bounds x="16" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp811" element="green"><bounds x="16" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp800" element="led"><bounds x="16" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp801" element="led"><bounds x="16" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp802" element="led"><bounds x="16" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp803" element="led"><bounds x="16" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp804" element="led"><bounds x="16" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp805" element="led"><bounds x="16" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp806" element="led"><bounds x="16" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp807" element="led"><bounds x="16" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp808" element="led"><bounds x="16" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp809" element="led"><bounds x="16" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp810" element="led"><bounds x="16" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp811" element="led"><bounds x="16" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp900" element="green"><bounds x="18" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp901" element="green"><bounds x="18" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp902" element="green"><bounds x="18" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp903" element="green"><bounds x="18" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp904" element="green"><bounds x="18" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp905" element="green"><bounds x="18" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp906" element="green"><bounds x="18" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp907" element="green"><bounds x="18" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp908" element="green"><bounds x="18" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp909" element="green"><bounds x="18" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp910" element="green"><bounds x="18" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp911" element="green"><bounds x="18" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp900" element="led"><bounds x="18" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp901" element="led"><bounds x="18" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp902" element="led"><bounds x="18" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp903" element="led"><bounds x="18" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp904" element="led"><bounds x="18" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp905" element="led"><bounds x="18" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp906" element="led"><bounds x="18" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp907" element="led"><bounds x="18" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp908" element="led"><bounds x="18" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp909" element="led"><bounds x="18" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp910" element="led"><bounds x="18" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp911" element="led"><bounds x="18" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp1000" element="green"><bounds x="20" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1001" element="green"><bounds x="20" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1002" element="green"><bounds x="20" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1003" element="green"><bounds x="20" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1004" element="green"><bounds x="20" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1005" element="green"><bounds x="20" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1006" element="green"><bounds x="20" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1007" element="green"><bounds x="20" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1008" element="green"><bounds x="20" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1009" element="green"><bounds x="20" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1010" element="green"><bounds x="20" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1011" element="green"><bounds x="20" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1000" element="led"><bounds x="20" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1001" element="led"><bounds x="20" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1002" element="led"><bounds x="20" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1003" element="led"><bounds x="20" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1004" element="led"><bounds x="20" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1005" element="led"><bounds x="20" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1006" element="led"><bounds x="20" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1007" element="led"><bounds x="20" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1008" element="led"><bounds x="20" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1009" element="led"><bounds x="20" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1010" element="led"><bounds x="20" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1011" element="led"><bounds x="20" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel name="lamp1100" element="green"><bounds x="22" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1101" element="green"><bounds x="22" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1102" element="green"><bounds x="22" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1103" element="green"><bounds x="22" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1104" element="green"><bounds x="22" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1105" element="green"><bounds x="22" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1106" element="green"><bounds x="22" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1107" element="green"><bounds x="22" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1108" element="green"><bounds x="22" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1109" element="green"><bounds x="22" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1110" element="green"><bounds x="22" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1111" element="green"><bounds x="22" y="22" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1100" element="led"><bounds x="22" y="0" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1101" element="led"><bounds x="22" y="2" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1102" element="led"><bounds x="22" y="4" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1103" element="led"><bounds x="22" y="6" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1104" element="led"><bounds x="22" y="8" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1105" element="led"><bounds x="22" y="10" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1106" element="led"><bounds x="22" y="12" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1107" element="led"><bounds x="22" y="14" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1108" element="led"><bounds x="22" y="16" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1109" element="led"><bounds x="22" y="18" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1110" element="led"><bounds x="22" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1111" element="led"><bounds x="22" y="22" width="1" height="1" /></bezel>
|
||||
|
||||
|
||||
</view>
|
||||
|
@ -17,15 +17,17 @@
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Test Layout">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
<bezel element="static_black">
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
<bounds left="0" right="64" top="0" bottom="64" />
|
||||
</bezel>
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
|
||||
|
||||
<!-- 8*13 matrix (first 3 are the 7segs) -->
|
||||
|
||||
<bezel name="lamp0" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp1" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp2" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
|
||||
@ -143,5 +145,6 @@
|
||||
<bezel name="lamp126" element="led"><bounds x="12" y="44" width="1" height="1" /></bezel>
|
||||
<bezel name="lamp127" element="led"><bounds x="14" y="44" width="1" height="1" /></bezel>
|
||||
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
@ -88,7 +88,8 @@ READ8_MEMBER( mbee_state::pio_port_b_r )
|
||||
break;
|
||||
}
|
||||
|
||||
data |= m_mbee256_key_available;
|
||||
data |= (UINT8)m_b2 << 1; // key pressed on new keyboard
|
||||
data |= 8; // CTS held high via resistor. If low, the disk-based models think a mouse is plugged in.
|
||||
|
||||
return data;
|
||||
};
|
||||
@ -114,7 +115,7 @@ WRITE_LINE_MEMBER( mbee_state::fdc_drq_w )
|
||||
|
||||
READ8_MEMBER( mbee_state::mbee_fdc_status_r )
|
||||
{
|
||||
/* d7 indicate if IRQ or DRQ is occuring (1=happening)
|
||||
/* d7 indicate if IRQ or DRQ is occurring (1=happening)
|
||||
d6..d0 not used */
|
||||
|
||||
return m_fdc_rq ? 0xff : 0x7f;
|
||||
@ -164,49 +165,34 @@ TIMER_CALLBACK_MEMBER(mbee_state::mbee256_kbd)
|
||||
It includes up to 4 KB of mask-programmable ROM, 64 bytes of scratchpad RAM and up to 64 bytes
|
||||
of executable RAM. The MCU also integrates 32-bit I/O and a programmable timer. */
|
||||
|
||||
UINT8 i, j;
|
||||
UINT8 pressed[15];
|
||||
UINT8 i, j, pressed;
|
||||
|
||||
|
||||
/* see what is pressed */
|
||||
pressed[0] = m_io_x0->read();
|
||||
pressed[1] = m_io_x1->read();
|
||||
pressed[2] = m_io_x2->read();
|
||||
pressed[3] = m_io_x3->read();
|
||||
pressed[4] = m_io_x4->read();
|
||||
pressed[5] = m_io_x5->read();
|
||||
pressed[6] = m_io_x6->read();
|
||||
pressed[7] = m_io_x7->read();
|
||||
pressed[8] = m_io_x8->read();
|
||||
pressed[9] = m_io_x9->read();
|
||||
pressed[10] = m_io_x10->read();
|
||||
pressed[11] = m_io_x11->read();
|
||||
pressed[12] = m_io_x12->read();
|
||||
pressed[13] = m_io_x13->read();
|
||||
pressed[14] = m_io_x14->read();
|
||||
|
||||
/* find what has changed */
|
||||
// find what has changed
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
if (pressed[i] != m_mbee256_was_pressed[i])
|
||||
pressed = m_io_newkb[i]->read();
|
||||
if (pressed != m_mbee256_was_pressed[i])
|
||||
{
|
||||
/* get scankey value */
|
||||
// get scankey value
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
if (BIT(pressed[i]^m_mbee256_was_pressed[i], j))
|
||||
if (BIT(pressed^m_mbee256_was_pressed[i], j))
|
||||
{
|
||||
/* put it in the queue */
|
||||
m_mbee256_q[m_mbee256_q_pos] = (i << 3) | j | (BIT(pressed[i], j) ? 0x80 : 0);
|
||||
// put it in the queue
|
||||
m_mbee256_q[m_mbee256_q_pos] = (i << 3) | j | (BIT(pressed, j) ? 0x80 : 0);
|
||||
if (m_mbee256_q_pos < 19) m_mbee256_q_pos++;
|
||||
}
|
||||
}
|
||||
m_mbee256_was_pressed[i] = pressed[i];
|
||||
m_mbee256_was_pressed[i] = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
/* if anything queued, cause an interrupt */
|
||||
// if anything queued, cause an interrupt
|
||||
if (m_mbee256_q_pos)
|
||||
m_mbee256_key_available = 2; // set irq
|
||||
{
|
||||
m_b2 = 1; // set irq
|
||||
//breaks keyboard m_pio->port_b_write(pio_port_b_r(generic_space(),0,0xff));
|
||||
}
|
||||
|
||||
timer_set(attotime::from_hz(25), TIMER_MBEE256_KBD);
|
||||
}
|
||||
@ -221,7 +207,7 @@ READ8_MEMBER( mbee_state::mbee256_18_r )
|
||||
for (i = 0; i < m_mbee256_q_pos; i++) m_mbee256_q[i] = m_mbee256_q[i+1]; // ripple queue
|
||||
}
|
||||
|
||||
m_mbee256_key_available = 0; // clear irq
|
||||
m_b2 = 0; // clear irq
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -270,6 +256,9 @@ READ8_MEMBER( mbee_state::mbee_07_r ) // read
|
||||
// This doesn't seem to do anything; the time works without it.
|
||||
TIMER_CALLBACK_MEMBER( mbee_state::mbee_rtc_irq )
|
||||
{
|
||||
if (!m_rtc)
|
||||
return;
|
||||
|
||||
UINT8 data = m_rtc->read(m_maincpu->space(AS_IO), 12);
|
||||
m_b7_rtc = (data) ? 1 : 0;
|
||||
|
||||
@ -292,6 +281,10 @@ TIMER_CALLBACK_MEMBER( mbee_state::mbee_rtc_irq )
|
||||
|
||||
b_mask = total dynamic ram (1=64k; 3=128k; 7=256k)
|
||||
|
||||
Certain software (such as the PJB system) constantly switch banks around,
|
||||
causing slowness. Therefore this function only changes the banks that need
|
||||
changing, leaving the others as is.
|
||||
|
||||
************************************************************/
|
||||
|
||||
void mbee_state::setup_banks(UINT8 data, bool first_time, UINT8 b_mask)
|
||||
@ -304,7 +297,7 @@ void mbee_state::setup_banks(UINT8 data, bool first_time, UINT8 b_mask)
|
||||
UINT16 b_vid;
|
||||
char banktag[10];
|
||||
|
||||
if (first_time || (b_data != m_bank_array[0]))
|
||||
if (first_time || (b_data != m_bank_array[0])) // if same data as last time, leave now
|
||||
{
|
||||
m_bank_array[0] = b_data;
|
||||
|
||||
@ -551,6 +544,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee )
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
m_boot->configure_entries(0, 2, &RAM[0x0000], 0x8000);
|
||||
m_size = 0x4000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeeic )
|
||||
@ -563,6 +557,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeeic )
|
||||
|
||||
m_pak->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeepc )
|
||||
@ -579,6 +574,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeepc )
|
||||
m_pak->set_entry(0);
|
||||
m_telcom->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeepc85 )
|
||||
@ -595,6 +591,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeepc85 )
|
||||
m_pak->set_entry(5);
|
||||
m_telcom->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
@ -616,6 +613,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
m_telcom->set_entry(0);
|
||||
m_basic->set_entry(0);
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee56 )
|
||||
@ -623,6 +621,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee56 )
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
m_boot->configure_entries(0, 2, &RAM[0x0000], 0xe000);
|
||||
m_size = 0xe000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee128 )
|
||||
@ -641,7 +640,11 @@ DRIVER_INIT_MEMBER( mbee_state, mbee128 )
|
||||
membank(banktag)->configure_entries(0, 32, &RAM[0x0000], 0x1000); // RAM banks
|
||||
membank(banktag)->configure_entries(64, 1, &ROM[0x4000], 0x1000); // dummy rom
|
||||
}
|
||||
|
||||
timer_set(attotime::from_hz(1), TIMER_MBEE_RTC_IRQ); /* timer for rtc */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbee256 )
|
||||
@ -665,6 +668,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbee256 )
|
||||
timer_set(attotime::from_hz(50), TIMER_MBEE256_KBD); /* timer for kbd */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 0;
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( mbee_state, mbeett )
|
||||
@ -685,6 +689,7 @@ DRIVER_INIT_MEMBER( mbee_state, mbeett )
|
||||
timer_set(attotime::from_hz(25), TIMER_MBEE256_KBD); /* timer for kbd */
|
||||
|
||||
m_size = 0x8000;
|
||||
m_has_oldkb = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -36,6 +36,6 @@ $(MESS_WINOBJ)/%.res: $(MESS_WINSRC)/%.rc
|
||||
|
||||
$(RESFILE): $(MESS_WINSRC)/mess.rc $(MESS_WINOBJ)/messvers.rc
|
||||
|
||||
$(MESS_WINOBJ)/messvers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(MESS_WINOBJ)/messvers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b mess $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b mess $(SRC)/version.c > $@
|
@ -4,24 +4,7 @@
|
||||
video hardware
|
||||
Juergen Buchmueller <pullmoll@t-online.de>, Dec 1999
|
||||
|
||||
Tests of keyboard. Start mbeeic.
|
||||
|
||||
1. Load ASTEROIDS PLUS, stay in attract mode, hold down spacebar,
|
||||
it should only fire bullets. If it sometimes starts turning,
|
||||
thrusting or using the shield, then there is a problem.
|
||||
|
||||
2. Load SCAVENGER and make sure it doesn't go to the next level
|
||||
until you find the Exit.
|
||||
|
||||
3. At the Basic prompt, type in EDASM press enter. At the memory size
|
||||
prompt press enter. Now, make sure the keyboard works properly.
|
||||
|
||||
|
||||
|
||||
TODO:
|
||||
|
||||
1. mbeeppc keyboard response is quite slow. You need to hold each
|
||||
key until it responds. It works much better if you overclock the cpu.
|
||||
Rewritten by Robbbert
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -214,65 +197,36 @@ WRITE8_MEMBER ( mbee_state::mbeeppc_high_w )
|
||||
************************************************************/
|
||||
|
||||
|
||||
/* The direction keys are used by the pc85 menu. Do not know what uses the "insert" key. */
|
||||
void mbee_state::keyboard_matrix_r(int offs)
|
||||
{
|
||||
UINT8 port = (offs >> 7) & 7;
|
||||
UINT8 bit = (offs >> 4) & 7;
|
||||
UINT8 data = 0;
|
||||
UINT8 data = m_io_oldkb[port]->read();
|
||||
bool keydown = ( data >> bit ) & 1;
|
||||
|
||||
switch ( port )
|
||||
{
|
||||
case 0: data = m_io_x0->read(); break;
|
||||
case 1: data = m_io_x1->read(); break;
|
||||
case 2: data = m_io_x2->read(); break;
|
||||
case 3: data = m_io_x3->read(); break;
|
||||
case 4: data = m_io_x4->read(); break;
|
||||
case 5: data = m_io_x5->read(); break;
|
||||
case 6: data = m_io_x6->read(); break;
|
||||
case 7: data = m_io_x7->read(); break;
|
||||
}
|
||||
data = ( data >> bit ) & 1;
|
||||
|
||||
if ((data | m_is_premium) == 0)
|
||||
// This adds premium-style cursor keys to the old keyboard
|
||||
// They are used by the pc85 & ppc menu, and the 128k shell.
|
||||
if (!keydown)
|
||||
{
|
||||
UINT8 extra = m_io_extra->read();
|
||||
|
||||
if( extra & 0x01 ) /* extra: cursor up */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 0 && bit == 5 ) data = 1; /* E */
|
||||
}
|
||||
if (extra && port == 7 && bit == 1) keydown = 1; /* Control */
|
||||
|
||||
if (BIT(extra, 0) && ( port == 0 && bit == 5 )) keydown = 1; // cursor up = ^E
|
||||
else
|
||||
if( extra & 0x02 ) /* extra: cursor down */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 3 && bit == 0 ) data = 1; /* X */
|
||||
}
|
||||
if (BIT(extra, 1) && ( port == 3 && bit == 0 )) keydown = 1; // cursor down = ^X
|
||||
else
|
||||
if( extra & 0x04 ) /* extra: cursor left */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 2 && bit == 3 ) data = 1; /* S */
|
||||
}
|
||||
if (BIT(extra, 2) && ( port == 2 && bit == 3 )) keydown = 1; // cursor left = ^S
|
||||
else
|
||||
if( extra & 0x08 ) /* extra: cursor right */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 0 && bit == 4 ) data = 1; /* D */
|
||||
}
|
||||
if (BIT(extra, 3) && ( port == 0 && bit == 4 )) keydown = 1; // cursor right = ^D
|
||||
#if 0
|
||||
// this key doesn't appear on any keyboard afaik
|
||||
// this key doesn't appear on any keyboard afaik. It is a Wordbee function.
|
||||
else
|
||||
if( extra & 0x10 ) /* extra: insert */
|
||||
{
|
||||
if( port == 7 && bit == 1 ) data = 1; /* Control */
|
||||
if( port == 2 && bit == 6 ) data = 1; /* V */
|
||||
}
|
||||
if (BIT(extra, 4) && ( port == 2 && bit == 6 )) keydown = 1; // insert = ^V
|
||||
#endif
|
||||
}
|
||||
|
||||
if( data )
|
||||
if( keydown )
|
||||
{
|
||||
m_sy6545_reg[17] = offs;
|
||||
m_sy6545_reg[16] = (offs >> 8) & 0x3f;
|
||||
@ -283,8 +237,8 @@ void mbee_state::keyboard_matrix_r(int offs)
|
||||
|
||||
void mbee_state::mbee_video_kbd_scan( int param )
|
||||
{
|
||||
if (m_0b) return;
|
||||
|
||||
if (m_0b) return; // can't remember why this is here
|
||||
if (param & 15) return; // only scan once per row instead of 16 times
|
||||
keyboard_matrix_r(param);
|
||||
}
|
||||
|
||||
@ -375,14 +329,14 @@ WRITE8_MEMBER ( mbee_state::m6545_data_w )
|
||||
|
||||
************************************************************/
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbee )
|
||||
VIDEO_START_MEMBER( mbee_state, mono )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_gfxram = memregion("gfx")->base()+0x1000;
|
||||
m_is_premium = 0;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbeeic )
|
||||
VIDEO_START_MEMBER( mbee_state, standard )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_colorram = memregion("colorram")->base();
|
||||
@ -390,7 +344,7 @@ VIDEO_START_MEMBER( mbee_state, mbeeic )
|
||||
m_is_premium = 0;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER( mbee_state, mbeeppc )
|
||||
VIDEO_START_MEMBER( mbee_state, premium )
|
||||
{
|
||||
m_p_videoram = memregion("videoram")->base();
|
||||
m_p_colorram = memregion("colorram")->base();
|
||||
@ -407,19 +361,15 @@ UINT32 mbee_state::screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitma
|
||||
}
|
||||
|
||||
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee_update_addr )
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::crtc_update_addr )
|
||||
{
|
||||
/* not sure what goes in here - parameters passed are device, address, strobe */
|
||||
}
|
||||
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( mbee_state::mbee256_update_addr )
|
||||
{
|
||||
/* not used on 256TC */
|
||||
// not sure what goes in here - parameters passed are device, address, strobe
|
||||
// not used on 256TC
|
||||
}
|
||||
|
||||
|
||||
/* monochrome bee */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbee_update_row )
|
||||
MC6845_UPDATE_ROW( mbee_state::mono_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx;
|
||||
@ -453,76 +403,43 @@ MC6845_UPDATE_ROW( mbee_state::mbee_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
/* prom-based colours */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbeeic_update_row )
|
||||
/* colour bee */
|
||||
MC6845_UPDATE_ROW( mbee_state::colour_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx,fg,bg;
|
||||
UINT16 mem,x,col;
|
||||
UINT8 inv,attr,gfx,fg,bg;
|
||||
UINT16 mem,x,col,chr;
|
||||
UINT16 colourm = (m_08 & 0x0e) << 7;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
|
||||
for (x = 0; x < x_count; x++) // for each character
|
||||
{
|
||||
UINT8 inv=0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = m_p_videoram[mem];
|
||||
col = m_p_colorram[mem] | colourm; // read a byte of colour
|
||||
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
|
||||
/* process cursor */
|
||||
if (x == cursor_x)
|
||||
inv ^= m_sy6545_cursor[ra]; // cursor scan row
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = m_p_gfxram[(chr<<4) | ra] ^ inv;
|
||||
fg = (col & 0x001f) | 64; // map to foreground palette
|
||||
bg = (col & 0x07e0) >> 5; // and background palette
|
||||
|
||||
/* Display a scanline of a character (8 pixels) */
|
||||
*p++ = palette[BIT(gfx, 7) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 6) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 5) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 4) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 3) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 2) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 1) ? fg : bg];
|
||||
*p++ = palette[BIT(gfx, 0) ? fg : bg];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* new colours & hires2 */
|
||||
MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 gfx,fg,bg;
|
||||
UINT16 mem,x,col,chr;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
|
||||
for (x = 0; x < x_count; x++) // for each character
|
||||
{
|
||||
UINT8 inv=0;
|
||||
inv = 0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = m_p_videoram[mem];
|
||||
col = m_p_colorram[mem]; // read a byte of colour
|
||||
|
||||
if (m_1c & 0x80) // are extended features enabled?
|
||||
if (m_is_premium)
|
||||
{
|
||||
UINT8 attr = m_p_attribram[mem];
|
||||
if (m_1c & 0x80) // are extended features enabled?
|
||||
{
|
||||
attr = m_p_attribram[mem];
|
||||
|
||||
if (chr & 0x80)
|
||||
chr += ((attr & 15) << 7); // bump chr to its particular pcg definition
|
||||
if (chr & 0x80)
|
||||
chr += ((attr & 15) << 7); // bump chr to its particular pcg definition
|
||||
|
||||
if (attr & 0x40)
|
||||
inv ^= 0xff; // inverse attribute
|
||||
if (attr & 0x40)
|
||||
inv ^= 0xff; // inverse attribute
|
||||
|
||||
if ((attr & 0x80) && (m_framecnt & 0x10)) // flashing attribute
|
||||
chr = 0x20;
|
||||
if ((attr & 0x80) && (m_framecnt & 0x10)) // flashing attribute
|
||||
chr = 0x20;
|
||||
}
|
||||
}
|
||||
else
|
||||
col |= colourm;
|
||||
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
if (m_has_oldkb)
|
||||
mbee_video_kbd_scan(x+ma);
|
||||
|
||||
/* process cursor */
|
||||
if (x == cursor_x)
|
||||
@ -530,8 +447,18 @@ MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = m_p_gfxram[(chr<<4) | ra] ^ inv;
|
||||
fg = col & 15; // map to foreground palette
|
||||
bg = (col & 0xf0) >> 4; // and background palette
|
||||
|
||||
// get colours
|
||||
if (m_is_premium)
|
||||
{
|
||||
fg = col & 15;
|
||||
bg = (col & 0xf0) >> 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
fg = (col & 0x001f) | 64;
|
||||
bg = (col & 0x07e0) >> 5;
|
||||
}
|
||||
|
||||
/* Display a scanline of a character (8 pixels) */
|
||||
*p++ = palette[BIT(gfx, 7) ? fg : bg];
|
||||
@ -552,7 +479,7 @@ MC6845_UPDATE_ROW( mbee_state::mbeeppc_update_row )
|
||||
|
||||
************************************************************/
|
||||
|
||||
PALETTE_INIT_MEMBER( mbee_state, mbeeic )
|
||||
PALETTE_INIT_MEMBER( mbee_state, standard )
|
||||
{
|
||||
const UINT8 *color_prom = memregion("proms")->base();
|
||||
UINT16 i;
|
||||
@ -610,7 +537,7 @@ PALETTE_INIT_MEMBER( mbee_state, mbeepc85b )
|
||||
}
|
||||
|
||||
|
||||
PALETTE_INIT_MEMBER( mbee_state, mbeeppc )
|
||||
PALETTE_INIT_MEMBER( mbee_state, premium )
|
||||
{
|
||||
UINT16 i;
|
||||
UINT8 r, b, g;
|
||||
|
@ -178,7 +178,7 @@ private:
|
||||
INT32 m_blittimer;
|
||||
|
||||
#if (SDLMAME_SDL2)
|
||||
SDL_GLContext m_gl_context_id;
|
||||
//SDL_GLContext m_gl_context_id;
|
||||
#else
|
||||
// SDL surface
|
||||
SDL_Surface *m_sdlsurf;
|
||||
|
@ -502,6 +502,6 @@ $(WINOBJ)/%.res: $(WINSRC)/%.rc | $(OSPREBUILD)
|
||||
|
||||
$(RESFILE): $(WINSRC)/mame.rc $(WINOBJ)/mamevers.rc
|
||||
|
||||
$(WINOBJ)/mamevers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(WINOBJ)/mamevers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b mame $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b mame $(SRC)/version.c > $@
|
||||
|
@ -36,6 +36,6 @@ $(UME_WINOBJ)/%.res: $(UME_WINSRC)/%.rc
|
||||
|
||||
$(RESFILE): $(UME_WINSRC)/ume.rc $(UME_WINOBJ)/umevers.rc
|
||||
|
||||
$(UME_WINOBJ)/umevers.rc: $(BUILDOUT)/verinfo$(BUILD_EXE) $(SRC)/version.c
|
||||
$(UME_WINOBJ)/umevers.rc: $(SRC)/build/verinfo.py $(SRC)/version.c
|
||||
@echo Emitting $@...
|
||||
@"$(BUILDOUT)/verinfo$(BUILD_EXE)" -b ume $(SRC)/version.c > $@
|
||||
$(PYTHON) $(SRC)/build/verinfo.py -b ume $(SRC)/version.c > $@
|
Loading…
Reference in New Issue
Block a user