Merge remote-tracking branch 'stella-emu/master'

This commit is contained in:
Darrell Spice, Jr 2017-04-23 16:09:31 -05:00
commit 26e9144468
67 changed files with 1950 additions and 1103 deletions

View File

@ -5,7 +5,9 @@
"-I/home/cnspeckn/git/stella/src/common",
"-I/home/cnspeckn/git/stella/src/emucore",
"-I/home/cnspeckn/git/stella/src/emucore/tia",
"-I/home/cnspeckn/git/stella/src/emucore/debugger"
"-I/home/cnspeckn/git/stella/src/debugger",
"-I/home/cnspeckn/git/stella/src/debugger/gui",
"-I/home/cnspeckn/git/stella/src/gui"
],
"editor.tabSize": 2,
"files.trimTrailingWhitespace": true,

View File

@ -14,6 +14,8 @@
4.7.3 to 5.0: (xxx. xx, 2017)
* Stella has moved from Sourceforge to Github.
* New TIA core: TODO - gather info on all new functionality:
- RSYNC
- YStart autodetection
@ -24,14 +26,31 @@
finding documentation that finally describes in more detail how the
M6532 chip actually works.
* Added BUS and CDF bankswitching schemes, thanks to SpiceWare.
* Added BUS and CDF bankswitching schemes, and also ARM Timer 1
support; special thanks to SpiceWare for the code.
* Fixed bug with SaveKey and AtariVox not properly closing their memory
files before starting another instance of the same ROM, when the ROM
was opened in the ROM launcher.
* Fixed trap'm' debugger commands when setting TIA read addresses; it
was previously only working for write addresses.
* Various improvements to the debugger and command prompt:
- The 'cls' command now only clears the screen, not the history
- The 'help' command now accepts other commands, and gives extra
information about the command (ie, 'help breakif' prints extended
information about the breakif command)
- Added 'palette' command, which shows a color swatch of the
currently active TIA palette
- Added 'debugcolors' command, which shows a legend for 'fixed debug
colors' mode
- The previous trap'm' commands now work when setting TIA read
addresses; previously they only worked for write addresses
- The previous trap'm' commands are now renamed 'trap', 'trapread'
and 'trapwrite'
- Command completion now works with internal functions and pseudo-ops
(basically, anything starting with the '_' character)
- In general, input error checking is much more strictly enforced
- Read-only UI items now have a different background color, to
clearly indicate if an item can be modified.
* Mouse grabbing is now enabled in windowed mode only when the ROM is
using a virtual analog controller (paddles, trakball, etc).
@ -52,7 +71,7 @@
this bug has only ever occurred in Windows XP, but it's been there
since Stella 4.1.
* When in 'ROM launcher mode', Stella now uses less CPU time.
* When in 'ROM launcher mode', Stella now uses slightly less CPU time.
* Added ROM properties for D.K. VCS homebrew ROM, thanks to Andreas
Dietrich.
@ -90,7 +109,8 @@
both libraries are now compiled into the app whenever one is selected.
This fixes issues with a newer ZLIB not working with an older PNG, etc.
* Updated UNIX configure script to work with the clang 5.x compiler.
* Updated UNIX configure script to work with the clang 5+ and gcc 7+
compiler versions.
-Have fun!

930
config.guess vendored

File diff suppressed because it is too large Load Diff

493
config.sub vendored
View File

@ -1,43 +1,40 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
# Copyright 1992-2017 Free Software Foundation, Inc.
timestamp='2005-07-08'
timestamp='2017-04-02'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
# 02110-1301, USA.
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry.
# Please send patches to <config-patches@gnu.org>.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
@ -56,8 +53,7 @@ timestamp='2005-07-08'
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS
$0 [OPTION] ALIAS
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name.
@ -71,8 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
Copyright 1992-2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -119,11 +114,18 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | cloudabi*-eabi* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
android-linux)
os=-linux-android
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
@ -146,10 +148,13 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple | -axis | -knuth | -cray)
-apple | -axis | -knuth | -cray | -microblaze*)
os=
basic_machine=$1
;;
-bluegene*)
os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
@ -164,13 +169,17 @@ case $os in
os=-chorusos
basic_machine=$1
;;
-chorusrdb)
os=-chorusrdb
-chorusrdb)
os=-chorusrdb
basic_machine=$1
;;
;;
-hiux*)
os=-hiuxwe2
;;
-sco6)
os=-sco5v6
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@ -187,6 +196,10 @@ case $os in
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco5v6*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@ -204,6 +217,12 @@ case $os in
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-lynx*178)
os=-lynxos178
;;
-lynx*5)
os=-lynxos5
;;
-lynx*)
os=-lynxos
;;
@ -228,64 +247,116 @@ case $basic_machine in
# Some are omitted here because they have special meanings below.
1750a | 580 \
| a29k \
| aarch64 | aarch64_be \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| ba \
| be32 | be64 \
| bfin \
| c4x | clipper \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| fr30 | frv \
| e2k | epiphany \
| fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| hexagon \
| i370 | i860 | i960 | ia16 | ia64 \
| ip2k | iq2000 \
| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
| k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
| mips64vr | mips64vrel \
| mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
| mips64r5900 | mips64r5900el \
| mips64vr | mips64vrel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
| mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| ms1 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
| or32 \
| open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pru \
| pyramid \
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
| riscv32 | riscv64 \
| rl78 | rx \
| score \
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b \
| strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu \
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
| visium \
| wasm32 \
| we32k \
| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
| z8k)
| x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
m32c)
basic_machine=$basic_machine-unknown
c54x)
basic_machine=tic54x-unknown
;;
m6811 | m68hc11 | m6812 | m68hc12)
# Motorola 68HC11/12.
c55x)
basic_machine=tic55x-unknown
;;
c6x)
basic_machine=tic6x-unknown
;;
leon|leon[3-9])
basic_machine=sparc-$basic_machine
;;
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
ms1)
basic_machine=mt-unknown
;;
strongarm | thumb | xscale)
basic_machine=arm-unknown
;;
xgate)
basic_machine=$basic_machine-unknown
os=-none
;;
xscaleeb)
basic_machine=armeb-unknown
;;
xscaleel)
basic_machine=armel-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@ -301,65 +372,91 @@ case $basic_machine in
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* \
| avr-* | avr32-* \
| ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
| e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| hexagon-* \
| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
| ip2k-* | iq2000-* \
| m32r-* | m32rle-* \
| k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
| microblaze-* | microblazeel-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
| mips64vr-* | mips64vrel-* \
| mips64octeon-* | mips64octeonel-* \
| mips64orion-* | mips64orionel-* \
| mips64r5900-* | mips64r5900el-* \
| mips64vr-* | mips64vrel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
| mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| ms1-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
| or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pru-* \
| pyramid-* \
| romp-* | rs6000-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
| riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
| tron-* \
| v850-* | v850e-* | vax-* \
| ubicom32-* \
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
| vax-* \
| visium-* \
| wasm32-* \
| we32k-* \
| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
| xstormy16-* | xtensa-* \
| x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-*)
| z8k-* | z80-*)
;;
m32c-*)
# Recognize the basic CPU types without company name, with glob match.
xtensa*)
basic_machine=$basic_machine-unknown
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@ -377,7 +474,7 @@ case $basic_machine in
basic_machine=a29k-amd
os=-udi
;;
abacus)
abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@ -423,6 +520,13 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-bsd
;;
aros)
basic_machine=i386-pc
os=-aros
;;
asmjs)
basic_machine=asmjs-unknown
;;
aux)
basic_machine=m68k-apple
os=-aux
@ -431,10 +535,35 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
blackfin)
basic_machine=bfin-unknown
os=-linux
;;
blackfin-*)
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
bluegene*)
basic_machine=powerpc-ibm
os=-cnk
;;
c54x-*)
basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c55x-*)
basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c6x-*)
basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c90)
basic_machine=c90-cray
os=-unicos
;;
cegcc)
basic_machine=arm-unknown
os=-cegcc
;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@ -463,8 +592,8 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
cr16c)
basic_machine=cr16c-unknown
cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
crds | unos)
@ -502,6 +631,10 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
dicos)
basic_machine=i686-pc
os=-dicos
;;
djgpp)
basic_machine=i586-pc
os=-msdosdjgpp
@ -514,6 +647,14 @@ case $basic_machine in
basic_machine=m68k-bull
os=-sysv3
;;
e500v[12])
basic_machine=powerpc-unknown
os=$os"spe"
;;
e500v[12]-*)
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
os=$os"spe"
;;
ebmon29k)
basic_machine=a29k-amd
os=-ebmon
@ -617,7 +758,6 @@ case $basic_machine in
i370-ibm* | ibm*)
basic_machine=i370-ibm
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
@ -656,6 +796,17 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
leon-*|leon[3-9]-*)
basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
;;
m68knommu-*)
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
m88k-omron*)
basic_machine=m88k-omron
;;
@ -667,10 +818,21 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
microblaze*)
basic_machine=microblaze-xilinx
;;
mingw64)
basic_machine=x86_64-pc
os=-mingw64
;;
mingw32)
basic_machine=i386-pc
basic_machine=i686-pc
os=-mingw32
;;
mingw32ce)
basic_machine=arm-unknown
os=-mingw32ce
;;
miniframe)
basic_machine=m68000-convergent
;;
@ -692,14 +854,29 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
moxiebox)
basic_machine=moxie-unknown
os=-moxiebox
;;
msdos)
basic_machine=i386-pc
os=-msdos
;;
ms1-*)
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
basic_machine=i686-pc
os=-msys
;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
nacl)
basic_machine=le32-unknown
os=-nacl
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
@ -764,9 +941,18 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
neo-tandem)
basic_machine=neo-tandem
;;
nse-tandem)
basic_machine=nse-tandem
;;
nsr-tandem)
basic_machine=nsr-tandem
;;
nsx-tandem)
basic_machine=nsx-tandem
;;
op50n-* | op60c-*)
basic_machine=hppa1.1-oki
os=-proelf
@ -794,6 +980,14 @@ case $basic_machine in
basic_machine=i860-intel
os=-osf
;;
parisc)
basic_machine=hppa-unknown
os=-linux
;;
parisc-*)
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
pbd)
basic_machine=sparc-tti
;;
@ -803,6 +997,12 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pc98)
basic_machine=i386-pc
;;
pc98-*)
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
@ -832,11 +1032,12 @@ case $basic_machine in
;;
power) basic_machine=power-ibm
;;
ppc) basic_machine=powerpc-unknown
ppc | ppcbe) basic_machine=powerpc-unknown
;;
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
ppc-* | ppcbe-*)
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
ppcle | powerpclittle)
basic_machine=powerpcle-unknown
;;
ppcle-* | powerpclittle-*)
@ -846,7 +1047,7 @@ case $basic_machine in
;;
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown
;;
ppc64le-* | powerpc64little-*)
@ -859,6 +1060,14 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
os=-rdos
;;
rdos32)
basic_machine=i386-pc
os=-rdos
;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@ -885,6 +1094,10 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
sde)
basic_machine=mipsisa32-sde
os=-elf
;;
sei)
basic_machine=mips-sei
os=-seiux
@ -896,6 +1109,9 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
sh5el)
basic_machine=sh5le-unknown
;;
sh64)
basic_machine=sh64-unknown
;;
@ -917,6 +1133,9 @@ case $basic_machine in
basic_machine=i860-stratus
os=-sysv4
;;
strongarm-* | thumb-*)
basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
sun2)
basic_machine=m68000-sun
;;
@ -973,17 +1192,9 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
tic54x | c54x*)
basic_machine=tic54x-unknown
os=-coff
;;
tic55x | c55x*)
basic_machine=tic55x-unknown
os=-coff
;;
tic6x | c6x*)
basic_machine=tic6x-unknown
os=-coff
tile*)
basic_machine=$basic_machine-unknown
os=-linux-gnu
;;
tx39)
basic_machine=mipstx39-unknown
@ -1037,6 +1248,9 @@ case $basic_machine in
basic_machine=a29k-wrs
os=-vxworks
;;
wasm32)
basic_machine=wasm32-unknown
;;
w65*)
basic_machine=w65-wdc
os=-none
@ -1052,6 +1266,9 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
xscale-* | xscalee[bl]-*)
basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
;;
ymp)
basic_machine=ymp-cray
os=-unicos
@ -1060,6 +1277,10 @@ case $basic_machine in
basic_machine=z8k-unknown
os=-sim
;;
z80-*-coff)
basic_machine=z80-unknown
os=-sim
;;
none)
basic_machine=none-none
os=-none
@ -1098,10 +1319,10 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
sparc | sparcv8 | sparcv9 | sparcv9b)
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
@ -1145,9 +1366,12 @@ esac
if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases
# that might get confused with valid system types.
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-auroraux)
os=-auroraux
;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@ -1168,27 +1392,32 @@ case $os in
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* \
| -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
| -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
| -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
| -skyos* | -haiku*)
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
| -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@ -1227,7 +1456,7 @@ case $os in
-opened*)
os=-openedition
;;
-os400*)
-os400*)
os=-os400
;;
-wince*)
@ -1276,7 +1505,7 @@ case $os in
-sinix*)
os=-sysv4
;;
-tpf*)
-tpf*)
os=-tpf
;;
-triton*)
@ -1312,12 +1541,16 @@ case $os in
-aros*)
os=-aros
;;
-kaos*)
os=-kaos
;;
-zvmoe)
os=-zvmoe
;;
-dicos*)
os=-dicos
;;
-nacl*)
;;
-ios)
;;
-none)
;;
*)
@ -1340,6 +1573,12 @@ else
# system, and we'll never get to this point.
case $basic_machine in
score-*)
os=-elf
;;
spu-*)
os=-elf
;;
*-acorn)
os=-riscix1.2
;;
@ -1349,9 +1588,24 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
c4x-* | tic4x-*)
os=-coff
;;
c4x-* | tic4x-*)
os=-coff
;;
c8051-*)
os=-elf
;;
hexagon-*)
os=-elf
;;
tic54x-*)
os=-coff
;;
tic55x-*)
os=-coff
;;
tic6x-*)
os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
@ -1370,13 +1624,13 @@ case $basic_machine in
;;
m68000-sun)
os=-sunos3
# This also exists in the configure program, but was not the
# default.
# os=-sunos4
;;
m68*-cisco)
os=-aout
;;
mep-*)
os=-elf
;;
mips*-cisco)
os=-elf
;;
@ -1392,6 +1646,9 @@ case $basic_machine in
sparc-* | *-sun)
os=-sunos4.1.1
;;
pru-*)
os=-elf
;;
*-be)
os=-beos
;;
@ -1401,7 +1658,7 @@ case $basic_machine in
*-ibm)
os=-aix
;;
*-knuth)
*-knuth)
os=-mmixware
;;
*-wec)
@ -1506,7 +1763,7 @@ case $basic_machine in
-sunos*)
vendor=sun
;;
-aix*)
-cnk*|-aix*)
vendor=ibm
;;
-beos*)

2
configure vendored
View File

@ -417,7 +417,7 @@ elif test "$have_gcc" = yes; then
fi
case $cxx_version in
4.[7-9]|4.[7-9].[0-9]|4.[7-9].[0-9][-.]*|[5-6].[0-9]|[5-6].[0-9].[0-9]|[5-6].[0-9].[0-9][-.]*)
4.[7-9]|4.[7-9].[0-9]|4.[7-9].[0-9][-.]*|[5-9]|[5-9].[0-9]|[5-9].[0-9].[0-9]|[5-9].[0-9].[0-9][-.]*)
_cxx_major=`echo $cxx_version | cut -d '.' -f 1`
_cxx_minor=`echo $cxx_version | cut -d '.' -f 2`
cxx_version="$cxx_version, ok"

View File

@ -62,7 +62,11 @@ class Base
static void setHexUppercase(bool enable);
static bool hexUppercase() { return myHexflags & std::ios_base::uppercase; }
/** Output HEX digits in 1/2/4 byte format */
/** Output HEX digits in 0.5/1/2/4 byte format */
static inline std::ostream& HEX1(std::ostream& os) {
os.flags(myHexflags);
return os << std::setw(1);
}
static inline std::ostream& HEX2(std::ostream& os) {
os.flags(myHexflags);
return os << std::setw(2) << std::setfill('0');

View File

@ -18,7 +18,7 @@
#ifndef EVENTHANDLER_SDL2_HXX
#define EVENTHANDLER_SDL2_HXX
#include <SDL.h>
#include "SDL_lib.hxx"
#include "EventHandler.hxx"
/**

View File

@ -15,11 +15,11 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include <SDL.h>
#include <sstream>
#include <time.h>
#include <fstream>
#include "SDL_lib.hxx"
#include "bspf.hxx"
#include "Console.hxx"

View File

@ -18,7 +18,7 @@
#ifndef FRAMEBUFFER_SDL2_HXX
#define FRAMEBUFFER_SDL2_HXX
#include <SDL.h>
#include "SDL_lib.hxx"
class OSystem;
class FBSurfaceSDL2;

24
src/common/SDL_lib.hxx Normal file
View File

@ -0,0 +1,24 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef SDL_LIB_HXX
#define SDL_LIB_HXX
#include <SDL.h>
#undef bool // Seems to be needed for ppc64le, doesn't hurt other archs
#endif

View File

@ -20,8 +20,8 @@
#include <sstream>
#include <cassert>
#include <cmath>
#include <SDL.h>
#include "SDL_lib.hxx"
#include "TIASnd.hxx"
#include "TIATypes.hxx"
#include "FrameBuffer.hxx"

View File

@ -22,7 +22,7 @@
class OSystem;
#include <SDL.h>
#include "SDL_lib.hxx"
#include "bspf.hxx"
#include "TIASnd.hxx"

View File

@ -18,7 +18,7 @@
#ifndef STELLA_KEYS_HXX
#define STELLA_KEYS_HXX
#include <SDL.h>
#include "SDL_lib.hxx"
/**
This class implements a thin wrapper around the SDL keysym enumerations,

View File

@ -345,58 +345,55 @@ int Debugger::trace()
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::toggleBreakPoint(int bp)
void Debugger::toggleBreakPoint(uInt16 bp)
{
breakPoints().initialize();
if(bp < 0) bp = myCpuDebug->pc();
breakPoints().toggle(bp);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::setBreakPoint(int bp, bool set)
void Debugger::setBreakPoint(uInt16 bp, bool set)
{
breakPoints().initialize();
if(bp < 0) bp = myCpuDebug->pc();
if(set) breakPoints().set(bp);
else breakPoints().clear(bp);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::breakPoint(int bp)
bool Debugger::breakPoint(uInt16 bp)
{
if(bp < 0) bp = myCpuDebug->pc();
return breakPoints().isSet(bp);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::toggleReadTrap(int t)
void Debugger::toggleReadTrap(uInt16 t)
{
readTraps().initialize();
readTraps().toggle(t);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::toggleWriteTrap(int t)
void Debugger::toggleWriteTrap(uInt16 t)
{
writeTraps().initialize();
writeTraps().toggle(t);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Debugger::toggleTrap(int t)
void Debugger::toggleTrap(uInt16 t)
{
toggleReadTrap(t);
toggleWriteTrap(t);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::readTrap(int t)
bool Debugger::readTrap(uInt16 t)
{
return readTraps().isInitialized() && readTraps().isSet(t);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::writeTrap(int t)
bool Debugger::writeTrap(uInt16 t)
{
return writeTraps().isInitialized() && writeTraps().isSet(t);
}
@ -463,7 +460,7 @@ string Debugger::showWatches()
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::patchROM(int addr, int value)
bool Debugger::patchROM(uInt16 addr, uInt8 value)
{
return myConsole.cartridge().patch(addr, value);
}
@ -613,12 +610,12 @@ void Debugger::getCompletions(const char* in, StringList& list) const
for(const auto& iter: myFunctions)
{
const char* l = iter.first.c_str();
if(BSPF::equalsIgnoreCase(l, in))
if(BSPF::startsWithIgnoreCase(l, in))
list.push_back(l);
}
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
if(BSPF::equalsIgnoreCase(pseudo_registers[i][0], in))
if(BSPF::startsWithIgnoreCase(pseudo_registers[i][0], in))
list.push_back(pseudo_registers[i][0]);
}

View File

@ -219,9 +219,9 @@ class Debugger : public DialogContainer
void setAccessFlags(uInt16 addr, uInt8 flags)
{ mySystem.setAccessFlags(addr, flags); }
void setBreakPoint(int bp, bool set);
void setBreakPoint(uInt16 bp, bool set);
bool patchROM(int addr, int value);
bool patchROM(uInt16 addr, uInt8 value);
/**
Normally, accessing RAM or ROM during emulation can possibly trigger
@ -256,14 +256,14 @@ class Debugger : public DialogContainer
void nextFrame(int frames);
bool rewindState();
void toggleBreakPoint(int bp);
void toggleBreakPoint(uInt16 bp);
bool breakPoint(int bp);
void toggleReadTrap(int t);
void toggleWriteTrap(int t);
void toggleTrap(int t);
bool readTrap(int t);
bool writeTrap(int t);
bool breakPoint(uInt16 bp);
void toggleReadTrap(uInt16 t);
void toggleWriteTrap(uInt16 t);
void toggleTrap(uInt16 t);
bool readTrap(uInt16 t);
bool writeTrap(uInt16 t);
void clearAllTraps();
// Set a bunch of RAM locations at once

View File

@ -37,7 +37,7 @@ class BinAndExpression : public Expression
{
public:
BinAndExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() & myRHS->evaluate(); }
};
@ -46,7 +46,7 @@ class BinNotExpression : public Expression
{
public:
BinNotExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return ~(myLHS->evaluate()); }
};
@ -55,7 +55,7 @@ class BinOrExpression : public Expression
{
public:
BinOrExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() | myRHS->evaluate(); }
};
@ -64,7 +64,7 @@ class BinXorExpression : public Expression
{
public:
BinXorExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() ^ myRHS->evaluate(); }
};
@ -73,7 +73,7 @@ class ByteDerefExpression : public Expression
{
public:
ByteDerefExpression(Expression* left): Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return Debugger::debugger().peek(myLHS->evaluate()); }
};
@ -82,7 +82,7 @@ class ByteDerefOffsetExpression : public Expression
{
public:
ByteDerefOffsetExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return Debugger::debugger().peek(myLHS->evaluate() + myRHS->evaluate()); }
};
@ -91,7 +91,7 @@ class ConstExpression : public Expression
{
public:
ConstExpression(const int value) : Expression(), myValue(value) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myValue; }
private:
@ -103,7 +103,7 @@ class CpuMethodExpression : public Expression
{
public:
CpuMethodExpression(CpuMethod method) : Expression(), myMethod(std::mem_fn(method)) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myMethod(Debugger::debugger().cpuDebug()); }
private:
@ -115,7 +115,7 @@ class DivExpression : public Expression
{
public:
DivExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ int denom = myRHS->evaluate();
return denom == 0 ? 0 : myLHS->evaluate() / denom; }
};
@ -125,7 +125,7 @@ class EqualsExpression : public Expression
{
public:
EqualsExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() == myRHS->evaluate(); }
};
@ -134,7 +134,7 @@ class EquateExpression : public Expression
{
public:
EquateExpression(const string& label) : Expression(), myLabel(label) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return Debugger::debugger().cartDebug().getAddress(myLabel); }
private:
@ -146,7 +146,7 @@ class FunctionExpression : public Expression
{
public:
FunctionExpression(const string& label) : Expression(), myLabel(label) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return Debugger::debugger().getFunction(myLabel).evaluate(); }
private:
@ -158,7 +158,7 @@ class GreaterEqualsExpression : public Expression
{
public:
GreaterEqualsExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() >= myRHS->evaluate(); }
};
@ -167,7 +167,7 @@ class GreaterExpression : public Expression
{
public:
GreaterExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() > myRHS->evaluate(); }
};
@ -176,7 +176,7 @@ class HiByteExpression : public Expression
{
public:
HiByteExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return 0xff & (myLHS->evaluate() >> 8); }
};
@ -185,7 +185,7 @@ class LessEqualsExpression : public Expression
{
public:
LessEqualsExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() <= myRHS->evaluate(); }
};
@ -194,7 +194,7 @@ class LessExpression : public Expression
{
public:
LessExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() < myRHS->evaluate(); }
};
@ -203,7 +203,7 @@ class LoByteExpression : public Expression
{
public:
LoByteExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return 0xff & myLHS->evaluate(); }
};
@ -212,7 +212,7 @@ class LogAndExpression : public Expression
{
public:
LogAndExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() && myRHS->evaluate(); }
};
@ -221,7 +221,7 @@ class LogNotExpression : public Expression
{
public:
LogNotExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return !(myLHS->evaluate()); }
};
@ -230,7 +230,7 @@ class LogOrExpression : public Expression
{
public:
LogOrExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() || myRHS->evaluate(); }
};
@ -239,7 +239,7 @@ class MinusExpression : public Expression
{
public:
MinusExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() - myRHS->evaluate(); }
};
@ -248,7 +248,7 @@ class ModExpression : public Expression
{
public:
ModExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ int rhs = myRHS->evaluate();
return rhs == 0 ? 0 : myLHS->evaluate() % rhs; }
};
@ -258,7 +258,7 @@ class MultExpression : public Expression
{
public:
MultExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() * myRHS->evaluate(); }
};
@ -267,7 +267,7 @@ class NotEqualsExpression : public Expression
{
public:
NotEqualsExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() != myRHS->evaluate(); }
};
@ -276,7 +276,7 @@ class PlusExpression : public Expression
{
public:
PlusExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() + myRHS->evaluate(); }
};
@ -285,7 +285,7 @@ class CartMethodExpression : public Expression
{
public:
CartMethodExpression(CartMethod method) : Expression(), myMethod(std::mem_fn(method)) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myMethod(Debugger::debugger().cartDebug()); }
private:
@ -297,7 +297,7 @@ class ShiftLeftExpression : public Expression
{
public:
ShiftLeftExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() << myRHS->evaluate(); }
};
@ -306,7 +306,7 @@ class ShiftRightExpression : public Expression
{
public:
ShiftRightExpression(Expression* left, Expression* right) : Expression(left, right) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myLHS->evaluate() >> myRHS->evaluate(); }
};
@ -315,7 +315,7 @@ class TiaMethodExpression : public Expression
{
public:
TiaMethodExpression(TiaMethod method) : Expression(), myMethod(std::mem_fn(method)) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return myMethod(Debugger::debugger().tiaDebug()); }
private:
@ -327,7 +327,7 @@ class UnaryMinusExpression : public Expression
{
public:
UnaryMinusExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return -(myLHS->evaluate()); }
};
@ -336,7 +336,7 @@ class WordDerefExpression : public Expression
{
public:
WordDerefExpression(Expression* left) : Expression(left) { }
uInt16 evaluate() const override
uInt32 evaluate() const override
{ return Debugger::debugger().dpeek(myLHS->evaluate()); }
};

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ class DebuggerParser
bool saveScriptFile(string file);
private:
enum { kNumCommands = 73 };
enum { kNumCommands = 72 };
// Constants for argument processing
enum {
@ -93,6 +93,7 @@ class DebuggerParser
struct Command {
string cmdString;
string description;
string extendedDesc;
bool parmsRequired;
bool refreshRequired;
parameters parms[10];
@ -111,7 +112,7 @@ class DebuggerParser
// Arguments in 'int' and 'string' format for the currently running command
IntArray args;
StringList argStrings;
int argCount;
uInt32 argCount;
StringList watches;
@ -131,6 +132,7 @@ class DebuggerParser
void executeColortest();
void executeD();
void executeData();
void executeDebugColors();
void executeDefine();
void executeDelbreakif();
void executeDelfunction();
@ -151,6 +153,7 @@ class DebuggerParser
void executeLoadconfig();
void executeLoadstate();
void executeN();
void executePalette();
void executePc();
void executePGfx();
void executePrint();
@ -178,11 +181,7 @@ class DebuggerParser
void executeTrap();
void executeTrapread();
void executeTrapwrite();
void executeTrapRW(bool read, bool write); // not exposed by debugger
void executeTrapM();
void executeTrapreadM();
void executeTrapwriteM();
void executeTrapMRW(bool read, bool write); // not exposed by debugger
void executeTrapRW(uInt32 addr, bool read, bool write); // not exposed by debugger
void executeType();
void executeUHex();
void executeUndef();

View File

@ -35,7 +35,7 @@ class Expression
: myLHS(lhs), myRHS(rhs) { }
virtual ~Expression() = default;
virtual uInt16 evaluate() const { return 0; }
virtual uInt32 evaluate() const { return 0; }
protected:
unique_ptr<Expression> myLHS, myRHS;

View File

@ -27,12 +27,12 @@ class PackedBitArray
public:
PackedBitArray() : myInitialized(false) { }
bool isSet(uInt32 bit) const { return myBits[bit]; }
bool isClear(uInt32 bit) const { return !myBits[bit]; }
bool isSet(uInt16 bit) const { return myBits[bit]; }
bool isClear(uInt16 bit) const { return !myBits[bit]; }
void set(uInt32 bit) { myBits[bit] = true; }
void clear(uInt32 bit) { myBits[bit] = false; }
void toggle(uInt32 bit) { myBits.flip(bit); }
void set(uInt16 bit) { myBits[bit] = true; }
void clear(uInt16 bit) { myBits[bit] = false; }
void toggle(uInt16 bit) { myBits.flip(bit); }
void initialize() { myInitialized = true; }
void clearAll() { myInitialized = false; myBits.reset(); }

View File

@ -185,7 +185,7 @@ bool TIADebug::vdelP0(int newVal)
if(newVal > -1)
mySystem.poke(VDELP0, bool(newVal));
return myTIA.lastValueWrittenToRegister(VDELP0) & 0x01;
return myTIA.registerValue(VDELP0) & 0x01;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -194,7 +194,7 @@ bool TIADebug::vdelP1(int newVal)
if(newVal > -1)
mySystem.poke(VDELP1, bool(newVal));
return myTIA.lastValueWrittenToRegister(VDELP1) & 0x01;
return myTIA.registerValue(VDELP1) & 0x01;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -203,7 +203,7 @@ bool TIADebug::vdelBL(int newVal)
if(newVal > -1)
mySystem.poke(VDELBL, bool(newVal));
return myTIA.lastValueWrittenToRegister(VDELBL) & 0x01;
return myTIA.registerValue(VDELBL) & 0x01;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -212,7 +212,7 @@ bool TIADebug::enaM0(int newVal)
if(newVal > -1)
mySystem.poke(ENAM0, bool(newVal) << 1);
return myTIA.lastValueWrittenToRegister(ENAM0) & 0x02;
return myTIA.registerValue(ENAM0) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -221,7 +221,7 @@ bool TIADebug::enaM1(int newVal)
if(newVal > -1)
mySystem.poke(ENAM1, bool(newVal) << 1);
return myTIA.lastValueWrittenToRegister(ENAM1) & 0x02;
return myTIA.registerValue(ENAM1) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -230,7 +230,7 @@ bool TIADebug::enaBL(int newVal)
if(newVal > -1)
mySystem.poke(ENABL, bool(newVal) << 1);
return myTIA.lastValueWrittenToRegister(ENABL) & 0x02;
return myTIA.registerValue(ENABL) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -239,7 +239,7 @@ bool TIADebug::resMP0(int newVal)
if(newVal > -1)
mySystem.poke(RESMP0, bool(newVal) << 1);
return myTIA.lastValueWrittenToRegister(RESMP0) & 0x02;
return myTIA.registerValue(RESMP0) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -248,7 +248,7 @@ bool TIADebug::resMP1(int newVal)
if(newVal > -1)
mySystem.poke(RESMP1, bool(newVal) << 1);
return myTIA.lastValueWrittenToRegister(RESMP1) & 0x02;;
return myTIA.registerValue(RESMP1) & 0x02;;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -257,7 +257,7 @@ bool TIADebug::refP0(int newVal)
if(newVal > -1)
mySystem.poke(REFP0, bool(newVal) << 3);
return myTIA.lastValueWrittenToRegister(REFP0) & 0x08;
return myTIA.registerValue(REFP0) & 0x08;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -266,7 +266,7 @@ bool TIADebug::refP1(int newVal)
if(newVal > -1)
mySystem.poke(REFP1, bool(newVal) << 3);
return myTIA.lastValueWrittenToRegister(REFP1) & 0x08;
return myTIA.registerValue(REFP1) & 0x08;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -274,7 +274,7 @@ bool TIADebug::refPF(int newVal)
{
if(newVal > -1)
{
int tmp = myTIA.lastValueWrittenToRegister(CTRLPF);
int tmp = myTIA.registerValue(CTRLPF);
if(newVal)
tmp |= 0x01;
else
@ -282,7 +282,7 @@ bool TIADebug::refPF(int newVal)
mySystem.poke(CTRLPF, tmp);
}
return myTIA.lastValueWrittenToRegister(CTRLPF) & 0x01;
return myTIA.registerValue(CTRLPF) & 0x01;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -290,7 +290,7 @@ bool TIADebug::scorePF(int newVal)
{
if(newVal > -1)
{
int tmp = myTIA.lastValueWrittenToRegister(CTRLPF);
int tmp = myTIA.registerValue(CTRLPF);
if(newVal)
tmp |= 0x02;
else
@ -298,7 +298,7 @@ bool TIADebug::scorePF(int newVal)
mySystem.poke(CTRLPF, tmp);
}
return myTIA.lastValueWrittenToRegister(CTRLPF) & 0x02;
return myTIA.registerValue(CTRLPF) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -306,7 +306,7 @@ bool TIADebug::priorityPF(int newVal)
{
if(newVal > -1)
{
int tmp = myTIA.lastValueWrittenToRegister(CTRLPF);
int tmp = myTIA.registerValue(CTRLPF);
if(newVal)
tmp |= 0x04;
else
@ -314,7 +314,7 @@ bool TIADebug::priorityPF(int newVal)
mySystem.poke(CTRLPF, tmp);
}
return myTIA.lastValueWrittenToRegister(CTRLPF) & 0x04;
return myTIA.registerValue(CTRLPF) & 0x04;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -347,7 +347,7 @@ uInt8 TIADebug::audC0(int newVal)
if(newVal > -1)
mySystem.poke(AUDC0, newVal);
return myTIA.lastValueWrittenToRegister(AUDC0) & 0x0f;
return myTIA.registerValue(AUDC0) & 0x0f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -356,7 +356,7 @@ uInt8 TIADebug::audC1(int newVal)
if(newVal > -1)
mySystem.poke(AUDC1, newVal);
return myTIA.lastValueWrittenToRegister(AUDC1) & 0x0f;
return myTIA.registerValue(AUDC1) & 0x0f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -365,7 +365,7 @@ uInt8 TIADebug::audV0(int newVal)
if(newVal > -1)
mySystem.poke(AUDV0, newVal);
return myTIA.lastValueWrittenToRegister(AUDV0) & 0x0f;
return myTIA.registerValue(AUDV0) & 0x0f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -374,7 +374,7 @@ uInt8 TIADebug::audV1(int newVal)
if(newVal > -1)
mySystem.poke(AUDV1, newVal);
return myTIA.lastValueWrittenToRegister(AUDV1) & 0x0f;
return myTIA.registerValue(AUDV1) & 0x0f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -383,7 +383,7 @@ uInt8 TIADebug::audF0(int newVal)
if(newVal > -1)
mySystem.poke(AUDF0, newVal);
return myTIA.lastValueWrittenToRegister(AUDF0) & 0x1f;
return myTIA.registerValue(AUDF0) & 0x1f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -392,7 +392,7 @@ uInt8 TIADebug::audF1(int newVal)
if(newVal > -1)
mySystem.poke(AUDF1, newVal);
return myTIA.lastValueWrittenToRegister(AUDF1) & 0x1f;
return myTIA.registerValue(AUDF1) & 0x1f;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -401,7 +401,7 @@ uInt8 TIADebug::pf0(int newVal)
if(newVal > -1)
mySystem.poke(PF0, newVal << 4);
return myTIA.lastValueWrittenToRegister(PF0) >> 4;
return myTIA.registerValue(PF0) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -410,7 +410,7 @@ uInt8 TIADebug::pf1(int newVal)
if(newVal > -1)
mySystem.poke(PF1, newVal);
return myTIA.lastValueWrittenToRegister(PF1);
return myTIA.registerValue(PF1);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -419,7 +419,7 @@ uInt8 TIADebug::pf2(int newVal)
if(newVal > -1)
mySystem.poke(PF2, newVal);
return myTIA.lastValueWrittenToRegister(PF1);
return myTIA.registerValue(PF2);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -428,7 +428,7 @@ uInt8 TIADebug::coluP0(int newVal)
if(newVal > -1)
mySystem.poke(COLUP0, newVal);
return myTIA.lastValueWrittenToRegister(COLUP0);
return myTIA.registerValue(COLUP0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -437,7 +437,7 @@ uInt8 TIADebug::coluP1(int newVal)
if(newVal > -1)
mySystem.poke(COLUP1, newVal);
return myTIA.lastValueWrittenToRegister(COLUP1);
return myTIA.registerValue(COLUP1);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -446,7 +446,7 @@ uInt8 TIADebug::coluPF(int newVal)
if(newVal > -1)
mySystem.poke(COLUPF, newVal);
return myTIA.lastValueWrittenToRegister(COLUPF);
return myTIA.registerValue(COLUPF);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -455,7 +455,7 @@ uInt8 TIADebug::coluBK(int newVal)
if(newVal > -1)
mySystem.poke(COLUBK, newVal);
return myTIA.lastValueWrittenToRegister(COLUBK);
return myTIA.registerValue(COLUBK);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -464,7 +464,7 @@ uInt8 TIADebug::nusiz0(int newVal)
if(newVal > -1)
mySystem.poke(NUSIZ0, newVal);
return myTIA.lastValueWrittenToRegister(NUSIZ0);
return myTIA.registerValue(NUSIZ0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -473,7 +473,7 @@ uInt8 TIADebug::nusiz1(int newVal)
if(newVal > -1)
mySystem.poke(NUSIZ1, newVal);
return myTIA.lastValueWrittenToRegister(NUSIZ1);
return myTIA.registerValue(NUSIZ1);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -481,12 +481,12 @@ uInt8 TIADebug::nusizP0(int newVal)
{
if(newVal > -1)
{
uInt8 tmp = myTIA.lastValueWrittenToRegister(NUSIZ0) & ~0x07;
uInt8 tmp = myTIA.registerValue(NUSIZ0) & ~0x07;
tmp |= (newVal & 0x07);
mySystem.poke(NUSIZ0, tmp);
}
return myTIA.lastValueWrittenToRegister(NUSIZ0) & 0x07;
return myTIA.registerValue(NUSIZ0) & 0x07;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -494,12 +494,12 @@ uInt8 TIADebug::nusizP1(int newVal)
{
if(newVal > -1)
{
uInt8 tmp = myTIA.lastValueWrittenToRegister(NUSIZ1) & ~0x07;
uInt8 tmp = myTIA.registerValue(NUSIZ1) & ~0x07;
tmp |= newVal & 0x07;
mySystem.poke(NUSIZ1, tmp);
}
return myTIA.lastValueWrittenToRegister(NUSIZ1) & 0x07;
return myTIA.registerValue(NUSIZ1) & 0x07;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -507,12 +507,12 @@ uInt8 TIADebug::nusizM0(int newVal)
{
if(newVal > -1)
{
uInt8 tmp = myTIA.lastValueWrittenToRegister(NUSIZ0) & ~0x30;
uInt8 tmp = myTIA.registerValue(NUSIZ0) & ~0x30;
tmp |= (newVal & 0x04) << 4;
mySystem.poke(NUSIZ0, tmp);
}
return (myTIA.lastValueWrittenToRegister(NUSIZ0) & 0x30) >> 4;
return (myTIA.registerValue(NUSIZ0) & 0x30) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -520,12 +520,12 @@ uInt8 TIADebug::nusizM1(int newVal)
{
if(newVal > -1)
{
uInt8 tmp = myTIA.lastValueWrittenToRegister(NUSIZ1) & ~0x30;
uInt8 tmp = myTIA.registerValue(NUSIZ1) & ~0x30;
tmp |= (newVal & 0x04) << 4;
mySystem.poke(NUSIZ1, tmp);
}
return (myTIA.lastValueWrittenToRegister(NUSIZ1) & 0x30) >> 4;
return (myTIA.registerValue(NUSIZ1) & 0x30) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -534,7 +534,7 @@ uInt8 TIADebug::grP0(int newVal)
if(newVal > -1)
mySystem.poke(GRP0, newVal);
return myTIA.lastValueWrittenToRegister(GRP0);
return myTIA.registerValue(GRP0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -543,7 +543,7 @@ uInt8 TIADebug::grP1(int newVal)
if(newVal > -1)
mySystem.poke(GRP1, newVal);
return myTIA.lastValueWrittenToRegister(GRP1);
return myTIA.registerValue(GRP1);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -597,7 +597,7 @@ uInt8 TIADebug::ctrlPF(int newVal)
if(newVal > -1)
mySystem.poke(CTRLPF, newVal);
return myTIA.lastValueWrittenToRegister(CTRLPF);
return myTIA.registerValue(CTRLPF);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -605,12 +605,12 @@ uInt8 TIADebug::sizeBL(int newVal)
{
if(newVal > -1)
{
uInt8 tmp = myTIA.lastValueWrittenToRegister(CTRLPF) & ~0x30;
uInt8 tmp = myTIA.registerValue(CTRLPF) & ~0x30;
tmp |= (newVal & 0x04) << 4;
mySystem.poke(CTRLPF, tmp);
}
return (myTIA.lastValueWrittenToRegister(CTRLPF) & 0x30) >> 4;
return (myTIA.registerValue(CTRLPF) & 0x30) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -619,7 +619,7 @@ uInt8 TIADebug::hmP0(int newVal)
if(newVal > -1)
mySystem.poke(HMP0, newVal << 4);
return myTIA.lastValueWrittenToRegister(HMP0) >> 4;
return myTIA.registerValue(HMP0) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -628,7 +628,7 @@ uInt8 TIADebug::hmP1(int newVal)
if(newVal > -1)
mySystem.poke(HMP1, newVal << 4);
return myTIA.lastValueWrittenToRegister(HMP1) >> 4;
return myTIA.registerValue(HMP1) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -637,7 +637,7 @@ uInt8 TIADebug::hmM0(int newVal)
if(newVal > -1)
mySystem.poke(HMM0, newVal << 4);
return myTIA.lastValueWrittenToRegister(HMM0) >> 4;
return myTIA.registerValue(HMM0) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -646,7 +646,7 @@ uInt8 TIADebug::hmM1(int newVal)
if(newVal > -1)
mySystem.poke(HMM1, newVal << 4);
return myTIA.lastValueWrittenToRegister(HMM1) >> 4;
return myTIA.registerValue(HMM1) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -655,7 +655,7 @@ uInt8 TIADebug::hmBL(int newVal)
if(newVal > -1)
mySystem.poke(HMBL, newVal << 4);
return myTIA.lastValueWrittenToRegister(HMBL) >> 4;
return myTIA.registerValue(HMBL) >> 4;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -679,17 +679,23 @@ int TIADebug::clocksThisLine() const
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool TIADebug::vsync() const
{
return myTIA.lastValueWrittenToRegister(VSYNC) & 0x02;
return myTIA.registerValue(VSYNC) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool TIADebug::vblank() const
{
return myTIA.lastValueWrittenToRegister(VBLANK) & 0x02;
return myTIA.registerValue(VBLANK) & 0x02;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::colorSwatch(uInt8 c)
shared_ptr<DelayQueueIterator> TIADebug::delayQueueIterator() const
{
return shared_ptr<DelayQueueIterator>(new DelayQueueIterator(myTIA.myDelayQueue));
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::colorSwatch(uInt8 c) const
{
string ret;
@ -736,6 +742,54 @@ string TIADebug::booleanWithLabel(string label, bool value)
return "-" + label;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::debugColors() const
{
ostringstream buf;
if(myTIA.myFrameManager.layout() == FrameLayout::ntsc)
{
buf << " Red " << colorSwatch(myTIA.P0ColorNTSC) << " Player 0\n"
<< " Orange " << colorSwatch(myTIA.M0ColorNTSC) << " Missile 0\n"
<< " Yellow " << colorSwatch(myTIA.P1ColorNTSC) << " Player 1\n"
<< " Green " << colorSwatch(myTIA.M1ColorNTSC) << " Missile 1\n"
<< " Blue " << colorSwatch(myTIA.BLColorNTSC) << " Ball\n"
<< " Purple " << colorSwatch(myTIA.PFColorNTSC) << " Playfield\n"
<< " Grey " << colorSwatch(myTIA.BKColorNTSC) << " Background\n"
<< " White " << colorSwatch(myTIA.HBLANKColor) << " HMOVE\n";
}
else
{
buf << " Red " << colorSwatch(myTIA.P0ColorPAL) << " Player 0\n"
<< " Orange " << colorSwatch(myTIA.M0ColorPAL) << " Missile 0\n"
<< " Yellow " << colorSwatch(myTIA.P1ColorPAL) << " Player 1\n"
<< " Green " << colorSwatch(myTIA.M1ColorPAL) << " Missile 1\n"
<< " Blue " << colorSwatch(myTIA.BLColorPAL) << " Ball\n"
<< " Purple " << colorSwatch(myTIA.PFColorPAL) << " Playfield\n"
<< " Grey " << colorSwatch(myTIA.BKColorPAL) << " Background\n"
<< " White " << colorSwatch(myTIA.HBLANKColor) << " HMOVE\n";
}
return buf.str();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::palette() const
{
ostringstream buf;
buf << " 0 2 4 6 8 A C E\n";
uInt8 c = 0;
for(uInt16 row = 0; row < 16; ++row)
{
buf << " " << Common::Base::HEX1 << row << " ";
for(uInt16 col = 0; col < 8; ++col, c += 2)
buf << colorSwatch(c);
buf << endl;
}
return buf.str();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string TIADebug::toString()
{
@ -770,11 +824,11 @@ string TIADebug::toString()
<< "COLUxx: "
<< "P0=$" << Common::Base::HEX2 << state.coluRegs[0] << "/"
<< colorSwatch(state.coluRegs[0])
<< "P1=$" << Common::Base::HEX2 << state.coluRegs[1] << "/"
<< " P1=$" << Common::Base::HEX2 << state.coluRegs[1] << "/"
<< colorSwatch(state.coluRegs[1])
<< "PF=$" << Common::Base::HEX2 << state.coluRegs[2] << "/"
<< " PF=$" << Common::Base::HEX2 << state.coluRegs[2] << "/"
<< colorSwatch(state.coluRegs[2])
<< "BK=$" << Common::Base::HEX2 << state.coluRegs[3] << "/"
<< " BK=$" << Common::Base::HEX2 << state.coluRegs[3] << "/"
<< colorSwatch(state.coluRegs[3])
<< endl
<< "P0: GR=%" << Common::Base::toString(state.gr[P0], Common::Base::F_2_8)

View File

@ -23,6 +23,8 @@ class TiaDebug;
class TIA;
#include "DebuggerSystem.hxx"
#include "DelayQueueIterator.hxx"
#include "bspf.hxx"
// Function type for TIADebug instance methods
class TIADebug;
@ -57,6 +59,8 @@ class TIADebug : public DebuggerSystem
void saveOldState() override;
string toString() override;
string debugColors() const;
string palette() const;
// TIA byte (or part of a byte) registers
uInt8 nusiz0(int newVal = -1);
@ -137,7 +141,7 @@ class TIADebug : public DebuggerSystem
// TIA strobe registers
void strobeWsync() { mySystem.poke(WSYNC, 0); }
void strobeRsync() { mySystem.poke(RSYNC, 0); } // not emulated!
void strobeRsync() { mySystem.poke(RSYNC, 0); }
void strobeResP0() { mySystem.poke(RESP0, 0); }
void strobeResP1() { mySystem.poke(RESP1, 0); }
void strobeResM0() { mySystem.poke(RESM0, 0); }
@ -156,9 +160,11 @@ class TIADebug : public DebuggerSystem
int vsyncAsInt() const { return int(vsync()); } // so we can use _vsync pseudo-register
int vblankAsInt() const { return int(vblank()); } // so we can use _vblank pseudo-register
shared_ptr<DelayQueueIterator> delayQueueIterator() const;
private:
/** Display a color patch for color at given index in the palette */
string colorSwatch(uInt8 c);
string colorSwatch(uInt8 c) const;
/** Get specific bits in the collision register (used by collXX_XX) */
bool collision(CollisionBit id) const;

View File

@ -54,7 +54,7 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
xpos += lwidth + myPCGrid->getWidth() + 10;
myPCLabel = new EditTextWidget(boss, nfont, xpos, ypos, (max_w - xpos + x) - 10,
fontHeight+1, "");
myPCLabel->setEditable(false);
myPCLabel->setEditable(false, true);
// Create a 1x4 grid with labels for the other CPU registers
xpos = x + lwidth; ypos += myPCGrid->getHeight() + 1;
@ -89,7 +89,7 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
{
myCpuDataSrc[i] = new EditTextWidget(boss, nfont, xpos, src_y, src_w,
fontHeight+1, "");
myCpuDataSrc[i]->setEditable(false);
myCpuDataSrc[i]->setEditable(false, true);
src_y += fontHeight+2;
}
int swidth = lfont.getStringWidth("Source Address");

View File

@ -178,6 +178,13 @@ void DataGridWidget::setList(int a, int v)
setList(alist, vlist, changed);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DataGridWidget::setEditable(bool editable, bool hiliteBG)
{
// Override parent method; enable hilite when widget is not editable
EditableWidget::setEditable(editable, hiliteBG);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DataGridWidget::setHiliteList(const BoolArray& hilitelist)
{

View File

@ -54,6 +54,8 @@ class DataGridWidget : public EditableWidget
void setList(int a, int v, bool changed);
void setList(int a, int v); // automatically calculate if changed
void setEditable(bool editable, bool hiliteBG = true) override;
void setHiliteList(const BoolArray& hilitelist);
void setNumRows(int rows);

View File

@ -341,7 +341,7 @@ void DebuggerDialog::addStatusArea()
myMessageBox = new EditTextWidget(this, *myLFont,
xpos, ypos, myTiaZoom->getWidth(),
myLFont->getLineHeight(), "");
myMessageBox->setEditable(false);
myMessageBox->setEditable(false, false);
myMessageBox->clearFlags(WIDGET_RETAIN_FOCUS);
myMessageBox->setTextColor(kTextColorEm);
}

View File

@ -0,0 +1,93 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "DelayQueueWidget.hxx"
#include "DelayQueueIterator.hxx"
#include "OSystem.hxx"
#include "TIATypes.hxx"
#include "Debugger.hxx"
#include "Base.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DelayQueueWidget::DelayQueueWidget(
GuiObject* boss,
const GUI::Font& font,
int x, int y
) : Widget(boss, font, x, y, 0, 0)
{
_textcolor = kTextColor;
_w = 20 * font.getMaxCharWidth() + 6;
_h = 3 * font.getLineHeight() + 6;
myLines[0] = myLines[1] = myLines[2];
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DelayQueueWidget::loadConfig() {
shared_ptr<DelayQueueIterator> delayQueueIterator =
instance().debugger().tiaDebug().delayQueueIterator();
using Common::Base;
for (uInt8 i = 0; i < 3; i++) {
if (delayQueueIterator->isValid() && delayQueueIterator->address() < 64) {
stringstream ss;
ss
<< int(delayQueueIterator->delay())
<< " clk, $"
<< Base::toString(delayQueueIterator->value(), Base::Format::F_16_2)
<< " -> "
<< instance().debugger().cartDebug().getLabel(
delayQueueIterator->address(), false);
myLines[i] = ss.str();
delayQueueIterator->next();
}
else
myLines[i] = "";
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DelayQueueWidget::drawWidget(bool hilite)
{
FBSurface& surface = _boss->dialog().surface();
int y = _y,
x = _x,
w = _w,
lineHeight = _font.getLineHeight();
surface.frameRect(x, y, w, _h, kShadowColor);
y += 1;
x += 1;
w -= 1;
surface.fillRect(x, y, w - 1, _h - 2, kBGColorLo);
y += 2;
x += 2;
w -= 3;
surface.drawString(_font, myLines[0], x, y, w, _textcolor);
y += lineHeight;
surface.drawString(_font, myLines[1], x, y, w, _textcolor);
y += lineHeight;
surface.drawString(_font, myLines[2], x, y, w, _textcolor);
}

View File

@ -0,0 +1,49 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef DELAY_QUEUE_WIDGET_HXX
#define DELAY_QUEUE_WIDGET_HXX
#include "Widget.hxx"
class DelayQueueWidget : public Widget
{
public:
DelayQueueWidget(
GuiObject* boss,
const GUI::Font& font,
int x, int y
);
virtual ~DelayQueueWidget() = default;
void loadConfig() override;
protected:
void drawWidget(bool hilite) override;
private:
string myLines[3];
private:
DelayQueueWidget() = delete;
DelayQueueWidget(const DelayQueueWidget&) = delete;
DelayQueueWidget(DelayQueueWidget&&) = delete;
DelayQueueWidget& operator=(const DelayQueueWidget&);
DelayQueueWidget& operator=(DelayQueueWidget&&);
};
#endif // DELAY_QUEUE_WIDGET_HXX

View File

@ -240,11 +240,19 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
}
else
{
// we got a delimiter, so this must be a label or a function
const Debugger& dbg = instance().debugger();
// Special case for 'help' command
if(BSPF::startsWithIgnoreCase(str, "help"))
{
instance().debugger().parser().getCompletions(str + lastDelimPos + 1, list);
}
else
{
// we got a delimiter, so this must be a label or a function
const Debugger& dbg = instance().debugger();
dbg.cartDebug().getCompletions(str + lastDelimPos + 1, list);
dbg.getCompletions(str + lastDelimPos + 1, list);
dbg.cartDebug().getCompletions(str + lastDelimPos + 1, list);
dbg.getCompletions(str + lastDelimPos + 1, list);
}
if(list.size() < 1)
break;
@ -922,19 +930,13 @@ string PromptWidget::getCompletionPrefix(const StringList& completions, string p
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PromptWidget::clearScreen()
{
// Initialize start position and history
// Initialize start position
_currentPos = 0;
_scrollLine = _linesPerPage - 1;
_firstLineInBuffer = 0;
_promptStartPos = _promptEndPos = -1;
memset(_buffer, 0, kBufferSize * sizeof(int));
_historyIndex = 0;
_historyLine = 0;
_historySize = 0;
for (int i = 0; i < kHistorySize; i++)
_history[i][0] = '\0';
if(!_firstTime)
updateScrollBuffer();
}

View File

@ -77,10 +77,9 @@ class PromptWidget : public Widget, public CommandSender
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
// Account for the extra width of embedded scrollbar
virtual int getWidth() const override;
virtual bool wantsFocus() { return true; }
int getWidth() const override;
bool wantsFocus() const override { return true; }
void loadConfig() override;
private:

View File

@ -142,7 +142,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
xpos += 6*myFontWidth + 5;
myLabel = new EditTextWidget(boss, nfont, xpos, ypos-2, xpos_r-xpos,
myLineHeight);
myLabel->setEditable(false);
myLabel->setEditable(false, true);
// Inputbox which will pop up when searching RAM
StringList labels = { "Search: " };

View File

@ -47,7 +47,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
kTextAlignLeft);
xpos += lwidth;
myFrameCount = new EditTextWidget(boss, nfont, xpos, ypos-1, fwidth, lineHeight, "");
myFrameCount->setEditable(false);
myFrameCount->setEditable(false, true);
xpos = x; ypos += lineHeight + 5;
new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight,
@ -55,7 +55,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
kTextAlignLeft);
xpos += lwidth;
myFrameCycles = new EditTextWidget(boss, nfont, xpos, ypos-1, fwidth, lineHeight, "");
myFrameCycles->setEditable(false);
myFrameCycles->setEditable(false, true);
xpos = x + 20; ypos += lineHeight + 8;
myVSync = new CheckboxWidget(boss, lfont, xpos, ypos-3, "VSync", 0);
@ -73,7 +73,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
myScanlineCount = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth,
lineHeight, "");
myScanlineCount->setEditable(false);
myScanlineCount->setEditable(false, true);
ypos += lineHeight + 5;
new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight,
@ -81,7 +81,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
myScanlineCycles = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth,
lineHeight, "");
myScanlineCycles->setEditable(false);
myScanlineCycles->setEditable(false, true);
ypos += lineHeight + 5;
new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight,
@ -89,7 +89,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
myPixelPosition = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth,
lineHeight, "");
myPixelPosition->setEditable(false);
myPixelPosition->setEditable(false, true);
ypos += lineHeight + 5;
new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight,
@ -97,7 +97,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont,
myColorClocks = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth,
lineHeight, "");
myColorClocks->setEditable(false);
myColorClocks->setEditable(false, true);
// Calculate actual dimensions
_w = myColorClocks->getAbsX() + myColorClocks->getWidth() - x;

