mirror of https://github.com/mgba-emu/mgba.git
GBA BIOS: Implement Stop
This commit is contained in:
parent
7a9e97ca52
commit
d588b8c462
1
CHANGES
1
CHANGES
|
@ -28,6 +28,7 @@ Features:
|
||||||
- Controller profiles now store shortcut settings
|
- Controller profiles now store shortcut settings
|
||||||
- Default controller profiles for several common controllers
|
- Default controller profiles for several common controllers
|
||||||
- Libretro now supports BIOS and rumble
|
- Libretro now supports BIOS and rumble
|
||||||
|
- Implement BIOS call Stop, for sleep mode
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
- ARM7: Fix SWI and IRQ timings
|
- ARM7: Fix SWI and IRQ timings
|
||||||
- GBA Audio: Force audio FIFOs to 32-bit
|
- GBA Audio: Force audio FIFOs to 32-bit
|
||||||
|
|
|
@ -191,6 +191,9 @@ void GBASwi16(struct ARMCore* cpu, int immediate) {
|
||||||
case 0x2:
|
case 0x2:
|
||||||
GBAHalt(gba);
|
GBAHalt(gba);
|
||||||
break;
|
break;
|
||||||
|
case 0x3:
|
||||||
|
GBAStop(gba);
|
||||||
|
break;
|
||||||
case 0x05:
|
case 0x05:
|
||||||
// VBlankIntrWait
|
// VBlankIntrWait
|
||||||
// Fall through:
|
// Fall through:
|
||||||
|
|
|
@ -82,6 +82,7 @@ static void GBAInit(struct ARMCore* cpu, struct ARMComponent* component) {
|
||||||
gba->logLevel = GBA_LOG_WARN | GBA_LOG_ERROR | GBA_LOG_FATAL;
|
gba->logLevel = GBA_LOG_WARN | GBA_LOG_ERROR | GBA_LOG_FATAL;
|
||||||
gba->stream = 0;
|
gba->stream = 0;
|
||||||
gba->keyCallback = 0;
|
gba->keyCallback = 0;
|
||||||
|
gba->stopCallback = 0;
|
||||||
|
|
||||||
gba->biosChecksum = GBAChecksum(gba->memory.bios, SIZE_BIOS);
|
gba->biosChecksum = GBAChecksum(gba->memory.bios, SIZE_BIOS);
|
||||||
|
|
||||||
|
@ -553,6 +554,14 @@ void GBAHalt(struct GBA* gba) {
|
||||||
gba->cpu->halted = 1;
|
gba->cpu->halted = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GBAStop(struct GBA* gba) {
|
||||||
|
if (!gba->stopCallback) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gba->cpu->nextEvent = 0;
|
||||||
|
gba->stopCallback->stop(gba->stopCallback);
|
||||||
|
}
|
||||||
|
|
||||||
static void _GBAVLog(struct GBA* gba, enum GBALogLevel level, const char* format, va_list args) {
|
static void _GBAVLog(struct GBA* gba, enum GBALogLevel level, const char* format, va_list args) {
|
||||||
struct GBAThread* threadContext = GBAThreadGetContext();
|
struct GBAThread* threadContext = GBAThreadGetContext();
|
||||||
enum GBALogLevel logLevel = GBA_LOG_ALL;
|
enum GBALogLevel logLevel = GBA_LOG_ALL;
|
||||||
|
|
|
@ -112,6 +112,7 @@ struct GBA {
|
||||||
enum GBALogLevel logLevel;
|
enum GBALogLevel logLevel;
|
||||||
struct GBAAVStream* stream;
|
struct GBAAVStream* stream;
|
||||||
struct GBAKeyCallback* keyCallback;
|
struct GBAKeyCallback* keyCallback;
|
||||||
|
struct GBAStopCallback* stopCallback;
|
||||||
|
|
||||||
enum GBAIdleLoopOptimization idleOptimization;
|
enum GBAIdleLoopOptimization idleOptimization;
|
||||||
uint32_t idleLoop;
|
uint32_t idleLoop;
|
||||||
|
@ -155,6 +156,7 @@ void GBAWriteIME(struct GBA* gba, uint16_t value);
|
||||||
void GBARaiseIRQ(struct GBA* gba, enum GBAIRQ irq);
|
void GBARaiseIRQ(struct GBA* gba, enum GBAIRQ irq);
|
||||||
void GBATestIRQ(struct ARMCore* cpu);
|
void GBATestIRQ(struct ARMCore* cpu);
|
||||||
void GBAHalt(struct GBA* gba);
|
void GBAHalt(struct GBA* gba);
|
||||||
|
void GBAStop(struct GBA* gba);
|
||||||
|
|
||||||
void GBAAttachDebugger(struct GBA* gba, struct ARMDebugger* debugger);
|
void GBAAttachDebugger(struct GBA* gba, struct ARMDebugger* debugger);
|
||||||
void GBADetachDebugger(struct GBA* gba);
|
void GBADetachDebugger(struct GBA* gba);
|
||||||
|
|
|
@ -66,6 +66,10 @@ struct GBAKeyCallback {
|
||||||
uint16_t (*readKeys)(struct GBAKeyCallback*);
|
uint16_t (*readKeys)(struct GBAKeyCallback*);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GBAStopCallback {
|
||||||
|
void (*stop)(struct GBAStopCallback*);
|
||||||
|
};
|
||||||
|
|
||||||
struct GBARotationSource {
|
struct GBARotationSource {
|
||||||
void (*sample)(struct GBARotationSource*);
|
void (*sample)(struct GBARotationSource*);
|
||||||
|
|
||||||
|
|
|
@ -505,7 +505,7 @@ void GBAIOWrite8(struct GBA* gba, uint32_t address, uint8_t value) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
GBAHalt(gba);
|
GBAHalt(gba);
|
||||||
} else {
|
} else {
|
||||||
GBALog(gba, GBA_LOG_STUB, "Stop unimplemented");
|
GBAStop(gba);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue