Lab 2 Number Guessing Game

Contents

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.

support

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