View File

@ -42,10 +42,10 @@ class TiaOutputWidget : public Widget, public CommandSender
// For example, clicking an area may cause an action
// (fill to this scanline, etc).
/*
virtual void handleMouseUp(int x, int y, int button, int clickCount) override;
virtual void handleMouseWheel(int x, int y, int direction) override;
virtual bool handleKeyDown(StellaKey key, StellaMod mod) override;
virtual bool handleKeyUp(StellaKey key, StellaMod mod) override;
void handleMouseUp(int x, int y, int button, int clickCount) override;
void handleMouseWheel(int x, int y, int direction) override;
bool handleKeyDown(StellaKey key, StellaMod mod) override;
bool handleKeyUp(StellaKey key, StellaMod mod) override;
*/
private:
unique_ptr<ContextMenu> myMenu;
@ -62,7 +62,7 @@ class TiaOutputWidget : public Widget, public CommandSender
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void drawWidget(bool hilite) override;
bool wantsFocus() { return false; }
bool wantsFocus() const override { return false; }
// Following constructors and assignment operators not supported
TiaOutputWidget() = delete;

View File

@ -27,7 +27,7 @@
#include "ToggleBitWidget.hxx"
#include "TogglePixelWidget.hxx"
#include "Widget.hxx"
#include "DelayQueueWidget.hxx"
#include "TiaWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -237,7 +237,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont,
xpos += myNusizP0->getWidth() + 5;
myNusizP0Text = new EditTextWidget(boss, nfont, xpos, ypos, 23*fontWidth,
lineHeight, "");
myNusizP0Text->setEditable(false);
myNusizP0Text->setEditable(false, true);
////////////////////////////
// P1 register info
@ -304,7 +304,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont,
xpos += myNusizP1->getWidth() + 5;
myNusizP1Text = new EditTextWidget(boss, nfont, xpos, ypos, 23*fontWidth,
lineHeight, "");
myNusizP1Text->setEditable(false);
myNusizP1Text->setEditable(false, true);
////////////////////////////
// M0 register info
@ -523,8 +523,16 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont,
myPriorityPF->setID(kPriorityPFID);
addFocusWidget(myPriorityPF);
xpos = 10;
ypos += 2 * lineHeight;
t = new StaticTextWidget(boss, lfont, xpos, ypos, 14*fontWidth, fontHeight,
"Queued Writes:", kTextAlignLeft);
xpos += t->getWidth() + 10;
myDelayQueueWidget = new DelayQueueWidget(boss, lfont, xpos, ypos);
// How to handle undriven pins
xpos = 10; ypos += 2*lineHeight;
xpos = 10; ypos += (myDelayQueueWidget->getHeight() + lineHeight);
myUndrivenPins = new CheckboxWidget(boss, lfont, xpos, ypos+1,
"Drive unused TIA pins randomly on a read/peek", kPPinCmd);
myUndrivenPins->setTarget(this);
@ -879,20 +887,16 @@ void TiaWidget::loadConfig()
////////////////////////////
// PF register info
////////////////////////////
int pfx_bgcolor = !tia.priorityPF() ? state.coluRegs[3] : -1;
// PF0
myPF[0]->setColor(state.coluRegs[2]);
myPF[0]->setBackgroundColor(pfx_bgcolor);
myPF[0]->setIntState(state.pf[0], true); // reverse bit order
// PF1
myPF[1]->setColor(state.coluRegs[2]);
myPF[1]->setBackgroundColor(pfx_bgcolor);
myPF[1]->setIntState(state.pf[1], false);
// PF2
myPF[2]->setColor(state.coluRegs[2]);
myPF[2]->setBackgroundColor(pfx_bgcolor);
myPF[2]->setIntState(state.pf[2], true); // reverse bit order
// Reflect
@ -906,6 +910,8 @@ void TiaWidget::loadConfig()
// Undriven pins
myUndrivenPins->setState(tia.tia().driveUnusedPinsRandom());
myDelayQueueWidget->loadConfig();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -26,6 +26,7 @@ class ToggleBitWidget;
class TogglePixelWidget;
class EditTextWidget;
class ColorWidget;
class DelayQueueWidget;
#include "Widget.hxx"
#include "Command.hxx"
@ -91,6 +92,8 @@ class TiaWidget : public Widget, public CommandSender
CheckboxWidget* myUndrivenPins;
DelayQueueWidget* myDelayQueueWidget;
// ID's for the various widgets
// We need ID's, since there are more than one of several types of widgets
enum {

View File

@ -48,7 +48,7 @@ class TiaZoomWidget : public Widget, public CommandSender
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void drawWidget(bool hilite) override;
bool wantsFocus() { return true; }
bool wantsFocus() const override { return true; }
private:
unique_ptr<ContextMenu> myMenu;

View File

@ -101,14 +101,22 @@ void ToggleBitWidget::drawWidget(bool hilite)
else
buffer = _offList[pos];
// Highlight changes
if(_changedList[pos])
if(isEditable())
{
s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kDbgChangedColor);
s.drawString(_font, buffer, x, y, _colWidth, kDbgChangedTextColor);
// Highlight changes
if(_changedList[pos])
{
s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kDbgChangedColor);
s.drawString(_font, buffer, x, y, _colWidth, kDbgChangedTextColor);
}
else
s.drawString(_font, buffer, x, y, _colWidth, kTextColor);
}
else
{
s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kBGColorLo);
s.drawString(_font, buffer, x, y, _colWidth, kTextColor);
}
}
}
}

