jb302@37: #LyX 2.0 created this file. For more info see http://www.lyx.org/
jb302@37: \lyxformat 413
jb302@37: \begin_document
jb302@37: \begin_header
jb302@37: \textclass article
jb302@37: \begin_preamble
jb302@37: \usepackage[export]{adjustbox}% http://ctan.org/pkg/adjustbox
jb302@37: % Resize figures that are too wide for the page.
jb302@37: \let\oldincludegraphics\includegraphics
jb302@37: \renewcommand\includegraphics[2][]{%
jb302@37: \oldincludegraphics[#1,max width=\linewidth,max height=\textheight]{#2}
jb302@37: }
jb302@37: \end_preamble
jb302@37: \use_default_options true
jb302@37: \maintain_unincluded_children false
jb302@37: \language english
jb302@37: \language_package default
jb302@37: \inputencoding auto
jb302@37: \fontencoding global
jb302@37: \font_roman default
jb302@37: \font_sans default
jb302@37: \font_typewriter default
jb302@37: \font_default_family default
jb302@37: \use_non_tex_fonts false
jb302@37: \font_sc false
jb302@37: \font_osf false
jb302@37: \font_sf_scale 100
jb302@37: \font_tt_scale 100
jb302@37:
jb302@37: \graphics default
jb302@37: \default_output_format default
jb302@37: \output_sync 0
jb302@37: \bibtex_command default
jb302@37: \index_command default
jb302@37: \paperfontsize default
jb302@37: \spacing single
jb302@37: \use_hyperref false
jb302@37: \papersize default
jb302@37: \use_geometry false
jb302@37: \use_amsmath 1
jb302@37: \use_esint 1
jb302@37: \use_mhchem 1
jb302@37: \use_mathdots 1
jb302@37: \cite_engine basic
jb302@37: \use_bibtopic false
jb302@37: \use_indices false
jb302@37: \paperorientation portrait
jb302@37: \suppress_date false
jb302@37: \use_refstyle 1
jb302@37: \index Index
jb302@37: \shortcut idx
jb302@37: \color #008000
jb302@37: \end_index
jb302@37: \secnumdepth 3
jb302@37: \tocdepth 3
jb302@37: \paragraph_separation indent
jb302@37: \paragraph_indentation default
jb302@37: \quotes_language english
jb302@37: \papercolumns 1
jb302@37: \papersides 1
jb302@37: \paperpagestyle default
jb302@37: \tracking_changes false
jb302@37: \output_changes false
jb302@37: \html_math_output 0
jb302@37: \html_css_as_file 0
jb302@37: \html_be_strict false
jb302@37: \end_header
jb302@37:
jb302@37: \begin_body
jb302@37:
jb302@37: \begin_layout Part
jb302@37: The Emulator
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Section
jb302@37: Emulator Design
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Graphics
jb302@37: filename /home/jmz/qm/ede/docs/img/emu/ELB816_system.svg
jb302@37: display false
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: Above is a block diagram of a micro-controller with the ELB816 micro-processor
jb302@37: at it's core.
jb302@37: This is taken from the original ELB816 specification.
jb302@37: Implementing a system similar to this as a piece of software is the goal
jb302@37: of this section of the project.
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Subsection
jb302@37: Memory and Registers
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Graphics
jb302@37: filename /home/jmz/qm/ede/docs/img/emu/memory.svg
jb302@37: display false
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: The micro-controller is based on a Von Neumann architecture and has:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Itemize
jb302@37: A single block of up to 64k byte addressable memory for storing both data
jb302@37: and code.
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Itemize
jb302@37: Two banks of four 8-bit general purpose registers (R0 to R3).
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Itemize
jb302@37: Four 16-bit content specific (PC, SP, DPTR and TMPA)
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Itemize
jb302@37: Three 8-bit content specific registers (A, flags and IR)
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: The general purpose 8-bit registers and the 16-bit registers can exist as
jb302@37: a single sixteen byte block of memory spaces with the following encoding:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Tabular
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: MSB
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: MSB
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Description
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: LSB
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: User Accessible?
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 000
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R0 bank 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R0 bank 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: General Purpose
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 001
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R1 bank 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R1 bank 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: General Purpose
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 010
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R2 bank 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R2 bank 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: General Purpose
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 011
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R3 bank 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: R3 bank 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: General Purpose
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 100
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: DPH
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: DPL
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Data Pointer
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 101
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: SPH
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: SPL
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Stack Pointer
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Yes
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 110
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: PCH
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: PCL
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Program Counter
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: No
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 111
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: TPH
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: TPL
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Temp Address Register
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: No
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Newpage pagebreak
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: The 8-bit flag register can exist as a single byte with the following format:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Tabular
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Bit
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Flag
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Description
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: BS
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: User Accessible: Select register bank
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: IE
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: User Accessible: Enable Interrupts when 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 2
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: OV
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set to 1 when result of arithmetic operation has even parity
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 3
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: S
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set to 1 when result of arithmetic operation is negative
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 4
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: P
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set to 1 when result of arithmetic operation has even parity
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 5
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: AC
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set to 1 when result of arithmetic operation generates a carry or borrow
jb302@37: from bit 3
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 6
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Z
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set to 1 when result of arithmetic operation is Zero
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 7
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: C
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: User Accessible: Set to 1 when result of arithmetic operation generates
jb302@37: a carry or borrow from bit 7.
jb302@37: Used in rotate through carry operations
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: There is also an 8-bit accumulator register for storing the result of various
jb302@37: operations and an 8-bit instruction register for the storing the instruction
jb302@37: currently being executed.
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Subsection
jb302@37: Control and Execution
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: The emulator needs to be controlled externally.
jb302@37: This could be via a serial or a file buffer depending on the platform.
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Graphics
jb302@37: filename /home/jmz/qm/ede/docs/img/emu/controller.svg
jb302@37: display false
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@38: \begin_inset Newpage pagebreak
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@37: Below is a control protocol which allows and control of the emulators memory
jb302@37: and execution.
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset ERT
jb302@37: status open
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37:
jb302@37:
jb302@37: \backslash
jb302@37: bigskip
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Standard
jb302@37: \begin_inset Tabular
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Function
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Arguments
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: CMD byte
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Length
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Description
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: step
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x00
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Execute instruction at PC
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: run
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x01
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Execute instructions from PC until a break point is reached
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: set register
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: register address, value
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x02
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 3
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set a register
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: get register
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: register address
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x03
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 2
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Get the value of a register
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: set flag
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: flag bit, 0 or 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x04
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 3
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Turn a flag bit on or off.
jb302@37: LSB = 0, MSB =7
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: get flag
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: flag bit
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x05
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 2
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Get the value of a flag bit
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: write memory block
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: address high, address low, length high, length low, [byte array]
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x06
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 6+
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set a block of memory of arbitrary length with the bytes in the byte array
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: read memory block
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: address high, address low, length high, length low
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x07
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 5
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Read a block of memory of arbitrary length
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: get A
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x08
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Get value of A
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: get flags
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x09
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Get value of flags
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: get IR
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@38: 0x0A
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Get Value of IR
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: run for length
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: length high, length low
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x0B
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 3
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Run for length number of instruction
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: free run
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: -
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x0C
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 1
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Run forever - Bypass controller
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: set break point
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: break point index, address high, address low
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 0x0D
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: 4
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37: \begin_inset Text
jb302@37:
jb302@37: \begin_layout Plain Layout
jb302@37: Set 1 of 8 possible break points
jb302@37: \end_layout
jb302@37:
jb302@37: \end_inset
jb302@37: |
jb302@37:
jb302@37:
jb302@37:
jb302@37: \end_inset
jb302@37:
jb302@37:
jb302@37: \end_layout
jb302@37:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset ERT
jb302@38: status open
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38:
jb302@38: \backslash
jb302@38: bigskip
jb302@37: \end_layout
jb302@37:
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset Newpage pagebreak
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: Here are pseudo-code representations of the execution control functions.
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset ERT
jb302@38: status open
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38:
jb302@38: \backslash
jb302@38: bigskip
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset listings
jb302@38: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,keywordstyle={\color{blue}},tabsize=4"
jb302@38: inline false
jb302@38: status open
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: step ( )
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@39: get PC
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: IR = byte in memory at PC
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: decode and execute instruction
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@39: end
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: run ( )
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@41: while PC is not a break point:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: step( )
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@41: end
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: run for length ( length )
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: counter = 0
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@39: while counter != length:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: step( )
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: free run ( ):
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: loop forever:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38: step( )
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset Newpage pagebreak
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@37: \end_layout
jb302@37:
jb302@37: \begin_layout Section
jb302@37: Emulator Implementation
jb302@37: \end_layout
jb302@37:
jb302@38: \begin_layout Standard
jb302@38: The Emulator is written in pure C89 to ensure as much cross compiler compatibili
jb302@38: ty as possible.
jb302@38: It source code consists of the following files:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset ERT
jb302@38: status open
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38:
jb302@38:
jb302@38: \backslash
jb302@38: bigskip
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@38: \begin_layout Standard
jb302@38: \begin_inset Tabular
jb302@38:
jb302@38:
jb302@38:
jb302@39:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: File
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Description
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: main.c
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Initializes the emulator at boot and controls execution
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: iset.h
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Declares a function for each mnemonic in the instruction set.
jb302@39: Declares a 256 byte function pointer table
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: iset.c
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Contains a function for each mnemonic in the instruction set
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: mem.h
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Declares variables for the various memory structures.
jb302@38: Declares memory access function definitions
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: mem.c
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38: \begin_inset Text
jb302@38:
jb302@38: \begin_layout Plain Layout
jb302@38: Contains memory access functions
jb302@38: \end_layout
jb302@38:
jb302@38: \end_inset
jb302@38: |
jb302@38:
jb302@38:
jb302@38:
jb302@38: \end_inset
jb302@38:
jb302@38:
jb302@38: \end_layout
jb302@38:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset ERT
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39:
jb302@39: \backslash
jb302@39: bigskip
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Subsection
jb302@39: main.c
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: In this file the 256 byte instruction table is filled with pointers to the
jb302@39: functions in iset.c.
jb302@39: This file also contains the control interface function and execution control
jb302@39: functions.
jb302@39: None of these functions take any arguments or return any data.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset ERT
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39:
jb302@39: \backslash
jb302@39: bigskip
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: Below is a list of the functions that appear in this file.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Tabular
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Function
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Description
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: snd
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Puts a character into the serial or file output buffer
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: rcv
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Get a character from the serial or file input buffer
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: step
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Execute the instruction pointed to by PC
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: run
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Execute instructions until a break point is reached
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: controller
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Get character from input buffer and deal with accordingly
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: main
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Make sure free run isn't enabled at boot, call controller function forever
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Newpage pagebreak
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: Below is the format of the instruction pointer table initialized in this
jb302@39: file.
jb302@39: Each item in the table is a pointer to a function.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset ERT
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39:
jb302@39: \backslash
jb302@39: bigskip
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: According to the program Cdecl, in
jb302@39: \begin_inset Quotes eld
jb302@39: \end_inset
jb302@39:
jb302@39: human language
jb302@39: \begin_inset Quotes erd
jb302@39: \end_inset
jb302@39:
jb302@39: , it's declaration is:
jb302@39: \begin_inset Quotes eld
jb302@39: \end_inset
jb302@39:
jb302@39: declare ops as array 256 of pointer to function (void) returning void
jb302@39: \begin_inset Quotes erd
jb302@39: \end_inset
jb302@39:
jb302@39: .
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset ERT
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39:
jb302@39: \backslash
jb302@39: bigskip
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: The number of the pointers position in the table is the opcode for the instructi
jb302@39: on that the function being pointed to deals with.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@39: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,keywordstyle={\color{blue}},tabsize=4"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: void (*ops[256])(void) = {
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: SET, CLR, SET, CLR, SET, CLR, CPL, CPL,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: XCSD, SFA, LAF, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: ANL, ANL, ANL, ANL, ANL, ANL, ANL, ANL,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: XRL, XRL, XRL, XRL, XRL, XRL, XRL, XRL,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: RL, RLC, RR, RRC, INC, DEC, INC, DEC,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: ADD, ADD, ADD, ADD, ADD, ADD, ADD, ADD,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: DJNZ, DJNZ, DJNZ, DJNZ, CJNE, CJNE, CJNE, CJNE,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: LJMP, LCALL, RET, RETI, SJMP, JMP, JMP, CJNE,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: JZ, JNZ, JC, JNC, JPO, JPE, JS, JNS,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: POP, POP, POP, POP, POP, POP, POP, POP,
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: MUL, DIV, DA, NOP, IN, OUT, INT, HLT
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: };
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Newpage pagebreak
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Subsection
jb302@39: iset.c/h
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: For every mnemonic in the ELB816 instruction set there is a function in
jb302@39: these files.
jb302@39: These are the functions that are pointed to in the instruction table that
jb302@39: is filled in main.c.
jb302@39: The functions behave according to their description in the ELB816 specification.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Subsection
jb302@39: mem.c/h
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: In mem.h the memory structure of the emulator is defined in accordance with
jb302@39: how it was described in the previous section.
jb302@39: mem.c contains the following functions to facilitate access to this memory.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset ERT
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39:
jb302@39: \backslash
jb302@39: bigskip
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Tabular
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Function
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Arguments
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Returns
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Description
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: get_flag
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: flag
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 1 byte
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Get the value of a flag (can be 0 or 1)
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: set_flag
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: flag, on
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Set a flag to 0 if on == 0, else set flag to 1
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: set_zp
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: value
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Set zero and parity flags based on value
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: get_wide
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 2 bytes
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Get the value of a 16-bit register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: set_wide
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: register, value
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Set the value of a 16-bit register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: inc_pc
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: n
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Increment the PC by n
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: fetch
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 1 byte
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: return the byte in memory at PC, increment PC
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: fetch_wide
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 2 bytes
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: return the 2 bytes in memory at PC, increment PC by 2
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: get_reg
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 1 byte
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Get the value of an 8-bit register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: set_reg
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: register, value
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: -
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Set the value of an 8-bit register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Newpage pagebreak
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: The various register access functions use different register encoding schemes.
jb302@39: These are in the tables below.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Itemize
jb302@39: get_wide/set_wide
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Tabular
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Encoding
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: DPTR
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 00
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: SP
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 01
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: PC
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 10
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: TMPA
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 11
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Itemize
jb302@39: get_reg/set_reg - These values correspond to the way registers are encoded
jb302@39: into the last 3-bits of many of the ELB816 instructions.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Tabular
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Register
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: Encoding
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: R0
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 000
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: R1
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 001
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: R2
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 010
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: R3
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 011
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: DPH
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 100
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: DPL
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 101
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: SPH
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 110
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: SPL
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39: \begin_inset Text
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39: 111
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39: |
jb302@39:
jb302@39:
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Section
jb302@39: Porting to Intel MCS-51
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: In order make this code compile for an 8052 using Keil C51 a few changes
jb302@39: to were needed.
jb302@39: These are detailed below.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Subsection
jb302@39: main.c
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: In the PC version of the emulator, the function table is declared as:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: FUNCTION_TABLE const iset
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: Since the instruction set is 256 bytes long and the 8052 only has 256 bytes
jb302@39: of internal RAM, this data structure must be redeclared to exist in code
jb302@39: memory space.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: FUNCTION_TABLE const code iset
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Newpage pagebreak
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: The PC version of the emulator uses a file buffer to communicate with the
jb302@39: debugger.
jb302@39: On the 8052 communication uses a serial interface.
jb302@39: Because of this the snd() functions differ.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: On the PC
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: snd(BYTE c) {
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: fp = fopen("out", "a");
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: fputc(c, fp);
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: fclose(fp);
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: }
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: Becomes on the 8052, simply:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: snd(BYTE c) {
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: putchar(c);
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: }
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: The 8052's serial point also needs to be configures at the start of main
jb302@39: execution like this:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@41: SCON = 0x50; * SCON - mode 1, 8-bit UART, enable rcvr
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41: TMOD |= 0x20; * TMOD - timer 1, mode 2, 8-bit reload
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41: TH1 = 0xE8; * TH1 - reload value for 1200 baud@12MHz
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41: TR1 = 1; * TR1 - timer 1 run
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41: TI = 1; * TI - set TI to send first char of UART
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Subsection
jb302@39: mem.h
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: The 8052 development board available during this project had 32K of external
jb302@39: RAM available.
jb302@39: This meant the size of the emulators Von Neumann memory space had to be
jb302@39: halved and declared to exist in external data memory.
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: On the PC:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,keywordstyle={\color{blue}},language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: BYTE mem[0x10000];
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: On the 8052
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset listings
jb302@41: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,keywordstyle={\color{blue}},language=C"
jb302@39: inline false
jb302@39: status open
jb302@39:
jb302@39: \begin_layout Plain Layout
jb302@39:
jb302@39: BYTE xdata mem[0x8000];
jb302@39: \end_layout
jb302@39:
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@39: \begin_layout Standard
jb302@39: \begin_inset Newpage pagebreak
jb302@39: \end_inset
jb302@39:
jb302@39:
jb302@39: \end_layout
jb302@39:
jb302@37: \begin_layout Section
jb302@37: Emulator Testing
jb302@37: \end_layout
jb302@37:
jb302@41: \begin_layout Standard
jb302@41: The assemblers memory structures and access functions were tested by using
jb302@41: the access function to set the memory structures to know values, and then
jb302@41: request the values back and write them to a file.
jb302@41: The file was then inspected by hand.
jb302@41: The test files and results can be found in the Supporting Material.
jb302@42:
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Standard
jb302@41: \begin_inset ERT
jb302@41: status open
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41:
jb302@41: \backslash
jb302@41: bigskip
jb302@41: \end_layout
jb302@41:
jb302@41: \end_inset
jb302@41:
jb302@41:
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Standard
jb302@42: The emulator could be more rigorously tested in conjunction with the debugger
jb302@42: and assembler.
jb302@41: Below is a pseudo-code representation of an automated test procedure that
jb302@41: could be implemented with the debug class in python.
jb302@41: \end_layout
jb302@41:
jb302@41: \begin_layout Standard
jb302@41: \begin_inset ERT
jb302@41: status open
jb302@41:
jb302@41: \begin_layout Plain Layout
jb302@41:
jb302@41:
jb302@41: \backslash
jb302@41: bigskip
jb302@41: \end_layout
jb302@41:
jb302@41: \end_inset
jb302@41:
jb302@41:
jb302@41: \end_layout
jb302@41:
jb302@42: \begin_layout Standard
jb302@42: \begin_inset listings
jb302@42: lstparams "basicstyle={\ttfamily},frame=tb,framexbottommargin=1em,framextopmargin=1em,language=C"
jb302@42: inline false
jb302@42: status open
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: for instruction in instruction set:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: reset emulator memory state
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: assemble instruction
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: write instruction to memory
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: execute instruction
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: get all registers
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: get all flags
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: get any affected memory cells
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: if and only if expected register changes occoured:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: register test passed
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: if and only if expected flag changes occoured:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: flag test passed
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: if expected memory modification occoured:
jb302@42: \end_layout
jb302@42:
jb302@42: \begin_layout Plain Layout
jb302@42:
jb302@42: memory test passed
jb302@42: \end_layout
jb302@42:
jb302@42: \end_inset
jb302@42:
jb302@42:
jb302@42: \end_layout
jb302@42:
jb302@37: \end_body
jb302@37: \end_document