Reverse engineer and rewrite real mode dos programs!

Overview

Spice86 - A PC emulator for real mode reverse engineering

Spice86 is a tool to execute, reverse engineer and rewrite real mode dos programs for which source code is not available.

It requires java 17.

Approach

Rewriting a program from only the binary is a hard task.

Spice86 is a tool that helps you do so with a methodic divide and conquer approach.

General process:

  • You start by emulating the program in the Spice86 emulator.
  • This emulator allows you to gradually reimplement the assembly code with your java methods
  • This is helpful because:
    • Small sequences of assembly can be statically analyzed and are generally easy to translate to a higher level language.
    • You work all the time with a fully working version of the program so it is relatively easy to catch mistakes early.
    • Rewriting code function by function allows you to discover the intent of the author.

Running your exe

This is a java program, you run it with the regular java -jar command. Example with running a program called file.exe:

java -jar spice86-1.27.0.jar file.exe

com files and bios files are also supported.

Dynamic analysis

Spice86 speaks the GDB remote protocol:

  • it supports most of the commands you need to debug.
  • it also provides custom GDB commands to do dynamic analysis. This is where the magic happens.

Connecting

You need to specify a port for the GDB server to start when launching Spice86:

java -jar spice86-1.27.0.jar file.exe --gdbPort=10000

Spice86 will wait for GDB to connect before starting execution so that you can setup breakpoints and so on.

Here is how to connect from GDB command line client and how to set the architecture:

(gdb) target remote localhost:10000
(gdb) set architecture i8086

Vanilla GDB

You can add breakpoints, step, view memory and so on.

Example with a breakpoint on VGA VRAM writes:

(gdb) watch *0xA0000

Viewing assembly:

(gdb) layout asm

Removing a breakpoint:

(gdb) remove 1

Searching for a sequence of bytes in memory (start address 0, length F0000, ascii bytes of 'Spice86' string):

(gdb) find /b 0x0, 0xF0000, 0x53, 0x70, 0x69, 0x63, 0x65, 0x38, 0x36

GDB does not support x86 real mode segmented addressing, so pointers need to refer to the actual physical address in memory. VRAM at address A000:0000 would be 0xA0000 in GDB.

Similarly, The $pc variable in GDB will be exposed by Spice86 as the physical address pointed by CS:IP.

Custom commands (where the magic happens)

The list of custom commands can be displayed like this:

(gdb) monitor help

Dump everything

(gdb) monitor dumpall

Dumps everything described below in one shot. Files are created in the current execution folder.

Dump the memory to a file

(gdb) monitor dumpmemory path/to/dump.bin

DOS programs can rewrite some of their instructions / load additional modules in memory. It's a good idea to get a memory dump to see the actual assembly being executed.

Dump the functions

(gdb) monitor dumpfunctions path/to/functions.txt

This will dump dynamic information about the functions that have been encountered in the program you are reverse engineering. For each function:

  • Their address (both in segmented and physical addressing)
  • Their name if you provided an override (more about that later)
  • The addresses of the returns that have been reached and their type (NEAR / FAR / INTERRUPT / MACHINE)
  • The addresses of the returns that did not make the RET instruction point to the expected caller (some programs use RET as jump ...)
  • The list of functions that calls it
  • The list of functions it calls

Example:

function unknown_0x2538_0x151_0x254D1 returns:3 callers:1 called: 4 calls:3 approximateSize:11482
 - ret: FAR 0x2538:0x26AF/0x27A2F
 - ret: FAR 0x2538:0x2D41/0x280C1
 - ret: FAR 0x2538:0x2E2B/0x281AB
 - caller: unknown_0x1ED_0xC108_0xDFD8
 - call: vgaDriver.loadPalette_0x2538_0xB68_0x25EE8 overriden
 - call: vgaDriver.waitForRetraceInTransitions_0x2538_0x2572_0x278F2 overriden
 - call: unknown_0x2538_0x2596_0x27916

Here you can see that:

  • The generated name unknown_0x2538_0x151_0x254D1 can be copy pasted directly in java to start overriding it.
  • The physical address of the function is 0x254D1 in RAM (2538:0151 segmented)
  • It spawns 11482 bytes (estimated distance between the entry point and the returns)
  • Emulator encounterd several returns and it is called by one caller only
  • It calls 3 other methods and 2 are overriden already

You can also dump the functions as CSV for import and processing in a spreadsheet:

(gdb) monitor dumpfunctionscsv path/to/functions.txt

Generate Java / Kotlin code

#Java
(gdb) monitor dumpJavaStubs path/to/stub.java

#Kotlin
(gdb) monitor dumpKotlinStubs path/to/stub.kt

This will generate java / kotlin source code with:

  • The function calls and how to override them
  • Accessors for global variables (memory bytes accessed via hardcoded address)

Special breakpoints

Break after x emulated CPU Cycles:

(gdb) monitor breakCycles 1000

Break at the end of the emulated program:

(gdb) monitor breakStop

Displaying additional buffers

Sometimes it's useful to see what kind of images programs are generating in memory before display.

# Displays the content of memory at address 0x123AB as a buffer of resolution 320x200
(gdb) monitor vbuffer add 0x123AB 320x200

# Displays the content of memory at address 0x123AB as a buffer of resolution 16x16, scaling it 10 times so that it's not tiny
(gdb) monitor vbuffer add 0x123AB 16x16 10

# Remove the buffer display
(gdb) monitor vbuffer remove 0x123AB

# List information about currently displayed buffers
(gdb) monitor vbuffer list

#Refreshing screen or buffers while debugging
(gdb) monitor vbuffer refresh

Detailed reverse engineering process

Concrete example with Cryo Dune here.

First run your program and make sure everything works fine in Spice86. If you encounter issues it could be due to unimplemented hardware / DOS / BIOS features.

Then run your it with the GDB server enabled and set a breakpoint on emulated program stop:

(gdb) monitor breakStop
(gdb) continue

Run some interesting actions in your emulated program and quit it from the program. If you don't have this option, you can also break after a defined number of Cycles with breakCycles.