View File

@ -39,10 +39,11 @@ class ToggleWidget : public Widget, public CommandSender
const BoolArray& getState() { return _stateList; }
bool getSelectedState() const { return _stateList[_selectedItem]; }
virtual bool wantsFocus() { return true; }
bool wantsFocus() const override { return true; }
int colWidth() const { return _colWidth; }
void setEditable(bool editable) { _editable = editable; }
bool isEditable() const { return _editable; }
protected:

View File

@ -71,7 +71,8 @@ MODULE_OBJS := \
src/debugger/gui/KeyboardWidget.o \
src/debugger/gui/GenesisWidget.o \
src/debugger/gui/AtariVoxWidget.o \
src/debugger/gui/SaveKeyWidget.o
src/debugger/gui/SaveKeyWidget.o \
src/debugger/gui/DelayQueueWidget.o
MODULE_DIRS += \
src/debugger/gui

View File

@ -198,11 +198,6 @@ class Controller : public Serializable
Controller::Type xtype, int xid, Controller::Type ytype, int yid)
{ return false; }
/**
Returns the name of this controller.
*/
virtual string name() const override { return myName; }
/**
Returns more detailed information about this controller.
*/
@ -237,6 +232,11 @@ class Controller : public Serializable
*/
bool load(Serializer& in) override;
/**
Returns the name of this controller.
*/
string name() const override { return myName; }
public:
/// Constant which represents maximum resistance for analog pins
static constexpr Int32 maximumResistance = 0x7FFFFFFF;

