jverkoey / windfish Goto Github PK
View Code? Open in Web Editor NEWA tracing disassembler & UI for Gameboy ROMs — integrated with Sameboy for emulation & debugging.
License: Apache License 2.0
A tracing disassembler & UI for Gameboy ROMs — integrated with Sameboy for emulation & debugging.
License: Apache License 2.0
It should jump to the location within the same project.
When a label is clicked, the previous viewport should be pushed onto a navigation stack so that it can be popped back.
This will accomplish a few things:
Also stop storing the bank filename mapping as this should be computable from the disassembly source.
This will enable the disassembler to treat any call/jp addresses within the region as mapped to the destination region. This will be particularly handy for working with the test ROMs as they frequently copy code into RAM before running it.
The reverse mapping can be useful as well: if the emulator detects it is running in a mapped region it can highlight the code at the source region instead.
Right now it always assumes the selected bank is $01, which isn't necessarily accurate. If the selected bank isn't explicitly known, then it should be indicated as such in the UI (likely by not showing any selected bank at all).
To standardize on terminology.
Some options:
We may want to initiate disassembly after a period of 5 seconds or so to avoid unnecessary runs while edits are happening. If a new run is initiated while another run is active, the active run should be terminated.
This makes it hard to find the new region, particularly if there are a large number of regions.
This bug affects all tables with an add button.
This should improve the likelihood of blargg/instr_timing/instr_timing
passing, as it relies on the serial interrupt being fired.
Step into can continue stepping one instruction at a time, but step over should always move to the "next" apparent line of code.
This can easily happen when renaming a label with a scope. A quick improvement would be to strip the scope prefix from the label name when double-clicking it to edit it.
This will help verify that the checksums of assembling the disassembly matches the checksum of the ROM and that no errors were introduced as a result of a bug in Windfish or the project configuration.
Doing so will require integrating the rgbds tool into the Windfish UI in some manner.
And vice-versa. This will be to show that the emulation is running.
The viewport gets reset to bank 0 at the top rather than staying fixed to the current view.
A related bug is that if the bank being debugged is not open when a breakpoint is hit, then the bank's source will be opened but the correct location won't be jumped to until at least one more emulation step occurs. There is likely some race condition happening between loading the bank's source and the ability to jump to a given line in the source.
This appears to have broke after migrating to a xib-based menu.
This will allow projects to automatically retrieve symbolic information for the rom.
This will enable comparison of the generated disassembly with the rom's binary to ensure correctness.
This will clarify simpler methods.
This will enable larger structural organization of the disassembly.
One way to do this would be to allow a filename to be associated with a function. Doing so would cause the function's entire scope to be moved to that file. This file would in turn be imported from the appropriate bank.
When an instruction can be inferred as having multiple types, this should be surfaced in the UI as a "fixit"-style suggestion to select one of the types as the preferred type.
This command should continue execution until a layer is popped off of the callstack. If there are no layers to pop off then this command should be disabled.
The emulator pane should enable the following features:
Some open questions:
Some examples of errors:
The blargg tests copy their tests into RAM from $4000 to $C000. KoholintIsland only supports showing disassembly results for the cartridge, meaning it's not possible to visualize and step through the instructions for these tests in a meaningful way..
This primarily affects macros, which almost always end up representing more than three bytes of information.
E.g. x86 supports a variety of 3+ byte opcodes: https://en.wikipedia.org/wiki/X86_instruction_listings
This might already be working somewhat, but it needs to be verified. Some places in the CPU implementation may assume only a single nested layer of opcode tables.
E.g. main.else_01_0245:
shouldn't interrupt the scope line for main
.
This will make it easier to see which line was jumped to.
E.g. typing in 100
should be interpreted as 0x64
while 0x100
should be interpreted as 0x100
.
The project and its emulator currently continue running in the background even after the project is closed. Only full termination of the IDE causes emulation to stop.
When clicking between files, the scroll position from the previous file propagates to the selected file, which is unexpected. Scroll positions should be maintained on a per-file basis and restored when a file is selected.
It's currently only possible to search within a single source file.
There are two primary phases to disassembly:
Phase #2 can only begin once phase #1 has concluded. Phase #2 is likely the easiest part to parallelize because each ROM bank's attributed text can be generated in parallel without any overlap.
Phase #1 will be harder to parallelize. This will require exploring how to allow runs to happen in parallel to one another, merging the results in the same order that runs were initiated in order to preserve consistency across multiple disassembly invocations.
The only way to restart emulation right now is to close Windfish and reopen the project.
They are currently drawn as white squares with the accessibility label drawn over top. Ideally we are using the same symbol icons on 10.15 that we're using on 10.11+.
The script should be provided with the macro's argument values. This will enable the script to react to macro values and take action (e.g. registering a new executable region).
This could be used to back-propagate function argument types through to immediates.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.