This content originally appeared on DEV Community and was authored by Qiwen Yu
In this blog, I would like to present simple 6502 assembly code and give a brief explanation/comments on how it works.
The Bitmap code is the basic code I use, which will paint the whole page to yellow. And I will try to create line across the page locate on different places.
Bitmap Code
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
Draw a green line across the top
lda #$00 ; set a pointer at $40 to point to $0200
sta $40
lda #$02
sta $41
lda #$05 ; set color green
ldy #$00 ; set index to 0
top:sta ($40), y ; set pixel
iny ; increment index
cpy #$20 ; compare y value with 20. If the index is 20, end the loop
bne top
Draw a blue line across the bottom
lda #$05
sta $41
lda #$03 ; set color blue
ldy #$e0 ; set the index to last line
bottom: sta ($40), y ; set pixel
iny ; increment index
bne bottom ; continue until done the line
Draw a yellow line down the left side, and a purple line down the right side
lda #$00 ; set a pointer at $40 to point to $0200
sta $40
lda #$02
sta $41
both_side: lda #$07 ;set the color yellow
sta ($40), y
tax ; transfer A to X
tya ; transfer Y to A
clc ; clear carry flag to do ADC (add with carry)
adc #$1f ; add with #$1f to indicates the last line
tay ; transfer A to Y
txa ; transfer X to A
lda #$04 ; set the color purple
sta ($40), y ;
iny ; increment index y
bne both_side ; continue until done the page
inc $41 ; increment the page
ldx $41 ; get the page
cpx #$06 ; compare with 6, the last page is 05, when it reaches to 06, it means all pages are already painted
bne both_side ; continue until done all page
Thoughts about 6502 Assembly Language
Assembly language is the only low-level language I have learned so far. This language is a symbolic representation of machine language. Learning this language makes me understand more on how to communicate with machine. I think assembly language is a necessary bridge between the underlying hardware of a computer and the higher-level programming languages like Python. This language helps programmers to write human-readable code that is almost similar to machine language. After having a basic knowledge of this kind of machine language actually helps me to get rid of the fear of writing code.
Commands
TYA Command
"tya" stands for "Transfer Y to A". It means that every time the value in Y register is increased, the value in A register is incremented as well.
LSA Command
"lsa" stands for "Logically Shift Right". This command shifts the color one bit to the right.
ASL Command
"asl" stands for "Arithmetically Shift Left". ASL shifts all bits left one position.
This content originally appeared on DEV Community and was authored by Qiwen Yu
Qiwen Yu | Sciencx (2021-10-01T01:44:59+00:00) 6502 Assembly Language Practice. Retrieved from https://www.scien.cx/2021/10/01/6502-assembly-language-practice/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.