438 lines
17 KiB
Plaintext
438 lines
17 KiB
Plaintext
|
====================================================================
|
|||
|
DR 6502 AER 201S Engineering Design 6502 Execution Simulator
|
|||
|
====================================================================
|
|||
|
|
|||
|
Supplementary Notes By: M.J.Malone
|
|||
|
|
|||
|
Quick/Kick Start
|
|||
|
================
|
|||
|
|
|||
|
Use of the Simulator
|
|||
|
====================
|
|||
|
|
|||
|
Some of the dos and don'ts and the reasons for them in using
|
|||
|
the DR6502 program will be given first.
|
|||
|
|
|||
|
1) DO put all of DR6502 in on one drive and execute it from that
|
|||
|
drive. It saves hassles later since it is easier to default
|
|||
|
to the current drive on all DR6502 files.
|
|||
|
|
|||
|
2) DO put your .bin file to be simulated on that same drive,
|
|||
|
same reason.
|
|||
|
|
|||
|
3) Try not to use pathnames with DR6502. DR6502 does not
|
|||
|
recognize pathnames.
|
|||
|
|
|||
|
4) DON'T expect to see any actual input or output when using
|
|||
|
DR6502 without the hardware simulator card. Without the card
|
|||
|
DR6502 is a software simulator only that is incapable of real
|
|||
|
input/output though such operations can and should be
|
|||
|
simulated through user intervention.
|
|||
|
|
|||
|
5) DON'T assume there is an error in DR6502 just because your
|
|||
|
program did not work as expected. Many students have used
|
|||
|
DR6502 in the past and it has proven to work well, though 2
|
|||
|
small bugs were discovered in the most recent YEAR of use.
|
|||
|
It is very common for students to make errors in logic or be
|
|||
|
mistaken about the operation of flags for certain
|
|||
|
instructions. If a genuine error is encountered, the
|
|||
|
following should be provided:
|
|||
|
|
|||
|
a) A listing of the minimum assembly program required to
|
|||
|
produce the error. IE 4-10 lines long where every line is
|
|||
|
required to induce the error.
|
|||
|
|
|||
|
b) The precise keystrokes/commands required to show the
|
|||
|
error. Such documented errors will be repaired as
|
|||
|
expeditiously as possible.
|
|||
|
|
|||
|
|
|||
|
Starting
|
|||
|
========
|
|||
|
|
|||
|
1) System Requirements
|
|||
|
----------------------
|
|||
|
To run DR6502, a machine must be XT or AT compatible and have
|
|||
|
at least 640K of memory. Of that 640K at least 373K must be free
|
|||
|
after all memory resident programs and ram disks etc are
|
|||
|
installed. If there is not enough free memory in your computer,
|
|||
|
then some of the memory resident programs must be removed or the
|
|||
|
ram disk must be downsized.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 2
|
|||
|
|
|||
|
2) Code Requirements
|
|||
|
--------------------
|
|||
|
Produce a pure text file containing your assembly code. Do not
|
|||
|
use any text editor that encodes the file in any way.
|
|||
|
|
|||
|
If you are using the project computer then remember that your
|
|||
|
final (target) computer code must start with the following
|
|||
|
instructions:
|
|||
|
|
|||
|
.ORG $E000
|
|||
|
SEI
|
|||
|
LDX #$FF
|
|||
|
TXS
|
|||
|
;
|
|||
|
LDX #$00
|
|||
|
LDY #$00
|
|||
|
InitDelay DEX
|
|||
|
BNE InitDelay
|
|||
|
DEY
|
|||
|
BNE InitDelay
|
|||
|
;
|
|||
|
|
|||
|
Your code then follows. The first three statements are used to
|
|||
|
initialize the microprocessor stack and these are also required when
|
|||
|
producing a code for DR6502. The next six instructions are a delay
|
|||
|
necessary to EVERY program used on the project computer. These are
|
|||
|
required because the project board uses a non-debounced reset switch
|
|||
|
circuit. Simple debouncing would violate the rise time requirements
|
|||
|
of the RST signal and more complex methods would require more chips
|
|||
|
on the project computer board. A small addition to the beginning of
|
|||
|
every student's program was not considered a problem.
|
|||
|
|
|||
|
At the end of your code you must have:
|
|||
|
|
|||
|
.ORG $FFFC
|
|||
|
.WORD $E000
|
|||
|
.END
|
|||
|
|
|||
|
This sets the reset vector. When the RST (reset) line is used
|
|||
|
to signal to processor to begin executing, the processor is
|
|||
|
'hardwired' to look in memory location $FFFC to find a vector
|
|||
|
pointing to the beginning of the user program. DR6502 expects to
|
|||
|
find the reset vector in the same place so these three directives
|
|||
|
are also required in programs to be simulated.
|
|||
|
|
|||
|
3) Assembling
|
|||
|
--------------
|
|||
|
Any assembler capable of converting 6502 assembly language
|
|||
|
statements to a binary file of 6502 machine opcodes and operands
|
|||
|
would be acceptable. The TASM (Table oriented ASseMbler) is user
|
|||
|
supported package available to AER 201S students. TASM is a
|
|||
|
converter of ASC II assembly code files to binary executable files.
|
|||
|
It is capable of assembling for the 6502 as well as several other
|
|||
|
processors. It is a common mistake to believe that there is some
|
|||
|
problem with the fact that the TASM program executes on an IBM type
|
|||
|
computer but produces code for a 6502 machine. Once again TASM is a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 3
|
|||
|
|
|||
|
converter program. The machine it executes on does not determine
|
|||
|
what type of files it produces. TASM could be programmed to run on
|
|||
|
a Cray but it would still produce code for execution on a 6502
|
|||
|
machine.
|
|||
|
|
|||
|
The proper command line for assembling the program 'myfile.asm'
|
|||
|
in the current directory is:
|
|||
|
|
|||
|
tasm -65 -b -l -fff myfile.asm myfile.bin myfile.lst
|
|||
|
|
|||
|
Note on Options: -65 : Assemble for the 6502
|
|||
|
-b : Binary file output
|
|||
|
-l : List the symbol table
|
|||
|
-fff: Fill unassigned spaces of the EPROM with $FF
|
|||
|
|
|||
|
This produces a binary file named myfile.bin ready for DR6502 or the
|
|||
|
EPROM programmer. The files myfile.lst can be used to look at any
|
|||
|
errors that TASM may have found.
|
|||
|
|
|||
|
4) Eprom Burning
|
|||
|
----------------
|
|||
|
This is actually easier than simulating the code so it will be
|
|||
|
dealt with first. The PC's in the lab that are equipped with EPROM
|
|||
|
burners have software installed to copy .bin files onto EPROMs. The
|
|||
|
EPROM burner itself is a card for the PC computers with a cable that
|
|||
|
leads to the EPROM ZIF (Zero Insertion Force) socket module. You
|
|||
|
place your EPROM in the socket in the orientation suggested and
|
|||
|
press the locking lever. Place the disk with your software in the
|
|||
|
floppy drive and type 'EPROM'.
|
|||
|
The EPROM burner menu has several options. You should check
|
|||
|
that the EPROM type and programming voltage match the EPROM you
|
|||
|
have. Load the file from the disk into the EPROM program's buffer
|
|||
|
memory starting at address 0000. Check the EPROM is blank by
|
|||
|
selecting the 'blank check' function from the menu. If the EPROM
|
|||
|
checks out as blank, select the 'program' or 'copy' from buffer to
|
|||
|
EPROM' function to program the EPROM. Remove the EPROM and place it
|
|||
|
in the target computer.
|
|||
|
If you would like to change the program in the EPROM or if the
|
|||
|
EPROM did not check out as blank before programming then place the
|
|||
|
EPROM in the EPROM eraser unit. The EPROM eraser unit clears the
|
|||
|
program from the EPROM using ultraviolet light on the memory gates.
|
|||
|
Erasing requires twenty minutes under the ultraviolet light.
|
|||
|
|
|||
|
|
|||
|
5) Writing an EEPROM
|
|||
|
--------------------
|
|||
|
|
|||
|
A routine has been written utilizing the hardware simulator
|
|||
|
interface card, to write data to an EEPROM plugged into a project
|
|||
|
board RAM socket. EEPROMS must be of the XL2864A type or
|
|||
|
equivalent.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 4
|
|||
|
|
|||
|
Simulating a Program with DR6502
|
|||
|
================================
|
|||
|
|
|||
|
Getting to the Status Screen
|
|||
|
----------------------------
|
|||
|
To simulate the program DR6502 needs the code and the memory
|
|||
|
configuration for the target computer. To give this information to
|
|||
|
the simulator there are two options. 1) Run the CONFIG.EXE program
|
|||
|
by typing CONFIG, 2) Run DR6502.EXE by typing DR6502 and when it
|
|||
|
asks if it is configured for the memory of the target type 'n' for
|
|||
|
no. In this case DR6502 will call the CONFIG program automatically.
|
|||
|
In the CONFIG program the user will be asked for the type of
|
|||
|
memory elements and their addresses. When the EPROM is specified,
|
|||
|
the user will be asked for the name of the .BIN file that will be in
|
|||
|
the memory of the target computer. DR6502 expects to find this .BIN
|
|||
|
file in the current directory.
|
|||
|
Once the configuration is input, CONFIG will automatically call
|
|||
|
DR6502. This time since you have just finished running the CONFIG
|
|||
|
program you can answer that 'y' "Yes, DR6502 is configured for the
|
|||
|
memory of the target". Provided you do not change the name of the
|
|||
|
binary file in subsequent revisions of your software, there is no
|
|||
|
need to run the CONFIG program again.
|
|||
|
DR6502 will next ask if this will be a hardware simulator
|
|||
|
session. To use DR6502 in hardware mode, the hardware simulator
|
|||
|
card and the simulator software (DR6502) must be present in the PC.
|
|||
|
The .BIN and all auxiliary files must be available. The simulator
|
|||
|
cable must be plugged into the 6502 socket on the target and the
|
|||
|
target must be supplied with power from a power supply.
|
|||
|
DR6502 will read several files for information necessary for
|
|||
|
its operation and then will begin reading the EPROM files. If the
|
|||
|
hardware simulator is being used the program will ask if the EPROM
|
|||
|
corresponding to the file is present or not. If the EPROM is not
|
|||
|
present on the target, the simulator will use the PC's memory to
|
|||
|
emulate it. The simulator will also ask if there is a symbol file
|
|||
|
that goes with the .BIN file (a .SYM file produced with DRSYM.EXE
|
|||
|
and your .LST file) to be loaded into the simulator. It is not
|
|||
|
necessary to have a symbol file but it does enhance the performance
|
|||
|
of certain of the simulator's functions.
|
|||
|
The simulator will next ask what type of processor you are
|
|||
|
using. The options are 0) - NMOS 6502, 1) Standard CMOS 65C02 and
|
|||
|
2) Rockwell CMOS 65C02. The differences between each of these
|
|||
|
processors is the instruction set. In the newer revisions of the
|
|||
|
processor, some new instructions were added. Choose the selection
|
|||
|
that corresponds to the processor that will be in your target
|
|||
|
computer.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 5
|
|||
|
|
|||
|
Interpreting the Status Screen
|
|||
|
------------------------------
|
|||
|
The 'stopped' status screen will then appear and it should look
|
|||
|
as shown below:
|
|||
|
|
|||
|
--------------------------top of screen-----------------------------
|
|||
|
|
|||
|
(Errors and Warnings Area)
|
|||
|
|
|||
|
====================================================================
|
|||
|
ACC=00 XREG=00 YREG=00 SP=00 PC=E001 Status Register
|
|||
|
N V u B D I Z C
|
|||
|
0 0 1 0 0 1 0 0
|
|||
|
====================================================================
|
|||
|
E000 78 SEI (2) Fetch Address =FFFF
|
|||
|
E001 Next OpCode Vector Address=FFFF
|
|||
|
Elapsed Cycles (millions):000000.000002
|
|||
|
====================================================================
|
|||
|
|
|||
|
(Commands area)
|
|||
|
|
|||
|
---------------------------bottom of screen-------------------------
|
|||
|
|
|||
|
The area at the top of the screen warns of error conditions
|
|||
|
detected by DR6502 and warns if the opcode stream is becoming
|
|||
|
unusual. The next area down on the screen shows the current status
|
|||
|
of the processor registers and the flag register. The next area
|
|||
|
down on the screen displays information about the current program
|
|||
|
step. The opcode and operands are shown and then the assembly
|
|||
|
mnemonic and the addressing mode. If the addressing mode involves a
|
|||
|
memory fetch then the effective fetch address is shown. If the
|
|||
|
address mode involves vector indirection then the vector address is
|
|||
|
also shown. The number of machine cycles since the processor was
|
|||
|
reset is also shown. Below the lowest bar is the commands area
|
|||
|
where user commands are input.
|
|||
|
|
|||
|
From the status screen several commands are possible to view or
|
|||
|
manipulate memory or to start the processor executing in one of
|
|||
|
several modes:
|
|||
|
|
|||
|
|
|||
|
Modes of Execution: (From slowest to fastest)
|
|||
|
---------------------------------------------
|
|||
|
|
|||
|
'Single' Step Mode - While at the 'Stopped' status screen (as shown
|
|||
|
above) the user can press the 's' key to cause the processor
|
|||
|
to advance one machine instruction or STEP and return to the
|
|||
|
'Stopped' status screen.
|
|||
|
|
|||
|
|
|||
|
'Go' Mode - While at the 'Stopped' Status screen (as shown above)
|
|||
|
the user can press the 'g' key (for GO) to cause the processor
|
|||
|
to execute a machine instruction, output all status
|
|||
|
information and continue on to the next instruction. The 's'
|
|||
|
key will STOP execution and return the simulator to the
|
|||
|
'Stopped' status screen.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 6
|
|||
|
|
|||
|
'Go Fast' Mode - Since screen output takes most of the time in the
|
|||
|
execution loop, to speed the processor's progress through
|
|||
|
uninteresting parts of the code a limited output 'fast' mode
|
|||
|
is available. By pressing the '`' key in the stopped status
|
|||
|
screen, the user can cause the processor to enter fast
|
|||
|
execution where the screen is cleared and only the program
|
|||
|
counter is displayed on the screen. By pressing '`' again the
|
|||
|
user can make the processor slow to full output 'go' mode.
|
|||
|
|
|||
|
'Go Really Fast' Mode - Since even printing the program counter
|
|||
|
slows execution incredibly, a second fast mode was devised.
|
|||
|
Often the user knows exactly to what point in the code they
|
|||
|
would like the processor to run. A 'breakpoint' could be used
|
|||
|
to halt the processor at that point and the user would need no
|
|||
|
screen output until that time. As a result when the user has
|
|||
|
selected a breakpoint and enters '`' 'Go Fast' mode, the
|
|||
|
processor will clear the screen and enter a completely silent
|
|||
|
'Really Fast' mode.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
There is about an order of magnitude speed difference between
|
|||
|
'Go' and 'Go fast' and nearly another order of magnitude between
|
|||
|
that and 'Go Really Fast'. The following are SOME of the options
|
|||
|
are available in the stopped menu.
|
|||
|
|
|||
|
|
|||
|
Influencing Execution
|
|||
|
---------------------
|
|||
|
|
|||
|
'b' - 'set a Breakpoint' This allows the user to set a point in
|
|||
|
memory as a breakpoint for execution. If the processor
|
|||
|
encounters this memory location any time during execution,
|
|||
|
either as a program location or a data access, execution in the
|
|||
|
'go' and 'go really fast' will stop and the full stopped status
|
|||
|
screen is displayed.
|
|||
|
|
|||
|
'r' - 'change Registers' The user can modify the contents of any of
|
|||
|
the 6502 registers including the flags, the processor status
|
|||
|
register and the program counter.
|
|||
|
|
|||
|
|
|||
|
Manipulating Memory
|
|||
|
-------------------
|
|||
|
|
|||
|
'v' - 'View memory' This option performs a hexidecimal display of
|
|||
|
data space memory so that variables or arrays can be viewed.
|
|||
|
|
|||
|
'p' - 'Poke memory' This allows the user to input hexidecimal values
|
|||
|
into memory.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
page 7
|
|||
|
|
|||
|
Manipulating Programs
|
|||
|
---------------------
|
|||
|
|
|||
|
'P' - '(re)Program code' This option disassembles one page (256
|
|||
|
bytes) of code and displays several lines on the screen. The
|
|||
|
user can then edit the code with a number of sub-options in the
|
|||
|
'P' program option. Changes made to the code are not permanent
|
|||
|
unless the 's'ave sub-option is selected before the 'q'uit.
|
|||
|
|
|||
|
|
|||
|
Display Control
|
|||
|
---------------
|
|||
|
|
|||
|
'm' - 'Monitor a variable' This option allows the user to monitor on
|
|||
|
the main output screen the contents of a memory location that is
|
|||
|
an important variable to the program.
|
|||
|
|
|||
|
|
|||
|
Summary
|
|||
|
=======
|
|||
|
The previous explanations tried to address some of the common
|
|||
|
concerns when students approach producing a piece of project
|
|||
|
software for AER201S. Complete information can only be gained by
|
|||
|
consulting:
|
|||
|
|
|||
|
TASM documentation
|
|||
|
|
|||
|
DR6502 documentation
|
|||
|
|
|||
|
Project Computer Board Notes
|
|||
|
|
|||
|
There is however no substitute for actually DOING. The sooner
|
|||
|
a student is completely familiar with the process of moving a code
|
|||
|
from concept to testing and the implementation, the faster it will
|
|||
|
go when design iterations become necessary. Design iterations
|
|||
|
result when software never works at all on the first five tries, and
|
|||
|
doesn't work completely right until the twentieth or fiftieth
|
|||
|
revision.
|
|||
|
|