Repository navigation
Releases
Releases · tuna4ll/ratasm
ratasm 0.3.0
Changed
- ratasm edits text itself again. The editor has tabs, undo and redo,
selection, the clipboard, find and replace, go to line and go to definition;
building saves every file first, F9 toggles a breakpoint on the
cursor's line, and errors and warnings are shown beside their lines. Running
$EDITORinside the panel, and theeditor.commandand
editor.line_argumentsettings, are gone. - Any folder is a project. Without a
.ratasm.tomlevery.asmfile in it is
built, the entry is the file declaring_start(ormain, linked by gcc),
and files added later are built too. The project root is the nearest folder
with a.ratasm.toml, aMakefileor a.git. - Two pages, Code and Debug. Learn and Reference are a study mode that
F1 enters and leaves; Alt+1 and
2 move within whichever pair is open. The flags are shown in the
Registers panel. F2, F3's status details,
Ctrl+K and Ctrl+Alt+A
are palette commands now.
Added
- Makefile projects: F6 runs
make, its errors are placed beside
their lines, and the program it builds is found for running and debugging.
Run a make target runs any other target.ratasm new --makecreates one. ratasm new --libc: amainthat callsprintf, linked by gcc; debugging
stops atmain.- Go to symbol (Ctrl+T) and search in files
(Alt+F) across the project; find next and previous on
F3 and Shift+F3, replace on
Ctrl+R. - The explorer lists every source, include, Makefile and note, and creates,
renames, moves and deletes files. - Files changed on disk are reloaded, or reported when they have unsaved
changes. - Conditional breakpoints, watchpoints and register writes.
- Open files and breakpoints are restored per project.
- Six lessons and ten processor-checked questions.
- Shift+F12 stops debugging, and
Alt+← / → move between panels from
anywhere.
Fixed
- A program being debugged no longer dies of SIGHUP on its first write after
continuing or stepping. - With recording on, a program runs to its exit instead of hanging for 15
seconds and failing the session. - Removing, disabling or changing a breakpoint during a session reaches GDB.
- Ctrl+F5 stops a paused debug session.
- The disassembly follows the program counter, branch operands are short and
name their targets, and the listing no longer runs past the code. ratasm runruns the program on the terminal, so it can read input.- The flags panel groups aliases of the same jump, and the explanation keeps
the name of the register being written.
ratasm 0.2.0
Changed
- The Editor panel runs your own editor inside it:
$VISUAL, then$EDITOR,
thenvi, started on the entry file when ratasm opens. Every key goes to it
except the function keys and Alt+1..4, so
building, running and debugging stay one key away. Editors that take+LINE
open at the cursor line. - When the editor exits, or during a debug session, the panel is a plain
listing of the source with its breakpoints and the stopped line. It has no
cursor; it scrolls, and Enter or Ctrl+E
opens the editor again. Files are read back from disk after editing and
before every build. - F9 asks for the line to toggle a breakpoint on, and
Ctrl+G shows an address in the memory panel. - The embedded terminals answer cursor-position, status and device-attribute
queries, so editors and programs that ask no longer time out and quit. An
editor that exits with an error leaves its last screen in Output. - Ctrl+N asks for a file name and creates it in the
editor. Closing a file no longer asks about unsaved changes, because ratasm
never holds any; quitting while the editor runs asks for a second Quit.
Removed
- ratasm's own text editor: typing, the cursor and selection, undo and redo,
copy, cut and paste, indent and dedent, bracket pairing and matching,
search and replace, go to line, go to definition, and the save commands,
with their bindings (file.save,file.save-all,file.save-as,
edit.*,search.*,navigate.go-to-line,navigate.go-to-definition). - The
editor.indent_width,editor.auto_close_pairs,
editor.highlight_current_lineandeditor.match_bracketssettings. A
configuration file that still sets them is rejected, so delete those lines.
ratasm 0.1.5
Added
- Programs now run in an interactive pseudo-terminal in the Output panel, with
keyboard and paste input, Unicode, ANSI colours, cursor movement, resizing,
scrollback and process-group stopping. - Debugged programs use the same terminal through GDB's inferior TTY. Debugger
waits run in the background, so the interface remains responsive while an
inferior waits for input. - F3 copies a truncated status message in full to Output.
- CI checks dependency advisories, licences, sources and duplicate versions
withcargo-deny.
Changed
- Ratatui, Crossterm and VT100 were updated together. This removes the
unmaintainedpastedependency and unifies text measurement on
unicode-width 0.2. - Subdued theme colours now meet WCAG's 4.5:1 normal-text contrast threshold.
Fixed
- Closing a modified buffer now asks whether to save, discard or cancel instead
of silently losing the edits.
ratasm 0.1.4
Added
- Go to definition and search look across the project. A name declared
extern
was answered with theexternline itself, and a label in another file was
reported undefined; both now resolve through the other open documents and the
project's remaining sources. Find next and find previous carry on into the
next open document. - The explorer lists the project's files rather than only the open buffers, so
a second source is something you can see instead of something you have to
remember the name of. Arrows move,Enteropens,Rre-reads the list. Tabcompletes paths in the open and save prompts, and go to definition on
an%includeline opens the file it names.- Typing
(,[,{,",'or`inserts its partner and steps over
the one already there;auto_close_pairs = falseturns that off. Ctrl+BackspaceandCtrl+Deletedelete by word, clearing a line's
indentation to the margin in one press.
Fixed
- The toolchain's paths agree with the directory it runs in. Tools are spawned
in the project root but their arguments were resolved against the caller, so
ratasm build some/projectcould not find an output directory it had just
created. - The editor draws the selection. Selecting text changed nothing on screen.
- An unclaimed chord no longer types its letter. Terminals send
Ctrl+BackspaceasCtrl+H, which the editor took for text and inserted. - The disassembly view no longer spends 44 columns before the mnemonic; the
address and byte columns are sized to the listing in hand. - Every drawn panel gets room it can use, and a compact arrangement fills the
gap between the wide and medium layouts, where one row short of the wide
threshold used to drop a page from seven panels to two. - The page bar keeps the open file visible on a narrow terminal, and the status
bar gives a long message the room it needs rather than holding a fixed set of
fields.
ratasm 0.1.3
Added
Ctrl+Alt+Aadds the active file to the project's sources and writes the
project file back. Opening a second file put it in a buffer and nowhere else,
so it was never assembled, and the only sign was a linker error about an
undefined symbol. The explorer marks any open document the build does not
know about.- The output panel wraps long tool output instead of cutting it at the right
edge, which is where the informative half of anasmerror lives, and its
border carries the last build's error and warning counts.
ratasm 0.1.2
Added
- Every panel scrolls. Only the editor had a viewport, so anything that did not
fit was never drawn and nothing said so: eighteen registers into the eight
rows a 120x30 terminal allows, or a build log three lines deep. A scrollbar
appears when there is more content than room, and the output panel follows
its newest line until the reader scrolls away from it. - The mouse works. Capture was enabled from the first release but no event was
ever read. The wheel scrolls whatever is under the pointer without taking
focus, a click focuses a panel and places the editor cursor, and clicks on
the page bar open a page or switch file. ratasmtakes more than one file: the first decides the project, the rest
are opened alongside it.
Fixed
- Every edited buffer is written before assembling. The build read files from
disk and never consulted the workspace, so an unsaved buffer was assembled
from its previous contents without a word.Ctrl+Alt+Ssaves them on demand.
ratasm 0.1.1
Fixed
- The program-counter marker is tied to the file execution stopped in. It was
drawn wherever the stopped line number matched, so in a project with more
than one source it marked an unrelated line in whatever buffer was showing. - Document lookup compares whole trailing path components rather than the bare
file name, sosrc/main.asmandlib/main.asmare no longer the same file. - Stepping into a source that is not open opens it, instead of leaving the
editor on the previous file as though execution had never left it. - Jumping to a build error goes to the file the diagnostic names. The cursor
moved in whatever document was active, which in a multi-source project is
almost never the right one, and a failed build does this automatically.
ratasm 0.1.0
Added
- NASM editor core: line-oriented buffer with exactly invertible edits,
grouped undo and redo, save-point tracking, multi-file workspace with atomic
saves, search and replace, bracket matching over tokens, symbol extraction
with NASM local-label scoping, and position-aware completion. - NASM lexer that classifies identifiers by their position in a statement, so
a label and an instruction are told apart the way the assembler does. - Build pipeline driving
nasmandld, with assembler and linker output
parsed into diagnostics carrying file, line and column. - Process runner with timeouts, concurrent pipe draining and guaranteed
reaping; external tools are never launched through a shell. - Project system:
.ratasm.tomlwith validated paths, project discovery,
scaffolding, and an implicit project for a lone source file. - GDB machine interface: value grammar parser, typed output records with token
correlation, injection-safe command builder, and a session driver with
guaranteed process cleanup. - Debugger state machine that rejects invalid transitions.
- Register model with change highlighting and hexadecimal, decimal, signed,
binary and ASCII views across all four register widths. - Memory model with a hex dump and an address-expression evaluator that never
panics on malformed input. - Breakpoints that survive across debug sessions, reconciled with the numbers
GDB assigns. - Disassembler built on
iced-x86, with ELF inspection andobjdump-style
resynchronisation after undecodable bytes. - Instruction semantics database covering data movement, arithmetic, bitwise,
shift and rotate, comparison, jumps, stack, call and return, string, syscall
and basic SIMD groups, plus an explainer that substitutes real operands. - Linux x86-64 syscall database generated from the kernel headers.
- Themes for dark, light, sixteen-colour and colour-blind-safe terminals, with
ASCII-safe glyphs for terminals without Unicode. - Terminal interface: editor, register, flag, stack, memory, disassembly,
breakpoint, output, explanation, syscall and explorer panels, with a
responsive layout that keeps the focused panel visible at any size. - Command palette with fuzzy search, and key bindings whose conflicts are
reported rather than silently shadowing one another. - Command-line interface:
new,build,runanddoctorwork without a
terminal, so the toolchain composes with Make and CI. - Call stack panel built from GDB's frame list, which preserves the repeated
frame=keys a map representation would have collapsed. - Explanations that read live register values:
RAX ← RAX + RBXbecomes
0x1 ← 0x1 + 0x2while the program is stopped. Memory operands are left
unresolved rather than guessed at. - Reverse execution: stepping and continuing backwards through GDB's process
recording, which is enabled once the program is live and can be turned off
withdebugger.record. - Scratchpad: set starting register values, run one instruction, and see which
registers and flags it actually changed. The snippet is assembled and run
natively; it is not a sandbox, and the panel says so. - Learning mode: lessons on the registers, the System V AMD64 ABI, the stack,
the flags and the Linux syscall convention, followed by questions whose
stated answers are checked against a real processor by the test suite. - Copy, cut and paste, with copied text offered to the terminal's clipboard
through OSC 52 so it works over SSH. Paste uses ratasm's own copy, because a
terminal that ignores the read request answers with silence. - Programs run on their own task, so the interface keeps drawing and reading
keys while one runs, and Ctrl+F5 stops one that will not
stop itself. - Pages. The fourteen panels are grouped into four pages — Code, Debug, Learn
and Reference — opened with Alt plus their number. Tab moves
between the panels of the open page, and a debug session opens the page that
shows the machine.
Fixed
- Register values no longer truncate to 32 bits. GDB lists the narrow
pseudo-registers (esp,eax) alongside the full ones, and taking both left
RSPholding only its low half, which broke every stack and memory read. - A debug session stops at the entry point of a
_start-only program.
-exec-run --startbreaks onmain, which assembly programs do not have, so
the program ran to completion instead of stopping. - The disassembler resynchronises one byte after an undecodable byte, matching
objdump. Letting the decoder consume the following opcode's escape byte
discarded the next valid instruction. - The flags panel is no longer blank. Filtering the narrow pseudo-registers by
name droppedeflags, which GDB never callsrflags; the widest reported
alias for each register is kept instead. - A register name six characters long no longer runs into its value:
RFLAGS
filled the whole name column, leaving no separating space. - The explanation panel describes the file execution stopped in, rather than
whichever file happens to be open in the editor. - Stopping scrolls the editor to the line it stopped on. The marker in the
gutter was usually off-screen, which made the debugger look as though it had
stopped somewhere else. - The flag panel fits its nine flags to the panel's width, so the list of
conditional jumps that would be taken is not pushed off the bottom. - The system call list is only as tall as it has matches, instead of leaving a
panel-sized gap above the details, and shows the NASM example that was
already in the database.