Gustavo Tavares

Posted on

# SPO600 - Lab03

For lab 03, we were supposed to create a basic game or calculator using 6502 assembly language.

## My idea

We the professor noticed us, Assembly language is hard, and we should keep it simple as much as we can.
My idea was to create a simple calculator that would divide any number from 0 to 9 by 2 using LSR(Logical Shift Right).

## The way it works

First I display a message to the user:
Type a number from 0 to 9:

I did it using dcb and CHROUT, this way:

LDY #\$00

nextchar:  ;DISPLAY INITIAL MESSAGE

LDA msg,Y
BEQ getnumber
JSR CHROUT
INY
BNE nextchar

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

Then I get the input from the user using CHRIN:

getnumber:   ; ACCEPT ONLY NUMBERS

LDY #\$00
JSR CHRIN

CMP #\$00
BEQ getnumber

CMP #\$30
BMI getnumber

CMP #\$39
BPL getnumber

LDX A ;Load x register with A

JSR CHROUT

This code means accept only numbers from 0 to 9, if user enters something different than that then it will be ignored.

After that I display the following message:
Your number dividev by to is:

dividemsg: ;DISPLAY DIVIDE MESSAGE

LDA msg2,y
BEQ result
JSR CHROUT
INY
BNE dividemsg

msg2:
dcb \$0d,"Y","o","u","r",32,"n","u","m","b","e","r",32,"d","i","v","i","d","e","d",32,"b","y",32,"2",32,"i","s",":",0

After the message is displayed the result should be outputs in the result label:

result:  ; GET THE RESULT - LSR DIVIDE BY 2

LDY #\$00
CPX #\$00 ;Compare X with 0
BEQ zero ;Display divide by 0 message

LSR X   ;Divide by 2
LDA X   ; load result in A
JSR CHROUT ;Display the result

It is important to say that I could not make this part work properly, the result is not displaying to the user.

And if the user is trying to divide by 0, then a message should be displayed:

zero:   ;MESSAGE IN CASE DIVIDING BY 0

LDA msg3,y
BEQ done
JSR CHROUT
INY
BNE zero

done: BRK

The entire code can be found here:

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

LDY #\$00

nextchar:  ;DISPLAY INITIAL MESSAGE

LDA msg,Y
BEQ getnumber
JSR CHROUT
INY
BNE nextchar

getnumber:   ; ACCEPT ONLY NUMBERS

LDY #\$00
JSR CHRIN

CMP #\$00
BEQ getnumber

CMP #\$30
BMI getnumber

CMP #\$39
BPL getnumber

LDX A ;Load x register with A

JSR CHROUT

LDY #\$00

dividemsg: ;DISPLAY DIVIDE MESSAGE

LDA msg2,y
BEQ result
JSR CHROUT
INY
BNE dividemsg

result:  ; GET THE RESULT - LSR DIVIDE BY 2

LDY #\$00
CPX #\$00 ;Compare X with 0
BEQ zero ;Display divide by 0 message

LSR X   ;Divide by 2
LDA X   ; load result in A
JSR CHROUT ;Display the result

zero:   ;MESSAGE IN CASE DIVIDING BY 0

LDA msg3,y
BEQ done
JSR CHROUT
INY
BNE zero

done: BRK

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

msg2:
dcb \$0d,"Y","o","u","r",32,"n","u","m","b","e","r",32,"d","i","v","i","d","e","d",32,"b","y",32,"2",32,"i","s",":",0

msg3:
dcb 32,"C","a","n","n","o","t",32,"d","i","v","i","d","e",32,"0","!",0

DEV Community

## The AI Brief

### AI generated git commit messages

Minimize the struggle of remembering what you just coded. AI-generated commits make it easier to manage projects and keep track of changes. The Nutlope/aicommits project demonstrates how AI can improve commit messages.

### I open sourced an AI that creates any UI in seconds

Make AI-generated user interfaces a breeze. This open-source project harnesses the power of generative AI technologies like chatGPT to create versatile, quick, and intuitive UI components.

### Use AI to commit like a PRO in 1 second

Upgrade your commit message game with AI. Boost your productivity by using ChatGPT to generate commit messages and avoid context switching. OpenCommit is an open-source library that helps you achieve this easily.

### Build your own ChatGPT starter kit

Train AI models on custom data for improved domain-specific knowledge. Combine the power of WebView technologies and this starter kit to train your ChatGPT model on specific websites, allowing for better-optimized outcomes.