When GDB gives you control due to breakpoint being reached:

  • Dump the memory with monitor dumpmemory
  • Dump the functions with monitor dumpfunctions
  • Dump the functions as CSV with monitor dumpfunctionscsv
  • Dump the java stubs with monitor dumpjavastubs

Open the CSV file in a spreadsheet, filter functions that are overridable and not overriden:

Overridable means that the function calls no other function, or that it calls only overridden functions as calling Java from ASM is supported but ASM from Java is not.

If you sort by approximate size, you are likely to get the easiest targets first.

Note that approximate size does not always reflect the real size of the function as it is the difference between entry point address and encountered return address. A small function can sometimes be a monster that only got partially executed.

Also note that other values like callers can be wrong because sometimes the programs use returns to do jumps and this messes up the call stack analysis.

Open the memory dump in a disassembler / decompiler (I personally use ghidra).

In the screenshot, physical address of unknown_0x1ED_0xA1E8_0xC0B8 will be C0B8. The name contains both the segment:offset and physical addresses.

Go to this address:

As you can see, it is 2 lines and is very simple:

  • Instruction at address C0B8 increases the byte at address DS:47A8 by one
  • Instruction at address C0BC does a near ret

From there you can re-implement (override) the function and continue with the next one (see next chapter on how to do so).

Once you have a stub or the function implemented, you can put a java breakpoint in it to get a better understanding on how when the function is called and how it interacts with the rest of the code.

It is useful to document the relevant inputs and outputs.

To get a better understanding of the environment of a function, and especially what it calls, you can check it in the dump provided by dumpfunctions

Overriding emulated code with Java code

This is where things start to get fun!

You can provide your own Java code to override the program original assembly code.

Defining overrides

Spice86 can take in input an instance of spice86.emulator.function.OverrideSupplier that builds a mapping between the memory address of functions and their java overrides.

For a complete example you can check the source code of Cryo Dune RE.

Here is a simple example of how it would look like:

package my.program;

// This class is responsible for providing the overrides to spice86.
// There is only one per program you reimplement.
public class MyProgramOverrideSupplier implements OverrideSupplier {
  @Override
  public Map<SegmentedAddress, FunctionInformation> generateFunctionInformations(int programStartSegment,
                                                                                 Machine machine) {
    Map<SegmentedAddress, FunctionInformation> res = new HashMap<>();
    // In more complex examples, overrides may call each other
    new MyOverrides(res, programStartSegment, machine);
    return res;
  }

  @Override
  public String toString() {
    return "Overrides My program exe. class is " + this.getClass().getCanonicalName();
  }
}

// This class contains the actual overrides. As the project grows, you will probably need to split the reverse engineered code in several classes.
public class MyOverrides extends JavaOverrideHelper {
  private MyOverridesGlobalsOnDs globalsOnDs;

  public MyOverrides(Map<SegmentedAddress, FunctionInformation> functionInformations, int segment, Machine machine) {
    // "myOverides" is a prefix that will be appended to all the function names defined in this class
    super(functionInformations, "myOverides", machine);
    globalsOnDs = new MyOverridesGlobalsOnDs(machine);
    // incUnknown47A8_0x1ED_0xA1E8_0xC0B8 will get executed instead of the assembly code when a call to 1ED:A1E8 is performed.
    // Also when dumping functions, the name myOverides.incUnknown47A8 or instead of unknown
    // Note: the segment is provided in parameter as spice86 can load executables in different places depending on the configuration
    defineFunction(segment, 0xA1E8, "incDialogueCount47A8", this::incDialogueCount47A8_0x1ED_0xA1E8_0xC0B8);
    defineFunction(segment, 0x0100, "addOneToAX", this::addOneToAX_0x1ED_0x100_0x1FD0);
  }

  public Runnable incDialogueCount47A8_0x1ED_0xA1E8_0xC0B8() {
    // Accessing the memory via accessors
    globalsOnDs.setDialogueCount47A8(globalsOnDs.getDialogueCount47A8() + 1);
    // Depends on the actual return instruction performed by the function, needed to be called from the emulated code as
    // some programs like to mess with the stack ...
    return nearRet();
  }

  private Runnable addOneToAX_0x1ED_0x100_0x1FD0() {
    // Assembly for this would be
    // INC AX
    // RETF
    // Note that you can access the whole emulator to change the state in the overrides.
    state.setAX(state.getAX() + 1);
    return nearRet();
  }
}

// Memory accesses can be encapsulated into classes like this to give names to addresses and make the code shorter.
public class MyOverridesGlobalsOnDs extends MemoryBasedDataStructureWithDsBaseAddress {
  public DialoguesGlobalsOnDs(Machine machine) {
    super(machine);
  }

  public void setDialogueCount47A8(int value) {
    this.setUint8(0x47A8, value);
  }

  public int getDialogueCount47A8() {
    return this.getUint8(0x47A8);
  }
}

To avoid mistakes, you can copy paste the java stubs generated by monitor dumpjavastubs

Loading overrides

Let's suppose that the overrides defined in the previous paragraph are in overrides.jar. Here is how you could launch Spice86 to use them:

java -cp 'overrides.jar:spice86-1.27.0.jar' spice86.main.Main file.exe --overrideSupplierClassName=my.program.MyProgramOverrideSupplier

If you just want to use the function names and not the overrides, you could add --useCodeOverride=false to the command line.

If you build a project around this, just call Spice86 like this in your main:

public static void main(String[] args) {
  Spice86Application.runWithOverrides(args, MyProgramOverrideSupplier.class);
}

Generating overrides

The command dumpJavaStubs generates a text file with some java stubs that could be generated automatically.

(gdb) monitor dumpJavaStubs path/to/stubs.txt

Generated stub look like this:

...
// defineFunction(0x2538, 0x151, "unknown", this::unknown_0x2538_0x151_0x254D1);
public Runnable unknown_0x2538_0x151_0x254D1() {
  return farRet();
}
        ...

You can copy paste the stub to your code.

Misc

C Drive

It is possible to provide a C: Drive for emulated DOS functions with the option --cDrive. Default is current folder. For some games you may need to set the C drive to the game folder.

