diff options
| author | cheapie <cheapiephp@gmail.com> | 2026-05-30 08:58:29 -0500 |
|---|---|---|
| committer | cheapie <cheapiephp@gmail.com> | 2026-05-30 08:58:29 -0500 |
| commit | d609dcb35dafebeafced9c40d92ddd5da630aa54 (patch) | |
| tree | be5b1083f2f12173dbe936306e46a11cff4d62ea /assembly/guessnum-random | |
| parent | 28be6fac111899c930c8072cd42bcbd7be6f5d40 (diff) | |
| download | rvcontroller-d609dcb35dafebeafced9c40d92ddd5da630aa54.tar rvcontroller-d609dcb35dafebeafced9c40d92ddd5da630aa54.tar.gz rvcontroller-d609dcb35dafebeafced9c40d92ddd5da630aa54.tar.bz2 rvcontroller-d609dcb35dafebeafced9c40d92ddd5da630aa54.tar.xz rvcontroller-d609dcb35dafebeafced9c40d92ddd5da630aa54.zip | |
Organize files better and include binaries for assembly samples
Diffstat (limited to 'assembly/guessnum-random')
| -rw-r--r-- | assembly/guessnum-random/Makefile | 24 | ||||
| -rw-r--r-- | assembly/guessnum-random/guessnum-random.S | 126 | ||||
| -rwxr-xr-x | assembly/guessnum-random/guessnum-random.elf | bin | 0 -> 5984 bytes | |||
| -rw-r--r-- | assembly/guessnum-random/guessnum-random.hex | 26 | ||||
| -rw-r--r-- | assembly/guessnum-random/guessnum-random.o | bin | 0 -> 2400 bytes | |||
| l--------- | assembly/guessnum-random/rvcontroller.ld | 1 |
6 files changed, 177 insertions, 0 deletions
diff --git a/assembly/guessnum-random/Makefile b/assembly/guessnum-random/Makefile new file mode 100644 index 0000000..62eda18 --- /dev/null +++ b/assembly/guessnum-random/Makefile @@ -0,0 +1,24 @@ +MARCH ?= rv32imacbzicntr_zicond_zicsr_zifencei_zihintpause_zilsd_zclsd_zabha_zacas_zbkb_zbkx_zcb_zcmp_zcmt + +.PHONY: all dump load clean + +all: guessnum-random.hex + +guessnum-random.o: guessnum-random.S + riscv32-none-elf-as -I../rvcontroller-libraries -march=${MARCH} -o guessnum-random.o guessnum-random.S + +guessnum-random.elf: guessnum-random.o + riscv32-none-elf-ld -T rvcontroller.ld --no-warn-rwx-segments -o guessnum-random.elf guessnum-random.o + +dump: guessnum-random.elf + riscv32-none-elf-objdump -d guessnum-random.elf + +guessnum-random.hex: guessnum-random.elf + riscv32-none-elf-objcopy -O ihex guessnum-random.elf guessnum-random.hex + +load: guessnum-random.hex + bash -c "wl-copy < guessnum-random.hex" + +clean: + rm -f guessnum-random.bin guessnum-random.elf guessnum-random.o + diff --git a/assembly/guessnum-random/guessnum-random.S b/assembly/guessnum-random/guessnum-random.S new file mode 100644 index 0000000..0f890cd --- /dev/null +++ b/assembly/guessnum-random/guessnum-random.S @@ -0,0 +1,126 @@ +restart: +rdtime t3 # Get the time the program was started at + +li a7,11 # Print character +li a0,0xa # \n +ecall +li t0,0 # Number of guesses + +# Get a random number for the player to guess +li a7,128 # Get random integer +li a0,1 # Lower bound = 1 +li a1,99 # Upper bound = 99 +ecall +mv t1,a0 # Put the result in t1 where it's expected + +loop: +# Increment number of guesses +addi t0,t0,1 + +# Prompt player to enter their guess +li a7,4 # Write string +la a0,prompt # 'Enter your guess' prompt address +ecall + +# Read the player's guess +li a7,5 # Read integer +ecall +mv t2,a0 # Store it in t2 + +# Print it back out +li a7,1 # Write integer +ecall +li a7,11 # Write character +li a0,0xa # \n +ecall + +# Replace it with a random number +li a0,0 # Lower bound = 0 +li a1,100 # Upper bound = 100 +li a7,128 # Get random integer +ecall +mv t2,a0 + +# Too low? +blt t2,t1,toolow + +# Too high? +blt t1,t2,toohigh + +# Otherwise it must be right +j correct + +toolow: +# Show too low message +li a7,4 # Write string +la a0,toolowmsg +ecall +j loop # Go back for the next guess + +toohigh: +# Show too high message +li a7,4 # Write string +la a0,toohighmsg +ecall +j loop # Go back for the next guess + +correct: +# Show congratulations message +li a7,4 # Write string +la a0,correctmsg +ecall + +# Show number of guesses +mv a0,t0 # Get the number of guesses +li a7,1 # Write integer +ecall + +# Add proper suffix depending on whether it should be plural or not +li a7,4 # Write string +la a0,guessesmsg # "guess" +ecall +li t2,1 +beq t0,t2,playagain # Leave it singular if it was 1 +la a0,guessespluralize # "es" +ecall + +playagain: +li a7,11 # Write character +li a0,0xa # \n +ecall +# Show the number of seconds the player took +rdtime t4 # Get the current time +sub a0,t4,t3 # Subtract the start time +li a7,1 # Write integer +ecall +li a7,4 # Write string +la a0,seconds +ecall + +li a7,11 # Print character +li a0,0xa # \n +ecall + +# Ask the user if they want to play again +li a7,4 # Write string +la a0,playagainmsg +ecall +li a7,12 # Read character +ecall +li a7,11 # Write character +ecall +li t0,0x6e # n +bne a0,t0,restart + +li a7,10 # Exit program +ecall + + +prompt: .asciz "Enter your guess:\n> " +toolowmsg: .asciz "Too low! Try again\n" +toohighmsg: .asciz "Too high! Try again\n" +correctmsg: .asciz "Correct!\nYou got it in:\n" +guessesmsg: .asciz " guess" +guessespluralize: .asciz "es" +seconds: .asciz " seconds" +playagainmsg: .asciz "Play again? [Y/n]" diff --git a/assembly/guessnum-random/guessnum-random.elf b/assembly/guessnum-random/guessnum-random.elf Binary files differnew file mode 100755 index 0000000..7b75725 --- /dev/null +++ b/assembly/guessnum-random/guessnum-random.elf diff --git a/assembly/guessnum-random/guessnum-random.hex b/assembly/guessnum-random/guessnum-random.hex new file mode 100644 index 0000000..7d535d9 --- /dev/null +++ b/assembly/guessnum-random/guessnum-random.hex @@ -0,0 +1,26 @@ +:10000000732E10C0AD48294573000000814293084B
+:100010000008054593053006730000002A83850219
+:100020009148170500001305650E73000000954800
+:1000300073000000AA83854873000000AD4829457D
+:100040007300000001459305400693080008730003
+:100050000000AA8363C56300634B73000DA0914841
+:10006000170500001305D50B730000004DBF914824
+:10007000170500001305150C730000004DB79148DB
+:10008000170500001305650C7300000016858548F0
+:10009000730000009148170500001305950C7300CC
+:1000A0000000854363887200170500001305E50B07
+:1000B00073000000AD48294573000000F32E10C006
+:1000C0003385CE4185487300000091481705000034
+:1000D0001305D50973000000AD48294573000000E1
+:1000E0009148170500001305050973000000B14889
+:1000F00073000000AD48730000009302E006E311B6
+:1001000055F0A94873000000456E74657220796F40
+:1001100075722067756573733A0A3E2000546F6FDD
+:10012000206C6F77212054727920616761696E0AB3
+:1001300000546F6F206869676821205472792061CC
+:100140006761696E0A00436F7272656374210A59B0
+:100150006F7520676F7420697420696E3A0A0020F9
+:10016000677565737300657300207365636F6E64F4
+:100170007300506C617920616761696E3F205B5943
+:040180002F6E5D0081
+:00000001FF
diff --git a/assembly/guessnum-random/guessnum-random.o b/assembly/guessnum-random/guessnum-random.o Binary files differnew file mode 100644 index 0000000..757d611 --- /dev/null +++ b/assembly/guessnum-random/guessnum-random.o diff --git a/assembly/guessnum-random/rvcontroller.ld b/assembly/guessnum-random/rvcontroller.ld new file mode 120000 index 0000000..bc01402 --- /dev/null +++ b/assembly/guessnum-random/rvcontroller.ld @@ -0,0 +1 @@ +../../rvcontroller.ld
\ No newline at end of file |
