evanbowman / BPCore-Engine

Lua game framework for Gameboy Advance
The Unlicense
160 stars 10 forks source link

Print in emulator console with a dedicate memory address and a script #14

Open Mte90 opened 4 months ago

Mte90 commented 4 months ago

So taking inspiration from here: https://www.mattgreer.dev/blog/mame-lua-for-better-retro-dev/ It will be cool to have this kind of debug.

TLDR:

As in this case we are talking about a script engine there is anything as default to do that, but it will simplify a lot the development.

evanbowman commented 4 months ago

Great idea! The gba lua code allows you to write to two specific address ranges already, see here:

https://github.com/evanbowman/BPCore-Engine?tab=readme-ov-file#ram-readwrite

The _IWRAM variable is currently not a fixed address, it is placed by the linker, but you can print its contents to see what the address is.

evanbowman commented 4 months ago

All the required components should exist in the api, I can try it out sometime this week.

A really cool idea would be to use an emulator's lua api to put source code strings into gba memory, then read and eval() them on the gba, and write the result back to gba memory for the emulator's lua api to read. Then you'd have interactive development!

Mte90 commented 4 months ago

So I have this snippet for mgba and the Metal Slug Advance (https://drive.google.com/file/d/1FNTohgCTjEHrxzeDly0l3awPoti8W0nU/view):

function detectGame()
console:log(emu:getGameTitle())
end
count = 0
function updateBuffer()
count = count + 1
-- Wait around 2 seconds
if count == 120 then
console:log('Updating ammo')
-- Unlimited arms point
emu:write16(0x02000072, 0xFF)
count = 0
end
end
callbacks:add("start", detectGame)
callbacks:add("frame", updateBuffer)
if emu then
detectGame()
end

Mgba doc: https://mgba.io/docs/scripting.html https://github.com/mgba-emu/mgba/issues/2550 Various examples scripts: https://github.com/mgba-emu/mgba/tree/c541a79e9564310d7a81d9668f41317acf30dda1/res/scripts

I think that what are you looking to do is possible as the scripting UI has a textbox where you should be able to run lua commands.

evanbowman commented 1 week ago

Resolved in previous release

Mte90 commented 1 week ago

It isn't clear how to use the log function right now. Reading the code I think that is not using the solution that I proposed.

evanbowman commented 1 week ago

Can you please describe what you're looking for in more detail? It sounded like you wanted to write text to the emulator log window, I must have misunderstood.

Mte90 commented 1 week ago

So that function write in the screen the content and not in the log window, like explained in this ticket?

evanbowman commented 1 week ago

Ah! Sorry, I was looking at the wrong issue ticket!