Cv1000 shmups finally full speed on android

This is the main shmups forum. Chat about shmups in here - keep it on-topic please!
Post Reply
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Cv1000 shmups finally full speed on android

Post by el_rika »

Hy there guys,


So i recently bought an OnePlus 7 smartphone, and of course the first thing i did was to test the infamous Cv1000 shmups via Retroarch with Mame2015 core.

https://www.youtube.com/watch?v=rd5eMmosrf0&t=45s


As you can see, finally, full speed :shock:

The Mame emulated CPU must be set @ around 35%, and this way the game slows down beautifully when all hell gets loose, and all this with Vsync and without threaded video option in Retroarch. Activating the option, adds a few % to the speed (while adding a barely noticeable and infrequent scrolling stutter). The input lag is somewhere around 4 frames at most, and the overall experience is just great. With these settings, the games perform much better than the ios ports (which are very fresh in my mind).

The guys @ FinalBurnNeo (the new FBA) are working on coding the driver for FBN emulator as well, and if we take into account the trend of FBA drivers to the at least twice as fast as Mame's, this will hopefully mean speed improvements that will allow less powerful devices to run these gems :P
User avatar
WelshMegalodon
Posts: 1225
Joined: Fri Dec 11, 2015 5:09 am

Re: Cv1000 shmups finally full speed on android

Post by WelshMegalodon »

el_rika wrote:Mame2015
There's been a dynarec for SH3- and SH4-based systems enabled since last year (0.191 and 0.196, I think), so there's really no point in testing a version this old. Especially not in RetroArch, which the MAME devs have effectively disowned.
Indie hipsters: "Arcades are so dead"
Finite Continues? Ain't that some shit.
RBelmont wrote:A little math shows that if you overclock a Pi3 to about 3.4 GHz you'll start to be competitive with PCs from 2002. And you'll also set your house on fire
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

I understand what you are saying, and i know about the recent dynarec, but sadly it is not compiled for android, only windows.

This is the only way to play cv1000 shmups on android. The enthusiasm comes from the fact that, for the first time ever, they are full speed and perfectly playable.

Update: Espgaluda 2 https://m.youtube.com/watch?v=_UoDBpH4G4s
User avatar
BareKnuckleRoo
Posts: 6162
Joined: Mon Oct 03, 2011 4:01 am
Location: Southern Ontario

Re: Cv1000 shmups finally full speed on android

Post by BareKnuckleRoo »

I would be very skeptical if they are "perfectly playable". Several of them are designed to make use of slowdown which triggers off of Blitter Delay, but as far as I know emulation on Blitter Delay isn't super accurate and you get a rough approximation of the game's true slowdown at best.
User avatar
Shepardus
Posts: 3505
Joined: Sat Dec 13, 2014 10:01 pm
Location: Ringing the bells of fortune

Re: Cv1000 shmups finally full speed on android

Post by Shepardus »

If you're setting the CPU to 35%, isn't that by definition not full speed?
Image
NTSC-J: You know STGs are in trouble when you have threads on how to introduce them to a wider audience and get more people playing followed by threads on how to get its hardcore fan base to play them, too.
1CCs | Twitch | YouTube
User avatar
Mark_MSX
Posts: 411
Joined: Mon Mar 05, 2018 6:58 am
Contact:

Re: Cv1000 shmups finally full speed on android

Post by Mark_MSX »

That's pretty cool man! I'm not a super big fan of the mame cores of Retroarch, but yeah that's really your only option on android for the later Cave games that I'm aware of. It would be cool if you found a way to use a special case or something to give you physical controls via the usb, like a gameboy housing or something ha.
User avatar
Xyga
Posts: 7181
Joined: Tue Nov 05, 2013 8:22 pm
Location: block

Re: Cv1000 shmups finally full speed on android

Post by Xyga »

Shepardus wrote:If you're setting the CPU to 35%, isn't that by definition not full speed?
Unrelated to the refresh rate/speed, I think you know the CV1000 driver requires underclock of the emulated CPU to somewhat reproduce the ingame slowdowns, since the blitter delay option can't do that by itself as far as we could observe. Though the settings are different for each game, no way a fixed value sets it right for all, nobody knows the 'best' settings anyway, and even if they were found the results still wouldn't be exactly like the originals, more like another flavour of ports.

More important is the question: what's the point of playing those games on a damned phone :?:
Strikers1945guy wrote:"Do we....eat chicken balls?!"
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

Mark_MSX wrote:That's pretty cool man! I'm not a super big fan of the mame cores of Retroarch, but yeah that's really your only option on android for the later Cave games that I'm aware of. It would be cool if you found a way to use a special case or something to give you physical controls via the usb, like a gameboy housing or something ha.

Well, to be honest, and this is just me personally, i enjoy the touch joystick (which i made specifically for these games) a whole lot :D You can of course, attach any kid of physical pad (even like the Switch) ^_^
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

Xyga wrote:
Shepardus wrote:If you're setting the CPU to 35%, isn't that by definition not full speed?
Unrelated to the refresh rate/speed, I think you know the CV1000 driver requires underclock of the emulated CPU to somewhat reproduce the ingame slowdowns, since the blitter delay option can't do that by itself as far as we could observe. Though the settings are different for each game, no way a fixed value sets it right for all, nobody knows the 'best' settings anyway, and even if they were found the results still wouldn't be exactly like the originals, more like another flavour of ports.

More important is the question: what's the point of playing those games on a damned phone :?:
Yes, it seems that the values are not exactly the same for each game to trigger slowdown in certain moments (and for overall smooth sailing), but with trial and error, i'm narrowing down on it :wink:

Well, to have all these amazing ganes in your poket and to literally enjoy them whenever, wherever you want/are, is the point. I love to sit down in the subway or breaks at work, and analyse another boss pattern or discover a new stage route..it's great :P
User avatar
Mark_MSX
Posts: 411
Joined: Mon Mar 05, 2018 6:58 am
Contact:

Re: Cv1000 shmups finally full speed on android

Post by Mark_MSX »

I think this is really cool man. I'll have to give it a try when I upgrade my phone in the future :-)
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

There have been optimizations to that driver and the related components even outside of the recompiler since 2015, of note, very significant ones to the sound emulation when PGM2 went in, which was actually eating a fair bit of CPU time in many cases.

A current version of MAME should perform better than a 2015 one, even on platforms with no recompiler.

Also, yes, RA is garbage, although on Android you're unfortunately stuck with garbage.
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

MameHaze wrote:There have been optimizations to that driver and the related components even outside of the recompiler since 2015, of note, very significant ones to the sound emulation when PGM2 went in, which was actually eating a fair bit of CPU time in many cases.

A current version of MAME should perform better than a 2015 one, even on platforms with no recompiler.

Also, yes, RA is garbage, although on Android you're unfortunately stuck with garbage.

I'm in the process of testing everything as thorough as possible. The games vs different mame cores vs CPU %. I'm aiming for playability and speed as close to originals as possible. I mostly aim to find the sweet spot for the major slowdown moments, and so far so good :P

I found one of the earliest Mame cores compiled for android that supported Cv1000 driver, based on a 0.157 version, and managed to add it to RA (i will explain how in a future post detailing all my findings). So far it is the fastest (at least 30% faster than 0.160 based core) and it allows for a lot of room in terms of tweaking.
I honestly doubt that the latest Mame could be faster than this one, but i will definitely test it as well and hopefuly it'll be close (because there are two cv1000 games not available in 0.157) :D

Thanks for the info friend, and if you ever think of doing a dynarec for android, be sure that at least one person will be forever grateful :wink:
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

Well the sound optimization definitely gave a big boost in places, although if the old version you have is based off the (illegal) x86 binary->C translation of an official Yamaha decoder that the Demul developers initially pushed (but was never included in any official capacity) it could still be faster.