View File

@ -283,7 +283,7 @@ class AbstractFSNode
// AbstractFSNode(AbstractFSNode&&) = default;
AbstractFSNode& operator=(const AbstractFSNode&) = default;
// AbstractFSNode& operator=(AbstractFSNode&&) = default;
virtual ~AbstractFSNode() { }
virtual ~AbstractFSNode() = default;
/*
* Indicates whether the object referred by this path exists in the

View File

@ -885,6 +885,7 @@ void FrameBuffer::VideoModeList::setZoom(uInt32 zoom)
// Base colors
kColor Normal foreground color (non-text)
kBGColor Normal background color (non-text)
kBGColorLo Disabled background color (non-text)
kShadowColor Item is disabled
kTextColor Normal text color
kTextColorHi Highlighted text color
@ -915,7 +916,7 @@ void FrameBuffer::VideoModeList::setZoom(uInt32 zoom)
*/
uInt32 FrameBuffer::ourGUIColors[2][kNumColors-256] = {
// Standard
{ 0x686868, 0x000000, 0x404040, 0x000000, 0x62a108, 0x9f0000,
{ 0x686868, 0x000000, 0xdccfa5, 0x404040, 0x000000, 0x62a108, 0x9f0000,
0xc9af7c, 0xf0f0cf, 0xc80000,
0xac3410, 0xd55941, 0xffffff, 0xffd652,
0xac3410,
@ -925,7 +926,7 @@ uInt32 FrameBuffer::ourGUIColors[2][kNumColors-256] = {
},
// Classic
{ 0x686868, 0x000000, 0x404040, 0x20a020, 0x00ff00, 0xc80000,
{ 0x686868, 0x000000, 0x404040, 0x404040, 0x20a020, 0x00ff00, 0xc80000,
0x000000, 0x000000, 0xc80000,
0x000000, 0x000000, 0x20a020, 0x00ff00,
0x20a020,

View File

@ -61,6 +61,7 @@ enum MessagePosition {
enum {
kColor = 256,
kBGColor,
kBGColorLo,
kShadowColor,
kTextColor,
kTextColorHi,

View File

@ -26,7 +26,9 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
myMPaddleIDX(-1),
myMPaddleIDY(-1)
{
myAnalogPinValue[Nine] = myAnalogPinValue[Five] = 0;
// We must start with minimum resistance; see commit
// 38b452e1a047a0dca38c5bcce7c271d40f76736e for more information
myAnalogPinValue[Nine] = myAnalogPinValue[Five] = minimumResistance;
// The following logic reflects that mapping paddles to different
// devices can be extremely complex

View File

@ -24,6 +24,9 @@
class DelayQueue : public Serializable
{
public:
friend class DelayQueueIterator;
public:
DelayQueue(uInt8 length, uInt8 size);

View File

@ -0,0 +1,94 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "DelayQueueIterator.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DelayQueueIterator::DelayQueueIterator(const DelayQueue& delayQueue)
: myDelayQueue(delayQueue),
myDelayCycle(0)
{
while (isValid()) {
const DelayQueueMember& currentMember = myDelayQueue.myMembers.at(currentIndex());
myCurrentIterator = currentMember.begin();
if (myCurrentIterator == currentMember.end())
myDelayCycle++;
else
break;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool DelayQueueIterator::isValid() const
{
return myDelayCycle < myDelayQueue.myMembers.size();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 DelayQueueIterator::delay() const
{
if (!isValid()) {
throw runtime_error("delay called on invalid DelayQueueInterator");
}
return myDelayCycle;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 DelayQueueIterator::address() const
{
if (!isValid()) {
throw runtime_error("address called on invalid DelayQueueInterator");
}
return myCurrentIterator->address;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 DelayQueueIterator::value() const
{
if (!isValid()) {
throw runtime_error("value called on invalid DelayQueueIterator");
}
return myCurrentIterator->value;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool DelayQueueIterator::next()
{
if (!isValid()) {
return false;
}
if (++myCurrentIterator == myDelayQueue.myMembers.at(currentIndex()).end()) {
myDelayCycle++;
while (isValid()) {
const DelayQueueMember& currentMember = myDelayQueue.myMembers.at(currentIndex());
myCurrentIterator = currentMember.begin();
if (myCurrentIterator == currentMember.end())
myDelayCycle++;
else
break;
}
}
return isValid();
}

View File

@ -0,0 +1,52 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef TIA_DELAY_QUEUE_ITERATOR
#define TIA_DELAY_QUEUE_ITERATOR
#include "bspf.hxx"
#include "DelayQueue.hxx"
#include "DelayQueueMember.hxx"
class DelayQueueIterator
{
public:
DelayQueueIterator(const DelayQueue&);
bool isValid() const;
uInt8 delay() const;
uInt8 address() const;
uInt8 value() const;
bool next();
private:
uInt8 currentIndex() const {
return (myDelayQueue.myIndex + myDelayCycle) % myDelayQueue.myMembers.size();
}
private:
const DelayQueue& myDelayQueue;
uInt8 myDelayCycle;
DelayQueueMember::iterator myCurrentIterator;
};
#endif // TIA_DELAY_QUEUE_ITERATOR

View File

@ -35,17 +35,21 @@ class DelayQueueMember : public Serializable
DelayQueueMember(DelayQueueMember&&) = default;
DelayQueueMember& operator=(DelayQueueMember&&) = default;
public:
typedef vector<Entry>::const_iterator iterator;
public:
void push(uInt8 address, uInt8 value);
void remove(uInt8 address);
vector<Entry>::const_iterator begin() const {
iterator begin() const {
return myEntries.begin();
}
vector<Entry>::const_iterator end() const {
iterator end() const {
return (mySize < myEntries.size()) ? (myEntries.begin() + mySize) : myEntries.end();
}

View File

@ -202,7 +202,6 @@ void Missile::tick(uInt8 hclock)
myEffectiveWidth = myWidth;
break;
}
}
if (++myRenderCounter >= (myIsMoving ? myEffectiveWidth : myWidth)) myIsRendering = false;

View File

@ -425,7 +425,6 @@ bool TIA::poke(uInt16 address, uInt8 value)
updateEmulation();
address &= 0x3F;
myShadowRegisters[address] = value;
switch (address)
{
@ -440,14 +439,17 @@ bool TIA::poke(uInt16 address, uInt8 value)
mySystem->incrementCycles(mySubClock / 3);
mySubClock %= 3;
}
myShadowRegisters[address] = value;
break;
case RSYNC:
applyRsync();
myShadowRegisters[address] = value;
break;
case VSYNC:
myFrameManager.setVsync(value & 0x02);
myShadowRegisters[address] = value;
break;
case VBLANK:
@ -465,21 +467,27 @@ bool TIA::poke(uInt16 address, uInt8 value)
// FIXME - rework this when we add the new sound core
case AUDV0:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
case AUDV1:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
case AUDF0:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
case AUDF1:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
case AUDC0:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
case AUDC1:
mySound.set(address, value, mySystem->cycles());
myShadowRegisters[address] = value;
break;
////////////////////////////////////////////////////////////
@ -490,6 +498,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
case COLUBK:
myLinesSinceChange = 0;
myBackground.setColor(value & 0xFE);
myShadowRegisters[address] = value;
break;
case COLUP0:
@ -498,6 +507,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
myPlayfield.setColorP0(value);
myMissile0.setColor(value);
myPlayer0.setColor(value);
myShadowRegisters[address] = value;
break;
case COLUP1:
@ -506,6 +516,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
myPlayfield.setColorP1(value);
myMissile1.setColor(value);
myPlayer1.setColor(value);
myShadowRegisters[address] = value;
break;
case CTRLPF:
@ -514,6 +525,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
(value & 0x02) ? Priority::score : Priority::normal;
myPlayfield.ctrlpf(value);
myBall.ctrlpf(value);
myShadowRegisters[address] = value;
break;
case COLUPF:
@ -521,6 +533,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
value &= 0xFE;
myPlayfield.setColor(value);
myBall.setColor(value);
myShadowRegisters[address] = value;
break;
case PF0:
@ -567,33 +580,39 @@ bool TIA::poke(uInt16 address, uInt8 value)
case RESM0:
myLinesSinceChange = 0;
myMissile0.resm(resxCounter(), myHstate == HState::blank);
myShadowRegisters[address] = value;
break;
case RESM1:
myLinesSinceChange = 0;
myMissile1.resm(resxCounter(), myHstate == HState::blank);
myShadowRegisters[address] = value;
break;
case RESMP0:
myLinesSinceChange = 0;
myMissile0.resmp(value, myPlayer0);
myShadowRegisters[address] = value;
break;
case RESMP1:
myLinesSinceChange = 0;
myMissile1.resmp(value, myPlayer1);
myShadowRegisters[address] = value;
break;
case NUSIZ0:
myLinesSinceChange = 0;
myMissile0.nusiz(value);
myPlayer0.nusiz(value, myHstate == HState::blank);
myShadowRegisters[address] = value;
break;
case NUSIZ1:
myLinesSinceChange = 0;
myMissile1.nusiz(value);
myPlayer1.nusiz(value, myHstate == HState::blank);
myShadowRegisters[address] = value;
break;
case HMM0:
@ -636,11 +655,13 @@ bool TIA::poke(uInt16 address, uInt8 value)
case RESP0:
myLinesSinceChange = 0;
myPlayer0.resp(resxCounter());
myShadowRegisters[address] = value;
break;
case RESP1:
myLinesSinceChange = 0;
myPlayer1.resp(resxCounter());
myShadowRegisters[address] = value;
break;
case REFP0:
@ -654,11 +675,13 @@ bool TIA::poke(uInt16 address, uInt8 value)
case VDELP0:
myLinesSinceChange = 0;
myPlayer0.vdelp(value);
myShadowRegisters[address] = value;
break;
case VDELP1:
myLinesSinceChange = 0;
myPlayer1.vdelp(value);
myShadowRegisters[address] = value;
break;
case HMP0:
@ -676,11 +699,13 @@ bool TIA::poke(uInt16 address, uInt8 value)
case RESBL:
myLinesSinceChange = 0;
myBall.resbl(resxCounter());
myShadowRegisters[address] = value;
break;
case VDELBL:
myLinesSinceChange = 0;
myBall.vdelbl(value);
myShadowRegisters[address] = value;
break;
case HMBL:
@ -690,6 +715,7 @@ bool TIA::poke(uInt16 address, uInt8 value)
case CXCLR:
myLinesSinceChange = 0;
myCollisionMask = 0;
myShadowRegisters[address] = value;
break;
}
@ -911,7 +937,7 @@ void TIA::updateScanlineByTrace(int target)
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 TIA::lastValueWrittenToRegister(uInt8 reg) const
uInt8 TIA::registerValue(uInt8 reg) const
{
return reg < 64 ? myShadowRegisters[reg] : 0;
}
@ -1042,10 +1068,21 @@ void TIA::tickHframe()
myPlayfield.tick(x);
if (lineNotCached)
renderSprites();
// Render sprites
if (lineNotCached) {
myPlayer0.render();
myPlayer1.render();
myMissile0.render(myHctr);
myMissile1.render(myHctr);
myBall.render();
}
tickSprites();
// Tick sprites
myMissile0.tick(myHctr);
myMissile1.tick(myHctr);
myPlayer0.tick();
myPlayer1.tick();
myBall.tick();
if (myFrameManager.isRendering())
renderPixel(x, y, lineNotCached);
@ -1064,26 +1101,6 @@ void TIA::applyRsync()
myHctr = 225;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIA::renderSprites()
{
myPlayer0.render();
myPlayer1.render();
myMissile0.render(myHctr);
myMissile1.render(myHctr);
myBall.render();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIA::tickSprites()
{
myMissile0.tick(myHctr);
myMissile1.tick(myHctr);
myPlayer0.tick();
myPlayer1.tick();
myBall.tick();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIA::nextLine()
{
@ -1178,6 +1195,9 @@ void TIA::clearHmoveComb()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIA::delayedWrite(uInt8 address, uInt8 value)
{
if (address < 64)
myShadowRegisters[address] = value;
switch (address)
{
case VBLANK:

View File

@ -312,7 +312,7 @@ class TIA : public Device, public PlayfieldPositionProvider
/**
Retrieve the last value written to a certain register
*/
uInt8 lastValueWrittenToRegister(uInt8 reg) const;
uInt8 registerValue(uInt8 reg) const;
/**
Get the current x value
@ -349,21 +349,23 @@ class TIA : public Device, public PlayfieldPositionProvider
enum Priority {pfp, score, normal};
enum FixedColors {
P0ColorNTSC = 0x30,
P1ColorNTSC = 0x16,
M0ColorNTSC = 0x38,
M1ColorNTSC = 0x12,
BLColorNTSC = 0x7e,
PFColorNTSC = 0x76,
BKColorNTSC = 0x0a,
P0ColorPAL = 0x62,
P1ColorPAL = 0x26,
M0ColorPAL = 0x68,
M1ColorPAL = 0x2e,
BLColorPAL = 0xde,
PFColorPAL = 0xd8,
BKColorPAL = 0x1c,
HBLANKColor = 0x0e
P0ColorNTSC = 0x30, // red
M0ColorNTSC = 0x38, // orange
P1ColorNTSC = 0x1c, // yellow
M1ColorNTSC = 0xc4, // green
BLColorNTSC = 0x9e, // blue
PFColorNTSC = 0x66, // purple
BKColorNTSC = 0x0a, // grey
P0ColorPAL = 0x62, // red
M0ColorPAL = 0x4a, // orange
P1ColorPAL = 0x2e, // yellow
M1ColorPAL = 0x34, // green
BLColorPAL = 0xbc, // blue
PFColorPAL = 0xa6, // purple
BKColorPAL = 0x0a, // grey
HBLANKColor = 0x0e // white
};
private:
@ -386,10 +388,6 @@ class TIA : public Device, public PlayfieldPositionProvider
void updateCollision();
void renderSprites();
void tickSprites();
void renderPixel(uInt32 x, uInt32 y, bool lineNotCached);
void clearHmoveComb();

View File

@ -13,8 +13,8 @@ MODULE_OBJS := \
src/emucore/tia/Background.o \
src/emucore/tia/LatchedInput.o \
src/emucore/tia/PaddleReader.o \
src/emucore/tia/VblankManager.o
src/emucore/tia/VblankManager.o \
src/emucore/tia/DelayQueueIterator.o
MODULE_DIRS += \
src/emucore/tia

View File

@ -40,7 +40,7 @@ class ComboDialog : public Dialog
void saveConfig() override;
void setDefaults() override;
virtual void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
private:
Event::Type myComboEvent;

View File

@ -61,13 +61,19 @@ void EditableWidget::setText(const string& str, bool)
setDirty();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EditableWidget::setEditable(bool editable)
void EditableWidget::setEditable(bool editable, bool hiliteBG)
{
_editable = editable;
if(_editable)
{
setFlags(WIDGET_WANTS_RAWDATA | WIDGET_RETAIN_FOCUS);
_bgcolor = kWidColor;
}
else
{
clearFlags(WIDGET_WANTS_RAWDATA | WIDGET_RETAIN_FOCUS);
_bgcolor = hiliteBG ? kBGColorLo : kWidColor;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -52,13 +52,13 @@ class EditableWidget : public Widget, public CommandSender
const string& getText() const { return _editString; }
bool isEditable() const { return _editable; }
void setEditable(bool editable);
virtual void setEditable(bool editable, bool hiliteBG = false);
bool handleText(char text) override;
bool handleKeyDown(StellaKey key, StellaMod mod) override;
// We only want to focus this widget when we can edit its contents
virtual bool wantsFocus() const { return _editable; }
bool wantsFocus() const override { return _editable; }
// Set filter used to test whether a character can be inserted
void setTextFilter(const TextFilter& filter) { _filter = filter; }

View File

@ -189,11 +189,6 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent,
setListFilters();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LauncherDialog::~LauncherDialog()
{
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const string& LauncherDialog::selectedRomMD5()
{

View File

@ -55,7 +55,7 @@ class LauncherDialog : public Dialog
public:
LauncherDialog(OSystem& osystem, DialogContainer& parent,
int x, int y, int w, int h);
virtual ~LauncherDialog();
virtual ~LauncherDialog() = default;
/**
Get MD5sum for the currently selected file

View File

@ -58,7 +58,7 @@ class PopUpWidget : public Widget, public CommandSender
const string& getSelectedName() const { return myMenu->getSelectedName(); }
const Variant& getSelectedTag() const { return myMenu->getSelectedTag(); }
bool wantsFocus() { return true; }
bool wantsFocus() const override { return true; }
protected:
void handleMouseDown(int x, int y, int button, int clickCount) override;

View File

@ -29,6 +29,7 @@ class StringListWidget : public ListWidget
virtual ~StringListWidget() = default;
void setList(const StringList& list);
bool wantsFocus() const override { return true; }
protected:
void drawWidget(bool hilite) override;

View File

@ -486,8 +486,15 @@ void CheckboxWidget::handleMouseUp(int x, int y, int button, int clickCount)
void CheckboxWidget::setEditable(bool editable)
{
_editable = editable;
if(!_editable)
if(_editable)
{
_bgcolor = kWidColor;
}
else
{
_bgcolor = kBGColorLo;
setFill(CheckboxWidget::Inactive);
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -96,7 +96,7 @@ class Widget : public GuiObject
bool isEnabled() const { return _flags & WIDGET_ENABLED; }
bool isVisible() const override { return !(_flags & WIDGET_INVISIBLE); }
bool wantsFocus() const { return _flags & WIDGET_RETAIN_FOCUS; }
virtual bool wantsFocus() const { return _flags & WIDGET_RETAIN_FOCUS; }
bool wantsTab() const { return _flags & WIDGET_WANTS_TAB; }
bool wantsRaw() const { return _flags & WIDGET_WANTS_RAWDATA; }

View File

@ -537,6 +537,11 @@
DCE5CDE31BA10024005CD08A /* RiotRamWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE5CDE11BA10024005CD08A /* RiotRamWidget.cxx */; };
DCE5CDE41BA10024005CD08A /* RiotRamWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE5CDE21BA10024005CD08A /* RiotRamWidget.hxx */; };
DCE8B1871E7E03B300189864 /* FrameLayout.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE8B1861E7E03B300189864 /* FrameLayout.hxx */; };
DCEC58581E945125002F0246 /* DelayQueueWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCEC58561E945125002F0246 /* DelayQueueWidget.cxx */; };
DCEC58591E945125002F0246 /* DelayQueueWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCEC58571E945125002F0246 /* DelayQueueWidget.hxx */; };
DCEC585D1E945175002F0246 /* DelayQueueIterator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCEC585A1E945175002F0246 /* DelayQueueIterator.cxx */; };
DCEC585E1E945175002F0246 /* DelayQueueIterator.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCEC585B1E945175002F0246 /* DelayQueueIterator.hxx */; };
DCEC585F1E945175002F0246 /* PlayfieldPositionProvider.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCEC585C1E945175002F0246 /* PlayfieldPositionProvider.hxx */; };
DCEECE560B5E5E540021D754 /* Cart0840.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCEECE540B5E5E540021D754 /* Cart0840.cxx */; };
DCEECE570B5E5E540021D754 /* Cart0840.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCEECE550B5E5E540021D754 /* Cart0840.hxx */; };
DCF3A6E71DFC75E3008A8AF3 /* Background.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCF3A6CD1DFC75E3008A8AF3 /* Background.cxx */; };
@ -1163,6 +1168,11 @@
DCE5CDE11BA10024005CD08A /* RiotRamWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RiotRamWidget.cxx; path = ../debugger/gui/RiotRamWidget.cxx; sourceTree = "<group>"; };
DCE5CDE21BA10024005CD08A /* RiotRamWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = RiotRamWidget.hxx; path = ../debugger/gui/RiotRamWidget.hxx; sourceTree = "<group>"; };
DCE8B1861E7E03B300189864 /* FrameLayout.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = FrameLayout.hxx; path = ../emucore/tia/FrameLayout.hxx; sourceTree = "<group>"; };
DCEC58561E945125002F0246 /* DelayQueueWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DelayQueueWidget.cxx; path = ../debugger/gui/DelayQueueWidget.cxx; sourceTree = "<group>"; };
DCEC58571E945125002F0246 /* DelayQueueWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DelayQueueWidget.hxx; path = ../debugger/gui/DelayQueueWidget.hxx; sourceTree = "<group>"; };
DCEC585A1E945175002F0246 /* DelayQueueIterator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DelayQueueIterator.cxx; path = ../emucore/tia/DelayQueueIterator.cxx; sourceTree = "<group>"; };
DCEC585B1E945175002F0246 /* DelayQueueIterator.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DelayQueueIterator.hxx; path = ../emucore/tia/DelayQueueIterator.hxx; sourceTree = "<group>"; };
DCEC585C1E945175002F0246 /* PlayfieldPositionProvider.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = PlayfieldPositionProvider.hxx; path = ../emucore/tia/PlayfieldPositionProvider.hxx; sourceTree = "<group>"; };
DCEECE540B5E5E540021D754 /* Cart0840.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Cart0840.cxx; path = ../emucore/Cart0840.cxx; sourceTree = SOURCE_ROOT; };
DCEECE550B5E5E540021D754 /* Cart0840.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; name = Cart0840.hxx; path = ../emucore/Cart0840.hxx; sourceTree = SOURCE_ROOT; };
DCF3A6CD1DFC75E3008A8AF3 /* Background.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Background.cxx; path = ../emucore/tia/Background.cxx; sourceTree = "<group>"; };
@ -1427,6 +1437,8 @@
2D20F9EB08C603EC00A73076 /* DataGridWidget.hxx */,
2D20F9EC08C603EC00A73076 /* DebuggerDialog.cxx */,
2D20F9ED08C603EC00A73076 /* DebuggerDialog.hxx */,
DCEC58561E945125002F0246 /* DelayQueueWidget.cxx */,
DCEC58571E945125002F0246 /* DelayQueueWidget.hxx */,
DCCF4AFE14BA27EB00814FAB /* DrivingWidget.cxx */,
DCCF4AFF14BA27EB00814FAB /* DrivingWidget.hxx */,
DCCF4ADA14B9433100814FAB /* GenesisWidget.cxx */,
@ -1944,6 +1956,8 @@
DCF3A6D01DFC75E3008A8AF3 /* Ball.hxx */,
DCF3A6D11DFC75E3008A8AF3 /* DelayQueue.cxx */,
DCF3A6D21DFC75E3008A8AF3 /* DelayQueue.hxx */,
DCEC585A1E945175002F0246 /* DelayQueueIterator.cxx */,
DCEC585B1E945175002F0246 /* DelayQueueIterator.hxx */,
DCF3A6D31DFC75E3008A8AF3 /* DelayQueueMember.cxx */,
DCF3A6D41DFC75E3008A8AF3 /* DelayQueueMember.hxx */,
DCF3A6D51DFC75E3008A8AF3 /* DrawCounterDecodes.cxx */,
@ -1961,6 +1975,7 @@
DCF3A6E11DFC75E3008A8AF3 /* Player.hxx */,
DCF3A6E21DFC75E3008A8AF3 /* Playfield.cxx */,
DCF3A6E31DFC75E3008A8AF3 /* Playfield.hxx */,
DCEC585C1E945175002F0246 /* PlayfieldPositionProvider.hxx */,
DCF3A6E41DFC75E3008A8AF3 /* TIA.cxx */,
DCF3A6E51DFC75E3008A8AF3 /* TIA.hxx */,
DC72B2201E356F4F009056D0 /* VblankManager.cxx */,
@ -2045,6 +2060,7 @@
2D91740E09BA90380026E9FF /* ListWidget.hxx in Headers */,
2D91740F09BA90380026E9FF /* Menu.hxx in Headers */,
2D91741009BA90380026E9FF /* OptionsDialog.hxx in Headers */,
DCEC58591E945125002F0246 /* DelayQueueWidget.hxx in Headers */,
2D91741109BA90380026E9FF /* PopUpWidget.hxx in Headers */,
2D91741209BA90380026E9FF /* ProgressDialog.hxx in Headers */,
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */,
@ -2111,6 +2127,7 @@
DC47455609C34BFA00EDDA3A /* BankRomCheat.hxx in Headers */,
DC47455709C34BFA00EDDA3A /* Cheat.hxx in Headers */,
DC47455909C34BFA00EDDA3A /* CheatCodeDialog.hxx in Headers */,
DCEC585F1E945175002F0246 /* PlayfieldPositionProvider.hxx in Headers */,
DC47455B09C34BFA00EDDA3A /* CheatManager.hxx in Headers */,
DC47455D09C34BFA00EDDA3A /* CheetahCheat.hxx in Headers */,
DC47455F09C34BFA00EDDA3A /* RamCheat.hxx in Headers */,
@ -2121,6 +2138,7 @@
DCE3BBFA0C95CEDC00A671DF /* RomInfoWidget.hxx in Headers */,
DC07A3C90CAD738A009B4BC9 /* StateManager.hxx in Headers */,
DC0984860D3985160073C852 /* CartSB.hxx in Headers */,
DCEC585E1E945175002F0246 /* DelayQueueIterator.hxx in Headers */,
DCA23AEA0D75B22500F77B33 /* CartX07.hxx in Headers */,
DC4613680D92C03600D8DAB9 /* RomAuditDialog.hxx in Headers */,
DC487FB70DA5350900E12499 /* AtariVox.hxx in Headers */,
@ -2307,7 +2325,7 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0830;
ORGANIZATIONNAME = "Stella-emu";
};
buildConfigurationList = 2D91752109BA903B0026E9FF /* Build configuration list for PBXProject "stella" */;
@ -2435,6 +2453,7 @@
DC3EE86E1E2C0E6D00905161 /* zutil.c in Sources */,
CFE3F60B1E84A9A200A8204E /* CartBUSWidget.cxx in Sources */,
DC1B2EC51E50036100F62837 /* AtariMouse.cxx in Sources */,
DCEC58581E945125002F0246 /* DelayQueueWidget.cxx in Sources */,
2D9174BF09BA90380026E9FF /* FSNode.cxx in Sources */,
DCF3A6FE1DFC75E3008A8AF3 /* TIA.cxx in Sources */,
2D9174C009BA90380026E9FF /* OSystem.cxx in Sources */,
@ -2522,6 +2541,7 @@
DCF7B0DD10A762FC007A2870 /* CartF0.cxx in Sources */,
DCF7B0DF10A762FC007A2870 /* CartFA.cxx in Sources */,
DCC527D210B9DA19005E1287 /* M6502.cxx in Sources */,
DCEC585D1E945175002F0246 /* DelayQueueIterator.cxx in Sources */,
DC3EE86B1E2C0E6D00905161 /* uncompr.c in Sources */,
DCC527D610B9DA19005E1287 /* System.cxx in Sources */,
DC6B2BA411037FF200F199A7 /* CartDebug.cxx in Sources */,
@ -2798,23 +2818,29 @@
2D91752209BA903B0026E9FF /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
FRAMEWORK_SEARCH_PATHS = (
.,
"$(HOME)/Library/Frameworks",
);
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = "";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -2828,66 +2854,79 @@
INSTALL_PATH = "@rpath";
LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
VALID_ARCHS = x86_64;
WARNING_CFLAGS = "-Wall";
};
name = Development;
};
2D91752309BA903B0026E9FF /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = (
.,
"$(HOME)/Library/Frameworks",
);
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 3;
GCC_VERSION = "";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INSTALL_PATH = "@rpath";
LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
VALID_ARCHS = x86_64;
WARNING_CFLAGS = "-Wall";
};
name = Development;
};
2D91752309BA903B0026E9FF /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
.,
"$(HOME)/Library/Frameworks",
);
GCC_ENABLE_CPP_RTTI = NO;
GCC_OPTIMIZATION_LEVEL = 3;
GCC_VERSION = "";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INSTALL_PATH = "@rpath";
LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.7;
SDKROOT = macosx;
VALID_ARCHS = x86_64;
WARNING_CFLAGS = "-Wall";
};
name = Deployment;
};
2D91752409BA903B0026E9FF /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
GCC_ENABLE_CPP_RTTI = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_VERSION = "";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;

