more 65c02 work
This commit is contained in:
parent
e8cc13380c
commit
2e534a308a
Binary file not shown.
|
@ -1,31 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34616.47
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vfEmu6502", "vfEmu6502.vcxproj", "{2215CCFC-9478-4CA8-8E76-661605A6D60C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x64.Build.0 = Debug|x64
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x86.Build.0 = Debug|Win32
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x64.ActiveCfg = Release|x64
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x64.Build.0 = Release|x64
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x86.ActiveCfg = Release|Win32
|
||||
{2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FF38F018-AEDF-406B-9DE7-DE892A6B03C1}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,151 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>17.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{2215ccfc-9478-4ca8-8e76-661605a6d60c}</ProjectGuid>
|
||||
<RootNamespace>vfEmu6502</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>vfEmu6502</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>..\..\Assets\dll</OutDir>
|
||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>vrEmu6502</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<CompileAs>CompileAsC</CompileAs>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="vr6502.c" />
|
||||
<ClCompile Include="vrEmu6502\src\vrEmu6502.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="vrEmu6502\src\vrEmu6502.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,7 +0,0 @@
|
|||
#include "vrEmu6502/src/vrEmu6502.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#define VR_EMU_6502_DLLEXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define VR_EMU_6502_DLLEXPORT __attribute__((visibility("default")))
|
||||
#endif
|
|
@ -1 +0,0 @@
|
|||
#pragma once
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 2aaf1e943ef9113a786a67815a6979067c7f4192
|
|
@ -0,0 +1,398 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
|
@ -0,0 +1,28 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
||||
|
||||
project(vrEmu6502)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../../Assets/dll)
|
||||
|
||||
if(MSVC)
|
||||
add_compile_options(/W4 /WX)
|
||||
else()
|
||||
add_compile_options(-Wall -Wextra -Wpedantic -Werror)
|
||||
if (UNIX)
|
||||
add_compile_options(-march=native)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
add_definitions(-DVR_EMU_6502_STATIC)
|
||||
endif()
|
||||
|
||||
include(CTest)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(test)
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "x64-Release",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Release",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"variables": [
|
||||
{
|
||||
"name": "BUILD_TESTING",
|
||||
"value": "False",
|
||||
"type": "BOOL"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 Troy Schrapel
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,128 @@
|
|||
# vrEmu6502
|
||||
|
||||
<a href="https://github.com/visrealm/vrEmu6502/actions/workflows/cmake-multi-platform.yml"><img src="https://github.com/visrealm/vrEmu6502/actions/workflows/cmake-multi-platform.yml/badge.svg"/></a>
|
||||
|
||||
6502/65C02 emulator written in standard C99 with no external dependencies.
|
||||
|
||||
Initially created for my [HBC-56 (6502 on a backplane) Emulator](https://github.com/visrealm/hbc-56)
|
||||
|
||||
Includes:
|
||||
* Support for standard 6502/6510, 65C02, WDC65C02 and R65C02.
|
||||
* Supports all unofficial ("illegal") 6502/6510 opcodes (Use model value `CPU_6502U`).
|
||||
* Correct handling of Decimal mode.
|
||||
* Accurate instruction timing.
|
||||
* All WDC and Rockwell-specific 65C02 instructions.
|
||||
* User-supplied I/O callbacks.
|
||||
* IRQ and NMI signals.
|
||||
* Multiple CPU instances.
|
||||
* Instruction disassembler.
|
||||
* Test runner.
|
||||
|
||||
## Test suite
|
||||
Includes a test program which was designed to run [Klaus Dormann's 6502 tests](https://github.com/Klaus2m5/6502_65C02_functional_tests).
|
||||
|
||||
Passes all tests:
|
||||
* 6502_functional_test (all models)
|
||||
* 6502_decimal_test (with valid and invalid bcd) (6502)
|
||||
* 65C02_decimal_test (with valid and invalid bcd) (all 65C02 models)
|
||||
* 65C02_extended_opcodes_test (Standard 65C02)
|
||||
* W65C02_extended_opcodes_test (WDC65C02)
|
||||
* R65C02_extended_opcodes_test (R65C02)
|
||||
|
||||
See the [test](test) directory or more details.
|
||||
|
||||
## Building
|
||||
|
||||
vrEmu6502 uses the CMake build system
|
||||
|
||||
#### Checkout repository:
|
||||
|
||||
```
|
||||
git clone https://github.com/visrealm/vrEmu6502.git
|
||||
cd vrEmu6502
|
||||
```
|
||||
|
||||
#### Setup build:
|
||||
|
||||
```
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
```
|
||||
|
||||
#### Build
|
||||
|
||||
```
|
||||
cmake --build .
|
||||
```
|
||||
Windows: Optionally, open the generated solution file
|
||||
|
||||
#### Run tests
|
||||
```
|
||||
ctest
|
||||
```
|
||||
Windows: Optionally, build the ALL_TESTS project in the generated solution file
|
||||
|
||||
## Quick start
|
||||
|
||||
```C
|
||||
#include "vrEmu6502.h"
|
||||
|
||||
uint8_t ram[0x8000];
|
||||
uint8_t rom[0x8000];
|
||||
|
||||
uint8_t My6502MemoryReadFunction(uint16_t addr, bool isDbg)
|
||||
{
|
||||
if (addr < 0x8000)
|
||||
{
|
||||
return ram[addr];
|
||||
}
|
||||
return rom[addr & 0x7fff];
|
||||
}
|
||||
|
||||
void My6502MemoryWriteFunction(uint16_t addr, uint8_t val)
|
||||
{
|
||||
if (addr < 0x8000)
|
||||
{
|
||||
ram[addr] = val;
|
||||
}
|
||||
}
|
||||
|
||||
/* fill rom with something that makes sense here */
|
||||
|
||||
|
||||
/* create a new WDC 65C02. */
|
||||
VrEmu6502 *my6502 = vrEmu6502New(CPU_W65C02, My6502MemoryReadFunction, My6502MemoryWriteFunction);
|
||||
|
||||
if (my6502)
|
||||
{
|
||||
/* if you want to interrupt the CPU, get a handle to its IRQ "pin" */
|
||||
vrEmu6502Interrupt *irq = vrEmu6502Int(my6502);
|
||||
|
||||
/* reset the cpu (technically don't need to do this as vrEmu6502New does reset it) */
|
||||
vrEmu6502Reset(my6502);
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* call me once for each clock cycle (eg. 1,000,000 times per second for a 1MHz clock) */
|
||||
vrEmu6502Tick(my6502);
|
||||
|
||||
/* interrupt it? */
|
||||
if (myHardwareWantsAttention)
|
||||
{
|
||||
*irq = IntRequested;
|
||||
|
||||
/* at some point, the hardware will be happy and it will need to release the interrupt */
|
||||
}
|
||||
}
|
||||
|
||||
vrEmu6502Destroy(my6502);
|
||||
my6502 = NULL;
|
||||
}
|
||||
```
|
||||
|
||||
See [HBC-56](https://github.com/visrealm/hbc-56) for real-life example usage.
|
||||
|
||||
|
||||
## License
|
||||
This code is licensed under the [MIT](https://opensource.org/licenses/MIT "MIT") license
|
|
@ -3,9 +3,9 @@ if [ -z "$BIZHAWKBUILD_HOME" ]; then export BIZHAWKBUILD_HOME="$(realpath "$(dir
|
|||
if [ -z "$CC" ]; then export CXX="clang"; fi
|
||||
|
||||
mkdir -p build
|
||||
$CC -std=c11 -O3 -fvisibility=hidden -fPIC -shared -s vr6502.c -o build/libvrEmu6502.so
|
||||
$CC -std=c11 -O3 -fvisibility=hidden -fPIC -shared -s vr6502.c -o build/vrEmu6502.so
|
||||
|
||||
cp build/libvrEmu6502.so "$BIZHAWKBUILD_HOME/Assets/dll"
|
||||
cp build/vrEmu6502.so "$BIZHAWKBUILD_HOME/Assets/dll"
|
||||
if [ -e "$BIZHAWKBUILD_HOME/output" ]; then
|
||||
cp build/libvrEmu6502.so "$BIZHAWKBUILD_HOME/output/dll"
|
||||
cp build/vrEmu6502.so "$BIZHAWKBUILD_HOME/output/dll"
|
||||
fi
|
|
@ -0,0 +1,19 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../../Assets/dll)
|
||||
|
||||
include(CheckSymbolExists)
|
||||
|
||||
add_library(vrEmu6502)
|
||||
target_sources(vrEmu6502 PRIVATE vrEmu6502.c)
|
||||
target_sources(vrEmu6502 PUBLIC vrEmu6502.h)
|
||||
|
||||
if (WIN32)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_definitions(-DVR_EMU_6502_COMPILING_DLL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_include_directories (vrEmu6502 INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,283 @@
|
|||
/*
|
||||
* Troy's 6502 Emulator
|
||||
*
|
||||
* Copyright (c) 2022 Troy Schrapel
|
||||
*
|
||||
* This code is licensed under the MIT license
|
||||
*
|
||||
* https://github.com/visrealm/vrEmu6502
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _VR_EMU_6502_H_
|
||||
#define _VR_EMU_6502_H_
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* LINKAGE MODES:
|
||||
*
|
||||
* Default (nothing defined): When your executable is using vrEmuTms9918 as a DLL
|
||||
* VR_EMU_6502_COMPILING_DLL: When compiling vrEmuTms9918 as a DLL
|
||||
* VR_EMU_6502_STATIC: When linking vrEmu6502 statically in your executable
|
||||
*/
|
||||
|
||||
#if __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#ifdef __cplusplus
|
||||
#define VR_EMU_6502_DLLEXPORT EMSCRIPTEN_KEEPALIVE extern "C"
|
||||
#else
|
||||
#define VR_EMU_6502_DLLEXPORT EMSCRIPTEN_KEEPALIVE extern
|
||||
#endif
|
||||
|
||||
#elif VR_EMU_6502_COMPILING_DLL
|
||||
#define VR_EMU_6502_DLLEXPORT __declspec(dllexport)
|
||||
#elif defined WIN32 && !defined VR_EMU_6502_STATIC
|
||||
#define VR_EMU_6502_DLLEXPORT __declspec(dllimport)
|
||||
#else
|
||||
#ifdef __cplusplus
|
||||
#define VR_EMU_6502_DLLEXPORT extern "C"
|
||||
#else
|
||||
#define VR_EMU_6502_DLLEXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* PRIVATE DATA STRUCTURE
|
||||
*/
|
||||
struct vrEmu6502_s;
|
||||
typedef struct vrEmu6502_s VrEmu6502;
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* CONSTANTS
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CPU_6502, /* NMOS 6502/6510 with documented opcodes only */
|
||||
CPU_6502U, /* NMOS 6502/6510 with undocumented opcodes */
|
||||
CPU_65C02, /* Standard CMOS 65C02 */
|
||||
CPU_W65C02, /* Western Design Centre CMOS 65C02 */
|
||||
CPU_R65C02, /* Rockwell CMOS 65C02 */
|
||||
CPU_6510 = CPU_6502U,
|
||||
CPU_8500 = CPU_6510,
|
||||
CPU_8502 = CPU_8500,
|
||||
CPU_7501 = CPU_6502,
|
||||
CPU_8501 = CPU_6502
|
||||
} vrEmu6502Model;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
IntRequested,
|
||||
IntCleared,
|
||||
IntLow = IntRequested,
|
||||
IntHigh = IntCleared
|
||||
} vrEmu6502Interrupt;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BitC = 0,
|
||||
BitZ,
|
||||
BitI,
|
||||
BitD,
|
||||
BitB,
|
||||
BitU,
|
||||
BitV,
|
||||
BitN
|
||||
} vrEmu6502FlagBit;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FlagC = 0x01 << BitC, /* carry */
|
||||
FlagZ = 0x01 << BitZ, /* zero */
|
||||
FlagI = 0x01 << BitI, /* interrupt */
|
||||
FlagD = 0x01 << BitD, /* decimal */
|
||||
FlagB = 0x01 << BitB, /* brk */
|
||||
FlagU = 0x01 << BitU, /* undefined */
|
||||
FlagV = 0x01 << BitV, /* oVerflow */
|
||||
FlagN = 0x01 << BitN /* negative */
|
||||
} vrEmu6502Flag;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AddrModeAbs,
|
||||
AddrModeAbsX,
|
||||
AddrModeAbsY,
|
||||
AddrModeAcc,
|
||||
AddrModeImm,
|
||||
AddrModeImp,
|
||||
AddrModeAbsInd,
|
||||
AddrModeAbsIndX,
|
||||
AddrModeIndX,
|
||||
AddrModeIndY,
|
||||
AddrModeRel,
|
||||
AddrModeZP,
|
||||
AddrModeZPI,
|
||||
AddrModeZPX,
|
||||
AddrModeZPY,
|
||||
} vrEmu6502AddrMode;
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* PUBLIC INTERFACE
|
||||
*/
|
||||
|
||||
/*
|
||||
* memory write function pointer
|
||||
*/
|
||||
typedef void(*vrEmu6502MemWrite)(uint16_t addr, uint8_t val);
|
||||
|
||||
/*
|
||||
* memory read function pointer
|
||||
*
|
||||
* isDbg: some devices change their state when read
|
||||
* (eg. TMS9918 increments its address pointer)
|
||||
* this flag will be false when the cpu is running
|
||||
* however it can be true when querying the memory
|
||||
* for other purposes. devices should NOT change state
|
||||
* when isDbg is true.
|
||||
*
|
||||
*/
|
||||
typedef uint8_t(*vrEmu6502MemRead)(uint16_t addr, bool isDbg);
|
||||
|
||||
|
||||
/*
|
||||
* create a new 6502
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT VrEmu6502* vrEmu6502New(
|
||||
vrEmu6502Model model,
|
||||
vrEmu6502MemRead readFn,
|
||||
vrEmu6502MemWrite writeFn);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* destroy a 6502
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT void vrEmu6502Destroy(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* reset the 6502
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT void vrEmu6502Reset(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* a single clock tick
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT void vrEmu6502Tick(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* a single instruction cycle
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502InstCycle(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* returns a pointer to the interrupt signal.
|
||||
* externally, you can modify it to set/reset the interrupt signal
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT vrEmu6502Interrupt *vrEmu6502Int(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* returns a pointer to the nmi signal.
|
||||
* externally, you can modify it to set/reset the interrupt signal
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT vrEmu6502Interrupt *vrEmu6502Nmi(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the program counter
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint16_t vrEmu6502GetPC(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* set the program counter
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT void vrEmu6502SetPC(VrEmu6502* vr6502, uint16_t pc);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the accumulator
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetAcc(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the x index register
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetX(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the y index register
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetY(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the processor status register
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetStatus(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the stack pointer register
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetStackPointer(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the current opcode
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetCurrentOpcode(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the current opcode address
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint16_t vrEmu6502GetCurrentOpcodeAddr(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the next opcode
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetNextOpcode(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the opcode cycle
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT uint8_t vrEmu6502GetOpcodeCycle(VrEmu6502* vr6502);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the opcode mnemonic string
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT
|
||||
const char* vrEmu6502OpcodeToMnemonicStr(VrEmu6502* vr6502, uint8_t opcode);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* return the opcode address mode
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT
|
||||
vrEmu6502AddrMode vrEmu6502GetOpcodeAddrMode(VrEmu6502* vr6502, uint8_t opcode);
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
*
|
||||
* get disassembled instruction as a string. returns next instruction address
|
||||
*/
|
||||
VR_EMU_6502_DLLEXPORT
|
||||
uint16_t vrEmu6502DisassembleInstruction(
|
||||
VrEmu6502* vr6502, uint16_t addr,
|
||||
int bufferSize, char *buffer,
|
||||
uint16_t *refAddr, const char* const labelMap[0x10000]);
|
||||
|
||||
|
||||
|
||||
#endif // _VR_EMU_6502_CORE_H_
|
|
@ -0,0 +1,40 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include(CheckSymbolExists)
|
||||
|
||||
enable_testing()
|
||||
|
||||
add_executable (vrEmu6502Test vrEmu6502Test.c)
|
||||
|
||||
target_link_libraries(vrEmu6502Test vrEmu6502)
|
||||
|
||||
|
||||
check_symbol_exists(fopen_s "stdio.h" HAVE_FOPEN_S)
|
||||
check_symbol_exists(strncpy_s "string.h" HAVE_STRNCPY_S)
|
||||
|
||||
if (HAVE_FOPEN_S)
|
||||
target_compile_definitions(vrEmu6502Test PRIVATE -DHAVE_FOPEN_S)
|
||||
endif()
|
||||
|
||||
if (HAVE_STRNCPY_S)
|
||||
target_compile_definitions(vrEmu6502Test PRIVATE -DHAVE_STRNCPY_S)
|
||||
endif()
|
||||
|
||||
|
||||
set(TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/programs/)
|
||||
set(TEST_RUNNER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}vrEmu6502Test)
|
||||
|
||||
add_test(6502_functional_test ${TEST_RUNNER} -quiet -cpu 6502 ${TESTS_DIR}6502_functional_test.hex)
|
||||
add_test(65c02_functional_test ${TEST_RUNNER} -quiet -cpu 65c02 ${TESTS_DIR}6502_functional_test.hex)
|
||||
add_test(w65c02_functional_test ${TEST_RUNNER} -quiet -cpu w65c02 ${TESTS_DIR}6502_functional_test.hex)
|
||||
add_test(r65c02_functional_test ${TEST_RUNNER} -quiet -cpu r65c02 ${TESTS_DIR}6502_functional_test.hex)
|
||||
|
||||
add_test(6502_decimal_test ${TEST_RUNNER} -quiet -cpu 6502 ${TESTS_DIR}6502_decimal_test.hex)
|
||||
add_test(65c02_decimal_test ${TEST_RUNNER} -quiet -cpu 65c02 ${TESTS_DIR}65C02_decimal_test.hex)
|
||||
add_test(w65c02_decimal_test ${TEST_RUNNER} -quiet -cpu w65c02 ${TESTS_DIR}65C02_decimal_test.hex)
|
||||
add_test(r65c02_decimal_test ${TEST_RUNNER} -quiet -cpu r65c02 ${TESTS_DIR}6502_decimal_test.hex)
|
||||
|
||||
add_test(65c02_extended_test ${TEST_RUNNER} -quiet -cpu 65c02 ${TESTS_DIR}65C02_extended_opcodes_test.hex)
|
||||
add_test(w65c02_extended_test ${TEST_RUNNER} -quiet -cpu w65c02 ${TESTS_DIR}W65C02_extended_opcodes_test.hex)
|
||||
add_test(r65c02_extended_test ${TEST_RUNNER} -quiet -cpu r65c02 ${TESTS_DIR}R65C02_extended_opcodes_test.hex)
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
## Test runner
|
||||
|
||||
[vrEmu6502Test.c](vrEmu6502Test.c)
|
||||
* The source file for the test runner.
|
||||
* It can be built using the solution in the [msvc](../msvc) folder.
|
||||
* The test runner binary (Windows) is included in the [bin](../bin) directory.
|
||||
|
||||
|
||||
### Options:
|
||||
|
||||
The test runner accepts Intel HEX files provided by the Klauss Dormann tests (located in the [programs](programs) folder)
|
||||
|
||||
```Usage:
|
||||
Usage:
|
||||
vrEmu6502Test [OPTION...] <testfile.hex>
|
||||
|
||||
Options:
|
||||
-c <cpumodel> one of "6502", "65c02", "w65c02", "r65c02". defaults to 65c02.
|
||||
-i output instruction count on each row
|
||||
-f <lines> filter output to every #<lines> lines
|
||||
-h output help and exit
|
||||
-m <from>[:<to>] output given memory address or range
|
||||
-q quiet mode - only print report
|
||||
-r <addr> override run address
|
||||
-v [<count>] verbose output from instruction #<count>
|
||||
```
|
||||
|
||||
### Example output:
|
||||
|
||||
`..\bin\vrEmu6502Test --cpu w65c02 --quiet 21986970 -mem 0x08:0x0f programs\65C02_extended_opcodes_test.hex`
|
||||
|
||||
```
|
||||
-------------------------------------
|
||||
vrEmu6502 Test Runner
|
||||
-------------------------------------
|
||||
Copyright (c) 2022 Troy Schrapel
|
||||
https://github.com/visrealm/vrEmu6502
|
||||
-------------------------------------
|
||||
|
||||
Running test: "programs\65C02_extended_opcodes_test.hex"
|
||||
|
||||
Options:
|
||||
Processor model: Western Design Centre 65C02
|
||||
Output filtering: Quiet until #21986970
|
||||
Output memory: $0008 - $000f
|
||||
Start address: $0400
|
||||
|
||||
|
||||
Step # | PC | Instruction | Acc | InX | InY | SP Top | Status | $0008 - $000f
|
||||
------------+-------+----------------+-----+-----+-----+----------+-------------+--------------
|
||||
#21986970 | $2496 | lda #$99 | $99 | $0e | $ff | $ff: $00 | $f8: NVD... | $00 $00 $bd $ad $01 $00 $00 $00
|
||||
#21986971 | $2498 | sta $0d | $99 | $0e | $ff | $ff: $00 | $f8: NVD... | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986972 | $249a | lda $0e | $00 | $0e | $ff | $ff: $00 | $7a: .VD..Z | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986973 | $249c | beq $24d7 | $00 | $0e | $ff | $ff: $00 | $7a: .VD..Z | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986974 | $24d7 | cpx #$0e | $00 | $0e | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986975 | $24d9 | bne $24d9 | $00 | $0e | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986976 | $24db | cpy #$ff | $00 | $0e | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986977 | $24dd | bne $24dd | $00 | $0e | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986978 | $24df | tsx | $00 | $ff | $ff | $ff: $00 | $f9: NVD.C. | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986979 | $24e0 | cpx #$ff | $00 | $ff | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986980 | $24e2 | bne $24e2 | $00 | $ff | $ff | $ff: $00 | $7b: .VD.CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986981 | $24e4 | cld | $00 | $ff | $ff | $ff: $00 | $73: .V..CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986982 | $24e5 | lda $0202 | $15 | $ff | $ff | $ff: $00 | $71: .V..C. | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986983 | $24e8 | cmp #$15 | $15 | $ff | $ff | $ff: $00 | $73: .V..CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986984 | $24ea | bne $24ea | $15 | $ff | $ff | $ff: $00 | $73: .V..CZ | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986985 | $24ec | lda #$f0 | $f0 | $ff | $ff | $ff: $00 | $f1: NV..C. | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
#21986986 | $24ee | sta $0202 | $f0 | $ff | $ff | $ff: $00 | $f1: NV..C. | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
|
||||
Final instruction:
|
||||
|
||||
Step # | PC | Instruction | Acc | InX | InY | SP Top | Status | $0008 - $000f
|
||||
------------+-------+----------------+-----+-----+-----+----------+-------------+--------------
|
||||
#21986987 | $24f1 | stp | $f0 | $ff | $ff | $ff: $00 | $f1: NV..C. | $00 $00 $bd $ad $01 $99 $00 $00
|
||||
|
||||
Test results: "programs\65C02_extended_opcodes_test.hex"
|
||||
|
||||
Instructions executed: 21.986987 M
|
||||
Total clock cycles: 66.905005 M
|
||||
|
||||
Elapsed time: 0.5550 sec
|
||||
Average clock rate: 120.5496 MHz
|
||||
Average instruction rate: 39.6162 MIPS
|
||||
Average clocks/instruction 3.0429
|
||||
|
||||
Test result: PASSED
|
||||
```
|
||||
|
|
@ -0,0 +1,355 @@
|
|||
; Verify decimal mode behavior
|
||||
; Written by Bruce Clark. This code is public domain.
|
||||
; see http://www.6502.org/tutorials/decimal_mode.html
|
||||
;
|
||||
; Returns:
|
||||
; ERROR = 0 if the test passed
|
||||
; ERROR = 1 if the test failed
|
||||
; modify the code at the DONE label for desired program end
|
||||
;
|
||||
; This routine requires 17 bytes of RAM -- 1 byte each for:
|
||||
; AR, CF, DA, DNVZC, ERROR, HA, HNVZC, N1, N1H, N1L, N2, N2L, NF, VF, and ZF
|
||||
; and 2 bytes for N2H
|
||||
;
|
||||
; Variables:
|
||||
; N1 and N2 are the two numbers to be added or subtracted
|
||||
; N1H, N1L, N2H, and N2L are the upper 4 bits and lower 4 bits of N1 and N2
|
||||
; DA and DNVZC are the actual accumulator and flag results in decimal mode
|
||||
; HA and HNVZC are the accumulator and flag results when N1 and N2 are
|
||||
; added or subtracted using binary arithmetic
|
||||
; AR, NF, VF, ZF, and CF are the predicted decimal mode accumulator and
|
||||
; flag results, calculated using binary arithmetic
|
||||
;
|
||||
; This program takes approximately 1 minute at 1 MHz (a few seconds more on
|
||||
; a 65C02 than a 6502 or 65816)
|
||||
;
|
||||
|
||||
; Configuration:
|
||||
cputype = 0 ; 0 = 6502, 1 = 65C02, 2 = 65C816
|
||||
vld_bcd = 0 ; 0 = allow invalid bcd, 1 = valid bcd only
|
||||
chk_a = 1 ; check accumulator
|
||||
chk_n = 0 ; check sign (negative) flag
|
||||
chk_v = 0 ; check overflow flag
|
||||
chk_z = 1 ; check zero flag
|
||||
chk_c = 1 ; check carry flag
|
||||
|
||||
end_of_test macro
|
||||
db $db ;execute 65C02 stop instruction
|
||||
endm
|
||||
|
||||
bss
|
||||
org 0
|
||||
; operands - register Y = carry in
|
||||
N1 ds 1
|
||||
N2 ds 1
|
||||
; binary result
|
||||
HA ds 1
|
||||
HNVZC ds 1
|
||||
;04
|
||||
; decimal result
|
||||
DA ds 1
|
||||
DNVZC ds 1
|
||||
; predicted results
|
||||
AR ds 1
|
||||
NF ds 1
|
||||
;08
|
||||
VF ds 1
|
||||
ZF ds 1
|
||||
CF ds 1
|
||||
ERROR ds 1
|
||||
;0C
|
||||
; workspace
|
||||
N1L ds 1
|
||||
N1H ds 1
|
||||
N2L ds 1
|
||||
N2H ds 2
|
||||
|
||||
code
|
||||
org $200
|
||||
TEST ldy #1 ; initialize Y (used to loop through carry flag values)
|
||||
sty ERROR ; store 1 in ERROR until the test passes
|
||||
lda #0 ; initialize N1 and N2
|
||||
sta N1
|
||||
sta N2
|
||||
LOOP1 lda N2 ; N2L = N2 & $0F
|
||||
and #$0F ; [1] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT2
|
||||
endif
|
||||
sta N2L
|
||||
lda N2 ; N2H = N2 & $F0
|
||||
and #$F0 ; [2] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT2
|
||||
endif
|
||||
sta N2H
|
||||
ora #$0F ; N2H+1 = (N2 & $F0) + $0F
|
||||
sta N2H+1
|
||||
LOOP2 lda N1 ; N1L = N1 & $0F
|
||||
and #$0F ; [3] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT1
|
||||
endif
|
||||
sta N1L
|
||||
lda N1 ; N1H = N1 & $F0
|
||||
and #$F0 ; [4] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT1
|
||||
endif
|
||||
sta N1H
|
||||
jsr ADD
|
||||
jsr A6502
|
||||
jsr COMPARE
|
||||
bne DONE
|
||||
jsr SUB
|
||||
jsr S6502
|
||||
jsr COMPARE
|
||||
bne DONE
|
||||
NEXT1 inc N1 ; [5] see text
|
||||
bne LOOP2 ; loop through all 256 values of N1
|
||||
NEXT2 inc N2 ; [6] see text
|
||||
bne LOOP1 ; loop through all 256 values of N2
|
||||
dey
|
||||
bpl LOOP1 ; loop through both values of the carry flag
|
||||
lda #0 ; test passed, so store 0 in ERROR
|
||||
sta ERROR
|
||||
DONE
|
||||
end_of_test
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, the accumulator
|
||||
; and flag results when N1 is added to N2 using binary arithmetic, the
|
||||
; predicted accumulator result, the predicted carry flag, and the predicted
|
||||
; V flag
|
||||
;
|
||||
ADD sed ; decimal mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
adc N2
|
||||
sta DA ; actual accumulator result in decimal mode
|
||||
php
|
||||
pla
|
||||
sta DNVZC ; actual flags result in decimal mode
|
||||
cld ; binary mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
adc N2
|
||||
sta HA ; accumulator result of N1+N2 using binary arithmetic
|
||||
|
||||
php
|
||||
pla
|
||||
sta HNVZC ; flags result of N1+N2 using binary arithmetic
|
||||
cpy #1
|
||||
lda N1L
|
||||
adc N2L
|
||||
cmp #$0A
|
||||
ldx #0
|
||||
bcc A1
|
||||
inx
|
||||
adc #5 ; add 6 (carry is set)
|
||||
and #$0F
|
||||
sec
|
||||
A1 ora N1H
|
||||
;
|
||||
; if N1L + N2L < $0A, then add N2 & $F0
|
||||
; if N1L + N2L >= $0A, then add (N2 & $F0) + $0F + 1 (carry is set)
|
||||
;
|
||||
adc N2H,x
|
||||
php
|
||||
bcs A2
|
||||
cmp #$A0
|
||||
bcc A3
|
||||
A2 adc #$5F ; add $60 (carry is set)
|
||||
sec
|
||||
A3 sta AR ; predicted accumulator result
|
||||
php
|
||||
pla
|
||||
sta CF ; predicted carry result
|
||||
pla
|
||||
;
|
||||
; note that all 8 bits of the P register are stored in VF
|
||||
;
|
||||
sta VF ; predicted V flags
|
||||
rts
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, and the
|
||||
; accumulator and flag results when N2 is subtracted from N1 using binary
|
||||
; arithmetic
|
||||
;
|
||||
SUB sed ; decimal mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
sbc N2
|
||||
sta DA ; actual accumulator result in decimal mode
|
||||
php
|
||||
pla
|
||||
sta DNVZC ; actual flags result in decimal mode
|
||||
cld ; binary mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
sbc N2
|
||||
sta HA ; accumulator result of N1-N2 using binary arithmetic
|
||||
|
||||
php
|
||||
pla
|
||||
sta HNVZC ; flags result of N1-N2 using binary arithmetic
|
||||
rts
|
||||
|
||||
if cputype != 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65816
|
||||
;
|
||||
SUB1 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S11
|
||||
inx
|
||||
sbc #5 ; subtract 6 (carry is clear)
|
||||
and #$0F
|
||||
clc
|
||||
S11 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S12
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S12 sta AR
|
||||
rts
|
||||
endif
|
||||
|
||||
if cputype = 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65C02
|
||||
;
|
||||
SUB2 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S21
|
||||
inx
|
||||
and #$0F
|
||||
clc
|
||||
S21 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S22
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S22 cpx #0
|
||||
beq S23
|
||||
sbc #6
|
||||
S23 sta AR ; predicted accumulator result
|
||||
rts
|
||||
endif
|
||||
|
||||
; Compare accumulator actual results to predicted results
|
||||
;
|
||||
; Return:
|
||||
; Z flag = 1 (BEQ branch) if same
|
||||
; Z flag = 0 (BNE branch) if different
|
||||
;
|
||||
COMPARE
|
||||
if chk_a = 1
|
||||
lda DA
|
||||
cmp AR
|
||||
bne C1
|
||||
endif
|
||||
if chk_n = 1
|
||||
lda DNVZC ; [7] see text
|
||||
eor NF
|
||||
and #$80 ; mask off N flag
|
||||
bne C1
|
||||
endif
|
||||
if chk_v = 1
|
||||
lda DNVZC ; [8] see text
|
||||
eor VF
|
||||
and #$40 ; mask off V flag
|
||||
bne C1 ; [9] see text
|
||||
endif
|
||||
if chk_z = 1
|
||||
lda DNVZC
|
||||
eor ZF ; mask off Z flag
|
||||
and #2
|
||||
bne C1 ; [10] see text
|
||||
endif
|
||||
if chk_c = 1
|
||||
lda DNVZC
|
||||
eor CF
|
||||
and #1 ; mask off C flag
|
||||
endif
|
||||
C1 rts
|
||||
|
||||
; These routines store the predicted values for ADC and SBC for the 6502,
|
||||
; 65C02, and 65816 in AR, CF, NF, VF, and ZF
|
||||
|
||||
if cputype = 0
|
||||
|
||||
A6502 lda VF ; 6502
|
||||
;
|
||||
; since all 8 bits of the P register were stored in VF, bit 7 of VF contains
|
||||
; the N flag for NF
|
||||
;
|
||||
sta NF
|
||||
lda HNVZC
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda HNVZC
|
||||
sta NF
|
||||
sta VF
|
||||
sta ZF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 1
|
||||
|
||||
A6502 lda AR ; 65C02
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB2
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 2
|
||||
|
||||
A6502 lda AR ; 65C816
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
|
||||
end TEST
|
|
@ -0,0 +1,9 @@
|
|||
:20020000A001840BA90085008501A501290F850EA50129F0850F090F8510A500290F850C1B
|
||||
:20022000A50029F0850D204C0220DB0220C602D01A20900220E40220C602D00FE600D0DA22
|
||||
:20024000E601D0C68810C3A900850BDBF8C001A5006501850408688505D8C001A5006501C7
|
||||
:20026000850208688503C001A50C650EC90AA2009006E86905290F38050D750F08B004C92E
|
||||
:20028000A09003695F3885060868850A68850860F8C001A500E501850408688505D8C001EC
|
||||
:2002A000A500E50185020868850360C001A50CE50EA200B006E8E905290F18050DF50FB02B
|
||||
:2002C00002E95F850660A504C506D00EA50545092902D006A505450A290160A5088507A53D
|
||||
:1202E0000385096020AB02A503850785088509850A6010
|
||||
:00020001FD
|
|
@ -0,0 +1,363 @@
|
|||
AS65 Assembler for R6502 [1.42]. Copyright 1994-2007, Frank A. Kingswood Page 1
|
||||
----------------------------------------------------- 6502_decimal_test.a65 ------------------------------------------------------
|
||||
|
||||
355 lines read, no errors in pass 1.
|
||||
; Verify decimal mode behavior
|
||||
; Written by Bruce Clark. This code is public domain.
|
||||
; see http://www.6502.org/tutorials/decimal_mode.html
|
||||
;
|
||||
; Returns:
|
||||
; ERROR = 0 if the test passed
|
||||
; ERROR = 1 if the test failed
|
||||
; modify the code at the DONE label for desired program end
|
||||
;
|
||||
; This routine requires 17 bytes of RAM -- 1 byte each for:
|
||||
; AR, CF, DA, DNVZC, ERROR, HA, HNVZC, N1, N1H, N1L, N2, N2L, NF, VF, and ZF
|
||||
; and 2 bytes for N2H
|
||||
;
|
||||
; Variables:
|
||||
; N1 and N2 are the two numbers to be added or subtracted
|
||||
; N1H, N1L, N2H, and N2L are the upper 4 bits and lower 4 bits of N1 and N2
|
||||
; DA and DNVZC are the actual accumulator and flag results in decimal mode
|
||||
; HA and HNVZC are the accumulator and flag results when N1 and N2 are
|
||||
; added or subtracted using binary arithmetic
|
||||
; AR, NF, VF, ZF, and CF are the predicted decimal mode accumulator and
|
||||
; flag results, calculated using binary arithmetic
|
||||
;
|
||||
; This program takes approximately 1 minute at 1 MHz (a few seconds more on
|
||||
; a 65C02 than a 6502 or 65816)
|
||||
;
|
||||
|
||||
; Configuration:
|
||||
0000 = cputype = 0 ; 0 = 6502, 1 = 65C02, 2 = 65C816
|
||||
0000 = vld_bcd = 0 ; 0 = allow invalid bcd, 1 = valid bcd only
|
||||
0001 = chk_a = 1 ; check accumulator
|
||||
0000 = chk_n = 0 ; check sign (negative) flag
|
||||
0000 = chk_v = 0 ; check overflow flag
|
||||
0001 = chk_z = 1 ; check zero flag
|
||||
0001 = chk_c = 1 ; check carry flag
|
||||
|
||||
end_of_test macro
|
||||
db $db ;execute 65C02 stop instruction
|
||||
endm
|
||||
|
||||
bss
|
||||
0000 = org 0
|
||||
; operands - register Y = carry in
|
||||
0000 = N1 ds 1
|
||||
0001 = N2 ds 1
|
||||
; binary result
|
||||
0002 = HA ds 1
|
||||
0003 = HNVZC ds 1
|
||||
;04
|
||||
; decimal result
|
||||
0004 = DA ds 1
|
||||
0005 = DNVZC ds 1
|
||||
; predicted results
|
||||
0006 = AR ds 1
|
||||
0007 = NF ds 1
|
||||
;08
|
||||
0008 = VF ds 1
|
||||
0009 = ZF ds 1
|
||||
000a = CF ds 1
|
||||
000b = ERROR ds 1
|
||||
;0C
|
||||
; workspace
|
||||
000c = N1L ds 1
|
||||
000d = N1H ds 1
|
||||
000e = N2L ds 1
|
||||
000f = N2H ds 2
|
||||
|
||||
code
|
||||
0200 = org $200
|
||||
0200 : a001 TEST ldy #1 ; initialize Y (used to loop through carry flag values)
|
||||
0202 : 840b sty ERROR ; store 1 in ERROR until the test passes
|
||||
0204 : a900 lda #0 ; initialize N1 and N2
|
||||
0206 : 8500 sta N1
|
||||
0208 : 8501 sta N2
|
||||
020a : a501 LOOP1 lda N2 ; N2L = N2 & $0F
|
||||
020c : 290f and #$0F ; [1] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT2
|
||||
endif
|
||||
020e : 850e sta N2L
|
||||
0210 : a501 lda N2 ; N2H = N2 & $F0
|
||||
0212 : 29f0 and #$F0 ; [2] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT2
|
||||
endif
|
||||
0214 : 850f sta N2H
|
||||
0216 : 090f ora #$0F ; N2H+1 = (N2 & $F0) + $0F
|
||||
0218 : 8510 sta N2H+1
|
||||
021a : a500 LOOP2 lda N1 ; N1L = N1 & $0F
|
||||
021c : 290f and #$0F ; [3] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT1
|
||||
endif
|
||||
021e : 850c sta N1L
|
||||
0220 : a500 lda N1 ; N1H = N1 & $F0
|
||||
0222 : 29f0 and #$F0 ; [4] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT1
|
||||
endif
|
||||
0224 : 850d sta N1H
|
||||
0226 : 204c02 jsr ADD
|
||||
0229 : 20db02 jsr A6502
|
||||
022c : 20c602 jsr COMPARE
|
||||
022f : d01a bne DONE
|
||||
0231 : 209002 jsr SUB
|
||||
0234 : 20e402 jsr S6502
|
||||
0237 : 20c602 jsr COMPARE
|
||||
023a : d00f bne DONE
|
||||
023c : e600 NEXT1 inc N1 ; [5] see text
|
||||
023e : d0da bne LOOP2 ; loop through all 256 values of N1
|
||||
0240 : e601 NEXT2 inc N2 ; [6] see text
|
||||
0242 : d0c6 bne LOOP1 ; loop through all 256 values of N2
|
||||
0244 : 88 dey
|
||||
0245 : 10c3 bpl LOOP1 ; loop through both values of the carry flag
|
||||
0247 : a900 lda #0 ; test passed, so store 0 in ERROR
|
||||
0249 : 850b sta ERROR
|
||||
024b : DONE
|
||||
end_of_test
|
||||
024b : db > db $db ;execute 65C02 stop instruction
|
||||
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, the accumulator
|
||||
; and flag results when N1 is added to N2 using binary arithmetic, the
|
||||
; predicted accumulator result, the predicted carry flag, and the predicted
|
||||
; V flag
|
||||
;
|
||||
024c : f8 ADD sed ; decimal mode
|
||||
024d : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
024f : a500 lda N1
|
||||
0251 : 6501 adc N2
|
||||
0253 : 8504 sta DA ; actual accumulator result in decimal mode
|
||||
0255 : 08 php
|
||||
0256 : 68 pla
|
||||
0257 : 8505 sta DNVZC ; actual flags result in decimal mode
|
||||
0259 : d8 cld ; binary mode
|
||||
025a : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
025c : a500 lda N1
|
||||
025e : 6501 adc N2
|
||||
0260 : 8502 sta HA ; accumulator result of N1+N2 using binary arithmetic
|
||||
|
||||
0262 : 08 php
|
||||
0263 : 68 pla
|
||||
0264 : 8503 sta HNVZC ; flags result of N1+N2 using binary arithmetic
|
||||
0266 : c001 cpy #1
|
||||
0268 : a50c lda N1L
|
||||
026a : 650e adc N2L
|
||||
026c : c90a cmp #$0A
|
||||
026e : a200 ldx #0
|
||||
0270 : 9006 bcc A1
|
||||
0272 : e8 inx
|
||||
0273 : 6905 adc #5 ; add 6 (carry is set)
|
||||
0275 : 290f and #$0F
|
||||
0277 : 38 sec
|
||||
0278 : 050d A1 ora N1H
|
||||
;
|
||||
; if N1L + N2L < $0A, then add N2 & $F0
|
||||
; if N1L + N2L >= $0A, then add (N2 & $F0) + $0F + 1 (carry is set)
|
||||
;
|
||||
027a : 750f adc N2H,x
|
||||
027c : 08 php
|
||||
027d : b004 bcs A2
|
||||
027f : c9a0 cmp #$A0
|
||||
0281 : 9003 bcc A3
|
||||
0283 : 695f A2 adc #$5F ; add $60 (carry is set)
|
||||
0285 : 38 sec
|
||||
0286 : 8506 A3 sta AR ; predicted accumulator result
|
||||
0288 : 08 php
|
||||
0289 : 68 pla
|
||||
028a : 850a sta CF ; predicted carry result
|
||||
028c : 68 pla
|
||||
;
|
||||
; note that all 8 bits of the P register are stored in VF
|
||||
;
|
||||
028d : 8508 sta VF ; predicted V flags
|
||||
028f : 60 rts
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, and the
|
||||
; accumulator and flag results when N2 is subtracted from N1 using binary
|
||||
; arithmetic
|
||||
;
|
||||
0290 : f8 SUB sed ; decimal mode
|
||||
0291 : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
0293 : a500 lda N1
|
||||
0295 : e501 sbc N2
|
||||
0297 : 8504 sta DA ; actual accumulator result in decimal mode
|
||||
0299 : 08 php
|
||||
029a : 68 pla
|
||||
029b : 8505 sta DNVZC ; actual flags result in decimal mode
|
||||
029d : d8 cld ; binary mode
|
||||
029e : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
02a0 : a500 lda N1
|
||||
02a2 : e501 sbc N2
|
||||
02a4 : 8502 sta HA ; accumulator result of N1-N2 using binary arithmetic
|
||||
|
||||
02a6 : 08 php
|
||||
02a7 : 68 pla
|
||||
02a8 : 8503 sta HNVZC ; flags result of N1-N2 using binary arithmetic
|
||||
02aa : 60 rts
|
||||
|
||||
if cputype != 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65816
|
||||
;
|
||||
02ab : c001 SUB1 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
02ad : a50c lda N1L
|
||||
02af : e50e sbc N2L
|
||||
02b1 : a200 ldx #0
|
||||
02b3 : b006 bcs S11
|
||||
02b5 : e8 inx
|
||||
02b6 : e905 sbc #5 ; subtract 6 (carry is clear)
|
||||
02b8 : 290f and #$0F
|
||||
02ba : 18 clc
|
||||
02bb : 050d S11 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
02bd : f50f sbc N2H,x
|
||||
02bf : b002 bcs S12
|
||||
02c1 : e95f sbc #$5F ; subtract $60 (carry is clear)
|
||||
02c3 : 8506 S12 sta AR
|
||||
02c5 : 60 rts
|
||||
endif
|
||||
|
||||
if cputype = 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65C02
|
||||
;
|
||||
SUB2 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S21
|
||||
inx
|
||||
and #$0F
|
||||
clc
|
||||
S21 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S22
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S22 cpx #0
|
||||
beq S23
|
||||
sbc #6
|
||||
S23 sta AR ; predicted accumulator result
|
||||
rts
|
||||
endif
|
||||
|
||||
; Compare accumulator actual results to predicted results
|
||||
;
|
||||
; Return:
|
||||
; Z flag = 1 (BEQ branch) if same
|
||||
; Z flag = 0 (BNE branch) if different
|
||||
;
|
||||
02c6 : COMPARE
|
||||
if chk_a = 1
|
||||
02c6 : a504 lda DA
|
||||
02c8 : c506 cmp AR
|
||||
02ca : d00e bne C1
|
||||
endif
|
||||
if chk_n = 1
|
||||
lda DNVZC ; [7] see text
|
||||
eor NF
|
||||
and #$80 ; mask off N flag
|
||||
bne C1
|
||||
endif
|
||||
if chk_v = 1
|
||||
lda DNVZC ; [8] see text
|
||||
eor VF
|
||||
and #$40 ; mask off V flag
|
||||
bne C1 ; [9] see text
|
||||
endif
|
||||
if chk_z = 1
|
||||
02cc : a505 lda DNVZC
|
||||
02ce : 4509 eor ZF ; mask off Z flag
|
||||
02d0 : 2902 and #2
|
||||
02d2 : d006 bne C1 ; [10] see text
|
||||
endif
|
||||
if chk_c = 1
|
||||
02d4 : a505 lda DNVZC
|
||||
02d6 : 450a eor CF
|
||||
02d8 : 2901 and #1 ; mask off C flag
|
||||
endif
|
||||
02da : 60 C1 rts
|
||||
|
||||
; These routines store the predicted values for ADC and SBC for the 6502,
|
||||
; 65C02, and 65816 in AR, CF, NF, VF, and ZF
|
||||
|
||||
if cputype = 0
|
||||
|
||||
02db : a508 A6502 lda VF ; 6502
|
||||
;
|
||||
; since all 8 bits of the P register were stored in VF, bit 7 of VF contains
|
||||
; the N flag for NF
|
||||
;
|
||||
02dd : 8507 sta NF
|
||||
02df : a503 lda HNVZC
|
||||
02e1 : 8509 sta ZF
|
||||
02e3 : 60 rts
|
||||
|
||||
02e4 : 20ab02 S6502 jsr SUB1
|
||||
02e7 : a503 lda HNVZC
|
||||
02e9 : 8507 sta NF
|
||||
02eb : 8508 sta VF
|
||||
02ed : 8509 sta ZF
|
||||
02ef : 850a sta CF
|
||||
02f1 : 60 rts
|
||||
|
||||
endif
|
||||
if cputype = 1
|
||||
|
||||
A6502 lda AR ; 65C02
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB2
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 2
|
||||
|
||||
A6502 lda AR ; 65C816
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
|
||||
02e4 = end TEST
|
||||
|
||||
No errors in pass 2.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,427 @@
|
|||
:16000A000000000000000000008001C38241007F001F71800FFF3C
|
||||
:200020007F80FF0F8F8F180219021A021B021C02200103020402050206020B015F026002FF
|
||||
:1C0040006102620263026402650266025B025C025D025E020302040204010501B3
|
||||
:20020000000000000000000000290060490060090060690060E90060C38241007F8080002C
|
||||
:2002200002000286048200010387058301400061412000C080E1C1A080030081018002018E
|
||||
:2002400000810180000003010001028081818081807F80FF00010080800200001F71800F72
|
||||
:1B026000FF7F80FF0F8F8F00F11F00F0FFFFFFFFF0F00F00FF7F80028000806E
|
||||
:20040000D8A2FF9AA9008D0002A2054C3304A005D0084C120488888888888888888888F048
|
||||
:20042000174C2104CACACACACACACACACACAF0DE4C3004D0F44C3504AD0002C900D0FEA9CA
|
||||
:20044000018D0002A0FE8898AA1008186902EAEAEAEAEAEAEAEAEAEA497F8DE604A9004CB1
|
||||
:20046000E504CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAE7
|
||||
:20048000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA1C
|
||||
:2004A000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAFC
|
||||
:2004C000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACADC
|
||||
:2004E000CACACACACAF03ECACACACACACACACACACACACACACACACACACACACACACACACACA22
|
||||
:20050000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA9B
|
||||
:20052000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA7B
|
||||
:20054000CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA5B
|
||||
:20056000CACACACACACAEAEAEAEAEAF0084C6D05EAEAEAEAEAEAEAEAEAEAC000F0034C460E
|
||||
:2005800004AD0002C901D0FEA9028D0002C001D0034C9105A900C900D0FE90FE30FEC9019A
|
||||
:2005A000F0FEB0FE10FEAAE000D0FE90FE30FEE001F0FEB0FE10FEA8C000D0FE90FE30FE00
|
||||
:2005C000C001F0FEB0FE10FEAD0002C902D0FEA9038D0002A2FF9AA95548A9AA48CDFE0145
|
||||
:2005E000D0FEBA8AC9FDD0FE68C9AAD0FE68C955D0FECDFF01D0FEBAE0FFD0FEAD0002C9DE
|
||||
:2006000003D0FEA9048D0002A9FF4828101A501B901CD01D30034C160670034C1B06B00359
|
||||
:200620004C2006F00F4C25064C28064C2B064C2E064C310608BAE0FED0FE68C9FFD0FEBAB2
|
||||
:20064000E0FFD0FEA9004828301A701BB01CF01D10034C520650034C570690034C5C06D062
|
||||
:200660000F4C61064C64064C67064C6A064C6D060868C930D0FEA9024828D002F0034C7EED
|
||||
:2006800006B00290034C8506300210034C8C06700250034C9306A9014828F002D0034C9EA2
|
||||
:2006A000069002B0034CA506300210034CAC06700250034CB306A9804828F002D0034CBE83
|
||||
:2006C00006B00290034CC506100230034CCC06700250034CD306A9404828F002D0034CDE23
|
||||
:2006E00006B00290034CE506300210034CEC06500270034CF306A9FD4828F002D0034CFEC6
|
||||
:20070000069002B0034C0507100230034C0C07500270034C1307A9FE4828D002F0034C1E21
|
||||
:2007200007B00290034C2507100230034C2C07500270034C3307A97F4828D002F0034C3EFF
|
||||
:20074000079002B0034C4507300210034C4C07500270034C5307A9BF4828D002F0034C5E1F
|
||||
:20076000079002B0034C6507100230034C6C07700250034C7307AD0002C904D0FEA9058D61
|
||||
:200780000002A255A0AAA9FF48A901284808C901D0FE6848C9FFD0FE28A90048A9002848F4
|
||||
:2007A00008C900D0FE6848C930D0FE28A9FF48A9FF284808C9FFD0FE6848C9FFD0FE28A93E
|
||||
:2007C0000048A901284808C901D0FE6848C930D0FE28A9FF48A900284808C900D0FE684820
|
||||
:2007E000C9FFD0FE28A90048A9FF284808C9FFD0FE6848C930D0FE28A9FF48A900286808C4
|
||||
:20080000C9FFD0FE6848C9FDD0FE28A90048A9FF286808C900D0FE6848C932D0FE28A9FFC5
|
||||
:2008200048A9FE286808C901D0FE6848C97DD0FE28A90048A900286808C9FFD0FE6848C96C
|
||||
:20084000B0D0FE28A9FF48A9FF286808C900D0FE6848C97FD0FE28A90048A9FE286808C944
|
||||
:2008600001D0FE6848C930D0FE28E055D0FEC0AAD0FEAD0002C905D0FEA9068D0002A9009D
|
||||
:2008800048A93C2849C308C9FFD0FE6848C9B0D0FE28A90048A9C32849C308C900D0FE68A2
|
||||
:2008A00048C932D0FE28AD0002C906D0FEA9078D0002A224A042A90048A91828EA08C9181F
|
||||
:2008C000D0FE6848C930D0FE28E024D0FEC042D0FEA2DBA0BDA9FF48A9E728EA08C9E7D015
|
||||
:2008E000FE6848C9FFD0FE28E0DBD0FEC0BDD0FEAD0002C907D0FEA9088D0002A900482812
|
||||
:20090000A946A241A0524CF036EAEAD0FEE8E8F0FE10FE90FE50FEC9ECD0FEE042D0FEC024
|
||||
:200920004FD0FECAC8C8C849AA4C3209EAEAD0FEE8E8F0FE30FE90FE50FEC946D0FEE04196
|
||||
:20094000D0FEC052D0FEAD0002C908D0FEA9098D0002A9004828A949A24EA0446C1E37EAD0
|
||||
:20096000D0FE88880888888828F0FE10FE90FE50FEC9E3D0FEE04FD0FEC03ED0FEBAE0FF1D
|
||||
:20098000D0FEAD0002C909D0FEA90A8D0002A9004828A94AA253A052205D37088888882889
|
||||
:2009A000F0FE10FE90FE50FEC9E0D0FEE054D0FEC04CD0FEBAE0FFD0FEAD0002C90AD0FE55
|
||||
:2009C000A90B8D0002A90048A942A252A04B28008808888888C9E8D0FEE053D0FEC045D074
|
||||
:2009E000FE68C930D0FEBAE0FFD0FEA9FF48A9BDA2ADA0B428008808888888C917D0FEE08C
|
||||
:200A0000AED0FEC0AED0FE68C9FFD0FEBAE0FFD0FEAD0002C90BD0FEA90C8D0002A9FF4834
|
||||
:200A20002818086848C9FED0FE2838086848C9FFD0FE2858086848C9FBD0FE287808684859
|
||||
:200A4000C9FFD0FE28D8086848C9F7D0FE28F8086848C9FFD0FE28B8086848C9BFD0FE2836
|
||||
:200A6000A9004828086848C930D0FE2838086848C931D0FE2818086848C930D0FE28780897
|
||||
:200A80006848C934D0FE2858086848C930D0FE28F8086848C938D0FE28D8086848C930D0B4
|
||||
:200AA000FE28A9404828086848C970D0FE28B8086848C930D0FE28AD0002C90CD0FEA90D69
|
||||
:200AC0008D0002A2FEA9FF4828E808E0FFD0FE6848C9FDD0FE28E808E000D0FE6848C97F30
|
||||
:200AE000D0FE28E808E001D0FE6848C97DD0FE28CA08E000D0FE6848C97FD0FE28CA08E055
|
||||
:200B0000FFD0FE6848C9FDD0FE28CAA9004828E808E0FFD0FE6848C9B0D0FE28E808E0002D
|
||||
:200B2000D0FE6848C932D0FE28E808E001D0FE6848C930D0FE28CA08E000D0FE6848C932DD
|
||||
:200B4000D0FE28CA08E0FFD0FE6848C9B0D0FE28A0FEA9FF4828C808C0FFD0FE6848C9FD78
|
||||
:200B6000D0FE28C808C000D0FE6848C97FD0FE28C808C001D0FE6848C97DD0FE288808C098
|
||||
:200B800000D0FE6848C97FD0FE288808C0FFD0FE6848C9FDD0FE2888A9004828C808C0FFE0
|
||||
:200BA000D0FE6848C9B0D0FE28C808C000D0FE6848C932D0FE28C808C001D0FE6848C93041
|
||||
:200BC000D0FE288808C000D0FE6848C932D0FE288808C0FFD0FE6848C9B0D0FE28A2FFA9DA
|
||||
:200BE000FF48288A08C9FFD0FE6848C9FDD0FE2808E8288A08C900D0FE6848C97FD0FE28C3
|
||||
:200C000008E8288A08C901D0FE6848C97DD0FE28A90048288A08C901D0FE6848C930D0FEEC
|
||||
:200C20002808CA288A08C900D0FE6848C932D0FE2808CA288A08C9FFD0FE6848C9B0D0FEAF
|
||||
:200C400028A0FFA9FF48289808C9FFD0FE6848C9FDD0FE2808C8289808C900D0FE6848C96B
|
||||
:200C60007FD0FE2808C8289808C901D0FE6848C97DD0FE28A90048289808C901D0FE6848E2
|
||||
:200C8000C930D0FE280888289808C900D0FE6848C932D0FE280888289808C9FFD0FE684837
|
||||
:200CA000C9B0D0FE28A9FF48A2FF8A28A808C0FFD0FE6848C9FDD0FE2808E88A28A808C0C7
|
||||
:200CC00000D0FE6848C97FD0FE2808E88A28A808C001D0FE6848C97DD0FE28A90048A900F1
|
||||
:200CE0008A28A808C001D0FE6848C930D0FE2808CA8A28A808C000D0FE6848C932D0FE2801
|
||||
:200D000008CA8A28A808C0FFD0FE6848C9B0D0FE28A9FF48A0FF9828AA08E0FFD0FE684895
|
||||
:200D2000C9FDD0FE2808C89828AA08E000D0FE6848C97FD0FE2808C89828AA08E001D0FE28
|
||||
:200D40006848C97DD0FE28A90048A9009828AA08E001D0FE6848C930D0FE2808889828AA53
|
||||
:200D600008E000D0FE6848C932D0FE2808889828AA08E0FFD0FE6848C9B0D0FE28AD00029F
|
||||
:200D8000C90DD0FEA90E8D0002A201A9FF48289A08AD0101C9FFD0FEA90048289A08AD015E
|
||||
:200DA00001C930D0FECAA9FF48289A08AD0001C9FFD0FEA90048289A08AD0001C930D0FE73
|
||||
:200DC000CAA9FF48289A08ADFF01C9FFD0FEA90048289A08ADFF01C930A2019AA9FF482896
|
||||
:200DE000BA08E001D0FEAD0101C97DD0FEA9FF4828BA08E000D0FEAD0001C97FD0FEA9FFCB
|
||||
:200E00004828BA08E0FFD0FEADFF01C9FDD0FEA2019AA9004828BA08E001D0FEAD0101C973
|
||||
:200E200030D0FEA9004828BA08E000D0FEAD0001C932D0FEA9004828BA08E0FFD0FEADFF80
|
||||
:200E400001C9B0D0FE68AD0002C90ED0FEA90F8D0002A003A9004828B615088A49C3289961
|
||||
:200E600003020849C3D91802D0FE684930D91D02D0FE8810DFA003A9FF4828B615088A4919
|
||||
:200E8000C3289903020849C3D91802D0FE68497DD91D02D0FE8810DFA003A9004828BE18F7
|
||||
:200EA00002088A49C3AA28960C0849C3D91500D0FE684930D91D02D0FE8810DEA003A9FFE6
|
||||
:200EC0004828BE1802088A49C3AA28960C0849C3D91500D0FE68497DD91D02D0FE8810DE7E
|
||||
:200EE000A003A200B90C0049C3D91500D0FE960CB9030249C3D91802D0FE8A990302881033
|
||||
:200F0000E3AD0002C90FD0FEA9108D0002A0FDB61B8A99090188C0FAB0F5A0FDBE1E0196BF
|
||||
:200F20001288C0FAB0F6A003A200B90C00D91500D0FE960CB90302D91802D0FE8A990302A8
|
||||
:200F40008810E7AD0002C910D0FEA9118D0002A203A9004828B415089849C3289D0302086E
|
||||
:200F600049C3DD1802D0FE684930DD1D02D0FECA10DFA203A9FF4828B415089849C3289D45
|
||||
:200F800003020849C3DD1802D0FE68497DDD1D02D0FECA10DFA203A9004828BC180208988E
|
||||
:200FA00049C3A828940C0849C3D515D0FE684930DD1D02D0FECA10DFA203A9FF4828BC18F4
|
||||
:200FC00002089849C3A828940C0849C3D515D0FE68497DDD1D02D0FECA10DFA203A000B57C
|
||||
:200FE0000C49C3D515D0FE940CBD030249C3DD1802D0FE8A9D0302CA10E5AD0002C911D0AA
|
||||
:20100000FEA9128D0002A2FDB41B989D0901CAE0FAB0F5A2FDBC1E019412CAE0FAB0F6A286
|
||||
:2010200003A000B50CD515D0FE940CBD0302DD1802D0FE8A9D0302CA10E9AD0002C912D024
|
||||
:20104000FEA9138D0002A9004828A615088A49C3AA288E03020849C3AAE0C3D0FE68493060
|
||||
:20106000CD1D02D0FEA9004828A616088A49C3AA288E04020849C3AAE082D0FE684930CD41
|
||||
:201080001E02D0FEA9004828A617088A49C3AA288E05020849C3AAE041D0FE684930CD1F0D
|
||||
:2010A00002D0FEA9004828A618088A49C3AA288E06020849C3AAE000D0FE684930CD200247
|
||||
:2010C000D0FEA9FF4828A615088A49C3AA288E03020849C3AAE0C3D0FE68497DCD1D02D053
|
||||
:2010E000FEA9FF4828A616088A49C3AA288E04020849C3AAE082D0FE68497DCD1E02D0FE43
|
||||
:20110000A9FF4828A617088A49C3AA288E05020849C3AAE041D0FE68497DCD1F02D0FEA9B5
|
||||
:20112000FF4828A618088A49C3AA288E06020849C3AAE000D0FE68497DCD2002D0FEA9007C
|
||||
:201140004828AE1802088A49C3AA28860C0849C3C515D0FE684930CD1D02D0FEA9004828E5
|
||||
:20116000AE1902088A49C3AA28860D0849C3C516D0FE684930CD1E02D0FEA9004828AE1A69
|
||||
:2011800002088A49C3AA28860E0849C3C517D0FE684930CD1F02D0FEA9004828AE1B020802
|
||||
:2011A0008A49C3AA28860F0849C3C518D0FE684930CD2002D0FEA9FF4828AE1802088A491A
|
||||
:2011C000C3AA28860C0849C3AAE415D0FE68497DCD1D02D0FEA9FF4828AE1902088A49C3FC
|
||||
:2011E000AA28860D0849C3AAE416D0FE68497DCD1E02D0FEA9FF4828AE1A02088A49C3AAF1
|
||||
:2012000028860E0849C3AAE417D0FE68497DCD1F02D0FEA9FF4828AE1B02088A49C3AA284E
|
||||
:20122000860F0849C3AAE418D0FE68497DCD2002D0FEA9004828A2C308EC1802D0FE68499B
|
||||
:2012400030CD1D02D0FEA9004828A28208EC1902D0FE684930CD1E02D0FEA9004828A241F2
|
||||
:2012600008EC1A02D0FE684930CD1F02D0FEA9004828A20008EC1B02D0FE684930CD200289
|
||||
:20128000D0FEA9FF4828A2C308EC1802D0FE68497DCD1D02D0FEA9FF4828A28208EC1902F4
|
||||
:2012A000D0FE68497DCD1E02D0FEA9FF4828A24108EC1A02D0FE68497DCD1F02D0FEA9FF0C
|
||||
:2012C0004828A20008EC1B02D0FE68497DCD2002D0FEA200A50C49C3C515D0FE860CAD03E9
|
||||
:2012E0000249C3CD1802D0FE8E0302A50D49C3C516D0FE860DAD040249C3CD1902D0FE8E9B
|
||||
:201300000402A50E49C3C517D0FE860EAD050249C3CD1A02D0FE8E0502A50F49C3C518D051
|
||||
:20132000FE860FAD060249C3CD1B02D0FE8E0602AD0002C913D0FEA9148D0002A90048284D
|
||||
:20134000A415089849C3A8288C03020849C3A8C0C3D0FE684930CD1D02D0FEA9004828A462
|
||||
:2013600016089849C3A8288C04020849C3A8C082D0FE684930CD1E02D0FEA9004828A4170D
|
||||
:20138000089849C3A8288C05020849C3A8C041D0FE684930CD1F02D0FEA9004828A4180839
|
||||
:2013A0009849C3A8288C06020849C3A8C000D0FE684930CD2002D0FEA9FF4828A4150898CC
|
||||
:2013C00049C3A8288C03020849C3A8C0C3D0FE68497DCD1D02D0FEA9FF4828A416089849F0
|
||||
:2013E000C3A8288C04020849C3A8C082D0FE68497DCD1E02D0FEA9FF4828A417089849C394
|
||||
:20140000A8288C05020849C3A8C041D0FE68497DCD1F02D0FEA9FF4828A418089849C3A8CC
|
||||
:20142000288C06020849C3A8C000D0FE68497DCD2002D0FEA9004828AC1802089849C3A888
|
||||
:2014400028840C0849C3A8C415D0FE684930CD1D02D0FEA9004828AC1902089849C3A8287A
|
||||
:20146000840D0849C3A8C416D0FE684930CD1E02D0FEA9004828AC1A02089849C3A82884FA
|
||||
:201480000E0849C3A8C417D0FE684930CD1F02D0FEA9004828AC1B02089849C3A828840F4B
|
||||
:2014A0000849C3A8C418D0FE684930CD2002D0FEA9FF4828AC1802089849C3A828840C0836
|
||||
:2014C00049C3A8C515D0FE68497DCD1D02D0FEA9FF4828AC1902089849C3A828840D08498B
|
||||
:2014E000C3A8C516D0FE68497DCD1E02D0FEA9FF4828AC1A02089849C3A828840E0849C3ED
|
||||
:20150000A8C517D0FE68497DCD1F02D0FEA9FF4828AC1B02089849C3A828840F0849C3A8E3
|
||||
:20152000C518D0FE68497DCD2002D0FEA9004828A0C308CC1802D0FE684930CD1D02D0FE42
|
||||
:20154000A9004828A08208CC1902D0FE684930CD1E02D0FEA9004828A04108CC1A02D0FE3F
|
||||
:20156000684930CD1F02D0FEA9004828A00008CC1B02D0FE684930CD2002D0FEA9FF4828A0
|
||||
:20158000A0C308CC1802D0FE68497DCD1D02D0FEA9FF4828A08208CC1902D0FE68497DCD52
|
||||
:2015A0001E02D0FEA9FF4828A04108CC1A02D0FE68497DCD1F02D0FEA9FF4828A00008CC10
|
||||
:2015C0001B02D0FE68497DCD2002D0FEA000A50C49C3C515D0FE840CAD030249C3CD1802FB
|
||||
:2015E000D0FE8C0302A50D49C3C516D0FE840DAD040249C3CD1902D0FE8C0402A50E49C3CE
|
||||
:20160000C517D0FE840EAD050249C3CD1A02D0FE8C0502A50F49C3C518D0FE840FAD0602D1
|
||||
:2016200049C3CD1B02D0FE8C0602AD0002C914D0FEA9158D0002A203A9004828B5150849D2
|
||||
:20164000C3289D03020849C3DD1802D0FE684930DD1D02D0FECA10E0A203A9FF4828B51538
|
||||
:201660000849C3289D03020849C3DD1802D0FE68497DDD1D02D0FECA10E0A203A900482843
|
||||
:20168000BD18020849C328950C0849C3D515D0FE684930DD1D02D0FECA10E1A203A9FF48CF
|
||||
:2016A00028BD18020849C328950C0849C3D515D0FE68497DDD1D02D0FECA10E1A203A0008A
|
||||
:2016C000B50C49C3D515D0FE940CBD030249C3DD1802D0FE8A9D0302CA10E5AD0002C915DA
|
||||
:2016E000D0FEA9168D0002A003A9004828B1260849C3289903020849C3D91802D0FE6849DB
|
||||
:2017000030D91D02D0FE8810E0A003A9FF4828B1260849C3289903020849C3D91802D0FE1A
|
||||
:2017200068497DD91D02D0FE8810E0A003A200B9030249C3D91802D0FE8A9903028810EFBE
|
||||
:20174000A003A9004828B918020849C32891320849C3D126D0FE684930D91D02D0FE8810E3
|
||||
:20176000E1A003A9FF4828B918020849C32891320849C3D126D0FE68497DD91D02D0FE88A6
|
||||
:2017800010E1A003A200B9030249C3D91802D0FE8A9903028810EFA206A003A9004828A1D4
|
||||
:2017A000260849C32881320849C3D91802D0FE684930D91D02D0FECACA8810DFA206A00342
|
||||
:2017C000A9FF4828A1260849C32881320849C3D91802D0FE68497DD91D02D0FECACA881046
|
||||
:2017E000DFA003A200B9030249C3D91802D0FE8A9903028810EFAD0002C916D0FEA9178DE2
|
||||
:201800000002A2FDB51B9D0901CAE0FAB0F6A2FDBD1E019512CAE0FAB0F6A203A000B50CF4
|
||||
:20182000D515D0FE940CBD0302DD1802D0FE8A9D0302CA10E9A0FBA2FEA12E990B01CACA97
|
||||
:2018400088C0F8B0F4A003A200B90302D91802D0FE8A9903028810F1A0FBB92001913A8867
|
||||
:20186000C0F8B0F6A003A200B90302D91802D0FE8A9903028810F1A0FBA2FEB130813ACAF4
|
||||
:20188000CA88C0F8B0F5A003A200B90302D91802D0FE8A9903028810F1AD0002C917D0FEC7
|
||||
:2018A000A9188D0002A9004828A5150849C3288D03020849C3C9C3D0FE684930CD1D02D02C
|
||||
:2018C000FEA9004828A5160849C3288D04020849C3C982D0FE684930CD1E02D0FEA90048AD
|
||||
:2018E00028A5170849C3288D05020849C3C941D0FE684930CD1F02D0FEA9004828A51808CD
|
||||
:2019000049C3288D06020849C3C900D0FE684930CD2002D0FEA9FF4828A5150849C3288D1A
|
||||
:2019200003020849C3C9C3D0FE68497DCD1D02D0FEA9FF4828A5160849C3288D0402084959
|
||||
:20194000C3C982D0FE68497DCD1E02D0FEA9FF4828A5170849C3288D05020849C3C941D030
|
||||
:20196000FE68497DCD1F02D0FEA9FF4828A5180849C3288D06020849C3C900D0FE68497D00
|
||||
:20198000CD2002D0FEA9004828AD18020849C328850C0849C3C515D0FE684930CD1D02D084
|
||||
:2019A000FEA9004828AD19020849C328850D0849C3C516D0FE684930CD1E02D0FEA9004830
|
||||
:2019C00028AD1A020849C328850E0849C3C517D0FE684930CD1F02D0FEA9004828AD1B0209
|
||||
:2019E0000849C328850F0849C3C518D0FE684930CD2002D0FEA9FF4828AD18020849C3289F
|
||||
:201A0000850C0849C3C515D0FE68497DCD1D02D0FEA9FF4828AD19020849C328850D084992
|
||||
:201A2000C3C516D0FE68497DCD1E02D0FEA9FF4828AD1A020849C328850E0849C3C517D0E1
|
||||
:201A4000FE68497DCD1F02D0FEA9FF4828AD1B020849C328850F0849C3C518D0FE68497DFF
|
||||
:201A6000CD2002D0FEA9004828A9C308CD1802D0FE684930CD1D02D0FEA9004828A9820880
|
||||
:201A8000CD1902D0FE684930CD1E02D0FEA9004828A94108CD1A02D0FE684930CD1F02D093
|
||||
:201AA000FEA9004828A90008CD1B02D0FE684930CD2002D0FEA9FF4828A9C308CD1802D0C5
|
||||
:201AC000FE68497DCD1D02D0FEA9FF4828A98208CD1902D0FE68497DCD1E02D0FEA9FF4846
|
||||
:201AE00028A94108CD1A02D0FE68497DCD1F02D0FEA9FF4828A90008CD1B02D0FE68497D7C
|
||||
:201B0000CD2002D0FEA200A50C49C3C515D0FE860CAD030249C3CD1802D0FE8E0302A50DB7
|
||||
:201B200049C3C516D0FE860DAD040249C3CD1902D0FE8E0402A50E49C3C517D0FE860EADAA
|
||||
:201B4000050249C3CD1A02D0FE8E0502A50F49C3C518D0FE860FAD060249C3CD1B02D0FEAD
|
||||
:201B60008E0602AD0002C918D0FEA9198D0002A90048A9FF28241808C9FFD0FE6848C932DA
|
||||
:201B8000D0FE28A90048A90128241708C901D0FE6848C970D0FE28A90048A90128241608CD
|
||||
:201BA000C901D0FE6848C9B2D0FE28A90048A90128241508C901D0FE6848C9F0D0FE28A9C8
|
||||
:201BC000FF48A9FF28241808C9FFD0FE6848C93FD0FE28A9FF48A90128241708C901D0FEC9
|
||||
:201BE0006848C97DD0FE28A9FF48A90128241608C901D0FE6848C9BFD0FE28A9FF48A90195
|
||||
:201C000028241508C901D0FE6848C9FDD0FE28A90048A9FF282C1B0208C9FFD0FE6848C936
|
||||
:201C200032D0FE28A90048A901282C1A0208C901D0FE6848C970D0FE28A90048A901282C03
|
||||
:201C4000190208C901D0FE6848C9B2D0FE28A90048A901282C180208C901D0FE6848C9F096
|
||||
:201C6000D0FE28A9FF48A9FF282C1B0208C9FFD0FE6848C93FD0FE28A9FF48A901282C1A11
|
||||
:201C80000208C901D0FE6848C97DD0FE28A9FF48A901282C190208C901D0FE6848C9BFD005
|
||||
:201CA000FE28A9FF48A901282C180208C901D0FE6848C9FDD0FE28AD0002C919D0FEA91AC8
|
||||
:201CC0008D0002A90048A28028E419086848C931D0FE28CAE419086848C933D0FE28CAE476
|
||||
:201CE0001908E07ED0FE6848C9B0D0FE28A9FF48A28028E419086848C97DD0FE28CAE41986
|
||||
:201D0000086848C97FD0FE28CAE41908E07ED0FE6848C9FCD0FE28A90048A28028EC1C0222
|
||||
:201D2000086848C931D0FE28CAEC1C02086848C933D0FE28CAEC1C0208E07ED0FE6848C9FC
|
||||
:201D4000B0D0FE28A9FF48A28028EC1C02086848C97DD0FE28CAEC1C02086848C97FD0FE03
|
||||
:201D600028CAEC1C0208E07ED0FE6848C9FCD0FE28A90048A28028E07F086848C931D0FEAE
|
||||
:201D800028CAE07F086848C933D0FE28CAE07F08E07ED0FE6848C9B0D0FE28A9FF48A280BA
|
||||
:201DA00028E07F086848C97DD0FE28CAE07F086848C97FD0FE28CAE07F08E07ED0FE68487C
|
||||
:201DC000C9FCD0FE28AD0002C91AD0FEA91B8D0002A90048A08028C419086848C931D0FEFF
|
||||
:201DE0002888C419086848C933D0FE2888C41908C07ED0FE6848C9B0D0FE28A9FF48A08004
|
||||
:201E000028C419086848C97DD0FE2888C419086848C97FD0FE2888C41908C07ED0FE684845
|
||||
:201E2000C9FCD0FE28A90048A08028CC1C02086848C931D0FE2888CC1C02086848C933D026
|
||||
:201E4000FE2888CC1C0208C07ED0FE6848C9B0D0FE28A9FF48A08028CC1C02086848C97D97
|
||||
:201E6000D0FE2888CC1C02086848C97FD0FE2888CC1C0208C07ED0FE6848C9FCD0FE28A96A
|
||||
:201E80000048A08028C07F086848C931D0FE2888C07F086848C933D0FE2888C07F08C07E4D
|
||||
:201EA000D0FE6848C9B0D0FE28A9FF48A08028C07F086848C97DD0FE2888C07F086848C982
|
||||
:201EC0007FD0FE2888C07F08C07ED0FE6848C9FCD0FE28AD0002C91BD0FEA91C8D0002A9E9
|
||||
:201EE0000048A98028C51908C980D0FE6848C931D0FE28A90048A97F28C51908C97FD0FE6F
|
||||
:201F00006848C933D0FE28A90048A97E28C51908C97ED0FE6848C9B0D0FE28A9FF48A980AC
|
||||
:201F200028C51908C980D0FE6848C97DD0FE28A9FF48A97F28C51908C97FD0FE6848C97F5C
|
||||
:201F4000D0FE28A9FF48A97E28C51908C97ED0FE6848C9FCD0FE28A90048A98028CD1C02B9
|
||||
:201F600008C980D0FE6848C931D0FE28A90048A97F28CD1C0208C97FD0FE6848C933D0FEDE
|
||||
:201F800028A90048A97E28CD1C0208C97ED0FE6848C9B0D0FE28A9FF48A98028CD1C02087E
|
||||
:201FA000C980D0FE6848C97DD0FE28A9FF48A97F28CD1C0208C97FD0FE6848C97FD0FE28E7
|
||||
:201FC000A9FF48A97E28CD1C0208C97ED0FE6848C9FCD0FE28A90048A98028C97F08C98074
|
||||
:201FE000D0FE6848C931D0FE28A90048A97F28C97F08C97FD0FE6848C933D0FE28A9004839
|
||||
:20200000A97E28C97F08C97ED0FE6848C9B0D0FE28A9FF48A98028C97F08C980D0FE684895
|
||||
:20202000C97DD0FE28A9FF48A97F28C97F08C97FD0FE6848C97FD0FE28A9FF48A97E28C9C8
|
||||
:202040007F08C97ED0FE6848C9FCD0FE28A204A90048A98028D51508C980D0FE6848C931DE
|
||||
:20206000D0FE28A90048A97F28D51508C97FD0FE6848C933D0FE28A90048A97E28D515084D
|
||||
:20208000C97ED0FE6848C9B0D0FE28A9FF48A98028D51508C980D0FE6848C97DD0FE28A92D
|
||||
:2020A000FF48A97F28D51508C97FD0FE6848C97FD0FE28A9FF48A97E28D51508C97ED0FE4D
|
||||
:2020C0006848C9FCD0FE28A90048A98028DD180208C980D0FE6848C931D0FE28A90048A903
|
||||
:2020E0007F28DD180208C97FD0FE6848C933D0FE28A90048A97E28DD180208C97ED0FE68C6
|
||||
:2021000048C9B0D0FE28A9FF48A98028DD180208C980D0FE6848C97DD0FE28A9FF48A97FAD
|
||||
:2021200028DD180208C97FD0FE6848C97FD0FE28A9FF48A97E28DD180208C97ED0FE684871
|
||||
:20214000C9FCD0FE28A004A208A90048A98028D9180208C980D0FE6848C931D0FE28A900D9
|
||||
:2021600048A97F28D9180208C97FD0FE6848C933D0FE28A90048A97E28D9180208C97ED0C2
|
||||
:20218000FE6848C9B0D0FE28A9FF48A98028D9180208C980D0FE6848C97DD0FE28A9FF48F3
|
||||
:2021A000A97F28D9180208C97FD0FE6848C97FD0FE28A9FF48A97E28D9180208C97ED0FE81
|
||||
:2021C0006848C9FCD0FE28A90048A98028C12608C980D0FE6848C931D0FE28A90048A97F93
|
||||
:2021E00028C12608C97FD0FE6848C933D0FE28A90048A97E28C12608C97ED0FE6848C9B0A3
|
||||
:20220000D0FE28A9FF48A98028C12608C980D0FE6848C97DD0FE28A9FF48A97F28C1260866
|
||||
:20222000C97FD0FE6848C97FD0FE28A9FF48A97E28C12608C97ED0FE6848C9FCD0FE28A943
|
||||
:202240000048A98028D12608C980D0FE6848C931D0FE28A90048A97F28D12608C97FD0FED9
|
||||
:202260006848C933D0FE28A90048A97E28D12608C97ED0FE6848C9B0D0FE28A9FF48A98030
|
||||
:2022800028D12608C980D0FE6848C97DD0FE28A9FF48A97F28D12608C97FD0FE6848C97FC7
|
||||
:2022A000D0FE28A9FF48A97E28D12608C97ED0FE6848C9FCD0FE28AD0002C91CD0FEA91D42
|
||||
:2022C0008D0002A205A90048B513280A08DD2102D0FE684930DD3902D0FECA10E8A205A92E
|
||||
:2022E000FF48B513280A08DD2102D0FE68497CDD3902D0FECA10E8A205A90048B513284A20
|
||||
:2023000008DD2D02D0FE684930DD4502D0FECA10E8A205A9FF48B513284A08DD2D02D0FE93
|
||||
:2023200068497CDD4502D0FECA10E8A205A90048B513282A08DD2102D0FE684930DD39023B
|
||||
:20234000D0FECA10E8A205A9FE48B513282A08DD2102D0FE68497CDD3902D0FECA10E8A2F0
|
||||
:2023600005A90148B513282A08DD2702D0FE684930DD3F02D0FECA10E8A205A9FF48B51382
|
||||
:20238000282A08DD2702D0FE68497CDD3F02D0FECA10E8A205A90048B513286A08DD2D022E
|
||||
:2023A000D0FE684930DD4502D0FECA10E8A205A9FE48B513286A08DD2D02D0FE68497CDDDE
|
||||
:2023C0004502D0FECA10E8A205A90148B513286A08DD3302D0FE684930DD4B02D0FECA1098
|
||||
:2023E000E8A205A9FF48B513286A08DD3302D0FE68497CDD4B02D0FECA10E8AD0002C91DA0
|
||||
:20240000D0FEA91E8D0002A205A90048B513850C28060C08A50CDD2102D0FE684930DD39EF
|
||||
:2024200002D0FECA10E3A205A9FF48B513850C28060C08A50CDD2102D0FE68497CDD390219
|
||||
:20244000D0FECA10E3A205A90048B513850C28460C08A50CDD2D02D0FE684930DD4502D01E
|
||||
:20246000FECA10E3A205A9FF48B513850C28460C08A50CDD2D02D0FE68497CDD4502D0FE85
|
||||
:20248000CA10E3A205A90048B513850C28260C08A50CDD2102D0FE684930DD3902D0FECA1C
|
||||
:2024A00010E3A205A9FE48B513850C28260C08A50CDD2102D0FE68497CDD3902D0FECA106C
|
||||
:2024C000E3A205A90148B513850C28260C08A50CDD2702D0FE684930DD3F02D0FECA10E3B6
|
||||
:2024E000A205A9FF48B513850C28260C08A50CDD2702D0FE68497CDD3F02D0FECA10E3A28D
|
||||
:2025000005A90048B513850C28660C08A50CDD2D02D0FE684930DD4502D0FECA10E3A20508
|
||||
:20252000A9FE48B513850C28660C08A50CDD2D02D0FE68497CDD4502D0FECA10E3A205A9FA
|
||||
:202540000148B513850C28660C08A50CDD3302D0FE684930DD4B02D0FECA10E3A205A9FFC1
|
||||
:2025600048B513850C28660C08A50CDD3302D0FE68497CDD4B02D0FECA10E3AD0002C91E0F
|
||||
:20258000D0FEA91F8D0002A205A90048B5138D0302280E030208AD0302DD2102D0FE6849B0
|
||||
:2025A00030DD3902D0FECA10E0A205A9FF48B5138D0302280E030208AD0302DD2102D0FE97
|
||||
:2025C00068497CDD3902D0FECA10E0A205A90048B5138D0302284E030208AD0302DD2D02FB
|
||||
:2025E000D0FE684930DD4502D0FECA10E0A205A9FF48B5138D0302284E030208AD0302DD7D
|
||||
:202600002D02D0FE68497CDD4502D0FECA10E0A205A90048B5138D0302282E030208AD03DF
|
||||
:2026200002DD2102D0FE684930DD3902D0FECA10E0A205A9FE48B5138D0302282E030208F6
|
||||
:20264000AD0302DD2102D0FE68497CDD3902D0FECA10E0A205A90148B5138D0302282E03E1
|
||||
:202660000208AD0302DD2702D0FE684930DD3F02D0FECA10E0A205A9FF48B5138D0302282A
|
||||
:202680002E030208AD0302DD2702D0FE68497CDD3F02D0FECA10E0A205A90048B5138D03B6
|
||||
:2026A00002286E030208AD0302DD2D02D0FE684930DD4502D0FECA10E0A205A9FE48B513FE
|
||||
:2026C0008D0302286E030208AD0302DD2D02D0FE68497CDD4502D0FECA10E0A205A90148C7
|
||||
:2026E000B5138D0302286E030208AD0302DD3302D0FE684930DD4B02D0FECA10E0A205A968
|
||||
:20270000FF48B5138D0302286E030208AD0302DD3302D0FE68497CDD4B02D0FECA10E0AD57
|
||||
:202720000002C91FD0FEA9208D0002A205A90048B513950C28160C08B50CDD2102D0FE683F
|
||||
:202740004930DD3902D0FECA10E3A205A9FF48B513950C28160C08B50CDD2102D0FE6849CB
|
||||
:202760007CDD3902D0FECA10E3A205A90048B513950C28560C08B50CDD2D02D0FE6849302B
|
||||
:20278000DD4502D0FECA10E3A205A9FF48B513950C28560C08B50CDD2D02D0FE68497CDD53
|
||||
:2027A0004502D0FECA10E3A205A90048B513950C28360C08B50CDD2102D0FE684930DD394E
|
||||
:2027C00002D0FECA10E3A205A9FE48B513950C28360C08B50CDD2102D0FE68497CDD390227
|
||||
:2027E000D0FECA10E3A205A90148B513950C28360C08B50CDD2702D0FE684930DD3F02D076
|
||||
:20280000FECA10E3A205A9FF48B513950C28360C08B50CDD2702D0FE68497CDD3F02D0FEDD
|
||||
:20282000CA10E3A205A90048B513950C28760C08B50CDD2D02D0FE684930DD4502D0FECAF0
|
||||
:2028400010E3A205A9FE48B513950C28760C08B50CDD2D02D0FE68497CDD4502D0FECA1040
|
||||
:20286000E3A205A90148B513950C28760C08B50CDD3302D0FE684930DD4B02D0FECA10E38A
|
||||
:20288000A205A9FF48B513950C28760C08B50CDD3302D0FE68497CDD4B02D0FECA10E3AD56
|
||||
:2028A0000002C920D0FEA9218D0002A205A90048B5139D0302281E030208BD0302DD2102EF
|
||||
:2028C000D0FE684930DD3902D0FECA10E0A205A9FF48B5139D0302281E030208BD0302DDB6
|
||||
:2028E0002102D0FE68497CDD3902D0FECA10E0A205A90048B5139D0302285E030208BD03C5
|
||||
:2029000002DD2D02D0FE684930DD4502D0FECA10E0A205A9FF48B5139D0302285E030208BA
|
||||
:20292000BD0302DD2D02D0FE68497CDD4502D0FECA10E0A205A90048B5139D0302283E03B7
|
||||
:202940000208BD0302DD2102D0FE684930DD3902D0FECA10E0A205A9FE48B5139D03022834
|
||||
:202960003E030208BD0302DD2102D0FE68497CDD3902D0FECA10E0A205A90148B5139D03AE
|
||||
:2029800002283E030208BD0302DD2702D0FE684930DD3F02D0FECA10E0A205A9FF48B51346
|
||||
:2029A0009D0302283E030208BD0302DD2702D0FE68497CDD3F02D0FECA10E0A205A9004801
|
||||
:2029C000B5139D0302287E030208BD0302DD2D02D0FE684930DD4502D0FECA10E0A205A961
|
||||
:2029E000FE48B5139D0302287E030208BD0302DD2D02D0FE68497CDD4502D0FECA10E0A25D
|
||||
:202A000005A90148B5139D0302287E030208BD0302DD3302D0FE684930DD4B02D0FECA104D
|
||||
:202A2000E0A205A9FF48B5139D0302287E030208BD0302DD3302D0FE68497CDD4B02D0FE3B
|
||||
:202A4000CA10E0AD0002C921D0FEA9228D0002A200A97E850CA9004828E60C08A50CDD51AF
|
||||
:202A600002D0FE684930DD5602D0FEE8E002D004A9FE850CE005D0DDCAE60CA9004828C69F
|
||||
:202A80000C08A50CDD5102D0FE684930DD5602D0FECA300AE001D0E3A981850CD0DDA200ED
|
||||
:202AA000A97E850CA9FF4828E60C08A50CDD5102D0FE68497DDD5602D0FEE8E002D004A925
|
||||
:202AC000FE850CE005D0DDCAE60CA9FF4828C60C08A50CDD5102D0FE68497DDD5602D0FE47
|
||||
:202AE000CA300AE001D0E3A981850CD0DDAD0002C922D0FEA9238D0002A200A97E8D0302B8
|
||||
:202B0000A9004828EE030208AD0302DD5102D0FE684930DD5602D0FEE8E002D005A9FE8D3A
|
||||
:202B20000302E005D0DACAEE0302A9004828CE030208AD0302DD5102D0FE684930DD56028A
|
||||
:202B4000D0FECA300BE001D0E1A9818D0302D0DAA200A97E8D0302A9FF4828EE030208AD8F
|
||||
:202B60000302DD5102D0FE68497DDD5602D0FEE8E002D005A9FE8D0302E005D0DACAEE03FF
|
||||
:202B800002A9FF4828CE030208AD0302DD5102D0FE68497DDD5602D0FECA300BE001D0E1C8
|
||||
:202BA000A9818D0302D0DAAD0002C923D0FEA9248D0002A200A97E950CA9004828F60C085D
|
||||
:202BC000B50CDD5102D0FE684930DD5602D0FEB50CE8E002D002A9FEE005D0DBCAA90295B4
|
||||
:202BE0000CA9004828D60C08B50CDD5102D0FE684930DD5602D0FEB50CCA3008E001D0DFD0
|
||||
:202C0000A981D0DBA200A97E950CA9FF4828F60C08B50CDD5102D0FE68497DDD5602D0FE63
|
||||
:202C2000B50CE8E002D002A9FEE005D0DBCAA902950CA9FF4828D60C08B50CDD5102D0FE29
|
||||
:202C400068497DDD5602D0FEB50CCA3008E001D0DFA981D0DBAD0002C924D0FEA9258D0056
|
||||
:202C600002A200A97E9D0302A9004828FE030208BD0302DD5102D0FE684930DD5602D0FE1F
|
||||
:202C8000BD0302E8E002D002A9FEE005D0D7CAA9029D0302A9004828DE030208BD0302DDE9
|
||||
:202CA0005102D0FE684930DD5602D0FEBD0302CA3008E001D0DBA981D0D7A200A97E9D0385
|
||||
:202CC00002A9FF4828FE030208BD0302DD5102D0FE68497DDD5602D0FEBD0302E8E002D082
|
||||
:202CE00002A9FEE005D0D7CAA9029D0302A9FF4828DE030208BD0302DD5102D0FE68497D97
|
||||
:202D0000DD5602D0FEBD0302CA3008E001D0DBA981D0D7AD0002C925D0FEA9268D0002A224
|
||||
:202D200003B51E8D0A02A90048BD6B022820090208DD7302D0FE684930DD7702D0FECA10AF
|
||||
:202D4000E0A203B51E8D0A02A9FF48BD6B022820090208DD7302D0FE68497DDD7702D0FE9B
|
||||
:202D6000CA10E0A203B51E850CA90048BD6B0228250C08DD7302D0FE684930DD7702D0FEEF
|
||||
:202D8000CA10E2A203B51E850CA9FF48BD6B0228250C08DD7302D0FE68497DDD7702D0FE81
|
||||
:202DA000CA10E2A203B51E8D0302A90048BD6B02282D030208DD7302D0FE684930DD770279
|
||||
:202DC000D0FECA10E0A203B51E8D0302A9FF48BD6B02282D030208DD7302D0FE68497DDDBA
|
||||
:202DE0007702D0FECA1002A203A90048BD6B0228351E08DD7302D0FE684930DD7702D0FE48
|
||||
:202E0000CA10E6A203A9FF48BD6B0228351E08DD7302D0FE68497DDD7702D0FECA10E6A2DC
|
||||
:202E200003A90048BD6B02283D5F0208DD7302D0FE684930DD7702D0FECA10E5A203A9FF75
|
||||
:202E400048BD6B02283D5F0208DD7302D0FE68497DDD7702D0FECA10E5A003A90048B96B49
|
||||
:202E60000228395F0208D97302D0FE684930D97702D0FE8810E5A003A9FF48B96B022839D2
|
||||
:202E80005F0208D97302D0FE68497DD97702D0FE8810E5A206A003A90048B96B0228213CFB
|
||||
:202EA00008D97302D0FE684930D97702D0FECACA8810E4A206A003A9FF48B96B0228213CF7
|
||||
:202EC00008D97302D0FE68497DD97702D0FECACA8810E4A003A90048B96B0228313C08D940
|
||||
:202EE0007302D0FE684930D97702D0FE8810E6A003A9FF48B96B0228313C08D97302D0FE9E
|
||||
:202F000068497DD97702D0FE8810E6AD0002C926D0FEA9278D0002A203B5228D0D02A90059
|
||||
:202F200048BD6F0228200C0208DD7302D0FE684930DD7702D0FECA10E0A203B5228D0D02C6
|
||||
:202F4000A9FF48BD6F0228200C0208DD7302D0FE68497DDD7702D0FECA10E0A203B52285C8
|
||||
:202F60000CA90048BD6F0228450C08DD7302D0FE684930DD7702D0FECA10E2A203B52285C3
|
||||
:202F80000CA9FF48BD6F0228450C08DD7302D0FE68497DDD7702D0FECA10E2A203B5228D4F
|
||||
:202FA0000302A90048BD6F02284D030208DD7302D0FE684930DD7702D0FECA10E0A203B532
|
||||
:202FC000228D0302A9FF48BD6F02284D030208DD7302D0FE68497DDD7702D0FECA1002A2AD
|
||||
:202FE00003A90048BD6F0228552208DD7302D0FE684930DD7702D0FECA10E6A203A9FF488E
|
||||
:20300000BD6F0228552208DD7302D0FE68497DDD7702D0FECA10E6A203A90048BD6F0228BD
|
||||
:203020005D630208DD7302D0FE684930DD7702D0FECA10E5A203A9FF48BD6F02285D630235
|
||||
:2030400008DD7302D0FE68497DDD7702D0FECA10E5A003A90048B96F022859630208D9733F
|
||||
:2030600002D0FE684930D97702D0FE8810E5A003A9FF48B96F022859630208D97302D0FE3B
|
||||
:2030800068497DD97702D0FE8810E5A206A003A90048B96F0228414408D97302D0FE68497D
|
||||
:2030A00030D97702D0FECACA8810E4A206A003A9FF48B96F0228414408D97302D0FE6849C9
|
||||
:2030C0007DD97702D0FECACA8810E4A003A90048B96F0228514408D97302D0FE684930D9EA
|
||||
:2030E0007702D0FE8810E6A003A9FF48B96F0228514408D97302D0FE68497DD97702D0FE1F
|
||||
:203100008810E6AD0002C927D0FEA9288D0002A203B51A8D1002A90048BD670228200F02E1
|
||||
:2031200008DD7302D0FE684930DD7702D0FECA10E0A203B51A8D1002A9FF48BD6702282037
|
||||
:203140000F0208DD7302D0FE68497DDD7702D0FECA10E0A203B51A850CA90048BD670228E6
|
||||
:20316000050C08DD7302D0FE684930DD7702D0FECA10E2A203B51A850CA9FF48BD67022812
|
||||
:20318000050C08DD7302D0FE68497DDD7702D0FECA10E2A203B51A8D0302A90048BD6702CB
|
||||
:2031A000280D030208DD7302D0FE684930DD7702D0FECA10E0A203B51A8D0302A9FF48BD3B
|
||||
:2031C0006702280D030208DD7302D0FE68497DDD7702D0FECA1002A203A90048BD67022812
|
||||
:2031E000151A08DD7302D0FE684930DD7702D0FECA10E6A203A9FF48BD670228151A08DDBC
|
||||
:203200007302D0FE68497DDD7702D0FECA10E6A203A90048BD6702281D5B0208DD7302D0D1
|
||||
:20322000FE684930DD7702D0FECA10E5A203A9FF48BD6702281D5B0208DD7302D0FE684996
|
||||
:203240007DDD7702D0FECA10E5A003A90048B9670228195B0208D97302D0FE684930D97765
|
||||
:2032600002D0FE8810E5A003A9FF48B9670228195B0208D97302D0FE68497DD97702D0FE3C
|
||||
:203280008810E5A206A003A90048B9670228014C08D97302D0FE684930D97702D0FECACA25
|
||||
:2032A0008810E4A206A003A9FF48B9670228014C08D97302D0FE68497DD97702D0FECACABA
|
||||
:2032C0008810E4A003A90048B9670228114C08D97302D0FE684930D97702D0FE8810E6A0F4
|
||||
:2032E00003A9FF48B9670228114C08D97302D0FE68497DD97702D0FE8810E658AD0002C974
|
||||
:2033000028D0FEA9298D0002D8A20EA0FFA900850C850D850E8D0302850F8510A9FF8512D6
|
||||
:203320008D0402A90285111820A335E60CE60F080868298228D002E610051085113820A309
|
||||
:2033400035C60CE60DD0E0A9008510EE0302E60E086829828511C612CE0402A50E850FD02A
|
||||
:20336000C6AD0002C929D0FEA92A8D0002F8A20EA0FFA999850D850E8D0302850FA90185B3
|
||||
:203380000C8510A90085128D040238207034C60CA50FD008C610A999850FD012290FD00CBD
|
||||
:2033A000C60FC60FC60FC60FC60FC60FC60F18207034E60CA50DF015290FD00CC60DC60DFB
|
||||
:2033C000C60DC60DC60DC60DC60D4C8A33A999850DA50EF030290FD018C60EC60EC60EC6BC
|
||||
:2033E0000EC60EC60EE612E612E612E612E612E612C60EE612A5128D0402A50E8D03028567
|
||||
:203400000FE610D085AD0002C92AD0FEA92B8D000218D808A9556955C9AAD0FE18F808A9C9
|
||||
:20342000556955C910D0FED828A9556955C910D0FE28A9556955C9AAD0FE18A93448A9550F
|
||||
:203440004808F8A93448A94C4808D840A9556955C910D0FE40A9556955C9AAD0FEAD000253
|
||||
:20346000C92BD0FEA9F08D0002DB4C6A344C000408A50D650E08C50FD0FE682901C510D03F
|
||||
:20348000FE2808A50DE51208C50FD0FE682901C510D0FE2808A50D6D030208C50FD0FE6810
|
||||
:2034A0002901C510D0FE2808A50DED040208C50FD0FE682901C510D0FE2808A50E8D130206
|
||||
:2034C000A50D20120208C50FD0FE682901C510D0FE2808A5128D1602A50D20150208C50FD6
|
||||
:2034E000D0FE682901C510D0FE2808A50D750008C50FD0FE682901C510D0FE2808A50DF5BC
|
||||
:203500000408C50FD0FE682901C510D0FE2808A50D7DF50108C50FD0FE682901C510D0FE94
|
||||
:203520002808A50DFDF60108C50FD0FE682901C510D0FE2808A50D79040108C50FD0FE6864
|
||||
:203540002901C510D0FE2808A50DF9050108C50FD0FE682901C510D0FE2808A50D6146084D
|
||||
:20356000C50FD0FE682901C510D0FE2808A50DE14808C50FD0FE682901C510D0FE2808A5B5
|
||||
:203580000D715808C50FD0FE682901C510D0FE2808A50DF15A08C50FD0FE682901C510D068
|
||||
:2035A000FE2860A511298348A50D450E300AA50D450F10046809404868851108A50D650E5E
|
||||
:2035C00008C50FD0FE6829C3C511D0FE2808A50DE51208C50FD0FE6829C3C511D0FE28089E
|
||||
:2035E000A50D6D030208C50FD0FE6829C3C511D0FE2808A50DED040208C50FD0FE6829C332
|
||||
:20360000C511D0FE2808A50E8D1302A50D20120208C50FD0FE6829C3C511D0FE2808A51212
|
||||
:203620008D1602A50D20150208C50FD0FE6829C3C511D0FE2808A50D750008C50FD0FE68F1
|
||||
:2036400029C3C511D0FE2808A50DF50408C50FD0FE6829C3C511D0FE2808A50D7DF5010800
|
||||
:20366000C50FD0FE6829C3C511D0FE2808A50DFDF60108C50FD0FE6829C3C511D0FE280808
|
||||
:20368000A50D79040108C50FD0FE6829C3C511D0FE2808A50DF9050108C50FD0FE6829C379
|
||||
:2036A000C511D0FE2808A50D614608C50FD0FE6829C3C511D0FE2808A50DE14808C50FD084
|
||||
:2036C000FE6829C3C511D0FE2808A50D715808C50FD0FE6829C3C511D0FE2808A50DF15A7A
|
||||
:2036E00008C50FD0FE6829C3C511D0FE286088880888888828B0FE70FE30FEF0FEC946D0B1
|
||||
:20370000FEE041D0FEC04FD0FE488A48BAE0FDD0FE68AAA9FF482868E849AA4C0F09273731
|
||||
:2037200064094C223788880888888828B0FE70FE30FEF0FEC949D0FEE04ED0FEC041D0FEBC
|
||||
:20374000488A48BAE0FDD0FE68AAA9FF482868E849AA6C20374C55374C000488880888886A
|
||||
:203760008828B0FE70FE30FEF0FEC94AD0FEE053D0FEC04FD0FE488A48BAE0FBD0FEADFF79
|
||||
:2037800001C909D0FEADFE01C99AD0FEA9FF482868AA68E849AA604C97374C00044C9D3754
|
||||
:2037A0004C00044CA3374C0004888808888888C9BDF042C942D0FEE052D0FEC048D0FE85A7
|
||||
:2037C0000A860BBABD0201C930D0FE68C934D0FEBAE0FCD0FEADFF01C909D0FEADFE01C9B4
|
||||
:2037E000D1D0FEA9FF48A60BE8A50A49AA28404CEF374C0004E0ADD0FEC0B1D0FE850A8626
|
||||
:203800000BBABD0201C9FFD0FE680908C9FFD0FEBAE0FCD0FEADFF01C909D0FEADFE01C958
|
||||
:15382000F7D0FEA90448A60BE8A50A49AA28404C2F384C000433
|
||||
:06FFFA009D37A337AB3771
|
||||
:00040001FB
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,355 @@
|
|||
; Verify decimal mode behavior
|
||||
; Written by Bruce Clark. This code is public domain.
|
||||
; see http://www.6502.org/tutorials/decimal_mode.html
|
||||
;
|
||||
; Returns:
|
||||
; ERROR = 0 if the test passed
|
||||
; ERROR = 1 if the test failed
|
||||
; modify the code at the DONE label for desired program end
|
||||
;
|
||||
; This routine requires 17 bytes of RAM -- 1 byte each for:
|
||||
; AR, CF, DA, DNVZC, ERROR, HA, HNVZC, N1, N1H, N1L, N2, N2L, NF, VF, and ZF
|
||||
; and 2 bytes for N2H
|
||||
;
|
||||
; Variables:
|
||||
; N1 and N2 are the two numbers to be added or subtracted
|
||||
; N1H, N1L, N2H, and N2L are the upper 4 bits and lower 4 bits of N1 and N2
|
||||
; DA and DNVZC are the actual accumulator and flag results in decimal mode
|
||||
; HA and HNVZC are the accumulator and flag results when N1 and N2 are
|
||||
; added or subtracted using binary arithmetic
|
||||
; AR, NF, VF, ZF, and CF are the predicted decimal mode accumulator and
|
||||
; flag results, calculated using binary arithmetic
|
||||
;
|
||||
; This program takes approximately 1 minute at 1 MHz (a few seconds more on
|
||||
; a 65C02 than a 6502 or 65816)
|
||||
;
|
||||
|
||||
; Configuration:
|
||||
cputype = 1 ; 0 = 6502, 1 = 65C02, 2 = 65C816
|
||||
vld_bcd = 0 ; 0 = allow invalid bcd, 1 = valid bcd only
|
||||
chk_a = 1 ; check accumulator
|
||||
chk_n = 1 ; check sign (negative) flag
|
||||
chk_v = 1 ; check overflow flag
|
||||
chk_z = 1 ; check zero flag
|
||||
chk_c = 1 ; check carry flag
|
||||
|
||||
end_of_test macro
|
||||
db $db ;execute 65C02 stop instruction
|
||||
endm
|
||||
|
||||
bss
|
||||
org 0
|
||||
; operands - register Y = carry in
|
||||
N1 ds 1
|
||||
N2 ds 1
|
||||
; binary result
|
||||
HA ds 1
|
||||
HNVZC ds 1
|
||||
;04
|
||||
; decimal result
|
||||
DA ds 1
|
||||
DNVZC ds 1
|
||||
; predicted results
|
||||
AR ds 1
|
||||
NF ds 1
|
||||
;08
|
||||
VF ds 1
|
||||
ZF ds 1
|
||||
CF ds 1
|
||||
ERROR ds 1
|
||||
;0C
|
||||
; workspace
|
||||
N1L ds 1
|
||||
N1H ds 1
|
||||
N2L ds 1
|
||||
N2H ds 2
|
||||
|
||||
code
|
||||
org $200
|
||||
TEST ldy #1 ; initialize Y (used to loop through carry flag values)
|
||||
sty ERROR ; store 1 in ERROR until the test passes
|
||||
lda #0 ; initialize N1 and N2
|
||||
sta N1
|
||||
sta N2
|
||||
LOOP1 lda N2 ; N2L = N2 & $0F
|
||||
and #$0F ; [1] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT2
|
||||
endif
|
||||
sta N2L
|
||||
lda N2 ; N2H = N2 & $F0
|
||||
and #$F0 ; [2] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT2
|
||||
endif
|
||||
sta N2H
|
||||
ora #$0F ; N2H+1 = (N2 & $F0) + $0F
|
||||
sta N2H+1
|
||||
LOOP2 lda N1 ; N1L = N1 & $0F
|
||||
and #$0F ; [3] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT1
|
||||
endif
|
||||
sta N1L
|
||||
lda N1 ; N1H = N1 & $F0
|
||||
and #$F0 ; [4] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT1
|
||||
endif
|
||||
sta N1H
|
||||
jsr ADD
|
||||
jsr A6502
|
||||
jsr COMPARE
|
||||
bne DONE
|
||||
jsr SUB
|
||||
jsr S6502
|
||||
jsr COMPARE
|
||||
bne DONE
|
||||
NEXT1 inc N1 ; [5] see text
|
||||
bne LOOP2 ; loop through all 256 values of N1
|
||||
NEXT2 inc N2 ; [6] see text
|
||||
bne LOOP1 ; loop through all 256 values of N2
|
||||
dey
|
||||
bpl LOOP1 ; loop through both values of the carry flag
|
||||
lda #0 ; test passed, so store 0 in ERROR
|
||||
sta ERROR
|
||||
DONE
|
||||
end_of_test
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, the accumulator
|
||||
; and flag results when N1 is added to N2 using binary arithmetic, the
|
||||
; predicted accumulator result, the predicted carry flag, and the predicted
|
||||
; V flag
|
||||
;
|
||||
ADD sed ; decimal mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
adc N2
|
||||
sta DA ; actual accumulator result in decimal mode
|
||||
php
|
||||
pla
|
||||
sta DNVZC ; actual flags result in decimal mode
|
||||
cld ; binary mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
adc N2
|
||||
sta HA ; accumulator result of N1+N2 using binary arithmetic
|
||||
|
||||
php
|
||||
pla
|
||||
sta HNVZC ; flags result of N1+N2 using binary arithmetic
|
||||
cpy #1
|
||||
lda N1L
|
||||
adc N2L
|
||||
cmp #$0A
|
||||
ldx #0
|
||||
bcc A1
|
||||
inx
|
||||
adc #5 ; add 6 (carry is set)
|
||||
and #$0F
|
||||
sec
|
||||
A1 ora N1H
|
||||
;
|
||||
; if N1L + N2L < $0A, then add N2 & $F0
|
||||
; if N1L + N2L >= $0A, then add (N2 & $F0) + $0F + 1 (carry is set)
|
||||
;
|
||||
adc N2H,x
|
||||
php
|
||||
bcs A2
|
||||
cmp #$A0
|
||||
bcc A3
|
||||
A2 adc #$5F ; add $60 (carry is set)
|
||||
sec
|
||||
A3 sta AR ; predicted accumulator result
|
||||
php
|
||||
pla
|
||||
sta CF ; predicted carry result
|
||||
pla
|
||||
;
|
||||
; note that all 8 bits of the P register are stored in VF
|
||||
;
|
||||
sta VF ; predicted V flags
|
||||
rts
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, and the
|
||||
; accumulator and flag results when N2 is subtracted from N1 using binary
|
||||
; arithmetic
|
||||
;
|
||||
SUB sed ; decimal mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
sbc N2
|
||||
sta DA ; actual accumulator result in decimal mode
|
||||
php
|
||||
pla
|
||||
sta DNVZC ; actual flags result in decimal mode
|
||||
cld ; binary mode
|
||||
cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1
|
||||
sbc N2
|
||||
sta HA ; accumulator result of N1-N2 using binary arithmetic
|
||||
|
||||
php
|
||||
pla
|
||||
sta HNVZC ; flags result of N1-N2 using binary arithmetic
|
||||
rts
|
||||
|
||||
if cputype != 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65816
|
||||
;
|
||||
SUB1 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S11
|
||||
inx
|
||||
sbc #5 ; subtract 6 (carry is clear)
|
||||
and #$0F
|
||||
clc
|
||||
S11 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S12
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S12 sta AR
|
||||
rts
|
||||
endif
|
||||
|
||||
if cputype = 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65C02
|
||||
;
|
||||
SUB2 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S21
|
||||
inx
|
||||
and #$0F
|
||||
clc
|
||||
S21 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S22
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S22 cpx #0
|
||||
beq S23
|
||||
sbc #6
|
||||
S23 sta AR ; predicted accumulator result
|
||||
rts
|
||||
endif
|
||||
|
||||
; Compare accumulator actual results to predicted results
|
||||
;
|
||||
; Return:
|
||||
; Z flag = 1 (BEQ branch) if same
|
||||
; Z flag = 0 (BNE branch) if different
|
||||
;
|
||||
COMPARE
|
||||
if chk_a = 1
|
||||
lda DA
|
||||
cmp AR
|
||||
bne C1
|
||||
endif
|
||||
if chk_n = 1
|
||||
lda DNVZC ; [7] see text
|
||||
eor NF
|
||||
and #$80 ; mask off N flag
|
||||
bne C1
|
||||
endif
|
||||
if chk_v = 1
|
||||
lda DNVZC ; [8] see text
|
||||
eor VF
|
||||
and #$40 ; mask off V flag
|
||||
bne C1 ; [9] see text
|
||||
endif
|
||||
if chk_z = 1
|
||||
lda DNVZC
|
||||
eor ZF ; mask off Z flag
|
||||
and #2
|
||||
bne C1 ; [10] see text
|
||||
endif
|
||||
if chk_c = 1
|
||||
lda DNVZC
|
||||
eor CF
|
||||
and #1 ; mask off C flag
|
||||
endif
|
||||
C1 rts
|
||||
|
||||
; These routines store the predicted values for ADC and SBC for the 6502,
|
||||
; 65C02, and 65816 in AR, CF, NF, VF, and ZF
|
||||
|
||||
if cputype = 0
|
||||
|
||||
A6502 lda VF ; 6502
|
||||
;
|
||||
; since all 8 bits of the P register were stored in VF, bit 7 of VF contains
|
||||
; the N flag for NF
|
||||
;
|
||||
sta NF
|
||||
lda HNVZC
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda HNVZC
|
||||
sta NF
|
||||
sta VF
|
||||
sta ZF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 1
|
||||
|
||||
A6502 lda AR ; 65C02
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB2
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 2
|
||||
|
||||
A6502 lda AR ; 65C816
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
|
||||
end TEST
|
|
@ -0,0 +1,10 @@
|
|||
:20020000A001840BA90085008501A501290F850EA50129F0850F090F8510A500290F850C1B
|
||||
:20022000A50029F0850D204C0220EF0220CA02D01A20900220F80220CA02D00FE600D0DAF2
|
||||
:20024000E601D0C68810C3A900850BDBF8C001A5006501850408688505D8C001A5006501C7
|
||||
:20026000850208688503C001A50C650EC90AA2009006E86905290F38050D750F08B004C92E
|
||||
:20028000A09003695F3885060868850A68850860F8C001A500E501850408688505D8C001EC
|
||||
:2002A000A500E50185020868850360C001A50CE50EA200B004E8290F18050DF50FB002E930
|
||||
:2002C0005FE000F002E906850660A504C506D01EA50545072980D016A50545082940D00EEE
|
||||
:2002E000A50545092902D006A505450A290160A5060868850785096020AB02A50608688580
|
||||
:0A030000078509A5038508850A603A
|
||||
:00020001FD
|
|
@ -0,0 +1,363 @@
|
|||
AS65 Assembler for R6502 [1.42]. Copyright 1994-2007, Frank A. Kingswood Page 1
|
||||
----------------------------------------------------- 6502_decimal_test.a65 ------------------------------------------------------
|
||||
|
||||
355 lines read, no errors in pass 1.
|
||||
; Verify decimal mode behavior
|
||||
; Written by Bruce Clark. This code is public domain.
|
||||
; see http://www.6502.org/tutorials/decimal_mode.html
|
||||
;
|
||||
; Returns:
|
||||
; ERROR = 0 if the test passed
|
||||
; ERROR = 1 if the test failed
|
||||
; modify the code at the DONE label for desired program end
|
||||
;
|
||||
; This routine requires 17 bytes of RAM -- 1 byte each for:
|
||||
; AR, CF, DA, DNVZC, ERROR, HA, HNVZC, N1, N1H, N1L, N2, N2L, NF, VF, and ZF
|
||||
; and 2 bytes for N2H
|
||||
;
|
||||
; Variables:
|
||||
; N1 and N2 are the two numbers to be added or subtracted
|
||||
; N1H, N1L, N2H, and N2L are the upper 4 bits and lower 4 bits of N1 and N2
|
||||
; DA and DNVZC are the actual accumulator and flag results in decimal mode
|
||||
; HA and HNVZC are the accumulator and flag results when N1 and N2 are
|
||||
; added or subtracted using binary arithmetic
|
||||
; AR, NF, VF, ZF, and CF are the predicted decimal mode accumulator and
|
||||
; flag results, calculated using binary arithmetic
|
||||
;
|
||||
; This program takes approximately 1 minute at 1 MHz (a few seconds more on
|
||||
; a 65C02 than a 6502 or 65816)
|
||||
;
|
||||
|
||||
; Configuration:
|
||||
0001 = cputype = 1 ; 0 = 6502, 1 = 65C02, 2 = 65C816
|
||||
0000 = vld_bcd = 0 ; 0 = allow invalid bcd, 1 = valid bcd only
|
||||
0001 = chk_a = 1 ; check accumulator
|
||||
0001 = chk_n = 1 ; check sign (negative) flag
|
||||
0001 = chk_v = 1 ; check overflow flag
|
||||
0001 = chk_z = 1 ; check zero flag
|
||||
0001 = chk_c = 1 ; check carry flag
|
||||
|
||||
end_of_test macro
|
||||
db $db ;execute 65C02 stop instruction
|
||||
endm
|
||||
|
||||
bss
|
||||
0000 = org 0
|
||||
; operands - register Y = carry in
|
||||
0000 = N1 ds 1
|
||||
0001 = N2 ds 1
|
||||
; binary result
|
||||
0002 = HA ds 1
|
||||
0003 = HNVZC ds 1
|
||||
;04
|
||||
; decimal result
|
||||
0004 = DA ds 1
|
||||
0005 = DNVZC ds 1
|
||||
; predicted results
|
||||
0006 = AR ds 1
|
||||
0007 = NF ds 1
|
||||
;08
|
||||
0008 = VF ds 1
|
||||
0009 = ZF ds 1
|
||||
000a = CF ds 1
|
||||
000b = ERROR ds 1
|
||||
;0C
|
||||
; workspace
|
||||
000c = N1L ds 1
|
||||
000d = N1H ds 1
|
||||
000e = N2L ds 1
|
||||
000f = N2H ds 2
|
||||
|
||||
code
|
||||
0200 = org $200
|
||||
0200 : a001 TEST ldy #1 ; initialize Y (used to loop through carry flag values)
|
||||
0202 : 840b sty ERROR ; store 1 in ERROR until the test passes
|
||||
0204 : a900 lda #0 ; initialize N1 and N2
|
||||
0206 : 8500 sta N1
|
||||
0208 : 8501 sta N2
|
||||
020a : a501 LOOP1 lda N2 ; N2L = N2 & $0F
|
||||
020c : 290f and #$0F ; [1] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT2
|
||||
endif
|
||||
020e : 850e sta N2L
|
||||
0210 : a501 lda N2 ; N2H = N2 & $F0
|
||||
0212 : 29f0 and #$F0 ; [2] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT2
|
||||
endif
|
||||
0214 : 850f sta N2H
|
||||
0216 : 090f ora #$0F ; N2H+1 = (N2 & $F0) + $0F
|
||||
0218 : 8510 sta N2H+1
|
||||
021a : a500 LOOP2 lda N1 ; N1L = N1 & $0F
|
||||
021c : 290f and #$0F ; [3] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$0a
|
||||
bcs NEXT1
|
||||
endif
|
||||
021e : 850c sta N1L
|
||||
0220 : a500 lda N1 ; N1H = N1 & $F0
|
||||
0222 : 29f0 and #$F0 ; [4] see text
|
||||
if vld_bcd = 1
|
||||
cmp #$a0
|
||||
bcs NEXT1
|
||||
endif
|
||||
0224 : 850d sta N1H
|
||||
0226 : 204c02 jsr ADD
|
||||
0229 : 20ef02 jsr A6502
|
||||
022c : 20ca02 jsr COMPARE
|
||||
022f : d01a bne DONE
|
||||
0231 : 209002 jsr SUB
|
||||
0234 : 20f802 jsr S6502
|
||||
0237 : 20ca02 jsr COMPARE
|
||||
023a : d00f bne DONE
|
||||
023c : e600 NEXT1 inc N1 ; [5] see text
|
||||
023e : d0da bne LOOP2 ; loop through all 256 values of N1
|
||||
0240 : e601 NEXT2 inc N2 ; [6] see text
|
||||
0242 : d0c6 bne LOOP1 ; loop through all 256 values of N2
|
||||
0244 : 88 dey
|
||||
0245 : 10c3 bpl LOOP1 ; loop through both values of the carry flag
|
||||
0247 : a900 lda #0 ; test passed, so store 0 in ERROR
|
||||
0249 : 850b sta ERROR
|
||||
024b : DONE
|
||||
end_of_test
|
||||
024b : db > db $db ;execute 65C02 stop instruction
|
||||
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, the accumulator
|
||||
; and flag results when N1 is added to N2 using binary arithmetic, the
|
||||
; predicted accumulator result, the predicted carry flag, and the predicted
|
||||
; V flag
|
||||
;
|
||||
024c : f8 ADD sed ; decimal mode
|
||||
024d : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
024f : a500 lda N1
|
||||
0251 : 6501 adc N2
|
||||
0253 : 8504 sta DA ; actual accumulator result in decimal mode
|
||||
0255 : 08 php
|
||||
0256 : 68 pla
|
||||
0257 : 8505 sta DNVZC ; actual flags result in decimal mode
|
||||
0259 : d8 cld ; binary mode
|
||||
025a : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
025c : a500 lda N1
|
||||
025e : 6501 adc N2
|
||||
0260 : 8502 sta HA ; accumulator result of N1+N2 using binary arithmetic
|
||||
|
||||
0262 : 08 php
|
||||
0263 : 68 pla
|
||||
0264 : 8503 sta HNVZC ; flags result of N1+N2 using binary arithmetic
|
||||
0266 : c001 cpy #1
|
||||
0268 : a50c lda N1L
|
||||
026a : 650e adc N2L
|
||||
026c : c90a cmp #$0A
|
||||
026e : a200 ldx #0
|
||||
0270 : 9006 bcc A1
|
||||
0272 : e8 inx
|
||||
0273 : 6905 adc #5 ; add 6 (carry is set)
|
||||
0275 : 290f and #$0F
|
||||
0277 : 38 sec
|
||||
0278 : 050d A1 ora N1H
|
||||
;
|
||||
; if N1L + N2L < $0A, then add N2 & $F0
|
||||
; if N1L + N2L >= $0A, then add (N2 & $F0) + $0F + 1 (carry is set)
|
||||
;
|
||||
027a : 750f adc N2H,x
|
||||
027c : 08 php
|
||||
027d : b004 bcs A2
|
||||
027f : c9a0 cmp #$A0
|
||||
0281 : 9003 bcc A3
|
||||
0283 : 695f A2 adc #$5F ; add $60 (carry is set)
|
||||
0285 : 38 sec
|
||||
0286 : 8506 A3 sta AR ; predicted accumulator result
|
||||
0288 : 08 php
|
||||
0289 : 68 pla
|
||||
028a : 850a sta CF ; predicted carry result
|
||||
028c : 68 pla
|
||||
;
|
||||
; note that all 8 bits of the P register are stored in VF
|
||||
;
|
||||
028d : 8508 sta VF ; predicted V flags
|
||||
028f : 60 rts
|
||||
|
||||
; Calculate the actual decimal mode accumulator and flags, and the
|
||||
; accumulator and flag results when N2 is subtracted from N1 using binary
|
||||
; arithmetic
|
||||
;
|
||||
0290 : f8 SUB sed ; decimal mode
|
||||
0291 : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
0293 : a500 lda N1
|
||||
0295 : e501 sbc N2
|
||||
0297 : 8504 sta DA ; actual accumulator result in decimal mode
|
||||
0299 : 08 php
|
||||
029a : 68 pla
|
||||
029b : 8505 sta DNVZC ; actual flags result in decimal mode
|
||||
029d : d8 cld ; binary mode
|
||||
029e : c001 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
02a0 : a500 lda N1
|
||||
02a2 : e501 sbc N2
|
||||
02a4 : 8502 sta HA ; accumulator result of N1-N2 using binary arithmetic
|
||||
|
||||
02a6 : 08 php
|
||||
02a7 : 68 pla
|
||||
02a8 : 8503 sta HNVZC ; flags result of N1-N2 using binary arithmetic
|
||||
02aa : 60 rts
|
||||
|
||||
if cputype != 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65816
|
||||
;
|
||||
SUB1 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
lda N1L
|
||||
sbc N2L
|
||||
ldx #0
|
||||
bcs S11
|
||||
inx
|
||||
sbc #5 ; subtract 6 (carry is clear)
|
||||
and #$0F
|
||||
clc
|
||||
S11 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
sbc N2H,x
|
||||
bcs S12
|
||||
sbc #$5F ; subtract $60 (carry is clear)
|
||||
S12 sta AR
|
||||
rts
|
||||
endif
|
||||
|
||||
if cputype = 1
|
||||
; Calculate the predicted SBC accumulator result for the 6502 and 65C02
|
||||
;
|
||||
02ab : c001 SUB2 cpy #1 ; set carry if Y = 1, clear carry if Y = 0
|
||||
02ad : a50c lda N1L
|
||||
02af : e50e sbc N2L
|
||||
02b1 : a200 ldx #0
|
||||
02b3 : b004 bcs S21
|
||||
02b5 : e8 inx
|
||||
02b6 : 290f and #$0F
|
||||
02b8 : 18 clc
|
||||
02b9 : 050d S21 ora N1H
|
||||
;
|
||||
; if N1L - N2L >= 0, then subtract N2 & $F0
|
||||
; if N1L - N2L < 0, then subtract (N2 & $F0) + $0F + 1 (carry is clear)
|
||||
;
|
||||
02bb : f50f sbc N2H,x
|
||||
02bd : b002 bcs S22
|
||||
02bf : e95f sbc #$5F ; subtract $60 (carry is clear)
|
||||
02c1 : e000 S22 cpx #0
|
||||
02c3 : f002 beq S23
|
||||
02c5 : e906 sbc #6
|
||||
02c7 : 8506 S23 sta AR ; predicted accumulator result
|
||||
02c9 : 60 rts
|
||||
endif
|
||||
|
||||
; Compare accumulator actual results to predicted results
|
||||
;
|
||||
; Return:
|
||||
; Z flag = 1 (BEQ branch) if same
|
||||
; Z flag = 0 (BNE branch) if different
|
||||
;
|
||||
02ca : COMPARE
|
||||
if chk_a = 1
|
||||
02ca : a504 lda DA
|
||||
02cc : c506 cmp AR
|
||||
02ce : d01e bne C1
|
||||
endif
|
||||
if chk_n = 1
|
||||
02d0 : a505 lda DNVZC ; [7] see text
|
||||
02d2 : 4507 eor NF
|
||||
02d4 : 2980 and #$80 ; mask off N flag
|
||||
02d6 : d016 bne C1
|
||||
endif
|
||||
if chk_v = 1
|
||||
02d8 : a505 lda DNVZC ; [8] see text
|
||||
02da : 4508 eor VF
|
||||
02dc : 2940 and #$40 ; mask off V flag
|
||||
02de : d00e bne C1 ; [9] see text
|
||||
endif
|
||||
if chk_z = 1
|
||||
02e0 : a505 lda DNVZC
|
||||
02e2 : 4509 eor ZF ; mask off Z flag
|
||||
02e4 : 2902 and #2
|
||||
02e6 : d006 bne C1 ; [10] see text
|
||||
endif
|
||||
if chk_c = 1
|
||||
02e8 : a505 lda DNVZC
|
||||
02ea : 450a eor CF
|
||||
02ec : 2901 and #1 ; mask off C flag
|
||||
endif
|
||||
02ee : 60 C1 rts
|
||||
|
||||
; These routines store the predicted values for ADC and SBC for the 6502,
|
||||
; 65C02, and 65816 in AR, CF, NF, VF, and ZF
|
||||
|
||||
if cputype = 0
|
||||
|
||||
A6502 lda VF ; 6502
|
||||
;
|
||||
; since all 8 bits of the P register were stored in VF, bit 7 of VF contains
|
||||
; the N flag for NF
|
||||
;
|
||||
sta NF
|
||||
lda HNVZC
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda HNVZC
|
||||
sta NF
|
||||
sta VF
|
||||
sta ZF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
if cputype = 1
|
||||
|
||||
02ef : a506 A6502 lda AR ; 65C02
|
||||
02f1 : 08 php
|
||||
02f2 : 68 pla
|
||||
02f3 : 8507 sta NF
|
||||
02f5 : 8509 sta ZF
|
||||
02f7 : 60 rts
|
||||
|
||||
02f8 : 20ab02 S6502 jsr SUB2
|
||||
02fb : a506 lda AR
|
||||
02fd : 08 php
|
||||
02fe : 68 pla
|
||||
02ff : 8507 sta NF
|
||||
0301 : 8509 sta ZF
|
||||
0303 : a503 lda HNVZC
|
||||
0305 : 8508 sta VF
|
||||
0307 : 850a sta CF
|
||||
0309 : 60 rts
|
||||
|
||||
endif
|
||||
if cputype = 2
|
||||
|
||||
A6502 lda AR ; 65C816
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
rts
|
||||
|
||||
S6502 jsr SUB1
|
||||
lda AR
|
||||
php
|
||||
pla
|
||||
sta NF
|
||||
sta ZF
|
||||
lda HNVZC
|
||||
sta VF
|
||||
sta CF
|
||||
rts
|
||||
|
||||
endif
|
||||
|
||||
02f8 = end TEST
|
||||
|
||||
No errors in pass 2.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,293 @@
|
|||
:16000A00000000000000000000C38241007F001F71800FFF7F80BE
|
||||
:20002000FF0F8F8F10021102120213021402180105020602070208020D0147024802490209
|
||||
:1A0040004A024B024C024D024E0243024402450246020502060206010701E8
|
||||
:2002000000000000000000000000690060E90060C38241007F8080000286048200870583AA
|
||||
:200220000161412000E1C1A080810180028101800001000102818081807F80FF00010080AE
|
||||
:20024000800200001F71800FFF7F80FF0F8F8F00F11F00F0FFFFFFFFF0F00F00FF7F8002E8
|
||||
:030260008000809B
|
||||
:20040000D8A2FF9AA9008D0202AD0202C900D0FEA9018D0202A999A2FF9AA255DAA2AADA98
|
||||
:20042000ECFE01D0FEBAE0FDD0FE7AC0AAD0FE7AC055D0FECCFF01D0FEBAE0FFD0FEA0A549
|
||||
:200440005AA05A5ACCFE01D0FEBAE0FDD0FEFAE05AD0FEFAE0A5D0FEECFF01D0FEBAE0FF4E
|
||||
:20046000D0FEC999D0FEAD0202C901D0FEA9028D0202A0AAA9FF48A20128DA08E001D0FE63
|
||||
:200480006848C9FFD0FE28A90048A20028DA08E000D0FE6848C930D0FE28A9FF48A2FF284B
|
||||
:2004A000DA08E0FFD0FE6848C9FFD0FE28A90048A20128DA08E001D0FE6848C930D0FE2853
|
||||
:2004C000A9FF48A20028DA08E000D0FE6848C9FFD0FE28A90048A2FF28DA08E0FFD0FE68B3
|
||||
:2004E00048C930D0FE28A9FF48A20028FA08E0FFD0FE6848C9FDD0FE28A90048A2FF28FA3C
|
||||
:2005000008E000D0FE6848C932D0FE28A9FF48A2FE28FA08E001D0FE6848C97DD0FE28A986
|
||||
:200520000048A20028FA08E0FFD0FE6848C9B0D0FE28A9FF48A2FF28FA08E000D0FE6848C2
|
||||
:20054000C97FD0FE28A90048A2FE28FA08E001D0FE6848C930D0FE28C0AAD0FEAD0202C9A2
|
||||
:2005600002D0FEA9038D0202A255A9FF48A001285A08C001D0FE6848C9FFD0FE28A900486E
|
||||
:20058000A000285A08C000D0FE6848C930D0FE28A9FF48A0FF285A08C0FFD0FE6848C9FFE6
|
||||
:2005A000D0FE28A90048A001285A08C001D0FE6848C930D0FE28A9FF48A000285A08C00021
|
||||
:2005C000D0FE6848C9FFD0FE28A90048A0FF285A08C0FFD0FE6848C930D0FE28A9FF48A009
|
||||
:2005E00000287A08C0FFD0FE6848C9FDD0FE28A90048A0FF287A08C000D0FE6848C932D015
|
||||
:20060000FE28A9FF48A0FE287A08C001D0FE6848C97DD0FE28A90048A000287A08C0FFD037
|
||||
:20062000FE6848C9B0D0FE28A9FF48A0FF287A08C000D0FE6848C97FD0FE28A90048A0FE59
|
||||
:20064000287A08C001D0FE6848C930D0FE28E055D0FEAD0202C903D0FEA9048D0202A28113
|
||||
:20066000A07EA9FF48A9002880034C6A0608C900D0FE6848C9FFD0FE28A90048A9FF28800E
|
||||
:20068000034C810608C9FFD0FE6848C930D0FE28E081D0FEC07ED0FEAD0202C904D0FEA917
|
||||
:2006A000058D0202A0008061C001D0FEC88053C003D0FEC88045C005D0FEC8A0008004C894
|
||||
:2006C000C8C8C88003C8C8C8C88002C8C8C8C88001C8C8C8C88000C8C8C8C8C00AD0FE8024
|
||||
:2006E0001288888888800E88888880F5888880F78880F980FBC000D0FE8015C004D0FEC8AD
|
||||
:2007000080B4C002D0FEC880A6C000D0FEC88098AD0202C905D0FEA9068D0202A042A202A6
|
||||
:2007200002C8CACAD0FEA90048A9FD2802EAEA08C9FDD0FE6848C930D0FE28A9FF48A9A87C
|
||||
:200740002802EAEA08C9A8D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20222C8CACA64
|
||||
:20076000D0FEA90048A9DD2822EAEA08C9DDD0FE6848C930D0FE28A9FF48A9882822EAEABC
|
||||
:2007800008C988D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20242C8CACAD0FEA900AB
|
||||
:2007A00048A9BD2842EAEA08C9BDD0FE6848C930D0FE28A9FF48A9682842EAEA08C968D00A
|
||||
:2007C000FE6848C9FFD0FE28C042D0FEE000D0FEA042A20262C8CACAD0FEA90048A99D28BE
|
||||
:2007E00062EAEA08C99DD0FE6848C930D0FE28A9FF48A9482862EAEA08C948D0FE6848C949
|
||||
:20080000FFD0FE28C042D0FEE000D0FEA042A20282C8CACAD0FEA90048A97D2882EAEA0896
|
||||
:20082000C97DD0FE6848C930D0FE28A9FF48A9282882EAEA08C928D0FE6848C9FFD0FE2891
|
||||
:20084000C042D0FEE000D0FEA042A202C2C8CACAD0FEA90048A93D28C2EAEA08C93DD0FE37
|
||||
:200860006848C930D0FE28A9FF48A9E828C2EAEA08C9E8D0FE6848C9FFD0FE28C042D0FED5
|
||||
:20088000E000D0FEA042A202E2C8CACAD0FEA90048A91D28E2EAEA08C91DD0FE6848C9301E
|
||||
:2008A000D0FE28A9FF48A9C828E2EAEA08C9C8D0FE6848C9FFD0FE28C042D0FEE000D0FEB0
|
||||
:2008C000A042A20244C8CACAD0FEA90048A9BB2844EAEA08C9BBD0FE6848C930D0FE28A9ED
|
||||
:2008E000FF48A9662844EAEA08C966D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A202EB
|
||||
:2009000054C8CACAD0FEA90048A9AB2854EAEA08C9ABD0FE6848C930D0FE28A9FF48A956EC
|
||||
:200920002854EAEA08C956D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A202D4C8CACAD0
|
||||
:20094000D0FEA90048A92B28D4EAEA08C92BD0FE6848C930D0FE28A9FF48A9D628D4EAEA8C
|
||||
:2009600008C9D6D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A202F4C8CACAD0FEA900C9
|
||||
:2009800048A90B28F4EAEA08C90BD0FE6848C930D0FE28A9FF48A9B628F4EAEA08C9B6D08C
|
||||
:2009A000FE6848C9FFD0FE28C042D0FEE000D0FEA042A2015CC8C8CAD0FEA90048A9A328DF
|
||||
:2009C0005CEAEA08C9A3D0FE6848C930D0FE28A9FF48A94E285CEAEA08C94ED0FE6848C961
|
||||
:2009E000FFD0FE28C042D0FEE000D0FEA042A201DCC8C8CAD0FEA90048A92328DCEAEA085E
|
||||
:200A0000C923D0FE6848C930D0FE28A9FF48A9CE28DCEAEA08C9CED0FE6848C9FFD0FE2863
|
||||
:200A2000C042D0FEE000D0FEA042A201FCC8C8CAD0FEA90048A90328FCEAEA08C903D0FE58
|
||||
:200A40006848C930D0FE28A9FF48A9AE28FCEAEA08C9AED0FE6848C9FFD0FE28C042D0FE2D
|
||||
:200A6000E000D0FEA042A20303CACACAD0FEA90048A9FC2803EAEA08C9FCD0FE6848C93039
|
||||
:200A8000D0FE28A9FF48A9A72803EAEA08C9A7D0FE6848C9FFD0FE28C042D0FEE000D0FEEF
|
||||
:200AA000A042A20313CACACAD0FEA90048A9EC2813EAEA08C9ECD0FE6848C930D0FE28A908
|
||||
:200AC000FF48A9972813EAEA08C997D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D7
|
||||
:200AE00023CACACAD0FEA90048A9DC2823EAEA08C9DCD0FE6848C930D0FE28A9FF48A987D8
|
||||
:200B00002823EAEA08C987D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20333CACACA8C
|
||||
:200B2000D0FEA90048A9CC2833EAEA08C9CCD0FE6848C930D0FE28A9FF48A9772833EAEA09
|
||||
:200B400008C977D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20343CACACAD0FEA900F4
|
||||
:200B600048A9BC2843EAEA08C9BCD0FE6848C930D0FE28A9FF48A9672843EAEA08C967D048
|
||||
:200B8000FE6848C9FFD0FE28C042D0FEE000D0FEA042A20353CACACAD0FEA90048A9AC28F7
|
||||
:200BA00053EAEA08C9ACD0FE6848C930D0FE28A9FF48A9572853EAEA08C957D0FE6848C976
|
||||
:200BC000FFD0FE28C042D0FEE000D0FEA042A20363CACACAD0FEA90048A99C2863EAEA08EF
|
||||
:200BE000C99CD0FE6848C930D0FE28A9FF48A9472863EAEA08C947D0FE6848C9FFD0FE2890
|
||||
:200C0000C042D0FEE000D0FEA042A20373CACACAD0FEA90048A98C2873EAEA08C98CD0FE70
|
||||
:200C20006848C930D0FE28A9FF48A9372873EAEA08C937D0FE6848C9FFD0FE28C042D0FEC2
|
||||
:200C4000E000D0FEA042A20383CACACAD0FEA90048A97C2883EAEA08C97CD0FE6848C93057
|
||||
:200C6000D0FE28A9FF48A9272883EAEA08C927D0FE6848C9FFD0FE28C042D0FEE000D0FE8D
|
||||
:200C8000A042A20393CACACAD0FEA90048A96C2893EAEA08C96CD0FE6848C930D0FE28A926
|
||||
:200CA000FF48A9172893EAEA08C917D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20375
|
||||
:200CC000A3CACACAD0FEA90048A95C28A3EAEA08C95CD0FE6848C930D0FE28A9FF48A90776
|
||||
:200CE00028A3EAEA08C907D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203B3CACACA2B
|
||||
:200D0000D0FEA90048A94C28B3EAEA08C94CD0FE6848C930D0FE28A9FF48A9F728B3EAEAA7
|
||||
:200D200008C9F7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203C3CACACAD0FEA90012
|
||||
:200D400048A93C28C3EAEA08C93CD0FE6848C930D0FE28A9FF48A9E728C3EAEA08C9E7D066
|
||||
:200D6000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D3CACACAD0FEA90048A92C2815
|
||||
:200D8000D3EAEA08C92CD0FE6848C930D0FE28A9FF48A9D728D3EAEA08C9D7D0FE6848C914
|
||||
:200DA000FFD0FE28C042D0FEE000D0FEA042A203E3CACACAD0FEA90048A91C28E3EAEA088D
|
||||
:200DC000C91CD0FE6848C930D0FE28A9FF48A9C728E3EAEA08C9C7D0FE6848C9FFD0FE28AE
|
||||
:200DE000C042D0FEE000D0FEA042A203F3CACACAD0FEA90048A90C28F3EAEA08C90CD0FE8F
|
||||
:200E00006848C930D0FE28A9FF48A9B728F3EAEA08C9B7D0FE6848C9FFD0FE28C042D0FE60
|
||||
:200E2000E000D0FEA042A2030BCACACAD0FEA90048A9F4280BEAEA08C9F4D0FE6848C93075
|
||||
:200E4000D0FE28A9FF48A99F280BEAEA08C99FD0FE6848C9FFD0FE28C042D0FEE000D0FE33
|
||||
:200E6000A042A2031BCACACAD0FEA90048A9E4281BEAEA08C9E4D0FE6848C930D0FE28A944
|
||||
:200E8000FF48A98F281BEAEA08C98FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2031B
|
||||
:200EA0002BCACACAD0FEA90048A9D4282BEAEA08C9D4D0FE6848C930D0FE28A9FF48A97F1C
|
||||
:200EC000282BEAEA08C97FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2033BCACACAC1
|
||||
:200EE000D0FEA90048A9C4283BEAEA08C9C4D0FE6848C930D0FE28A9FF48A96F283BEAEA4E
|
||||
:200F000008C96FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2034BCACACAD0FEA90030
|
||||
:200F200048A9B4284BEAEA08C9B4D0FE6848C930D0FE28A9FF48A95F284BEAEA08C95FD094
|
||||
:200F4000FE6848C9FFD0FE28C042D0FEE000D0FEA042A2035BCACACAD0FEA90048A9A42833
|
||||
:200F60005BEAEA08C9A4D0FE6848C930D0FE28A9FF48A94F285BEAEA08C94FD0FE6848C9BA
|
||||
:200F8000FFD0FE28C042D0FEE000D0FEA042A2036BCACACAD0FEA90048A994286BEAEA0823
|
||||
:200FA000C994D0FE6848C930D0FE28A9FF48A93F286BEAEA08C93FD0FE6848C9FFD0FE28DC
|
||||
:200FC000C042D0FEE000D0FEA042A2037BCACACAD0FEA90048A984287BEAEA08C984D0FEAD
|
||||
:200FE0006848C930D0FE28A9FF48A92F287BEAEA08C92FD0FE6848C9FFD0FE28C042D0FE07
|
||||
:20100000E000D0FEA042A2038BCACACAD0FEA90048A974288BEAEA08C974D0FE6848C93093
|
||||
:20102000D0FE28A9FF48A91F288BEAEA08C91FD0FE6848C9FFD0FE28C042D0FEE000D0FED1
|
||||
:20104000A042A2039BCACACAD0FEA90048A964289BEAEA08C964D0FE6848C930D0FE28A962
|
||||
:20106000FF48A90F289BEAEA08C90FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203B9
|
||||
:20108000ABCACACAD0FEA90048A95428ABEAEA08C954D0FE6848C930D0FE28A9FF48A9FFBA
|
||||
:2010A00028ABEAEA08C9FFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203BBCACACA5F
|
||||
:2010C000D0FEA90048A94428BBEAEA08C944D0FE6848C930D0FE28A9FF48A9EF28BBEAEAEC
|
||||
:2010E00008C9EFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203EBCACACAD0FEA9002F
|
||||
:2011000048A91428EBEAEA08C914D0FE6848C930D0FE28A9FF48A9BF28EBEAEA08C9BFD0F2
|
||||
:20112000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203FBCACACAD0FEA90048A9042851
|
||||
:20114000FBEAEA08C904D0FE6848C930D0FE28A9FF48A9AF28FBEAEA08C9AFD0FE6848C978
|
||||
:20116000FFD0FE28C042D0FEE000D0FEA042A20307CACACAD0FEA90048A9F82807EAEA08A5
|
||||
:20118000C9F8D0FE6848C930D0FE28A9FF48A9A32807EAEA08C9A3D0FE6848C9FFD0FE2832
|
||||
:2011A000C042D0FEE000D0FEA042A20317CACACAD0FEA90048A9E82817EAEA08C9E8D0FECB
|
||||
:2011C0006848C930D0FE28A9FF48A9932817EAEA08C993D0FE6848C9FFD0FE28C042D0FEC1
|
||||
:2011E000E000D0FEA042A20327CACACAD0FEA90048A9D82827EAEA08C9D8D0FE6848C930B2
|
||||
:20120000D0FE28A9FF48A9832827EAEA08C983D0FE6848C9FFD0FE28C042D0FEE000D0FE8B
|
||||
:20122000A042A20337CACACAD0FEA90048A9C82837EAEA08C9C8D0FE6848C930D0FE28A980
|
||||
:20124000FF48A9732837EAEA08C973D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20373
|
||||
:2012600047CACACAD0FEA90048A9B82847EAEA08C9B8D0FE6848C930D0FE28A9FF48A96374
|
||||
:201280002847EAEA08C963D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20357CACACAE1
|
||||
:2012A000D0FEA90048A9A82857EAEA08C9A8D0FE6848C930D0FE28A9FF48A9532857EAEAA6
|
||||
:2012C00008C953D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20367CACACAD0FEA9006D
|
||||
:2012E00048A9982867EAEA08C998D0FE6848C930D0FE28A9FF48A9432867EAEA08C943D009
|
||||
:20130000FE6848C9FFD0FE28C042D0FEE000D0FEA042A20377CACACAD0FEA90048A988286F
|
||||
:2013200077EAEA08C988D0FE6848C930D0FE28A9FF48A9332877EAEA08C933D0FE6848C912
|
||||
:20134000FFD0FE28C042D0FEE000D0FEA042A20387CACACAD0FEA90048A9782887EAEA0843
|
||||
:20136000C978D0FE6848C930D0FE28A9FF48A9232887EAEA08C923D0FE6848C9FFD0FE2850
|
||||
:20138000C042D0FEE000D0FEA042A20397CACACAD0FEA90048A9682897EAEA08C968D0FEE9
|
||||
:2013A0006848C930D0FE28A9FF48A9132897EAEA08C913D0FE6848C9FFD0FE28C042D0FE5F
|
||||
:2013C000E000D0FEA042A203A7CACACAD0FEA90048A95828A7EAEA08C958D0FE6848C930D0
|
||||
:2013E000D0FE28A9FF48A90328A7EAEA08C903D0FE6848C9FFD0FE28C042D0FEE000D0FE2A
|
||||
:20140000A042A203B7CACACAD0FEA90048A94828B7EAEA08C948D0FE6848C930D0FE28A99E
|
||||
:20142000FF48A9F328B7EAEA08C9F3D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20311
|
||||
:20144000C7CACACAD0FEA90048A93828C7EAEA08C938D0FE6848C930D0FE28A9FF48A9E312
|
||||
:2014600028C7EAEA08C9E3D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D7CACACA7F
|
||||
:20148000D0FEA90048A92828D7EAEA08C928D0FE6848C930D0FE28A9FF48A9D328D7EAEA44
|
||||
:2014A00008C9D3D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203E7CACACAD0FEA9008B
|
||||
:2014C00048A91828E7EAEA08C918D0FE6848C930D0FE28A9FF48A9C328E7EAEA08C9C3D027
|
||||
:2014E000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203F7CACACAD0FEA90048A908288E
|
||||
:20150000F7EAEA08C908D0FE6848C930D0FE28A9FF48A9B328F7EAEA08C9B3D0FE6848C9B0
|
||||
:20152000FFD0FE28C042D0FEE000D0FEA042A2030FCACACAD0FEA90048A9F0280FEAEA08D9
|
||||
:20154000C9F0D0FE6848C930D0FE28A9FF48A99B280FEAEA08C99BD0FE6848C9FFD0FE287E
|
||||
:20156000C042D0FEE000D0FEA042A2031FCACACAD0FEA90048A9E0281FEAEA08C9E0D0FE07
|
||||
:201580006848C930D0FE28A9FF48A98B281FEAEA08C98BD0FE6848C9FFD0FE28C042D0FE05
|
||||
:2015A000E000D0FEA042A2032FCACACAD0FEA90048A9D0282FEAEA08C9D0D0FE6848C930EE
|
||||
:2015C000D0FE28A9FF48A97B282FEAEA08C97BD0FE6848C9FFD0FE28C042D0FEE000D0FED0
|
||||
:2015E000A042A2033FCACACAD0FEA90048A9C0283FEAEA08C9C0D0FE6848C930D0FE28A9BD
|
||||
:20160000FF48A96B283FEAEA08C96BD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203B7
|
||||
:201620004FCACACAD0FEA90048A9B0284FEAEA08C9B0D0FE6848C930D0FE28A9FF48A95BB8
|
||||
:20164000284FEAEA08C95BD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2035FCACACA15
|
||||
:20166000D0FEA90048A9A0285FEAEA08C9A0D0FE6848C930D0FE28A9FF48A94B285FEAEAEA
|
||||
:2016800008C94BD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2036FCACACAD0FEA900A9
|
||||
:2016A00048A990286FEAEA08C990D0FE6848C930D0FE28A9FF48A93B286FEAEA08C93BD055
|
||||
:2016C000FE6848C9FFD0FE28C042D0FEE000D0FEA042A2037FCACACAD0FEA90048A98028AC
|
||||
:2016E0007FEAEA08C980D0FE6848C930D0FE28A9FF48A92B287FEAEA08C92BD0FE6848C957
|
||||
:20170000FFD0FE28C042D0FEE000D0FEA042A2038FCACACAD0FEA90048A970288FEAEA0877
|
||||
:20172000C970D0FE6848C930D0FE28A9FF48A91B288FEAEA08C91BD0FE6848C9FFD0FE289C
|
||||
:20174000C042D0FEE000D0FEA042A2039FCACACAD0FEA90048A960289FEAEA08C960D0FE25
|
||||
:201760006848C930D0FE28A9FF48A90B289FEAEA08C90BD0FE6848C9FFD0FE28C042D0FEA3
|
||||
:20178000E000D0FEA042A203AFCACACAD0FEA90048A95028AFEAEA08C950D0FE6848C9300C
|
||||
:2017A000D0FE28A9FF48A9FB28AFEAEA08C9FBD0FE6848C9FFD0FE28C042D0FEE000D0FE6E
|
||||
:2017C000A042A203BFCACACAD0FEA90048A94028BFEAEA08C940D0FE6848C930D0FE28A9DB
|
||||
:2017E000FF48A9EB28BFEAEA08C9EBD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20356
|
||||
:20180000CFCACACAD0FEA90048A93028CFEAEA08C930D0FE6848C930D0FE28A9FF48A9DB56
|
||||
:2018200028CFEAEA08C9DBD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203DFCACACAB3
|
||||
:20184000D0FEA90048A92028DFEAEA08C920D0FE6848C930D0FE28A9FF48A9CB28DFEAEA88
|
||||
:2018600008C9CBD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203EFCACACAD0FEA900C7
|
||||
:2018800048A91028EFEAEA08C910D0FE6848C930D0FE28A9FF48A9BB28EFEAEA08C9BBD073
|
||||
:2018A000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203FFCACACAD0FEA90048A90028CA
|
||||
:2018C000FFEAEA08C900D0FE6848C930D0FE28A9FF48A9AB28FFEAEA08C9ABD0FE6848C9F5
|
||||
:2018E000FFD0FE28C042D0FEE000D0FEAD0202C906D0FEA9078D0202A203BD56259DFD026D
|
||||
:20190000CA10F7A9278D0002A9004828A949A24EA0446CFD02EAD0FE88880888888828F0CD
|
||||
:20192000FE10FE90FE50FEC9E3D0FEE04FD0FEC03ED0FEBAE0FFD0FEAD0202C907D0FEA91D
|
||||
:20194000088D0202A20BBD92259DF902CA10F7A9278D0002A9004828A958A204A0497CF9E7
|
||||
:2019600002EAD0FE88880888888828F0FE10FE90FE50FEC9F2D0FEE006D0FEC043D0FEBA35
|
||||
:20198000E0FFD0FEA9A08D0003A9198D0103A99D8D0002A9198D0102A2FF7C01024C9D1925
|
||||
:2019A000AD0202C908D0FEA9098D0202A90048A942A252A04B28008808888888C9E8D0FE0A
|
||||
:2019C000E053D0FEC045D0FE68C930D0FEBAE0FFD0FEA9FF48A9BDA2ADA0B4280088088864
|
||||
:2019E0008888C917D0FEE0AED0FEC0AED0FE68C9FFD0FEBAE0FFD0FEAD0202C909D0FEA932
|
||||
:201A00000A8D0202A2ACA0DCA9FF48A9FE281A4808C9FFD0FE6848C9FDD0FE28681A480864
|
||||
:201A2000C900D0FE6848C97FD0FE28681A4808C901D0FE6848C97DD0FE28683A4808C90010
|
||||
:201A4000D0FE6848C97FD0FE28683A4808C9FFD0FE6848C9FDD0FE28683AA90048A9FE2874
|
||||
:201A60001A4808C9FFD0FE6848C9B0D0FE28681A4808C900D0FE6848C932D0FE28681A4873
|
||||
:201A800008C901D0FE6848C930D0FE28683A4808C900D0FE6848C932D0FE28683A4808C922
|
||||
:201AA000FFD0FE6848C9B0D0FE2868E0ACD0FEC0DCD0FEBAE0FFD0FEAD0202C90AD0FEA9AC
|
||||
:201AC0000B8D0202A299A066A9004828B2240849C32892300849C3C9C3D0FE684930CD150B
|
||||
:201AE00002D0FEA9004828B2260849C32892320849C3C982D0FE684930CD1602D0FEA900BB
|
||||
:201B00004828B2280849C32892340849C3C941D0FE684930CD1702D0FEA9004828B22A08FB
|
||||
:201B200049C32892360849C3C900D0FE684930CD1802D0FEE099D0FEC066D0FEA003A200E8
|
||||
:201B4000B9050249C3D91002D0FE8A9905028810EFA299A066A9FF4828B2240849C3289252
|
||||
:201B6000300849C3C9C3D0FE68497DCD1502D0FEA9FF4828B2260849C32892320849C3C91A
|
||||
:201B800082D0FE68497DCD1602D0FEA9FF4828B2280849C32892340849C3C941D0FE684983
|
||||
:201BA0007DCD1702D0FEA9FF4828B22A0849C32892360849C3C900D0FE68497DCD1802D06C
|
||||
:201BC000FEE099D0FEC066D0FEA003A200B9050249C3D91002D0FE8A9905028810EFBAE0B7
|
||||
:201BE000FFD0FEAD0202C90BD0FEA90C8D0202A07BA204A907950C0ACA10FAA204A9FF48F9
|
||||
:201C0000A95528640C640D640E640F641008C955D0FE6848C9FFD0FE28B50CD0FECA10F9A0
|
||||
:201C2000A204A907950C0ACA10FAA204A90048A9AA28640C640D640E640F641008C9AAD038
|
||||
:201C4000FE6848C930D0FE28B50CD0FECA10F9A204A9079D05020ACA10F9A204A9FF48A96F
|
||||
:201C600055289C05029C06029C07029C08029C090208C955D0FE6848C9FFD0FE28BD050288
|
||||
:201C8000D0FECA10F8A204A9079D05020ACA10F9A204A90048A9AA289C05029C06029C07D1
|
||||
:201CA000029C08029C090208C9AAD0FE6848C930D0FE28BD0502D0FECA10F8A204A907959E
|
||||
:201CC0000C0ACA10FAA204A9FF48A95528740C08C955D0FE6848C9FFD0FE28CA10E9A20413
|
||||
:201CE000B50CD0FECA10F9A204A907950C0ACA10FAA204A90048A9AA28740C08C9AAD0FED2
|
||||
:201D00006848C930D0FE28CA10E9A204B50CD0FECA10F9A204A9079D05020ACA10F9A204DC
|
||||
:201D2000A9FF48A955289E050208C955D0FE6848C9FFD0FE28CA10E8A204BD0502D0FECAC2
|
||||
:201D400010F8A204A9079D05020ACA10F9A204A90048A9AA289E050208C9AAD0FE6848C92B
|
||||
:201D600030D0FE28CA10E8A204BD0502D0FECA10F8C07BD0FEBAE0FFD0FEAD0202C90CD0AB
|
||||
:201D8000FEA90D8D0202A042A203A90048A9FF28341308C9FFD0FE6848C932D0FE28CAA9BD
|
||||
:201DA0000048A90128341308C901D0FE6848C970D0FE28CAA90048A90128341308C901D0CD
|
||||
:201DC000FE6848C9B2D0FE28CAA90048A90128341308C901D0FE6848C9F0D0FE28A9FF4821
|
||||
:201DE000A90128341308C901D0FE6848C9FDD0FE28E8A9FF48A90128341308C901D0FE68C5
|
||||
:201E000048C9BFD0FE28E8A9FF48A90128341308C901D0FE6848C97DD0FE28E8A9FF48A9FE
|
||||
:201E2000FF28341308C9FFD0FE6848C93FD0FE28A90048A9FF283C100208C9FFD0FE68488B
|
||||
:201E4000C932D0FE28CAA90048A901283C100208C901D0FE6848C970D0FE28CAA90048A9D3
|
||||
:201E600001283C100208C901D0FE6848C9B2D0FE28CAA90048A901283C100208C901D0FEAF
|
||||
:201E80006848C9F0D0FE28A9FF48A901283C100208C901D0FE6848C9FDD0FE28E8A9FF48EF
|
||||
:201EA000A901283C100208C901D0FE6848C9BFD0FE28E8A9FF48A901283C100208C901D09A
|
||||
:201EC000FE6848C97DD0FE28E8A9FF48A9FF283C100208C9FFD0FE6848C93FD0FE28A9002D
|
||||
:201EE00048A9FF28890008C9FFD0FE6848C932D0FE28CAA90048A90128894108C901D0FE0B
|
||||
:201F00006848C930D0FE28CAA90048A90128898208C901D0FE6848C932D0FE28CAA900488E
|
||||
:201F2000A9012889C308C901D0FE6848C930D0FE28A9FF48A9012889C308C901D0FE6848E6
|
||||
:201F4000C9FDD0FE28E8A9FF48A90128898208C901D0FE6848C9FFD0FE28E8A9FF48A90180
|
||||
:201F600028894108C901D0FE6848C9FDD0FE28E8A9FF48A9FF28890008C9FFD0FE6848C91B
|
||||
:201F8000FFD0FE28E003D0FEC042D0FEBAE0FFD0FEAD0202C90DD0FEA90E8D0202A2C0A0C5
|
||||
:201FA00000640D98250D08682902850E9849FF050D49FF850F98050D8510840CA9FF48A586
|
||||
:201FC0000D28140C08C50DD0FE68480902C9FFD0FE682902C50ED0FEA50FC50CD0FE8C059B
|
||||
:201FE00002A9FF48A50D281C050208C50DD0FE68480902C9FFD0FE682902C50ED0FEA50F11
|
||||
:20200000C50CD0FE840CA90048A50D28140C08C50DD0FE68480902C932D0FE682902C50E14
|
||||
:20202000D0FEA50FC50CD0FE8C0502A90048A50D281C050208C50DD0FE68480902C932D0D0
|
||||
:20204000FE682902C50ED0FEA50FC50CD0FE840CA9FF48A50D28040C08C50DD0FE68480930
|
||||
:2020600002C9FFD0FE682902C50ED0FEA510C50CD0FE8C0502A9FF48A50D280C050208C503
|
||||
:202080000DD0FE68480902C9FFD0FE682902C50ED0FEA510C50CD0FE840CA90048A50D2831
|
||||
:2020A000040C08C50DD0FE68480902C932D0FE682902C50ED0FEA510C50CD0FE8C0502A920
|
||||
:2020C0000048A50D280C050208C50DD0FE68480902C932D0FE682902C50ED0FEA510C50CE5
|
||||
:2020E000D0FEC8D004E60DF0034CA31FE0C0D0FEBAE0FFD0FEAD0202C90ED0FEA90F8D0210
|
||||
:2021000002A2DEA0ADA90048A98028D22C08C980D0FE6848C931D0FE28A90048A97F28D2DE
|
||||
:202120002C08C97FD0FE6848C933D0FE28A90048A97E28D22C08C97ED0FE6848C9B0D0FE61
|
||||
:2021400028A9FF48A98028D22C08C980D0FE6848C97DD0FE28A9FF48A97F28D22C08C97F7F
|
||||
:20216000D0FE6848C97FD0FE28A9FF48A97E28D22C08C97ED0FE6848C9FCD0FE28E0DED050
|
||||
:20218000FEC0ADD0FEBAE0FFD0FEAD0202C90FD0FEA9108D0202A242A000A53A850CA53B2A
|
||||
:2021A000850DA90048B9530228320C08D95B02D0FE684930D95F02D0FEE60CC8C004D0E203
|
||||
:2021C00088C60CA9FF48B9530228320C08D95B02D0FE68497DD95F02D0FEC60C8810E4A011
|
||||
:2021E00000A542850CA543850DA90048B9570228520C08D95B02D0FE684930D95F02D0FE6F
|
||||
:20220000E60CC8C004D0E288C60CA9FF48B9570228520C08D95B02D0FE68497DD95F02D068
|
||||
:20222000FEC60C8810E4A000A54A850CA54B850DA90048B94F0228120C08D95B02D0FE68FB
|
||||
:202240004930D95F02D0FEE60CC8C004D0E288C60CA9FF48B94F0228120C08D95B02D0FE27
|
||||
:2022600068497DD95F02D0FEC60C8810E4E042D0FEBAE0FFD0FEAD0202C910D0FEA9118DE4
|
||||
:20228000020258D8A20EA0FFA900850C850D850E8D0502850F8510A9FF85128D0602A90220
|
||||
:2022A000851118201925E60CE60F080868298228D002E6100510851138201925C60CE60D12
|
||||
:2022C000D0E0A9008510EE0502E60E086829828511C612CE0602A50E850FD0C6E00ED0FE2F
|
||||
:2022E000C0FFD0FEBAE0FFD0FEAD0202C911D0FEA9128D0202F8A20EA0FFA999850D850E97
|
||||
:202300008D0502850FA901850C8510A9818511A90085128D06023820C223C60CA50FD00895
|
||||
:20232000C610A999850FD012290FD00CC60FC60FC60FC60FC60FC60FC60F086829820510F8
|
||||
:2023400085111820C223E60CA50DF015290FD00CC60DC60DC60DC60DC60DC60DC60D4C16E6
|
||||
:2023600023A999850DA50EF039290FD018C60EC60EC60EC60EC60EC60EE612E612E612E6A4
|
||||
:2023800012E612E612C60EE612A5128D0602A50E8D0502850F0868298209018511E6104C4B
|
||||
:2023A0001623E00ED0FEC0FFD0FEBAE0FFD0FED8AD0202C912D0FEA9F08D02024CBC234C61
|
||||
:2023C000000408A50D650E08C50FD0FE682983C511D0FE2808A50DE51208C50FD0FE682956
|
||||
:2023E00083C511D0FE2808A50D6D050208C50FD0FE682983C511D0FE2808A50DED0602081F
|
||||
:20240000C50FD0FE682983C511D0FE2808A50E8D0B02A50D200A0208C50FD0FE682983C584
|
||||
:2024200011D0FE2808A5128D0E02A50D200D0208C50FD0FE682983C511D0FE2808A50D759F
|
||||
:202440000008C50FD0FE682983C511D0FE2808A50DF50408C50FD0FE682983C511D0FE28B5
|
||||
:2024600008A50D7DF70108C50FD0FE682983C511D0FE2808A50DFDF80108C50FD0FE6829B8
|
||||
:2024800083C511D0FE2808A50D79060108C50FD0FE682983C511D0FE2808A50DF907010866
|
||||
:2024A000C50FD0FE682983C511D0FE2808A50D614408C50FD0FE682983C511D0FE2808A504
|
||||
:2024C0000DE14608C50FD0FE682983C511D0FE2808A50D715608C50FD0FE682983C511D059
|
||||
:2024E000FE2808A50DF15808C50FD0FE682983C511D0FE2808A50D725208C50FD0FE682970
|
||||
:2025000083C511D0FE2808A50DF25408C50FD0FE682983C511D0FE2860A511298348A50D26
|
||||
:20252000450E300AA50D450F10046809404868851108A50D725208C50FD0FE6829C3C511AB
|
||||
:20254000D0FE2808A50DF25408C50FD0FE6829C3C511D0FE28605C251A19888808888888F7
|
||||
:2025600028B0FE70FE30FEF0FEC949D0FEE04ED0FEC041D0FE488A48BAE0FDD0FE68AAA916
|
||||
:20258000FF482868E849AA6CFF02EAEA4C8C254C0004D925D925A0256619D925D9258888AF
|
||||
:2025A0000888888828B0FE70FE30FEF0FEC958D0FEE004D0FEC046D0FE488A48BAE0FDD025
|
||||
:2025C000FE68AAA9FF482868E8E849AA7CF902EAEA4CD1254C0004EAEAEAEA4CDB254C008B
|
||||
:2025E000044CE1254C00044CE7254C0004888808888888C9BDF042C942D0FEE052D0FEC08C
|
||||
:2026000048D0FE850A860BBABD0201C930D0FE68C934D0FEBAE0FCD0FEADFF01C919D0FE4F
|
||||
:20262000ADFE01C9B8D0FEA9FF48A60BE8A50A49AA28404C33264C0004E0ADD0FEC0B1D07B
|
||||
:20264000FE850A860BBABD0201C9FFD0FE68C9F7D0FEBAE0FCD0FEADFF01C919D0FEADFEEA
|
||||
:2026600001C9DED0FEA90448A60BE8A50A49AA28404C71264C000400000000000000000019
|
||||
:2026800000000000000000000000000000000000000000000000000000000000000000003A
|
||||
:2026A00000000000000000000000000000000000000000000000000000000000000000001A
|
||||
:2026C0000000000000000000000000000000000000000000000000000000000000000000FA
|
||||
:2026E0000000000000000000000000000000000000000000000000000000000000000000DA
|
||||
:20270000000000000000000000000000000000000000000000000000EAEAEAEA4C1C270082
|
||||
:20272000000000000000000000000000000000000000000000000000000000000000000099
|
||||
:20274000000000000000000000000000000000000000000000000000000000000000000079
|
||||
:0B27600000000000EAEAEAEA4C6827EB
|
||||
:06FFFA00E125E725EF25DB
|
||||
:00040001FB
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,302 @@
|
|||
:16000A00000000000000000000C38241007F001F71800FFF7F80BE
|
||||
:20002000FF0F8F8F10021102120213021402180105020602070208020D0147024802490209
|
||||
:1A0040004A024B024C024D024E0243024402450246020502060206010701E8
|
||||
:2002000000000000000000000000690060E90060C38241007F8080000286048200870583AA
|
||||
:200220000161412000E1C1A080810180028101800001000102818081807F80FF00010080AE
|
||||
:20024000800200001F71800FFF7F80FF0F8F8F00F11F00F0FFFFFFFFF0F00F00FF7F8002E8
|
||||
:030260008000809B
|
||||
:20040000D8A2FF9AA9008D0202AD0202C900D0FEA9018D0202A999A2FF9AA255DAA2AADA98
|
||||
:20042000ECFE01D0FEBAE0FDD0FE7AC0AAD0FE7AC055D0FECCFF01D0FEBAE0FFD0FEA0A549
|
||||
:200440005AA05A5ACCFE01D0FEBAE0FDD0FEFAE05AD0FEFAE0A5D0FEECFF01D0FEBAE0FF4E
|
||||
:20046000D0FEC999D0FEAD0202C901D0FEA9028D0202A0AAA9FF48A20128DA08E001D0FE63
|
||||
:200480006848C9FFD0FE28A90048A20028DA08E000D0FE6848C930D0FE28A9FF48A2FF284B
|
||||
:2004A000DA08E0FFD0FE6848C9FFD0FE28A90048A20128DA08E001D0FE6848C930D0FE2853
|
||||
:2004C000A9FF48A20028DA08E000D0FE6848C9FFD0FE28A90048A2FF28DA08E0FFD0FE68B3
|
||||
:2004E00048C930D0FE28A9FF48A20028FA08E0FFD0FE6848C9FDD0FE28A90048A2FF28FA3C
|
||||
:2005000008E000D0FE6848C932D0FE28A9FF48A2FE28FA08E001D0FE6848C97DD0FE28A986
|
||||
:200520000048A20028FA08E0FFD0FE6848C9B0D0FE28A9FF48A2FF28FA08E000D0FE6848C2
|
||||
:20054000C97FD0FE28A90048A2FE28FA08E001D0FE6848C930D0FE28C0AAD0FEAD0202C9A2
|
||||
:2005600002D0FEA9038D0202A255A9FF48A001285A08C001D0FE6848C9FFD0FE28A900486E
|
||||
:20058000A000285A08C000D0FE6848C930D0FE28A9FF48A0FF285A08C0FFD0FE6848C9FFE6
|
||||
:2005A000D0FE28A90048A001285A08C001D0FE6848C930D0FE28A9FF48A000285A08C00021
|
||||
:2005C000D0FE6848C9FFD0FE28A90048A0FF285A08C0FFD0FE6848C930D0FE28A9FF48A009
|
||||
:2005E00000287A08C0FFD0FE6848C9FDD0FE28A90048A0FF287A08C000D0FE6848C932D015
|
||||
:20060000FE28A9FF48A0FE287A08C001D0FE6848C97DD0FE28A90048A000287A08C0FFD037
|
||||
:20062000FE6848C9B0D0FE28A9FF48A0FF287A08C000D0FE6848C97FD0FE28A90048A0FE59
|
||||
:20064000287A08C001D0FE6848C930D0FE28E055D0FEAD0202C903D0FEA9048D0202A28113
|
||||
:20066000A07EA9FF48A9002880034C6A0608C900D0FE6848C9FFD0FE28A90048A9FF28800E
|
||||
:20068000034C810608C9FFD0FE6848C930D0FE28E081D0FEC07ED0FEAD0202C904D0FEA917
|
||||
:2006A000058D0202A0008061C001D0FEC88053C003D0FEC88045C005D0FEC8A0008004C894
|
||||
:2006C000C8C8C88003C8C8C8C88002C8C8C8C88001C8C8C8C88000C8C8C8C8C00AD0FE8024
|
||||
:2006E0001288888888800E88888880F5888880F78880F980FBC000D0FE8015C004D0FEC8AD
|
||||
:2007000080B4C002D0FEC880A6C000D0FEC88098AD0202C905D0FEA9068D0202A211A022B7
|
||||
:20072000A901850CA90048A933280F0C068F0C064C30074C330708C933D0FE6848C930D073
|
||||
:20074000FE28A9FF48A9CC280F0C068F0C064C4E074C510708C9CCD0FE6848C9FFD0FE2806
|
||||
:20076000A50CC901D0FEA9FE850CA90048A933288F0C060F0C064C76074C790708C933D0D8
|
||||
:20078000FE6848C930D0FE28A9FF48A9CC288F0C060F0C064C94074C970708C9CCD0FE68C9
|
||||
:2007A00048C9FFD0FE28A50CC9FED0FEA902850CA90048A933281F0C069F0C064CBC074C7F
|
||||
:2007C000BF0708C933D0FE6848C930D0FE28A9FF48A9CC281F0C069F0C064CDA074CDD0716
|
||||
:2007E00008C9CCD0FE6848C9FFD0FE28A50CC902D0FEA9FD850CA90048A933289F0C061FDA
|
||||
:200800000C064C02084C050808C933D0FE6848C930D0FE28A9FF48A9CC289F0C061F0C0637
|
||||
:200820004C20084C230808C9CCD0FE6848C9FFD0FE28A50CC9FDD0FEA904850CA90048A9D7
|
||||
:2008400033282F0C06AF0C064C48084C4B0808C933D0FE6848C930D0FE28A9FF48A9CC2802
|
||||
:200860002F0C06AF0C064C66084C690808C9CCD0FE6848C9FFD0FE28A50CC904D0FEA9FB36
|
||||
:20088000850CA90048A93328AF0C062F0C064C8E084C910808C933D0FE6848C930D0FE2898
|
||||
:2008A000A9FF48A9CC28AF0C062F0C064CAC084CAF0808C9CCD0FE6848C9FFD0FE28A50C1C
|
||||
:2008C000C9FBD0FEA908850CA90048A933283F0C06BF0C064CD4084CD70808C933D0FE68A0
|
||||
:2008E00048C930D0FE28A9FF48A9CC283F0C06BF0C064CF2084CF50808C9CCD0FE6848C99F
|
||||
:20090000FFD0FE28A50CC908D0FEA9F7850CA90048A93328BF0C063F0C064C1A094C1D0969
|
||||
:2009200008C933D0FE6848C930D0FE28A9FF48A9CC28BF0C063F0C064C38094C3B0908C9A9
|
||||
:20094000CCD0FE6848C9FFD0FE28A50CC9F7D0FEA910850CA90048A933284F0C06CF0C06CF
|
||||
:200960004C60094C630908C933D0FE6848C930D0FE28A9FF48A9CC284F0C06CF0C064C7E00
|
||||
:20098000094C810908C9CCD0FE6848C9FFD0FE28A50CC910D0FEA9EF850CA90048A9332829
|
||||
:2009A000CF0C064F0C064CA6094CA90908C933D0FE6848C930D0FE28A9FF48A9CC28CF0C23
|
||||
:2009C000064F0C064CC4094CC70908C9CCD0FE6848C9FFD0FE28A50CC9EFD0FEA920850C11
|
||||
:2009E000A90048A933285F0C06DF0C064CEC094CEF0908C933D0FE6848C930D0FE28A9FF02
|
||||
:200A000048A9CC285F0C06DF0C064C0A0A4C0D0A08C9CCD0FE6848C9FFD0FE28A50CC92059
|
||||
:200A2000D0FEA9DF850CA90048A93328DF0C065F0C064C320A4C350A08C933D0FE6848C91A
|
||||
:200A400030D0FE28A9FF48A9CC28DF0C065F0C064C500A4C530A08C9CCD0FE6848C9FFD07F
|
||||
:200A6000FE28A50CC9DFD0FEA940850CA90048A933286F0C06EF0C064C780A4C7B0A08C9C8
|
||||
:200A800033D0FE6848C930D0FE28A9FF48A9CC286F0C06EF0C064C960A4C990A08C9CCD05F
|
||||
:200AA000FE6848C9FFD0FE28A50CC940D0FEA9BF850CA90048A93328EF0C066F0C064CBEC8
|
||||
:200AC0000A4CC10A08C933D0FE6848C930D0FE28A9FF48A9CC28EF0C066F0C064CDC0A4CF7
|
||||
:200AE000DF0A08C9CCD0FE6848C9FFD0FE28A50CC9BFD0FEA980850CA90048A933287F0CF3
|
||||
:200B000006FF0C064C040B4C070B08C933D0FE6848C930D0FE28A9FF48A9CC287F0C06FF77
|
||||
:200B20000C064C220B4C250B08C9CCD0FE6848C9FFD0FE28A50CC980D0FEA97F850CA900AB
|
||||
:200B400048A93328FF0C067F0C064C4A0B4C4D0B08C933D0FE6848C930D0FE28A9FF48A958
|
||||
:200B6000CC28FF0C067F0C064C680B4C6B0B08C9CCD0FE6848C9FFD0FE28A50CC97FD0FEBE
|
||||
:200B8000E011D0FEC022D0FEAD0202C906D0FEA9078D0202A900850CA9000F0C0249011FEE
|
||||
:200BA0000C0249022F0C0249043F0C0249084F0C0249105F0C0249206F0C0249407F0C0295
|
||||
:200BC0004980450CD0FEA9FF8F0C0249019F0C024902AF0C024904BF0C024908CF0C024958
|
||||
:200BE00010DF0C024920EF0C024940FF0C024980450CD0FEE60CD0A0AD0202C907D0FEA9BA
|
||||
:200C0000088D0202A042A20202C8CACAD0FEA90048A9FD2802EAEA08C9FDD0FE6848C930AF
|
||||
:200C2000D0FE28A9FF48A9A82802EAEA08C9A8D0FE6848C9FFD0FE28C042D0FEE000D0FE4C
|
||||
:200C4000A042A20222C8CACAD0FEA90048A9DD2822EAEA08C9DDD0FE6848C930D0FE28A969
|
||||
:200C6000FF48A9882822EAEA08C988D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20245
|
||||
:200C800042C8CACAD0FEA90048A9BD2842EAEA08C9BDD0FE6848C930D0FE28A9FF48A96857
|
||||
:200CA0002842EAEA08C968D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20262C8CACABF
|
||||
:200CC000D0FEA90048A99D2862EAEA08C99DD0FE6848C930D0FE28A9FF48A9482862EAEA97
|
||||
:200CE00008C948D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20282C8CACAD0FEA90046
|
||||
:200D000048A97D2882EAEA08C97DD0FE6848C930D0FE28A9FF48A9282882EAEA08C928D024
|
||||
:200D2000FE6848C9FFD0FE28C042D0FEE000D0FEA042A202C2C8CACAD0FEA90048A93D2858
|
||||
:200D4000C2EAEA08C93DD0FE6848C930D0FE28A9FF48A9E828C2EAEA08C9E8D0FE6848C943
|
||||
:200D6000FFD0FE28C042D0FEE000D0FEA042A202E2C8CACAD0FEA90048A91D28E2EAEA08D1
|
||||
:200D8000C91DD0FE6848C930D0FE28A9FF48A9C828E2EAEA08C9C8D0FE6848C9FFD0FE28EC
|
||||
:200DA000C042D0FEE000D0FEA042A20244C8CACAD0FEA90048A9BB2844EAEA08C9BBD0FED2
|
||||
:200DC0006848C930D0FE28A9FF48A9662844EAEA08C966D0FE6848C9FFD0FE28C042D0FEF2
|
||||
:200DE000E000D0FEA042A20254C8CACAD0FEA90048A9AB2854EAEA08C9ABD0FE6848C930B9
|
||||
:200E0000D0FE28A9FF48A9562854EAEA08C956D0FE6848C9FFD0FE28C042D0FEE000D0FEBC
|
||||
:200E2000A042A202D4C8CACAD0FEA90048A92B28D4EAEA08C92BD0FE6848C930D0FE28A987
|
||||
:200E4000FF48A9D628D4EAEA08C9D6D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20215
|
||||
:200E6000F4C8CACAD0FEA90048A90B28F4EAEA08C90BD0FE6848C930D0FE28A9FF48A9B627
|
||||
:200E800028F4EAEA08C9B6D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2015CC8C8CAE6
|
||||
:200EA000D0FEA90048A9A3285CEAEA08C9A3D0FE6848C930D0FE28A9FF48A94E285CEAEAAF
|
||||
:200EC00008C94ED0FE6848C9FFD0FE28C042D0FEE000D0FEA042A201DCC8C8CAD0FEA90007
|
||||
:200EE00048A92328DCEAEA08C923D0FE6848C930D0FE28A9FF48A9CE28DCEAEA08C9CED0F7
|
||||
:200F0000FE6848C9FFD0FE28C042D0FEE000D0FEA042A201FCC8C8CAD0FEA90048A9032879
|
||||
:200F2000FCEAEA08C903D0FE6848C930D0FE28A9FF48A9AE28FCEAEA08C9AED0FE6848C99B
|
||||
:200F4000FFD0FE28C042D0FEE000D0FEA042A20303CACACAD0FEA90048A9FC2803EAEA08CB
|
||||
:200F6000C9FCD0FE6848C930D0FE28A9FF48A9A72803EAEA08C9A7D0FE6848C9FFD0FE284C
|
||||
:200F8000C042D0FEE000D0FEA042A20313CACACAD0FEA90048A9EC2813EAEA08C9ECD0FEED
|
||||
:200FA0006848C930D0FE28A9FF48A9972813EAEA08C997D0FE6848C9FFD0FE28C042D0FEDF
|
||||
:200FC000E000D0FEA042A20323CACACAD0FEA90048A9DC2823EAEA08C9DCD0FE6848C930D4
|
||||
:200FE000D0FE28A9FF48A9872823EAEA08C987D0FE6848C9FFD0FE28C042D0FEE000D0FEAA
|
||||
:20100000A042A20333CACACAD0FEA90048A9CC2833EAEA08C9CCD0FE6848C930D0FE28A9A2
|
||||
:20102000FF48A9772833EAEA08C977D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20391
|
||||
:2010400043CACACAD0FEA90048A9BC2843EAEA08C9BCD0FE6848C930D0FE28A9FF48A96792
|
||||
:201060002843EAEA08C967D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20353CACACA07
|
||||
:20108000D0FEA90048A9AC2853EAEA08C9ACD0FE6848C930D0FE28A9FF48A9572853EAEAC4
|
||||
:2010A00008C957D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20363CACACAD0FEA9008F
|
||||
:2010C00048A99C2863EAEA08C99CD0FE6848C930D0FE28A9FF48A9472863EAEA08C947D023
|
||||
:2010E000FE6848C9FFD0FE28C042D0FEE000D0FEA042A20373CACACAD0FEA90048A98C2892
|
||||
:2011000073EAEA08C98CD0FE6848C930D0FE28A9FF48A9372873EAEA08C937D0FE6848C930
|
||||
:20112000FFD0FE28C042D0FEE000D0FEA042A20383CACACAD0FEA90048A97C2883EAEA0869
|
||||
:20114000C97CD0FE6848C930D0FE28A9FF48A9272883EAEA08C927D0FE6848C9FFD0FE286A
|
||||
:20116000C042D0FEE000D0FEA042A20393CACACAD0FEA90048A96C2893EAEA08C96CD0FE0B
|
||||
:201180006848C930D0FE28A9FF48A9172893EAEA08C917D0FE6848C9FFD0FE28C042D0FE7D
|
||||
:2011A000E000D0FEA042A203A3CACACAD0FEA90048A95C28A3EAEA08C95CD0FE6848C930F2
|
||||
:2011C000D0FE28A9FF48A90728A3EAEA08C907D0FE6848C9FFD0FE28C042D0FEE000D0FE48
|
||||
:2011E000A042A203B3CACACAD0FEA90048A94C28B3EAEA08C94CD0FE6848C930D0FE28A9C1
|
||||
:20120000FF48A9F728B3EAEA08C9F7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2032F
|
||||
:20122000C3CACACAD0FEA90048A93C28C3EAEA08C93CD0FE6848C930D0FE28A9FF48A9E730
|
||||
:2012400028C3EAEA08C9E7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D3CACACAA5
|
||||
:20126000D0FEA90048A92C28D3EAEA08C92CD0FE6848C930D0FE28A9FF48A9D728D3EAEA62
|
||||
:2012800008C9D7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203E3CACACAD0FEA900AD
|
||||
:2012A00048A91C28E3EAEA08C91CD0FE6848C930D0FE28A9FF48A9C728E3EAEA08C9C7D041
|
||||
:2012C000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203F3CACACAD0FEA90048A90C28B0
|
||||
:2012E000F3EAEA08C90CD0FE6848C930D0FE28A9FF48A9B728F3EAEA08C9B7D0FE6848C9CF
|
||||
:20130000FFD0FE28C042D0FEE000D0FEA042A2030BCACACAD0FEA90048A9F4280BEAEA08FF
|
||||
:20132000C9F4D0FE6848C930D0FE28A9FF48A99F280BEAEA08C99FD0FE6848C9FFD0FE2898
|
||||
:20134000C042D0FEE000D0FEA042A2031BCACACAD0FEA90048A9E4281BEAEA08C9E4D0FE29
|
||||
:201360006848C930D0FE28A9FF48A98F281BEAEA08C98FD0FE6848C9FFD0FE28C042D0FE23
|
||||
:20138000E000D0FEA042A2032BCACACAD0FEA90048A9D4282BEAEA08C9D4D0FE6848C93010
|
||||
:2013A000D0FE28A9FF48A97F282BEAEA08C97FD0FE6848C9FFD0FE28C042D0FEE000D0FEEE
|
||||
:2013C000A042A2033BCACACAD0FEA90048A9C4283BEAEA08C9C4D0FE6848C930D0FE28A9DF
|
||||
:2013E000FF48A96F283BEAEA08C96FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D6
|
||||
:201400004BCACACAD0FEA90048A9B4284BEAEA08C9B4D0FE6848C930D0FE28A9FF48A95FD6
|
||||
:20142000284BEAEA08C95FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2035BCACACA3B
|
||||
:20144000D0FEA90048A9A4285BEAEA08C9A4D0FE6848C930D0FE28A9FF48A94F285BEAEA08
|
||||
:2014600008C94FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2036BCACACAD0FEA900CB
|
||||
:2014800048A994286BEAEA08C994D0FE6848C930D0FE28A9FF48A93F286BEAEA08C93FD06F
|
||||
:2014A000FE6848C9FFD0FE28C042D0FEE000D0FEA042A2037BCACACAD0FEA90048A98428CE
|
||||
:2014C0007BEAEA08C984D0FE6848C930D0FE28A9FF48A92F287BEAEA08C92FD0FE6848C975
|
||||
:2014E000FFD0FE28C042D0FEE000D0FEA042A2038BCACACAD0FEA90048A974288BEAEA089E
|
||||
:20150000C974D0FE6848C930D0FE28A9FF48A91F288BEAEA08C91FD0FE6848C9FFD0FE28B6
|
||||
:20152000C042D0FEE000D0FEA042A2039BCACACAD0FEA90048A964289BEAEA08C964D0FE47
|
||||
:201540006848C930D0FE28A9FF48A90F289BEAEA08C90FD0FE6848C9FFD0FE28C042D0FEC1
|
||||
:20156000E000D0FEA042A203ABCACACAD0FEA90048A95428ABEAEA08C954D0FE6848C9302E
|
||||
:20158000D0FE28A9FF48A9FF28ABEAEA08C9FFD0FE6848C9FFD0FE28C042D0FEE000D0FE8C
|
||||
:2015A000A042A203BBCACACAD0FEA90048A94428BBEAEA08C944D0FE6848C930D0FE28A9FD
|
||||
:2015C000FF48A9EF28BBEAEA08C9EFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20374
|
||||
:2015E000EBCACACAD0FEA90048A91428EBEAEA08C914D0FE6848C930D0FE28A9FF48A9BF95
|
||||
:2016000028EBEAEA08C9BFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203FBCACACAB9
|
||||
:20162000D0FEA90048A90428FBEAEA08C904D0FE6848C930D0FE28A9FF48A9AF28FBEAEAC6
|
||||
:2016400008C9AFD0FE6848C9FFD0FE28C042D0FEE000D0FEAD0202C908D0FEA9098D0202BD
|
||||
:20166000A203BD8B269DFD02CA10F7A9288D0002A9004828A949A24EA0446CFD02EAD0FE88
|
||||
:2016800088880888888828F0FE10FE90FE50FEC9E3D0FEE04FD0FEC03ED0FEBAE0FFD0FEF0
|
||||
:2016A000AD0202C909D0FEA90A8D0202A20BBDC7269DF902CA10F7A9278D0002A90048285D
|
||||
:2016C000A958A204A0497CF902EAD0FE88880888888828F0FE10FE90FE50FEC9F2D0FEE032
|
||||
:2016E00006D0FEC043D0FEBAE0FFD0FEA9088D0003A9178D0103A9058D0002A9178D0102BF
|
||||
:20170000A2FF7C01024C0517AD0202C90AD0FEA90B8D0202A90048A942A252A04B2800883F
|
||||
:2017200008888888C9E8D0FEE053D0FEC045D0FE68C930D0FEBAE0FFD0FEA9FF48A9BDA228
|
||||
:20174000ADA0B428008808888888C917D0FEE0AED0FEC0AED0FE68C9FFD0FEBAE0FFD0FE8D
|
||||
:20176000AD0202C90BD0FEA90C8D0202A2ACA0DCA9FF48A9FE281A4808C9FFD0FE6848C9CE
|
||||
:20178000FDD0FE28681A4808C900D0FE6848C97FD0FE28681A4808C901D0FE6848C97DD0CF
|
||||
:2017A000FE28683A4808C900D0FE6848C97FD0FE28683A4808C9FFD0FE6848C9FDD0FE2898
|
||||
:2017C000683AA90048A9FE281A4808C9FFD0FE6848C9B0D0FE28681A4808C900D0FE68486F
|
||||
:2017E000C932D0FE28681A4808C901D0FE6848C930D0FE28683A4808C900D0FE6848C932BB
|
||||
:20180000D0FE28683A4808C9FFD0FE6848C9B0D0FE2868E0ACD0FEC0DCD0FEBAE0FFD0FE98
|
||||
:20182000AD0202C90CD0FEA90D8D0202A299A066A9004828B2240849C32892300849C3C902
|
||||
:20184000C3D0FE684930CD1502D0FEA9004828B2260849C32892320849C3C982D0FE684995
|
||||
:2018600030CD1602D0FEA9004828B2280849C32892340849C3C941D0FE684930CD1702D00D
|
||||
:20188000FEA9004828B22A0849C32892360849C3C900D0FE684930CD1802D0FEE099D0FEC9
|
||||
:2018A000C066D0FEA003A200B9050249C3D91002D0FE8A9905028810EFA299A066A9FF4888
|
||||
:2018C00028B2240849C32892300849C3C9C3D0FE68497DCD1502D0FEA9FF4828B22608497D
|
||||
:2018E000C32892320849C3C982D0FE68497DCD1602D0FEA9FF4828B2280849C3289234082F
|
||||
:2019000049C3C941D0FE68497DCD1702D0FEA9FF4828B22A0849C32892360849C3C900D05C
|
||||
:20192000FE68497DCD1802D0FEE099D0FEC066D0FEA003A200B9050249C3D91002D0FE8A37
|
||||
:201940009905028810EFBAE0FFD0FEAD0202C90DD0FEA90E8D0202A07BA204A907950C0A40
|
||||
:20196000CA10FAA204A9FF48A95528640C640D640E640F641008C955D0FE6848C9FFD0FE63
|
||||
:2019800028B50CD0FECA10F9A204A907950C0ACA10FAA204A90048A9AA28640C640D640E83
|
||||
:2019A000640F641008C9AAD0FE6848C930D0FE28B50CD0FECA10F9A204A9079D05020ACA28
|
||||
:2019C00010F9A204A9FF48A955289C05029C06029C07029C08029C090208C955D0FE684865
|
||||
:2019E000C9FFD0FE28BD0502D0FECA10F8A204A9079D05020ACA10F9A204A90048A9AA28DC
|
||||
:201A00009C05029C06029C07029C08029C090208C9AAD0FE6848C930D0FE28BD0502D0FE13
|
||||
:201A2000CA10F8A204A907950C0ACA10FAA204A9FF48A95528740C08C955D0FE6848C9FF57
|
||||
:201A4000D0FE28CA10E9A204B50CD0FECA10F9A204A907950C0ACA10FAA204A90048A9AA06
|
||||
:201A600028740C08C9AAD0FE6848C930D0FE28CA10E9A204B50CD0FECA10F9A204A9079D18
|
||||
:201A800005020ACA10F9A204A9FF48A955289E050208C955D0FE6848C9FFD0FE28CA10E8DD
|
||||
:201AA000A204BD0502D0FECA10F8A204A9079D05020ACA10F9A204A90048A9AA289E05028E
|
||||
:201AC00008C9AAD0FE6848C930D0FE28CA10E8A204BD0502D0FECA10F8C07BD0FEBAE0FFB0
|
||||
:201AE000D0FEAD0202C90ED0FEA90F8D0202A042A203A90048A9FF28341308C9FFD0FE68E4
|
||||
:201B000048C932D0FE28CAA90048A90128341308C901D0FE6848C970D0FE28CAA90048A9D5
|
||||
:201B20000128341308C901D0FE6848C9B2D0FE28CAA90048A90128341308C901D0FE684850
|
||||
:201B4000C9F0D0FE28A9FF48A90128341308C901D0FE6848C9FDD0FE28E8A9FF48A9012817
|
||||
:201B6000341308C901D0FE6848C9BFD0FE28E8A9FF48A90128341308C901D0FE6848C97DC9
|
||||
:201B8000D0FE28E8A9FF48A9FF28341308C9FFD0FE6848C93FD0FE28A90048A9FF283C1007
|
||||
:201BA0000208C9FFD0FE6848C932D0FE28CAA90048A901283C100208C901D0FE6848C97080
|
||||
:201BC000D0FE28CAA90048A901283C100208C901D0FE6848C9B2D0FE28CAA90048A90128E6
|
||||
:201BE0003C100208C901D0FE6848C9F0D0FE28A9FF48A901283C100208C901D0FE6848C96F
|
||||
:201C0000FDD0FE28E8A9FF48A901283C100208C901D0FE6848C9BFD0FE28E8A9FF48A90189
|
||||
:201C2000283C100208C901D0FE6848C97DD0FE28E8A9FF48A9FF283C100208C9FFD0FE68A6
|
||||
:201C400048C93FD0FE28A90048A9FF28890008C9FFD0FE6848C932D0FE28CAA90048A90150
|
||||
:201C600028894108C901D0FE6848C930D0FE28CAA90048A90128898208C901D0FE6848C982
|
||||
:201C800032D0FE28CAA90048A9012889C308C901D0FE6848C930D0FE28A9FF48A9012889B9
|
||||
:201CA000C308C901D0FE6848C9FDD0FE28E8A9FF48A90128898208C901D0FE6848C9FFD0B8
|
||||
:201CC000FE28E8A9FF48A90128894108C901D0FE6848C9FDD0FE28E8A9FF48A9FF2889002D
|
||||
:201CE00008C9FFD0FE6848C9FFD0FE28E003D0FEC042D0FEBAE0FFD0FEAD0202C90FD0FE99
|
||||
:201D0000A9108D0202A2C0A000640D98250D08682902850E9849FF050D49FF850F98050D96
|
||||
:201D20008510840CA9FF48A50D28140C08C50DD0FE68480902C9FFD0FE682902C50ED0FE67
|
||||
:201D4000A50FC50CD0FE8C0502A9FF48A50D281C050208C50DD0FE68480902C9FFD0FE684F
|
||||
:201D60002902C50ED0FEA50FC50CD0FE840CA90048A50D28140C08C50DD0FE68480902C99D
|
||||
:201D800032D0FE682902C50ED0FEA50FC50CD0FE8C0502A90048A50D281C050208C50DD091
|
||||
:201DA000FE68480902C932D0FE682902C50ED0FEA50FC50CD0FE840CA9FF48A50D28040CB0
|
||||
:201DC00008C50DD0FE68480902C9FFD0FE682902C50ED0FEA510C50CD0FE8C0502A9FF48FF
|
||||
:201DE000A50D280C050208C50DD0FE68480902C9FFD0FE682902C50ED0FEA510C50CD0FE75
|
||||
:201E0000840CA90048A50D28040C08C50DD0FE68480902C932D0FE682902C50ED0FEA51042
|
||||
:201E2000C50CD0FE8C0502A90048A50D280C050208C50DD0FE68480902C932D0FE682902D3
|
||||
:201E4000C50ED0FEA510C50CD0FEC8D004E60DF0034C0B1DE0C0D0FEBAE0FFD0FEAD020211
|
||||
:201E6000C910D0FEA9118D0202A2BAA0D0A9FF850CA90048A9A528070C08C9A5D0FE6848FD
|
||||
:201E8000C930D0FE28A50CC9FED0FEA901850CA9FF48A95A28070C08C95AD0FE6848C9FF33
|
||||
:201EA000D0FE28A50CD0FEA9FF850CA90048A9A528170C08C9A5D0FE6848C930D0FE28A562
|
||||
:201EC0000CC9FDD0FEA902850CA9FF48A95A28170C08C95AD0FE6848C9FFD0FE28A50CD000
|
||||
:201EE000FEA9FF850CA90048A9A528270C08C9A5D0FE6848C930D0FE28A50CC9FBD0FEA942
|
||||
:201F000004850CA9FF48A95A28270C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA916
|
||||
:201F20000048A9A528370C08C9A5D0FE6848C930D0FE28A50CC9F7D0FEA908850CA9FF484C
|
||||
:201F4000A95A28370C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA90048A9A5284746
|
||||
:201F60000C08C9A5D0FE6848C930D0FE28A50CC9EFD0FEA910850CA9FF48A95A28470C087B
|
||||
:201F8000C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA90048A9A528570C08C9A5D0FE1C
|
||||
:201FA0006848C930D0FE28A50CC9DFD0FEA920850CA9FF48A95A28570C08C95AD0FE6848DA
|
||||
:201FC000C9FFD0FE28A50CD0FEA9FF850CA90048A9A528670C08C9A5D0FE6848C930D0FEF6
|
||||
:201FE00028A50CC9BFD0FEA940850CA9FF48A95A28670C08C95AD0FE6848C9FFD0FE28A59E
|
||||
:202000000CD0FEA9FF850CA90048A9A528770C08C9A5D0FE6848C930D0FE28A50CC97FD017
|
||||
:20202000FEA980850CA9FF48A95A28770C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FE8538
|
||||
:202040000CA90048A9A528870C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA96D
|
||||
:20206000FF48A95A28870C08C95AD0FE6848C9FFD0FE28A50CC901D0FEA9FD850CA9004883
|
||||
:20208000A9A528970C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95AD0
|
||||
:2020A00028970C08C95AD0FE6848C9FFD0FE28A50CC902D0FEA9FB850CA90048A9A528A761
|
||||
:2020C0000C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28A70C08BA
|
||||
:2020E000C95AD0FE6848C9FFD0FE28A50CC904D0FEA9F7850CA90048A9A528B70C08C9A564
|
||||
:20210000D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28B70C08C95AD0FEFA
|
||||
:202120006848C9FFD0FE28A50CC908D0FEA9EF850CA90048A9A528C70C08C9A5D0FE68488A
|
||||
:20214000C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28C70C08C95AD0FE6848C9FFB0
|
||||
:20216000D0FE28A50CC910D0FEA9DF850CA90048A9A528D70C08C9A5D0FE6848C930D0FEF3
|
||||
:2021800028A50CC9FFD0FEA900850CA9FF48A95A28D70C08C95AD0FE6848C9FFD0FE28A58C
|
||||
:2021A0000CC920D0FEA9BF850CA90048A9A528E70C08C9A5D0FE6848C930D0FE28A50CC9AC
|
||||
:2021C000FFD0FEA900850CA9FF48A95A28E70C08C95AD0FE6848C9FFD0FE28A50CC940D0F9
|
||||
:2021E000FEA97F850CA90048A9A528F70C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA9EB
|
||||
:2022000000850CA9FF48A95A28F70C08C95AD0FE6848C9FFD0FE28A50CC980D0FEE0BAD076
|
||||
:20222000FEC0D0D0FEBAE0FFD0FEAD0202C911D0FEA9128D0202A2DEA0ADA90048A9802827
|
||||
:20224000D22C08C980D0FE6848C931D0FE28A90048A97F28D22C08C97FD0FE6848C933D0E8
|
||||
:20226000FE28A90048A97E28D22C08C97ED0FE6848C9B0D0FE28A9FF48A98028D22C08C9AE
|
||||
:2022800080D0FE6848C97DD0FE28A9FF48A97F28D22C08C97FD0FE6848C97FD0FE28A9FF12
|
||||
:2022A00048A97E28D22C08C97ED0FE6848C9FCD0FE28E0DED0FEC0ADD0FEBAE0FFD0FEAD26
|
||||
:2022C0000202C912D0FEA9138D0202A242A000A53A850CA53B850DA90048B9530228320C39
|
||||
:2022E00008D95B02D0FE684930D95F02D0FEE60CC8C004D0E288C60CA9FF48B95302283207
|
||||
:202300000C08D95B02D0FE68497DD95F02D0FEC60C8810E4A000A542850CA543850DA900E6
|
||||
:2023200048B9570228520C08D95B02D0FE684930D95F02D0FEE60CC8C004D0E288C60CA995
|
||||
:20234000FF48B9570228520C08D95B02D0FE68497DD95F02D0FEC60C8810E4A000A54A85FA
|
||||
:202360000CA54B850DA90048B94F0228120C08D95B02D0FE684930D95F02D0FEE60CC8C01F
|
||||
:2023800004D0E288C60CA9FF48B94F0228120C08D95B02D0FE68497DD95F02D0FEC60C8851
|
||||
:2023A00010E4E042D0FEBAE0FFD0FEAD0202C913D0FEA9148D020258D8A20EA0FFA900857C
|
||||
:2023C0000C850D850E8D0502850F8510A9FF85128D0602A902851118204E26E60CE60F085F
|
||||
:2023E0000868298228D002E6100510851138204E26C60CE60DD0E0A9008510EE0502E60EBF
|
||||
:20240000086829828511C612CE0602A50E850FD0C6E00ED0FEC0FFD0FEBAE0FFD0FEAD0221
|
||||
:2024200002C914D0FEA9158D0202F8A20EA0FFA999850D850E8D0502850FA901850C8510FA
|
||||
:20244000A9818511A90085128D06023820F724C60CA50FD008C610A999850FD012290FD080
|
||||
:202460000CC60FC60FC60FC60FC60FC60FC60F08682982051085111820F724E60CA50DF0D0
|
||||
:2024800015290FD00CC60DC60DC60DC60DC60DC60DC60D4C4B24A999850DA50EF039290FAB
|
||||
:2024A000D018C60EC60EC60EC60EC60EC60EE612E612E612E612E612E612C60EE612A512E9
|
||||
:2024C0008D0602A50E8D0502850F0868298209018511E6104C4B24E00ED0FEC0FFD0FEBA1D
|
||||
:2024E000E0FFD0FED8AD0202C915D0FEA9F08D02024CF1244C000408A50D650E08C50FD046
|
||||
:20250000FE682983C511D0FE2808A50DE51208C50FD0FE682983C511D0FE2808A50D6D0576
|
||||
:202520000208C50FD0FE682983C511D0FE2808A50DED060208C50FD0FE682983C511D0FEFE
|
||||
:202540002808A50E8D0B02A50D200A0208C50FD0FE682983C511D0FE2808A5128D0E02A595
|
||||
:202560000D200D0208C50FD0FE682983C511D0FE2808A50D750008C50FD0FE682983C511D2
|
||||
:20258000D0FE2808A50DF50408C50FD0FE682983C511D0FE2808A50D7DF70108C50FD0FE2F
|
||||
:2025A000682983C511D0FE2808A50DFDF80108C50FD0FE682983C511D0FE2808A50D7906C8
|
||||
:2025C0000108C50FD0FE682983C511D0FE2808A50DF9070108C50FD0FE682983C511D0FE53
|
||||
:2025E0002808A50D614408C50FD0FE682983C511D0FE2808A50DE14608C50FD0FE6829832B
|
||||
:20260000C511D0FE2808A50D715608C50FD0FE682983C511D0FE2808A50DF15808C50FD034
|
||||
:20262000FE682983C511D0FE2808A50D725208C50FD0FE682983C511D0FE2808A50DF254B4
|
||||
:2026400008C50FD0FE682983C511D0FE2860A511298348A50D450E300AA50D450F10046825
|
||||
:2026600009404868851108A50D725208C50FD0FE6829C3C511D0FE2808A50DF25408C50FA7
|
||||
:20268000D0FE6829C3C511D0FE28609126821688880888888828B0FE70FE30FEF0FEC9497B
|
||||
:2026A000D0FEE04ED0FEC041D0FE488A48BAE0FDD0FE68AAA9FF482868E849AA6CFF02EA3E
|
||||
:2026C000EA4CC1264C00040E270E27D526CE160E270E2788880888888828B0FE70FE30FEB8
|
||||
:2026E000F0FEC958D0FEE004D0FEC046D0FE488A48BAE0FDD0FE68AAA9FF482868E8E8494D
|
||||
:20270000AA7CF902EAEA4C06274C0004EAEAEAEA4C10274C00044C16274C00044C1C274CCC
|
||||
:202720000004888808888888C9BDF042C942D0FEE052D0FEC048D0FE850A860BBABD0201E4
|
||||
:20274000C930D0FE68C934D0FEBAE0FCD0FEADFF01C917D0FEADFE01C920D0FEA9FF48A6C7
|
||||
:202760000BE8A50A49AA28404C68274C0004E0ADD0FEC0B1D0FE850A860BBABD0201C9FF35
|
||||
:20278000D0FE68C9F7D0FEBAE0FCD0FEADFF01C917D0FEADFE01C946D0FEA90448A60BE89F
|
||||
:2027A000A50A49AA28404CA6274C00040000000000000000000000000000000000000000A6
|
||||
:2027C000000000000000000000000000EAEAEAEA4CD027000000000000000000000000000E
|
||||
:2027E0000000000000000000000000000000000000000000000000000000000000000000D9
|
||||
:202800000000000000000000000000000000000000000000000000000000000000000000B8
|
||||
:20282000000000000000000000000000000000000000000000000000000000000000000098
|
||||
:20284000000000000000000000000000000000000000000000000000000000000000000078
|
||||
:20286000000000000000000000000000000000000000000000000000000000000000000058
|
||||
:07288000EAEAEAEA4C8428B1
|
||||
:06FFFA0016271C27242736
|
||||
:00040001FB
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,6 @@
|
|||
## Test programs.
|
||||
Each of these came from Klauss Dormann's GitHub repository: https://github.com/Klaus2m5/6502_65C02_functional_tests
|
||||
|
||||
I've included the source, the hex file and the list/report file to aid in debugging.
|
||||
|
||||
They were assembled with AS65 Assembler following the instructions. The .hex files can be loaded directly to my test program.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,302 @@
|
|||
:16000A00000000000000000000C38241007F001F71800FFF7F80BE
|
||||
:20002000FF0F8F8F10021102120213021402180105020602070208020D0147024802490209
|
||||
:1A0040004A024B024C024D024E0243024402450246020502060206010701E8
|
||||
:2002000000000000000000000000690060E90060C38241007F8080000286048200870583AA
|
||||
:200220000161412000E1C1A080810180028101800001000102818081807F80FF00010080AE
|
||||
:20024000800200001F71800FFF7F80FF0F8F8F00F11F00F0FFFFFFFFF0F00F00FF7F8002E8
|
||||
:030260008000809B
|
||||
:20040000D8A2FF9AA9008D0202AD0202C900D0FEA9018D0202A999A2FF9AA255DAA2AADA98
|
||||
:20042000ECFE01D0FEBAE0FDD0FE7AC0AAD0FE7AC055D0FECCFF01D0FEBAE0FFD0FEA0A549
|
||||
:200440005AA05A5ACCFE01D0FEBAE0FDD0FEFAE05AD0FEFAE0A5D0FEECFF01D0FEBAE0FF4E
|
||||
:20046000D0FEC999D0FEAD0202C901D0FEA9028D0202A0AAA9FF48A20128DA08E001D0FE63
|
||||
:200480006848C9FFD0FE28A90048A20028DA08E000D0FE6848C930D0FE28A9FF48A2FF284B
|
||||
:2004A000DA08E0FFD0FE6848C9FFD0FE28A90048A20128DA08E001D0FE6848C930D0FE2853
|
||||
:2004C000A9FF48A20028DA08E000D0FE6848C9FFD0FE28A90048A2FF28DA08E0FFD0FE68B3
|
||||
:2004E00048C930D0FE28A9FF48A20028FA08E0FFD0FE6848C9FDD0FE28A90048A2FF28FA3C
|
||||
:2005000008E000D0FE6848C932D0FE28A9FF48A2FE28FA08E001D0FE6848C97DD0FE28A986
|
||||
:200520000048A20028FA08E0FFD0FE6848C9B0D0FE28A9FF48A2FF28FA08E000D0FE6848C2
|
||||
:20054000C97FD0FE28A90048A2FE28FA08E001D0FE6848C930D0FE28C0AAD0FEAD0202C9A2
|
||||
:2005600002D0FEA9038D0202A255A9FF48A001285A08C001D0FE6848C9FFD0FE28A900486E
|
||||
:20058000A000285A08C000D0FE6848C930D0FE28A9FF48A0FF285A08C0FFD0FE6848C9FFE6
|
||||
:2005A000D0FE28A90048A001285A08C001D0FE6848C930D0FE28A9FF48A000285A08C00021
|
||||
:2005C000D0FE6848C9FFD0FE28A90048A0FF285A08C0FFD0FE6848C930D0FE28A9FF48A009
|
||||
:2005E00000287A08C0FFD0FE6848C9FDD0FE28A90048A0FF287A08C000D0FE6848C932D015
|
||||
:20060000FE28A9FF48A0FE287A08C001D0FE6848C97DD0FE28A90048A000287A08C0FFD037
|
||||
:20062000FE6848C9B0D0FE28A9FF48A0FF287A08C000D0FE6848C97FD0FE28A90048A0FE59
|
||||
:20064000287A08C001D0FE6848C930D0FE28E055D0FEAD0202C903D0FEA9048D0202A28113
|
||||
:20066000A07EA9FF48A9002880034C6A0608C900D0FE6848C9FFD0FE28A90048A9FF28800E
|
||||
:20068000034C810608C9FFD0FE6848C930D0FE28E081D0FEC07ED0FEAD0202C904D0FEA917
|
||||
:2006A000058D0202A0008061C001D0FEC88053C003D0FEC88045C005D0FEC8A0008004C894
|
||||
:2006C000C8C8C88003C8C8C8C88002C8C8C8C88001C8C8C8C88000C8C8C8C8C00AD0FE8024
|
||||
:2006E0001288888888800E88888880F5888880F78880F980FBC000D0FE8015C004D0FEC8AD
|
||||
:2007000080B4C002D0FEC880A6C000D0FEC88098AD0202C905D0FEA9068D0202A211A022B7
|
||||
:20072000A901850CA90048A933280F0C068F0C064C30074C330708C933D0FE6848C930D073
|
||||
:20074000FE28A9FF48A9CC280F0C068F0C064C4E074C510708C9CCD0FE6848C9FFD0FE2806
|
||||
:20076000A50CC901D0FEA9FE850CA90048A933288F0C060F0C064C76074C790708C933D0D8
|
||||
:20078000FE6848C930D0FE28A9FF48A9CC288F0C060F0C064C94074C970708C9CCD0FE68C9
|
||||
:2007A00048C9FFD0FE28A50CC9FED0FEA902850CA90048A933281F0C069F0C064CBC074C7F
|
||||
:2007C000BF0708C933D0FE6848C930D0FE28A9FF48A9CC281F0C069F0C064CDA074CDD0716
|
||||
:2007E00008C9CCD0FE6848C9FFD0FE28A50CC902D0FEA9FD850CA90048A933289F0C061FDA
|
||||
:200800000C064C02084C050808C933D0FE6848C930D0FE28A9FF48A9CC289F0C061F0C0637
|
||||
:200820004C20084C230808C9CCD0FE6848C9FFD0FE28A50CC9FDD0FEA904850CA90048A9D7
|
||||
:2008400033282F0C06AF0C064C48084C4B0808C933D0FE6848C930D0FE28A9FF48A9CC2802
|
||||
:200860002F0C06AF0C064C66084C690808C9CCD0FE6848C9FFD0FE28A50CC904D0FEA9FB36
|
||||
:20088000850CA90048A93328AF0C062F0C064C8E084C910808C933D0FE6848C930D0FE2898
|
||||
:2008A000A9FF48A9CC28AF0C062F0C064CAC084CAF0808C9CCD0FE6848C9FFD0FE28A50C1C
|
||||
:2008C000C9FBD0FEA908850CA90048A933283F0C06BF0C064CD4084CD70808C933D0FE68A0
|
||||
:2008E00048C930D0FE28A9FF48A9CC283F0C06BF0C064CF2084CF50808C9CCD0FE6848C99F
|
||||
:20090000FFD0FE28A50CC908D0FEA9F7850CA90048A93328BF0C063F0C064C1A094C1D0969
|
||||
:2009200008C933D0FE6848C930D0FE28A9FF48A9CC28BF0C063F0C064C38094C3B0908C9A9
|
||||
:20094000CCD0FE6848C9FFD0FE28A50CC9F7D0FEA910850CA90048A933284F0C06CF0C06CF
|
||||
:200960004C60094C630908C933D0FE6848C930D0FE28A9FF48A9CC284F0C06CF0C064C7E00
|
||||
:20098000094C810908C9CCD0FE6848C9FFD0FE28A50CC910D0FEA9EF850CA90048A9332829
|
||||
:2009A000CF0C064F0C064CA6094CA90908C933D0FE6848C930D0FE28A9FF48A9CC28CF0C23
|
||||
:2009C000064F0C064CC4094CC70908C9CCD0FE6848C9FFD0FE28A50CC9EFD0FEA920850C11
|
||||
:2009E000A90048A933285F0C06DF0C064CEC094CEF0908C933D0FE6848C930D0FE28A9FF02
|
||||
:200A000048A9CC285F0C06DF0C064C0A0A4C0D0A08C9CCD0FE6848C9FFD0FE28A50CC92059
|
||||
:200A2000D0FEA9DF850CA90048A93328DF0C065F0C064C320A4C350A08C933D0FE6848C91A
|
||||
:200A400030D0FE28A9FF48A9CC28DF0C065F0C064C500A4C530A08C9CCD0FE6848C9FFD07F
|
||||
:200A6000FE28A50CC9DFD0FEA940850CA90048A933286F0C06EF0C064C780A4C7B0A08C9C8
|
||||
:200A800033D0FE6848C930D0FE28A9FF48A9CC286F0C06EF0C064C960A4C990A08C9CCD05F
|
||||
:200AA000FE6848C9FFD0FE28A50CC940D0FEA9BF850CA90048A93328EF0C066F0C064CBEC8
|
||||
:200AC0000A4CC10A08C933D0FE6848C930D0FE28A9FF48A9CC28EF0C066F0C064CDC0A4CF7
|
||||
:200AE000DF0A08C9CCD0FE6848C9FFD0FE28A50CC9BFD0FEA980850CA90048A933287F0CF3
|
||||
:200B000006FF0C064C040B4C070B08C933D0FE6848C930D0FE28A9FF48A9CC287F0C06FF77
|
||||
:200B20000C064C220B4C250B08C9CCD0FE6848C9FFD0FE28A50CC980D0FEA97F850CA900AB
|
||||
:200B400048A93328FF0C067F0C064C4A0B4C4D0B08C933D0FE6848C930D0FE28A9FF48A958
|
||||
:200B6000CC28FF0C067F0C064C680B4C6B0B08C9CCD0FE6848C9FFD0FE28A50CC97FD0FEBE
|
||||
:200B8000E011D0FEC022D0FEAD0202C906D0FEA9078D0202A900850CA9000F0C0249011FEE
|
||||
:200BA0000C0249022F0C0249043F0C0249084F0C0249105F0C0249206F0C0249407F0C0295
|
||||
:200BC0004980450CD0FEA9FF8F0C0249019F0C024902AF0C024904BF0C024908CF0C024958
|
||||
:200BE00010DF0C024920EF0C024940FF0C024980450CD0FEE60CD0A0AD0202C907D0FEA9BA
|
||||
:200C0000088D0202A042A20202C8CACAD0FEA90048A9FD2802EAEA08C9FDD0FE6848C930AF
|
||||
:200C2000D0FE28A9FF48A9A82802EAEA08C9A8D0FE6848C9FFD0FE28C042D0FEE000D0FE4C
|
||||
:200C4000A042A20222C8CACAD0FEA90048A9DD2822EAEA08C9DDD0FE6848C930D0FE28A969
|
||||
:200C6000FF48A9882822EAEA08C988D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20245
|
||||
:200C800042C8CACAD0FEA90048A9BD2842EAEA08C9BDD0FE6848C930D0FE28A9FF48A96857
|
||||
:200CA0002842EAEA08C968D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20262C8CACABF
|
||||
:200CC000D0FEA90048A99D2862EAEA08C99DD0FE6848C930D0FE28A9FF48A9482862EAEA97
|
||||
:200CE00008C948D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20282C8CACAD0FEA90046
|
||||
:200D000048A97D2882EAEA08C97DD0FE6848C930D0FE28A9FF48A9282882EAEA08C928D024
|
||||
:200D2000FE6848C9FFD0FE28C042D0FEE000D0FEA042A202C2C8CACAD0FEA90048A93D2858
|
||||
:200D4000C2EAEA08C93DD0FE6848C930D0FE28A9FF48A9E828C2EAEA08C9E8D0FE6848C943
|
||||
:200D6000FFD0FE28C042D0FEE000D0FEA042A202E2C8CACAD0FEA90048A91D28E2EAEA08D1
|
||||
:200D8000C91DD0FE6848C930D0FE28A9FF48A9C828E2EAEA08C9C8D0FE6848C9FFD0FE28EC
|
||||
:200DA000C042D0FEE000D0FEA042A20244C8CACAD0FEA90048A9BB2844EAEA08C9BBD0FED2
|
||||
:200DC0006848C930D0FE28A9FF48A9662844EAEA08C966D0FE6848C9FFD0FE28C042D0FEF2
|
||||
:200DE000E000D0FEA042A20254C8CACAD0FEA90048A9AB2854EAEA08C9ABD0FE6848C930B9
|
||||
:200E0000D0FE28A9FF48A9562854EAEA08C956D0FE6848C9FFD0FE28C042D0FEE000D0FEBC
|
||||
:200E2000A042A202D4C8CACAD0FEA90048A92B28D4EAEA08C92BD0FE6848C930D0FE28A987
|
||||
:200E4000FF48A9D628D4EAEA08C9D6D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20215
|
||||
:200E6000F4C8CACAD0FEA90048A90B28F4EAEA08C90BD0FE6848C930D0FE28A9FF48A9B627
|
||||
:200E800028F4EAEA08C9B6D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2015CC8C8CAE6
|
||||
:200EA000D0FEA90048A9A3285CEAEA08C9A3D0FE6848C930D0FE28A9FF48A94E285CEAEAAF
|
||||
:200EC00008C94ED0FE6848C9FFD0FE28C042D0FEE000D0FEA042A201DCC8C8CAD0FEA90007
|
||||
:200EE00048A92328DCEAEA08C923D0FE6848C930D0FE28A9FF48A9CE28DCEAEA08C9CED0F7
|
||||
:200F0000FE6848C9FFD0FE28C042D0FEE000D0FEA042A201FCC8C8CAD0FEA90048A9032879
|
||||
:200F2000FCEAEA08C903D0FE6848C930D0FE28A9FF48A9AE28FCEAEA08C9AED0FE6848C99B
|
||||
:200F4000FFD0FE28C042D0FEE000D0FEA042A20303CACACAD0FEA90048A9FC2803EAEA08CB
|
||||
:200F6000C9FCD0FE6848C930D0FE28A9FF48A9A72803EAEA08C9A7D0FE6848C9FFD0FE284C
|
||||
:200F8000C042D0FEE000D0FEA042A20313CACACAD0FEA90048A9EC2813EAEA08C9ECD0FEED
|
||||
:200FA0006848C930D0FE28A9FF48A9972813EAEA08C997D0FE6848C9FFD0FE28C042D0FEDF
|
||||
:200FC000E000D0FEA042A20323CACACAD0FEA90048A9DC2823EAEA08C9DCD0FE6848C930D4
|
||||
:200FE000D0FE28A9FF48A9872823EAEA08C987D0FE6848C9FFD0FE28C042D0FEE000D0FEAA
|
||||
:20100000A042A20333CACACAD0FEA90048A9CC2833EAEA08C9CCD0FE6848C930D0FE28A9A2
|
||||
:20102000FF48A9772833EAEA08C977D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20391
|
||||
:2010400043CACACAD0FEA90048A9BC2843EAEA08C9BCD0FE6848C930D0FE28A9FF48A96792
|
||||
:201060002843EAEA08C967D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20353CACACA07
|
||||
:20108000D0FEA90048A9AC2853EAEA08C9ACD0FE6848C930D0FE28A9FF48A9572853EAEAC4
|
||||
:2010A00008C957D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20363CACACAD0FEA9008F
|
||||
:2010C00048A99C2863EAEA08C99CD0FE6848C930D0FE28A9FF48A9472863EAEA08C947D023
|
||||
:2010E000FE6848C9FFD0FE28C042D0FEE000D0FEA042A20373CACACAD0FEA90048A98C2892
|
||||
:2011000073EAEA08C98CD0FE6848C930D0FE28A9FF48A9372873EAEA08C937D0FE6848C930
|
||||
:20112000FFD0FE28C042D0FEE000D0FEA042A20383CACACAD0FEA90048A97C2883EAEA0869
|
||||
:20114000C97CD0FE6848C930D0FE28A9FF48A9272883EAEA08C927D0FE6848C9FFD0FE286A
|
||||
:20116000C042D0FEE000D0FEA042A20393CACACAD0FEA90048A96C2893EAEA08C96CD0FE0B
|
||||
:201180006848C930D0FE28A9FF48A9172893EAEA08C917D0FE6848C9FFD0FE28C042D0FE7D
|
||||
:2011A000E000D0FEA042A203A3CACACAD0FEA90048A95C28A3EAEA08C95CD0FE6848C930F2
|
||||
:2011C000D0FE28A9FF48A90728A3EAEA08C907D0FE6848C9FFD0FE28C042D0FEE000D0FE48
|
||||
:2011E000A042A203B3CACACAD0FEA90048A94C28B3EAEA08C94CD0FE6848C930D0FE28A9C1
|
||||
:20120000FF48A9F728B3EAEA08C9F7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2032F
|
||||
:20122000C3CACACAD0FEA90048A93C28C3EAEA08C93CD0FE6848C930D0FE28A9FF48A9E730
|
||||
:2012400028C3EAEA08C9E7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D3CACACAA5
|
||||
:20126000D0FEA90048A92C28D3EAEA08C92CD0FE6848C930D0FE28A9FF48A9D728D3EAEA62
|
||||
:2012800008C9D7D0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203E3CACACAD0FEA900AD
|
||||
:2012A00048A91C28E3EAEA08C91CD0FE6848C930D0FE28A9FF48A9C728E3EAEA08C9C7D041
|
||||
:2012C000FE6848C9FFD0FE28C042D0FEE000D0FEA042A203F3CACACAD0FEA90048A90C28B0
|
||||
:2012E000F3EAEA08C90CD0FE6848C930D0FE28A9FF48A9B728F3EAEA08C9B7D0FE6848C9CF
|
||||
:20130000FFD0FE28C042D0FEE000D0FEA042A2030BCACACAD0FEA90048A9F4280BEAEA08FF
|
||||
:20132000C9F4D0FE6848C930D0FE28A9FF48A99F280BEAEA08C99FD0FE6848C9FFD0FE2898
|
||||
:20134000C042D0FEE000D0FEA042A2031BCACACAD0FEA90048A9E4281BEAEA08C9E4D0FE29
|
||||
:201360006848C930D0FE28A9FF48A98F281BEAEA08C98FD0FE6848C9FFD0FE28C042D0FE23
|
||||
:20138000E000D0FEA042A2032BCACACAD0FEA90048A9D4282BEAEA08C9D4D0FE6848C93010
|
||||
:2013A000D0FE28A9FF48A97F282BEAEA08C97FD0FE6848C9FFD0FE28C042D0FEE000D0FEEE
|
||||
:2013C000A042A2033BCACACAD0FEA90048A9C4283BEAEA08C9C4D0FE6848C930D0FE28A9DF
|
||||
:2013E000FF48A96F283BEAEA08C96FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203D6
|
||||
:201400004BCACACAD0FEA90048A9B4284BEAEA08C9B4D0FE6848C930D0FE28A9FF48A95FD6
|
||||
:20142000284BEAEA08C95FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2035BCACACA3B
|
||||
:20144000D0FEA90048A9A4285BEAEA08C9A4D0FE6848C930D0FE28A9FF48A94F285BEAEA08
|
||||
:2014600008C94FD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A2036BCACACAD0FEA900CB
|
||||
:2014800048A994286BEAEA08C994D0FE6848C930D0FE28A9FF48A93F286BEAEA08C93FD06F
|
||||
:2014A000FE6848C9FFD0FE28C042D0FEE000D0FEA042A2037BCACACAD0FEA90048A98428CE
|
||||
:2014C0007BEAEA08C984D0FE6848C930D0FE28A9FF48A92F287BEAEA08C92FD0FE6848C975
|
||||
:2014E000FFD0FE28C042D0FEE000D0FEA042A2038BCACACAD0FEA90048A974288BEAEA089E
|
||||
:20150000C974D0FE6848C930D0FE28A9FF48A91F288BEAEA08C91FD0FE6848C9FFD0FE28B6
|
||||
:20152000C042D0FEE000D0FEA042A2039BCACACAD0FEA90048A964289BEAEA08C964D0FE47
|
||||
:201540006848C930D0FE28A9FF48A90F289BEAEA08C90FD0FE6848C9FFD0FE28C042D0FEC1
|
||||
:20156000E000D0FEA042A203ABCACACAD0FEA90048A95428ABEAEA08C954D0FE6848C9302E
|
||||
:20158000D0FE28A9FF48A9FF28ABEAEA08C9FFD0FE6848C9FFD0FE28C042D0FEE000D0FE8C
|
||||
:2015A000A042A203BBCACACAD0FEA90048A94428BBEAEA08C944D0FE6848C930D0FE28A9FD
|
||||
:2015C000FF48A9EF28BBEAEA08C9EFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A20374
|
||||
:2015E000EBCACACAD0FEA90048A91428EBEAEA08C914D0FE6848C930D0FE28A9FF48A9BF95
|
||||
:2016000028EBEAEA08C9BFD0FE6848C9FFD0FE28C042D0FEE000D0FEA042A203FBCACACAB9
|
||||
:20162000D0FEA90048A90428FBEAEA08C904D0FE6848C930D0FE28A9FF48A9AF28FBEAEAC6
|
||||
:2016400008C9AFD0FE6848C9FFD0FE28C042D0FEE000D0FEAD0202C908D0FEA9098D0202BD
|
||||
:20166000A203BD8C269DFD02CA10F7A9288D0002A9004828A949A24EA0446CFD02EAD0FE87
|
||||
:2016800088880888888828F0FE10FE90FE50FEC9E3D0FEE04FD0FEC03ED0FEBAE0FFD0FEF0
|
||||
:2016A000AD0202C909D0FEA90A8D0202A20BBDC8269DF902CA10F7A9278D0002A90048285C
|
||||
:2016C000A958A204A0497CF902EAD0FE88880888888828F0FE10FE90FE50FEC9F2D0FEE032
|
||||
:2016E00006D0FEC043D0FEBAE0FFD0FEA9088D0003A9178D0103A9058D0002A9178D0102BF
|
||||
:20170000A2FF7C01024C0517AD0202C90AD0FEA90B8D0202A90048A942A252A04B2800883F
|
||||
:2017200008888888C9E8D0FEE053D0FEC045D0FE68C930D0FEBAE0FFD0FEA9FF48A9BDA228
|
||||
:20174000ADA0B428008808888888C917D0FEE0AED0FEC0AED0FE68C9FFD0FEBAE0FFD0FE8D
|
||||
:20176000AD0202C90BD0FEA90C8D0202A2ACA0DCA9FF48A9FE281A4808C9FFD0FE6848C9CE
|
||||
:20178000FDD0FE28681A4808C900D0FE6848C97FD0FE28681A4808C901D0FE6848C97DD0CF
|
||||
:2017A000FE28683A4808C900D0FE6848C97FD0FE28683A4808C9FFD0FE6848C9FDD0FE2898
|
||||
:2017C000683AA90048A9FE281A4808C9FFD0FE6848C9B0D0FE28681A4808C900D0FE68486F
|
||||
:2017E000C932D0FE28681A4808C901D0FE6848C930D0FE28683A4808C900D0FE6848C932BB
|
||||
:20180000D0FE28683A4808C9FFD0FE6848C9B0D0FE2868E0ACD0FEC0DCD0FEBAE0FFD0FE98
|
||||
:20182000AD0202C90CD0FEA90D8D0202A299A066A9004828B2240849C32892300849C3C902
|
||||
:20184000C3D0FE684930CD1502D0FEA9004828B2260849C32892320849C3C982D0FE684995
|
||||
:2018600030CD1602D0FEA9004828B2280849C32892340849C3C941D0FE684930CD1702D00D
|
||||
:20188000FEA9004828B22A0849C32892360849C3C900D0FE684930CD1802D0FEE099D0FEC9
|
||||
:2018A000C066D0FEA003A200B9050249C3D91002D0FE8A9905028810EFA299A066A9FF4888
|
||||
:2018C00028B2240849C32892300849C3C9C3D0FE68497DCD1502D0FEA9FF4828B22608497D
|
||||
:2018E000C32892320849C3C982D0FE68497DCD1602D0FEA9FF4828B2280849C3289234082F
|
||||
:2019000049C3C941D0FE68497DCD1702D0FEA9FF4828B22A0849C32892360849C3C900D05C
|
||||
:20192000FE68497DCD1802D0FEE099D0FEC066D0FEA003A200B9050249C3D91002D0FE8A37
|
||||
:201940009905028810EFBAE0FFD0FEAD0202C90DD0FEA90E8D0202A07BA204A907950C0A40
|
||||
:20196000CA10FAA204A9FF48A95528640C640D640E640F641008C955D0FE6848C9FFD0FE63
|
||||
:2019800028B50CD0FECA10F9A204A907950C0ACA10FAA204A90048A9AA28640C640D640E83
|
||||
:2019A000640F641008C9AAD0FE6848C930D0FE28B50CD0FECA10F9A204A9079D05020ACA28
|
||||
:2019C00010F9A204A9FF48A955289C05029C06029C07029C08029C090208C955D0FE684865
|
||||
:2019E000C9FFD0FE28BD0502D0FECA10F8A204A9079D05020ACA10F9A204A90048A9AA28DC
|
||||
:201A00009C05029C06029C07029C08029C090208C9AAD0FE6848C930D0FE28BD0502D0FE13
|
||||
:201A2000CA10F8A204A907950C0ACA10FAA204A9FF48A95528740C08C955D0FE6848C9FF57
|
||||
:201A4000D0FE28CA10E9A204B50CD0FECA10F9A204A907950C0ACA10FAA204A90048A9AA06
|
||||
:201A600028740C08C9AAD0FE6848C930D0FE28CA10E9A204B50CD0FECA10F9A204A9079D18
|
||||
:201A800005020ACA10F9A204A9FF48A955289E050208C955D0FE6848C9FFD0FE28CA10E8DD
|
||||
:201AA000A204BD0502D0FECA10F8A204A9079D05020ACA10F9A204A90048A9AA289E05028E
|
||||
:201AC00008C9AAD0FE6848C930D0FE28CA10E8A204BD0502D0FECA10F8C07BD0FEBAE0FFB0
|
||||
:201AE000D0FEAD0202C90ED0FEA90F8D0202A042A203A90048A9FF28341308C9FFD0FE68E4
|
||||
:201B000048C932D0FE28CAA90048A90128341308C901D0FE6848C970D0FE28CAA90048A9D5
|
||||
:201B20000128341308C901D0FE6848C9B2D0FE28CAA90048A90128341308C901D0FE684850
|
||||
:201B4000C9F0D0FE28A9FF48A90128341308C901D0FE6848C9FDD0FE28E8A9FF48A9012817
|
||||
:201B6000341308C901D0FE6848C9BFD0FE28E8A9FF48A90128341308C901D0FE6848C97DC9
|
||||
:201B8000D0FE28E8A9FF48A9FF28341308C9FFD0FE6848C93FD0FE28A90048A9FF283C1007
|
||||
:201BA0000208C9FFD0FE6848C932D0FE28CAA90048A901283C100208C901D0FE6848C97080
|
||||
:201BC000D0FE28CAA90048A901283C100208C901D0FE6848C9B2D0FE28CAA90048A90128E6
|
||||
:201BE0003C100208C901D0FE6848C9F0D0FE28A9FF48A901283C100208C901D0FE6848C96F
|
||||
:201C0000FDD0FE28E8A9FF48A901283C100208C901D0FE6848C9BFD0FE28E8A9FF48A90189
|
||||
:201C2000283C100208C901D0FE6848C97DD0FE28E8A9FF48A9FF283C100208C9FFD0FE68A6
|
||||
:201C400048C93FD0FE28A90048A9FF28890008C9FFD0FE6848C932D0FE28CAA90048A90150
|
||||
:201C600028894108C901D0FE6848C930D0FE28CAA90048A90128898208C901D0FE6848C982
|
||||
:201C800032D0FE28CAA90048A9012889C308C901D0FE6848C930D0FE28A9FF48A9012889B9
|
||||
:201CA000C308C901D0FE6848C9FDD0FE28E8A9FF48A90128898208C901D0FE6848C9FFD0B8
|
||||
:201CC000FE28E8A9FF48A90128894108C901D0FE6848C9FDD0FE28E8A9FF48A9FF2889002D
|
||||
:201CE00008C9FFD0FE6848C9FFD0FE28E003D0FEC042D0FEBAE0FFD0FEAD0202C90FD0FE99
|
||||
:201D0000A9108D0202A2C0A000640D98250D08682902850E9849FF050D49FF850F98050D96
|
||||
:201D20008510840CA9FF48A50D28140C08C50DD0FE68480902C9FFD0FE682902C50ED0FE67
|
||||
:201D4000A50FC50CD0FE8C0502A9FF48A50D281C050208C50DD0FE68480902C9FFD0FE684F
|
||||
:201D60002902C50ED0FEA50FC50CD0FE840CA90048A50D28140C08C50DD0FE68480902C99D
|
||||
:201D800032D0FE682902C50ED0FEA50FC50CD0FE8C0502A90048A50D281C050208C50DD091
|
||||
:201DA000FE68480902C932D0FE682902C50ED0FEA50FC50CD0FE840CA9FF48A50D28040CB0
|
||||
:201DC00008C50DD0FE68480902C9FFD0FE682902C50ED0FEA510C50CD0FE8C0502A9FF48FF
|
||||
:201DE000A50D280C050208C50DD0FE68480902C9FFD0FE682902C50ED0FEA510C50CD0FE75
|
||||
:201E0000840CA90048A50D28040C08C50DD0FE68480902C932D0FE682902C50ED0FEA51042
|
||||
:201E2000C50CD0FE8C0502A90048A50D280C050208C50DD0FE68480902C932D0FE682902D3
|
||||
:201E4000C50ED0FEA510C50CD0FEC8D004E60DF0034C0B1DE0C0D0FEBAE0FFD0FEAD020211
|
||||
:201E6000C910D0FEA9118D0202A2BAA0D0A9FF850CA90048A9A528070C08C9A5D0FE6848FD
|
||||
:201E8000C930D0FE28A50CC9FED0FEA901850CA9FF48A95A28070C08C95AD0FE6848C9FF33
|
||||
:201EA000D0FE28A50CD0FEA9FF850CA90048A9A528170C08C9A5D0FE6848C930D0FE28A562
|
||||
:201EC0000CC9FDD0FEA902850CA9FF48A95A28170C08C95AD0FE6848C9FFD0FE28A50CD000
|
||||
:201EE000FEA9FF850CA90048A9A528270C08C9A5D0FE6848C930D0FE28A50CC9FBD0FEA942
|
||||
:201F000004850CA9FF48A95A28270C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA916
|
||||
:201F20000048A9A528370C08C9A5D0FE6848C930D0FE28A50CC9F7D0FEA908850CA9FF484C
|
||||
:201F4000A95A28370C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA90048A9A5284746
|
||||
:201F60000C08C9A5D0FE6848C930D0FE28A50CC9EFD0FEA910850CA9FF48A95A28470C087B
|
||||
:201F8000C95AD0FE6848C9FFD0FE28A50CD0FEA9FF850CA90048A9A528570C08C9A5D0FE1C
|
||||
:201FA0006848C930D0FE28A50CC9DFD0FEA920850CA9FF48A95A28570C08C95AD0FE6848DA
|
||||
:201FC000C9FFD0FE28A50CD0FEA9FF850CA90048A9A528670C08C9A5D0FE6848C930D0FEF6
|
||||
:201FE00028A50CC9BFD0FEA940850CA9FF48A95A28670C08C95AD0FE6848C9FFD0FE28A59E
|
||||
:202000000CD0FEA9FF850CA90048A9A528770C08C9A5D0FE6848C930D0FE28A50CC97FD017
|
||||
:20202000FEA980850CA9FF48A95A28770C08C95AD0FE6848C9FFD0FE28A50CD0FEA9FE8538
|
||||
:202040000CA90048A9A528870C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA96D
|
||||
:20206000FF48A95A28870C08C95AD0FE6848C9FFD0FE28A50CC901D0FEA9FD850CA9004883
|
||||
:20208000A9A528970C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95AD0
|
||||
:2020A00028970C08C95AD0FE6848C9FFD0FE28A50CC902D0FEA9FB850CA90048A9A528A761
|
||||
:2020C0000C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28A70C08BA
|
||||
:2020E000C95AD0FE6848C9FFD0FE28A50CC904D0FEA9F7850CA90048A9A528B70C08C9A564
|
||||
:20210000D0FE6848C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28B70C08C95AD0FEFA
|
||||
:202120006848C9FFD0FE28A50CC908D0FEA9EF850CA90048A9A528C70C08C9A5D0FE68488A
|
||||
:20214000C930D0FE28A50CC9FFD0FEA900850CA9FF48A95A28C70C08C95AD0FE6848C9FFB0
|
||||
:20216000D0FE28A50CC910D0FEA9DF850CA90048A9A528D70C08C9A5D0FE6848C930D0FEF3
|
||||
:2021800028A50CC9FFD0FEA900850CA9FF48A95A28D70C08C95AD0FE6848C9FFD0FE28A58C
|
||||
:2021A0000CC920D0FEA9BF850CA90048A9A528E70C08C9A5D0FE6848C930D0FE28A50CC9AC
|
||||
:2021C000FFD0FEA900850CA9FF48A95A28E70C08C95AD0FE6848C9FFD0FE28A50CC940D0F9
|
||||
:2021E000FEA97F850CA90048A9A528F70C08C9A5D0FE6848C930D0FE28A50CC9FFD0FEA9EB
|
||||
:2022000000850CA9FF48A95A28F70C08C95AD0FE6848C9FFD0FE28A50CC980D0FEE0BAD076
|
||||
:20222000FEC0D0D0FEBAE0FFD0FEAD0202C911D0FEA9128D0202A2DEA0ADA90048A9802827
|
||||
:20224000D22C08C980D0FE6848C931D0FE28A90048A97F28D22C08C97FD0FE6848C933D0E8
|
||||
:20226000FE28A90048A97E28D22C08C97ED0FE6848C9B0D0FE28A9FF48A98028D22C08C9AE
|
||||
:2022800080D0FE6848C97DD0FE28A9FF48A97F28D22C08C97FD0FE6848C97FD0FE28A9FF12
|
||||
:2022A00048A97E28D22C08C97ED0FE6848C9FCD0FE28E0DED0FEC0ADD0FEBAE0FFD0FEAD26
|
||||
:2022C0000202C912D0FEA9138D0202A242A000A53A850CA53B850DA90048B9530228320C39
|
||||
:2022E00008D95B02D0FE684930D95F02D0FEE60CC8C004D0E288C60CA9FF48B95302283207
|
||||
:202300000C08D95B02D0FE68497DD95F02D0FEC60C8810E4A000A542850CA543850DA900E6
|
||||
:2023200048B9570228520C08D95B02D0FE684930D95F02D0FEE60CC8C004D0E288C60CA995
|
||||
:20234000FF48B9570228520C08D95B02D0FE68497DD95F02D0FEC60C8810E4A000A54A85FA
|
||||
:202360000CA54B850DA90048B94F0228120C08D95B02D0FE684930D95F02D0FEE60CC8C01F
|
||||
:2023800004D0E288C60CA9FF48B94F0228120C08D95B02D0FE68497DD95F02D0FEC60C8851
|
||||
:2023A00010E4E042D0FEBAE0FFD0FEAD0202C913D0FEA9148D020258D8A20EA0FFA900857C
|
||||
:2023C0000C850D850E8D0502850F8510A9FF85128D0602A902851118204F26E60CE60F085E
|
||||
:2023E0000868298228D002E6100510851138204F26C60CE60DD0E0A9008510EE0502E60EBE
|
||||
:20240000086829828511C612CE0602A50E850FD0C6E00ED0FEC0FFD0FEBAE0FFD0FEAD0221
|
||||
:2024200002C914D0FEA9158D0202F8A20EA0FFA999850D850E8D0502850FA901850C8510FA
|
||||
:20244000A9818511A90085128D06023820F824C60CA50FD008C610A999850FD012290FD07F
|
||||
:202460000CC60FC60FC60FC60FC60FC60FC60F08682982051085111820F824E60CA50DF0CF
|
||||
:2024800015290FD00CC60DC60DC60DC60DC60DC60DC60D4C4B24A999850DA50EF039290FAB
|
||||
:2024A000D018C60EC60EC60EC60EC60EC60EE612E612E612E612E612E612C60EE612A512E9
|
||||
:2024C0008D0602A50E8D0502850F0868298209018511E6104C4B24E00ED0FEC0FFD0FEBA1D
|
||||
:2024E000E0FFD0FED8AD0202C915D0FEA9F08D0202DB4CF2244C000408A50D650E08C50F3A
|
||||
:20250000D0FE682983C511D0FE2808A50DE51208C50FD0FE682983C511D0FE2808A50D6DAB
|
||||
:20252000050208C50FD0FE682983C511D0FE2808A50DED060208C50FD0FE682983C511D0F7
|
||||
:20254000FE2808A50E8D0B02A50D200A0208C50FD0FE682983C511D0FE2808A5128D0E023C
|
||||
:20256000A50D200D0208C50FD0FE682983C511D0FE2808A50D750008C50FD0FE682983C53E
|
||||
:2025800011D0FE2808A50DF50408C50FD0FE682983C511D0FE2808A50D7DF70108C50FD01C
|
||||
:2025A000FE682983C511D0FE2808A50DFDF80108C50FD0FE682983C511D0FE2808A50D79D0
|
||||
:2025C000060108C50FD0FE682983C511D0FE2808A50DF9070108C50FD0FE682983C511D04B
|
||||
:2025E000FE2808A50D614408C50FD0FE682983C511D0FE2808A50DE14608C50FD0FE6829B0
|
||||
:2026000083C511D0FE2808A50D715608C50FD0FE682983C511D0FE2808A50DF15808C50F81
|
||||
:20262000D0FE682983C511D0FE2808A50D725208C50FD0FE682983C511D0FE2808A50DF238
|
||||
:202640005408C50FD0FE682983C511D0FE2860A511298348A50D450E300AA50D450F100439
|
||||
:202660006809404868851108A50D725208C50FD0FE6829C3C511D0FE2808A50DF25408C54E
|
||||
:202680000FD0FE6829C3C511D0FE28609226821688880888888828B0FE70FE30FEF0FEC9B4
|
||||
:2026A00049D0FEE04ED0FEC041D0FE488A48BAE0FDD0FE68AAA9FF482868E849AA6CFF02DF
|
||||
:2026C000EAEA4CC2264C00040F270F27D626CE160F270F2788880888888828B0FE70FE30C6
|
||||
:2026E000FEF0FEC958D0FEE004D0FEC046D0FE488A48BAE0FDD0FE68AAA9FF482868E8E898
|
||||
:2027000049AA7CF902EAEA4C07274C0004EAEAEAEA4C11274C00044C17274C00044C1D27CB
|
||||
:202720004C0004888808888888C9BDF042C942D0FEE052D0FEC048D0FE850A860BBABD0299
|
||||
:2027400001C930D0FE68C934D0FEBAE0FCD0FEADFF01C917D0FEADFE01C920D0FEA9FF486C
|
||||
:20276000A60BE8A50A49AA28404C69274C0004E0ADD0FEC0B1D0FE850A860BBABD0201C98D
|
||||
:20278000FFD0FE68C9F7D0FEBAE0FCD0FEADFF01C917D0FEADFE01C946D0FEA90448A60B88
|
||||
:2027A000E8A50A49AA28404CA7274C000400000000000000000000000000000000000000BD
|
||||
:2027C000000000000000000000000000EAEAEAEA4CD027000000000000000000000000000E
|
||||
:2027E0000000000000000000000000000000000000000000000000000000000000000000D9
|
||||
:202800000000000000000000000000000000000000000000000000000000000000000000B8
|
||||
:20282000000000000000000000000000000000000000000000000000000000000000000098
|
||||
:20284000000000000000000000000000000000000000000000000000000000000000000078
|
||||
:20286000000000000000000000000000000000000000000000000000000000000000000058
|
||||
:07288000EAEAEAEA4C8428B1
|
||||
:06FFFA0017271D27252733
|
||||
:00040001FB
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,586 @@
|
|||
/*
|
||||
* Troy's 6502 Emulator - Test program
|
||||
*
|
||||
* Copyright (c) 2022 Troy Schrapel
|
||||
*
|
||||
* This code is licensed under the MIT license
|
||||
*
|
||||
* https://github.com/visrealm/vrEmu6502
|
||||
*
|
||||
*/
|
||||
|
||||
#include "vrEmu6502.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* GLOBALS
|
||||
*/
|
||||
|
||||
/* keep track of the number of instructions processed */
|
||||
uint64_t instructionCount = 0;
|
||||
uint64_t cycleCount = 0;
|
||||
uint64_t outputCount = 0;
|
||||
const char* filename = NULL;
|
||||
|
||||
uint64_t filterInstructionCount = 0;
|
||||
uint16_t showMemFrom = 0;
|
||||
uint16_t showMemBytes = 0;
|
||||
uint16_t runAddress = 0;
|
||||
bool quietMode = false;
|
||||
uint64_t verboseFrom = (uint64_t)-1;
|
||||
clock_t startTime = 0;
|
||||
vrEmu6502Model cpuModel = CPU_65C02;
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* FUNCTION DECLARATIONS
|
||||
*/
|
||||
void processArgs(int argc, char* argv[]);
|
||||
void outputStep(VrEmu6502* vr6502);
|
||||
void banner();
|
||||
void argError(const char* opt, const char* arg);
|
||||
void usage(int status);
|
||||
void beginReport();
|
||||
void endReport(int status);
|
||||
int readHexFile(const char* hexFilename);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* 6502 MEMORY
|
||||
*/
|
||||
|
||||
uint8_t ram[0x10000];
|
||||
|
||||
uint8_t MemRead(uint16_t addr, bool isDbg)
|
||||
{
|
||||
(void)isDbg;
|
||||
return ram[addr];
|
||||
}
|
||||
|
||||
void MemWrite(uint16_t addr, uint8_t val)
|
||||
{
|
||||
ram[addr] = val;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* program entry point
|
||||
*/
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
/* set a large output buffer */
|
||||
|
||||
#ifdef _WIN32
|
||||
static char buf[1 << 22];
|
||||
setvbuf(stdout, buf, _IOFBF, sizeof(buf));
|
||||
#endif
|
||||
|
||||
banner();
|
||||
|
||||
processArgs(argc, argv);
|
||||
|
||||
if (!readHexFile(filename))
|
||||
return 1;
|
||||
|
||||
beginReport();
|
||||
|
||||
int status = 0;
|
||||
|
||||
/*
|
||||
* build and test the cpu
|
||||
*/
|
||||
VrEmu6502* vr6502 = vrEmu6502New(cpuModel, MemRead, MemWrite);
|
||||
if (vr6502)
|
||||
{
|
||||
/* reset the cpu (technically don't need to do this as vrEmu6502New does reset it) */
|
||||
vrEmu6502Reset(vr6502);
|
||||
|
||||
vrEmu6502SetPC(vr6502, (uint16_t)runAddress);
|
||||
|
||||
uint16_t lastPc = 0;
|
||||
|
||||
startTime = clock();
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (vrEmu6502GetOpcodeCycle(vr6502) == 0)
|
||||
{
|
||||
/* trap detection */
|
||||
uint16_t pc = vrEmu6502GetCurrentOpcodeAddr(vr6502);
|
||||
if (lastPc == pc)
|
||||
{
|
||||
verboseFrom = outputCount = 0;
|
||||
printf("\nFinal instruction:\n");
|
||||
outputStep(vr6502);
|
||||
status = vrEmu6502GetCurrentOpcode(vr6502) == 0x4c ? 0 : -1;
|
||||
break;
|
||||
}
|
||||
lastPc = pc;
|
||||
|
||||
++instructionCount;
|
||||
|
||||
/* break on STP instruction */
|
||||
if (vrEmu6502GetCurrentOpcode(vr6502) == 0xdb)
|
||||
{
|
||||
verboseFrom = outputCount = 0;
|
||||
printf("\nFinal instruction:\n");
|
||||
outputStep(vr6502);
|
||||
status = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
outputStep(vr6502);
|
||||
}
|
||||
|
||||
/* call me once for each clock cycle (eg. 1,000,000 times per second for a 1MHz clock) */
|
||||
cycleCount += vrEmu6502InstCycle(vr6502);
|
||||
}
|
||||
|
||||
vrEmu6502Destroy(vr6502);
|
||||
vr6502 = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error creating VrEmu6502\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
endReport(status);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
const char* processorModel()
|
||||
{
|
||||
switch (cpuModel)
|
||||
{
|
||||
case CPU_6502:
|
||||
return "Standard NMOS 6502";
|
||||
|
||||
case CPU_6502U:
|
||||
return "Standard NMOS 6502 (with undocumented opcodes)";
|
||||
|
||||
case CPU_65C02:
|
||||
return "Standard CMOS 65C02";
|
||||
|
||||
case CPU_W65C02:
|
||||
return "Western Design Centre 65C02";
|
||||
|
||||
case CPU_R65C02:
|
||||
return "Rockwell 65C02";
|
||||
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* process command-line arguments
|
||||
*/
|
||||
void processArgs(int argc, char* argv[])
|
||||
{
|
||||
for (int i = 1; i < argc; ++i)
|
||||
{
|
||||
if (argv[i][0] != '-')
|
||||
{
|
||||
filename = argv[i];
|
||||
continue;
|
||||
}
|
||||
|
||||
int ch = 1 + (argv[i][1] == '-');
|
||||
|
||||
switch (argv[i][ch])
|
||||
{
|
||||
case 'c':
|
||||
if (++i < argc)
|
||||
{
|
||||
if (strcmp(argv[i], "6502u") == 0)
|
||||
{
|
||||
cpuModel = CPU_6502U;
|
||||
}
|
||||
else if (strcmp(argv[i], "6502") == 0)
|
||||
{
|
||||
cpuModel = CPU_6502;
|
||||
}
|
||||
else if (strcmp(argv[i], "65c02") == 0)
|
||||
{
|
||||
cpuModel = CPU_65C02;
|
||||
}
|
||||
else if (strcmp(argv[i], "w65c02") == 0)
|
||||
{
|
||||
cpuModel = CPU_W65C02;
|
||||
}
|
||||
else if (strcmp(argv[i], "r65c02") == 0)
|
||||
{
|
||||
cpuModel = CPU_R65C02;
|
||||
}
|
||||
else
|
||||
{
|
||||
argError(argv[i - 1], argv[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
argError(argv[i - 1], "<undefined>");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
if (++i < argc)
|
||||
{
|
||||
filterInstructionCount = strtol(argv[i], NULL, 0);
|
||||
if (filterInstructionCount <= 0)
|
||||
{
|
||||
argError(argv[i - 1], argv[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
argError(argv[i - 1], "<undefined>");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
usage(0);
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
if (++i < argc)
|
||||
{
|
||||
char* tok = strchr(argv[i], ':');
|
||||
|
||||
if (tok)
|
||||
{
|
||||
showMemFrom = (uint16_t)strtol(argv[i], NULL, 0);
|
||||
uint16_t to = (uint16_t)strtol(tok + 1, NULL, 0);
|
||||
if (showMemFrom <= to)
|
||||
{
|
||||
showMemBytes = (to - showMemFrom) + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
showMemFrom = (uint16_t)strtol(argv[i], NULL, 0);
|
||||
showMemBytes = 1;
|
||||
}
|
||||
|
||||
if (showMemBytes == 0)
|
||||
{
|
||||
argError(argv[i - 1], argv[i]);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
argError(argv[i - 1], "<undefined>");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quietMode = true;
|
||||
if (i + 1 < argc)
|
||||
{
|
||||
verboseFrom = strtol(argv[i + 1], NULL, 10);
|
||||
if (verboseFrom == 0) verboseFrom = (uint64_t)-1; else ++i;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
if (++i < argc)
|
||||
{
|
||||
runAddress = (uint16_t)strtol(argv[i], NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
argError(argv[i - 1], "<undefined>");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
argError(argv[i], NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
argError(NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* output cpu state
|
||||
*/
|
||||
void outputStep(VrEmu6502* vr6502)
|
||||
{
|
||||
if (instructionCount < verboseFrom)
|
||||
{
|
||||
if (filterInstructionCount)
|
||||
{
|
||||
if (instructionCount % filterInstructionCount != 0)
|
||||
return;
|
||||
}
|
||||
else if (quietMode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
char buffer[32];
|
||||
uint16_t pc = vrEmu6502GetCurrentOpcodeAddr(vr6502);
|
||||
vrEmu6502DisassembleInstruction(vr6502, pc, sizeof(buffer), buffer, NULL, NULL);
|
||||
uint8_t a = vrEmu6502GetAcc(vr6502);
|
||||
uint8_t x = vrEmu6502GetX(vr6502);
|
||||
uint8_t y = vrEmu6502GetY(vr6502);
|
||||
uint8_t sp = vrEmu6502GetStackPointer(vr6502);
|
||||
uint8_t status = vrEmu6502GetStatus(vr6502);
|
||||
|
||||
if (outputCount++ % 40 == 0)
|
||||
{
|
||||
putchar('\n');
|
||||
|
||||
printf("Step # | PC | Instruction | Acc | InX | InY | SP Top | Status ");
|
||||
if (showMemBytes > 1)
|
||||
{
|
||||
printf("| $%04x - $%04x", showMemFrom, showMemFrom + showMemBytes - 1);
|
||||
}
|
||||
else if (showMemBytes)
|
||||
{
|
||||
printf("| $%04x", showMemFrom);
|
||||
}
|
||||
|
||||
printf("\n------------+-------+----------------+-----+-----+-----+----------+-------------");
|
||||
if (showMemBytes)
|
||||
{
|
||||
printf("+------");
|
||||
if (showMemBytes > 1) printf("--------");
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
|
||||
printf("#%-10"PRId64" | $%04x | %-14s | $%02x | $%02x | $%02x | $%02x: $%02x | $%02x: %c%c%c%c%c%c ",
|
||||
instructionCount, pc, buffer, a, x, y, sp, MemRead(0x100 + ((sp + 1) & 0xff), 0), status,
|
||||
status & FlagN ? 'N' : '.',
|
||||
status & FlagV ? 'V' : '.',
|
||||
status & FlagD ? 'D' : '.',
|
||||
status & FlagI ? 'I' : '.',
|
||||
status & FlagZ ? 'Z' : '.',
|
||||
status & FlagC ? 'C' : '.');
|
||||
|
||||
if (showMemBytes) printf("| ");
|
||||
|
||||
for (int i = 0; i < showMemBytes; ++i)
|
||||
{
|
||||
printf("$%02x ", MemRead((showMemFrom + i) & 0xffff, 0));
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* startup banner
|
||||
*/
|
||||
void banner()
|
||||
{
|
||||
printf("\n -------------------------------------\n");
|
||||
printf(" vrEmu6502 Test Runner\n");
|
||||
printf(" -------------------------------------\n");
|
||||
printf(" Copyright (c) 2022 Troy Schrapel\n");
|
||||
printf(" https://github.com/visrealm/vrEmu6502\n");
|
||||
printf(" -------------------------------------\n\n");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* output errors
|
||||
*/
|
||||
void argError(const char* opt, const char* arg)
|
||||
{
|
||||
if (arg == NULL)
|
||||
{
|
||||
if (opt == NULL)
|
||||
{
|
||||
printf("ERROR: Intel HEX file not provided\n\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("ERROR: Invalid option '%s'\n\n", opt);
|
||||
}
|
||||
}
|
||||
else if (opt != NULL)
|
||||
{
|
||||
printf("ERROR: Invalid value '%s' supplied for option '%s'\n\n", arg, opt);
|
||||
}
|
||||
|
||||
usage(1);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* output program usage
|
||||
*/
|
||||
void usage(int status)
|
||||
{
|
||||
printf("Usage:\n");
|
||||
printf("vrEmu6502Test [OPTION...] <testfile.hex>\n\n");
|
||||
printf("Options:\n");
|
||||
printf(" -c, --cpu <cpumodel> one of \"6502\", \"6502u\", \"65c02\", \"w65c02\", \"r65c02\". defaults to 65c02.\n");
|
||||
printf(" -f, --filter <lines> filter output to every #<lines> lines\n");
|
||||
printf(" -h, --help output help and exit\n");
|
||||
printf(" -m, --mem <from>[:<to>] output given memory address or range\n");
|
||||
printf(" -q, --quiet [<count>] quiet mode - until <count> instructions processed\n");
|
||||
printf(" -r, --run <addr> override run address\n");
|
||||
|
||||
exit(-status);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* output current run options
|
||||
*/
|
||||
void beginReport()
|
||||
{
|
||||
printf("Options:\n");
|
||||
printf(" Processor model: %s\n", processorModel());
|
||||
printf(" Output filtering: ");
|
||||
|
||||
if (verboseFrom == (uint64_t)-1)
|
||||
{
|
||||
if (filterInstructionCount)
|
||||
{
|
||||
printf("Output every #%"PRId64" instructions\n", filterInstructionCount);
|
||||
}
|
||||
else if (quietMode)
|
||||
{
|
||||
printf("Quiet mode\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Verbose\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (filterInstructionCount)
|
||||
{
|
||||
printf("Output every #%"PRId64" instructions until #%"PRId64"\n", filterInstructionCount, verboseFrom);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Quiet until #%"PRId64"\n", verboseFrom);
|
||||
}
|
||||
}
|
||||
|
||||
if (showMemBytes)
|
||||
{
|
||||
printf(" Output memory: $%04x", showMemFrom);
|
||||
if (showMemBytes > 1)
|
||||
{
|
||||
printf(" - $%04x", showMemFrom + showMemBytes - 1);
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
printf(" Start address: $%04x\n\n", runAddress);
|
||||
|
||||
printf("Running test: %s\n\n", filename);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* output end of run results
|
||||
*/
|
||||
void endReport(int status)
|
||||
{
|
||||
clock_t endTime = clock();
|
||||
double totalSeconds = ((double)endTime - startTime) / (double)CLOCKS_PER_SEC;
|
||||
if (totalSeconds < 1e-3) totalSeconds = 1e-3;
|
||||
|
||||
printf("\nTest results: %s\n\n", filename);
|
||||
printf(" Processor model: %s\n\n", processorModel());
|
||||
printf(" Instructions executed: %0f Mil\n", instructionCount / 1000000.0);
|
||||
printf(" Total clock cycles: %0f Mil\n\n", cycleCount / 1000000.0);
|
||||
printf(" Elapsed time: %.4f sec\n", totalSeconds);
|
||||
printf(" Average clock rate: %.4f MHz\n", (cycleCount / totalSeconds) / 1000000);
|
||||
printf(" Average instruction rate: %.4f MIPS\n", (instructionCount / totalSeconds) / 1000000);
|
||||
printf(" Average clocks/instruction: %.4f\n", (cycleCount / (double)instructionCount));
|
||||
|
||||
printf("\nTest result: %s\n\n", status ? "FAILED" : "PASSED");
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* read the hex file
|
||||
*/
|
||||
int readHexFile(const char* hexFilename)
|
||||
{
|
||||
|
||||
#ifndef HAVE_STRNCPY_S
|
||||
#define strncpy_s(A, B, C, D) strncpy((A), (C), (D)); (A)[(D)] = 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* load the INTEL HEX file
|
||||
*/
|
||||
|
||||
FILE* hexFile = NULL;
|
||||
#ifndef HAVE_FOPEN_S
|
||||
hexFile = fopen(hexFilename, "r");
|
||||
#else
|
||||
fopen_s(&hexFile, hexFilename, "r");
|
||||
#endif
|
||||
|
||||
if (hexFile)
|
||||
{
|
||||
char lineBuffer[1024];
|
||||
char tmpBuffer[10];
|
||||
|
||||
int totalBytesRead = 0;
|
||||
|
||||
while (fgets(lineBuffer, sizeof(lineBuffer), hexFile))
|
||||
{
|
||||
if (lineBuffer[0] != ':') continue;
|
||||
|
||||
strncpy_s(tmpBuffer, sizeof(tmpBuffer), lineBuffer + 1, 2);
|
||||
int numBytes = (int)strtol(tmpBuffer, NULL, 16);
|
||||
totalBytesRead += numBytes;
|
||||
strncpy_s(tmpBuffer, sizeof(tmpBuffer), lineBuffer + 3, 4);
|
||||
int destAddr = (int)strtol(tmpBuffer, NULL, 16);
|
||||
|
||||
strncpy_s(tmpBuffer, sizeof(tmpBuffer), lineBuffer + 7, 2);
|
||||
int recType = (int)strtol(tmpBuffer, NULL, 16);
|
||||
|
||||
if (recType == 0)
|
||||
{
|
||||
for (int i = 0; i < numBytes; ++i)
|
||||
{
|
||||
strncpy_s(tmpBuffer, sizeof(tmpBuffer), lineBuffer + 9 + (i * 2), 2);
|
||||
ram[destAddr + i] = (uint8_t)strtol(tmpBuffer, NULL, 16);
|
||||
}
|
||||
}
|
||||
else if (runAddress == 0 && recType == 1)
|
||||
{
|
||||
runAddress = (uint16_t)destAddr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(hexFile);
|
||||
|
||||
if (totalBytesRead == 0)
|
||||
{
|
||||
printf("ERROR: Invalid Intel HEX file: %s\n", hexFilename);
|
||||
return 0;
|
||||
}
|
||||
else if (runAddress == 0)
|
||||
{
|
||||
printf("WARNING: Run address not set from Intel HEX file: %s\n", hexFilename);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("ERROR: Unable to open HEX file: %s\n", hexFilename);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Components.vr6502
|
|||
/// Instantiate a new 6502 emulator
|
||||
/// </summary>
|
||||
[DllImport(lib, CallingConvention = cc)]
|
||||
public static extern VrEmu6502State vrEmu6502New(
|
||||
public static extern IntPtr vrEmu6502New(
|
||||
VrEmu6502Model model,
|
||||
VrEmu6502MemRead readFn,
|
||||
VrEmu6502MemWrite writeFn);
|
||||
|
@ -40,5 +40,9 @@ namespace BizHawk.Emulation.Cores.Components.vr6502
|
|||
/// </summary>
|
||||
[DllImport(lib, CallingConvention = cc)]
|
||||
public static extern byte vrEmu6502InstCycle(ref VrEmu6502State state);
|
||||
|
||||
|
||||
[DllImport(lib, CallingConvention = cc)]
|
||||
public static extern IntPtr vrEmu6502OpcodeToMnemonicStr(ref VrEmu6502State state, byte opcode);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,38 +9,36 @@ namespace BizHawk.Emulation.Cores.Components.vr6502
|
|||
{
|
||||
public VrEmu6502Model Model;
|
||||
|
||||
public IntPtr ReadFn;
|
||||
public IntPtr WriteFn;
|
||||
public IntPtr readFn;
|
||||
public IntPtr writeFn;
|
||||
|
||||
public VrEmu6502Interrupt IntPin;
|
||||
public VrEmu6502Interrupt NmiPin;
|
||||
public VrEmu6502Interrupt intPin;
|
||||
public VrEmu6502Interrupt nmiPin;
|
||||
|
||||
public byte Step;
|
||||
public byte CurrentOpcode;
|
||||
public ushort CurrentOpcodeAddr;
|
||||
public byte step;
|
||||
public byte currentOpcode;
|
||||
public ushort currentOpcodeAddr;
|
||||
|
||||
public bool Wai;
|
||||
public bool Stp;
|
||||
public byte wai;
|
||||
public byte stp;
|
||||
|
||||
public ushort Pc;
|
||||
public ushort pc;
|
||||
|
||||
public byte Ac;
|
||||
public byte Ix;
|
||||
public byte Iy;
|
||||
public byte Sp;
|
||||
public byte ac;
|
||||
public byte ix;
|
||||
public byte iy;
|
||||
public byte sp;
|
||||
|
||||
public byte Flags;
|
||||
public byte flags;
|
||||
|
||||
public ushort ZpBase;
|
||||
public ushort SpBase;
|
||||
public ushort TmpAddr;
|
||||
|
||||
public IntPtr Opcodes; // Use IntPtr for pointer to array
|
||||
public ushort zpBase;
|
||||
public ushort spBase;
|
||||
public ushort tmpAddr;
|
||||
|
||||
public IntPtr opcodes;
|
||||
public IntPtr mnemonicNames;
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
|
||||
public string[] MnemonicNames;
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
|
||||
public VrEmu6502AddrMode[] AddrModes;
|
||||
public VrEmu6502AddrMode[] addrModes;
|
||||
}
|
||||
|
||||
public enum VrEmu6502Model
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
|
||||
using BizHawk.Common;
|
||||
using BizHawk.Common;
|
||||
using BizHawk.Common.NumberExtensions;
|
||||
using BizHawk.Emulation.Common;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace BizHawk.Emulation.Cores.Components.vr6502
|
||||
{
|
||||
|
@ -7,21 +10,50 @@ namespace BizHawk.Emulation.Cores.Components.vr6502
|
|||
{
|
||||
private VrEmu6502State _6502s;
|
||||
private readonly VrEmu6502Model _model;
|
||||
private readonly VrEmu6502MemRead _readFn;
|
||||
private readonly VrEmu6502MemWrite _writeFn;
|
||||
|
||||
private VrEmu6502MemRead _readDelegate;
|
||||
private VrEmu6502MemWrite _writeDelegate;
|
||||
|
||||
public long TotalExecutedCycles;
|
||||
|
||||
public string[] MnemonicNames;
|
||||
|
||||
public vr6502(VrEmu6502Model model, VrEmu6502MemRead readFn, VrEmu6502MemWrite writeFn)
|
||||
{
|
||||
_model = model;
|
||||
_6502s = VrEmu6502Interop.vrEmu6502New(_model, readFn, writeFn);
|
||||
_readFn = readFn;
|
||||
_writeFn = writeFn;
|
||||
|
||||
_readDelegate = new VrEmu6502MemRead(_readFn);
|
||||
_writeDelegate = new VrEmu6502MemWrite(_writeFn);
|
||||
|
||||
IntPtr cpuPtr = VrEmu6502Interop.vrEmu6502New(_model, _readDelegate, _writeDelegate);
|
||||
|
||||
if (cpuPtr == IntPtr.Zero)
|
||||
{
|
||||
throw new Exception("Failed to create VrEmu6502 instance.");
|
||||
}
|
||||
|
||||
_6502s = Marshal.PtrToStructure<VrEmu6502State>(cpuPtr);
|
||||
|
||||
// dump the mnemonic names
|
||||
MnemonicNames = new string[256];
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
MnemonicNames[i] = GetOpcodeMnemonic((byte)i);
|
||||
}
|
||||
}
|
||||
|
||||
public delegate byte VrEmu6502MemRead(ushort addr, bool isDbg);
|
||||
public delegate void VrEmu6502MemWrite(ushort addr, byte val);
|
||||
|
||||
public void SetNMI() => _6502s.NmiPin = VrEmu6502Interrupt.IntLow;
|
||||
public void SetNMI() => _6502s.nmiPin = VrEmu6502Interrupt.IntLow;
|
||||
|
||||
public bool SetIRQ() => _6502s.IntPin == VrEmu6502Interrupt.IntLow;
|
||||
public bool SetIRQ() => _6502s.intPin == VrEmu6502Interrupt.IntLow;
|
||||
|
||||
public bool RDY;
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
|
@ -29,42 +61,81 @@ namespace BizHawk.Emulation.Cores.Components.vr6502
|
|||
}
|
||||
|
||||
public void ExecuteTick()
|
||||
{
|
||||
VrEmu6502Interop.vrEmu6502Tick(ref _6502s);
|
||||
{
|
||||
if (RDY)
|
||||
{
|
||||
VrEmu6502Interop.vrEmu6502Tick(ref _6502s);
|
||||
}
|
||||
|
||||
TotalExecutedCycles++;
|
||||
}
|
||||
|
||||
public byte ExecuteInstruction()
|
||||
{
|
||||
int cycles = VrEmu6502Interop.vrEmu6502InstCycle(ref _6502s);
|
||||
int cycles = 0;
|
||||
|
||||
if (RDY)
|
||||
{
|
||||
cycles = VrEmu6502Interop.vrEmu6502InstCycle(ref _6502s);
|
||||
}
|
||||
|
||||
TotalExecutedCycles += cycles;
|
||||
return (byte)cycles;
|
||||
}
|
||||
|
||||
|
||||
private string GetOpcodeMnemonic(byte opcode)
|
||||
{
|
||||
IntPtr strPtr = VrEmu6502Interop.vrEmu6502OpcodeToMnemonicStr(ref _6502s, opcode);
|
||||
return Marshal.PtrToStringAnsi(strPtr);
|
||||
}
|
||||
|
||||
public IDictionary<string, RegisterValue> GetCpuFlagsAndRegisters()
|
||||
{
|
||||
return new Dictionary<string, RegisterValue>
|
||||
{
|
||||
["A"] = _6502s.ac >> 8,
|
||||
["X"] = _6502s.ix & 0xFF,
|
||||
["Y"] = _6502s.iy & 0xFF,
|
||||
["SP"] = _6502s.sp,
|
||||
["PC"] = _6502s.pc,
|
||||
["Flag C"] = _6502s.flags.Bit(0),
|
||||
["Flag Z"] = _6502s.flags.Bit(1),
|
||||
["Flag I"] = _6502s.flags.Bit(2),
|
||||
["Flag D"] = _6502s.flags.Bit(3),
|
||||
["Flag B"] = _6502s.flags.Bit(4),
|
||||
["Flag V"] = _6502s.flags.Bit(5),
|
||||
["Flag N"] = _6502s.flags.Bit(6),
|
||||
["Flag T"] = _6502s.flags.Bit(7),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public void SyncState(Serializer ser)
|
||||
{
|
||||
ser.BeginSection("vrEmu6502");
|
||||
|
||||
ser.SyncEnum("Model", ref _6502s.Model);
|
||||
ser.Sync(nameof(RDY), ref RDY);
|
||||
|
||||
ser.SyncEnum(nameof(_6502s.Model), ref _6502s.Model);
|
||||
// ReadFn not serializable
|
||||
// WriteFn not serializable
|
||||
ser.SyncEnum("IntPin", ref _6502s.IntPin);
|
||||
ser.SyncEnum("NmiPin", ref _6502s.NmiPin);
|
||||
ser.Sync(nameof(_6502s.Step), ref _6502s.Step);
|
||||
ser.Sync(nameof(_6502s.CurrentOpcode), ref _6502s.CurrentOpcode);
|
||||
ser.Sync(nameof(_6502s.CurrentOpcodeAddr), ref _6502s.CurrentOpcodeAddr);
|
||||
ser.Sync(nameof(_6502s.Wai), ref _6502s.Wai);
|
||||
ser.Sync(nameof(_6502s.Stp), ref _6502s.Stp);
|
||||
ser.Sync(nameof(_6502s.Pc), ref _6502s.Pc);
|
||||
ser.Sync(nameof(_6502s.Ac), ref _6502s.Ac);
|
||||
ser.Sync(nameof(_6502s.Ix), ref _6502s.Ix);
|
||||
ser.Sync(nameof(_6502s.Iy), ref _6502s.Iy);
|
||||
ser.Sync(nameof(_6502s.Sp), ref _6502s.Sp);
|
||||
ser.Sync(nameof(_6502s.Flags), ref _6502s.Flags);
|
||||
ser.Sync(nameof(_6502s.ZpBase), ref _6502s.ZpBase);
|
||||
ser.Sync(nameof(_6502s.SpBase), ref _6502s.SpBase);
|
||||
ser.Sync(nameof(_6502s.TmpAddr), ref _6502s.TmpAddr);
|
||||
ser.SyncEnum(nameof(_6502s.intPin), ref _6502s.intPin);
|
||||
ser.SyncEnum(nameof(_6502s.nmiPin), ref _6502s.nmiPin);
|
||||
ser.Sync(nameof(_6502s.step), ref _6502s.step);
|
||||
ser.Sync(nameof(_6502s.currentOpcode), ref _6502s.currentOpcode);
|
||||
ser.Sync(nameof(_6502s.currentOpcodeAddr), ref _6502s.currentOpcodeAddr);
|
||||
ser.Sync(nameof(_6502s.wai), ref _6502s.wai);
|
||||
ser.Sync(nameof(_6502s.stp), ref _6502s.stp);
|
||||
ser.Sync(nameof(_6502s.pc), ref _6502s.pc);
|
||||
ser.Sync(nameof(_6502s.ac), ref _6502s.ac);
|
||||
ser.Sync(nameof(_6502s.ix), ref _6502s.ix);
|
||||
ser.Sync(nameof(_6502s.iy), ref _6502s.iy);
|
||||
ser.Sync(nameof(_6502s.sp), ref _6502s.sp);
|
||||
ser.Sync(nameof(_6502s.flags), ref _6502s.flags);
|
||||
ser.Sync(nameof(_6502s.zpBase), ref _6502s.zpBase);
|
||||
ser.Sync(nameof(_6502s.spBase), ref _6502s.spBase);
|
||||
ser.Sync(nameof(_6502s.tmpAddr), ref _6502s.tmpAddr);
|
||||
// Opcodes????
|
||||
// MnemonicNames??
|
||||
// AddrModes??
|
||||
|
|
|
@ -221,7 +221,8 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
if (_nmiTimer == 0x10000 && _regs[R_SYSTEM_CONTROL].Bit(0))
|
||||
{
|
||||
_nmiTimer = 0;
|
||||
_sv._cpu.NMI = true;
|
||||
//_sv._cpu.NMI = true;
|
||||
_sv._cpu.SetNMI();
|
||||
}
|
||||
|
||||
if (_intTimerChanged)
|
||||
|
@ -265,8 +266,9 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
|
||||
if (_intFlag && _regs[R_SYSTEM_CONTROL].Bit(1))
|
||||
{
|
||||
// fire IRQ
|
||||
_sv._cpu.IRQ = true;
|
||||
// fire IRQ
|
||||
_sv._cpu.SetIRQ();
|
||||
//_sv._cpu.IRQ = true;
|
||||
_intFlag = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
/// </summary>
|
||||
private bool _cpuMemoryAccess;
|
||||
|
||||
public byte ReadMemory(ushort address)
|
||||
public byte ReadMemory(ushort address, bool isDbg = false)
|
||||
{
|
||||
_cpuMemoryAccess = true;
|
||||
byte result = 0xFF;
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||
|
||||
namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
||||
{
|
||||
/*
|
||||
public partial class SuperVision : IDebuggable
|
||||
{
|
||||
public IDictionary<string, RegisterValue> GetCpuFlagsAndRegisters()
|
||||
|
@ -20,4 +21,5 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
|
||||
public long TotalExecutedCycles => _cpu.TotalExecutedCycles;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
_controller = controller;
|
||||
_isLag = true;
|
||||
|
||||
/*
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
|
@ -54,6 +55,7 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
{
|
||||
_cpu.TraceCallback = null;
|
||||
}
|
||||
*/
|
||||
|
||||
PollInput();
|
||||
|
||||
|
@ -62,7 +64,8 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
while (_frameClock < _cpuClocksPerFrame)
|
||||
{
|
||||
_asic.Clock();
|
||||
_cpu.ExecuteOne();
|
||||
//_cpu.ExecuteOne();
|
||||
_cpu.ExecuteTick();
|
||||
}
|
||||
|
||||
_frameClock = 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Cores.Components.M6502;
|
||||
using BizHawk.Emulation.Cores.Components.vr6502;
|
||||
|
||||
namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
||||
{
|
||||
|
@ -18,21 +18,22 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
_syncSettings = lp.SyncSettings ?? new SuperVisionSyncSettings();
|
||||
_screenType = _syncSettings.ScreenType;
|
||||
|
||||
MemoryCallbacks = new MemoryCallbackSystem([ "System Bus" ]);
|
||||
//MemoryCallbacks = new MemoryCallbackSystem([ "System Bus" ]);
|
||||
|
||||
ControllerDefinition = _superVisionControllerDefinition.Value;
|
||||
|
||||
_cartridge = SVCart.Configure(gameInfo, rom);
|
||||
|
||||
_cpu = new MOS6502X<CpuLink>(new CpuLink(this));
|
||||
_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
_cpu = new vr6502(vr6502.VrEmu6502Model.CPU_65C02, ReadMemory, WriteMemory);
|
||||
//_cpu = new MOS6502X<CpuLink>(new CpuLink(this));
|
||||
//_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
_asic = new ASIC(this, _syncSettings);
|
||||
|
||||
CalcClock();
|
||||
|
||||
ser.Register<IVideoProvider>(_asic.Screen);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IDisassemblable>(_cpu);
|
||||
//ser.Register<IDisassemblable>(_cpu);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
SetupMemoryDomains();
|
||||
}
|
||||
|
@ -40,7 +41,8 @@ namespace BizHawk.Emulation.Cores.Consoles.SuperVision
|
|||
private CoreComm CoreComm { get; }
|
||||
private IController _controller;
|
||||
private readonly ScreenType _screenType;
|
||||
public readonly MOS6502X<CpuLink> _cpu;
|
||||
//public readonly MOS6502X<CpuLink> _cpu;
|
||||
public readonly vr6502 _cpu;
|
||||
private readonly TraceBuffer _tracer;
|
||||
private ASIC _asic;
|
||||
private readonly SVCart _cartridge;
|
||||
|
|
Loading…
Reference in New Issue