SPO600 - W3
Gustavo Tavares
Posted on February 7, 2022
In week 3 was time to learn about:
- Math
- Characters
- and strings!
- Branches, Jumps and Procedures
About Math
6502 Assembly language can perform calculations on binary and decimal mode.
In binary, it will perform the operations on a 8-bite value.
In decimal, the bytes are treated as 2 decimal digits.
The operations are:
ADC (Add with Carry)
This will perform the following:the value in the accumulator + the specified byte + the carry flag
.SBC (Subtract with Carry)
This will perform the following:the value in the accumulator - the specified byte - (not Carry)
LSR (Logical Shift Right)
This will perform a division by 2.ASL (Arithmetic Shift Left)
This will perform a multiplication by 2.
About Characters and Strings
In 6502, we can use dcb
to make a string. Keep in mind that if you want to use enter
you need to use $0d
and 32
for space, for example:
msg:
dcb "T","y","p","e",32,"a",32,"n","u","m","b","e","r",32,"f","r","o","m",32,"0",32,"t","o",32,"9",":",0
The 0
at the end is to control the end of the string.
Having this, we can use JSR CHROUT
to output the values to the screen.
LDY #$00
nextchar: ;DISPLAY INITIAL MESSAGE
LDA msg,Y
BEQ getnumber
JSR CHROUT
INY
BNE nextchar
For Input, we can use CHRIN
to get input from user.
getnumber: ; ACCEPT ONLY NUMBERS
LDY #$00
JSR CHRIN
CMP #$00
BEQ getnumber
CMP #$30
BMI getnumber
CMP #$39
BPL getnumber
JSR CHROUT
This code will accept only a number from 0 to 9 from the user.
Branches, Jumps and Procedures
Branches, Jumps and Procedures are how we can control the flow of our program.
Branches can be used for conditional jumps
For example:
We can use CMP #$00 (Compare to 0) and then BNE branchName (Branch if not equal) or BEQ branchName (branch if eqqual).
Jumps can be used to perform a change in the branch independently of any conditions.
For Exemple:
JMP done will bring you to the done label.
The procedures will transfer the control to a subroutine.
For example, if you want to execute a subroutine you can:
JSR myfunction
Myfunction: …
RTN
Note that in your subroutine you need to return.
The system have some already pre defined sobroutines:
define SCINIT $ff81 ; initialize/clear screen
define CHRIN $ffcf ; input character from keyboard
define CHROUT $ffd2 ; output character to screen
define SCREEN $ffed ; get screen size
define PLOT $fff0 ; get/set cursor coordinates
This was it for W3
Thank you so much for reading!
Posted on February 7, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024