| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
|
| |
This commit also includes changes to devices according to the latest
devices specification, in particular the math and system devices.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Library names have changed from using underscores as separators to using
hyphens for separators. phosphor has a dependency on event-queue, which
was also affected by this change.
|
| |
|
|
|
|
|
| |
This required passing the verbose flag state down into the DebugState
structure.
|
|
|
|
|
|
|
| |
Previously, having debug mode turned on would automatically turn on
verbose mode, even if the verbose mode flag hadn't been set by the user.
This is undesirable if you just want to test a fragment of code and
see a concise stack state without all the verbose output.
|
| |
|
|
|
|
|
| |
This includes a fix to prevent the cursor from being marked as inactive
while at least one mouse button is still being held.
|
|
|
|
|
|
|
| |
The metadata specification has changed to use '/' as the separator
between the program name and program version in the name string, and
each author line is now no longer followed by the year in which the
author last contributed to the program.
|
|
|
|
|
|
|
|
|
|
| |
Because the program counter is incremented immediately after an
instruction byte is loaded, the value of the program counter reported
by a debug instruction was actually the address of the following byte.
This made the SYM symbol name line in the debug output report the wrong
symbol name in some situations.
This was fixed by decrementing the value used.
|
|
|
|
|
|
|
|
|
|
| |
When opening the previously-visited directory in the file device, the
directory data is read from a cache, preventing the need to have it
regenerated from scratch. The directory data includes the selected
child, which meant that instead of child 0 being selected as per the
specification, the previously-selected child was selected instead.
To fix this, the child is deselected as the directory data is cached.
|
|
|
|
|
| |
This was erroneously set to 0 from before the memory device was
implemented.
|
|
|
|
|
|
|
|
| |
In programs where the same sprite is drawn many times repeatedly, a lot
of time is saved by caching the transformed sprite data instead of
having to recalculate it for every draw operation. No testing has been
done on the efficiency improvements this offers, but it doesn't seem
like it could have any downsides.
|
|
|
|
|
| |
Writing a value to the pointer and length ports wasn't working, because
the cached write was never getting committed.
|
|
|
|
|
|
|
|
|
|
|
| |
An overflow error was causing the line drawing method to loop forever
any time a line of length 0x4000 (16384) or longer was drawn. The issue
was occurring because both e1 and dx (or dy) would have a value of at
least 0x4000, and so on lines 291/292 the sum would exceed 0x8000, the
maximum value of an i16. The value would then wrap and break the
assumptions of the line drawing algorithm, causing it to loop forever.
This was fixed by increasing the size of the affected types.
|
|
|
|
|
| |
A copy-paste error made all vertical scroll events register instead as
horizontal scroll events.
|
|
|
|
|
|
| |
This commit updates bedrock-asm to v4.0.6, which fixes an issue where
the root source unit of a project could sometimes be merged after
library code, preventing the program from running correctly.
|
|
|
|
|
|
|
|
|
|
|
|
| |
When determining whether or not to draw each pixel of a textured line
or rectangle, the modulo-by-eight operation was being performed on a
signed value, which was returning a negative value when the pixel being
drawn was off-screen. When the negative value was then converted to an
unsigned value, the result was close to usize::MAX, and was causing an
out-of-bounds array access.
To fix this, the value is converted to an unsigned value before taking
the modulo.
|
|
|
|
|
| |
This commit updates bedrock-asm to v4.0.5, which adds a change where
empty source files will no longer be merged into the final source file.
|
|
|
|
|
| |
Debug messages are now printed with a blue [INFO] prefix, to match the
style of the information messages printed by the rest of the project.
|
|
|
|
|
| |
The stack state when halting was previously being printed even outside
of debug mode.
|
|
|
|
|
| |
This ensures that no additional program output will be printed after
the debug-mode halt message is printed.
|
|
|
|
|
|
|
|
| |
File and stream data is flushed on drop, and if flushing fails a panic
is thrown, which prints a crash message to the terminal. Since we can't
do anything if the write fails, and because file and stream writes are
approached with a best-effort attitude, we suppress the errors to
prevent the user from seeing them and getting concerned.
|
|
|
|
|
|
| |
This commit updates bedrock-asm to v4.0.4, which fixes an issue where
the reported source location of the original definition of a redefined
symbol was incorrect.
|
|
|
|
|
|
| |
Writing to the input transmission port of the standard input stream no
longer clears the input queue. The only way to clear an input queue is
to write to the associated queue port.
|
|
|
|
|
|
| |
This commit updates bedrock-asm to v4.0.3, which fixes an issue where
the root source unit of a project could sometimes be merged after
library code, preventing the program from running correctly.
|
|
|
|
|
|
|
|
|
| |
The memory address of the most recent symbol is now displayed next to
the name of that symbol in the emulator debug output, to make it easier
to see how close the program counter is to that symbol.
The source location of that symbol is now also shown as dimmed to make
it less distracting.
|
|
|
|
|
|
|
|
|
|
|
| |
In the case that a program with an adjacent symbols file is added to a
system-wide programs folder by symbolically linking to the bytecode
file of the program, and the program is run via the symbolic link, the
symbols file in the original directory will not be found or loaded.
To fix this, the path to the symbolic link will now be resolved to the
path of the bytecode file in the original directory, where the symbols
file can be found.
|
|
|
|
|
|
|
|
| |
Bold should only be used for important messages, such as error and
warning messages.
This commit also moves the white colour change to before the colon, to
match the style used in the bedrock-asm library.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The project previously used the `time` crate for getting the current
time in the local timezone. It was discovered that the time crate would
fail to return the local time when the program used multiple threads,
because of concerns that the other threads could modify timezone-related
environment variables while the timezone was being read from the system
and create a soundness issue. A second program thread was introduced
recently by commit 1a830a3 to provide non-blocking reads of standard
input for the local stream device, and so the time returned by the
clock device was falling back to UTC.
To fix this, the `time` crate has been replaced by the `chrono` crate
which does not suffer from this restriction, and in any case seems to
be the more popular of the two anyway.
|
|
|
|
|
| |
Removed trailing periods, removed "exiting" from error messages, and
made error details print not in bold.
|
|
|
|
|
| |
This updates the bedrock-asm dependency so that we can use the new
source merging strategy added in version 4.0.2.
|
|
|
|
|
|
| |
This is to match the message format printed by the bedrock-asm crate.
fix
|
|
|
|
|
|
| |
The assembler saves out symbols files, which are loaded automatically
by the emulator when present. The name and location of the most recent
label is displayed with the debug information when symbols are loaded.
|
|
|
|
|
|
| |
This is to assist with debugging, when a program hasn't yet implemented
its own mouse cursor. Phosphor had to be updated to properly support
this.
|
|
|
|
|
| |
Without this, the otherwise normal default screen dimensions of 800x600
would be scaled to a physical size of 2400x1800 at a zoom factor of 3.
|
|
|
|
|
|
|
|
|
|
| |
When a relative path with only one path component is passed to the
assembler, the parent of that path cannot be determined and so the
project libraries descending from that parent cannot be included in
the program. To fix this, we canonicalize the path before it is used.
This also makes the path comments generated for the project source
files more stable and readable.
|
|
|
|
|
|
|
|
| |
The unwrap_or for the the dimensions value was to get around the fact
that we don't have guaranteed dimensions at this point. It makes it
look like something more important is happening though, so instead we
just make the config struct mutable and overwrite the dimensions field
with the real value when we get access to it.
|
|
|
|
| |
This more accurately reflects its function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a complete rewrite and restructure of the entire emulator
project, as part of the effort in locking down the Bedrock specification
and in creating much better tooling for creating and using Bedrock
programs.
This commit adds a command-line argument scheme, an embedded assembler,
a headless emulator for use in non-graphical environments, deferred
window creation for programs that do not access the screen device,
and new versions of phosphor and bedrock-core. The new version of
phosphor supports multi-window programs, which will make it possible to
implement program forking in the system device later on, and the new
version of bedrock-core implements the final core specification.
|
|
|
|
|
| |
The mapping of draw codes to draw operations didn't match the screen
device specification. This error was introduced in commit 6b3796c.
|
| |
|
|
|
|
|
| |
This version of bedrock_core conforms to the final Bedrock core
specification, which will not be changed from this point forward.
|
|
|
|
|
|
|
|
|
|
| |
When the DB4 instruction is evaluated, a single '.' character will be
printed to stdout if the return stack is empty and the working stack
contains a single 0xff byte, otherwise a single 'X' character will be
printed to stdout.
This is to facilitate unit testing the instruction set with a Bedrock
program, from within the emulator.
|
| |
|
|
|
|
|
|
|
|
| |
The most recently closed directory listing is cached instead of being
discarded. The next time a directory is to be opened, if the file path
is the same as the cached directory, the cached directory listing is
used in order to save the entire listing from having to be regenerated.
This is expected to result in performance gains on Windows.
|