-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make a release? #56
Comments
👍 |
1 similar comment
+1 |
I am also interested in this. |
I just compiled it and although it runs well, the performance is not up to par with 1.3.2. At least on X-Wing Collector's Edition and TIE Fighter CD ROM. |
really? runs fine for me. What cpu do you have? |
i5 iMac. I'll try again later today. |
how old is the i5? I use to run the boxer dev version on my intel core 2 duo laptop and was ok. |
|
+1 Project that was last time released in 2012 looks as a dead one for a simple user. Isn't the current state of the project better that the released version? If it is - release is surely needed. |
It would be sad if this died. It's so much better than using vanilla DosBox on OSX. GoG needs to hire some staff to contribute! |
Ya I wonder what version I have on my Mac if I downloaded from the website. I bet it is two years old. I think I will recompile from source because I have a feeling it's 1.3.2. This project is too friggin awesome. |
My apologies for letting this issue languish without a proper response for so long. The plain answer for why I haven't done a 2.0 release is that vital parts of the 2.0 codebase are still either broken, feature-incomplete, dated, or just plain worse than 1.3.2; that a fixed-up 2.0 would not represent a genuine improvement for users over 1.3.2; and that I have not had the time or the enthusiasm to hammer what's there into something that is a genuine improvement. There are a host of reasons for this, which I'll discuss in detail below. First, some core features are still broken in the master branch: primarily game importing, which currently crashes if it tries to show a DOS installation window, owing to changes in the window model for regular DOS sessions. Those window changes were needed for the new full-window program launcher UI, which turned out to be an unfit UI design that needs to be rethought. That has discouraged me from fixing the game importing until a new design is in place, as otherwise it'd need to be fixed all over again. As lavadrop noted, Boxer 2.0's rendering is noticeably laggier than Boxer 1.3.2's. I rewrote Boxer's renderer for 2.0 to use hardware shaders for rendering styles, which at the time I saw as a big win; but when I wrote that code I did not understand the foibles of OpenGL as well as I do now, and I made a number of mistakes with the rendering path that result in worse performance than 1.3.2. This is an unacceptable regression, and those mistakes are hard to fix without rewriting that whole subsystem again. Aside from the renderer, I rewrote large swathes of the Boxer codebase to what at the time I considered modern coding standards. Most of those rewrites were more successful than the renderer's, insofar as they didn't make the application any worse, but they still left me with a legacy 32-bit-only Objective C codebase that has no migration path to Swift, nor lets me use modern ObjC features like ARC and automatic property synthesis. A codebase that will be worthless as soon as Apple decide to drop 32-bit binary support. These rewrites did not even (though they were intended to) fix what are now serious structural problems. Boxer is riddled with hidden assumptions about view and controller hierarchy; key-value bindings all over the place that invisibly trigger action at a distance; deep coupling where all roads lead to the app delegate; implicit reliance on emulator events occurring in a specific order that not even I can keep straight; and so on. These problems stemmed from unwise design decisions I made as a neophyte Objective C programmer back in 2010, and are now blindingly obvious to me as an experienced developer. They have made Boxer's codebase brittle, hard to improve and extend, hard to debug, nearly impossible to write tests for, and increasingly frustrating to work on. The rewrites also got me no closer to my ultimate goal, which is to split Boxer from a single-threaded app into separate processes for UI and emulation. This would allow a host of important improvements: like not stalling the emulation whenever the UI is interacted with, like being able to restart an emulator session without restarting the whole app, like finally being able to migrate Boxer to 64-bit, like being able to substitute dosbox-x or even another DOS emulator altogether. Instead, my 2.0 rework ended up wedding Boxer ever more tightly to DOSBox 0.74, making that goal even harder to achieve. Meanwhile OS X 10.10 put a bullet through the head of the skeumorphic aesthetic that was so fashionable during Boxer's glory years. A lot of the UI work I did for 2.0 is now grossly tacky and would look immediately dated upon release. Modernising the look of the application is probably less work than it sounds - it's about taking away, rather than adding - but it's also extremely dispiriting to have wasted so much time on an aesthetic that is now definitively dead and buried. So while I regard the 2.0 codebase as ultimately a failure, it does have a number of key improvements over 1.3.2: The underlying launcher system (where a gamebox can have multiple named program-launch options, with custom parameters) is a lot better than 1.3.2's single 'default program' system. This will be the foundation of a simple and flexible launcher panel, once I figure out how that should be presented in relation to the rest of the UI. (The full-window launcher panel design that 2.0 currently has is not it.) The game detection system is more robust and capable, theoretically allowing detection of multiple games within a single source, which will help with game disambiguation during importing (a big problem with Sierra CD collections, for instance). This capability is not currently used by 2.0's game importer, however. There are classes to natively read ISOs and BIN/CUE images, which will speed up game scanning and will finally allow importing from BIN/CUEs. These are not currently used by 2.0's importer either, and it still needs a raw FAT image reader as well to provide full coverage. The joystick controller subsystem has improved considerably behind the scenes, among other things allowing joystick buttons and axes to trigger key inputs. This requires a proper controller configuration UI to be of any use to anyone - a UI which has not been designed yet and will be a major amount of work. There is drive shadowing, a feature which I am not convinced should be turned on by default but which is vital for some use cases (such as standalone apps, like those that GOG release). This needs a simple and clear per-game UI to control it, along with clear documentation on what it does and where all your savegame files have gone. There is the documentation popover, which was the only wholly successful UI addition, and which provides an elegant way to view and add documentation to your games. There is printer emulation, which is easy to use, fairly reliable, looks cool and is already benefiting a number of business application users. It is also cheesily skeumorphic; the presentation needs cleaning up to show more of what you're printing and less of tacky faux-printer chrome. There are many new game profiles, and proper handling of OS X 10.9+'s accessibility permissions, and fixes for small but serious bugs like the import hanging forever because of busted .conf files. So, why not port just the bits that worked back to 1.3.2 and do a release from that? Because I shot myself in the foot with all my code modernisation. The underlying code has changed dramatically, such that even the improvements I made to pre-existing features cannot be dropped into the 1.3.2 branch without significant rework. (This, people, is why you shouldn't embark on a Big Rewrite unless you're damn sure you can finish it in one sitting.) Because of the structural problems I outlined above, I also don't want to put significant time into building anything new upon the 1.3.2 codebase. Boxer needs to be dragged kicking and screaming into the 64-bit era or it will be lost for good, and 1.3.2 is not the starting-point from which to do that. The most I would want to do from that base is a 1.3.3, that included the small bugfixes mentioned above along with Retina artwork. And that's hardly the grand update people would expect after 3 years of silence. Thus Boxer sits wedged in a proverbial hallway, like the sofa in Dirk Gently's Holistic Detective Agency, unable to move forward or backward. And for the past few years my personal and professional life has left me with no time or energy to address that and decide what to do about it. |
Sad all around...and now I miss Douglas Adams too. |
@alunbestor I appreciate your candid reply. |
Thank you for the in-depth status update, that should be copy-pasted in the blog in my opinion, not everyone browses GitHub. To me as an end-user Boxer is already amazing as it is, the only thing I really miss is the ability to map gamepad/joystick keys to keyboard keys. Joystick support in DOS is limited and some games need more than four buttons to be well playable. Another thing that would be nice to have would be an option to make the mouse cursor linear per game. The OS X mouse acceleration is really awful for first-person games, and in most cases I can set up a linear acceleration curve in ControllerMate and have it turn on automatically when a particular app is running. But since all DOS games are running in the same app I have to turn it on or off for the entire Boxer. |
I know it must feel a total kick to the groin to start all over again off of the 1.3 branch, but at least anything you do to the 1.3 branch from here on out is a step forward right? :) I suppose in reality, dosbox should be made 64 bit upstream. OSX will still able to run 32 bit for the foreseeable future. Granted, It would be nice, but I think the push should be made there. It would make your work easier. |
@alunbestor Do you think you could break the work that needs to be done into smaller, independent issues? I would enjoy starting to work on one. We could work together on a 2.0.x branch |
(And if not, could you list what we should keep if we decide to start from scratch?) |
Well for the record, I'm told the SVN Doxbox does compile with 64bit, but under performs for OSX relative to the 32 bit version. |
With regards to 64-bit: crappy DOSBox performance or not, it is absolutely essential for Boxer's future. I expect 32-bit binary support to be dropped within the next 3 OS versions - it's already been announced that OSX 10.12 will drop support for garbage-collected Obj-C applications (which Boxer, fortunately, never adopted). Apple have a precedent for dropping architectures: PowerPC binary support lasted three OS versions after the shift to Intel processors before it was dropped altogether in 10.7. Beyond basic survival, 64-bit is essential for migrating any existing code to ARC and to Swift, neither of which support the legacy 32-bit Objective C runtime. I should state that I have been working slowly on a Boxer rewrite in Swift for 10.10-era Cocoa. The goal of this is to design it from the ground up as a multi-process application, making use of modern AppKit tools, while avoiding the impenetrable kudzu of implicit dependencies that Boxer became. However, I'm doing this largely as a learning exercise for myself, not for the sake of others, and I will not be publishing it until or unless it reaches a functional stage and gets enough momentum that I can see it through to completion (or is at least in good enough shape for someone else to do so.) I'm painfully aware of the risks of such an endeavour, and do not wish to set any expectations for its success. I mention it only because it affects the amount of work I'm willing to do on the 2.x branch (which is zero) and the work anybody else should put into Boxer's current Objective-C codebase. With that in mind: the least redundant thing anybody could do would be to update Boxer to DOSBox-SVN or DOSBox-X. Swift or no Swift, single- or multi-process, the next Boxer version would continue using the existing Objective-C++ wrapper to talk to DOSBox's C++ code. So that code is safe to touch and will make the biggest difference to Boxer's functionality. Unlike the gordian knot of dependencies within Boxer itself, the interface between DOSBox code and Boxer is fairly well-defined: there are a set of C functions that Boxer has surgically inserted into otherwise-untouched DOSBox code to hook into events (or to just wrest control away from DOSBox altogether for particular operations). These C functions are all documented in All of my modifications to DOSBox 0.74 code are well-documented and bracketed with comments, and so it should (ha) be straightforward to create a diff from DOSBox 0.74 and then apply that diff to DOSBox-SVN or DOSBox-X in order to make it 'Boxer-ready'. Of course, if there have been major structural changes in DOSBox-X then all bets are off; I haven't checked their code to see. getaaron: The above may be one avenue you could help, but beyond this I feel like there are no independent issues that can be worked on in isolation. That's why Boxer got into this dead-end in the first place, and why I felt the best use of my time would be to chuck it out and start again. If you would like to contribute to a Swift codebase once/if it goes public, then you are most welcome; if you would like to port some of the fixes and improvements I mentioned back to 1.3.x, that would lay the groundwork for a much-needed maintenance release; if you'd like to fork Boxer 2.x and rewrite the bits that are broken, then I cannot physically stop you. But as I said before, I feel like 2.x is just not good enough to release, and too old and convoluted to provide a suitable point to continue from. |
Personally speaking, I hope 32bit will be supported for a little while longer, especially as wine is limited to 32 bit for the time being. (wine64 isn't capable of executing 32 bit programs) Unlike PPC code, intel chips are more then capable of executing 32 bit code, so there isn't a good reason not too... Here is the thread in question |
Doubtful, none of my changes to DOSBox go anywhere near that code. The dynamic cores are written in hand-tuned assembly, and perhaps the x64 version cannot be written in as efficient a way - I have no idea, and doubt I'll ever be able to understand that part of the code well enough to know. I do recall that OSX has a number of rules about e.g. stack alignment that differ from the conventions in Windows and Linux, so there might be some difference there that is disproportionately impacting the performance in OSX. As far as the end-of-life for 32-bit goes: there wasn't a pressing architectural reason for Apple to drop the Rosetta translation layer from 10.7, which allowed PPC code to be run on Intel - but they did it anyway, so they wouldn't have to maintain that whole infrastructure anymore. As far as I know, supporting 32-bit binaries within a 64-bit environment requires the OS to jump through more hoops, and it also requires that every single OS framework has to be compiled with 32-bit binary support otherwise any 32-bit applications that link against them won't work - and that in turn may be holding back their own framework developers from writing modern 64-bit-only code. The last OSX that supported 32-bit CPUs was 10.6, and Apple has been forcing all new app store submissions to be compiled for 64-bit for over a year now. Apple are not shy about phasing out stuff that has become a maintenance burden, and to them the price of dropping 32-bit support is that a few obscure or unmaintained cross-platform projects will stop working. |
Shame dosbox and wine are having trouble... both are quite important for online retailers.. It would be terrible if OSX gaming were to take that hit.. |
How can a program have problems with 64 bits? From what I understand it means the size of a word (largest amount of memory that can be read at a time). I also know that in C exact type sizes are not dictated by the standard, only the minimum size, so an |
It's harder for assembly code, as you can specify a call (for example, Under DOS, this would cause the whole computer to hang, as it had little to no memory protection. |
But DOSBox is not written in assembly, it's written in C++. Unless they were using inline assembly, in which case... why? I know this used do be done in the old days, but modern compilers can out-optimise a person. |
Please reread Alun's post 4 posts above. |
So I got Boxer to compile in 64-bit mode. This was done by replacing |
I've got it to link by updating/replacing the old frameworks. |
Make sure you also check out the submodules, and at least one submodule has a submodule of its own. You should be able to use |
Thanks. I followed your advice and got all the submodules loaded up. Unfortunately, it seems to fail to build at the last hurdle. To make sure it is not an issue with my system, I tried building in both Xcode 9.3 on macOS 10.13 and Xcode 8.2.1 on macOS 10.11. On each system the build fails due to the same 'semantic issues'. In the code, it is looking for: textShadow = theme.textShadow And produces the error: Property 'textShadow' not found on object of type 'BGTheme * |
It looks like it's trying to use a different version of BGHUDAppKit then that supplied by Boxer's repo. You may need to clean your build, as well as checking in the Edit: Oh wait, were you building for release? I think I found a bug in the configuration of BGHUDAppKit. Fix incoming. |
And fixed. You'll need to update the BGHUDAppKit submodule: |
Thanks again for pointing me in the right direction and for applying those updates. I found that my main mistake was selecting "update to recommended settings" for the frameworks within Xcode before building. Ignoring those allowed me to successfully build. |
I have been testing out this build of Boxer and I can happily report that on my i7 system it is working better than the 64-bit DOS Box SVN. Like with DOSBox, I am not experiencing any noticeable performance issues, but I am not measuring actual frame rates. If there is no difference to the naked eye then I am happy. However, I have only tested games up to 800x600 resolution. Also, Boxer fixes a sound stuttering and slow down bug that affects DOSBox (0.74 through latest SVN) on macOS High Sierra. I think it is some kind of SDL related issue that Alun must have patched or bypassed a long time ago. If I have anything further to report about 64-bit builds, I will do so here: |
The 64bit/master build successfully on Xcode 9.4 |
@alunbestor @almeath @MaddTheSane Apple announced today that we have 1 more year for 32-bit apps. They will run on macOS Mojave “with compromises” and this is the last year 32-bit apps will be supported. |
I am struggling really hard to compile a working version from there... XCode 9.4 here. First time user. |
Here is Boxer, Boxer Standalone and Boxer Bundler compiled from @MaddTheSane's custom 64-bit build, as of 22 May 2018 (there have been no updates to the code since April 2018): |
@almeath thank you so much! I wish I could add the NE2000 patch as well for networking, but hey I'm happy with this as it is. 👍 |
@MaddTheSane Your current fork of Boxer will successfully build in Xcode 10 on Mojave 10.14, but when you launch the DOS prompt or try to open any existing Boxer bundle (or create a new one) it will completely freeze up and produce a spinning pinwheel. The app has to force quitted. Interestingly, when I booted back into High Sierra 10.13.6 and built from there (still using Xcode 10) it produced the same result when moving the Boxer app back to the Mojave system. However, the version built within High Sierra worked properly on that system only. Lastly, the build linked to above (22 May, built in High Sierra) still works properly on my Mojave system. Whatever is going wrong, it only occurs when building from the latest code on the existing Github repository. |
Can confirm. Some change in Mojave must have made Boxer lock-up. I'll investigate later. |
I've narrowed it down to where it's happening: While attempting to load the code page, The line in question: https://github.com/MaddTheSane/Boxer/blob/23cc8e4c6d39a8a32d30f8af729152fd3e9becf1/Other%20Sources/ADBToolkit/OpenGL/ADBTexture2D.m#L507 |
As for the Xcode 10 version not working on Mojave: Mac OS X uses tricks to make apps built against a previous SDK work on modern systems. It wouldn't surprise me if this is what's happening here. |
Although this seems to be an issue with SDL 1.2 games in general. It also affects DOSBox compiled on Mojave. |
Yes, I tried compiling DOSBox in Mojave and it launches with a white screen. As with Boxer, earlier versions compiled in High Sierra will still work when brought across to Mojave. So, based on all that, if I can revert to XCode 9.x on my High Sierra system, I presume that I should be able to work around this issue until a permanent fix is sorted out. I know it is possible to download earlier versions of Xcode because I once went back to 8.x because of a similar problem. |
You might be able to use Xcode 9.4 on Mojave. You just need to make sure that you build and link against its include 10.13 SDK. |
Thanks, that worked. I installed Xcode 9.4.1 in Mojave and I was able to successfully build and run Boxer/Standalone/Bundler with no problems. |
@MaddTheSane, I'm sorry but I do not know where else I can post comments/questions about your experimental 64 bit build .. I am having issues with joystick support. Under generic Boxer 1.4 everything works fine in all joystick supporting games when using my Gravis joystick. However, under your build the same game boxes and settings do not work. The joystick seems to be detected by Boxer, and one of the buttons responds to input, but the directional stick itself does not respond at all. This seems to indicate an issue within the build that is affecting joystick functionality. |
@almeath What is the vendor/product IDs of the controller in question? |
@MaddTheSane, it's a Gravis Analog Pro (4 button). |
The one thing I haven't tried yet is testing if a standard 32 bit build of Boxer 2 Alpha exhibits the same behavior, as it might not be a problem with your 64 bit build specifically.. |
I have tested several different controllers, including PlayStation controllers with left and right joysticks. In Boxer 1.4 the joysticks on the PlayStation controller work properly (as does the Gravis joystick). In the 64 bit build the Playstation joysticks do not respond (as with the Gravis joystick). However, both the Gravis and PlayStation controllers are detected and the regular buttons respond in both builds. This indicates that something in the 64 bit build is preventing it from recognizing Y/X axis joystick functionality, despite detecting controllers and recognizing the regular 'fire' buttons. |
I also tested the above in Boxer 2.0 Alpha (32 bit), and it worked fine in that version. So it is an issue specific to 64 bit builds of 2.0, and not because of any changes between 1.4 and 2.0. |
Try disabling the Xbox One Bluetooth controller mapping by commenting out the |
52 |
Unfortunately, that did not fix the problem. All fixed button directional pads and fire buttons work, across a range of controllers. Not a single X/Y joystick responds. Very puzzling. |
I have developed a work around. Because I use Boxer Bundler to run my games as individual apps, it is fairly straight forward to use USB Overdrive to map my controller/joystick buttons to individual keys on a per-game basis. |
I wanted to know if there is any intention on releasing this as boxer 2.0 in the future, and if there is any work that need help for that. Boxer is way to awesome to vanish or stop in the 2012 1.3.2 release.
The text was updated successfully, but these errors were encountered: