6502 Assembly Language Lab (Old Version)
Contents
Resources
- 6502 Wiki Page
- 6502 Emulator
- 6502 Emulator Example Code
- Opcode/Instruction References
Lab 1
Setup
1. Enter the breakout room assigned to you. 2. Select one person to be the "Driver", who will type/operate the computer for the group. 3. The driver will open the 6502 Emulator at [1] (and, ideally, this lab page as well).
Bitmap Code
3. Paste this code into the emulator:
lda #$00 ; set a pointer at $40 to point to $0200 sta $40 lda #$02 sta $41 lda #$07 ; colour number ldy #$00 ; set index to 0 loop: sta ($40),y ; set pixel at the address (pointer)+Y iny ; increment index bne loop ; continue until done the page inc $41 ; increment the page ldx $41 ; get the current page number cpx #$06 ; compare with 6 bne loop ; continue until done all pages
4. Test the code by pressing the Assemble button, then the Run button. If the there are any errors assembling (compiling) the code, they will appear in the message area at the bottom of the page. Make sure the code is running correctly and that everyone in your group understands how it works. Try some experiments: use different colours, or draw only every second dot.
Writing Code
5. Write code to draw a green line across the top of the bitmap screen and a blue line across the bottom.
6. Extend the previous code to draw a yellow line down the left side of the screen and a purple line down the right side.
Performance
7. In the Resources section, the opcode/instruction references will tell you the number of machine cycles that each instruction will take. If your system is running at 1 MHz (a typical speed for a 6502 processor), each machine cycle will take 1 microsecond (uS). What is the total time that your code (from step 6) will take to execute?
Optional (Recommended): Experiments
Go back to the bitmap code above, and try these experiments:
- Add this instruction after the
loop:
label and before thesta ($40),y
instruction:tya
- What visual effect does this cause, and how many colours are on the screen? Why?
- Add this instruction after the
tya
:lsa
- What visual effect does this cause, and how many colours are on the screen? Why?
- Repeat the above tests with two, three, four, and five
lsr
instructions in a row. Describe and explain the effect in each case. - Repeat the tests using
asl
instructions instead oflsr
instructions. Describe and explain the effect in each case. - Remove the
tya
and allasl
andlsr
instructions. - The original code includes one
iny
instruction. Test with one to five consecutiveiny
instructions. Describe and explain the effect in each case. Note: ensure that the Speed slider is on its lowest setting (left) for these experiments.
Write-Up
Post an entry on your blog describing your experiments in this lab. Include:
- An introduction, so that someone who happens across your blog will understand the context of what you're writing about.
- The results from the Writing Code portions of the lab, including the code, a description of how the code works, and the results produced.
- Your answers to the Performance question, including a description of how you reached your answer.
- Optional (Recommended): the results of the Experiments section (above), and your explaination for each observed result.
- Your experiences with this lab -- your impressions of the Assembly Language, what you learned, and your reflections on the process.
Remember to follow the Blog Guidelines as you write.