Honest Options Domination Review for DS Domination ...
Sm-g620f ds in factory binary options
Samsung J2 Prime SM-G532G & SM-G532G/DS Custom Binary ...
DS Options Domination Binary Options Platform
A place to help anyone who has a uterus
This sub is dedicated to providing information and resources to those in need of services in states that have passed the heartbeat bill. Please read the info in the sidebar 💖
EDIT: MAJOR UPDATE AT BOTTOM Welcome to the "Speculations" mega thread for the device possibly upcoming in the Oculus Quest line-up. This thread will be a compilation of leaks, speculation & rumors updated as new information comes out. Let's have some fun and go over some of the leaks, rumors, speculation all upcoming before Facebook Connect, we'll have a full mega thread going during Connect, but this should be a great thread for remembrance afterward. Facebook Connect is happening September 16th at 10 AM PST, more information can be found here. Leaks In March, Facebook’s public Developer Documentation website started displaying a new device called ‘Del Mar’, with a ‘First Access’ program for developers. In May, we got the speculated specs, based off the May Bloomberg Report (Original Paywall Link) • “at least 90Hz” refresh rate • 10% to 15% smaller than the current Quest • around 20% lighter • “the removal of the fabric from the sides and replacing it with more plastic” • “changing the materials used in the straps to be more elastic than the rubber and velcro currently used” • “a redesigned controller that is more comfortable and fixes a problem with the existing controller” On top of that, the "Jedi Controller" drivers leaked, which are now assumed to be V3 Touch Controllers for the upcoming device. The IMUs seem significantly improved & the reference to a 60Hz (vs 30hz) also seems to imply improved tracking. It's also said to perhaps have improved haptics & analog finger sensing instead of binary/digital. Now as of more recent months, we had the below leaks. Render (1), (2) Walking Cat seems to believe the device is called "Quest 2", unfortunately since then, his twitter has been taken down. Real-life pre-release model photos Possible IPD Adjustment From these photos and details we can discern that:
there will likely be at least one white model of Quest in the future.
The camera positions and angles have been changed slightly. This might be to improve tracking coverage overhead.
The tracking ring has become somewhat larger and has been angled backward, presumably so they face the cameras better at all times.
The thumb-area has widened significantly & the capacitive thumb-area seems to have returned from the original CV1 touch controllers.
The HMD seems to have become smaller in terms of depth. This could perhaps mean a severe decrease in weight; balancing the headset more.
The head strap is similar to that of the Oculus Go.
It appears there are two microphone holes on the bottom of the headset. This implies the headset might have stereo microphones. Getting two over getting one decent microphone might also mean the two microphones have better recording quality than the original Quest?
Further features speculation based on firmware digging (thanks Reggy04 from the VR Discord for quite a few of these), as well as other sources, all linked.
Additional Sources: 1/2/3/4 Headset Codenames We've seen a few codenames going around at this point, Reggy04 provided this screenshot that shows the following new codenames.
Oculus Del Mar - HOLLYWOOD
Oculus Seacliff - SEACLIFF
Pricing Rumors So far, the most prevalent pricing we've seen is 299 for 64gb, and 399 for 256GB These were shown by a Walmart page for Point Reyes with a release date of September 16 and a Target price leak with a street date of October 13th Speculation What is this headset? Speculation so far is this headset is a Quest S or Quest 2 OR This is a flat-out cheaper-to-manufacture, small upgrade to the Oculus Quest to keep up with demand and to iterate the design slowly. Again, This is all speculation, nothing is confirmed or set in stone. What do you think this is and what we'll see at FB Connect? Let's talk! Rather chat live? Join us on the VR Discord EDIT: MAJOR UPDATE - Leaked Videos. 6GB of RAM, XR2 Platform, "almost 4k display" (nearly 2k per eye) Source I am mirroring all the videos in case they get pulled down. Mirrors: Oculus Hand Tracking , Oculus Casting, Health and Safety, Quest 2 Instructions, Inside the Upgrade
A thorough evaluation of the 9/18 PTS update and base changes, as well as almost everything else coming up.
Hello, here’s another round of Esamir Rework reviews. I’ll also cover the Indar base changes, the storm, vehicle balance changes and new infantry gear. I’m not going to touch on outfit resource changes here, since this post is long enough already. I’d like to give shoutouts to aln-isolator , [NWYT]Praefectus, the pilots of [SACA] and everyone else who helped give feedback. Here’s the image gallery. This time around the bases listed in the document match the order in which they appear in the gallery. https://imgur.com/a/5pd5VFj Esamir has a new skybox which is much less bright. I can now see vehicle weapon tracers when shooting. This is a long asked for change. Andvari: 3 points now, 12 min cap with 2 points, 4 mins with 3 points. Consider adjusting the timers. Ymir: No changes to terrain that I can see. It’s a 12 minute cap with two points owned, and 4 minutes with 3 points. Might consider reducing those slightly. Apex Genetics has had its wall adjusted somewhat, as well as the rocks surrounding the triple stack. There are now more routes for infantry to enter the base. Aurora Materials: Sunderer garage and surrounding terrain seem to have been lowered slightly. Also, there’s now a rock at the end of the garage, which reduces the possible angles the bus inside can be shelled from. The slope between the crescent building and the road has had some paths added for infantry. Overall, good changes. However, there’s still one issue here, and that’s the possibility of shelling the triple stack balcony from the ridge NW of the base. Additional purple spikes from the cluster behind the spawn room could be positioned to block this firing angle. Eastwake Harborage: Point has received a new structure above it. It’s now on the bottom floor of a triple stack that has an expanded balcony around its second floor. This gives point holders a lot of additional cover, but the problems with this base still exist. There’s still a ridiculous distance between spawn room and the point with minimal cover from vehicles/bolters/LAs- a literal Death Valley. The area immediately around point is still extremely harasser friendly and could use some props to obstruct harasser movement. In its current position, the teleporter room is useless since infantry leaving it must still advance through Death Valley. Sundy positions are a bit sketchy, too. Fortunately, I’ve had a long discussion and now believe this base could be fixed with a couple tweaks. Consider replacing the AI turret outside the spawn room with an AV gun. This would discourage excessively aggressive vehicles from camping Death Valley. Likewise, replacing the light vehicle pull with an MBT pull gives defenders a bit more potential firepower, and increases the area attacking vehicles must cover to protect their own vulnerable spawns. This base would also benefit from the moving of primary teleporter room to a point higher up the hill and closer to the point, as shown by squad waypoint in this image: https://i.imgur.com/TuEee9F.png. A second teleporter here at hearts waypoint https://i.imgur.com/JUbXklc.png gives defenders another route into the point without going through Death Valley. At these two locations sunderer garages could be built to create safer spawn points for attackers.https://i.imgur.com/QWblfz4.pnghttps://i.imgur.com/w4HR05n.png Echo valley: Rocks have been added on the exterior side of the vehicle terminal to give it some cover. However, they aren’t close enough to each other to prevent me from driving through with a Kobalt bus, nor is there anything stopping me from hacking the terminal or using a GSD to get through the shield and then start driving around the base. Placement of a couple rocks in very specific spots would stop this. Secondly, a crate has been placed between bridges to give infantry another path into the point building. It’s a cool concept, but it needs some form of obstruction to prevent me from driving harassers or possibly larger vehicles onto the two bridges and blasting point directly. Thirdly, consider some form of sight blockers on the west wall to reduce the potential for LAs to spawn camp. Excavion DS-01E: Cover has been placed over both tunnels, which is an excellent change. MBT pulls have been added to this base, though they could stand to be moved slightly closer to the spawn room to deter attackers from hacking them and flooding the base with AI vehicles. A point is located in a long narrow building near the eastern tunnel exit. B is in a triple stack on the south side. C is located immediately west of the drill site. Capture timer is 4 minutes with two points and 1 minute with all 3. This base is mostly fine, but could do with some small tweaks for increased cover. At A point the point holders have few options for cover inside. There are two small smokestack structures (pictures in gallery) that could be replaced with actual buildings to provide more cover from aircraft for players moving around inside the base. Timers could probably be increased slightly. Overall though it’s in a decent state. Genudine Gardens: Some props have been added throughout the base that’ll prevent harassers from turboing around like maniacs, but the gigantic hole in the wall in one corner needs to be closed off somewhat to prevent vehicle entry or at least make it more difficult. This base would be fine if that hole were sealed or obstructed better. Grey Heron: Additional cover has been placed on the side of the staircase leading from spawn to B/C point. The secondary route for defenders has been fleshed out- the door now is high enough to get under, and there is a hole in the floor that allows defenders to drop down to the lower level. Cover has been added on the B side of this base. For improvements, I still think a roof is needed over the stairs from defender spawn to the lower level. A wall alone won’t stop tanks from shelling it. C could use a bit of cover, but I’m concerned that adding too much will turn it into a fortress. You can enter this base with harassers, so some bollards should be added to each entrance to prevent that. Jaegers’ fist: Sunderer garage has been added, and the trench has been improved. This base has some odd issues from an infantry perspective, namely that attackers and defenders have the exact same routes to the point, as shown in the gallery. I have no ideas for how this could be improved. I still believe the point needs some kind of roof to block HESH spam and A2G, preferably a solid one to deter LAs from doing C4 bombing. BL-4 Recovery and Vidar Observation Post both have spawn rooms and light vehicle terminals. This is a pretty good change, allowing closer vehicle pulls and a shorter sundy reinforcement distance for attacks on the surrounding facilities. Jord Amp Station: More cover has been added around C point. This is a good change, but doesn’t change the fact that A is still inside the station. Mani Lake: This one has undergone the most terrain edits, and consequently has become a lot less vehicle friendly. The two trenches leading into the base have had barricades installed, allowing infantry to move through but not vehicles. The hills surrounding the base have had their exterior faces steepened significantly, preventing treaded vehicles from driving up them. This change is excellent, but needs a bit of tuning. The Western Ridge’s southern tip has a shallow enough slope that tanks can still drive up it. On the large mountain to the West on the far side of the road, there’s a small protrusion that should also be levelled. Once these two spots are taken care of, this base will be fine. Overall, the changes are very good here. Mattherson’s Triumph: The Sunderer NDZ has been reduced in radius, which allows the defenders to deploy inside the south tower for a safer position. This is a good change. The ridgeline to the NE has had its northern face steepened significantly, preventing tanks from driving up that side. However, the SW face has become easier to traverse, so the ridge is still usable for bombardment of the catwalks and A point. If this goes live in this state, it’s not a total disaster since tanks driving up that will be very exposed to AV fire from the tower, but it still could stand to be addressed. Likewise, there’s still a nice spur sticking out of the north end from the NW ridge that allows tanks to easily shell defender spawn and A point. The fix here is simple- flatten the spur completely. A point needs additional work. At minimum, the windows on each tower in the room where A point/SCU would normally go should be sealed off to reduce the angles point holders must watch. There’s very little cover on the ground, especially when you consider all the angles A can be shot at from. I believe the point could be enclosed in the same type of building used at Chimney Rock’s point on Amerish. The bridges are a mixed bag. They’re identical copies with one rotated 180 degrees, which means that crate placement favors the attackers on B side and the defenders on the C side. Picking one crate pattern for all 4 bridge ends is one possible fix. I’m still not sold on the idea of both points being on bridges. They’re very exposed to A2G spam and bolters. Overall, at the very least the terrain edits are a nice start, and the sunderer NDZ change is very welcome. Nott Communications: This base is now entirely underground. Attackers enter by overloading a shielded gate, and then drop down into an amp station interior. These gravity lifts are one way, but please consider adding an up lift to replace one of the drop pads. A point is in the position where A points usually are in amp stations. B and C are in the room where SCU would be normally positioned. At the end of this room where the tunnels and back door would normally be is a one-way teleporter, which is the only way for anyone to get out of this base right now. Defenders spawn underground and there’s a one-way shield leading to where the vehicle bay normally is. To improve this base, I’d make the one-way shield a two way shield, and reverse one of the grav lifts. I could not test the cap timer since I did not feel like ghost capping half a continent. Pale Canyon: Some cover has been adjusted by the big yellow tanks on the SE side. A new route has been placed through the rocks at the NW corner of the base. This is an interesting change, but I don’t know how that’ll play out on live since currently I can park a bus inside the base at the same location. The Rink: The ground texture at A point is now ice, so it’s actually an ice rink. Too bad you don’t slide around here. Saerro Listening Post: Trees added to A point to break LOS between attacking vehicles and the tower. The wall between A and B has had some new gaps placed in it to allow infantry to get in. Interesting changes for sure, but I don’t know how they’ll play out. The Traverse: The bridge has been resurrected, although it’s in a heavily damaged state. It’s now an infantry only playground, unless you’re a bold harasser or magrider driver. Because the storm was here, I really couldn’t stick around and take a long look at this. Lastly, the bottom of the pit has been raised a bit and paths to the bottom have been defined more clearly. There also have been some changes to roads around the continent, but nothing major. Indar: TI Alloys: The removal of the bridge is a failure to understand why TI Alloys is such a difficult base to attack. On live servers, TI currently suffers from horrific sunderer placement options which combine with its central location to create a base that’s easy to defend. From the North, attackers must park their bus and attack up a hill through narrow ravines into entrenched defenders backed up by AI harassers, sunderers, ANTs, lightnings and even occasional MBTs. From the South, attackers have two bus spots: One is placed to the south-east, below the point. The other is placed directly south of the spawn room on the far side of the road. Both of these options are suboptimal- on the south east spawn the bus can easily be sniped by vehicles shelling from the Crown, driving down from the Crown, or by vehicles streaming out of the vehicle pull. The south bus on the far side of the road is also not ideal, since infantry have to cross the road and deal with a flood of vehicles as well as an angry AI turret. The only decent spawn location is at the end of the rock bridge, since that one’s reasonably safe from enemy vehicles and doesn’t involve attacking from the low ground. However, this position’s impeded by the fact that attackers from the north inevitably gravitate to the eastern side of the base since that’s safer from the defenders, forcing a three way that never ends. The result is a base that can’t be broken except by routers. The removal of the rock bridge changes none of this, but instead creates more problems. The safe sundy position on the bridge is gone entirely. Further, the bridge’s removal allows tanks to bombard Ti from the Crown once more, since it served as a line-of-sight blocker. The new attacker foot path to the north east is extremely vulnerable to bombardment from the Crown. As far as the base interior goes, a new wall has been added to the interior of the point room structure. This might give attackers a better chance to get to the point, but at the same time it might make things easier for the defenders should they conduct an organized push since there are fewer angles to set up a crossfire from. So how can Ti be improved? I’d start by bringing the bridge back, or at least a small section of it to allow for a safe sunderer position at the east side. For the south, consider a tunnel leading under the road. This allows infantry to get to the base safely. I’d also consider adding in more props to restrict the passage of vehicles through the spawn room area to the northern side of the base. Removing the Kobalt bus fiesta there will make it easier for attackers to push in from the north. Lastly, if the bridge is not restored, consider creating a rock wall at the north east section of crown to prevent tanks from raining hell on anyone fighting at Ti. Crown: The removal of D point is honestly a good thing. It wasn’t fun for anyone to attack since it’s open ground and below a cliff which enables C4 spam against vehicles and requires attackers push against entrenched infantry. Since Crown becomes a three point again, now the base cannot be stuck in a perpetual stalemate. I’m not a fan of where A point was moved to, either. I think if the rock bridge were kept then Crown would be mostly fine. With the three non-vehicle points it has on live. The issue with A being on that southern bridge is that if the attackers set up sunderers to control B, then they get A almost for free and can contest C as well. B point has been moved farther towards the center of the mountain and the tunnel system lengthened a bit, and a lot of cover has been removed at the initial entrance room that exists on live.The extra tunnel into B is an interesting idea and gives a better chance of an attack from the North succeeding, but at the same time it’s just another tunnel choke point to for aoe spam to create nasty farms. C is also problematic if it’s supposed to be the easy point for defenders to contest. It’s a fair distance from the tower, and it’s also open ground which is prime for A2G farming. I’d suggest moving this one into one of the nearby buildings if A must stay in the position it’s at on PTS. I’m not convinced the base needed any point position changes apart from the removal of D point. The current point layout on PTS favors an attack from the SE very heavily, and attacks from the East or North are far more difficult. While old A was very close to the tower, at least it provided a convenient point for attacks from the East. None of the changes really address the problem of poor bus location options, and with the current terrain there really aren’t many good potential spawn options. At most some garages could be added. Ceres Hydroponics: Defenders now have a slightly shorter path to the point when pushing from the NE side of the base. The point itself has much less cover. I’m not going to make judgements on this without seeing how it plays out. The Esamir storm: I’m not sure what this thing is supposed to do. The entire point of the game is large scale battles, yet this thing rolls around the map destroying the biggest fights. There’s nowhere safe from it. Sunderers will get destroyed even if put in garages. When outdoors infantry can be instagibbed by lightning for staying outside too long, and even when indoors their shielding takes frequent chip damage from environmental effects. The shield damage consistently drops players down about 150 shield points that constantly recharge, but this is enough to start messing with TTKs. For example, a commissioner can consistently OHK players. Since the shield damage is not synchronized across all players, it’s possible to be forced into gunfights where you have no hope of winning not because you were in a bad spot or outplayed, but simply because the game decided it’s your time to die. This applies doubly for lightning bolts which will randomly strike you down. There’s a text warning, of course, but random OHK mechanics really shouldn’t be a thing. You cannot use steel rain in the storm. For vehicles this is obnoxious too. Ground vehicles lose most of their mobility, which will punish new players with poorly certed vehicles even more. Aircraft are even worse off, losing most of their vertical thrust. At times I felt like even afterburning upward was barely enough to keep the aircraft airborne. Vehicles kept in the storm for too long will simply be instagibbed, which cripples sunderers as spawns. The storm also destroys base turrets and terminals. There are counters to the storm, though. Infantry can deploy lightning rods bought with merit that allow them to fight outside, but it doesn’t stop shield chip damage, and can equip an insulated armor suit at the cost of flak armor, nanoweave, or shield capacitor. This suit slot appears to be bugged and doesn’t actually reduce the chip damage taken by your shields. Carapace seems to be immune to this chip damage. Vehicles can equip insulated armor in the defense slot. This mitigates the performance hit to vehicles, reduces the damage taken by lightning, and prevents the storm from instagibbing your vehicle. Now, this is less of a problem in the first place for aircraft and tanks, but it screws over sunderers. Sunderers are already fragile enough even with deployment shield equipped, but forcing spawn buses to use this module and rely on their low hull HP is a very bad idea when paired with random lightning strikes and the severe lack of garages Esamir has. With all that out of the way, the question I have to ask is why is the storm designed like this? It seems like a band-aid fix for zerging and actively punishes trying to create large fights. It cripples the vehicle game, negatively affects the infantry game, creates inconsistent TTKs, and only adds frustrating game mechanics. If the center of the map ends up with stalemates, it’ll circle around there endlessly preventing any kind of progress through the pile of three point bases. Why this, when there’s a lot more interesting concepts that could be used? For example, maybe the storm could reduce the rate at which players can spawn at a base/sunderers/routers. Maybe it could jam radaprevent Q spotting. Consider reducing shield chip damage to 50 shields instead of 150 to reduce TTK variance. There’s a lot more interesting ways it could change the game without being the anti-fun mechanic that it’s currently set up as. Infantry gear: Lightning grenade: Cool, you can launch a targeted lightning strike when in the storm. More instagibs is what the game needed. Lightning rod: This temporarily redirects lightning strikes near you. This is a solution to an obnoxious problem that doesn’t need to exist. Condensate grenade: Reduces movement speed and ROF by 20% for six seconds. This is a terrible idea in an FPS game. This doesn’t create interesting gameplay situations. Instead of being outplayed, players hit by this just lose since the game’s punishing them for playing. Keep this in RPGs and RTS games. Now, we do have status grenades already, but do we need one that’s as powerful as this one is? BEC grenade: Similar to Condensate Grenades, this is a horrible addition to the game. Anything that hurts player mobility/damage output is a bad idea. Neutralizer Device: Campaign reward that allows players to acquire abandoned vehicles, and apparently strip ability energy from players too. I like the idea of vehicle acquisition, but I don’t know if we’ll ever see the second use of this tool. Abandoned vehicles: Around the continent are the hulks of abandoned tanks, sunderers and aircraft. They come with a special ability that I haven’t really tested, HEAT cannons and the first generation ES top gun. For the sake of loadout parity for all 3 abandoned MBTs I’d like to suggest the Prowler get a Gatekeeper instead of the Vulcan. Vehicle changes: Havoc missiles: Are these things still necessary, with the liberator nerfs? These things seem redundant now, and they’ll punish rep gal balls unnecessarily hard while valkyries with rep monkeys can probably still dodge these things easily. Phalanx AA turret range increase: This doesn’t fix any of the problems with the current AA setup. Instead, it’s going to just annoy A2A players who are flying along at high altitude and getting plinked by base AA guns, which is the reason the things got their range capped to begin with! Honestly I think these things should be replaced by weapons like Bastion CIWS guns. Those things are nasty at close range but their damage output falls off heavily at range. Liberator: -500 HP and ESF nosegun resist from 85 to 80. While the liberator needed some changes regarding its durability and repair tanking in particular, this change spectacularly misses the mark on many levels. This change skews ESF vs Liberator combat too far in favor of ESFs. When paired with air locks this brings down the TTK to incredibly fast levels (around 9 seconds, which isn’t even enough for three dalton shots) In this post, mystoganofedolashttps://www.reddit.com/Planetside/comments/ivjg8t/rock_paper_scissor_balance/ explains in great detail the liberator issues- it’s a blatant hard counter to ground vehicles, and gets brutally hard countered by ESFs on PTS. Hard counter mechanics are terrible in an FPS game. In this sort of rock-paper-scissors gameplay, things boil down less to individual ability and more towards who has an exact counter to something, which is extremely boring. There’s no skill in using A2A missiles, just as there’s minimal skill in hovering over tanks and daltoning them. In this post here https://www.reddit.com/Planetside/comments/ivsssx/did_some_basic_math_regarding_the_upcoming/, taltharius demonstrates that -500 HP barely changes anything in the case of liberators eating multiple AP shells before hitting fire suppression and flying off. Skilled gunnery should be rewarded, and sloppy flying should be punished. So how can this be improved? Consider reducing vulnerability to ESF noseguns slightly. Adjusting Liberator resistance against tank shells, light anti-vehicle, gatling guns, and infantry rockets will increase the damage libs take from ground fire and punish poor flying/reward skilled aim. Possibly consider increasing MBT main gun elevation angles slightly, to reduce the ability of liberators to hover over tanks with minimal counterplay. Harasser: Nanite cost to 300. Oh boy this one misses the mark completely. The problem with harassers has never really been cost related, but rather one that got introduced with CAI. The harasser itself is not overpowered and its efficiency in combat drops off hard at higher levels of gameplay. Only when harasser numbers become overwhelming (3 or more harassers vs 1 MBT) do the harassers stand a chance of defeating the best tank crews, and even then the tank usually can take 2-3 harassers with it. Harasser vs tank gameplay is extremely boring and very binary. If the harasser has a CQ AV gun it’s forced to fight at point blank which means I delete it easily. If it uses halberd or ES long range AV we both enter a boring poke fight where neither one does significant damage to the other. Even if the harasser opens up with rear hits the MBT still has an overwhelming advantage in firepower and hit points. With tanks, the problem since CAI has been poor muzzle velocity of HEAT shells which makes hitting difficult and what most players will have equipped, pathetic Basilisk DPS against everything (Kobalt kills stock harassers 4 seconds faster), Skyguards being helpless against every ground vehicle, and the Viper not having the accuracy to deal with small moving fast targets. Small changes to these three weapons will reduce harasser vs tank complaints. Harasser vs Harasser is broken, for a different reason. Harassers have a weakness to gatling guns, which means that the Vulcan and Aphelion rip through harassers while the Mjolnir specializes in fighting heavy vehicles. In practice, this means that for low/average skilled car crews, vulcans are disproportionately powerful since less skilled players won’t know to keep outside minimum damage range. At higher levels an Aphelion car is very hard to fight. Toning back harasser weaknesses to gatling guns might improve this situation, but at the same time it might nerf the Aphelion too much. At the very least this’d probably reduce vulcan whine somewhat. Overall, I have mixed impressions. The base changes are mostly for the better, but the storm, infantry gear, and vehicle changes are mostly bad or miss the mark completely.
Step-by-Step Guide for Adding a Stack, Expanding Control Lines, and Building an Assembler
After the positive response to my first tutorial on expanding the RAM, I thought I'd continue the fun by expanding the capabilities of Ben's 8-bit CPU even further. That said, you'll need to have done the work in the previous post to be able to do this. You can get a sense for what we'll do in this Imgur gallery. In this tutorial, we'll balance software and hardware improvements to make this a pretty capable machine:
Use an Arduino and an assembler to enable faster, more complex programming.
Expand control lines without additional ROMs, using 74LS138 decoders.
Add a stack pointer and stack to support subroutines with 74LS193 counters.
Bonus: Enable B register output and add a Schmitt trigger to clean up your clock signal.
Parts List
To only update the hardware, you'll need:
2x 74LS138 (Datasheet, Jameco) which are decoders used to expand the control lines. You can reuse one from the step counter if you don't mind reading binary numbers vs. an LED for each step.
1x 74LS04 (Datasheet, Jameco) which is an inverter to help expand the control lines.
2x 74LS193 (Datasheet, Jameco) which is a 4-bit up/down counter used to create the stack pointer.
1x 74LS245 (Datasheet, Jameco) which is a bus transceiver. You may have a spare one if you did my previous build.
1x 74LS00 (Datasheet, Jameco) which is a NAND gate to control the stack pointer.
8x Green LED, 1x Yellow LED, 4x Blue LEDs, 13x 220 Ohm resistors to display the stack pointer (green), the stack address (yellow), and the additional control lines (blue).
If you want to update the toolchain, you'll need:
Arduino Mega 2560 (Amazon) to create the programmer.
Ribbon Jumper Cables (Amazon) to connect the Arduino to the breadboard.
TL866 II Plus EEPROM Programmer (Amazon) to program the ROM.
Bonus Clock Improvement: One additional thing I did is replace the 74LS04 inverter in Ben's clock circuit with a 74LS14 inverting Schmitt trigger (datasheet, Jameco). The pinouts are identical! Just drop it in, wire the existing lines, and then run the clock output through it twice (since it's inverting) to get a squeaky clean clock signal. Useful if you want to go even faster with the CPU.
Step 1: Program with an Arduino and Assembler (Image 1, Image 2)
There's a certain delight in the physical programming of a computer with switches. This is how Bill Gates and Paul Allen famously programmed the Altair 8800 and started Microsoft. But at some point, the hardware becomes limited by how effectively you can input the software. After upgrading the RAM, I quickly felt constrained by how long it took to program everything. You can continue to program the computer physically if you want and even after upgrading that option is still available, so this step is optional. There's probably many ways to approach the programming, but this way felt simple and in the spirit of the build. We'll use an Arduino Mega 2560, like the one in Ben's 6502 build, to program the RAM. We'll start with a homemade assembler then switch to something more robust. Preparing the Physical Interface The first thing to do is prepare the CPU to be programmed by the Arduino. We already did the hard work on this in the RAM upgrade tutorial by using the bus to write to the RAM and disconnecting the control ROM while in program mode. Now we just need to route the appropriate lines to a convenient spot on the board to plug the Arduino into.
This is optional, but I rewired all the DIP switches to have ground on one side, rather than alternating sides like Ben's build. This just makes it easier to route wires.
Wire the 8 address lines from the DIP switch, connecting the side opposite to ground (the one going to the chips) to a convenient point on the board. I put them on the far left, next to the address LEDs and above the write button circuit.
Wire the 8 data lines from the DIP switch, connecting the side opposite to ground (the one going to the chips) directly below the address lines. Make sure they're separated by the gutter so they're not connected.
Wire a line from the write button to your input area. You want to connect the side of the button that's not connected to ground (the one going to the chip).
So now you have one convenient spot with 8 address lines, 8 data lines, and a write line. If you want to get fancy, you can wire them into some kind of connector, but I found that ribbon jumper cables work nicely and keep things tidy. The way we'll program the RAM is to enter program mode and set all the DIP switches to the high position (e.g., 11111111). Since the switches are upside-down, this means they'll all be disconnected and not driving to ground. The address and write lines will simply be floating and the data lines will be weakly pulled up by 1k resistors. Either way, the Arduino can now drive the signals going into the chips using its outputs. Creating the Arduino Programmer Now that we can interface with an Arduino, we need to write some software. If you follow Ben's 6502 video, you'll have all the knowledge you need to get this working. If you want some hints and code, see below (source code):
Create arrays for your data and address lines. For example: const char ADDRESS_LINES[] = {39, 41, 43, 45, 47, 49, 51, 53};. Create your write line with #define RAM_WRITE 3.
Create functions to enable and disable your address and data lines. You want to enable them before writing. Make sure to disable them afterward so that you can still manually program using DIP switches without disconnecting the Arduino. The code looks like this (just change INPUT to OUTPUT accordingly): for(int n = 0; n < 8; n += 1) { pinMode(ADDRESS_LINES[n], OUTPUT); }
Create a function to write to an address. It'll look like void writeData(byte writeAddress, byte writeData) and basically use two loops, one for address and one for data, followed by toggling the write.
Create a char array that contains your program and data. You can use #define to create opcodes like #define LDA 0x01.
In your main function, loop through the program array and send it through writeData.
With this setup, you can now load multi-line programs in a fraction of a second! This can really come in handy with debugging by stress testing your CPU with software. Make sure to test your setup with existing programs you know run reliably. Now that you have your basic setup working, you can add 8 additional lines to read the bus and expand the program to let you read memory locations or even monitor the running of your CPU. Making an Assembler The above will serve us well but it's missing a key feature: labels. Labels are invaluable in assembly because they're so versatile. Jumps, subroutines, variables all use labels. The problem is that labels require parsing. Parsing is a fun project on the road to a compiler but not something I wanted to delve into right now--if you're interested, you can learn about Flex and Bison. Instead, I found a custom assembler that lets you define your CPU's instruction set and it'll do everything else for you. Let's get it setup:
If you're on Windows, you can use the pre-built binaries. Otherwise, you'll need to install Rust and compile via cargo build.
Create a file called 8bit.cpu and define your CPU instructions (source code). For example, LDA would be lda {address} -> 0x01 @ address[7:0]. What's cool is you can also now create the instruction's immediate variant instead of having to call it LDI: lda #{value} -> 0x05 @ value[7:0].
You can now write assembly by adding #include "8bit.cpu" to the top of your code. There's a lot of neat features so make sure to read the documentation!
Once you've written some assembly, you can generate the machine code using ./customasm yourprogram.s -f hexc -p. This prints out a char array just like our Arduino program used!
Copy the char array into your Arduino program and send it to your CPU.
At this stage, you can start creating some pretty complex programs with ease. I would definitely play around with writing some larger programs. I actually found a bug in my hardware that was hidden for a while because my programs were never very complex!
Before we can expand the CPU any further, we have to address the fact we're running out of control lines. An easy way to do this is to add a 3rd 28C16 ROM and be on your way. If you want something a little more involved but satisfying, read on. Right now the control lines are one hot encoded. This means that if you have 4 lines, you can encode 4 states. But we know that a 4-bit binary number can encode 16 states. We'll use this principle via 74LS138 decoders, just like Ben used for the step counter. Choosing the Control Line Combinations Everything comes with trade-offs. In the case of combining control lines, it means the two control lines we choose to combine can never be activated at the same time. We can ensure this by encoding all the inputs together in the first 74LS138 and all the outputs together in a second 74LS138. We'll keep the remaining control lines directly connected. Rewiring the Control Lines If your build is anything like mine, the control lines are a bit of a mess. You'll need to be careful when rewiring to ensure it all comes back together correctly. Let's get to it:
Place the two 74LS138 decoders on the far right side of the breadboard with the ROMs. Connect them to power and ground.
You'll likely run out of inverters, so place a 74LS04 on the breadboard above your decoders. Connect it to power and ground.
Carefully take your inputs (MI, RI, II, AI, BI, J) and wire them to the outputs of the left 74LS138. Do not wire anything to O0 because that's activated by 000 which won't work for us!
Carefully take your outputs (RO, CO, AO, EO) and wire them to the outputs of the right 74LS138. Remember, do not wire anything to O0!
Now, the 74LS138 outputs are active low, but the ROM outputs were active high. This means you need to swap the wiring on all your existing 74LS04 inverters for the LEDs and control lines to work. Make sure you track which control lines are supposed to be active high vs. active low!
Wire E3 to power and E2 to ground. Connect the E1 on both 138s together, then connect it to the same line as OE on your ROMs. This will ensure that the outputs are disabled when you're in program mode. You can actually take off the 1k pull-up resistors from the previous tutorial at this stage, because the 138s actively drive the lines going to the 74LS04 inverters rather than floating like the ROMs.
At this point, you really need to ensure that the massive rewiring job was successful. Connect 3 jumper wires to A0-A2 and test all the combinations manually. Make sure the correct LED lights up and check with a multimeteoscilloscope that you're getting the right signal at each chip. Catching mistakes at this point will save you a lot of headaches! Now that everything is working, let's finish up:
Connect A0-A2 of the left 74LS138 to the left ROM's A0-A2.
Connect A0-A2 of the right 74LS138 to the right ROM's A0-A2.
Distribute the rest of the control signals across the two ROMs.
Changing the ROM Code This part is easy. We just need to update all of our #define with the new addresses and program the ROMs again. For clarity that we're not using one-hot encoding anymore, I recommend using hex instead of binary. So instead of #define MI 0b0000000100000000, we can use #define MI 0x0100, #define RI 0x0200, and so on. Testing Expanding the control lines required physically rewiring a lot of critical stuff, so small mistakes can creep up and make mysterious errors down the road. Write a program that activates each control line at least once and make sure it works properly! With your assembler and Arduino programmer, this should be trivial. Bonus: Adding B Register Output With the additional control lines, don't forget you can now add a BO signal easily which lets you fully use the B register.
Adding a stack significantly expands the capability of the CPU. It enables subroutines, recursion, and handling interrupts (with some additional logic). We'll create our stack with an 8-bit stack pointer hard-coded from $0100 to $01FF, just like the 6502. Wiring up the Stack Pointer A stack pointer is conceptually similar to a program counter. It stores an address, you can read it and write to it, and it increments. The only difference between a stack pointer and a program counter is that the stack pointer must also decrement. To create our stack pointer, we'll use two 74LS193 4-bit up/down binary counters:
Place a 74LS00 NAND gate, 74LS245 transceiver, and two 74LS193 counters in a row next to your output register. Wire up power and ground.
Wire the the Carry output of the right 193 to the Count Up input of the left 193. Do the same for the Borrow output and Count Down input.
Connect the Clear input between the two 193s and with an active high reset line. The B register has one you can use on its 74LS173s.
Connect the Load input between the two 193s and to a new active low control line called SI on your 74LS138 decoder.
Connect the QA-QD outputs of the lower counter to A8-A5 and the upper counter to A4-A1. Pay special attention because the output are in a weird order (BACD) and you want to make sure the lower A is connected to A8 and the upper A is connected to A4.
Connect the A-D inputs of the lower counter to B8-B5 and the upper counter to B4-B1. Again, the inputs are in a weird order and on both sides of the chip so pay special attention.
Connect the B1-B8 outputs of the 74LS245 transceiver to the bus.
On the 74LS245 transceiver, connect DIR to power (high) and connect OE to a new active low control line called SO on your 74LS138 decoder.
Add 8 LEDs and resistors to the lower part of the 74LS245 transceiver (A1-A8) so you can see what's going on with the stack pointer.
Enabling Increment & Decrement We've now connected everything but the Count Up and Count Down inputs. The way the 74LS193 works is that if nothing is counting, both inputs are high. If you want to increment, you keep Count Down high and pulse Count Up. To decrement, you do the opposite. We'll use a 74LS00 NAND gate for this:
Take the clock from the 74LS08 AND gate and make it an input into two different NAND gates on the 74LS00.
Take the output from one NAND gate and wire it to the Count Up input on the lower 74LS193 counter. Take the other output and wire it to the Count Down input.
Wire up a new active high control line called SP from your ROM to the NAND gate going into Count Up.
Wire up a new active high control line called SM from your ROM to the NAND gate going into Count Down.
At this point, everything should be working. Your counter should be able to reset, input a value, output a value, and increment/decrement. But the issue is it'll be writing to $0000 to $00FF in the RAM! Let's fix that. Accessing Higher Memory Addresses We need the stack to be in a different place in memory than our regular program. The problem is, we only have an 8-bit bus, so how do we tell the RAM we want a higher address? We'll use a special control line to do this:
Wire up an active high line called SA from the 28C16 ROM to A8 on the Cypress CY7C199 RAM.
Add an LED and resistor so you can see when the stack is active.
That's it! Now, whenever we need the stack we can use a combination of the control line and stack pointer to access $0100 to $01FF. Updating the Instruction Set All that's left now is to create some instructions that utilize the stack. We'll need to settle some conventions before we begin:
Empty vs. Full Stack: In our design, the stack pointer points to the next empty slot in memory, just like on the 6502. This is called an "empty stack" convention. ARM processors use a "full stack" convention where the stack points to the last filled slot.
Ascending vs. Descending Stack: In our design, the stack pointer increases when you add something and decreases when you remove something. This is an "ascending stack" convention. Most processors use a "descending stack", so we're bucking the trend here.
If you want to add a little personal flair to your design, you can change the convention fairly easily. Let's implement push and pop (source code):
Define all your new control lines, such as #define SI 0x0700 and #define SO 0x0005.
Create two new instructions: PSH (1011) and POP (1100).
PSH starts the same as any other for the first two steps: MI|CO and RO|II|CE. The next step is to put the contents of the stack pointer into the address register via MI|SO|SA. Recall that SA is the special control line that tells the memory to access the $01XX bank rather than $00XX.
We then take the contents of AO and write it into the RAM. We can also increment the stack pointer at this stage. All of this is done via: AO|RI|SP|SA, followed by TR.
POP is pretty similar. Start off with MI|CO and RO|II|CE. We then need to take a cycle and decrement the stack pointer with SM. Like with PSH, we then set the address register with MI|SO|SA.
We now just need to output the RAM into our A register with RO|AI|SA and then end the instruction with TR.
Updating the assembler is easy since neither instruction has operands. For example, push is just psh -> 0x0B.
And that's it! Write some programs that take advantage of your new 256 byte stack to make sure everything works as expected.
The last step to complete our stack is to add subroutine instructions. This allows us to write complex programs and paves the way for things like interrupt handling. Subroutines are like a blend of push/pop instructions and a jump. Basically, when you want to call a subroutine, you save your spot in the program by pushing the program counter onto the stack, then jumping to the subroutine's location in memory. When you're done with the subroutine, you simply pop the program counter value from the stack and jump back into it. We'll follow 6502 conventions and only save and restore the program counter for subroutines. Other CPUs may choose to save more state, but it's generally left up to the programmer to ensure they're not wiping out states in their subroutines (e.g., push the A register at the start of your subroutine if you're messing with it and restore it before you leave). Adding an Extra Opcode Line I've started running low on opcodes at this point. Luckily, we still have two free address lines we can use. To enable 5-bit opcodes, simply wire up the 4Q output of your upper 74LS173 register to A7 of your 28C16 ROM (this assumes your opcodes are at A3-A6). Updating the ROM Writer At this point, you simply need to update the Arduino writer to support 32 instructions vs. the current 16. So, for example, UCODE_TEMPLATE[16][8] becomes UCODE_TEMPLATE[32][8] and you fill in the 16 new array elements with nop. The problem is that the Arduino only has so much memory and with the way Ben's code is written to support conditional jumps, it starts to get tight. I bet the code can be re-written to handle this, but I had a TL866II Plus EEPROM programmer handy from the 6502 build and I felt it would be easier to start using that instead. Converting to a regular C program is really simple (source code):
Copy all the #define, global const arrays (don't forget to expand them from 16 to 32), and void initUCode(). Add #include and #include to the top.
In your traditional int main (void) C function, after initializing with initUCode(), make two arrays: char ucode_upper[2048] and char ucode_lower[2048].
Take your existing loop code that loops through all addresses: for (int address = 0; address < 2048; address++).
Modify instruction to be 5-bit with int instruction = (address & 0b00011111000) >> 3;.
When writing, just write to the arrays like so: ucode_lower[address] = ucode[flags][instruction][step]; and ucode_upper[address] = ucode[flags][instruction][step] >> 8;.
Open a new file with FILE *f = fopen("rom_upper.hex", "wb");, write to it with fwrite(ucode_upper, sizeof(char), sizeof(ucode_upper), f); and close it with fclose(f);. Repeat this with the lower ROM too.
Compile your code using gcc (you can use any C compiler), like so: gcc -Wall makerom.c -o makerom.
Running your program will spit out two binary files with the full contents of each ROM. Writing the file via the TL866II Plus requires minipro and the following command: minipro -p CAT28C16A -w rom_upper.hex. Adding Subroutine Instructions At this point, I cleaned up my instruction set layout a bit. I made psh and pop 1000 and 1001, respectively. I then created two new instructions: jsr and rts. These allow us to jump to a subroutine and returns from a subroutine. They're relatively simple:
For jsr, the first three steps are the same as psh: MI|CO, RO|II|CE, MI|SO|SA.
On the next step, instead of AO we use CO to save the program counter to the stack: CO|RI|SP|SA.
We then essentially read the 2nd byte to do a jump and terminate: MI|CO, RO|J.
For rts, the first four steps are the same as pop: MI|CO, RO|II|CE, SM, MI|SO|SA.
On the next step, instead of AI we use J to load the program counter with the contents in stack: RO|J|SA.
We're not done! If we just left this as-is, we'd jump to the 2nd byte of jsr which is not an opcode, but a memory address. All hell would break loose! We need to add a CE step to increment the program counter and then terminate.
Once you update the ROM, you should have fully functioning subroutines with 5-bit opcodes. One great way to test them is to create a recursive program to calculate something--just don't go too deep or you'll end up with a stack overflow!
Conclusion
And that's it! Another successful upgrade of your 8-bit CPU. You now have a very capable machine and toolchain. At this point I would have a bunch of fun with the software aspects. In terms of hardware, there's a number of ways to go from here:
Interrupts. Interrupts are just special subroutines triggered by an external line. You can make one similar to how Ben did conditional jumps. The only added complexity is the need to load/save the flags register since an interrupt can happen at any time and you don't want to destroy the state. Given this would take more than 8 steps, you'd also need to add another line for the step counter (see below).
ROM expansion. At this point, address lines on the ROM are getting tight which limits any expansion possibilities. With the new approach to ROM programming, it's trivial to switch out the 28C16 for the 28C256 that Ben uses in the 6502. These give you 4 additional address lines for flags/interrupts, opcodes, and steps.
Segment/bank register. It's essentially a 2nd memory address register that lets you access 256-byte segments/banks of RAM using bank switching. This lets you take full advantage of the 32K of RAM in the Cypress chip.
Fast increment instructions. Add these to registers by replacing 74LS173s with 74LS193s, allowing you to more quickly increment without going through the ALU. This is used to speed up loops and array operations.
Is FAANG really the only way to get a combo of high pay, good experience, healthy work-life balance and job security these days?
So I am in my 20s, based in London and have been in the industry for 5 years now, first as a software engineer and later - after completing my Masters - as a data scientist. Never had a full-time job at FAANG, partially because I'm not that good at reversing binary trees on a whiteboard (had a summer internship at Google but failed the conversion interviews), partially because I never really saw getting there as my goal and haven't interviewed with any of the big companies since then. Now, I always had this idea that at start ups, there is this trade-off that your work-life balance might be not as good - but you are much better off in terms of getting interesting experience, having more personal growth and flexibility, as well as often more money. My personal experience so far, however, has been kinda frustrating and I can't help but feel like FAANG is superior in every single way:
Getting good experience: this has really been the biggest pain for me as a data scientist. Most people I met had no idea what data science is and expected me to work on ETL pipelines and dashboards, completely ignoring my desire to get better at Machine Learning and predictive modelling. At my last company, I ended up changing the team trying to get more relevant DS experience but in the end it turned out to be even worse (even though the team lead promised otherwise). As a result I am in this kinda weird situation when with my YOE I'm expected to be at the mid-senior level, but to be honest, I don't feel that my ML skills are much better than that of a junior. Don't think this could ever happen at Google or Facebook.
Personal growth: there's been little to no mentorship at my previous company, just when I needed it the most when I was still fairly junior. My impression is that at start ups people are just too busy firefighting to actually invest their time in mentoring junior colleagues.
Flexibility: if there is any flexibility then it is that sort of flexibility with which the CEO at my last job could ping me on evenings and weekends. When I tried moving to a different team, it took me 10 (TEN) months to finally finish this move (the company keeps lying to people in interviews that it is easy to do so).
Salaries: to be fair, I think my salary progression so far has been better than what I would have at FAANG. But given how low my starting salary was as a fresh grad I'm still lagging behind my FAANG friends in terms of saving money (which means that they will sooner be able to buy a house, have a family etc.).
Sign-on bonuses: none of the smaller companies I've had offers from over the past few years (even those with 1000+ people) offered cash bonuses. You can get something like £25k in share options, but the more I learn about these share option schemes the more they seem like a scam to me (the 4-year vesting period in particular is a joke). My friend with the same YOE as me just got an offer at FAANG and got a £15k sign-on bonus in CASH which seems ridiculously high (again that's the difference between this guy buying his first house later this year and me MAYBE getting rich in 4 years when the options fully vest and if the company doesn't blow up like my previous ones did).
Performance bonuses: I basically never had any performance bonuses despite being promised so and having good performance reviews. It just turned out that none of the start ups I was working for had sustainable business models and all ended up being sinking ships.
Job security: the current COVID crisis says it all really. Everyone at my current company is suffering pay cuts and / or furloughs, but I keep seeing ads from Facebook Recruitmens saying that they still want to hire 1000 more staff in London this year.
It feels a bit like I've reached my "fuck it" moment and that I should just start spending all my free time on LeetCode practicing binary trees reversals to finally land a job at FAANG. So I am really just looking for opinions here. Is there indeed such a big gap in the quality of life of the FAANG people compared to everyone else? Or does anyone have any good stories about working for a small company where they would still feel safe, get a decent pay and good experience, and have time for their hobbies and families? TL;DR: Spent the first few years of my CS career at smaller companies and can't help but feel inferior to my peers who have been enjoying their time at FAANG. This makes me think I made a bad mistake by not following the same path. The risks just don't seem worth it and this COVID crisis is kinda the last straw
so this is kinda a wierd story. I was planning to restart my computer. (cant remember why) I spend most of my time watching youtube videos so i had alot of tabs open. So i was watching the videos then deleting the tab but not opening new tabs. So i was down 2 i think 1 it was a pretty long video so i tried to open a youtube home page tab just to look while i listened to the video. And this is a short exerp of what i got.
Hello ladies, gents, and non-binary bougie pals! I took it upon myself to do what no one wanted and no one asked for: DIY designer fragrance candles!
Obligatory aside: this is my first time posting here in repladies, and my first time making an attempt at a longer posting in general, so bear with me and my formatting! I'll do my best. ☺️
A Bit of Background... (not required reading, just context!)
I was OBSESSED with u/onthevergeoftears's post on DIY and rep fragrances, and more recently u/diambra's post on rep. fragrances! I stumbled upon deadass identical to the read thing designer "inspired" perfume oils a bit before I found those posts – my main hookup is OilPerfumery! They've got a large range of Western and Arabian fragrances that I really enjoy (also use code OP20 for 20% off but don't tell them because I'm not supposed to know about that code...) Now, I am but a poor college student and generally do not have the resources to compare their work to the real deal, but I will say their La Vie Est Belle and Light Blue for Her are pretty spot on. Anyways my first DIY dream was to convert the oil perfumes into sprays and transplant them into the authentic bottles. I researched the process for 30 minutes quite some time before deciding I probably didn't have the patience to tackle that yet. My next stroke of genius was to created candles with my perfume oils and transplant them into authentic designer candle cups – helluva lot easier lemme tell you. This came after reading up on people's fears about burning rep candles with how expensive they were to ship because of their weight. With minimal effort, I have achieved some degree of success and would like to share the process and results with you!
The Good Stuff 🤩🕯
1. Cost
I created 2 DIY Jo Malone candles in authentic candle cups – cups? glasses? holders? The whole process was relatively inexpensive (considering the cost of an authentic Jo Malone candle): I purchased 1lb. of paraffin wax from Michael's craft store for $7.50, a package of 9 candle wicks for about $3 I think also from Michael's, my oil perfumes from OilPerfumery for appx. $11 each, and the 2 Jo Malone empty candle jars (we're going with jars now) for $20 on Mercari. I find that between offerup, Poshmark, eBay and Mercari, eBay and Mercari had the most reasonably priced candle jars and empty perfume bottles! I also purchased a teeny plastic syringe and a pack of tin pans from the dollar store for a total of $2. Accounting for only using 2 of my wicks, this project cost me $54 for 2 finished candles. An equivalent candle from Jo Malone costs $78 individually, so I'm pretty proud of my $27 ones! I'm sure it could've been done a bit cheaper had I not poured the entire bottle of oil perfume into my first candle, forcing me to use another bottle for the second candle been a bit more conservative with the amount of fragrance I added to my candles.
Note: I chose to use paraffin wax, despite online hysteria that it will cause cancer – authentic Jo Malone candles also are rumored to use paraffin wax because of their unobtrusive smell (and I didn't see any evidence that really convinced me that my candle would kill me). Soy wax has a very intense and distinctive smell that I found to be rather unpleasant, and I didn't want my perfumes fighting for odoriferous dominance! There's a massive collection of videos on what waxes work best for what on Youtube, take a look for yourself to see what might be the best option for you! I just chose this because the color was close to authentic, it was less stinky, and it was cheap.
2. Production
I said f the rules and didn't match my scents to the original Jo Malone candle jars - I used JM Wild Strawberry and Parsley (so freakin' summery) and I used JM Pomegranate Noir (so not summery but deep and yummy regardless). I began by melting ½ lb. of the paraffin wax in my DIY double boiler. Wax is a BITCH to get out of your prized cookware, do not melt wax in something you care about. While I waited for the wax to melt, I hot glued my wick into the first jar. That's a lie that I just realized my next photo exposes - I gorilla glued it, which was a terrible idea that didn't work. Hot glue yours. I then attempted to use my dollar store syringe to suck out some of the oil perfume – it sprayed everywhere and my whole kitchen still smells like wild strawberry and parsley, 0/10 do not recommend. Instead, as I did with my second candle, simply remove the rollerball applicator and pour the oil perfume into the wax. Now I will say, there is a science to adding the oil at the right temperature depending on the type of wax and the shape of the candle, but I was on a mission and did not bother checking the temperature of the wax. I let it melt in the double boiler (and I never allowed the water below it to get to a full boil - it was that stage of teeny baby bubbles all over the bottom of the pan) and then waited about 5 minutes to ensure it was heated thoroughly. Next, it's time to fill the candle! This is where I was most thankful for my lil syringe. After several failed attempts to pick up the pan and pour the was, I realized that my potholders were completely saturated in wax, and that there was no easy or clean way to pour. Instead, I used the plastic syringe to suck up a bit of melted wax and transplant it into the jar. I'd highly recommend something like this to get the cleanest end results if you're a candle making noob like I am! Once you've filled the candle with the liquid wax, it's time to let it set (either on the counter or in the fridge). It will set on the outside relatively quickly, but I'd say it took a solid hour for it to be "done" to the point of being stable enough to move around. During this time, you'll need something to support the wick so it stands upright. I struggled, obviously. It was on my second candle that I realized a mechanical pencil clip (or pen clip) did an awesome job!BIG IMPORTANT FACTOID is that upon cooling, you candle will make a weird cratedivet in the middle - there's some scientific reason behind it, I'm just too lazy to find it again. That being said it is important that you don't put all of the wax into your candle jar on the first go - you need to save a bit to fill in the crater. Again, you'll let it set. After that, snip your wick and...
3. Voila!
You have a Jo Malone candle! All things considered, I'm pretty proud with how they turned out! Had I just wanted them for decoration, they would have come out to less than $15 each - I will (probably) eventually burn them to enjoy the scent. They're both fragrant enough that you can smell them within a couple feet of walking by the candles. That being said, ½ bottle of the perfume oil I'm sure would have been plenty, I just have no self control. Save yourself some money for that next TB haul and DIY your next luxe candle! If there's any information I may have missed, please let me know - I'd be happy to fill in the gaps! I'm incredibly lazy and will 100% not proofread this before submitting. Thanks for being such a great community! 💛🥰
Edit: please look at the comments from people much wiser than I explaining some of the scientific-y bits I was too lazy to look into, super important lol
MAME 0.219 arrives today, just in time for the end of February! This month we’ve got another piece of Nintendo Game & Watch history – Pinball – as well as a quite a few TV games, including Dream Life Superstar, Designer’s World, Jenna Jameson’s Strip Poker, and Champiyon Pinball. The previously-added Care Bears and Piglet’s Special Day TV games are now working, as well as the big-endian version of the MIPS Magnum R4000. As always, the TV games vary enormously in quality, from enjoyable titles, to low-effort games based on licensed intellectual properties, to horrible bootlegs using blatantly copied assets. If music/rhythm misery is your thing, there’s even a particularly bad dance mat game in there. On the arcade side, there are fixes for a minor but long-standing graphical issue in Capcom’s genre-defining 1942, and also a fairly significant graphical regression in Seibu Kaihatsu’s Raiden Fighters. Speaking of Seibu Kaihatsu, our very own Angelo Salese significantly improved the experience in Good E-Jan, and speaking of graphics fixes, cam900 fixed some corner cases in Data East’s innovative, but little-known, shoot-’em-up Boogie Wings. Software list additions include the Commodore 64 INPUT 64 collection (courtesy of FakeShemp) and the Spanish ZX Spectrum Load’N’Run collection (added by ICEknight). New preliminary CPU cores and disassemblers include IBM ROMP, the NEC 78K family, Samsung KS0164 and SSD Corp’s Xavix 2. As always, you can get the source and 64-bit Windows binary packages from the download page.
MAME Testers Bugs Fixed
06790: [Graphics] (surpratk.cpp) suratk: Missing star field rotation effect in final level. (MetalliC)
07079: [Gameplay] (suna8.cpp) sparkman, sparkmana: Player 2 button inputs are not read correctly. (dink)
The Walking Dead: Battleground (JAKKS Pacific TV Game) [Sean Riddle, David Haywood]
The Walking Dead: Zombie Hunter (JAKKS Pacific TV Game) [Sean Riddle]
WinFun / KidConnection SmarTV Adventures [Sean Riddle, David Haywood]
New clones marked as NOT_WORKING
3 Cards Poker 96 (V1.0) [Ioannis Bampoulas]
Cherry Angel (set 2) [Ioannis Bampoulas]
Club Kart: European Session (2003, prototype, set 2) [coolmod, MetalliC]
Ferrari F355 Challenge (private show version) [coolmod]
Roland D-50 Linear Synthesizer (Ver. 1.xx) [DBWBP]
Roland D-550 Linear Synthesizer [DBWBP]
Sanyo MBC-16LT [rfka01]
Sirio II (Calfesa S.L. Spanish Moon Cresta bootleg, set 1) [Juan Romero, ClawGrip]
Time Crisis 4 (Japan, TSF1001-NA-A) [Guru]
Victor V286C [rfka01]
New working software list additions
altos8600: Altos Diagnostic Executive [Robbbert]
apple2_flop_clcracked: Algebra Volume 6 (Version 1.0) (cleanly cracked), Alkemstone (cleanly cracked), Building Perspective (cleanly cracked), The Dragon's Eye (cleanly cracked), Fraktured Faebles (cleanly cracked), Generic Computer Games (cleanly cracked), Gruds in Space (cleanly cracked), Other-Venture #3: The Escape from Traam (cleanly cracked), Pick The Part (cleanly cracked), Ulysses and the Golden Fleece (Version 1.1) (cleanly cracked), World Atlas Action: Geography Facts (cleanly cracked) [4am, Firehawke]
apple2_flop_orig: 221B Baker Street (Version 1.1), Adventure Programming Kit (Versoin 10.84), Alter Ego (female version), Alter Ego (male version), The Dallas Quest, The Dragon's Eye, Expedition Amazon, Garfield Trivia Game, Generic Computer Games, Legacy of the Ancients, Manhunter: New York (Version 1.0I), MasterType (Version 2.1), Micro Cookbook (Version 3.00), Miner 2049er II, Ming's Challenge, The Serpent's Star (Version 1.0), Spectrum: Programs and Patterns, Summer Games II, Time Zone (Version 1.1), The Tracer Sanction, Transylvania (1985 Version), Treasure Island, Tumble Bugs [4am, Firehawke]
applix: Boot disk [Robbbert]
aussiebyte: Boot disk [Robbbert]
buzztime_cart: Series 1 - Everything Trivia, Series 1 - History Trivia, Series 1 - Sports Trivia, Series 1 - TV Trivia [Sean Riddle, David Haywood]
c64_cass:
The CF Power Pack Tape 6, The CF Power Pack Tape 9, Dan Dare - Pilot of the Future, Excaliba, Postman Pat 2, Saracen [FakeShemp]
gamegear: Sonic The Hedgehog 2 (World, final prototype 19920925) [drx, FakeShemp]
hp86_rom: Advanced programming 1 ROM, Advanced programming 2 ROM, Assembler ROM, Extended Mass Storage ROM, I/O ROM, Language ROM, Matrix 1 ROM, Matrix 2 ROM, MIKSAM ROM, Printeplotter ROM [F.Ulivi]
ibm5150:
Magic Pockets [ArcadeShadow]
Domino 1.0 [FakeShemp]
ibm5170:
Cannon Fodder 2, Epic Pinball (shareware version - Mr. Disk release), Epic Pinball: Crash and Burn, Epic Pinball: Cyborgirl, Epic Pinball: Enigma [ArcadeShadow]
Tågplusguiden - Vinter–Våren 1998 [FakeShemp]
jakks_gamekey_nm: Pac-Man & Bosconian (01 APR 2005 A SKU G) [Sean Riddle, Ryan Holtz, David Haywood]
jazz: Windows NT Workstation Version 3.5, Windows NT Workstation Version 3.51, Windows NT Workstation Version 4.0 Service Pack 1 [Patrick Mackinlay]
lynx: Weltenschlächter [anonymous]
megadriv: Sonic the Hedgehog 2 (World, final prototype 19921102), Sonic the Hedgehog 3 (World, prototype 19931103) [drx, FakeShemp]
nes: English Pyramid (Pirate) [Gaming Alexandria]
odyssey2:
Death Race (Euro) [anonymous]
Death Race (USA) [SSJ, TeamEurope]
sbrain: Boot disk [Robbbert]
sdk85: Mastermind [AJR]
spectrum_cass:
Load'N'Run (Spain) (Especial) [Manu128k]
Load'N'Run (Spain) (Issue 00), Load'N'Run (Spain) (Issue 01), Load'N'Run (Spain) (Issue 02), Load'N'Run (Spain) (Issue 03), Load'N'Run (Spain) (Issue 04), Load'N'Run (Spain) (Issue 05), Load'N'Run (Spain) (Issue 06), Load'N'Run (Spain) (Issue 07), Load'N'Run (Spain) (Issue 08), Load'N'Run (Spain) (Issue 09), Load'N'Run (Spain) (Issue 10), Load'N'Run (Spain) (Issue 11), Load'N'Run 2ª época (Spain) (Issue 00), Load'N'Run 2ª época (Spain) (Issue 01), Load'N'Run 2ª época (Spain) (Issue 02), Load'N'Run 2ª época (Spain) (Issue 03), Load'N'Run 2ª época (Spain) (Issue 04), Load'N'Run 2ª época (Spain) (Issue 05), Load'N'Run 2ª época (Spain) (Issue 06), Load'N'Run 2ª época (Spain) (Issue 07), Load'N'Run 2ª época (Spain) (Issue 08) [SPA2, RetroLEL, Jander, ICEknight]
uzebox: Final Blood, Frog Feast, Laser Puzzle, Laser Puzzle II, Melli's RetroLand, Reels of Fortune, Uzebox Tactics, Uzi Wars [uzebox.org]
Software list items promoted to working
fmtowns_cd:
King's Quest V - Absence Makes the Heart Go Yonder, Kyuukyoku Tiger, Mixed-Up Mother Goose, Panzer Division - Kikou Shidan, Taito Chase H.Q. (Demo), The Case of the Cautious Condor [Barry Rodewald, Carl, r09]
Life & Death [redump.org, Barry Rodewald, Carl, r09]
How to Play your Casio ROM Keyboard (RO-251) [Sean Riddle, avlixa, ClawGrip]
World Songs (RO-551) [Sean Riddle]
fmtowns_cd: Doki Doki Vacation - Kirameku Kisetsu no Naka de, Para Para Paradise [redump.org, r09]
ique: Dòngwù Sēnlín (version 8), F-Zero X Wèilái Sàichē (manual, version 2), F-Zero X Wèilái Sàichē (manual, version 4), F-Zero X Wèilái Sàichē (trailer), F-Zero X Wèilái Sàichē (version 3), iQue Club (version 1), iQue Club (version 2), iQue Club (version 3), Mǎlìōu Kǎdīngchē (manual, version 2), Mǎlìōu Kǎdīngchē (manual, version 6), Mǎlìōu Kǎdīngchē (trailer), Mǎlìōu Kǎdīngchē (version 4), Mǎlìōu Kǎdīngchē (version 5), Mǎlìōu Yīshēng (manual, version 2), Mǎlìōu Yīshēng (manual, version 4), Mǎlìōu Yīshēng (trailer), Mǎlìōu Yīshēng (version 4), Rèntiāntáng Míngxīng Dà Luàn Dǒu (manual, version 1), Rèntiāntáng Míngxīng Dà Luàn Dǒu (version 5), Shuǐ Shàng Mótuō (manual, version 2), Shuǐ Shàng Mótuō (manual, version 4), Shuǐ Shàng Mótuō (trailer, version 1), Shuǐ Shàng Mótuō (trailer, version 2), Shuǐ Shàng Mótuō (version 4), Shén Yóu Mǎlìōu (manual, version 2), Shén Yóu Mǎlìōu (manual, version 6), Shén Yóu Mǎlìōu (trailer, version 1), Shén Yóu Mǎlìōu (trailer, version 2), Shén Yóu Mǎlìōu (version 4), Sàiěrdá Chuánshuō: Shíguāng zhī Dí (manual, version 2), Sàiěrdá Chuánshuō: Shíguāng zhī Dí (manual, version 4), Sàiěrdá Chuánshuō: Shíguāng zhī Dí (trailer), Sàiěrdá Chuánshuō: Shíguāng zhī Dí (version 1), Sàiěrdá Chuánshuō: Shíguāng zhī Dí (version 4) [FakeShemp]
leapster: The Disney-Pixar Collection (USA), Letterpillar (v1.0, USA) [TeamEurope]
mobigo_cart:
Ben 10 - UltimateAlien - Mine der Gedanken (Germany) (80-250604), Cars 2 (Germany) (80-251904), Chuggington (Germany) (80-251804), Cars Toon - Hooks unglaubliche Geschichten (Germany) (80-251204), Disney Princess (Germany) (80-251104), Dora - Tag des Zwillings (Germany) (80-250804), Für immer Shrek (Germany) (80-250004), Kung Fu Panda 2 (Germany) (80-252004), Micky Maus - Wunderhaus (Germany) (80-250504), Mobigo Kiosk (Germany), Die Pinguine aus Madagascar - Operation Krone (Germany) (80-250304), Rapunzel - Neu Verföhnt (Germany) (80-251704), Team Umizoomi - Die große Umiauto Rettung (Germany) (80-252504), Toy Story 3 (Germany) (80-250104) [TeamEurope]
Mickey Mouse, Tangled, Toy Story 3 [Sean Riddle]
n64: Aidyn Chronicles - The First Mage (USA, prototype 20000210), Aidyn Chronicles - The First Mage (USA, prototype 20000509), Cruis'n World (Europe), Die Hard 64 (prototype 20000315, set 1), Die Hard 64 (prototype 20000315, set 2), Die Hard 64 (prototype 20000315, set 3), Dragon Sword (prototype), Duke Nukem - Zero Hour (USA, final prototype), ECW Hardcore Revolution (Germany), Frogger 2 (USA, prototype, "Milestone 4"), GT64 - Championship Edition (prototype 19980525), International Superstar Soccer 2000 (USA, rev 1), Madden NFL 99 (USA, prototype 19980805, "Beta 10 NTSC"), Madden NFL 99 (USA, rev 1), Mario Kart 64 (USA, set 2), Mission: Impossible (Spain, rev 1), Mortal Kombat Trilogy (prototype 19960513), NBA Hangtime (USA, set 2), Robotech: Crystal Dreams (USA, prototype, earlier), SpaceStation Silicon Valley (USA, rev 1), Top Gear Hyper-Bike (prototype), Top Gear Rally (Asia), Top Gear Rally 2 (prototype 19990831), Turok 3 - Shadow of Oblivion (Europe, prototype 20000606), Wipeout 64 (prototype) [FakeShemp]
Barney: Barney Cares / Best Manners Show / Let's Work Together, Blue's Perfect Picnic Spot, Disney No Rumbly In Pooh's Tumbly, Disney Pooh Windy Day, Disney Princess: Jasmine / Mulan / Pocahontas, Disney Princess: The Little Mermaid / Snow White / Beauty and the Beast, Disney's Bambi / Lady and the Tramp / Peter Pan, Disney's Pinocchio / Disney/Pixar Toy Story 2 / The Jungle Book, Disney's The Lion King, Disney's The Little Mermaid, Disney/Pixar Cars / The Incredibles / Monsters Inc., Disney/Pixar Finding Nemo, Dora the Explorer: Dora's Garden Adventure / The Gingerbread Boy / Dora's Art Adventure, Dora's Garden Adventure, Noah's Ark, Petter Rabbit / Jemima Puddle-Duck / Tom Kitten, Scooby-Doo! Miniature Golf Mistery, Sesame Street: Elmo's Colorful Adventure / Grover Stays Up Very Very Late / Me Loves Cookies, Spongebob Squarepants Grand Price Winner!, Spongebob Squarepants Grand Price Winner! / Dora's Garden Adventure / Blue's Perfect Picnic Spot, Thomas & Friends: Cheer up Cranky! / The Big Race / Carnival Capers [Sean Riddle, ClawGrip] Cars (Germany), Das Dschungelbuch (Germany), Findet Nemo (Germany), Der König der Löwen (Germany), Peter Pan (Germany), Winnie Puuh - Ein stürmischer Tag (Germany), Winnie Puuh hat keinen Hunger (Germany) [TeamEurope]
sdk85: AP-29 Serial I/O Routines [AJR]
smarttv_cart: Amusement Park [Sean Riddle, David Haywood]
telestory_cart:
Dora the Explorer - En la feria ambulante / Dora va a la escuela (Spanish), Power Rangers Mystic Force - Code Busters / Whispering Voices (UK / USA?) [TeamEurope, David Haywood]
Cinderella - Cinderella / Beauties in Bloom (USA), Dora the Explorer - At the Carnival / Dora Goes to School (USA), The Lion King - The Lion King / The Lion King II - Simba's Pride (USA), SpongeBob SquarePants - Ice-Cream Dreams / Stop the Presses! (USA), Winnie the Pooh - Bounce Tigger Bounce / Pooh's Honey Tree (USA) [Sean Riddle, TeamEurope]
Thomas & Friends - Thomas Visits the Toy Shop / Thomas' Milkshake Mix [Sean Riddle, ClawGrip]
Source Changes
formats/wd177x_dsk.cpp: Allowed derived classes to override the format per track/head. [68bit]
formats/flex_dsk.cpp: Simplified code, and added support for variants with single-density initial tracks. [68bit]
formats/os9_dsk.cpp: Added support for variants with single-density initial track and base sector zero. [68bit]
floptool: Added OS9 disk format. [68bit]
bus/ss50: Added MFI, OS9 and UniFLEX formats to DC5 floppy drive controller. [68bit]
gimix.cpp updates: [68bit]
Connected interrupts, removed timed interrupt hack, and added two additional floppy drivers.
Added disassembly override for OS9 system calls.
Added OS9 Level 1 version 1.2 BIOS option.
tti.cpp: Made the two firmware revisions BIOS options. [AJR]
sdk85.cpp improvements: [AJR]
Made second 8355 into a ROM expansion slot that can load custom 8755 programs.
Added optional TTY interface.
Added vectored interrupt and soft reset buttons.
Improved accuracy of button labels and changed default key mappings.
jaguar: Eliminated unsafe raw memory pointer use from blitter (fixes several exceptions, including tempst2k). [AJR]
i8155.cpp: Made timer more efficient by not counting each cycle. [AJR]
bus/a2bus: Added 8251-based RS-232 serial interface described in BYTE magazine. [AJR]
Added disassemblers for NEC 78K/0, 78K/I, 78K/II and 78K/III microcontrollers. [AJR]
naomi.cpp: Made “Gun Sense” board used by hotd2 a separate device. [AJR]
wd_fdc.cpp updates: [AJR]
Predicate command completion interrupt on busy flag having been set.
Increased HLD idle timeout to fifteen revolutions for variants other than FD1771 and FD1781.
i8279.cpp updates: [AJR]
Removed timing hack, ensuring SL3 is output (required by Pied Piper Communicator 1).
Corrected keyboard scan rate and logging thereof.
goodejan.cpp updates: [Angelo Salese]
Corrected OKI M6295 pin 7 level to high (fixes voice pitches).
Added difficulty DIP switches
Converted to raw screen timing parameters.
toki.cpp: Converted screen refresh rate to raw timing parameters. [Angelo Salese]
ddenlovr.cpp: Added coin counters and corrected metadata for all games. [Angelo Salese]
subsino2.cpp: Fixed missing ron button. [Angelo Salese]
Synchronized with upstream GENie (addresses GitHub #6248). [Belegdol]
armedf.cpp updates: [cam900]
Converted to use single-pass priority drawing for sprites.
Fixed I/O writes for systems without NB1414M4.
Cleaned up code, memory maps, ROM loading and graphics decoding, and expanded comments.
twin16.cpp: Restrict sprite drawing to clipping rectangle. [cam900]
sound/vrc6.cpp, sound/ym2413.cpp: Changed descriptions to match chip markings/part numbers. [cam900]
sound/msm5205.cpp updates: [cam900]
Added support for MSM5205 10-bit DAC.
Derive timing and sample rate from input clock
Updated notes.
video/stvvdp1.cpp: Fixed Gouraud shading flag test. [cam900]
vgmplay.cpp: Fixed YMF262 register mapping and YMF278B volume. [cam900]
sound/ymf262.cpp: Added support for variants with different clock dividers. [cam900]
sound/ymf278b.cpp: Fixed FM output rate and clock divider, fixed mixing behavior, and expanded notes. [cam900]
1942.cpp: Fixed sprite priorities, implemented sprite line buffering, fixed logo on title screen, and improved interrupt timing. [Ryan Holtz, David Haywood, smf, O. Galibert]
machine/spg2xx_io.cpp: Added watchdog timer support and rudimentary SPI support. [Ryan Holtz]
4 A graph is a collection of nodes, called ..... And line segments called arcs or ..... that connect pair of nodes. UOP Binary Option Indicators are simply a tool to put the odds more in your favor. Please leave a comment and like this video so we can continue to share it with others. Get your copy of the UOP Binary Option Indicators while they are still offering the one time fee launch price of $97. DS — Current Quote: Quotes delayed 20 minutes: DS — Performance: The specified contract reached expiration on 06/19/2020. ... Binary Options Explained Top YieldBoost PUTS of the Dow Components Top YieldBoost CALLS of the Dow Components Top YieldBoost PUTS of the S&P 500 Components Top YieldBoost CALLS of the S&P 500 Components Top ... Shooting an AR-15 in Binary mode is fun. But what if you pull the trigger in binary mode but do not want to let the second round fire? You simply flip the safety back to semi-auto or safe. M&P 15-22: going binary. The most fun is putting it in my M&P15-22. You do need to modify the lower a bit so the binary safety works. Samsung J2 Prime SM-G532G & SM-G532G/DS Custom Binary Blocked By Frp.(Boot Img) Fix,Samsung J2 Prime SM-G532G Custom Binary Blocked By Frp.(Boot Img) Fix,Samsung J2 ...
Combinatin File - https://drive.google.com/file/d/1XJM3WOGbCbTpU3HmXFXOQIux4jRQXHEP/view Password - [email protected] -----... Samsung Grand Prime + (SM-G532F),On7,On8,J7 Prime,J5 Prime,S7,S6,S7 Edge,S6 Edge,C5,C7 Custom Binary Blocked By FRP 100% Fix Samsung Grand Prime + (SM-G532F)... My first ever animation thingy on this channel! I hope you like. So this is a silly story about the absolute nightmare that was trying to get my DS fixed las... Options Domination set for January. If you're NOT in DS Domination, join the list at www.dsd-options.com Options is set to launch in January. When it launches besides having the highest accuracy ... Anto RetroGamer Presents: the universal start-up screen, jingle and console BIOS for the original Nintendo DS. The first in the Nintendo DS family. It's litt...