View File

@ -22,27 +22,28 @@
<ProjectGuid>{D7FCEC7F-33E1-49DD-A4B0-D5FC222250AD}</ProjectGuid>
<RootNamespace>Stella</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>7.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140_xp</PlatformToolset>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140_xp</PlatformToolset>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140_xp</PlatformToolset>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140_xp</PlatformToolset>
<PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -282,6 +283,7 @@
<ClCompile Include="..\debugger\gui\CartUAWidget.cxx" />
<ClCompile Include="..\debugger\gui\CartWDWidget.cxx" />
<ClCompile Include="..\debugger\gui\CartX07Widget.cxx" />
<ClCompile Include="..\debugger\gui\DelayQueueWidget.cxx" />
<ClCompile Include="..\debugger\gui\DrivingWidget.cxx" />
<ClCompile Include="..\debugger\gui\GenesisWidget.cxx" />
<ClCompile Include="..\debugger\gui\JoystickWidget.cxx" />
@ -315,6 +317,7 @@
<ClCompile Include="..\emucore\tia\Background.cxx" />
<ClCompile Include="..\emucore\tia\Ball.cxx" />
<ClCompile Include="..\emucore\tia\DelayQueue.cxx" />
<ClCompile Include="..\emucore\tia\DelayQueueIterator.cxx" />
<ClCompile Include="..\emucore\tia\DelayQueueMember.cxx" />
<ClCompile Include="..\emucore\tia\DrawCounterDecodes.cxx" />
<ClCompile Include="..\emucore\tia\FrameManager.cxx" />
@ -558,6 +561,7 @@
<ClInclude Include="..\debugger\gui\CartWDWidget.hxx" />
<ClInclude Include="..\debugger\gui\CartX07Widget.hxx" />
<ClInclude Include="..\debugger\gui\ControllerWidget.hxx" />
<ClInclude Include="..\debugger\gui\DelayQueueWidget.hxx" />
<ClInclude Include="..\debugger\gui\DrivingWidget.hxx" />
<ClInclude Include="..\debugger\gui\GenesisWidget.hxx" />
<ClInclude Include="..\debugger\gui\JoystickWidget.hxx" />
@ -592,6 +596,7 @@
<ClInclude Include="..\emucore\tia\Background.hxx" />
<ClInclude Include="..\emucore\tia\Ball.hxx" />
<ClInclude Include="..\emucore\tia\DelayQueue.hxx" />
<ClInclude Include="..\emucore\tia\DelayQueueIterator.hxx" />
<ClInclude Include="..\emucore\tia\DelayQueueMember.hxx" />
<ClInclude Include="..\emucore\tia\DrawCounterDecodes.hxx" />
<ClInclude Include="..\emucore\tia\FrameLayout.hxx" />