Emulated program arguments

You can pass arguments (max 127 chars!) to the emulated program with the option --exeArgs. Default is empty.

Time

The emulated Timer hardware of the PC (Intel 8259) supports measuring time from either:

  • The real elapsed time. Speed can be altered with parameter --timeMultiplier.
  • The number of instructions the emulated CPU executed. This is the behaviour is activated with parameter --instructionsPerSecond and is forced when in GDB mode so that you can debug with peace of mine without the timer triggering.

Screen refresh

Screen is refreshed 30 times per second and each time a VGA retrace wait is detected (see VideoBiosServicesDispatcher::tick3DA).

Emulator features

CPU:

  • Only 16 bits instructions are supported, memory size is 1MB
  • The only supported addressing mode is real mode. 286/386 Protected mode and the related instructions are not implemented.
  • Instruction set is (hopefully!) fully implemented for 8086, and validated via automated tests.
  • For 80186, BOUND, ENTER and LEAVE instructions are missing.
  • For 80286, instructions related to protected mode are not implemented
  • For 80386, protected mode and 32 bits instructions are not implemented. FS and GS registers are supported.
  • No FPU instruction implemented apart those used for FPU detection.

Graphics:

  • Only VGA mode 0x13 is implemented

DOS:

  • Part of int 21 is implemented. Identifies itself as dos 5.0 for now.

Input:

  • Keyboard
  • Mouse (callback in mouse driver not implemented yet)
  • No joystick for now

CD-ROM:

  • No MSCDEX support for now. Some games, like DUNE, can be copied entirely from the CD and run from the hard drive.

Sound:

  • No sound for now, games will not detect sound blaster or adlib.

Compatibility list available here.

How to build

Locally you will need:

  • Java 17
  • Maven 3.6+
mvn clean install

How to debug

The main class is

spice86.main.Main

If you get this error:

Error: JavaFX runtime components are missing, and are required to run this application

Then the selected main class is the wrong one.

Some screenshots

Cryo dune:

Prince of persia:

Stunts:

Comments
  • Opening certain files causes a NullPointerException

    Opening certain files causes a NullPointerException

    Version tested: 1.29.0

    I have attempted to run 3 games: PoP, Dune and Monkey Island. And all of them spit out different errors, but they all fail at the same line.

    Prince:

    [Executor] s.e.l.ExecutableFileLoader - Program entry point is 0x16D0:0x2C4
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] s.e.i.dos.DosInt21Handler - MODIFY MEMORY BLOCK size=10159, blockSegment=477
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] s.e.i.dos.DosInt21Handler - GET INTERRUPT VECTOR INT 0x0, got 0x0:0x0
    [Executor] s.e.i.dos.DosInt21Handler - SET INTERRUPT VECTOR FOR INT 0x0 at address 0x16D0:0x366
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET CURRENT DEFAULT DRIVE
    [Executor] s.e.i.dos.DosInt21Handler - GET CURRENT DIRECTORY responseAddress=0x198C:0x73FB
    [Executor] s.e.i.dos.DosInt21Handler - OPEN FILE C:\prince.dat with mode 0x0 (rwAccessMode:0x0)
    [Executor] s.e.i.dos.DosFileManager - Opening file ./PRINCE.DAT with mode r
    [Executor] s.e.i.dos.DosInt21Handler - READ FROM FILE handle 5 length 6 to 0x198C:0x743C
    [Executor] s.e.i.dos.DosFileManager - Reading from file C:\prince.dat
    [Executor] s.e.i.dos.DosInt21Handler - ALLOCATE MEMORY BLOCK size=39
    [Executor] s.e.i.dos.DosInt21Handler - MOVE FILE POINTER USING HANDLE. originOfMove=0, fileHandle=5, offset=25086
    [Executor] s.e.i.dos.DosFileManager - Moving in file C:\prince.dat
    [Executor] s.e.i.dos.DosInt21Handler - READ FROM FILE handle 5 length 514 to 0x298D:0x5E
    [Executor] s.e.i.dos.DosFileManager - Reading from file C:\prince.dat
    [Executor] s.e.i.dos.DosInt21Handler - FIND FIRST MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./DIGISND3.DAT
    [Executor] s.e.i.dos.DosInt21Handler - GET DTA (DISK TRANSFER ADDRESS) DS:DX 0x1DD:0x80
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./SNDDRVRS/PRESET33.DEF
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./VDUNGEON.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./MIDISND1.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./DIGISND1.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./IBM_SND2.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./DIGISND2.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./MIDISND2.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - Found matching file ./IBM_SND1.DAT
    [Executor] s.e.i.dos.DosInt21Handler - FIND NEXT MATCHING FILE attributes=0x8, fileSpec=C:????????.???
    [Executor] s.e.i.dos.DosFileManager - No more files matching ????????.??? in path ./
    [Executor] s.e.i.dos.DosInt21Handler - DOS operation failed with an error. Int will return to null. State is cycles=1682 CS:IP=0xF000:0x28/0xF000:0x28 AX=0x4F43 BX=0x80 CX=0x8 DX=0x0 SI=0x745F DI=0xC BP=0x7444 SP=0x73EC SS=0x198C DS=0x198B ES=0x1DD FS=0x0 GS=0x0 flags=0x7046 (     Z P )
    [Executor] s.e.i.dos.DosInt21Handler - OPEN FILE setup.dat with mode 0x0 (rwAccessMode:0x0)
    [Executor] spice86.ui.Spice86Application - An error occurred during execution
    java.lang.NullPointerException: null
            at java.base/java.io.File.<init>(File.java:278)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:450)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toHostCaseSensitiveFileName(DosFileManager.java:420)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.openFile(DosFileManager.java:102)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.openFile(DosInt21Handler.java:290)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.lambda$fillDispatchTable$3(DosInt21Handler.java:71)
            at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.run(DosInt21Handler.java:96)
            at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
            at spice86.emulator.cpu.Cpu.callback(Cpu.java:1793)
            at spice86.emulator.cpu.Cpu.grp4(Cpu.java:1503)
            at spice86.emulator.cpu.Cpu.execOpcode(Cpu.java:1135)
            at spice86.emulator.cpu.Cpu.executeNextInstruction(Cpu.java:200)
            at spice86.emulator.machine.Machine.runLoop(Machine.java:300)
            at spice86.emulator.machine.Machine.run(Machine.java:290)
            at spice86.emulator.ProgramExecutor.run(ProgramExecutor.java:51)
            at spice86.ui.Spice86Application.lambda$startMachine$3(Spice86Application.java:55)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    

    Dune:

    [Executor] s.e.l.ExecutableFileLoader - Program entry point is 0x1ED:0x0
    [Executor] s.e.i.dos.DosInt21Handler - GET CURRENT DEFAULT DRIVE
    [Executor] s.e.i.dos.DosInt21Handler - GET/SET CTRL-C FLAG
    [Executor] s.e.i.dos.DosInt21Handler - GET/SET CTRL-C FLAG
    [Executor] s.e.i.dos.DosInt21Handler - OPEN FILE dunevga.hsq with mode 0x0 (rwAccessMode:0x0)
    [Executor] spice86.ui.Spice86Application - An error occurred during execution
    java.lang.NullPointerException: null
           at java.base/java.io.File.<init>(File.java:278)
           at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:450)
           at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
           at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
           at spice86.emulator.interrupthandlers.dos.DosFileManager.toHostCaseSensitiveFileName(DosFileManager.java:420)
           at spice86.emulator.interrupthandlers.dos.DosFileManager.openFile(DosFileManager.java:102)
           at spice86.emulator.interrupthandlers.dos.DosInt21Handler.openFile(DosInt21Handler.java:290)
           at spice86.emulator.interrupthandlers.dos.DosInt21Handler.lambda$fillDispatchTable$3(DosInt21Handler.java:71)
           at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
           at spice86.emulator.interrupthandlers.dos.DosInt21Handler.run(DosInt21Handler.java:96)
           at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
           at spice86.emulator.cpu.Cpu.callback(Cpu.java:1793)
           at spice86.emulator.cpu.Cpu.grp4(Cpu.java:1503)
           at spice86.emulator.cpu.Cpu.execOpcode(Cpu.java:1135)
           at spice86.emulator.cpu.Cpu.executeNextInstruction(Cpu.java:200)
           at spice86.emulator.machine.Machine.runLoop(Machine.java:300)
           at spice86.emulator.machine.Machine.run(Machine.java:290)
           at spice86.emulator.ProgramExecutor.run(ProgramExecutor.java:51)
           at spice86.ui.Spice86Application.lambda$startMachine$3(Spice86Application.java:55)
           at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
           at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
           at java.base/java.lang.Thread.run(Thread.java:833)
    

    Monkey:

    [Executor] s.e.l.ExecutableFileLoader - Program entry point is 0x12B1:0xE
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] s.e.i.dos.DosInt21Handler - MODIFY MEMORY BLOCK size=10659, blockSegment=477
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] s.e.i.dos.DosInt21Handler - GET INTERRUPT VECTOR INT 0x0, got 0x0:0x0
    [Executor] s.e.i.dos.DosInt21Handler - SET INTERRUPT VECTOR FOR INT 0x0 at address 0x114C:0x57CF
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET DEVICE INFORMATION
    [Executor] s.e.i.dos.DosInt21Handler - GET CURRENT DEFAULT DRIVE
    [Executor] s.e.i.dos.DosInt21Handler - SET INTERRUPT VECTOR FOR INT 0x24 at address 0x114C:0x7A21
    [Executor] s.e.i.dos.DosInt21Handler - OPEN FILE 000.lfl with mode 0x0 (rwAccessMode:0x0)
    [Executor] spice86.ui.Spice86Application - An error occurred during execution
    java.lang.NullPointerException: null
            at java.base/java.io.File.<init>(File.java:278)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:450)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toCaseSensitiveFileName(DosFileManager.java:456)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.toHostCaseSensitiveFileName(DosFileManager.java:420)
            at spice86.emulator.interrupthandlers.dos.DosFileManager.openFile(DosFileManager.java:102)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.openFile(DosInt21Handler.java:290)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.lambda$fillDispatchTable$3(DosInt21Handler.java:71)
            at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
            at spice86.emulator.interrupthandlers.dos.DosInt21Handler.run(DosInt21Handler.java:96)
            at spice86.emulator.callback.IndexBasedDispatcher.run(IndexBasedDispatcher.java:21)
            at spice86.emulator.cpu.Cpu.callback(Cpu.java:1793)
            at spice86.emulator.cpu.Cpu.grp4(Cpu.java:1503)
            at spice86.emulator.cpu.Cpu.execOpcode(Cpu.java:1135)
            at spice86.emulator.cpu.Cpu.executeNextInstruction(Cpu.java:200)
            at spice86.emulator.machine.Machine.runLoop(Machine.java:300)
            at spice86.emulator.machine.Machine.run(Machine.java:290)
            at spice86.emulator.ProgramExecutor.run(ProgramExecutor.java:51)
            at spice86.ui.Spice86Application.lambda$startMachine$3(Spice86Application.java:55)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    

    I have tried using both Oracle Java and OpenJDK, both version 17. I will admit, I am not the most knowledgeable on Java, and this could be an issue caused by me. My process was:

    1. Download the package from packages
    2. Run the jar as described in README.md

    OS: Linux 5.10.79-1-MANJARO

    opened by fhomolka 7
  • Bump anothrNick/github-tag-action from 1.50.0 to 1.58.0

    Bump anothrNick/github-tag-action from 1.50.0 to 1.58.0

    Bumps anothrNick/github-tag-action from 1.50.0 to 1.58.0.

    Release notes

    Sourced from anothrNick/github-tag-action's releases.

    1.58.0: Exit with error if default branch is not set in non pr workflows

    There are some cases where the default_branch is not available in the runner environment, This leads to no history of commits. This change attempts to identify the default branch in this scenarios and error the user if the attempt fails and default_branch remains null

    1.57.0: Skip bumps if there are no new commits in pre-release actrions re runs

    Identified here anothrNick/github-tag-action#233 the action was not skipping bumps if there where no new commits in pre-release mode when an action is re run creating extra tags.

    This minor change applies the same behavior used in normal releases.

    1.56.0: Get the default branch from env vars also allow to overwrite as parameter

    This is a feature from a hotfix where we add the option to specify a default branch from parameters else we capture the default branch from the runner$GITHUB_BASE_REF var

    1.55.0: Select last commit or full branch history

    This version allows to set BRANCH_HISTORY full|last for the history verification for finding bump comments. See pr for examples anothrNick/github-tag-action#218

    1.53.0: Fixing repo tag bumps

    Fixes action versioning bumps. From bug introduced in 1.50

    1.52.0: A few hofixes

    Improved tests. Warning for breaking change when renaming/refactoring output tag New output tag old_tag

    What's Changed

    Full Changelog: https://github.com/anothrNick/github-tag-action/compare/1.51.0...1.52.0

    Commits
    • 2c9e17c Exit with error if default branch is not set in non prs (#235)
    • 39d8e88 Skip if there are no new commits in prerelease actions re-runs (#234)
    • 172098f Fix: Get the default branch from env vars also allow to overwrite as paramete...
    • 2fa4983 Select last commit or full branch history for analysis of #bumps (#218)
    • 11ca940 Revert "feat: pre-build dockerfile" (#220)
    • 8aac693 feat: build and push new prebuilt docker image (#219)
    • 60b1f44 feat: pre-build dockerfile (#201)
    • a0e0d8b github.ref_name is limited within the same repo by default (#216)
    • 97083f9 Parse commit body (#214)
    • be61601 Update set-output to use GITHUB_OUTPUT file (#206)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump anothrNick/github-tag-action from 1.50.0 to 1.56.0

    Bump anothrNick/github-tag-action from 1.50.0 to 1.56.0

    Bumps anothrNick/github-tag-action from 1.50.0 to 1.56.0.

    Release notes

    Sourced from anothrNick/github-tag-action's releases.

    1.56.0: Get the default branch from env vars also allow to overwrite as parameter

    This is a feature from a hotfix where we add the option to specify a default branch from parameters else we capture the default branch from the runner$GITHUB_BASE_REF var

    1.55.0: Select last commit or full branch history

    This version allows to set BRANCH_HISTORY full|last for the history verification for finding bump comments. See pr for examples anothrNick/github-tag-action#218

    1.53.0: Fixing repo tag bumps

    Fixes action versioning bumps. From bug introduced in 1.50

    1.52.0: A few hofixes

    Improved tests. Warning for breaking change when renaming/refactoring output tag New output tag old_tag

    What's Changed

    Full Changelog: https://github.com/anothrNick/github-tag-action/compare/1.51.0...1.52.0

    Commits
    • 172098f Fix: Get the default branch from env vars also allow to overwrite as paramete...
    • 2fa4983 Select last commit or full branch history for analysis of #bumps (#218)
    • 11ca940 Revert "feat: pre-build dockerfile" (#220)
    • 8aac693 feat: build and push new prebuilt docker image (#219)
    • 60b1f44 feat: pre-build dockerfile (#201)
    • a0e0d8b github.ref_name is limited within the same repo by default (#216)
    • 97083f9 Parse commit body (#214)
    • be61601 Update set-output to use GITHUB_OUTPUT file (#206)
    • 1ffbb2e Merge pull request #199 from anothrNick/hotfix/sorttags
    • b3501df we introduced a breaking change in outputs rolling back with hotfix
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump anothrNick/github-tag-action from 1.50.0 to 1.55.0

    Bump anothrNick/github-tag-action from 1.50.0 to 1.55.0

    Bumps anothrNick/github-tag-action from 1.50.0 to 1.55.0.

    Release notes

    Sourced from anothrNick/github-tag-action's releases.

    1.55.0: Select last commit or full branch history

    This version allows to set BRANCH_HISTORY full|last for the history verification for finding bump comments. See pr for examples anothrNick/github-tag-action#218

    1.53.0: Fixing repo tag bumps

    Fixes action versioning bumps. From bug introduced in 1.50

    1.52.0: A few hofixes

    Improved tests. Warning for breaking change when renaming/refactoring output tag New output tag old_tag

    What's Changed

    Full Changelog: https://github.com/anothrNick/github-tag-action/compare/1.51.0...1.52.0

    Commits
    • 2fa4983 Select last commit or full branch history for analysis of #bumps (#218)
    • 11ca940 Revert "feat: pre-build dockerfile" (#220)
    • 8aac693 feat: build and push new prebuilt docker image (#219)
    • 60b1f44 feat: pre-build dockerfile (#201)
    • a0e0d8b github.ref_name is limited within the same repo by default (#216)
    • 97083f9 Parse commit body (#214)
    • be61601 Update set-output to use GITHUB_OUTPUT file (#206)
    • 1ffbb2e Merge pull request #199 from anothrNick/hotfix/sorttags
    • b3501df we introduced a breaking change in outputs rolling back with hotfix
    • 7497ca6 sort tags skip draf releases
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump actions/setup-java from 3.5.1 to 3.8.0

    Bump actions/setup-java from 3.5.1 to 3.8.0

    Bumps actions/setup-java from 3.5.1 to 3.8.0.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.8.0

    In scope of this release we added logic to pass the token input through on GHES for Microsoft Build of OpenJDK (actions/setup-java#395) and updated minimatch dependency.

    v3.6.0

    In scope of this release we added Maven Toolchains Support and Maven Toolchains Declaration. Moreover, from this release we use os.arch to determine default architecture for runners: actions/setup-java#376. Besides, we made such changes as:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump anothrNick/github-tag-action from 1.50.0 to 1.54.0

    Bump anothrNick/github-tag-action from 1.50.0 to 1.54.0

    Bumps anothrNick/github-tag-action from 1.50.0 to 1.54.0.

    Release notes

    Sourced from anothrNick/github-tag-action's releases.

    1.53.0: Fixing repo tag bumps

    Fixes action versioning bumps. From bug introduced in 1.50

    1.52.0: A few hofixes

    Improved tests. Warning for breaking change when renaming/refactoring output tag New output tag old_tag

    What's Changed

    Full Changelog: https://github.com/anothrNick/github-tag-action/compare/1.51.0...1.52.0

    Commits
    • 11ca940 Revert "feat: pre-build dockerfile" (#220)
    • 8aac693 feat: build and push new prebuilt docker image (#219)
    • 60b1f44 feat: pre-build dockerfile (#201)
    • a0e0d8b github.ref_name is limited within the same repo by default (#216)
    • 97083f9 Parse commit body (#214)
    • be61601 Update set-output to use GITHUB_OUTPUT file (#206)
    • 1ffbb2e Merge pull request #199 from anothrNick/hotfix/sorttags
    • b3501df we introduced a breaking change in outputs rolling back with hotfix
    • 7497ca6 sort tags skip draf releases
    • de8337c Merge pull request #198 from anothrNick/hotfix_tagging_branch
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump actions/setup-java from 3.5.1 to 3.7.0

    Bump actions/setup-java from 3.5.1 to 3.7.0

    Bumps actions/setup-java from 3.5.1 to 3.7.0.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.7.0

    In scope of this release we added support for Oracle JDK (actions/setup-java#401). Besides, we added logic to Pass the token input through on GHES for Microsoft Build of OpenJDK (actions/setup-java#395) and updated minimatch dependency.

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Setup-java
        uses: actions/setup-java@v3
        with:
          distribution: oracle
          java-version: 17
    

    Supported distributions

    Currently, the following distributions are supported:

    Keyword Distribution Official site License
    temurin Eclipse Temurin Link Link
    zulu Azul Zulu OpenJDK Link Link
    adopt or adopt-hotspot AdoptOpenJDK Hotspot Link Link
    adopt-openj9 AdoptOpenJDK OpenJ9 Link Link
    liberica Liberica JDK Link Link
    microsoft Microsoft Build of OpenJDK Link Link
    corretto Amazon Corretto Build of OpenJDK Link Link
    oracle Oracle JDK Link Link

    v3.6.0

    In scope of this release we added Maven Toolchains Support and Maven Toolchains Declaration. Moreover, from this release we use os.arch to determine default architecture for runners: actions/setup-java#376. Besides, we made such changes as:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump slf4j-api from 2.0.3 to 2.0.5

    Bump slf4j-api from 2.0.3 to 2.0.5

    Bumps slf4j-api from 2.0.3 to 2.0.5.

    Commits
    • 7e62e1e prepare release 2.0.5
    • d250ad7 in jcl-over-slf4j rename LICENSE.TXT as LICENSE, add LICENSE file to log4j-ov...
    • 3bc58f3 add SecurityManager support
    • 207bb29 start work on 2.0.5-SNAPSHOT
    • 35dd7ff removed unused META-INF/services entry
    • 440c2f3 prepare release 2.0.4
    • 43a3630 use the class loader that loaded LoggerFactory (instead of the threadContextC...
    • 557bf7c [SLF4J-548] Fix ServiceLoader usage in servlet environment
    • 6324105 enhance manifest with capabilities
    • e540299 edit blurb on release championing
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump slf4j-api from 2.0.3 to 2.0.4

    Bump slf4j-api from 2.0.3 to 2.0.4

    Bumps slf4j-api from 2.0.3 to 2.0.4.

    Commits
    • 35dd7ff removed unused META-INF/services entry
    • 440c2f3 prepare release 2.0.4
    • 43a3630 use the class loader that loaded LoggerFactory (instead of the threadContextC...
    • 557bf7c [SLF4J-548] Fix ServiceLoader usage in servlet environment
    • 6324105 enhance manifest with capabilities
    • e540299 edit blurb on release championing
    • dfb41b0 Update README.md
    • 47c7cc7 clarify Logger.makeLoggingEventBuilder javadoc
    • 0be1bc1 Merge branch 'master' of github.com:qos-ch/slf4j
    • d60690c more flexible way to
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump actions/setup-java from 3.5.1 to 3.6.0

    Bump actions/setup-java from 3.5.1 to 3.6.0

    Bumps actions/setup-java from 3.5.1 to 3.6.0.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.6.0

    In scope of this release we added Maven Toolchains Support and Maven Toolchains Declaration. Moreover, from this release we use os.arch to determine default architecture for runners: actions/setup-java#376. Besides, we made such changes as:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump logback-classic from 1.4.1 to 1.4.4

    Bump logback-classic from 1.4.1 to 1.4.4

    Bumps logback-classic from 1.4.1 to 1.4.4.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump anothrNick/github-tag-action from 1.50.0 to 1.60.0

    Bump anothrNick/github-tag-action from 1.50.0 to 1.60.0

    Bumps anothrNick/github-tag-action from 1.50.0 to 1.60.0.

    Release notes

    Sourced from anothrNick/github-tag-action's releases.

    1.59.0: Hotfix - gitlog full breaking rebase and squash merges

    The current implementation of full git log breaks in squash and rebase due missing HEAD using suggestion from @​jonavos here anothrNick/github-tag-action#232 and changing approach to compare log history.

    Please report back to anothrNick/github-tag-action#232 if any further issues on use cases.

    1.58.0: Exit with error if default branch is not set in non pr workflows

    There are some cases where the default_branch is not available in the runner environment, This leads to no history of commits. This change attempts to identify the default branch in this scenarios and error the user if the attempt fails and default_branch remains null

    1.57.0: Skip bumps if there are no new commits in pre-release actrions re runs

    Identified here anothrNick/github-tag-action#233 the action was not skipping bumps if there where no new commits in pre-release mode when an action is re run creating extra tags.

    This minor change applies the same behavior used in normal releases.

    1.56.0: Get the default branch from env vars also allow to overwrite as parameter

    This is a feature from a hotfix where we add the option to specify a default branch from parameters else we capture the default branch from the runner$GITHUB_BASE_REF var

    1.55.0: Select last commit or full branch history

    This version allows to set BRANCH_HISTORY full|last for the history verification for finding bump comments. See pr for examples anothrNick/github-tag-action#218

    1.53.0: Fixing repo tag bumps

    Fixes action versioning bumps. From bug introduced in 1.50

    1.52.0: A few hofixes

    Improved tests. Warning for breaking change when renaming/refactoring output tag New output tag old_tag

    What's Changed

    Full Changelog: https://github.com/anothrNick/github-tag-action/compare/1.51.0...1.52.0

    Commits
    • e286d60 Fix: small typo in readme (#241)
    • 6bebeb9 docs: add maintainers info (#239)
    • bb4fa8e Hotfix - Add log compare as default instead of full log (#237)
    • 2c9e17c Exit with error if default branch is not set in non prs (#235)
    • 39d8e88 Skip if there are no new commits in prerelease actions re-runs (#234)
    • 172098f Fix: Get the default branch from env vars also allow to overwrite as paramete...
    • 2fa4983 Select last commit or full branch history for analysis of #bumps (#218)
    • 11ca940 Revert "feat: pre-build dockerfile" (#220)
    • 8aac693 feat: build and push new prebuilt docker image (#219)
    • 60b1f44 feat: pre-build dockerfile (#201)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Bump actions/setup-java from 3.5.1 to 3.9.0

    Bump actions/setup-java from 3.5.1 to 3.9.0

    Bumps actions/setup-java from 3.5.1 to 3.9.0.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.9.0

    In scope of this release we add support for .java-version file (actions/setup-java#426). For more information about its usage please refer to the documentation.

        steps:
          - uses: actions/checkout@v3
          - name: Setup java
            uses: actions/setup-java@v3
            with:
              distribution: '<distribution>'
              java-version-file: .java-version
          - run: java HelloWorldApp.java
    

    v3.8.0

    In scope of this release we added logic to pass the token input through on GHES for Microsoft Build of OpenJDK (actions/setup-java#395) and updated minimatch dependency.

    v3.6.0

    In scope of this release we added Maven Toolchains Support and Maven Toolchains Declaration. Moreover, from this release we use os.arch to determine default architecture for runners: actions/setup-java#376. Besides, we made such changes as:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Bump slf4j-api from 2.0.3 to 2.0.6

    Bump slf4j-api from 2.0.3 to 2.0.6

    Bumps slf4j-api from 2.0.3 to 2.0.6.

    Commits
    • 5ff6f2c prepare for release 2.0.6
    • 2f4aa75 fix SLF4J-575
    • 363f0a5 remove unused parts
    • 171679b SLF4J-574: Add full OSGi headers, especially "uses" clauses
    • 921b5b3 fix FUNDING file
    • e02244c fix FUNDING file
    • 441d458 fix FUNDING file
    • f5e741b add FUNDING file
    • 2e71327 remove unused log4j dependency in the version definition section of pom.xml
    • 3ff2a30 start work on 2.0.6-SNAPSHOT
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump logback-classic from 1.4.1 to 1.4.5

    Bump logback-classic from 1.4.1 to 1.4.5

    Bumps logback-classic from 1.4.1 to 1.4.5.

    Commits
    • 34a6efc preparfe release 1.4.5
    • 0d3ac63 fix LOGBACK-1698, [Nested appenders are not allowed] warning using SiftingApp...
    • a64b8d4 make jakarta.servlet-api as both provided and optional
    • 114b3de bump slf4j version
    • 1df6662 fix LOGBACK-1706
    • ea165fb fix LOGBACK-1703
    • 9e07bd0 fix LOGBACK-1703
    • a871e9f minor edits in README.md
    • 7dc0ce5 Merge pull request #605 from Zardoz89/patch-1
    • 7130dfe README.md MUST inform about Java & Jackarta EE support
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump maven-shade-plugin from 3.4.0 to 3.4.1

    Bump maven-shade-plugin from 3.4.0 to 3.4.1

    Bumps maven-shade-plugin from 3.4.0 to 3.4.1.

    Commits
    • fbbec08 [maven-release-plugin] prepare release maven-shade-plugin-3.4.1
    • 7078d92 [MSHADE-413] Fix endless loop caused by manipulating shared objects (#124)
    • 0945bcb [MSHADE-417] Fix null bytes appended to small files (#160)
    • 41bd72f [MSHADE-366] "Access denied" during 'minimizeJar' (#161)
    • e342059 [MSHADE-432] Duplicate services entries can be generated (#159)
    • 7603e57 Bump asmVersion from 9.3 to 9.4 (#156)
    • 5e955d8 Bump maven-dependency-tree from 3.0.1 to 3.2.0 (#148)
    • 5f45ecf [MSHADE-431] Use a caching output stream (#158)
    • 31d3506 Bump plexus-utils from 3.3.0 to 3.4.2 (#139)
    • b039731 [MSHADE-430] Remove usage of deprecated ModelBase#getReports()
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Int was called but vector was not initialized for vectorNumber

    Int was called but vector was not initialized for vectorNumber

    I'm trying to run Colonization in spice86. When I start it, it outputs the following and then exits:

    [Executor] spice86.emulator.ProgramExecutor - Loading file VICEROY.EXE with loader class spice86.emulator.loadablefile.dos.exe.ExeLoader
    [Executor] s.e.l.ExecutableFileLoader - Program entry point is 0x12FA:0x71D
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] s.e.i.dos.DosInt21Handler - GET INTERRUPT VECTOR INT 0x67, got 0x0:0x0
    [Executor] s.e.i.dos.DosInt21Handler - GET DOS VERSION
    [Executor] spice86.ui.Spice86Application - An error occurred during execution
    spice86.emulator.errors.UnhandledOperationException: An error occurred while machine was in this state: cycles=204 CS:IP=0x12FA:0x4D16/0x1000:0x7CB6 AX=0x4300 BX=0xFF00 CX=0x0 DX=0x0 SI=0x4FCF DI=0x0 BP=0x0 SP=0x407E SS=0x27D2 DS=0x12FA ES=0x1DD FS=0x0 GS=0x0 flags=0x7202 (  I      ).
    Error is: Int was called but vector was not initialized for vectorNumber=0x2F
            at spice86.emulator.cpu.Cpu.interrupt(Cpu.java:1747)
            at spice86.emulator.cpu.Cpu.execOpcode(Cpu.java:927)
            at spice86.emulator.cpu.Cpu.executeNextInstruction(Cpu.java:199)
            at spice86.emulator.machine.Machine.runLoop(Machine.java:307)
            at spice86.emulator.machine.Machine.run(Machine.java:291)
    

    Is this something that can be fixed, or is this executable just not supported? Thanks for an awesome tool!

    opened by vanderkleij 5
Owner
Kevin
Kevin
Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners.

Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners. If You Have any doubt or query you can ask me here or you can also ask me on My LinkedIn Profile

Shaikh Minhaj 3 Nov 8, 2022
Rewrite of the dataconverter system for performance.

DataConverter This mod completely rewrites the dataconverter system for Minecraft. Please note that this fabric mod is not to be used. It is published

null 38 Nov 23, 2022
Rewrite of the dataconverter system for performance.

DataConverter This mod completely rewrites the dataconverter system for Minecraft. Please note that this fabric mod is not to be used. It is published

PaperMC 38 Nov 23, 2022
ReDoSHunter: A Combined Static and Dynamic Approach for Regular Expression DoS Detection

ReDoSHunter ReDoSHunter is a combined static and dynamic approach for regular expression DoS detection. LATEST NOTE (updated at 2021.09.13): ReDoSHunt

Yeting Li 43 Dec 23, 2022
Clean-architecture-guide - Guia sobre Clean Architecture criado a partir dos meus estudos sobre o tema.

Clean Architecture Guide Arquitetura são as práticas e fundamentos de como organizamos um sistema. Tem relação e como os componentes estão relacionado

Jean Jacques Nascimento Barros 3 Apr 23, 2022
Desafios-bootcamps-dio - Desafios em C#, Java, JavaScript, Kotlin, Python e Ruby dos Bootcamps da Digital Innovation One

Desafios dos Bootcamps da Digital Innovation One Aqui você vai encontrar todos os desafios dos bootcamps que realizei da Digital Innovation One. Os có

Pleiterson Amorim 443 Dec 31, 2022
Photo live wallpaper with auto dark mode and power-efficient animations

Pallax Android: Photo Live Wallpaper Pallax Android is an Android app that lets you convert your current static home screen background into a stunning

Patrick Zedler 13 Dec 17, 2022
Customize your device even more by having two separate sets of wallpapers for light and dark mode.

DualWallpaper You can help me out with translations here. Customize your device even more by having two separate sets of wallpapers for light and dark

Yann 18 Dec 25, 2022
Drifty is an open-source interactive File Downloader system built with java. It is currently available in CLI mode and has the GUI version under active development.

Drifty Drifty is an open-source interactive File Downloader system built using Java. It takes the link to the file, the directory where it needs to be

Saptarshi Sarkar 60 Dec 24, 2022
A tool for reverse engineering Android apk files

Apktool This is the repository for Apktool. If you are looking for the Apktool website. Click here. It is a tool for reverse engineering 3rd party, cl

Connor Tumbleson 15.4k Jan 4, 2023
Java library to perform reverse Domain Name Service (rDNS) lookups with ease.

ipregistry-rdns Java library to perform reverse Domain Name Service (rDNS) lookups with ease. The library is async, thread-safe and has built-in suppo

Ipregistry 2 Jul 18, 2022
An open-source reverse-engineered dedicated server for Frostbite games

FrostbiteServer An open-source reverse-engineered dedicated server for games running on the Frostbite engine. When finished, this will be used to host

Sean Kahler 26 Jan 5, 2023
I had too much coffee and decided to mirror my actions by writing too many programs in Java.

Raging Coffee Table of Contents Description Running the Programs Extra Dependencies Roadmap Further Reading Known Issues Resources Contributions Descr

Thoroughfare by the Brooks 20 Dec 15, 2022
Short Java programs for practice (OCP) Oracle Certified Professional Java SE 11

OCP-study Short Java programs to practice for (OCP) Oracle Certified Professional Java SE 11 Exam Google document with notes: https://docs.google.com/

Sabina Matjašič 1 May 24, 2022
All the Assignment Programs given by College

OOPs-Assignment This is a Repo holding the Assignments or test programs given by the College in the 5th Semester. We will try to include as much as pr

Raunak Mandal 4 Jul 16, 2022
This app corrects your sitting posture and provides feedback in real time in conjunction with the app. A sensor of 31 cells detects your posture to get better life-wellness

Notichair 실시간 자세분석 및 교정 스마트체어 ?? 상명대학교 PRIME 경진대회 수상 ?? 요구사항 31-cell sensor (mdxs-16-5610) 목차 1. 소개 프로젝트 내용 소개 2. 개발 환경 사전 설정 및 환경 구축 3. 기능 Sensors Ap

Minuk_LEE 3 Jan 15, 2022
corrects your sitting posture and provides feedback in real time in conjunction with the app. A sensor of 31 cells detects your posture to get better life-wellness

Notichair 실시간 자세분석 및 교정 스마트체어 ?? 상명대학교 PRIME 경진대회 수상 ?? 요구사항 31-cell sensor (mdxs-16-5610) 목차 1. 소개 프로젝트 내용 소개 2. 개발 환경 사전 설정 및 환경 구축 3. 기능 Sensors Ap

Minuk_LEE 3 Jan 15, 2022
LOQUI - Real-time chat application built using Apache Kafka, Java, Spring Boot, SockJS and React

LOQUI is a simple real-time chat application that demonstrates how to use Apache Kafka as a message broker along with Java, Spring Boot and React on the front-end

Castanho Correia 2 Jun 5, 2022
Person Apri development in real time

Digital Innovation: Expert class - Desenvolvendo um sistema de gerenciamento de pessoas em API REST com Spring Boot Nesta live coding vamos desenvolve

Vitor Nunes 1 Nov 11, 2021