Dragon 32 emulation via AdvMESS
-
Seemed like it'd be a good idea to put all this chat in one place.
Thanks to a vital piece of information from John_RM_70 I've finally managed to get some Dragon 32 games running in AdvMESS, and the emulation is vastly superior to Xroar, particularly in terms of sound. Actually getting games loaded is extremely convoluted, though, so let's see if we can brush it all up and make things easier for other folk.
The key part I'd been missing was having the Dragon BIOS file named dragon32.zip (not d32.zip as it'll probably be called when you download it), containing d32.rom, in the /opt/retropie/configs/mame-advmame/rom folder.
At the moment I have this EMULATORS.CFG file in /opt/retropie/configs/dragon32:
advmess = "/opt/retropie/emulators/advmame/bin/advmess dragon32 -log -cfg /opt/retropie/configs/dragon32/advmess.rc -cassette %ROM%" default = "advmess"
It points to this ADVMESS.RC file in the same directory:
debug_crash no debug_rawsound no debug_speedmark no device_alsa_device default device_alsa_mixer channel device_color_bgr15 yes device_color_bgr16 yes device_color_bgr24 yes device_color_bgr32 yes device_color_bgr8 yes device_color_palette8 no device_color_yuy2 no device_joystick auto device_keyboard sdl device_mouse auto device_raw_firstkeyhack no device_raw_mousedev[0] auto device_raw_mousedev[1] auto device_raw_mousedev[2] auto device_raw_mousedev[3] auto device_raw_mousetype[0] pnp device_raw_mousetype[1] pnp device_raw_mousetype[2] pnp device_raw_mousetype[3] pnp device_sdl_samples 512 device_sound auto device_video sdl device_video_cursor auto device_video_doublescan yes device_video_fastchange yes device_video_interlace no device_video_output overlay device_video_overlaysize 0 device_video_singlescan no device_video_clock 10 - 150 / 30.5 - 60 / 55 - 130 dir_artwork /home/pi/.advance/artwork:/usr/local/share/advance/artwork:/opt/retropie/emulators/advmame/share/advance/artwork dir_crc /home/pi/.advance/crc dir_diff /home/pi/.advance/diff dir_hi /home/pi/.advance/hi dir_image /home/pi/.advance/image:/usr/local/share/advance/image:/opt/retropie/emulators/advmame/share/advance/image:/opt/retropie/configs/mame-advmame/image:/home/pi/RetroPie/roms/bbcmicro dir_inp /home/pi/.advance/inp dir_memcard /home/pi/.advance/memcard dir_nvram /home/pi/.advance/nvram dir_rom /home/pi/.advance/rom:/usr/local/share/advance/rom:/opt/retropie/emulators/advmame/share/advance/rom:/opt/retropie/configs/mame-advmame/rom dir_sample /home/pi/.advance/sample:/usr/local/share/advance/sample:/opt/retropie/emulators/advmame/share/advance/sample dir_snap /home/pi/.advance/snap dir_sta /home/pi/.advance/sta display_adjust none display_antialias no display_artwork_backdrop no display_artwork_bezel no display_artwork_crop no display_artwork_overlay no display_beam 1 display_brightness 1 display_buffer no display_color auto display_expand 1.00 display_flicker 0 display_flipx no display_flipy no display_frameskip auto display_gamma 1 display_intensity 1.5 display_interlaceeffect none display_magnify auto display_magnifysize 640 display_mode auto display_pausebrightness 1 display_resize fractional display_resizeeffect none display_restore no display_rgbeffect none display_rol no display_ror no display_scanlines no display_skipcolumns auto display_skiplines auto display_translucency no display_vsync yes include input_hotkey yes input_idleexit 0 input_map[event10] auto input_map[event11] auto input_map[event12] auto input_map[event13] auto input_map[event14] auto input_map[event1] auto input_map[event2] auto input_map[event3] auto input_map[event4] auto input_map[event5] auto input_map[event6] auto input_map[event7] auto input_map[event8] auto input_map[event9] auto input_map[key_0] joystick_button[0,18] or keyboard[0,0] input_map[key_1] joystick_button[0,8] or keyboard[0,1] input_map[key_2] joystick_button[0,9] or keyboard[0,2] input_map[key_3] joystick_button[0,10] or keyboard[0,3] input_map[key_4] joystick_button[0,11] or keyboard[0,4] input_map[key_5] joystick_button[0,12] or keyboard[0,5] input_map[key_6] joystick_button[0,13] or keyboard[0,6] input_map[key_7] joystick_button[0,14] or keyboard[0,7] input_map[key_8] joystick_button[0,15] or keyboard[0,8] input_map[key_9] joystick_button[0,16] or keyboard[0,9] input_map[key_a] keyboard[0,a] or joystick_button[0079_0011,1] input_map[key_again] auto input_map[key_alt] auto input_map[key_asterisk] auto input_map[key_b] auto input_map[key_back] auto input_map[key_backquote] auto input_map[key_backslash] auto input_map[key_backspace] auto input_map[key_break] auto input_map[key_c] auto input_map[key_capslock] auto input_map[key_closebrace] auto input_map[key_colon] auto input_map[key_comma] auto input_map[key_copy] auto input_map[key_ctrl] auto input_map[key_cut] auto input_map[key_d] auto input_map[key_del] joystick_button[0,17] or keyboard[0,del] or keyboard[0,backspace] input_map[key_diesis] auto input_map[key_doublequote] auto input_map[key_down] auto input_map[key_e] auto input_map[key_edit] auto input_map[key_end] auto input_map[key_enter] auto input_map[key_equals] auto input_map[key_esc] auto input_map[key_f10] auto input_map[key_f11] auto input_map[key_f12] auto input_map[key_f13] auto input_map[key_f14] auto input_map[key_f15] auto input_map[key_f16] auto input_map[key_f17] auto input_map[key_f18] auto input_map[key_f19] auto input_map[key_f1] auto input_map[key_f20] auto input_map[key_f21] auto input_map[key_f22] auto input_map[key_f23] auto input_map[key_f24] auto input_map[key_f2] auto input_map[key_f3] auto input_map[key_f4] auto input_map[key_f5] auto input_map[key_f6] auto input_map[key_f7] auto input_map[key_f8] auto input_map[key_f9] auto input_map[key_f] auto input_map[key_fctn] auto input_map[key_find] auto input_map[key_forward] auto input_map[key_g] auto input_map[key_graph] auto input_map[key_h] auto input_map[key_help] auto input_map[key_hold] auto input_map[key_home] auto input_map[key_i] auto input_map[key_ins] auto input_map[key_j] auto input_map[key_k] auto input_map[key_l] auto input_map[key_lalt] auto input_map[key_lctrl] auto input_map[key_left] auto input_map[key_less] auto input_map[key_lshift] auto input_map[key_m] auto input_map[key_menu] auto input_map[key_minus] auto input_map[key_move] auto input_map[key_n] auto input_map[key_numlock] auto input_map[key_o] auto input_map[key_open] auto input_map[key_openbrace] auto input_map[key_p] auto input_map[key_pad_0] auto input_map[key_pad_1] auto input_map[key_pad_2] auto input_map[key_pad_3] auto input_map[key_pad_4] auto input_map[key_pad_5] auto input_map[key_pad_6] auto input_map[key_pad_7] auto input_map[key_pad_8] auto input_map[key_pad_9] auto input_map[key_pad_asterisk] auto input_map[key_pad_colon] auto input_map[key_pad_diesis] auto input_map[key_pad_enter] auto input_map[key_pad_minus] auto input_map[key_pad_plus] auto input_map[key_pad_slash] auto input_map[key_paste] auto input_map[key_pause] auto input_map[key_period] auto input_map[key_pgdn] auto input_map[key_pgup] auto input_map[key_play] auto input_map[key_plus] auto input_map[key_pound] auto input_map[key_print] auto input_map[key_q] auto input_map[key_quickload] auto input_map[key_quote] auto input_map[key_r] auto input_map[key_ralt] auto input_map[key_rctrl] auto input_map[key_record] auto input_map[key_restore] auto input_map[key_rew] auto input_map[key_right] auto input_map[key_rshift] auto input_map[key_s] auto input_map[key_scrlock] auto input_map[key_semicolon] auto input_map[key_shift] auto input_map[key_slash] auto input_map[key_space] auto input_map[key_stop] auto input_map[key_store] auto input_map[key_t] auto input_map[key_tab] auto input_map[key_u] auto input_map[key_undo] auto input_map[key_up] auto input_map[key_v] auto input_map[key_w] auto input_map[key_x] auto input_map[key_y] auto input_map[key_z] auto input_map[p1_dialx] auto input_map[p1_dialy] auto input_map[p1_lightgunx] auto input_map[p1_lightguny] auto input_map[p1_mousex] auto input_map[p1_mousey] auto input_map[p1_paddlex] auto input_map[p1_paddley] auto input_map[p1_pedalbrake] auto input_map[p1_pedalgas] auto input_map[p1_pedalother] auto input_map[p1_stickx] auto input_map[p1_sticky] auto input_map[p1_stickz] auto input_map[p1_trackballx] auto input_map[p1_trackbally] auto input_map[p2_dialx] auto input_map[p2_dialy] auto input_map[p2_lightgunx] auto input_map[p2_lightguny] auto input_map[p2_mousex] auto input_map[p2_mousey] auto input_map[p2_paddlex] auto input_map[p2_paddley] auto input_map[p2_pedalbrake] auto input_map[p2_pedalgas] auto input_map[p2_pedalother] auto input_map[p2_stickx] auto input_map[p2_sticky] auto input_map[p2_stickz] auto input_map[p2_trackballx] auto input_map[p2_trackbally] auto input_map[p3_dialx] auto input_map[p3_dialy] auto input_map[p3_lightgunx] auto input_map[p3_lightguny] auto input_map[p3_mahjong_a] auto input_map[p3_mahjong_b] auto input_map[p3_mahjong_bet] auto input_map[p3_mahjong_c] auto input_map[p3_mahjong_chance] auto input_map[p3_mahjong_chi] auto input_map[p3_mahjong_d] auto input_map[p3_mahjong_double_up] auto input_map[p3_mahjong_e] auto input_map[p3_mahjong_f] auto input_map[p3_mahjong_flip_flop] auto input_map[p3_mahjong_g] auto input_map[p3_mahjong_h] auto input_map[p3_mahjong_i] auto input_map[p3_mahjong_j] auto input_map[p3_mahjong_k] auto input_map[p3_mahjong_kan] auto input_map[p3_mahjong_l] auto input_map[p3_mahjong_m] auto input_map[p3_mahjong_n] auto input_map[p3_mahjong_pon] auto input_map[p3_mahjong_reach] auto input_map[p3_mahjong_ron] auto input_map[p3_mahjong_score] auto input_map[p3_mousex] auto input_map[p3_mousey] auto input_map[p3_paddlex] auto input_map[p3_paddley] auto input_map[p3_pedalbrake] auto input_map[p3_pedalgas] auto input_map[p3_pedalother] auto input_map[p3_stickx] auto input_map[p3_sticky] auto input_map[p3_stickz] auto input_map[p3_trackballx] auto input_map[p3_trackbally] auto input_map[p4_dialx] auto input_map[p4_dialy] auto input_map[p4_lightgunx] auto input_map[p4_lightguny] auto input_map[p4_mahjong_a] auto input_map[p4_mahjong_b] auto input_map[p4_mahjong_bet] auto input_map[p4_mahjong_c] auto input_map[p4_mahjong_chance] auto input_map[p4_mahjong_chi] auto input_map[p4_mahjong_d] auto input_map[p4_mahjong_double_up] auto input_map[p4_mahjong_e] auto input_map[p4_mahjong_f] auto input_map[p4_mahjong_flip_flop] auto input_map[p4_mahjong_g] auto input_map[p4_mahjong_h] auto input_map[p4_mahjong_i] auto input_map[p4_mahjong_j] auto input_map[p4_mahjong_k] auto input_map[p4_mahjong_kan] auto input_map[p4_mahjong_l] auto input_map[p4_mahjong_m] auto input_map[p4_mahjong_n] auto input_map[p4_mahjong_pon] auto input_map[p4_mahjong_reach] auto input_map[p4_mahjong_ron] auto input_map[p4_mahjong_score] auto input_map[p4_mousex] auto input_map[p4_mousey] auto input_map[p4_paddlex] auto input_map[p4_paddley] auto input_map[p4_pedalbrake] auto input_map[p4_pedalgas] auto input_map[p4_pedalother] auto input_map[p4_stickx] auto input_map[p4_sticky] auto input_map[p4_stickz] auto input_map[p4_trackballx] auto input_map[p4_trackbally] auto input_map[safequit] auto input_map[service_coin5] auto input_map[service_coin6] auto input_map[service_coin7] auto input_map[service_coin8] auto input_map[ui_cancel] keyboard[0,f7] or joystick_button[0079_0011_2,5] input_map[ui_mode_next] keyboard[0,f24] input_map[ui_mode_pred] keyboard[0,f24] input_map[ui_reset_machine] joystick_button[0079_0006,4] or joystick_button[0079_0006_2,4] or keyboard[0,f9] input_map[ui_toggle_debug] keyboard[0,f24] input_map[ui_toggle_ui] joystick_button[0079_0011_2,6] joystick_button[0079_0011_2,7] input_steadykey no lcd_server none lcd_speed 4 lcd_timeout 500 misc_bios default misc_cheat no misc_cheatfile cheat.dat misc_difficulty none misc_eventdebug no misc_eventfile event.dat misc_freeplay no misc_hiscorefile hiscore.dat misc_lang none misc_languagefile english.lng misc_mutedemo no misc_quiet yes misc_ramsize auto misc_safequit no misc_smp no misc_timetorun 0 record_sound no record_sound_time 15 record_video no record_video_interleave 2 record_video_time 15 script_coin1 script_coin2 script_coin3 script_coin4 script_emulation script_event1 script_event10 script_event11 script_event12 script_event13 script_event14 script_event2 script_event3 script_event4 script_event5 script_event6 script_event7 script_event8 script_event9 script_led1 on(kdb, 0b1); wait(!event()); off(kdb, 0b1); script_led2 on(kdb, 0b10); wait(!event()); off(kdb, 0b10); script_led3 script_play script_safequit script_start1 script_start2 script_start3 script_start4 script_turbo while (event()) { toggle(kdb, 0b100); delay(100); } off(kdb, 0b100); script_video wait(!event()); set(kdb, 0); sound_adjust auto sound_equalizer_highvolume 0 sound_equalizer_lowvolume 0 sound_equalizer_midvolume 0 sound_latency 0.05 sound_mode auto sound_normalize yes sound_samplerate 44100 sound_samples yes sound_volume 0 sync_fps auto sync_resample auto sync_speed 1 sync_startuptime auto sync_turbospeed 3 ui_color[help_other] 000000 808080 ui_color[help_p1] 000000 ffff00 ui_color[help_p2] 000000 00ff00 ui_color[help_p3] 000000 ff0000 ui_color[help_p4] 000000 00ffff ui_color[interface] 000000 ffffff ui_color[select] 000000 afffff ui_color[tag] 247ef0 ffffff ui_font auto ui_fontsize auto ui_helpimage auto ui_translucency 0.8 280x210/display_resize fractional 320x192/display_mode sdl_1824x984 320x192/display_resize fractional 320x192x59/display_mode sdl_1824x984 320x192x59/display_resize fractional 336x225/display_mode sdl_416x288 336x225/display_resize fractional 320x204/display_mode sdl_1920x1080 320x204/display_resize fractional 800x300x50/display_mode generate-double input_map[p1_start] keyboard[0,1] or joystick_button[0079_0011,6] input_map[p1_select] keyboard[0,5] or joystick_button[0079_0011,7] input_map[p2_up] joystick_digital[0079_0011_2,0,1,1] input_map[p2_down] joystick_digital[0079_0011_2,0,1,0] input_map[p2_left] joystick_digital[0079_0011_2,0,0,1] input_map[p2_right] joystick_digital[0079_0011_2,0,0,0] input_map[p2_button1] joystick_button[0079_0006,1] or keyboard[0,a] input_map[p2_button2] joystick_button[0079_0006,3] or keyboard[0,s] input_map[p2_button3] joystick_button[0079_0006,5] or keyboard[0,q] input_map[p2_button4] joystick_button[0079_0006,0] or keyboard[0,w] input_map[p2_button5] joystick_button[0079_0006,2] input_map[p2_button6] input_map[p2_button7] input_map[p2_button8] input_map[p2_button9] input_map[p2_button10] input_map[p2_start] joystick_button[0079_0006,4] or joystick_button[0079_0006_3,10] or keyboard[0,2] input_map[p2_select] joystick_button[0079_0006,4] or joystick_button[0079_0006_3,10] or keyboard[0,6] input_map[ui_up] joystick_digital[0079_0006_3,0,0,0] or keyboard[0,up] input_map[ui_down] joystick_digital[0079_0006_3,0,0,1] or keyboard[0,down] input_map[ui_left] joystick_digital[0079_0006_3,0,1,1] or keyboard[0,left] input_map[ui_right] joystick_digital[0079_0006_3,0,1,0] or keyboard[0,right] input_map[ui_select] joystick_button[0079_0006_3,2] or keyboard[0,enter] input_map[ui_record_start] input_map[ui_record_stop] input_map[p1_button1] keyboard[0,lcontrol] or joystick_button[0079_0011,3] input_map[p1_button2] keyboard[0,lalt] or joystick_button[0079_0011,4] input_map[p1_button3] keyboard[0,space] or joystick_button[0079_0011,0] input_map[p1_button4] keyboard[0,lshift] or joystick_button[0079_0011,1] dragon32[home_pi_retropie_roms_dragon32_donkey]/script_play delay(750); simulate_key (key_c,75); delay(75); simulate_key(key_l,75); delay(75); simulate_key(key_o,75); delay(75); simulate_key(key_o,75); delay(75); simulate_key(key_a,75); delay(75); simulate_key(key_d,75); delay(75); simulate_key(key_m,75); delay(75); simulate_key(key_enter,75); dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_0] joystick_button[0079_0011,18] or keyboard[0,0] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_1] joystick_button[0079_0011,8] or keyboard[0,1] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_2] joystick_button[0079_0011,9] or keyboard[0,2] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_3] joystick_button[0079_0011,10] or keyboard[0,3] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_4] joystick_button[0079_0011,11] or keyboard[0,4] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_5] joystick_button[0079_0011,12] or keyboard[0,5] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_6] joystick_button[0079_0011,13] or keyboard[0,6] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_7] joystick_button[0079_0011,14] or keyboard[0,7] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_8] joystick_button[0079_0011,15] or keyboard[0,8] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_9] joystick_button[0079_0011,16] or keyboard[0,9] dragon32[home_pi_retropie_roms_dragon32_donkey]/input_map[key_enter] joystick_button[0079_0011,19] or keyboard[0,enter]
I've included this line:
input_map[ui_toggle_ui] joystick_button[0079_0011_2,6] joystick_button[0079_0011_2,7]
To enable the MESS menus by pressing Start and Select on joystick 2, because I'm using a compact keyboard without a NumLock or ScrollLock key.
I've also included this line:
input_map[key_a] keyboard[0,a] or joystick_button[0079_0011,1]
because for some unfathomable reason my keyboard won't recognise the A key when it's being a Dragon (it's fine any other time, or with other MESS emulation), so I've had to map it to a fire button.
When I boot a game from the EmulationStation menu, it dumps me into the Dragon OS screen. If I type CLOADM and hit Enter, it then loads the game from tape in real time (you can speed it up somewhat by hitting F10), which is a bit of a pain but only takes 75 seconds or so with F10 on.
I tried adding this line (for Donkey King in this case) to automate the typing of CLOADM, which works if you're using MESS to emulate the BBC Micro:
dragon32[home_pi_retropie_roms_dragon32_donkey]/script_play delay(750); simulate_key(key_scrlock,75); delay(75); simulate_key (key_c,75); delay(75); simulate_key(key_l,75); delay(75); simulate_key(key_o,75); delay(75); simulate_key(key_a,75); delay(75); simulate_key(key_d,75); delay(75); simulate_key(key_m,75); delay(75); simulate_key(key_enter,75);
but it had absolutely no visible effect, except that if I reset the Dragon while it's trying to load the game, it THEN types "CLDM" (no O or A).
From this point on the game runs beautifully and all is well. But I've had no luck at all trying to run .SNA snapshot files either through the MESS menu or through ES in order to avoid the tedious loading wait. Any ideas on this front would be most welcome.
-
After a bit more testing I found you don't need the ddos10.rom, you only need this if you are trying to load .dsk (disk) images. Leaving this out will keep you at the Dragon home screen, and not take you to a extended dos screen. This might help with cassette loading since I am experiencing the occasional "IO Error", the dreaded error Dragon owners feared back in the 80s - it was quite common when dealing with real tapes.
Like other Pi emulators, I have a real Dragon 32. Using composite video, I connected my Dragon to my Sony TV and I can honestly say that the Pi does a good job of emulating it - it actually "looks" better, due to the better composite support on the Pi.
The real Dragon still wins here because I can load tapes via a SDCard solution (TZXDuino) and I only get a few IO errors - mostly due to corrupt tape images. But, the Pi is a nicer solution because the Dragon is a huge cumbersome beast, and takes up too much space and too much time to use for everyday.
Anyone wanting to try a Dragon, then this is the next best thing to a real machine.
The games are great, albeit too "Green" everywhere. I did laugh when presented with a colour choice for a few games.
Press 1 - for Black
Press 2 - for Buff - what the heck is Buff ?
Press 3 - for Green -
@John_RM_70 I didn't have the DDOS file present anyway. But for some reason it's now recognising the CAS files, and CLOADM works without having to twat around in the menus.
Sadly I'm still having no luck getting it to recognise snapshots, which is a shame as it'd be nice to dodge all that loading.
-
Have you tried loading snapshots from the File Manager ?
You can speed-up loading by using a turbo key, just assign a key to turbo and hold it down. Although, I think "Turbo" is a bit of a oxymoron since the Pi is already pretty close to running flat out while it runs the Mess emulator.
By the way, did you know you can load wav files instead of cassette images ? These seem a lot more reliable than .cas files. -
@John_RM_70 Yes, I've tried using the file manager, you can select them but it just doesn't register them as being there.
I'm assuming that F10 is already functioning as a max-speed Turbo button. It gets me about 170%.
Will see if I can track down any WAV files, though. Got a few CAS files that won't work (eg Mr Dig, Draconian), and I don't know if it's them or if the emulator just doesn't support them.
-
@SpudsMcToole Ooh, early success - Draconian worked beautifully as a WAV. Now to see if I can find some other ones.
-
Yeah, wav is looking far more reliable.
Downside. Just over 200 wavs = about 880Mb of space. Compared to 500+ .cas files = 12mb. -
@John_RM_70 Hey, I've got plenty space :D
(But I only need to find a handful of WAV games anyway, mainly Mr Dig.)
-
@SpudsMcToole If you can't find them let me know, I have them all - obviously we would have to keep it to PM.
Here is something you might find useful, it's all the Dragon 32 artwork scans of tape inlays.
http://www.filefactory.com/file/77giidjbav97/Dragon_Artwork.zip
It's just jpg scans, and they're not named in any particular way. But they look good in ES, and it's better than nothing.
That is a big file, mind. 338Mb. -
@John_RM_70 I've got most of the tape inlays already, but cheers, will see if any of the ones I'm missing are in there.
How do I PM you? I looked on your profile page but don't see an option.
-
@SpudsMcToole said in Dragon 32 emulation via AdvMESS:
How do I PM you?
Do you know what ? I honestly don't know, lol.
Mods - Can we PM ?
Or, is it ok to link to a Dragon 32 wav file ? -
@John_RM_70 said in Dragon 32 emulation via AdvMESS:
Mods - Can we PM ?
No.
Or, is it ok to link to a Dragon 32 wav file ?
And now you know why PMs are disabled. If it's a public domain/free file, then link to it, otherwise the forum rules forbid it.
-
@John_RM_70 said in Dragon 32 emulation via AdvMESS:
Do you know what ? I honestly don't know, lol.
Dang!
-
@SpudsMcToole Check your email, I have linked to all the Microdeal wavs, hopefully Mr Dig works ok.
-
any can share the artworks, please? thanks
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.