View File

@ -849,6 +849,12 @@
<ClCompile Include="..\emucore\CartCDF.cxx">
<Filter>Source Files\emucore</Filter>
</ClCompile>
<ClCompile Include="..\debugger\gui\DelayQueueWidget.cxx">
<Filter>Source Files\debugger</Filter>
</ClCompile>
<ClCompile Include="..\emucore\tia\DelayQueueIterator.cxx">
<Filter>Source Files\emucore\tia</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\common\bspf.hxx">
@ -1715,6 +1721,12 @@
<ClInclude Include="..\debugger\gui\CartCDFWidget.hxx">
<Filter>Header Files\debugger</Filter>
</ClInclude>
<ClInclude Include="..\debugger\gui\DelayQueueWidget.hxx">
<Filter>Header Files\debugger</Filter>
</ClInclude>
<ClInclude Include="..\emucore\tia\DelayQueueIterator.hxx">
<Filter>Header Files\emucore\tia</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="stella.ico">

View File

@ -93,8 +93,8 @@ expression: expression '+' expression { if(DEBUG_EXP) fprintf(stderr, " +"); $$
| '>' expression { if(DEBUG_EXP) fprintf(stderr, " U>"); $$ = new HiByteExpression($2); lastExp = $$; }
| '(' expression ')' { if(DEBUG_EXP) fprintf(stderr, " ()"); $$ = $2; lastExp = $$; }
| expression '[' expression ']' { if(DEBUG_EXP) fprintf(stderr, " []"); $$ = new ByteDerefOffsetExpression($1, $3); lastExp = $$; }
| NUMBER { if(DEBUG_EXP) fprintf(stderr, " %d", $1); $$ = new ConstExpression($1); lastExp = $$; }
| EQUATE { if(DEBUG_EXP) fprintf(stderr, " %s", $1); $$ = new EquateExpression($1); lastExp = $$; }
| NUMBER { if(DEBUG_EXP) fprintf(stderr, "const %d", $1); $$ = new ConstExpression($1); lastExp = $$; }
| EQUATE { if(DEBUG_EXP) fprintf(stderr, "equate %s", $1); $$ = new EquateExpression($1); lastExp = $$; }
| CPU_METHOD { if(DEBUG_EXP) fprintf(stderr, " (CpuMethod)"); $$ = new CpuMethodExpression($1); lastExp = $$; }
| CART_METHOD { if(DEBUG_EXP) fprintf(stderr, " (CartMethod)"); $$ = new CartMethodExpression($1); lastExp = $$; }
| TIA_METHOD { if(DEBUG_EXP) fprintf(stderr, " (TiaMethod)"); $$ = new TiaMethodExpression($1); lastExp = $$; }

View File

@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 3.0.2. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
#define YYBISON_VERSION "3.0.2"
#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@ -166,7 +166,7 @@ extern int yydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 28 "stella.y" /* yacc.c:355 */
@ -181,6 +181,8 @@ union YYSTYPE
#line 183 "y.tab.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif
@ -194,7 +196,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
#line 198 "y.tab.c" /* yacc.c:358 */
#line 200 "y.tab.c" /* yacc.c:358 */
#ifdef short
# undef short
@ -1338,215 +1340,215 @@ yyreduce:
case 2:
#line 66 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, "\ndone\n"); result.exp = (yyvsp[0].exp); }
#line 1342 "y.tab.c" /* yacc.c:1646 */
#line 1344 "y.tab.c" /* yacc.c:1646 */
break;
case 3:
#line 69 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " +"); (yyval.exp) = new PlusExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1348 "y.tab.c" /* yacc.c:1646 */
#line 1350 "y.tab.c" /* yacc.c:1646 */
break;
case 4:
#line 70 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " -"); (yyval.exp) = new MinusExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1354 "y.tab.c" /* yacc.c:1646 */
#line 1356 "y.tab.c" /* yacc.c:1646 */
break;
case 5:
#line 71 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " *"); (yyval.exp) = new MultExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1360 "y.tab.c" /* yacc.c:1646 */
#line 1362 "y.tab.c" /* yacc.c:1646 */
break;
case 6:
#line 72 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " /"); (yyval.exp) = new DivExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1366 "y.tab.c" /* yacc.c:1646 */
#line 1368 "y.tab.c" /* yacc.c:1646 */
break;
case 7:
#line 73 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " %%"); (yyval.exp) = new ModExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1372 "y.tab.c" /* yacc.c:1646 */
#line 1374 "y.tab.c" /* yacc.c:1646 */
break;
case 8:
#line 74 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " &"); (yyval.exp) = new BinAndExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1378 "y.tab.c" /* yacc.c:1646 */
#line 1380 "y.tab.c" /* yacc.c:1646 */
break;
case 9:
#line 75 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " |"); (yyval.exp) = new BinOrExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1384 "y.tab.c" /* yacc.c:1646 */
#line 1386 "y.tab.c" /* yacc.c:1646 */
break;
case 10:
#line 76 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " ^"); (yyval.exp) = new BinXorExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1390 "y.tab.c" /* yacc.c:1646 */
#line 1392 "y.tab.c" /* yacc.c:1646 */
break;
case 11:
#line 77 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " <"); (yyval.exp) = new LessExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1396 "y.tab.c" /* yacc.c:1646 */
#line 1398 "y.tab.c" /* yacc.c:1646 */
break;
case 12:
#line 78 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " >"); (yyval.exp) = new GreaterExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1402 "y.tab.c" /* yacc.c:1646 */
#line 1404 "y.tab.c" /* yacc.c:1646 */
break;
case 13:
#line 79 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " >="); (yyval.exp) = new GreaterEqualsExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1408 "y.tab.c" /* yacc.c:1646 */
#line 1410 "y.tab.c" /* yacc.c:1646 */
break;
case 14:
#line 80 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " <="); (yyval.exp) = new LessEqualsExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1414 "y.tab.c" /* yacc.c:1646 */
#line 1416 "y.tab.c" /* yacc.c:1646 */
break;
case 15:
#line 81 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " !="); (yyval.exp) = new NotEqualsExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1420 "y.tab.c" /* yacc.c:1646 */
#line 1422 "y.tab.c" /* yacc.c:1646 */
break;
case 16:
#line 82 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " =="); (yyval.exp) = new EqualsExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1426 "y.tab.c" /* yacc.c:1646 */
#line 1428 "y.tab.c" /* yacc.c:1646 */
break;
case 17:
#line 83 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " >>"); (yyval.exp) = new ShiftRightExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1432 "y.tab.c" /* yacc.c:1646 */
#line 1434 "y.tab.c" /* yacc.c:1646 */
break;
case 18:
#line 84 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " <<"); (yyval.exp) = new ShiftLeftExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1438 "y.tab.c" /* yacc.c:1646 */
#line 1440 "y.tab.c" /* yacc.c:1646 */
break;
case 19:
#line 85 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " ||"); (yyval.exp) = new LogOrExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1444 "y.tab.c" /* yacc.c:1646 */
#line 1446 "y.tab.c" /* yacc.c:1646 */
break;
case 20:
#line 86 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " &&"); (yyval.exp) = new LogAndExpression((yyvsp[-2].exp), (yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1450 "y.tab.c" /* yacc.c:1646 */
#line 1452 "y.tab.c" /* yacc.c:1646 */
break;
case 21:
#line 87 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " U-"); (yyval.exp) = new UnaryMinusExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1456 "y.tab.c" /* yacc.c:1646 */
#line 1458 "y.tab.c" /* yacc.c:1646 */
break;
case 22:
#line 88 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " ~"); (yyval.exp) = new BinNotExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1462 "y.tab.c" /* yacc.c:1646 */
#line 1464 "y.tab.c" /* yacc.c:1646 */
break;
case 23:
#line 89 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " !"); (yyval.exp) = new LogNotExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1468 "y.tab.c" /* yacc.c:1646 */
#line 1470 "y.tab.c" /* yacc.c:1646 */
break;
case 24:
#line 90 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " U*"); (yyval.exp) = new ByteDerefExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1474 "y.tab.c" /* yacc.c:1646 */
#line 1476 "y.tab.c" /* yacc.c:1646 */
break;
case 25:
#line 91 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " U@"); (yyval.exp) = new WordDerefExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1480 "y.tab.c" /* yacc.c:1646 */
#line 1482 "y.tab.c" /* yacc.c:1646 */
break;
case 26:
#line 92 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " U<"); (yyval.exp) = new LoByteExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1486 "y.tab.c" /* yacc.c:1646 */
#line 1488 "y.tab.c" /* yacc.c:1646 */
break;
case 27:
#line 93 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " U>"); (yyval.exp) = new HiByteExpression((yyvsp[0].exp)); lastExp = (yyval.exp); }
#line 1492 "y.tab.c" /* yacc.c:1646 */
#line 1494 "y.tab.c" /* yacc.c:1646 */
break;
case 28:
#line 94 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " ()"); (yyval.exp) = (yyvsp[-1].exp); lastExp = (yyval.exp); }
#line 1498 "y.tab.c" /* yacc.c:1646 */
#line 1500 "y.tab.c" /* yacc.c:1646 */
break;
case 29:
#line 95 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " []"); (yyval.exp) = new ByteDerefOffsetExpression((yyvsp[-3].exp), (yyvsp[-1].exp)); lastExp = (yyval.exp); }
#line 1504 "y.tab.c" /* yacc.c:1646 */
#line 1506 "y.tab.c" /* yacc.c:1646 */
break;
case 30:
#line 96 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " %d", (yyvsp[0].val)); (yyval.exp) = new ConstExpression((yyvsp[0].val)); lastExp = (yyval.exp); }
#line 1510 "y.tab.c" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, "const %d", (yyvsp[0].val)); (yyval.exp) = new ConstExpression((yyvsp[0].val)); lastExp = (yyval.exp); }
#line 1512 "y.tab.c" /* yacc.c:1646 */
break;
case 31:
#line 97 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " %s", (yyvsp[0].Equate)); (yyval.exp) = new EquateExpression((yyvsp[0].Equate)); lastExp = (yyval.exp); }
#line 1516 "y.tab.c" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, "equate %s", (yyvsp[0].Equate)); (yyval.exp) = new EquateExpression((yyvsp[0].Equate)); lastExp = (yyval.exp); }
#line 1518 "y.tab.c" /* yacc.c:1646 */
break;
case 32:
#line 98 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " (CpuMethod)"); (yyval.exp) = new CpuMethodExpression((yyvsp[0].cpuMethod)); lastExp = (yyval.exp); }
#line 1522 "y.tab.c" /* yacc.c:1646 */
#line 1524 "y.tab.c" /* yacc.c:1646 */
break;
case 33:
#line 99 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " (CartMethod)"); (yyval.exp) = new CartMethodExpression((yyvsp[0].cartMethod)); lastExp = (yyval.exp); }
#line 1528 "y.tab.c" /* yacc.c:1646 */
#line 1530 "y.tab.c" /* yacc.c:1646 */
break;
case 34:
#line 100 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " (TiaMethod)"); (yyval.exp) = new TiaMethodExpression((yyvsp[0].tiaMethod)); lastExp = (yyval.exp); }
#line 1534 "y.tab.c" /* yacc.c:1646 */
#line 1536 "y.tab.c" /* yacc.c:1646 */
break;
case 35:
#line 101 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " (DefinedFunction)"); (yyval.exp) = new FunctionExpression((yyvsp[0].DefinedFunction)); lastExp = (yyval.exp); }
#line 1540 "y.tab.c" /* yacc.c:1646 */
#line 1542 "y.tab.c" /* yacc.c:1646 */
break;
case 36:
#line 102 "stella.y" /* yacc.c:1646 */
{ if(DEBUG_EXP) fprintf(stderr, " ERR: "); yyerror((char*)"Invalid label or constant"); return 1; }
#line 1546 "y.tab.c" /* yacc.c:1646 */
#line 1548 "y.tab.c" /* yacc.c:1646 */
break;
#line 1550 "y.tab.c" /* yacc.c:1646 */
#line 1552 "y.tab.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires

View File

@ -1,8 +1,8 @@
/* A Bison parser, made by GNU Bison 3.0.2. */
/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -87,7 +87,7 @@ extern int yydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 28 "stella.y" /* yacc.c:1909 */
@ -102,6 +102,8 @@ union YYSTYPE
#line 104 "y.tab.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif