Earlier quoted context omitted.
Elaborate on what? It seems rather obvious that a popular game with a minor bug rendering it unplayable would have that bug fixed by someone for free if it was open source. Or do you want me to elaborate on why it's too bad? Well, pinball is the best game that was ever included with Windows, so it's unfortunate that it's not still there.
First, it was not a minor bug, it is a major bug that made the whole product unusable. Second, the whole code base was one big, nasty, uncommented mud-ball. From the article: "... we simply couldn't figure out why the collision detector was not working. Heck, we couldn't even find the collision detector!" I was genuinely curious to hear how you think sprinkling fairy dust open source on top of the mess is going to ma…
Why was Pinball removed from Windows Vista?
121–130 of 149 posts
Re: Why was Pinball removed from Windows Vista?
#122Earlier quoted context omitted.
A huge amount of Unix software uses UTF-16 just like Windows (including Java). You're just being deliberately ignorant of the history. UTF-8 didn't exist and UCS-2/UTF-16 was the standard . One could argue that the Unicode Consortium screwed up assuming that Basic Multilingual Plane would be enough characters for everyone.
I am not ignorant of the history. Please try to follow this reasoning: 1. Faced with a new character set which was larger than eight-bits (Unicode 16-bit) Microsoft said "hey let's make an all-new API" and set to work rewriting everything 2. Faced with a new character set which was larger than eight-bits (Unicode 32-bit), the Unix guys said "hey let's create a standard way to encode these characters and rewrite nothi…
But yes, some Unix guys eventually faced with a bigger problem, significantly more time, and a design already started by the Unicode Consortium eventually solved it better. But that's not really much of an argument.
Also arguing that there is no risk going to UTF-8 is ridiculous. Anything that treats UTF-8 as ASCII, as you suggest, is going to do it wrong in some way. At least making a new API forced developers to think about the issue.
Re: Why was Pinball removed from Windows Vista?
#123Wait, can't 64-bit windows run 32-bit programs?
Answer is in the article: [That would have been even more work, because there was at the time no infrastructure in Setup for having 32-bit-only components. (And then automatically uninstalling it when WOW64 was disabled.) And besides, all the people who criticized Windows 96 as "not really a 32-bit operating system because it has some parts in 16-bit" would use the same logic to say that 64-bit Windows is "not really…
If so, then I guess I've got to marvel at how popular "16-bit" Linux is - I can run 64-bit only applications, watch Flash, Netflix... whoever knew a 16-bit OS could be so powerful!
Re: Why was Pinball removed from Windows Vista?
#124The best part of this article is in the comments. An original programmer on the game explains the reason that the bug was occurring and also why the code was unreadable (hint: they did it in assembly) Ah, the quantum tunneling pinball! We ran into this while writing the original code at Cinematronics in 1994. Since the ball motion, physics, and coordinates were all in floating point, and the ball is constantly being…
So all it needs it a really good cup of tea.
Re: Why was Pinball removed from Windows Vista?
#125Earlier quoted context omitted.
Assembler makes the point even more apparent: MSG_LOOP_PostMessage: mov a, MSG_Head cjne a, #MSG_BUFFER_END - 2, mlpm0 mov a, #MSG_BUFFER sjmp mlpm1 mlpm0: inc a inc a mlpm1: cjne a, MSG_Tail, mlpm2 clr a ret mlpm2: mov r0, MSG_Head mov @r0, MSG_Code inc r0 mov @r0, MSG_Parameter mov MSG_Head, a mov a, #1 ret I wrote that about fifteen years ago. Of course, the routine's label tells you something: "MSG_LOOP_PostMessa…
This code is definitely readable, but I feel like the port from assember to C might have been too direct. Originally head was a pointer and it made sense to have conditional jumps, but in the C code head is an offset starting at 0. Why keep the entire if structure when you can simply have msg_loop.head = (msg_loop.head + 1) % MESSAGE_LOOP_SIZE // Advance head and wrap
I remember I had to convert this to C in a hurry because new features had to be added. Doing it in assembler was just about unthinkable. The entire project consists of nearly 100 assembler files and resulted in about 90 files once translated into C.
This was a marathon run and once the entire project was translated and working the focus was narrowly shifted in the direction of adding functionality rather than optimizing the code.
This code was running on an 8051-derivative. Performance was important. You are always counting clock cycles on these systems. I think that if you look at the resulting machine code with the relevant variables mapped to the data memory space the modulo statement doesn't really do any better than a spelled-out conditional statement. In fact, it could be a couple of clock cycles slower (just guessing).
Again, it's been a long time. I can totally see looking at the generated assembly and saying something like "That's as fast as it it going to get. Move on!".
We all make less-than-elegant code at one point or another. Hopefully not too many times. :-)
http://www.keil.com/support/man/docs/is51/
https://www.silabs.com/Support%20Documents/TechnicalDocs/C80...
Re: Why was Pinball removed from Windows Vista?
#126Earlier quoted context omitted.
To me that fragment says that the story is a bit more colourful than what really happened. This quote comes from Raymond Chen. The guy who includes ISA bus, interrupts and starting up a debugger in one post ( http://blogs.msdn.com/b/oldnewthing/archive/2007/01/30/15574... ); or analysing chip issues and software workarounds for them ( http://blogs.msdn.com/b/oldnewthing/archive/2011/01/12/10114... ). Maybe the code w…
A programmer from the original game commented on the article and said much of it was done in asm then later ported to C by msft, so it probably was really that messy.
Re: Why was Pinball removed from Windows Vista?
#127Earlier quoted context omitted.
Open source wasn't exactly a huge priority for Microsoft in 1995 when the application came into existence. In fact I think it's a testament to their backwards compatibility that pinball survived for as long as it did with little or no maintenance.
Quite the opposite. In 1995, killing open source was one of Microsoft's top priorities. It isn't much lower on the list these days.
"In the last week of October 1998, a confidential Microsoft memorandum on Redmond's strategy against Linux and Open Source software was leaked to me by a source who shall remain nameless." This document can be read at http://www.catb.org/esr/halloween/halloween1.html
Read more at http://www.catb.org/esr/halloween/
Re: Why was Pinball removed from Windows Vista?
#128Earlier quoted context omitted.
"Often, however, the same effect is had under the guise of "clever hacks" - look how clever and awesome I am!" Sometimes I write code like that. Then I delete it and write it the proper way. Clever code is code you will not be able to understand in the morning. There is Kernighan's adage "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you a…
useful thoughts. it reinforces my view that it's really the intent that bugs me. I've dealt with crap code, littered with comments like "I'm sorry, didn't know what I was doing, etc". The person/people knew they were in a tough spot. In other cases I've dealt with crap code with random comments like "Java sucks. Sun sucks. Everyone using Java sucks and is stupid - Ruby is the only true language, and it sucks that thi…
Re: Why was Pinball removed from Windows Vista?
#129Earlier quoted context omitted.
This code is definitely readable, but I feel like the port from assember to C might have been too direct. Originally head was a pointer and it made sense to have conditional jumps, but in the C code head is an offset starting at 0. Why keep the entire if structure when you can simply have msg_loop.head = (msg_loop.head + 1) % MESSAGE_LOOP_SIZE // Advance head and wrap
You know, it's been about fifteen years. I remember I had to convert this to C in a hurry because new features had to be added. Doing it in assembler was just about unthinkable. The entire project consists of nearly 100 assembler files and resulted in about 90 files once translated into C. This was a marathon run and once the entire project was translated and working the focus was narrowly shifted in the direction of…
Actually, on modern processors the modulo would probably be more efficient than the conditional due to cool stuff they do like pipelining. Pipelining is basically where they execute instructions ahead of time (sort of in pseudo-parallel); and so when there's a branch, there's a fair chance the results from future processing might have to be thrown out.
One of the techniques that's used to go around this is branch prediction[1], where they initially guess whether a branch will be taken or not and then depending on whether the branch was actually taken, they change their guess. This works particularly well for for loops and the kind.
Another development on the ARM side (and MIPS too, I think) are instructions that are embedded with conditionals in them.[2]
[1] http://en.wikipedia.org/wiki/Branch_predictor
[2] http://en.wikipedia.org/wiki/ARM_architecture#Conditional_ex...
Re: Why was Pinball removed from Windows Vista?
#130http://mspinball.weebly.com/index.html
See: http://blogs.msdn.com/b/oldnewthing/archive/2012/12/18/10378...