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