Lab 2: 6502 Emulator Project: Number Guessing Game
Overview
This project is a number guessing game created for the 6502 Emulator. The game prompts the user to guess a randomly generated number between 1 and 100. The user receives feedback indicating whether their guess is too high, too low, or correct. The game uses both the character screen for text-based interaction and the graphical screen for visual feedback.
Code
; Initialize the emulator
START:
LDX #$00
STX $D020
STX $D021
; Set up the screen
JSR INIT_SCREEN
; Initialize random number
JSR INIT_RANDOM
STA RANDOM_NUMBER
; Display instructions
PRINT_INSTRUCTIONS:
LDX #$00
PRINT_LOOP:
LDA INSTRUCTIONS,X
BEQ DONE_PRINTING
STA $0400,X
INX
JMP PRINT_LOOP
DONE_PRINTING:
RTS
INSTRUCTIONS:
.BYTE "Guess the number between 1 and 100", $00
; Accept user input
READ_INPUT:
JSR GET_KEYBOARD_INPUT
STA USER_GUESS
RTS
; Compare numbers
COMPARE:
LDA USER_GUESS
SEC
SBC RANDOM_NUMBER
BEQ CORRECT_GUESS
BMI TOO_LOW
JMP TOO_HIGH
CORRECT_GUESS:
; Print correct message
JSR PRINT_CORRECT
JMP END_GAME
TOO_LOW:
; Print too low message
JSR PRINT_TOO_LOW
JMP MAIN_LOOP
TOO_HIGH:
; Print too high message
JSR PRINT_TOO_HIGH
JMP MAIN_LOOP
; Provide feedback
PRINT_TOO_LOW:
LDX #$00
LDY #TOO_LOW_MSG
PRINT_TOO_LOW_LOOP:
LDA (Y),X
BEQ DONE_PRINT_TOO_LOW
STA $0500,X
INX
INY
JMP PRINT_TOO_LOW_LOOP
DONE_PRINT_TOO_LOW:
RTS
PRINT_TOO_HIGH:
LDX #$00
LDY #TOO_HIGH_MSG
PRINT_TOO_HIGH_LOOP:
LDA (Y),X
BEQ DONE_PRINT_TOO_HIGH
STA $0600,X
INX
INY
JMP PRINT_TOO_HIGH_LOOP
DONE_PRINT_TOO_HIGH:
RTS
TOO_LOW_MSG:
.BYTE "Too Low!", $00
TOO_HIGH_MSG:
.BYTE "Too High!", $00
PRINT_CORRECT:
LDX #$00
LDY #CORRECT_MSG
PRINT_CORRECT_LOOP:
LDA (Y),X
BEQ DONE_PRINT_CORRECT
STA $0700,X
INX
INY
JMP PRINT_CORRECT_LOOP
DONE_PRINT_CORRECT:
RTS
CORRECT_MSG:
.BYTE "Correct!", $00
MAIN_LOOP:
JSR PRINT_INSTRUCTIONS
JSR READ_INPUT
JSR COMPARE
JMP MAIN_LOOP
END_GAME:
BRK
Reflections
The primary reason the number guessing game did not run successfully in the 6502 Emulator was due to challenges with handling strings and user input in assembly language. The strict limitations of 6502 assembly led to syntax errors and difficulties in managing screen output and input accurately. I plan to revisit and address these issues as I delve deeper into assembly language programming and gain more experience with low-level development.