How launch Apf imagination machine games with retroarch?

Hello, Does anyone have already launch successfuly launch apf Imagination machine game with the mame core? when i launch a game its always rocket patrol start instead.

That’s made me crazy. Please help !

1 Like

It’s on my list of systems to create graphics for, so I must have been able to run it. I’ll take a look when I get home.

Oh thanks so muche please keep me in touch please :slight_smile:

1 Like

Yeah I have no issues running any game.

You need to have software lists enabled, and auto SW list rom etc.

apfm1000.opt file can be fairly standard.

apfm1000.opt

mame_alternate_renderer = "disabled"
mame_altres = "640x480"
mame_auto_save = "disabled"
mame_boot_from_cli = "disabled"
mame_boot_to_bios = "disabled"
mame_boot_to_osd = "disabled"
mame_buttons_profiles = "enabled"
mame_cheats_enable = "disabled"
mame_cpu_overclock = "default"
mame_lightgun_mode = "none"
mame_lightgun_offscreen_mode = "free"
mame_mame_4way_enable = "4way"
mame_mame_paths_enable = "disabled"
mame_media_type = "rom"
mame_mouse_enable = "enabled"
mame_read_config = "disabled"
mame_saves = "game"
mame_softlists_auto_media = "enabled"
mame_softlists_enable = "enabled"
mame_throttle = "disabled"
mame_write_config = "disabled"

Your SW List roms and MAME “apfm1000.zip” need to be in a folder named apfm1000.

One possibility is that you have “mame_write_config” and “mame_read_config” set to “enabled” and it is remembering the last game you played, instead of loading a new rom.

Oh i’m not talking about apfm1000 (APF-M1000) system. I’m talking about the apfimag (APF Imagination Machine).

Yeah… the apfm1000 is about as good as you are going to get. I abandoned the Imagination Machine because not only is it cumbersome to get running, it has horrible compatibility.

If you want to try it yourself you need to disable SW in the opt.

The you need to load the basic.zip as a cart (apfm1000 cart.) and the cassete of your choice as a cassette.

I used a batch file. “burgman.cmd”

burgman.cmd

apfimag -rompath "E:\Temp\apfimag" -cart basic -cass burgman

You will need to modify the paths.

Once you have it up and running (The Basic cart.) Go into the MAME UI and change your keyboard type from “emulated” to “natural”.

press “scroll Lock” to enable game focus.

Then press “enter” to start Basic.

Type cload and press enter.

You will see a message about playing the tape and pressing return.

You need to enter the MAME UI again and go to tape control. Press rewind until the tape is at 00.

Press “Play”. It will start making noise.

Exit the MAME UI, press enter, and wait for the tape to stop.

Type run and press Enter.

Most games don’t work. :frowning_face:

Okay if i understand i can launch this burgman.cmd directly with retroarch? i can try tonight :).

Seems like a lot of steps to start games that don’t work.

thank you for the explanation

Yes, you can use it as content with the MAME core.

I agree. It may be possible to use a lua script to do most of the key pressing and tape control work, but I am no expert. I will try to hack something together.

I used Launchbox for launch my games and i can use ahk script for put some key with sleep time maybe.

1 Like

Possibly, but you would still have to go into the MAE UI to control the tape.

lua scripts can access the hardware and do it for you.

You would use the lua script as a autoboot parameter replacement.

e.g.

burgman.cmd

apfimag -rompath "E:\Temp\apfimag" -cart basic -cass burgman -autoboot_script "E:\Temp\apfimag\apfimag.lua"

An example script that controls a tape is…

local frame_num = 0
local run_frame = 0

local function process_frame()
        frame_num = frame_num + 1

        if frame_num == 30 then
            emu.keypost('\n')
        elseif frame_num == 150 then
		    emu.keypost('CLOAD\n')
        elseif frame_num == 300 then
		    manager.machine.cassettes[":cassette"]:play()
		elseif frame_num > 500 then
		    if run_frame == 0 then
		        if manager.machine.cassettes[":cassette"].motor_state == false then
    		        run_frame = frame_num + 60
	    	    end
            elseif frame_num == run_frame then
		        emu.keypost('RUN\n')
		    end
        end

       	if manager.machine.cassettes[":cassette"].is_stopped == false and manager.machine.cassettes[":cassette"].motor_state == true then
		    manager.machine.video.throttled = false
		    manager.machine.video.frameskip = 12
		else
		    manager.machine.video.throttled = true
		    manager.machine.video.frameskip = 0
		end
end

emu.register_frame_done(process_frame)

This script would almost work… I just need to add a rewind section near the beginning.

Like I said… I am no expert at lua scripts. I hacked this one together with bit’s and pieces of scripts found here.