In terms of PGM2, several games were dropping below 100% on my i7 due to the overhead of the mpeg sound decoding tho, and with the optimized code that was added around 2017 they now run at well over 800% in the same situations, so don't underestimate just how bad the baseline decoder code was for a long time.
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

MameHaze wrote:Well the sound optimization definitely gave a big boost in places, although if the old version you have is based off the (illegal) x86 binary->C translation of an official Yamaha decoder that the Demul developers initially pushed (but was never included in any official capacity) it could still be faster.
.
Could be the case, i have no idea. It is indeed incredibly fast compared to any other core, including the latest mame, which is slowest unfortunately.
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

So, after extensive tests i can now come with a guide, numbers and tips for anyone that wants to play the cv1000 shmups on android smartphones.

I am talking full speed, with smooth slowdown in those tense bullet hell moments, overall a very enjoyable way to experience these gems, anywhere, anytime :P

First you neeed a smartphone with Snapdragon 855 (Snapdragon 845 -might- also work with some more tweaking). There are many smartphones with this Soc, but the best would be one with minimal CPU throttling (OnePlus 7 is a good choice). Other latest gen CPUs might work as well, i don't know.

This is a guide for non-rooted phones.

Now you have to install Retroarch and manually sideload the Mame2014 core. This is a little tricky as it is no longer available for download and so the Core Info doesn't exist on the libretro server anymore. We can bypass this though, by tricking Retroarch. You can simply rename the Mame2014 core, to any of the existing Mame cores name (i chose Mame2000). After that, you put it in the folder Retroarch - Downloads, and then in Retroarch you go to Load Core - Install Core. Browse for the core, after the Core is installed, exit Retroarch and enter it again and you should have the Mame2000 core (which is our Mame2014). You will -maybe- need to refresh the Core Info files via Online Updater menu, for the core to work properly. Also in Retroarch video settings disable Threaded Video (disabling it makes the experience smoother though the requirements go up a bit)

Ok, onto the games now.

I tested almost all working Cv1000 games, played multiple times comparing with youtube PCB runs, and i tried to finetune the CPU clock in Mame so that the experience is enjoyable and close to originals. I also have extensively played the X ports. I personally prefer just a little bit more slowdown as it really sells the near miss felling 8)

There is a little issue here. The Mame2014 core does not show the % of the CPU, only the bar. I visually compared the underclocking bar with the Mame2015 core and i have numbers, but i personally use screens with points of refference, like certain letters or numbers on the starting screens, in relation to the CPU underclocking bar.

Espgaluda 2 - underclock the CPU to 52%. This game needs the most CPU to remain smooth and not produce unwanted stutter/slowdown. The Awakening and Ultra Awakening scenarios are very manageable, with tons of smooth slowdown with this setting. In very VERY extreme moments (Ultra Awakening) the game drops 1 or two frames for a split second. This can be solved 2 ways: 1. enabling Threaded Video & Disabling Vsync (the scrolling is a bit choppy at times, but barely noticeable)
2. Underclocking the CPU to 48 - 50% (may result in some slight, very rare stutter)

Dodonpachi Daiffukatsu - underclock to 37%. A bit less slowdown (maybe) than PCB, but more underclocking results in slight stutter in rare cases.

Mushihimesama - underclock to 39%. Tested mainly in maniac and ultra. Very close to originals.

Futari (all) - underclock to 36%. Smooth slowdown. BlackLabel seems to have more, even on PCB.

Ibara - underclock to 43% . PCB seems to have very little slowdown, but i like how it plays with just a little more slowdown. It's gorgeous.

Deathsmiles - underclock to 42%. Forest level is a good one to test and compare to PCB. This % value provides pretty close slowdown.

I will test the remaining games as well, though the values will probably be similar.
Daifukkatsu BL and Akai Katana are only playable in more recent Mame versions, which are more demanding and my tests show that full speed is not achievable.

When the phone gets hot, i recommend taking a break , as performance can be affected by CPU Throttling.

If anyone is interested in playing/testing and sharing impressions, i can provide all that is needed.

These are, arguably, the best shmups ever made, and to have them in your pocket and just go through a couple of levels while coming from work is just...uniquely satisfying :wink:

edit: i forgot a vital piece of info. To access the Slider Menu in Mame core (where you must underclock the CPU), you need a keyboard overlay with at least TAB and ENTER keys. Use one from the download archive, or i can provide a custom joystick overlay, made speciffically for this purpose.
User avatar
ReSe2k
Posts: 100
Joined: Tue Nov 22, 2011 2:29 pm
Location: Doitsulando

Re: Cv1000 shmups finally full speed on android

Post by ReSe2k »

Aren't there official ports for Android of Deathsmiles, DFK and Futari available? I would assume they are somewhat optimized for phone/tablet.
User avatar
Shepardus
Posts: 3505
Joined: Sat Dec 13, 2014 10:01 pm
Location: Ringing the bells of fortune

Re: Cv1000 shmups finally full speed on android

Post by Shepardus »

ReSe2k wrote:Aren't there official ports for Android of Deathsmiles, DFK and Futari available? I would assume they are somewhat optimized for phone/tablet.
There were, but they've stopped working. iOS might be a different story, I think CAVE still supports those.
Image
NTSC-J: You know STGs are in trouble when you have threads on how to introduce them to a wider audience and get more people playing followed by threads on how to get its hardcore fan base to play them, too.
1CCs | Twitch | YouTube
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

Android ports are gone since 2013, and ios ports don't work above ios 10.
The ports themselves, while very good, they had a lot of cut corners in the graphics, framerate and gameplay areas.
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

el_rika wrote:
MameHaze wrote:Well the sound optimization definitely gave a big boost in places, although if the old version you have is based off the (illegal) x86 binary->C translation of an official Yamaha decoder that the Demul developers initially pushed (but was never included in any official capacity) it could still be faster.
.
Could be the case, i have no idea. It is indeed incredibly fast compared to any other core, including the latest mame, which is slowest unfortunately.
Well I'm a little surprised by that considering the only thing I've done over the years is further optimize it all, but ok, maybe changes by other people have slowed it down somewhere; it's full speed by such a large margin on the PC you can't really notice.

If the one you have does contain the stolen code that is a problem tho as said builds directly infringe on Yamaha's copyright.
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

Yeah, i don't know what to say man...

I've always wondered why some games tend to have higher and higher CPU requirements as new Mame versions are released. Leaving aside the 2014 core that you say it's compiled with a more android friendly code (did i get this right?), there is a clear difference of at least 30% in performance between 2015 (0.160) and latest (0.198 i think) regarding cv1000 driver.

A quick question MameHaze. Is it outside of any realm of possibility for the two missing games, Daiffukatsu BL and Akai Katana (i know Saidaioujou has a story of pride & egos that prevents it from being dumped/made public ) to be added to the older versions/cores? Is it even possible/legal?

Thanks so much!

edit: do you want me to provide the core for you and check it for yourself?
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

el_rika wrote:Yeah, i don't know what to say man...

I've always wondered why some games tend to have higher and higher CPU requirements as new Mame versions are released. Leaving aside the 2014 core that you say it's compiled with a more android friendly code (did i get this right?), there is a clear difference of at least 30% in performance between 2015 (0.160) and latest (0.198 i think) regarding cv1000 driver.
It's odd because the general trend in the last 10 years has been for things to get faster, with a few exceptions where specific accuracy improvements / code quality improvements have resulted in slowdown, at least on a PC. I suspect cam900 isn't performance checking a lot of his work tho, so could be introducing performance regressions (as well as the visual ones we had to get him to fix)

A quick question MameHaze. Is it outside of any realm of possibility for the two missing games, Daiffukatsu BL and Akai Katana (i know Saidaioujou has a story of pride & egos that prevents it from being dumped/made public ) to be added to the older versions/cores? Is it even possible/legal?
As long as you have one of the builds that doesn't have rendering issues in Pink Sweets (incorrect alpha effects vs PCB) and a few others then there's no reason they wouldn't run with the older code, they're not using any new features or programming the FPGA in a different way.
Thanks so much!

edit: do you want me to provide the core for you and check it for yourself?
I don't really have anything to do with RA, so not especially interested.
User avatar
Tatsuya79
Posts: 149
Joined: Tue Jan 07, 2014 10:29 am

Re: Cv1000 shmups finally full speed on android

Post by Tatsuya79 »

Couple of benches I did recently on an i5-3570k@4GHz PC:

>mame64_194 dynagear -bench 90
Average speed: 848.57% (89 seconds)
>mame64_211 dynagear -bench 90
Average speed: 568.07% (89 seconds)

>mame64_194 sf2ce -bench 90
Average speed: 1712.55% (89 seconds)
>mame64_211 sf2ce -bench 90
Average speed: 1542.26% (89 seconds)

>mame64_194 sfiii3n -bench 90
Average speed: 1438.73% (89 seconds)
>mame64_211 sfiii3n -bench 90
Average speed: 1111.20% (89 seconds)

>mame64_194 garou -bench 90
Average speed: 1071.21% (89 seconds)
>mame64_211 garou -bench 90
Average speed: 993.26% (89 seconds)

>mame64_194 ssriders -bench 90
Average speed: 1217.85% (89 seconds)
>mame64_211 ssriders -bench 90
Average speed: 1082.15% (89 seconds)

>mame64_194 espgal -bench 90
Average speed: 693.94% (89 seconds)
>mame64_211 espgal -bench 90
Average speed: 604.49% (89 seconds)

>mame64_194 sharrier -bench 90
Average speed: 1006.84% (89 seconds)
>mame64_211 sharrier -bench 90
Average speed: 899.55% (89 seconds)

>mame64_194 dragnblz -bench 90
Average speed: 1515.58% (89 seconds)
>mame64_211 dragnblz -bench 90
Average speed: 1557.32% (89 seconds)
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

Tatsuya79 wrote:Couple of benches I did recently on an i5-3570k@4GHz PC:

>mame64_194 dynagear -bench 90
Average speed: 848.57% (89 seconds)
>mame64_211 dynagear -bench 90
Average speed: 568.07% (89 seconds)
The line effects are emulated now, see title screen, also see ultrax etc. This required a major code rewrite to be more optimized for the line-by-line cases rather than the full-screen tile by tile cases.
>mame64_194 sf2ce -bench 90
Average speed: 1712.55% (89 seconds)
>mame64_211 sf2ce -bench 90
Average speed: 1542.26% (89 seconds)
not sure why CPS1 would have dropped, CPS2 would be more understandable due to the MUCH improved qsound, but the CPS1 code hasn't really changed at all.
>mame64_194 sfiii3n -bench 90
Average speed: 1438.73% (89 seconds)
>mame64_211 sfiii3n -bench 90
Average speed: 1111.20% (89 seconds)
The line effects are now correctly emulated, see combo counters in the Jo Jo games
>mame64_194 garou -bench 90
Average speed: 1071.21% (89 seconds)
>mame64_211 garou -bench 90
Average speed: 993.26% (89 seconds)
likely from code quality improvements, but not really a significant change.
>mame64_194 ssriders -bench 90
Average speed: 1217.85% (89 seconds)
>mame64_211 ssriders -bench 90
Average speed: 1082.15% (89 seconds)
Konami stuff is undergoing a major rewrite anyway, don't know why it would have dropped, but since the existing code is in maintenance mode as it was impossible to work with, anything could be happening as any bandaid fixes are accepted without checking their impact.
>mame64_194 espgal -bench 90
Average speed: 693.94% (89 seconds)
>mame64_211 espgal -bench 90
Average speed: 604.49% (89 seconds)
Only thing I can think of here is cam900 making it slower, no work has been done on PGM for ages.
>mame64_194 sharrier -bench 90
Average speed: 1006.84% (89 seconds)
>mame64_211 sharrier -bench 90
Average speed: 899.55% (89 seconds)
again, unexpected, although not really a massive drop. It is due a drop if/when the proper protection chip is dumped and emulated tho.
>mame64_194 dragnblz -bench 90
Average speed: 1515.58% (89 seconds)
>mame64_211 dragnblz -bench 90
Average speed: 1557.32% (89 seconds)
apparently got faster, no real reason it should have done (there were some accuracy improvements, so if anything I'd expect a drop) but again not a significant change either way.

A lot of the drivers you've listed are already ones that were tightly optimized tho, often at the expense of maintainable code (especially in the case of Konami, where it was so bad it's literally unworkable)

