diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..30bf10a --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,75 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html web pickle htmlhelp latex changes linkcheck + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + +clean: + -rm -rf build/* + +html: + mkdir -p build/html build/doctrees + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html + @echo + @echo "Build finished. The HTML pages are in build/html." + +pickle: + mkdir -p build/pickle build/doctrees + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +web: pickle + +json: + mkdir -p build/json build/doctrees + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + mkdir -p build/htmlhelp build/doctrees + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in build/htmlhelp." + +latex: + mkdir -p build/latex build/doctrees + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex + @echo + @echo "Build finished; the LaTeX files are in build/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + mkdir -p build/changes build/doctrees + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes + @echo + @echo "The overview file is in build/changes." + +linkcheck: + mkdir -p build/linkcheck build/doctrees + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in build/linkcheck/output.txt." diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..db60576 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# +# test documentation build configuration file, created by +# sphinx-quickstart on Sun Nov 30 14:39:06 2008. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# The contents of this file are pickled, so don't put values in the namespace +# that aren't pickleable (module imports are okay, they're removed automatically). +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If your extensions are in another directory, add it here. If the directory +# is relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# General configuration +# --------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['.templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Py65' +copyright = u'2008, Mike Naberezny' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.3' +# The full version, including alpha/beta/rc tags. +release = '0.3' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = [] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# Options for HTML output +# ----------------------- + +# The style sheet to use for HTML and HTML Help pages. A file of that name +# must exist either in Sphinx' static/ path, or in one of the custom paths +# given in html_static_path. +html_style = 'default.css' + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['.static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_use_modindex = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, the reST sources are included in the HTML build as _sources/. +#html_copy_source = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testdoc' + + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, document class [howto/manual]). +latex_documents = [ + ('index', 'test.tex', ur'test Documentation', + ur'foo', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..0c3bf1d --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,361 @@ +*********************************************** +Py65 - 6502 Microprocessor Simulation in Python +*********************************************** + +:Author: Mike Naberezny +:Version: |version| + +.. topic:: Overview + + Py65 is a simulation of the original NMOS 6502 microprocessor from MOS + Technology, written in Python. + +Using the Monitor +================= + +Introduction +------------ + +Py65 includes a program called Py65Mon that functions as a machine language +monitor. This kind of program is sometimes also called a debugger. Py65Mon +provides a command line with many convenient commands for interacting with the +simulated 6502-based system. + +The monitor is started using the ``py65mon`` command:: + + $ py65mon + + Py65 Monitor + + <6502: A=00, X=00, Y=00, Flags=20, SP=ff, PC=0000> + . + +Once the monitor has started, it will display a register dump and the +dot prompt. You can then enter commands for the monitor at this prompt. + +Py65Mon uses commands that are very similar to those used by the monitor +included with the `VICE emulator `_ for Commodore +computers. You can get a list of available commands with ``help`` or +help on a specific command with ``help command``. + +Number Systems +-------------- + +When working with Py65Mon, you will frequently need to enter numbers, addresses, +and ranges of addresses. Almost all Py65 command support entering numbers in +binary, decimal, and hexadecimal. + +Numbers can be entered with a prefix to specify the radix, e.g. ``$c000`` +instructs Py65Mon that the number ``c000`` is hexadecimal. The following +prefixes are supported: + +- ``$c000``: The dollar sign indicates hexadecimal. +- ``+828``: The plus sign indicates decimal. +- ``%0101``: The percent sign indicates binary. + +Numbers can also be entered without a prefix. Most of the time, working in +hexadecimal will be the most convenient so this is the default radix. The +number ``c000`` will be assumed to be hexadecimal unless the default radix +is changed using the ``radix`` command. + +Address Ranges +-------------- + +Some commands accept a range of memory addresses:: + + .disassemble ff80:ff84 + $ff80 d8 CLD + $ff81 a2 ff LDX #$ff + $ff83 9a TXS + $ff84 a0 1c LDY #$1c + +The syntax for a range is ``start:end``. Each of the two parts may have +a prefix to indicate the radix, or no prefix to use the default radix. + +Sometimes it is useful to have the starting and ending address in a range +be the same, such as when you want to inspect a single byte of memory. In +this case, you can enter ``ff80:ff80`` or simply ``ff80``. + +Assigning Labels +---------------- + +Large assembly language programs may have hundreds of procedures. It is +difficult to remember the memory address of each procedure and the addresses +may change if the program is reassembled. + +You can add a label for any memory address using the ``add_label`` command. +This label can then be used anywhere the address could be used:: + + .add_label ff80 start + + .disassemble start + $ff80 d8 CLD + +When using labels, you can also specify an offset (plus or minus):: + + .disassemble start:start+4 + $ff80 d8 CLD + $ff81 a2 ff LDX #$ff + $ff83 9a TXS + $ff84 a0 1c LDY #$1c + +Offsets are interpreted like any other numbers. In the example above, +``start+4`` implies that the offset (``4``) uses the default radix. This +could also be written as ``start+$04`` for explicit hexadecimal. + +Command Reference +================= + +.. describe:: add_label