Jump to content

edwardb

  • Posts

    262
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by edwardb

  1. Looks like an app to get you to sign up for a black market (unregulated) online casino. "NonGamstop" is the giveaway here - that's how black market operators advertise. Very shady...
  2. I'm 99% sure they use Pluto - I'll almost certainly see one of their coders at ICE in a few weeks, so will ask. Whilst I believe some early support for Pluto 5 was done in MFME, I don't believe it got any further? I did a few games on Pluto 5 so I'd be happy to release my FGPA security keys for that if someone can do a layout for my German games. Pluto 6 uses a 2-stage security system and so would need both a smartcard and CSD chip emulating. Both P5 and P6 are still in use today for new machines so there are some security and legal considerations here.
  3. Aren't Fair Games machines on Heber Pluto 5/6 ? I know the guys there - they've been around the industry for a long long time. In theory you can brute force the encryption on Pluto 5 to get them to run, but that'd need some dev work...
  4. Spot on. They were so much more efficient than Barcrest - and when Miami Dice/Red Hot Poker came out apparently Barcrest were astounded that they could get so much performance out of the hardware. The developer of those games was an ex-ZX Spectrum coder with a few well known games released - he really knew how to squeeze every last drop of performance from MPU4.
  5. BWB had no Forth programmers, and everything on MPU4 from Barcrest was written in Forth. They were all ASM coders and got a hell of a lot more performance out of MPU4 than Barcrest did, on MPU4 Video in particular. - high speed ASM blitter routines that did what Barcrest couldn't.
  6. No. Machines really aren't that intelligent, nor were most of the developers (in the nicest possible way - they aren't PhD level anyway!). There really is no mystery to them - sorry to burst many bubbles - but the aura, myth and legend that surrounds machines is almost entirely false. If anyone doesn't believe me, come and sit next to me in my office for a week or two and I'll show you the code from all the machines I've done, and those I have code for (which is quite a few!).
  7. All Mazooma club machines were just clones of BFG machines; we got the code and just changed the audio, feature names and stuff. All the control/compensation was identical to the original machine. I think Pac Man Club took a few days to do.
  8. You are imagining it Remember that most machines from the early 90s onwards were coded on PC and fast-played before the code got near the hardware. PCs have no concept of time spent doing attract modes when you're doing a 100K game stats run....
  9. Mazooma certainly did, and I'm 95% sure BFG did too at some stage. I will point out that, given they are compensated games, the machine would eventually pay the money out, but the short-term mangle-the-gameplay was certainly a thing on Mazooma UK machines for a while.
  10. I know I mentioned elsewhere that there was the odd thing put in on purpose. The one on an Ace machine was a good example of someone doing this, getting caught and going to prison for fraud. How to end your career (and freedom) in a few lines of code.
  11. Yep, likewise. All of my games were legit - export games all had to be approved by the Govt in whichever country and so (in Holland, in particular) the source code was taken apart by a lab. In the UK the dodgy machines were always from two-bit outfits in a lock-up garage somewhere, knocking out crap copies of Bar-X or whatever. You know the types. It was never the big manufacturers - too much at stake.
  12. Correct - even though machines only paid out £1s, a load of shrapnel (change from a pint!) went into them and so it never really happened......we metered all sorts and it just never happened.
  13. We did all sorts, but in some of our games (from memory, and it has been a long time, but I think Disco Inferno, Wet n Wild, Top Gears and Pac Man Plus) we would just mess with whatever value we got from a chance table if we detected the last (IIRC) 100 coins being all £1s. It was only ever to mess with other manufacturers stats playing machines - it never really happened on site (we logged all that kind of data and I used to visit sites with a laptop or Psion - remember them? - and downloaded it via the infra-red transmitter LED in our machines. That's what the small black circle at the top of BFM cabinets was for, in case no-one knew....).
  14. No it was extremely easy. Just keep a track of the last n coins inserted. If all £1s, then just set a flag "statsPlayDetected", and when you next look up a % chance of something happening e.g. holds, nudges, etc, just divide that chance by 2 or whatever. Literally 3 lines of code, a 5 min job. Fruit machine code really isn't as complex as people seem to think it is. One day I'll do a YouTube live stream and we can look over the code for some games together....
  15. Yes...naming no names, but they were a bloody nightmare. Never paid their bills, and when they did, they always wanted much more in return next time. That's why I stopped doing machines - they had your hardware, and therefore by the proverbial balls. With online, if you don't get paid, you just switch the game off on their website, or replace the game with a message saying "this casino doesn't pay its bills - perhaps consider playing somewhere else?"
  16. There were effectively 2 chips on Pluto 6. Pluto 5 was cracked a long time ago so they fixed it
  17. OK. On Pluto 5 there were 3x 4-byte values which would be set in the ROM before compilation. There was some IO mapping stuff going on in the FPGA. I could probably get this stuff compiling again, change the FPGA code over then look at the ROMs and work out what goes where.... /* APOLLO GAMING LTD - SOFTWARE R&D COPYRIGHT 2008 (c) APOLLO GAMING LIMITED Filename: FPGA.h Author: EB Revision History: - 19/05/2008 Created v1.0 ---------------------------------------------------------------------------------------------- Contains data for specific FPGA versions 1. Development 2. Apollo SECURE FPGA 1 3. That Dutch Company Who Was A Pain In The Arse */ #ifndef __FPGA_H #define __FPGA_H /**************************** BEGIN DEV FPGA VERSION HERE ***************************/ #if (DEV_FPGA_VERSION==1) #define FPGA_SIG 0x01 /* value of ident byte */ /* read @FPGA_ID */ #define FPGA_REG_BASE (FPGA_BASE+0x00) /* FPGA registers base */ #define FPGA_IO_BASE (FPGA_BASE+0x20) /* FPGA I/O base */ // Offsets from FPGA_REG_BASE #define FPGA_ID (BYTE*)(FPGA_REG_BASE + 0x01) /* read FPGA ID byte */ #define XCRA (BYTE*)(FPGA_REG_BASE + 0x00) /* FPGA Control Reg A */ #define XMPX (BYTE*)(FPGA_REG_BASE + 0x01) /* Multiplex Control Reg */ #define XDRA (BYTE*)(FPGA_REG_BASE + 0x02) /* data, pins FPGA0-6 */ #define XDRB (BYTE*)(FPGA_REG_BASE + 0x03) /* data, pins FPGA0-6 */ #define XDDRA (BYTE*)(FPGA_REG_BASE + 0x04) /* data dir, FPGA0-6 */ #define XDDRB (BYTE*)(FPGA_REG_BASE + 0x05) /* data dir, FPGA8-14*/ #define SFXR1 (BYTE*)(FPGA_REG_BASE + 0x06) /* SFX Ch 1 byte */ #define SFXR2 (BYTE*)(FPGA_REG_BASE + 0x07) /* SFX Ch 2 byte */ #define XSEC (BYTE*)(FPGA_REG_BASE + 0x07) /* Security Byte */ // Offsets from FPGA_IO_BASE #define AUX_BASE (FPGA_IO_BASE+0x10) /* Base Of Aux Outputs */ #define AUX0 (BYTE*)(AUX_BASE+0x00) /* AUX0 Output */ #define AUX1 (BYTE*)(AUX_BASE+0x01) /* AUX1 Output */ #define AUX2 (BYTE*)(AUX_BASE+0x02) /* AUX2 Output */ #define AUX3 (BYTE*)(AUX_BASE+0x03) /* AUX3 Output */ #define AUX4 (BYTE*)(AUX_BASE+0x04) /* AUX4 Output */ #define AUX5 (BYTE*)(AUX_BASE+0x05) /* AUX5 Output */ #define AUX6 (BYTE*)(AUX_BASE+0x06) /* AUX6/EXT SCL Output */ #define AUX7 (BYTE*)(AUX_BASE+0x07) /* AUX7/EXT SDA Output */ #define OUTPUTS (BYTE*)(FPGA_IO_BASE) /* base of outputs */ #define INPUTS (BYTE*)(FPGA_IO_BASE) /* base of inputs */ #define INPUTS2 (*(volatile char*)FPGA_IO_BASE) /* base of inputs */ #define CSAM0 0x00FFFFF5 #define CSBAR0 0x00000009 #define CSAM1 0x00FFFFF5 #define CSBAR1 0x01000001 #define CSAM2 0x00FFFFFF #define CSBAR2 0x02000003 #define CSAM3 0x00FFFFFF #define CSBAR3 0x03000001 #endif /**************************** BEGIN APOLLO_FPGA_VERSION ***************************/ #if (APOLLO_FPGA_VERSION==1) #define FPGA_SIG 0xca /* value of ident byte */ /* read @FPGA_ID */ #define FPGA_REG_BASE (FPGA_BASE+0x50) /* FPGA registers base */ #define FPGA_IO_BASE (FPGA_BASE+0x00) /* FPGA I/O base */ // Offsets from FPGA_REG_BASE #define FPGA_ID (BYTE*)(FPGA_REG_BASE + 0x01) /* read FPGA ID byte */ #define XCRA (BYTE*)(FPGA_REG_BASE + 0x00) /* FPGA Control Reg A */ #define XMPX (BYTE*)(FPGA_REG_BASE + 0x01) /* Multiplex Control Reg */ #define XDRA (BYTE*)(FPGA_REG_BASE + 0x02) /* data, pins FPGA0-6 */ #define XDRB (BYTE*)(FPGA_REG_BASE + 0x03) /* data, pins FPGA0-6 */ #define XDDRA (BYTE*)(FPGA_REG_BASE + 0x04) /* data dir, FPGA0-6 */ #define XDDRB (BYTE*)(FPGA_REG_BASE + 0x05) /* data dir, FPGA8-14*/ #define SFXR1 (BYTE*)(FPGA_REG_BASE + 0x06) /* SFX Ch 1 byte */ #define SFXR2 (BYTE*)(FPGA_REG_BASE + 0x07) /* SFX Ch 2 byte */ #define XSEC (BYTE*)(FPGA_REG_BASE + 0x07) /* Security Byte */ // Offsets from FPGA_IO_BASE #define AUX_BASE (FPGA_REG_BASE+0x08) /* Base Of Aux Outputs */ #define AUX0 (BYTE*)(AUX_BASE+0x00) /* AUX0 Output */ #define AUX1 (BYTE*)(AUX_BASE+0x01) /* AUX1 Output */ #define AUX2 (BYTE*)(AUX_BASE+0x02) /* AUX2 Output */ #define AUX3 (BYTE*)(AUX_BASE+0x03) /* AUX3 Output */ #define AUX4 (BYTE*)(AUX_BASE+0x04) /* AUX4 Output */ #define AUX5 (BYTE*)(AUX_BASE+0x05) /* AUX5 Output */ #define AUX6 (BYTE*)(AUX_BASE+0x06) /* AUX6/EXT SCL Output */ #define AUX7 (BYTE*)(AUX_BASE+0x07) /* AUX7/EXT SDA Output */ #define OUTPUTS (BYTE*)(FPGA_IO_BASE) /* base of outputs */ #define INPUTS (BYTE*)(FPGA_IO_BASE) /* base of inputs */ // Chip select registers #define CSAM0 0x00FFFFF5 #define CSBAR0 0x00000009 #define CSAM1 0x00FFFFF5 #define CSBAR1 0x01000001 #define CSAM2 0x000000FD #define CSBAR2 0x02000001 #define CSAM3 0x00FFFFFF #define CSBAR3 0x03000001 #endif /**************************** BEGIN DUTCH_FPGA_VERSION ***************************/ #if (DUTCH_FPGA_VERSION==1) //#define FPGA_SIG 0xA2 /* value of ident byte for Peter's Test FPGA */ //#define FPGA_SIG 0x4a /* value of ident byte for Dutch production FPGA */ #define FPGA_SIG 0x7f /* value of ident byte for Peter's dev FPGA */ /* read @FPGA_ID */ #define FPGA_REG_BASE (FPGA_BASE+0x20) /* FPGA registers base */ #define FPGA_IO_BASE (FPGA_BASE+0x40) /* FPGA I/O base */ // Offsets from FPGA_REG_BASE #define FPGA_ID (BYTE*)(FPGA_REG_BASE + 0x01) /* read FPGA ID byte */ #define XCRA (BYTE*)(FPGA_REG_BASE + 0x00) /* FPGA Control Reg A */ #define XMPX (BYTE*)(FPGA_REG_BASE + 0x01) /* Multiplex Control Reg */ #define XDRA (BYTE*)(FPGA_REG_BASE + 0x02) /* data, pins FPGA0-6 */ #define XDRB (BYTE*)(FPGA_REG_BASE + 0x03) /* data, pins FPGA0-6 */ #define XDDRA (BYTE*)(FPGA_REG_BASE + 0x04) /* data dir, FPGA0-6 */ #define XDDRB (BYTE*)(FPGA_REG_BASE + 0x05) /* data dir, FPGA8-14*/ #define SFXR1 (BYTE*)(FPGA_REG_BASE + 0x06) /* SFX Ch 1 byte */ #define SFXR2 (BYTE*)(FPGA_REG_BASE + 0x07) /* SFX Ch 2 byte */ #define XSEC (BYTE*)(FPGA_REG_BASE + 0x07) /* Security Byte */ // Offsets from FPGA_IO_BASE #define AUX_BASE (FPGA_REG_BASE+0x08) /* Base Of Aux Outputs */ #define AUX0 (BYTE*)(AUX_BASE+0x00) /* AUX0 Output */ #define AUX1 (BYTE*)(AUX_BASE+0x01) /* AUX1 Output */ #define AUX2 (BYTE*)(AUX_BASE+0x02) /* AUX2 Output */ #define AUX3 (BYTE*)(AUX_BASE+0x03) /* AUX3 Output */ #define AUX4 (BYTE*)(AUX_BASE+0x04) /* AUX4 Output */ #define AUX5 (BYTE*)(AUX_BASE+0x05) /* AUX5 Output */ #define AUX6 (BYTE*)(AUX_BASE+0x06) /* AUX6/EXT SCL Output */ #define AUX7 (BYTE*)(AUX_BASE+0x07) /* AUX7/EXT SDA Output */ #define OUTPUTS (BYTE*)(FPGA_IO_BASE) /* base of outputs */ #define INPUTS (BYTE*)(FPGA_IO_BASE) /* base of inputs */ // Chip select registers #define CSAM0 0x00FFFFF5 #define CSBAR0 0x00000009 #define CSAM1 0x00FFFFF5 #define CSBAR1 0x01000001 #define CSAM2 0x000000FD #define CSBAR2 0x02000001 #define CSAM3 0x00FFFFFF #define CSBAR3 0x03000001 #endif extern BYTE *const FpgaId; extern BYTE *const Xcra; extern BYTE *const Xmpx; extern BYTE *const Xdra; extern BYTE *const Xdrb; extern BYTE *const Xddra; extern BYTE *const Xddrb; extern BYTE *const Sfxr1; extern BYTE *const Sfxr2; extern BYTE *const Xsec; extern BYTE *const Aux0; extern BYTE *const Aux1; extern BYTE *const Aux2; extern BYTE *const Aux3; extern BYTE *const Aux4; extern BYTE *const Aux5; extern BYTE *const Aux6; extern BYTE *const Aux7; extern void *const Outputs; extern void *const Inputs; extern const SIM40CFG sim40_cfg; extern const TIMERCFG Timer1Cfg; extern const TIMERCFG Timer2Cfg; extern const DMACFG DMA1Cfg; extern const DMACFG DMA2Cfg; #endif /* End----------------------------------------------------------------------------------------------- */
  18. So for Heber's Pluto 5 board you can absolutely brute-force the security on it. There was a handful of bytes which changed depending on the customer; so were someone to try and reverse engineer one of my games (which I'd happily supply the security byte data for) you can prove the ROMs boot up. Then for other games it'd just be a case of amending those bytes and trying again, and repeat until the thing boots.... Pluto 6 was a bit more involved but still should be fairly straightforward to crack.
  19. Hi Saki I don't think Shanghai 5000 or Crown Jewels 5000 have been emulated, unfortunately. I was the programmer of many German fungame machines (Sinbad 2000, Monopoly, Win-A-Gain, Brix, Cashanova from Mazooma, and also Hi Spirits, A Knights Trail, Hopp oder Topp from Loewen). Welcome to Desert Island Fruits ! MfG Ed
  20. Yeah, bit of a cock up, was that! The thing you need to remember - often forgotten in these days where an update is simple to roll out - but to send an engineer to every site with a new set of ROMs is VERY, VERY expensive - you pay for the ROMs (prob £6 a pair) and the time. You sold 2000 machines? Well that's £12k in parts, plus double the same again in paying someone to drive around to fit them all. You can bet the big breweries will be on the phone asking for a discount on their next purchase too.... So yeah - cock ups like this are an expensive pain and best avoided.
  21. Ja. Einige Leute verwenden Google Translate, aber es gibt hier einige Muttersprachler, die Deutsch sprechen. Ich bin kein Deutscher, aber ich war 6 Jahre lang Fungame-Programmierer für Mazooma (Cashanova, Brix, Monopoly) und NSM/Loewen (Hi Spirits, Hopp oder Topp, A Knights Trail). MfG Ed
  22. I'll post some example code from one of my Hungarian games when I get to the office later this week. I should probably write a walkthrough of it, but it's a pretty reasonable example of typical AWP code albeit just not for the UK market (which isn't hard to make functionally work, anyway). I'll be honest - much of the code I saw of games from other coders was utterly diabolical. Sloppy, messy and error prone. As much as I liked BFM/BFG a lot of their game code was a car crash. I remember seeing Crazy Fruits and thinking, christ almighty, this is just a mess. Their system software however was very long winded but robust. I guess that's the difference between systems engineers and game coders. I learnt my trade from an ex-BWB programmer who was incredibly diligent, regimented and whilst not the fastest coder, his games were bulletproof. At the age of 18 that seemed like a good thing to aspire to. My code from back then was neat and tidy, and not complicated - on purpose. I'll sort something out along with some other goodies from way back.... Ed
  23. Right, we're back in business. My EPOCH Hungarian games are now compiling on Windows again, so I'll rebuild them all with the data-capture system disabled, the ROMs uploaded and then at least people can work on emulating those games when they get time. Would be so nice to see them up and running again after so many years! I'll then work on knocking together a basic UK game so the structure is all there, and then figure out how to make it available for people who want to contribute.
  24. @johnparker007Yeah we need to do something to let people code games etc. I think the EPOCH stuff is the easiest to use and everyone involved in that tech won't care anymore. Won't touch any BFG code as that'll still be copyright, but Maygay don't exist anymore and whoever inherited their IP won't even know it or have record of it. I had it compiling on Windows 10 but something in Win 11 broke it all, and I can't get it to build. IIRC you're Sheffield area (?), as am I. We could do a bit of a hackathon to get this building and compiling some ROMs on a Win 10 PC, with a demo game to get people up and running? It's all pretty basic C code, and I wrote a sub-language for doing attract modes etc so even if you can't code, you can knock up attracts easily enough (that's how I learned at the University of Mazooma ). I only have Hungarian games on EPOCH but to convert to GBP is easy, but the hold/nudge logic isn't there, but is easy enough to code. Just don't expect test routines etc unless you want to code them! Let me know what you think. Ed
×
×
  • Create New...