https://github.com/Bob-Z/RandoMame/tree/main/autoboot_script

This author also claims no expertise.

I wish I knew someone who was fluent. I think it should be possible for a lua script to parse the hash xml for command line requirements. (e.g. 'CLOAD\n' , 'RUN\n' , etc.

Chat GPT make this code and say

In this modified script, I added a new variable rewind_frame to keep track of the frame number at which the rewind section should occur. You can set the value of rewind_frame to the desired frame number where you want to initiate the rewind.

Inside the process_frame function, I included a new condition for the rewind section. When frame_num matches the rewind_frame , the script will send the command ‘REWIND\n’ to the emulator. You can replace 'REWIND\n' with the appropriate command for your specific emulator’s rewind functionality.

Make sure to set rewind_frame to a valid value before running the Lua script to trigger the rewind section at the desired frame.

local frame_num = 0
local run_frame = 0
local rewind_frame = 0  -- Added variable for rewind frame

local function process_frame()
    frame_num = frame_num + 1

    -- Rewind section
    if frame_num == rewind_frame then
        emu.keypost('REWIND\n')
    elseif frame_num == 30 then
        emu.keypost('\n')
    elseif frame_num == 150 then
        emu.keypost('CLOAD\n')
    elseif frame_num == 300 then
        manager.machine.cassettes[":cassette"]:play()
    elseif frame_num > 500 then
        if run_frame == 0 then
            if manager.machine.cassettes[":cassette"].motor_state == false then
                run_frame = frame_num + 60
            end
        elseif frame_num == run_frame then
            emu.keypost('RUN\n')
        end
    end

    if manager.machine.cassettes[":cassette"].is_stopped == false and manager.machine.cassettes[":cassette"].motor_state == true then
        manager.machine.video.throttled = false
        manager.machine.video.frameskip = 12
    else
        manager.machine.video.throttled = true
        manager.machine.video.frameskip = 0
    end
end

-- Set rewind_frame to the desired frame number for the rewind section
rewind_frame = 100

emu.register_frame_done(process_frame)

Okay i have try apfimag -rompath “E:\Temp\apfimag” -cart basic -cass burgman in burgman.cmd with my path and i cant launch the game with retroarch (mame) or launchbox. Thats work for you?

1 Like

Yep that was what I tested on.

You need to have the burgman.zip in the rom path, and you need to have SW lists “disabled” in the apfimag.opt.

Try without Launchbox until you have it working.

If you have that set up and it doesn’t work, post a log and maybe we can see what’s wrong.

Oh i cant find apfimag.opt in H:\Emulators\RetroArch\config\MAME :confused: Sorry i’m an old man with all this technology

This is my log

> [INFO] RetroArch 1.14.0 (Git e3c92b0)
> [INFO] === Build =======================================
> [INFO] CPU Model Name: Intel(R) Core(TM) i7-9700KF CPU @ 3.60GHz
> [INFO] Capacités: MMX MMXEXT SSE SSE2 SSE3 SSE4 SSE4.2 AES AVX AVX2
> [INFO] Built: Dec 13 2022
> [INFO] Version: 1.14.0
> [INFO] Git: e3c92b0
> [INFO] =================================================
> [INFO] [Input]: Found input driver: "dinput".
> [INFO] [Environ]: SET_PIXEL_FORMAT: RGB565.
> [INFO] [Core]: Version de l'API libretro: 1, Compilé avec l'API: 1
> [INFO] [Audio]: Set audio input rate to: 48000.00 Hz.
> [INFO] [Video]: Set video size to: fullscreen.
> [INFO] [GLCore]: Found GL context: "wgl".
> [INFO] [GLCore]: Detecting screen resolution: 1920x1080.
> [INFO] [WGL]: Extensions: WGL_ARB_buffer_region WGL_ARB_create_context WGL_ARB_create_context_no_error WGL_ARB_create_context_profile WGL_ARB_create_context_robustness WGL_ARB_context_flush_control WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_multisample WGL_ARB_pbuffer WGL_ARB_pixel_format WGL_ARB_pixel_format_float WGL_ARB_render_texture WGL_ATI_pixel_format_float WGL_EXT_colorspace WGL_EXT_create_context_es_profile WGL_EXT_create_context_es2_profile WGL_EXT_extensions_string WGL_EXT_framebuffer_sRGB WGL_EXT_pixel_format_packed_float WGL_EXT_swap_control WGL_EXT_swap_control_tear WGL_NVX_DX_interop WGL_NV_DX_interop WGL_NV_DX_interop2 WGL_NV_copy_image WGL_NV_delay_before_swap WGL_NV_float_buffer WGL_NV_multisample_coverage WGL_NV_multigpu_context WGL_NV_render_depth_texture WGL_NV_render_texture_rectangle 
> [INFO] [WGL]: Adaptive VSync supported.
> [INFO] [GLCore]: Vendor: NVIDIA Corporation, Renderer: NVIDIA GeForce RTX 2070 SUPER/PCIe/SSE2.
> [INFO] [GLCore]: Version: 4.6.0 NVIDIA 512.15.
> [INFO] [GLCore]: Using resolution 1920x1080.
> [INFO] [XInput]: Found XInput v1.4.
> [INFO] [Joypad]: Found joypad driver: "xinput".
> [INFO] [GLCore]: Loading stock shader.
> [INFO] [slang]: Building pass #0 (Indisponible)
> [INFO] [GLCore]: Not using frame history.
> [INFO] [GLCore]: Not using framebuffer feedback.
> [INFO] [Autoconf]: Xbox One Wireless Controller configured in port 1.
> [INFO] [Video]: Found display server: "win32".
> [INFO] [XAudio2]: Requesting 64 ms latency, using 64 ms latency.
> [INFO] [Display]: Found display driver: "glcore".
> [INFO] [Playlist]: Chargement du fichier d'historique: "H:\Emulators\RetroArch\content_history.lpl".
> [INFO] [Playlist]: Chargement du fichier d'historique: "H:\Emulators\RetroArch\content_music_history.lpl".
> [INFO] [Playlist]: Chargement du fichier d'historique: "H:\Emulators\RetroArch\content_video_history.lpl".
> [INFO] [Playlist]: Chargement du fichier d'historique: "H:\Emulators\RetroArch\content_image_history.lpl".
> [INFO] [Playlist]: Chargement du fichier des favoris: "H:\Emulators\RetroArch\content_favorites.lpl".
> [INFO] [Content]: Updating firmware status for: "H:\Emulators\RetroArch\cores\mame_libretro.dll" on "H:\Emulators\RetroArch\system".
> [INFO] [Core]: Using content: "G:\Roms\APF Imagination Machine\apfimag\16letter.cmd".
> [INFO] [Core]: Content ran for a total of: 00 hours, 00 minutes, 00 seconds.
> [INFO] [Core]: Unloading core..
> [INFO] [Core]: Unloading core symbols..
> [INFO] [Video]: Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.

This is the content of H:\Emulators\RetroArch\config\MAME\apfimag.opt:

mame_softlists_enable = “disabled”

And this is the content of 16letter.cmd game:

apfimag -rompath “G:\Roms\APF Imagination Machine\apfimag\16letter.zip” -cart basic -cass 16letter

You have to create it by making a copy of mame.opt. and renaming it to apfimag.opt. You want to keep the mame.opt as generic as possible.

Then change the default line.

mame_softlists_enable = "enabled"

to

mame_softlists_enable = "disabled"

also…

Can you edit your post… select the log text… and press the “Preformatted text” icon in the post editor. </>

Sorry about that. I have made all but thats not work :frowning:

Retroarch crash after i adding -cart basic this part

Yeah you are confusing MAME. The -rompath is not the path to the rom, just the path to the rom folder. So…

apfimag -rompath “G:\Roms\APF Imagination Machine\apfimag” -cart basic -cass 16letter

Your log doesn’t show as much as mine does. I think you need to change the log level.

I have my “frontend” level and “core” level set to “0 (Debug)”.

I usually have verbose logging enabled also so I can see live what is going on while RA is booting, and running content.

That might be overkill for a casual user, but I have a policy that I won’t create a graphic for a system unless I can run it… so I have run a lot of obscure MAME systems. Sometimes it take a bit of trickery, so I need to see what’s not working.

BTW. I posted the wrong link to the lua scripts. I corrected it.

His newest scripts seem to be parsing the mame hash xml!

It looks like I have some serious testing to do.

Okay i have better news for my test. My roms version of bios was a copy of apf1000… thans for the tips for view bigger logs.

Actually i try to understand why my MAME UI is not accessible (i think its the tab key right?)

Okay i finaly launch games 16 letter. Do you have to this warning

in the warning information menu (Mame UI)

1 Like

I don’t get that error, but I did find that a lot of the games require 16K of ram. (It is less by default.)

I changed the CMD file to account for this.

16letter.cmd

apfimag -ramsize 16384 -rompath "E:\Temp\apfimag" -cart basic -cass 16letter

It could be that you need to update your MAME rom (apfimag.zip), or the SL roms. (Although I don’t see any updates for either looking back to 0.246, I could check my archives.)

Do you have an updated Software List ROMs collection?