Overall tho, we've been spending a lot of time actually optimizing things lately, small improvements are being made across the entire codebase. Maybe the code quality improvements cost more than the optimizations are winning, but a lot of effort is being put in on that front and our own internal benchmarking is suggesting constant small performance improvements; maybe based on the figures you're giving us we shouldn't bother tho?
User avatar
Tatsuya79
Posts: 149
Joined: Tue Jan 07, 2014 10:29 am

Re: Cv1000 shmups finally full speed on android

Post by Tatsuya79 »

I was trying to pick drivers that didn't see too many changes (dynagear apart) to see if MAME by itself was making the machines execution slower or not.
It looks like an average -10% between 0.194 and 0.211 if it's not a compiler thing. (0.211 is official, 0.194 comes from emucr).
el_rika
Posts: 346
Joined: Sun Oct 30, 2016 8:44 pm

Re: Cv1000 shmups finally full speed on android

Post by el_rika »

MameHaze wrote:
As long as you have one of the builds that doesn't have rendering issues in Pink Sweets (incorrect alpha effects vs PCB) and a few others then there's no reason they wouldn't run with the older code, they're not using any new features or programming the FPGA in a different way.
I just tried Daifukkatsu Black Label in both Mame2014 (the fast one) and 2015 (0.160 based one) and it's not working. The game first appeared as a working game in mame, in v0.161. It works in Mame2016 core (based on 0.174) but the requirements for that core are way too high.
I was under the impression that, even if a game uses the same driver, it wouldn't work on older Mame versions unless it is activated somewhere in the Mame code. Am i mistaken? Should they work regardless, even in older mames?
MameHaze
Posts: 96
Joined: Fri Mar 08, 2019 3:35 pm

Re: Cv1000 shmups finally full speed on android

Post by MameHaze »

Tatsuya79 wrote:I was trying to pick drivers that didn't see too many changes (dynagear apart) to see if MAME by itself was making the machines execution slower or not.
It looks like an average -10% between 0.194 and 0.211 if it's not a compiler thing. (0.211 is official, 0.194 comes from emucr).
Well the ones that have slowed down but haven't seen other improvements all have the 68k in common, and some improvements to the 68k emulation have been made, as well as code readability refactors etc. in preparation for some significant work, so it could be that, especially as the SH2 based Psikyo driver is slightly faster (which is more in line with the improvements that have been being made)

There's a cycle-accurate 68k in the works (although it has been for years) that will likely allow for mid-operation wait-states etc. that will bring all those down further (but of course is a necessary thing to make certain drivers more accurate)

Also some other drivers may bench at lower rates, but the overall performance is actually better, just the extreme top is lower, benchmarks can be a bit misleading like that. Tthis is often the case with threaded drivers - code to improve the thread work can often add more overhead, dropping average performance as the top speed is not as high, but the better use of threads means the drivers don't choke in the situations that were overloading them before, meaning the bottom speed is also not as low, at least if you have enough cores. What is better, a driver that runs at an average of 400% but drops to 50% in busier cases, or a driver that runs on average at 150% but never drops below 100?
Post Reply