Personally, a voxel space renderer for the PlayStation (Comanche terrain style rendering).
In theory, it's really not suited for this because (at least back then) this was designed for computers with:
- relatively large amounts of RAM (uncompressed color+heightmap data takes a lot of space),
- fast CPUs with data caches (it's a 2D trapezoidal walk of a top-down projected fustrum with plenty of additions, multiplications and divisions),
- memory-mapped linear framebuffers (for software rendering).
The PlayStation has none of these things: only 2 MiB of main RAM; an in-order scalar 33 MHz MIPS III processor without a FPU or a data cache, where any CPU load from main RAM stalls the pipeline for 5 cycles, multiplications have a 6 to 13 cycles latency and divisions have a 36 cycles latency; and the only way to touch VRAM is to send commands to the 2D GPU.
What it does have is 4 KiB of I-cache (direct-mapped), 1 KiB of scratchpad with no wait states and a fixed-point GTE coprocessor which is mostly geared towards projecting 3D points onto a 2D screen and not general matrix/vector processing. Meaning that if I get my hot loop within 1024 instructions (and no function calls), fit my working set+stack within 1 KiB and can pipeline the GTE for transformations and the CPU for map scanning/GPU submissions, it might just work.
So far I'm getting decent framerates (like 10-15 FPS at 256x240) with just software projection and GPU line rendering. Right now I'm wrestling with the GTE and various ways to trick it into transforming more points than it's supposed to be able to do, by looking at the fixed-hardware math equations for the various instructions and trying to fit my equations into them (doing stuff like putting relative altitude into X/Y vector registers instead of coordinates and massaging the rest of the values to get screen Y coordinates out of it).
Kind of a hardcore topic to pick for my first homebrew ever, but I craved a simpler, low-level optimization challenge as a pipe cleaner, after working on ghidra-delinker-extension for so long.
Probably because we have a well established history of regularly changing regimes. Since we overthrew royalty in 1789 we've had five republics, two empires, three monarchies and a bunch of short-lived totalitarian regimes, coups and other major political events.
If anything, the longevity of the Fifth Republic is starting to become unusual (only the Third Republic and the Ancien Régime have lasted longer). Maybe we're overdue to flip the table again as per tradition.
I'm only pointing out that ever since the French revolution, we have a rich history of regime change (and also of strikes and demonstrations). Some were due to external factors (like the Vichy régime during WW2) and some were bloodless (like the end of the Fourth Republic).
Us rolling the dice whenever we have a major political crisis is a meme at this point, for better or for worse we're just not the kind of people to keep the same constitution around for 250 years.
Isn't the information in this already largely known and documented? There have been over 30 years of tinkering, reverse-engineering work and assembly programs on the (e)z80 TI graphing calculators.
Incidentally, that lineage has finally come to an end as TI has released the TI-84 Evo-T, which uses an ARM Cortex-M core and a firmware apparently rewritten from the ground up.
I'm tinkering with a voxel space rendering tech demo as a PlayStation homebrew. After one weekend of work I'm getting decent results (like, 10-15 FPS) and I've yet to use the DMA, the GTE or even polylines primitives.
It's refreshing to dust up trigonometry and good old low-level optimization tricks. When the scratchbuffer has 1 KiB and the stack can only use a fraction of that, it makes me realize how spoiled I'm at work with the microcontrollers we have, with threads being allocated 8 KiB of stack and backtraces with over 50 functions of C++ templates on it.
When you are interacting with the government for official business, what purpose is there to hide one's identity? You can't exactly not fill in your name in your tax return.
For the non-government/private business however, it is indeed a matter of privacy. France rolled out a while ago the requirement to establish the user's age when accessing porn sites. I refuse to do that.
Who said anything about hiding anything? If they summon me to show up somewhere or if there's a legitimate reason for interaction with the government I'll show up at some local place, show my ID and I'm done with it.
I'm just not gonna hand them even more tools of control.
I'm not hiding it. It's on a plastic card that I paid the government to print for me. I'm happy to let them see that anytime they ask in relation to official business or legal concerns.
I do not want this ID to be digital, attached to any devices, or available for inspection outside of my control at any point in time.
> You can't exactly not fill in your name in your tax return.
I just sign them with ink. The same I do with any other contract or agreement. Surprisingly those contracts are just as valid as the tax bill I receive every year and yet no digital anything was ever involved with them. They're fully analog and yet fully enforceable by law.
> France rolled out a while ago the requirement to establish the user's age when accessing porn sites.
If you give them an inch they will take a mile, or perhaps, if you give them a centimeter they will take a kilometer. I couldn't care less if the government is somehow inconvenienced by analog privacy. I do not perceive any personal benefits from having my ID be "digital."
As a French person, I'm confused as to why DigiD is not a government-run project like FranceConnect is. I'm even more bewildered that an American company thought that they could take over the national identity management system of an European country, as if this was business as usual.
It's an unfortunate Dutch way of doing things. The firm believe that the market will solve it if you have a contract that says thing will be solved. Write a tender, pick the cheapest party, trust in contracts, hope it won't break before you (the external contractor pushing for it) move on in a few months time.
The people who pointed out that none of the moving parts of DigiD should have been outsourced were ignored until the tide shifted this year.
I'm honestly surprised the government decided to intervene. The usual method is to keep on believing in the signed piece of paper until the shit hits the fan (like with the Fyra high speed trains) — never mind that the US (where the buyer is from) is not likely to give a toss about those pieces of paper if they need something from our data.
It's important to add the context that whenever our government tries to do something by themselves it ends up late and severely over budget.
So you have to weigh the risks of outsourcing to the risk of the whole thing becoming very late and very expensive. The risks around outsourcing are something further down the line, the risks of everything becoming expensive and late are something that will give the responsible politician a headache now.
I work (and always has) in the private sector and we can be even better at ending up over budget and be even later at delivery. I don’t believe for a moment that the government has a monopoly on underachieving!
The problem isn’t public or private, it’s incentives.
If the private company is granted a defacto monopoly, it doesn’t matter that they’re a “private” company, they will have the same incentive and accountability problem.
What we know for certain though: Government taking over something is definitionally a monopoly and 99.99% of government employees are not subject to the accountability mechanism of elections.
Historically, the largest boondoggles of waste have always come from government, given they can legally hold a gun to your head and take 50% of everyones money to fund their “projects.” Private companies can’t take your money by force, unless being given those contracts by government. So again, the the incentive issue fundamentally arises from an entity being entitled to gather assets using violence rather than voluntary exchange.
Expat/kennismigrant here - it's same "ends up late and over budget" for literally every country (and private businesses).
What Dutch government/politicians seems to be "ahead" compared to other countries - is combination of narrow or short sightedness and (over)correction trough rules, laws and regulations.
Like giving subsidies and tax breaks for electrical cars, rooftop solar panels and mandating household switch from gas (LPG and such) to electric heating and cooking. And ignoring industry professionals for decades saying the distribution network won't scale.
More of the same with stuff like 30% tax rule for expats, which was originally introduced as cost saving measures because actually doing bookkeeping for expatriate expenses was costing government more money. But then more recently expat tax breaks have been reduced and phased out "because cost saving". Meanwhile employers have trouble finding highly skilled workers. And we're limiting numbers of foreign students in universities (by forcing them to do it in Dutch instead of English).
Some Bulgarians cheated/defrauded Dutch tax returns or such - and "solution" was ML/AI reviewing things - but it turned out to be broken/biased and (ab)used for other things - leading to the whole toeslag scandal and government resigning.
Same for nitrogen vs lack of housing... And many more.
> ignoring industry professionals for decades saying the distribution network won't scale.
Who says that? The British National Grid says the opposite. Or is it specifically the Dutch network that would not handle the changing requirements? If so what makes it special?
The Dutch electric grid is owned and operated by a few companies that are heavily regulated by the ACM (Authority for Consumer and Markets). Those companies have been wanting to invest in upgrading the grid for many years, but the ACM refused them permission as they considered it unnecessary investments that would drive up the costs for consumers.
Now we’re fucked because the government has been stimulating electric cars, heat pumps, etc. to meet climate goals, which increases the load on the electric grid which is now unable to keep up with demand. Something everyone saw coming except for the ACM.
Are your heat pumps replacing gas? Because if not then replacing resistive heating with a heat pump results in less load on the grid not more. My heat pump outputs 7 kW for an input of less than 3 kW.
Outsourced stuff is late and expensive too, just not directly the responsibility of the minister or secretary of state because of the magic piece of paper in between.
IT is hardly something we need to do occasionally, so build up a department that can do it (not just write up huge reports about what it should do and outsource, like Logius) and invest in the people that will work there (retaining them as much as possible). Give a big middle finger to consultants, and listen to the tech experts. Build boring stuff that works instead of a new app every month.
It's not impossible in theory, and cheaper in the long run. It's impossible because asshats who would actually benefit from left and centre politics keep voting right-wing parties in to power.
I agree that the government should do IT in house, ideally, because it's a core business for them. The reality is that it is very hard to attract and retain good IT staff on a government salary. The people who need to manage all that in a cost-effective way are especially hard to find.
So we end up with expensive consultants doing the work. Consultants have the wrong incentive. They don't want to stay in one place to long because it looks bad on their resume and overruns mean more money for them.
So really, I can see why a seasoned politician chooses the safest option for him. By the time an overrun occurs he will have moved on to the next job. I don't think left or right-wing politics has much to do with this dynamic. How will a left-wing politician magically get capable IT staff that higher paying industry can't even get enough of?
By attempting to? There is a huge and I would argue growing number of talented people who are dismayed by what the tech industry has become and would actively want to work on values aligned projects
The "local" company is already UK owned though, so at most "European", not national or EU.
What I find strange is that the Dutch government does have its own datacenters, e.g. ODC-Noord (1), but they're still looking to outsource the hosting even after the current contract ends in 2027.
I suspect that most government departments see data centers as a liability and are very happy to outsource to the big providers, apart perhaps from the ones hosting stuff they don't really want you to know about.
It's always better to be able to blame a supplier for something going wrong if you're a senior leader or politician. For some reason, if it does happen no one has to resign.
There is loads of UK Critical National Infrastructure on AWS, probably Azure too. And the Home Office put up £10 million tender to shut down an old data centre not that long ago without a confirmed replacement - https://www.find-tender.service.gov.uk/Notice/018193-2024
Seems like governments, at least ones of the size under discussion here, are big enough to have a general services agency run a consolidated data center for the rest of the government, allowing individual agencies/departments get similar benefits of outsourcing to a commercial entity.
The entire customs system of all of China used to be run by European foreigners. Not because of Western imperialism, but on invitation from the Chinese rulers, as a measure to combat corruption.
Some European countries right now have their currency printing and their passport printing outsourced to foreign nations.
> Some European countries right now have their currency printing and their passport printing outsourced to foreign nations.
Whilst I still agree with your premise that this is not wise, I should point out that, for example UK passports, whilst produced in Poland, are personalised in the UK. Not that that helps the UK case since the personalisation is done by Thales...
For France it certainly is, probably because of our stubborn focus on strategic autonomy. For example, offshoring passport printing to me sounds like a great opportunity for identity theft and document forgery by people outside of your jurisdiction.
I do kinda get the China customs system example though, only because if corruption is bad enough that it's a greater concern than opsec, then you're kinda hosed anyways.
> For France it certainly is, probably because of our stubborn focus on strategic autonomy.
You're seeing people wake up to the threat now, with the opposition against Kyndryl and the Nexperia thing.
Somewhat more controversially, I'm also worried about the French government owning large parts of the Dutch defense industry through Thales and Airbus. (And, to a lesser extent, German and Spanish governments.)
Very little of the Dutch defense industry is still Dutch-owned. Only Damen comes to mind.
The days of nationalized French defense companies and state arsenals have been over for quite a while. Assuming I didn't make any mistakes:
GIAT was privatized, then renamed to Nexter, then merged with German KMW to form European KNDS and now it's about to do an IPO.
All of the French aerospace industry (including missiles) bar Dassault and Thales is inside Airbus.
Arquus was bought by Belgian John Cockerill.
I could probably cite more if I dug deeper, but while we still have French defense companies like Dassault, Naval Group and Thales, a fair amount of our defense industry is no longer exclusively French owned.
And if the French government or owner starts getting uppity, you could always take a page from the Swedes and how they Kockums the shit out of ThyssenKrupp.
The French state owns a 26.6% of the shares in Thales, with 36.4% of the voting rights. The Dassault family has another 30% of the voting rights. A combined controlling share.
The Dassault family has very close ties with the French government and defense industry. There's no doubt in my mind that if the French government gets serious and says "Jump!" Dassault would just ask "How high?"
The situation with Airbus is a little more healthy, with the French government share being much lower (11%), and the German (11%) and Spanish (4%) governments balancing it out a bit. Airbus is also a smaller part of Dutch defense. Still, none of those governments is Dutch.
The fact that the French government owns more of the Dutch defense industry than the Dutch government is a problem.
> The Dassault family has very close ties with the French government and defense industry. There's no doubt in my mind that if the French government gets serious and says "Jump!" Dassault would just ask "How high?"
I'll push back on that point.
The FCAS program was originally conceived as a French-German joint political initiative by Macron and Merkel. The NGF plane within it has been dead in the water for years because Airbus and Dassault can't work out their disagreements. It's a conflict between two industrial companies that's blocking forward progress, with the Airbus and Dassault CEOs duking it out across press releases and shareholder meetings.
If Dassault was a French state puppet, Macron would've strong-armed Dassault into working with Airbus on this €100 billion project by now. Yet, the French President seems to know better than to try and do that. One does not get to be basically the only major private independent defense company in a famously nationalized French defense industry during the Cold War without managing to hold the French state at arm's length, especially during the nationalization years of Mitterand's presidency.
Though your concerns about ownership of the Dutch defense industry are certainly valid, I don't see how the European defense industry could have completely avoided consolidation after the end of the Cold War, given the budget cuts to defense. The Americans went much further on that front and nowadays the lack of internal competition is causing them all kinds of problems for them.
KNDS is certainly planning to IPO later this year, but with only 20% of the stock free floating. The plans are that the French and German governments will own 40% each.
Arquus is not owned by "Belgian John Cockerill", it is owned by the John Cockerill Group, which in turn is owned by Frenchman Bernard Serin.
Naval Group: 62% owned by the French Government, 25% owned by Thales.
While it's certainly not wholly government-owned, it really doesn't look like a private sector either. For some companies the publicness looks a lot like a fig leaf.
Most National governments embraced globalism and free market solutioning. It worked both ways.
American Federal Systems also have European and Indian operators but it gets more restricted depending on what part of the system you're dealing with. Even then, the operators get it wrong.
Many "American" firms are being served by Irish, Bulgarian, and Dutch operators for example. When you get to Fedpod, the restrictions are usually tiered, not all or nothing. It's why US firms got caught with Chinese handling data.
The question isn't should Europe and even America clean it up - it's how much is legitimate national soverignty and how much is going to be straight mercantilism in the Cloud/SaaS sector.
Meanwhile Palantir is getting in tight with the UK government, to the point of managing the UK's firearms, explosives, and poisons licensing: https://news.ycombinator.com/item?id=48403043
As a Dutch person, I'm not. Dutch administrators are traditionally wary of doing anything themselves that they could conceivably outsource to a commercial party. That also results in endless swarms of locus^H^H^H^H^Hconsultants feeding on our taxes.
I hate it, but what can you do, this is sadly what people here keep voting for.
I’m unaware of this kind of topic ever being one of the points in election time. This as opposed to topics like animal welfare. Sovereignty is only now becoming more visible as a votable topic.
Sadly, I don’t know of a way to influence how our government practices IT. Except maybe to work for Logius. And even then there will be the topic of funding.
I’m unaware of this kind of topic ever being one of the points in election time.
IT sovereignty may not have been a topic during elections, but it should be clear to anyone now that the VVD (political party that has been in most governments in the past decades) is a revolving door. When given a choice, they will always prefer letting the market do it/deregulate. This is not limited to IT. Banks, insurance companies, gas companies (Shell), etc. is where they work before they go into politics and/or work after they leave politics.
Oh sure. This applies to almost all politicians, not just those VVD. They are more sought after because they actually have been in government long. (And indeed, maybe it is even a vicious circle.)
However, election topics never were about this kind of meta behaviour and more of the topics. Many people voted for PvdA, GroenLinks, D66, and other parties. Even for the more right wing ones than VVD.
The thing is that topics these days are so broad that they do not revolve around left/right or liberal/conservative anymore.
On topic, privatisation could perfectly have been paired with an European ideal from the beginning. In fact, before all these shenanigans with the one currently called president started, it was still believed we as “the West” were one hegemony. In that light, things were privatised along the ideals. It is only lately that the ideals changed to include more country sovereignty.
Graphically, either play on a CRT (or with CRT filters) or use an emulator that has PGXP geometry correction to eliminate vertex jittering at higher rendering resolutions.
As for gameplay, that console has a massive library, with thousands of commercially released games (and a lot of hidden gems). I'd be surprised if any gamer wouldn't find at least one to their taste in that catalog.
Usually, that kind of stunt nowadays is done by using the lowest significant bits and masking them off when dereferencing the pointer, trading off for a higher alignment (so 4 bits gives you 16-byte alignment).
The PS1 also happens to have RAM aliasing, because there's not enough RAM to cover the entire decoding window for the RAM. I don't know the details, but I've seen PS1 executables setting their stack pointer to the end of the devkit's 8 MiB of RAM and yet they work on retail units, because it ends up at the end of the retail's 2 MiB of RAM. So theoretically, you could stuff bits in there too (and without messing with different memory regions with different cache behaviors).
You can see this on many consoles, iirc it basically just boils down to some address pins not being connected anywhere, so whatever the pins are set to doesn't matter as they're just out in the air so to say.
This was also done on the original Macintosh. The Motorola 68000 was a 32-bit CPU but only supported a 24-bit address bus, so the top bits were used by the OS as flags.
Then they released a new Mac with a 68020 that supported a 32-bit address bus and there was a multi-year process of making the OS and all the software "32-bit clean" to take advantage of it. There were 68020 Macs where the ROM in the machine itself wasn't even 32-bit clean and needed a software patch on boot.
Then there’s the opposite situation. I knew the guys who ported NBA Jam: TE from arcade to PC (by hand-translating assembly!). Apparently the arcade CPU had bitwise addressing. And, because pretty much all of the data was aligned to bytes, the arcade programmers liked to stuff 3 bits of extra parameter data into the low bits of pointers.
it's not uncommon for runtimes to use always-zero bits from aligned pointers or bits above 48 (unused in most current 64bit CPUs) to store flags today. you don't need special 'bit-addressing' to do it. byte addressing works just fine.
On the PS1 it's actually slightly more complex than that. The CPU does support up to 16 MB of main RAM (development kits and PS1-based arcade systems did come fitted with more than 2 MB) and has a register to configure its geometry, with the CPU automatically generating an exception when attempting to access unmapped memory. However, Sony's BIOS made the mistake of initializing said register to 8 MB (the configuration used by dev boards) even on retail hardware, resulting in the 2 MB region being mirrored four times. Development builds of games typically assumed 8 MB and put the stack at 0x80800000, so the accidental mirroring made that setup work on retail hardware too (at least as long as the stack did not collide with the heap) even if the developer forgot to move the stack down in the final build.
The PSX BIOS code sounds like a disaster. Everything I read about the software part of the stack, makes me amazed the console even boots
The faulty malloc. A bunch of random qsort implementations. Reiji Asakura wrote an account of how the BIOS and kernel were developed, and it sounds so amateurish
Then there's the way the JP console checks for faulty ECCs on sectors 0..15, not as a clever anti piracy check, but because the CDU-920 broke CD-XA authoring...
The commentary section starts with "The retail PlayStation BIOS code is a constellation of bugs and bad design." and it gets worse after that. There are hidden gems inside the source code comments of that simili-reconstruction.
You could do that on PC too, if you mmap() one given block of memory at multiple locations. I think that's how PS1 emulators handle mirroring (it's been a long time since I took a peek at the innards of DuckStation).
ha! I wish I knew this back then, but now I do remember - I think what we did was simply clearing the bit before access, and it was in just dozen or so places. Slap a macro and you are done!
I'm the author of ghidra-delinker-extension and these are not full lists of these projects. Here are some public projects that I'm aware of which aren't listed:
I've also been in discussion with people working on decompilation projects which are private. I won't share details, but it includes both well-known games and recent games (as in, built with link time optimizations).
The decompilation community is quite decentralized, with lots of Discord servers specific to one platform or a series of games. In the case of Windows it's also heavily fragmented, as there is no equivalent to community-standard tooling like splat or dtk-decomp for that platform, although my Ghidra extension has carved itself a niche in it.
I'd rather not post invite links here directly out of concern for spamming, but I can leave some easy-to-follow breadcrumbs.
The decomp.me Discord server invite link can be readily found on that website and in the README of its GitHub repository. It's the closest thing to a central hub of the decompilation community. You can find some invite links in its chat history by searching for "discord.gg" (including the servers listed below).
Some of these Discord servers have a #other-servers or #related-servers channel with tons of invite links to other similar Discord servers. In particular, these servers have those channels:
- PS1/PS2 Decompilation
- GC/Wii Decompilation
That way, you should be able to find dozens and dozens of Discord servers on that topic. There are still many more out there (I've joined at least six others that aren't directly reachable from the invite links inside the servers I've mentioned).
There are also other Discord servers about reverse-engineering that can contain discussions about decompilation techniques or projects.
I mostly don't use Discord, but I'm intrigued how this system works. If the invite link is already posted on the project website and the readme of a Github repository, why would putting it in a Hacker News comment risk spammers?
First, because personally I think it's bad etiquette to post an invite link publicly on large, open-access forums like Hacker News.
Second, because while the biggest decompilation Discord servers have effective moderation team and processes, the vast majority are just a server for a project from one or a couple of persons with <100 members joined. Such small servers don't have round-the-clock moderation or customized settings.
Third, because I regularly see phishing crypto spam posted in the smaller servers. Spreading invite links publicly carelessly increases the odds that these scammers find them and spam them.
The part I don't understand is how posting the link on HN is different from posting it on Github. I'm wondering for example if Github has some sort of extra bot protection HN does not, or if there's some cultural difference I'm not aware of or seeing.
Discord servers are more like a hangout place than a public forum and public invite links are like putting a key under a mat. Just because the owners of a Discord server put it on their public webpage or GitHub repository doesn't mean it's cool to spread it around willy-nilly.
There are also practical concerns. An invite link that needs to be deleted (for example due to spam abuse) means that it will no longer work. Updating all the places where that old link appeared to the new one can be impractical or impossible.
HN isn't a good place to share Discord invite links. I'd recommend putting an email address (or something) in your bio – ideally one you don't mind getting spammed – so people can send such things to you semi-privately.
Laziness probably. Maybe there's an argument if you want to avoid branches and just blast the integer out in a fixed number of statements/instructions/bytes, but that sounds a bit fringe.
I happen to be guilty of a variant of this, where I don't bother emitting a 16-bit floating point number instead of a 32-bit one in my CBOR encoder even if it can be represented exactly. That one is laziness.
In theory, it's really not suited for this because (at least back then) this was designed for computers with:
- relatively large amounts of RAM (uncompressed color+heightmap data takes a lot of space),
- fast CPUs with data caches (it's a 2D trapezoidal walk of a top-down projected fustrum with plenty of additions, multiplications and divisions),
- memory-mapped linear framebuffers (for software rendering).
The PlayStation has none of these things: only 2 MiB of main RAM; an in-order scalar 33 MHz MIPS III processor without a FPU or a data cache, where any CPU load from main RAM stalls the pipeline for 5 cycles, multiplications have a 6 to 13 cycles latency and divisions have a 36 cycles latency; and the only way to touch VRAM is to send commands to the 2D GPU.
What it does have is 4 KiB of I-cache (direct-mapped), 1 KiB of scratchpad with no wait states and a fixed-point GTE coprocessor which is mostly geared towards projecting 3D points onto a 2D screen and not general matrix/vector processing. Meaning that if I get my hot loop within 1024 instructions (and no function calls), fit my working set+stack within 1 KiB and can pipeline the GTE for transformations and the CPU for map scanning/GPU submissions, it might just work.
So far I'm getting decent framerates (like 10-15 FPS at 256x240) with just software projection and GPU line rendering. Right now I'm wrestling with the GTE and various ways to trick it into transforming more points than it's supposed to be able to do, by looking at the fixed-hardware math equations for the various instructions and trying to fit my equations into them (doing stuff like putting relative altitude into X/Y vector registers instead of coordinates and massaging the rest of the values to get screen Y coordinates out of it).
Kind of a hardcore topic to pick for my first homebrew ever, but I craved a simpler, low-level optimization challenge as a pipe cleaner, after working on ghidra-delinker-extension for so long.
reply