DEV Community

Hyporos
Hyporos

Posted on

SPO600 - Lab 4

After countless hours I've finally came up with a somewhat reliable conclusion for the 4th lab. This lab requires you to create a subroutine which enables you to enter 2 digits, and adding the numbers together and displaying them.

It should also allow the use of digits, backspace, and moving left and right between the two digits so you could edit as you wish.

define  CHRIN  $ffcf ; input character from keyboard
define  CHROUT  $ffd2 ; output character to screen
define  PLOT    $fff0 ; get/set cursor coordinates

define BACKSPACE $08
define RIGHT  $81
define LEFT  $83
define ENTER  $0d

define NUM1 $15;
define NUM2 $16;
Enter fullscreen mode Exit fullscreen mode
main:
     ldy #$00
     jsr getFirstNum ; get and store first number
     jsr getNum
     jsr storeFirstNum

     ldy #$00
     jsr getSecondNum
     jsr getNum ; get and store second number
     jsr storeSecondNum

     ldy #$00
     jsr getResult
     jsr printResult
     jmp main
Enter fullscreen mode Exit fullscreen mode
getNum:
     jsr PLOT
     ldx #$15
     jsr PLOT
Enter fullscreen mode Exit fullscreen mode
getNumCon:
     sec
     jsr PLOT
     jsr CHRIN
Enter fullscreen mode Exit fullscreen mode
keyPress: 
     cmp #BACKSPACE 
     beq erase ; erase the first digit

     cmp #RIGHT 
     beq left ; move to left digit

     cmp #LEFT
     beq right ; move to right digit

     cmp #ENTER 
     beq continue ; continue 
Enter fullscreen mode Exit fullscreen mode
dispNum:
     cmp #$30
     bcc getNumCon

     clc

     cmp #$3a
     bcs getNumCon

     jsr CHROUT
     jsr PLOT

     cpx #$17
     bne getNumCon

     dex
     clc

     jsr PLOT
     jmp getNumCon
Enter fullscreen mode Exit fullscreen mode
erase:
     cpx #$15
     beq getNumCon ; erase
     jsr CHROUT
     jmp getNumCon
Enter fullscreen mode Exit fullscreen mode
left: 
     cpx #$15
     beq getNumCon ; move left
     jsr CHROUT
     jmp getNumCon
Enter fullscreen mode Exit fullscreen mode
right: 
     cpx #$16
     beq getNumCon ; move right
     jsr CHROUT
     jmp getNumCon
Enter fullscreen mode Exit fullscreen mode
continue:
     jsr PLOT
     ldx #$15

     jsr PLOT
     sec
     jsr PLOT

     sbc #$2F

     asl
     asl
     asl
     asl

     pha

     ldx #$16

     jsr PLOT
     sec
     jsr PLOT

     sbc #$2F
     pha

     ldx #$00
     iny
     clc

     jsr PLOT
     sec
     jsr PLOT

     pla
     tax
     pla

     rts
Enter fullscreen mode Exit fullscreen mode
printResult:
     jsr PLOT
     ldx #$15
     jsr PLOT
     sec
     jsr PLOT

     lda NUM1
     adc NUM2

     pha

     bcc addition
Enter fullscreen mode Exit fullscreen mode
addition:
     lsr
     lsr
     lsr
     lsr

     adc #$30
     jsr CHROUT

     pla

     and #$0F
     clc
     adc #$30
     jsr CHROUT

     jsr PLOT
     ldx #$00
     iny
     jsr PLOT

     rts
Enter fullscreen mode Exit fullscreen mode
getFirstNum:
     lda firstNum,y
     beq return
     jsr CHROUT
     iny
     bne getFirstNum
Enter fullscreen mode Exit fullscreen mode
getSecondNum:
     lda secondNum,y
     beq return
     jsr CHROUT
     iny
     bne getSecondNum
Enter fullscreen mode Exit fullscreen mode
getResult:
     lda result,y
     beq return
     jsr CHROUT
     iny
     bne getResult
Enter fullscreen mode Exit fullscreen mode
storeFirstNum:
     sta NUM1
     txa
     eor NUM1
     sta NUM1
     rts
Enter fullscreen mode Exit fullscreen mode
storeSecondNum:
     sta NUM2
     txa
     eor NUM2
     sta NUM2
     rts
Enter fullscreen mode Exit fullscreen mode
return:
     rts
Enter fullscreen mode Exit fullscreen mode
firstNum:
dcb "E","N","T","E","R",32,"F","I","R","S","T",32,"N","U","M","B","E","R",":",32,32,"0","0"
dcb 00

secondNum:
dcb "E","N","T","E","R",32,"S","E","C","O","N","D",32,"N","U","M","B","E","R",":",32,"0","0"
dcb 00

result:
dcb "R","E","S","U","L","T",":"
dcb 00
Enter fullscreen mode Exit fullscreen mode

Overall, this lab was extremely hard. I had to skip over the third lab because I wasn't quite sure how to do it. Apparently I was supposed to pick two topics for this lab but I'm not quite ready for the second one yet. It was however really informative and taught me a good bit about 6502. I learned how to get user input, display it, modify it, and more.

Top comments (0)