Skip to content

Releases: TheThirdOne/rars

Lots of small improvements

27 Feb 06:16
Compare
Choose a tag to compare

Its been a while since the last update so here's a new stable version.

Improvements:

  • Color options for the editor that allow dark themes (#67, #99). Thanks to @XLPhere for adding this.
  • Basic representation of jumps is now more intuitive (#89).
  • Added an example program for the game mastermind (#109). Thanks to @EmmanuelLazard for adding this.
  • More psuedo-instructions (#122, #144).
  • There is an option to use the main assembly file for the CWD (#123). Thanks to @giancarlopernudisegura for adding this.
  • CSRs are now printable from the CLI (#136).
  • Better error message for out of range immediates (#139).
  • .global is now an alias for .globl (#152).
  • Tab while selecting multiple lines now indents all of the lines (#168). Thanks to @Wakeful-Cloud for adding this.
  • Added file open support (#169). Thanks to @Wakeful-Cloud for adding this.

Bugfixes:

  • InstructionCounter now also counts B and J type instructions and InstructionStatistics works as intended (#21, #120). Thanks to @giancarlopernudisegura for fixing this.
  • The scroll position in the syscall help now defaults to the top (#86, #87). Thanks to @cypok for fixing this.
  • Fixed bugs in fmv.w.x, fgt.s and such. (#90, #131, #140, #141). Thanks to @ProfPierce, @ziul123 and @ShadowCreator250 for pointing these out.
  • Fixed text color on tabs in MacOS (#130). Thanks to @Juicestus for fixing this.
  • Fixed bugs in floating point comparison psuedo-intructions (#131, #167). Thanks to @ziul123 and @petitnau for fixing this.
  • Closing confirm dialog (ecall 50) now correctly returns CANCEL if closed (#145). Thanks to @helderdaniel for finding this.
  • Fixed files in jar not being found when .jar is in path (#147). Thanks to @pond-nj for finding this.
  • Reading from /dev/null no longer results in a null pointer exception (#150). Thanks to @FrBrGeorge for fixing this.
  • Fixed a bug with fmadd.s and 0.0 (#158). Thanks to @helderdaniel for finding this.
  • Fixed SystemCall Exit using the last exit code instead of 0 (#170). Thanks to @rladenson for finding this.
  • fcvt now appropriately uses rounding mode instead of always using RNE (6ed3068).

Continuous build

16 Feb 20:37
Compare
Choose a tag to compare
Fix SystemCall Exit using the last exit code instead of 0

Fixes #170

Support for 64 bit mode

15 Jul 04:10
Compare
Choose a tag to compare

RARS has uses 32 bit wide registers and therefore used the base RISC-V instruction set rv32i. However, there is also a rv64i base instruction set which widens registers to 64 bits and defines new instructions to handle 32-bit modular arithmetic. A list of instructions added by rv64i and brief explanation of the general differences between rv32 and rv64 is on the wiki. This release adds an option to switch between the base instruction sets.

When I initially ported RARS, I did not include support for rv64i because it seemed unnecessary. However, relatively recently, I became aware that a number of people teaching with RARS would like support for rv64i because the textbook they use uses rv64i and it can be confusing to students to deal with translating the minor differences. Additionally, the software ecosystem for RISC-V supports rv64i much better than rv32i so it is a nice bonus to allow better interoperability with other software.

Some relevant issues that include discussion about this major addition are #73, #74, and #78.

Minor Additions:

  • Added the fp alias for x8 (#64). Thanks to @martinberger for pointing this out.
  • @jowens added a tool that logs instructions executed, and memory accesses (#58, #68)
  • Added mars-like system calls for doubles (#66)
  • Non-standard format jalr t0,-100(t1) used in H&P now works (#81). Thanks to @BenjaminBeichler for adding this.

Bugfixes:

  • Fix execution of loads and store with negative offsets from binary values (e8ae398)
  • Loading the word 0 now correctly causes an illegal instruction exception (ef4862a)
  • Digital Lab Sim's help text now correctly displays addressees when working with non-default memory configurations. (#69). Thanks to @phummel for fixing this.
  • Fix missing tooltips for some CSRs. (3c970b9)
  • Fix timertool example to not use the label time (#79, #80). Thanks to @darnuria for fixing this.
  • Fix incorrect assertions that make timertool.s hang (#80). Thanks to @darnuria for finding this.
  • Keyboard Simulator now correctly locks and therefore doesn't freeze RARS (#82). Thanks to @quinnlp for finding this.
  • Fix JALR incorrectly jumping when source register = destination (ee095d5)

Test build for PR #78

15 Jul 00:40
Compare
Choose a tag to compare

Test build for PR #71

12 Mar 07:48
Compare
Choose a tag to compare

Better Floats and new Doubles

27 Nov 00:36
Compare
Choose a tag to compare

Major Improvements:

  • Complete bit accurate floating point support
    • Floating point operations are now performed with JSoftFloat rather than Java's native float. This allows setting the fflags CSR and obeying non-default rounding modes.
    • Some previously unknown bugs were also fixed
    • All floating point tests from riscv-tests now pass
  • Improved GCC and clang compatibility (#16)
    • Various directives for starting sections have been added (.sdata, .section, ...)
    • Undocumented psuedo-ops fgt.s, fge.s are now supported (66f1f42)
  • Support for double extension
    • With the two above changes, it made sense to also add the D extension as it helps with compatibility and is more relevant as detailed lessons about floating poitn can now be taught with RARS
    • This necessitated a change in UI for the floating point register window. With the hexadecimal setting, values last accessed as doubles will be 64 bit wide and values accessed as floats will be 32 bit wide.
  • CSRs are much better supported (#2, #49, #52, #61, #62)
    • time CSR has been added as a reference to system time
    • CSR instructions can now take the name of the register rather than number as an argument (c1cd1af)
    • Write protected read ignored bits (WPRI) in CSRs are actually write protected now. (12e0b96)
    • CSRs numbers larger than 0xFF can be assembled (c40643a)

Bugfixes:

  • Bitmap display tool now works with stores smaller than a word (#47). Credit to @PedroAugustoRamalhoDuarte for finding this
  • Settings properly persist over restarts again (#46). Credit to @ProfPierce for finding this
  • It is no longer possible to deadlock the UI by trying to connect a tool (#48). Credit to @PedroAugustoRamalhoDuarte for finding this
  • The instreth CSR now has the correct number (#49). Credit to @mvlamar for finding this
  • Any CSR number in range can be assembled (#52). Credit to @mvlamar for finding this
  • Fix bugs in the CLI, (0703e79)
  • Integer division operations no longer set divide by zero flag in fcsr (0ebea26).
  • Fix some floating pointer instruction bugs (dc83289).

Internal changes:

  • Code was refactored into a src directory
  • Tests that catch the some of the most common typos have been added.

Bugfix release

22 Nov 08:15
Compare
Choose a tag to compare

Just a small update to give a version number to the small improvements that have been added over the last month.

Bugfixes:

  • UI no longer deadlocks from repeated clicking of step or run button (#42). Credit to @BenjaminBeichler for finding this
  • @rmnattas added some the missing jal t0 and jalr t0 psuedo-ops (#43)

Other improvements:

  • GCC compatability has improved through the addition of %hi and %lo and new directives (#16)
  • Support for UTF-8 in string related system calls was finished (#28)

Java API Release

19 Jun 22:57
Compare
Choose a tag to compare

This release adds a Java API that allows quick, configurable automated simulation. It is over 10x faster than using the CLI and has more access to test programs more thoroughly. This should help any educators make program runners to evaluate students programs.

There are some important issues about the interface as it stands:

  • There isn't a standard program runner for educators to quickly modify to suit their needs
  • There isn't much documentation regard how exactly to use the inteface

The current best references are rars.api.Program which implements the bulk of the interface and Test.java which uses it to run the integration test for RARS now.

If that leaves something unclear or you would like some direction in the creation of a program using that interface, please comment in #13. Discussion on how to improve the API further is also welcomed.

Other Improvements:

  • Set up TravisCI to automatically build the latest commit
  • Used a profiler to speed up simulation (mainly noticeable with the new API)
  • The wiki can now be autofilled with system call and instruction information
  • @esperz2019 added more instruction types to InstructionCounter
  • cycle(h) and intret(h) now exist
  • @zacharyselk added a timer tool which follows the privileged specification.
  • @TaylorZowtuk added support for unicode (specifically UTF-8).

Bug Fixes:

  • Fixed find and replace so it actually works. Credit to @mvlamar for finding this
  • Removed NOP instruction which shouldn't exist. Credit to @Andreymazepas for finding this.
  • Autocomplete and hover tooltips have been readded.
  • Fixed the size checks for JAL and branch immediates. Credit to @erikeidt for finding this.
  • CSRI encoding is correct now. Credit to @Sustrak for finding this
  • Backstepping works properly for CSR and floating point registers
  • The register window no longer shows 32 as the number for the pc
  • LUI and AUIPC now follow GCC for notation regarding immediates. Credit to @BenjaminBeichler for pointing this out.
  • KeyboardAndDisplay simulator now works properly. Credit to @mehrabmehdi for the report and @zacharyselk for the detailed information.

Documentation Release

21 Mar 22:06
Compare
Choose a tag to compare

This release added some checks to make sure that missing properties files wouldn't crash on launch. This was revealed as an issue in #9.

That issue also pushed me to make a script to build jars so that should be a easily reproducible.

Also @Obijuan made a pull request to update the documentation for the ReadString syscall.

Bugfix release

28 Aug 17:54
Compare
Choose a tag to compare

At the request of @josepll, this release incorporates the bug fixes that have been made over the last year.

Namely the bugfixes are:

  • Fix funct field on BLTU, BGE, and BGEU
  • Fix lbu alignment and add test to verify it
  • Removed compact psuedo-ops code (because it wouldn't work with riscv anyway)
  • Fix la and friends in the aftermath of the auipc fix
  • Fix bug where AUIPC used PC+4 instead of PC