\contentsline {chapter}{\numberline {1}Introduction}{1} \contentsline {chapter}{\numberline {2}The programmer's model of the 68000 microprocessor\xspace }{3} \contentsline {section}{\numberline {2.1}The registers in the 68000}{3} \contentsline {subsection}{\numberline {2.1.1}Data registers}{4} \contentsline {subsection}{\numberline {2.1.2}Accumulators}{4} \contentsline {subsection}{\numberline {2.1.3}Address registers}{4} \contentsline {subsection}{\numberline {2.1.4}Special registers: the program counter and the stack pointer}{5} \contentsline {subsection}{\numberline {2.1.5}Flags in the status registers}{5} \contentsline {paragraph}{Overflow: }{6} \contentsline {paragraph}{Carry: }{7} \contentsline {section}{\numberline {2.2}Memory}{7} \contentsline {subsection}{\numberline {2.2.1}The memory map of the 68000 system in the laboratory}{8} \contentsline {subsection}{\numberline {2.2.2}The way data is stored in memory}{9} \contentsline {chapter}{\numberline {3}68000 Assembly language}{11} \contentsline {section}{\numberline {3.1}The framework of an assembly language program}{11} \contentsline {subsection}{\numberline {3.1.1}Labels, opcodes, operands and comments}{11} \contentsline {subsubsection}{Size of operands and data}{12} \contentsline {subsection}{\numberline {3.1.2}Comments in programs}{12} \contentsline {subsection}{\numberline {3.1.3}Integer numbers in programs}{13} \contentsline {subsection}{\numberline {3.1.4}Assembler directives: \inst {org}, \inst {dc}, \inst {ds} and \inst {end}}{13} \contentsline {subsubsection}{The \inst {org} directive}{14} \contentsline {subsubsection}{The \inst {dc}, \inst {ds} directives}{14} \contentsline {subsubsection}{The \inst {end} directive}{14} \contentsline {subsubsection}{Equates}{15} \contentsline {section}{\numberline {3.2}Addressing modes}{15} \contentsline {subsection}{\numberline {3.2.1}Register direct addressing modes}{16} \contentsline {subsection}{\numberline {3.2.2}Absolute addressing mode}{16} \contentsline {subsection}{\numberline {3.2.3}Immediate addressing mode}{17} \contentsline {subsection}{\numberline {3.2.4}Address register indirect mode}{17} \contentsline {subsection}{\numberline {3.2.5}Address register indirect with postincrement mode}{18} \contentsline {subsection}{\numberline {3.2.6}Address register indirect with predecrement mode}{18} \contentsline {subsection}{\numberline {3.2.7}Address register indirect with displacement addressing mode}{19} \contentsline {subsection}{\numberline {3.2.8}Address register indirect with index addressing mode}{19} \contentsline {subsection}{\numberline {3.2.9}Tables in MC68000 assembly language}{20} \contentsline {subsection}{\numberline {3.2.10}Summary of 68000 addressing modes}{21} \contentsline {section}{\numberline {3.3}Some assembly language instructions}{21} \contentsline {subsection}{\numberline {3.3.1}Loops and decisions: the \texttt {B$_\@mathtt {CC}$} instructions}{21} \contentsline {subsubsection}{Unconditional loops: the \inst {bra} instruction}{21} \contentsline {subsubsection}{Conditional loops: the \inst {bra} instruction}{22} \contentsline {subsubsection}{The \texttt {cmp} instruction}{22} \contentsline {subsubsection}{Simple tests of the flags}{23} \contentsline {subsubsection}{Testing the result of comparisons}{23} \contentsline {subsection}{\numberline {3.3.2}Loops: the \texttt {dbf} instruction}{25} \contentsline {subsection}{\numberline {3.3.3}What if you find an instruction you do not know?}{25} \contentsline {section}{\numberline {3.4}Subroutines}{25} \contentsline {section}{\numberline {3.5}The stack}{27} \contentsline {subsection}{\numberline {3.5.1}The push operation}{27} \contentsline {subsubsection}{An example of a push operation}{28} \contentsline {subsubsection}{Using the \inst {movem} instruction to push many registers onto the stack}{28} \contentsline {subsection}{\numberline {3.5.2}The pop operation}{29} \contentsline {subsubsection}{An example of a pop operation}{29} \contentsline {subsubsection}{Using the \inst {movem} instruction to pop the stack into many registers}{30} \contentsline {section}{\numberline {3.6}Preserving registers: transparency}{30} \contentsline {section}{\numberline {3.7}Subroutine calls, parameters and return values}{31} \contentsline {section}{\numberline {3.8}Subroutine calls and the stack}{32} \contentsline {subsection}{\numberline {3.8.1}The \texttt {bsr} and \texttt {jsr} instructions}{32} \contentsline {subsection}{\numberline {3.8.2}The \texttt {rts} instruction}{33} \contentsline {subsection}{\numberline {3.8.3}The subroutine must leave the stack as it found it}{33} \contentsline {section}{\numberline {3.9}An example showing a subroutine call}{33} \contentsline {section}{\numberline {3.10}The include file \texttt {flight.i}: using macros}{35} \contentsline {subsection}{\numberline {3.10.1}The \texttt {Init} macro}{36} \contentsline {subsection}{\numberline {3.10.2}The \texttt {Delay} macro}{36} \contentsline {subsection}{\numberline {3.10.3}The \texttt {WriteSs} macro}{36} \contentsline {subsection}{\numberline {3.10.4}The \texttt {Transl} macro}{37} \contentsline {subsection}{\numberline {3.10.5}The \texttt {ShowNum} macro}{37} \contentsline {subsection}{\numberline {3.10.6}The \texttt {WNKeyPr} macro}{37} \contentsline {subsection}{\numberline {3.10.7}The \texttt {WKeyPr} macro}{38} \contentsline {section}{\numberline {3.11}The \texttt {trap} instruction and monitor routines}{38} \contentsline {chapter}{\numberline {4}Input and output}{39} \contentsline {section}{\numberline {4.1}I/O ports and the 68230 parallel interface/\penalty \z@ {}timer chip}{40} \contentsline {subsection}{\numberline {4.1.1}The interface card}{41} \contentsline {subsection}{\numberline {4.1.2}The 68230 parallel interface/\penalty \z@ {}timer chip}{41} \contentsline {subsection}{\numberline {4.1.3}Register addresses in the 68230 \acro {PI\Slash {}{}T}\xspace on the \acro {FLIGHT-68K}\xspace }{42} \contentsline {paragraph}{The \acro {PI\Slash {}{}T}\xspace has many modes:}{42} \contentsline {paragraph}{Submode 1X}{42} \contentsline {subsection}{\numberline {4.1.4}Initialising the \acro {PI\Slash {}{}T}\xspace for bit \IO }{44} \contentsline {paragraph}{What does it all mean?}{45} \contentsline {subsubsection}{Choosing inputs and outputs: the data direction registers}{45} \contentsline {subsubsection}{Initialising the \acro {PI\Slash {}{}T}\xspace for bit \IO : a summary}{46} \contentsline {subsection}{\numberline {4.1.5}How the interface card is connected to the parallel chip}{46} \contentsline {section}{\numberline {4.2}The keypad}{47} \contentsline {subsection}{\numberline {4.2.1}Scanning the keypad}{48} \contentsline {subsubsection}{The method}{48} \contentsline {subsection}{\numberline {4.2.2}Debouncing the keys}{50} \contentsline {subsection}{\numberline {4.2.3}How to detect if any key has been pressed}{51} \contentsline {chapter}{\numberline {A}Editing, assembling, downloading and running}{52} \contentsline {section}{\numberline {A.1}The program design}{52} \contentsline {section}{\numberline {A.2}The general procedure for editing, assembling, downloading and running an assembly language program}{52} \contentsline {section}{\numberline {A.3}Editing the program}{53} \contentsline {section}{\numberline {A.4}Assembling the program}{54} \contentsline {section}{\numberline {A.5}Downloading your program}{54} \contentsline {section}{\numberline {A.6}Running the program}{55} \contentsline {chapter}{\numberline {B}Using the {\sffamily sim68k}\xspace simulator and {\sffamily asm68k}\xspace assembler at home}{57} \contentsline {section}{\numberline {B.1}What is a simulator?}{57} \contentsline {section}{\numberline {B.2}The {\sffamily sim68k}\xspace simulator}{57} \contentsline {subsection}{\numberline {B.2.1}The Simulator}{58} \contentsline {subsection}{\numberline {B.2.2}The Memory Map of the \acro {ECB}\xspace (and {\sffamily sim68k}\xspace )}{58} \contentsline {subsection}{\numberline {B.2.3}{\sffamily sim68k}\xspace firmware commands}{58} \contentsline {subsection}{\numberline {B.2.4}Getting started}{59} \contentsline {subsection}{\numberline {B.2.5}List of firmware commands}{59} \contentsline {subsection}{\numberline {B.2.6}Monitor software interrupts}{59} \contentsline {subsection}{\numberline {B.2.7}Use the correct simulator and assembler}{61} \contentsline {section}{\numberline {B.3}Using {\sffamily asm68k}\xspace }{61} \contentsline {section}{\numberline {B.4}A Tutorial example using {\sffamily asm68k}\xspace and {\sffamily sim68k}\xspace }{62} \contentsline {section}{\numberline {B.5}How to obtain the simulator {\sffamily sim68k}\xspace and assembler {\sffamily asm68k}\xspace }{63} \contentsline {chapter}{References}{65} \contentsline {chapter}{Index}{66}