PRO SIGNAL ROBOT The Most Profitable Binary Option Robot

The Shoulders of Orion- Ch. 1: First Contact

Space-time rippled as the Horns of Glory snapped into real space. The normally smooth transition from FTL subspace travel back to the laws of relativity was instead dangerously jarring, as the inertial dampeners struggled to hold the innards of the massive warship in their proper places. After straining mightily for the briefest of moments, they failed, throwing Admiral Halon Va and the rest of his bridge crew violently into their restraining harnesses. The ship shuddered under the immense stress, then settled, drifting silently through space on minimal power.
“Tactical, get me a status report for the fleet on screen now. I want updates the instant ships jump in.” The Admiral’s voice was still firm and authoritative; it was taking every last shred of resolve he had to keep it that way. “Lieutenant Roshin, put a detail together and work with medical. I’m sure that re-entry caused more than a few extra injuries. Get as many of the crew patched up and ready for emergency action as fast as you can. I want a full casualty report as soon as possible. And if you find Science Officer Lentith and he’s still alive, send him to the bridge immediately.”
Admiral Va settled back into his command chair, drawing creaking sounds from the over-stressed frame as it absorbed the weight of his massive form. The bridge was completely silent now, the command crew entirely focused on the tasks at hand. Or they were too afraid to say anything; Va couldn’t be sure. He was thankful for their silence, though. He didn’t have any answers for them about his failure.
Keying in a few commands on the command panel at his station, the damage report for his ship popped up, the bridge lights flickering from the extra power draw. The Horns of Glory floated before him in hologram form. Long and slender, the ship was over two kilometers from bow to stern. At least, it had been a few hours ago. The forward 20 percent of the holographic ship was flashing red, indicating heavy damage. This was inaccurate, however, as the forward 20 percent of the ship simply wasn’t there anymore. The graceful lines and carefully crafted angles of the ship's armor were an unrecognizable slagged mess, and deep gouges had been cut into the inner decks all over the ship. Whole sections were missing amidships, two of the main reactors were offline, all the primary weapon batteries had been completely destroyed, and most of the critical systems were barely functioning. It was a miracle that she had survived the jump. That morning, Horns of Glory had been the greatest feat of Arien’Ra engineering, and it was now a barely functioning hulk.
And it had all happened under my command, thought Va.
He had no time to wallow in his failures, however, as at that moment tactical finally reconnected to the fleet command systems. The hologram of Horns of Glory quickly scaled down, appearing as a small, flashing, red point of light floating in loose formation with several other points of light. Most of them were flashing red as well. A constant stream of data and various reports scrolled down the right side of the hologram, listing in no uncertain terms the doom that Va had subjected his command to.
If Va had thought that the bridge was quiet before, it was nothing compared to the complete stillness that now settled over them. No one so much as moved a muscle, as they all sat in stunned silence, reading the reports. Occasionally, the hologram would flash, and a new point of light would join the formation, adding more data to the pile spelling out their damnation. After 30 ticks, new points of light had stopped appearing. Admiral Halon Va had lost over 60 percent of his fleet, and not a single other dreadnaught had survived the slaughter. His defeat was total, and the Federation navy was crippled.

Science Officer Beredarin Lentith had been the first member of his family not to enroll in command school in eight generations. They had been some of the finest members of the fleet the Vorqual race had ever contributed to the Federation. His brothers and sisters had all enrolled, which meant that as far as he was concerned, his family had more than fulfilled their duty to the Federation. Military life wasn’t for him, anyway; he wanted to explore. The Federation had been around for over 3000 years, and there were still vast swathes of the galaxy that they knew nothing about. They were still encountering new species every few hundred or so years, and there was nothing he wouldn’t give to find the next one. That had been the dream that directed him away from the military and into academia. The odds of actually finding a new race were so small, though. There were still at least 200,000,000 unexplored systems in the galaxy. There just wasn’t time to visit them all...
He snapped out of his reverie as he stepped over the body, or rather, what was left of the body, of a Zelnassi marine. Most of it was just a green stain on the corridor wall at this point, though there had been enough of the chitinous armored torso to partially obstruct his path. The young lieutenant quickly continued on towards the bridge.
If he was being honest with himself, becoming an expert on the area of unexplored space directly between the Federation and it’s largest military rival wasn’t the smartest of ideas. Between his family reputation and his unique knowledge base, he was just asking to get pressed into service.
Which was exactly what had happened immediately upon the recent outbreak of hostilities.
And now here he was stepping over corpses, marveling at the fact that he had somehow survived this long. He still couldn’t believe the insanity of the Dominion forces. Boarding an enemy ship MID-COMBAT. It was like something out of a youngling’s tale from before space travel. It was pure madness, but there were the bodies to prove that it had happened. He gingerly stepped around the remains of yet another Zelnassi.
The signs of battle continued all the way to the bridge, where he found security forces still holding quickly fortified positions around the bridge entrance. There were more Zelnassi bodies at their feet. Berendarin shuddered. He had been closer to death than he thought.
He quickly pushed those thoughts out of his mind. He could only imagine why he was needed on the bridge so urgently.
The door slid open, and Lentith walked into a completely silent room. Admiral Va was slouched at his command station, his enormous arm propped up on the chair arm and supporting his massive, horned head. Lentith didn’t even know that Arien’Ra COULD slouch. Nevermind that the fastidious Admiral could or would ever do such a thing. Maybe things were somehow worse than he thought. No one seemed to notice him enter, so he announced himself to the Admiral.
Though he didn’t shout, his voice echoed in the deathly silent room, startling most of the bridge command. Two of the other Vorqual officers swore, and the tiny Jezren manning the com station let out a high pitched sound somewhere between a squeak and chirp. Berendarin would have found it quite funny if the situation wasn’t so dire.
Admiral Va immediately snapped back to being the hulk of muscle and horn that imposed his will on a room just by being in it. His booming voice only added to his authority.
“Science Officer Lentith. I’m glad to see you’re still alive. Are you seriously injured?”
Berendarin had almost forgotten that he had walked the entire way to the bridge holding a bandage to his head just above his left eye. The drop out of subspace hadn’t been kind to him. He pulled the bandage away, revealing a dark orange stain on the bandage and a crack in the bone plate above his eye.
“I’m fine, sir, just one of the outer plates, and the bleeding has already stopped.”
“Good. Commander Vortith is currently overseeing the emergency repairs. Take his seat. You are going to help me find a way back home.”
“Sir? I’m sorry I don’t understand. Why don’t we just go back the way we came?”
“That’s not possible. Most of our supply ships and tenders were destroyed when that third wave of Dominion ships hit our flank. Almost all of our pre-prepared fuel reserves are gone. On top of that, some of our ships are so damaged that they don’t have another long jump in them. And if we run into any enemy ships, the whole rest of the fleet is done for. We barely qualify as a fighting force in the state we’re in.”
“Is it really that bad?”
“It’s worse, but we don’t have time to get into the details. You’re the expert on this section of the galaxy. I need you to find the fleet a hiding hole. Somewhere away from the known jump routes through the Spur. Any system where we can use the few miners we have left to scavenge up some fuel, and get some critical repairs done while we’re at it. And from there either wait for reinforcements or get ourselves patched up enough to limp home. Wherever it is, it needs to be close. I’m not leaving any ships behind because they can’t make the jump.”
“Oh. Just that?” The lieutenant knew that Arien’Ra were strict herbivores, but with the look that the Admiral shot him, he couldn’t help but think about the fact that his head would easily fit into that giant, molar filled mouth.
“And away from any known pirate hideaways. Like I said, our fleet can’t take any more fighting. And find it quickly. It won’t be long before the Dominion fleet locates us.”
“I. Uh. Sure. I’ll see what I can find.”
Berendarin shrank into the commander’s chair next to the enormous Arien’Ra, desperately wishing he had been more professional. If he had acted like a proper soldier, it might soften the blow of telling the Admiral that what he wanted was next to impossible. If he had a few weeks, he might be able to find something. So much of the Spur was still un-surveyed. The odds of there being anything useful to the Admiral in the databases was absurdly low, and there was even less of a chance he’d be able to find it in time for the information to matter. He began pouring through his notes anyway. It was better than waiting around to die, which, if the situation was as dire as the Admiral made it sound, was the only other option.
He spent the next hour lost in his notes, finding nothing, while the bridge crew went about piecing the ship and the fleet back together. The young scientist had all but given up on the Admiral’s impossible request when a raucous cheer went up from everyone on the command deck.
“Sir,” The coms officer called out, “The Consul’s Pride just dropped out of subspace and is hailing us, sir.
The main communication screen lit up, and Berendarin Lentith looked to see the face of his oldest sister on screen, strapped into the captain’s chair of her dreadnaught. He let out a sigh of relief; Baraquen was his favorite sibling. Her uniform was drenched in a deep orange blood stain at the shoulder, and she was covered in what looked like flecks of green gore from a Xelnassi. The artificial gravity was clearly malfunctioning, as the captain’s restraining harness was the only thing keeping her from floating around her bridge. But the bone plates of her jaw were turned as always into her calm, self assured smile
“My apologies for the delay in joining you, Admiral Va. We had some… guests shut down our drive mid jump. We had to deal with them before we rejoined the fleet. I assume there is a plan to get us back to federation space?”
“It’s good to see you in one piece, Captain Lentith,” the Admiral responded. He was barely able to keep the relief from his voice. “And there is indeed a plan.”
Berendarin returned to his research as the two ranking officers in the fleet went over the details of their current predicament. He was glad his sister had survived, and not just because they were close. It would have been a terrible blow to the whole family to have lost not only their future matriarch, but the ship she commanded as well. A member of his family had been commanding that dreadnaught uninterrupted for the last 5 generations. Military service had never appealed to Berendarin, but his family history was certainly still important.
And then the solution to the current problem hit him like a driver round. He let out a gasp and tore into his notes with a fervor. Both Admiral Va and his sister’s projection turned to look at him, but he didn’t notice. After a few seconds of curious silence from the rest of the onlookers, Berendarin practically jumped out of his seat.
“Admiral, I think I’ve got something that will work.” The young Lieutenant punched a few commands into his datapad, and a set of stellar coordinates popped up on the navigation terminal. “It’s a main sequence star, about 500 light years from us, fairly close to the edge of the Spur. It’s not anywhere near any established jump routes. The Consul’s Pride made me think of it.” He nodded towards his sister’s face on the ship's screen. “Our great, great grandsire took the Consul’s Pride through the system on her shakedown run a little over 300 cycles ago. Chased a band of Qorthi slavers out of the system. The outer four planets are all gas giants. If we can’t find Helium 3 there, I don’t know where else we should look.”
On screen, Captain Lentith looked impressed, but Admiral Va clearly didn’t seem too sure. “We’re supposed to be going away from Dominion forces, not into them. What were the Qorthi doing there?”
“There are also four rocky inner worlds in the system, Sir, according to reports from the encounter. Apparently, the third planet is a Class 7 Deathworld, and the Qorthi were running some experiments on the primitive lifeforms there. They were caught completely by surprise by the Consul’s Pride, and it was the first time that she fired her weapons in anger. I can’t find any reports of Dominion ships in that section of the Spur since.” There was a long pause before Va responded.
“Good work, Lieutenant. I knew my trust in you wasn’t misplaced.” Admiral Va replied, before turning to the rest of the bridge and booming “Coms! Tactical! Get those coordinates to every ship in the fleet. I want every ship we have left formed up and ready to jump as soon as possible. Any captain who feels that his drives can’t make the jump is to focus all repair efforts on getting their drives functioning immediately. I will transfer repair crews from less damaged ships to more damaged ships if that means we jump even a tick earlier. Get to it everyone. I’m not losing any more of my fleet today.”

The four revolution long jump to Science Officer Lentith’s newfound sanctuary had done wonders for Halon Va’s mental state. The initial shock of his fleet's terrible defeat had worn off, and he had been able to focus on what came next. Repair crews were able to stabilize most of his ship's core systems, and he was no longer worried about the life support systems cutting out and killing the rest of his crew. There had also been time for him to visit with the wounded. To thank them for their sacrifices. He had expected it to be an act of contrition, maybe even a chance to start begging for forgiveness. But there had been no anger in his crew, and no blame hung on his horns. Most had just been relieved that he had survived, and had expressed as much. He would be forever grateful to them for that.
Most importantly, the four revolutions in hyperspace had given the admiral time to really think about what had gone wrong in the nebula. He had barely rested in the preceding four revolutions, spending every scrap of spare time in his office, pouring over records from the battle. That’s where he found himself now, tucked behind his massive ceramic and titanium alloy desk of Tellarim design. It had been custom made for him upon his promotion to this command, a gift from the high admirals and the council. It was the only luxury that Va allowed in his office. The rest of Va’s space he kept strictly utilitarian. There were no trophies adorning his walls, as was customary for other members of his species. The plain bulkheads of his office were instead lined entirely with screens, and each of them were now filled with footage and reports from the battle, running on loop.
Va soaked it all in. The more he watched, the more a singular conclusion crystallized in his mind. He had done everything right; he was sure of that now. 1000 years of doctrine and theory for fighting the Dominion had gone into his preparation for that battle, and he had followed it to the letter. And he had been winning. Then that attack on his flank by the Zelnassi had blown all of that out of the airlock. Something significant had changed in the way the Dominion fought...
Commander Vortith’s voice rang out over the com system. ”Admiral Va, we’ll be transitioning back to real space in moments.”
“Thank you. I’ll be there shortly. And get Science Officer Lentith to the bridge. I want him nearby just in case. He’s the only one who has any idea of where we are.” The Admiral pulled himself from his desk. He would have to leave the rest of his analysis for later. There was just enough time for him to reach the bridge and settle into his command chair before the Horns of Glory snapped back to real space. This time, the inertial dampeners held.
“Tactical, status report.”
“All ships accounted for, Admiral. Though the Consul’s Pride, several cruisers, and three of our escorts are all reporting massive failures in their Drive Cores. They won’t be jumping anywhere anytime soon.”
“Wonderful.” Va wasn’t sure if he meant that sarcastically or not. “Get scans up and running and deploy the pickets that aren’t crippled in a standard scouting formation. How close are we to the nearest gas giant?”
“We’re approximately half a light tick from the system’s innermost gas giant, sir.”
“Excellent. Deploy the rest of the fleet. Put us in a high orbit around the planet in a defensive formation, and get our miners working immediately. Once our orbit is stable, I want every hand, paw and hoof in the fleet working on repairs.”
“Yes sir.”
Admiral Va settled into his command chair for a long shift.
It would be a drawn out, boring process to refuel the ships. With his fleet limping along, and only two functioning miners, it would take far longer than it should. After all the chaos of the last few revolutions, boring would be a welcome change of pace. Va started to relax, sinking into his chair’s acceleration padding. His fleet and his crews were finally safe. The first priority would be to get one of the subspace beacons repaired and to get word back to the Federation that the fleet still existed. And hopefully call for aid. He was sure to be stripped of his rank as soon as contact was made, but hopefully he would avoid a Tribunal. That was an unpleasant prospect…
“Sir, we have unidentified ship signatures appearing from around the planet we’re approaching.”
Va had never heard panic in the voice of his young sensors officer before, but it was certainly there now. Va understood the sentiment, though. He found it difficult to keep the panic from his own voice as he started issuing orders
“Bring the fleet up to combat status immediately. How many ships are there?”
“I’m showing 35 individual signatures. All approaching us at combat speed and still accelerating. At current speeds, they will intercept us in just over 30 ticks, sir.”
“I want details as soon as you have them, Lieutenant. Size, make, estimated firepower. Who they are. And keep scanning the system. Find out where they came from.” The panic had partially subsided for Va. 35 unknowns was not too terrible a threat. He still had almost 240 warships under his command. Still, if there was a way to avoid combat, he had to try. His fleet couldn’t suffer any more losses. “Coms, any attempt by these unknown ships to contact us?”
“I”m not sure, sir,” the diminutive Jezren at the coms replied. “There’s nothing on standard communications channels. The ships are transmitting something, but I can’t figure out what it is.”
“Admiral,” the Lieutenant at the sensors station called out. “I think I might have an idea of where these ships came from. Preliminary scans show there is extensive urbanization on the third and fourth planets, as well as what appear to be habitation sized artificial satellites around the second and sixth planets. One of the moons of the gas giant we’re approaching shows signs of habitation as well. All of them are emitting significant signal pollution. This system clearly already belongs to someone, and they’re broadcasting everywhere.”
Halon Va, High Admiral of the Combined Federation Fleets, turned, slowly and with as much composure as he could muster, to face the young science officer seated to his left. Berendarin sat, mouth agape, staring transfixed at the sensor readouts in front of him. Va had never seen a Vorqual more confused in his life. “I want answers, Officer Lentith.”
“I… I don’t.. This doesn’t make any sense,” the young science officer stammered. “There shouldn’t be anything here.”
“Admiral,” The comms officer cut in, “The signal that we’re picking up from the unknown ships is definitely some kind of communication. I managed to put together audio from it.”
“Play it,” commanded Va. A series of short, guttural, and completely unintelligible sounds came over the speakers in reply. There was a short pause before the sounds repeated themselves again. “Coms, what was that?”
“No idea, sir, but it’s being transmitted on loop. If it is intended as a communication, our translators have no idea what to do with it.”
“Admiral.” The voice came from Va’s left, and was barely audible. Va turned yet again to look at the young science officer. His gaze was locked on the tactical readout, and there something in his eyes that Va couldn’t recognize. A mixture of pure terror and something else. Was it wonder? The young Vorqual’s voice was still barely above a whisper when he continued to address the admiral: “I think we should run the transmission through First Contact Protocols.”

Captain Benjamin Alvarez-León slammed against his restraining harness as the USCS Aurora started it’s decel burn. He had pushed the engines on the outdated cruiser to their limits, and the ship groaned in protest as it started counteracting his rather zealous acceleration orders. He hoped that his mad scramble with his small squadron of outdated ships had been an overreaction. The alternative was something he’d rather not think about.
All Ben had was the reserves; the rest of the fleet was on maneuvers at Sirius. The Admiralty had wanted to test the new, fully modernized fleet’s maneuvering abilities in the gravwell of a binary system. And, in their infinite wisdom, they decided they needed ALL of the new fleet assets, leaving nothing in Sol except for the handful of cruisers and escorts that couldn’t match the capabilities of the modern ships.
A handful of cruisers and escorts that were now hurtling towards more than 200 unknown contacts.
It was the unknown part of all of this that was unnerving Ben. There were no familiar energy signatures. No familiar scan data. No IFF. No signals coming off the contacts of any kind for that matter. Two of the contacts were too big to even be ships. If it wasn’t for the fact that they were moving towards Jupiter in formation, Ben wouldn’t even think they WERE ships.
“So what do you think, Alexi?” Ben asked, turning towards his second in command. “You and the rest of the bridge crew are always making inane bets. Have you whipped up an over-under for what we’re throwing ourselves at yet?”
“Haven’t had time,” came the quick reply from Ben’s right. The short, stocky man from Vladivostok was missing his trademark joviality. “Though, my money is on them being Ithacan, sir.”
Ben bristled at Alexi calling him sir. They’d been friends for twenty years, damnit, and had been practically joined at the hip since going through the Academy together. Outranking him still felt a little off. Now was hardly the time to worry about formalities, though.
“What makes you think they're from Ithaca?”
“It’s the only thing that makes sense. The locals have been getting increasingly radical, and Ithaca is the only sector where reports of piracy have been increasing.”
“Yeah, I could see a rebellion coming from Ithaca,” Ben added slowly, turning over that scenario in his head. “But there’s no way they could swing something of this magnitude. There aren’t even any shipyards in the sector. And even if there were, there’s no way they could keep the construction of over two hundred ships a secret.”
Alexi could only offer him a shrug in response.
It was at that moment that the coms station informed him there was a transmission incoming from the unidentified ships. Ben instructed the ensign to play it, and the bridge was suddenly filled with a stream of grotesque bleating noises and strange grunts, with the occasional recognizable syllable interspersed throughout the transmission. Ben thought he picked out ‘dentify’ from the mess, but he wasn’t sure. There was a long moment of silence on the bridge.
“What the hell was that?”
When no one had any answers for him, Ben tapped his command console and recorded a new message to broadcast.
“This is Captain Alvarez of the USCS Aurora. Unidentified ships, please clarify. Your transmission is badly garbled. We did not receive your identification. You are still trespassing in Commonwealth space and are on an unauthorized course towards Jupiter. Begin decelerating immediately and re-identify yourselves.”
He wouldn’t admit it to the crew, but Ben was profoundly unsettled. Something was deeply, deeply wrong about this whole situation. Not only was he vastly outnumbered by these things, but they were unwilling to communicate properly. He was almost believing this whole thing was some kind of bizarre prank.
“How much longer before we can get a decent visual on these things?
“Any moment now, sir.”
A new transmission arrived just then, and Ben had it played back immediately. This time, instead of almost bovine bleats and grunts, the sounds coming over the speakers were mostly intelligible. Or, they would have been, if any of the syllables were in the right order. It was almost like a toddler was rattling off all of his new favorite sounds, spitting them out in a random order and not knowing how they went together. There were still a few heavy grunts sprinkled in, just for good measure.
Before Ben could process this new joke of a transmission, the contacts finally started slowing. In a matter of moments, the strange wall of contacts was hanging lazily in Jupiter’s orbit, barely moving fast enough to keep their orbit from decaying. They were still in perfect formation.
“Huh. Well, I guess that’s something.”
With nothing to do but sit back and wait as his ship closed the distance, Ben tried to relax and began running over all of the possibilities in his mind of what the new contacts could be. He came up with nothing. Well, nothing feasible, anyway. He took a series of long, calming breaths, trying to clear his mind and focus. This was no time for his imagination to be running wild. But he couldn’t shake the feeling that logic was failing him. Something was off. Something…
“Captain, bringing visual of the unknown contacts up on screen now.”
Ben actually felt his jaw drop. Every contact on his display was clearly a ship. Most were long and spindly, wrapped in layers of some kind of highly reflective armor; a fleet of crystalline arrows hanging in the darkness. The two largest contacts, which Ben had just moments ago thought were too big to be ships, were large enough on the screen for him to clearly see details. In addition to their immense size and strange armor, both ships were dotted with what were clearly weapons platforms, though what kind, Ben couldn’t tell.
Noticeably, almost all of the ships on his screen were heavily damaged. Chunks were missing from some ships, and most had deep lines gouged into their hulls. Any form of decorative paint or markings had been burned away. Something had put these ships through absolute hell. But still, the damage could not take away entirely from the elegance of the ship’s designs. They were graceful and sleek, completely different from anything Ben had ever seen before.
It was all so different. So strange. So very, very… Alien.
Despite every effort he had made to avoid the word, it finally forced itself to form inside Ben’s mind, and forced him to acknowledge the reality that legitimate, extra-Solar life was hanging in the darkness in front of him. It forced him to acknowledge the screams he had been suppressing in the back of his mind. The screams of his imagination crying out in glorious triumph over reality. And with those screams came a deluge of accompanying thoughts and emotions.
He was a child again, staring up at the stars above Armstrong and wondering what else, and who else, was out there. He was a teen again, signing his name to the Academy enrollment paperwork, determined to get out there between the stars and see the galaxy himself. He was a young officer again, screaming and pleading with the Admiralty to at least consider a modern First Contact scenario. He was sitting in his command chair now, hurtling towards honest-to-god aliens, all of his dreams made manifest in an instant. He was overwhelmed. He was terrified.
And he had never imagined that he could feel such elation.
It was the young warrant officer at the coms that snapped Ben out of his reverie. “Sir, the contacts are hailing us on all standard channels, requesting a video feed.” She sounded very, very nervous.
Ben immediately stood up, straightening his uniform as best he could. “If they’re anything less than genocidal monsters, I’m going to offer them aid and repairs. As long as they’re peaceful, there’s no reason not to extend them the full hospitality of humanity.”
“Ben,” Alexi asked, clearly choosing his words carefully, “Are you sure that’s the… Wisest course of action? How will the Admiralty respond to Goddamned alien ships docking at Hephaestus?”
“Alexi, in the 250 years the Commonwealth has existed, the First Contact protocols haven’t been updated since the charter was signed. No one has cared. This has been nothing but a fantasy for most people. I am NOT letting this opportunity get away. Every child that has ever looked up at the stars and wondered finally got an answer, and I will not waste this moment. We’re making friends, the Admiralty and the government be damned.”
“You do realize you’re potentially deciding the fate of our entire species on a whim, right?”
“Is there someone else you’d prefer to have making this call?”
Alexi, apparently deciding that there was not, stood up and straightened his uniform, standing next to his friend as he ordered the connection of the video feed. The channel connected, and the human bridge crew found themselves looking at the bridge of a ship crewed by not one, but three alien races.
The largest alien in the center of the screen opened its mouth to speak. This time, instead of bleats and grunts, a choppy, mechanical voice that didn’t sync up to the alien at all proclaimed from the bridge speakers in broken, stuttering English: “I. Am Admiral. Halon. Va. Of the Federation of. Sentient Races. Greetings and. Welcome. To the. Galaxy.”
Ben couldn’t suppress his smile.
“On behalf of the United Solar Commonwealth, and all of Humanity, greetings, and welcome to Sol. Your ships look like they’ve had a bad time on your way here. If there’s any way we could aid with your repairs, we’d be happy to help.”

Slave 782 slammed his right appendage onto the control console hard enough to rupture his outer membrane and smear ichor over the panel. It had been four days since the battle in the nebula, and with the latest round of reports, he finally had to admit that the rest of the Federation fleet had escaped him.
It was a minor frustration, all things considered, but the escape prevented this from being a total victory. Still, he had proven his worth to his owners in this battle, and his experiments with the Zelnassi had paid dividends beyond his wildest imagination. He had earned a command today, and with every success in that command, his ability to bargain for his people's freedom only increased. For what he would be asking, it might take the total defeat of the Federation to earn that kind of leverage. Also frustrating, but not a task that he couldn’t handle. It would be a long war, he was sure, but like his owners, he was patient.
He would earn his freedom, even if it meant reducing the entire Federation to glass.

Author Wiki
Series Wiki
submitted by STATICinMOTION to HFY [link] [comments]

Help Troubleshooting my Factorio Install

Factorio crashes on startup. I don't get to the start menu even. Things we've tried:
I have attached the log file below. I don't know what it means but perhaps one of you engineers can help me parse it.

Here's our log file return:
0.000 2020-10-27 11:20:33; Factorio 1.0.0 (build 54889, mac, steam)
0.000 Operating system: macOS 10.13.6
0.000 Program arguments: "/Volumes/Home/Library/Application Support/Steam/steamapps/common/Factorio/"
0.000 Read data path: /Volumes/Home/Library/Application Support/Steam/steamapps/common/Factorio/
0.000 Write data path: /Volumes/Home/Library/Application Support/factorio [846099/953541MB]
0.000 Binaries path: /Volumes/Home/Library/Application Support/Steam/steamapps/common/Factorio/
0.023 System info: [CPU: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz, 6 cores, RAM: 16384 MB]
0.023 Display options: [FullScreen: 0] [VSync: 1] [UIScale: automatic (100.0%)] [Native DPI: 1] [Screen: 255] [Special: lmW] [Lang: en]
0.066 Available displays: 1
0.066 [0]: SA300/SA350 - {[0,0], 1920x1080, SDL_PIXELFORMAT_ARGB8888, 60Hz, 0xb41d501(0x02)}
0.109 Initialised OpenGL:[0] NVIDIA GeForce 210 OpenGL Engine; driver: 3.3 NVIDIA-10.33.0 387.
0.109 [Extensions] s3tc:yes; KHR_debug:NO; ARB_clear_texture:NO, ARB_copy_image:NO
0.109 [Version] 3.3
0.109 Graphics settings preset: medium-with-low-vram
0.109 Dedicated video memory size 1024 MB (detected from GeForce 210; VendorID: 0x1022600)
0.208 Graphics options: [Graphics quality: normal] [Video memory usage: high] [Light scale: 25%] [DXT: low-quality] [Color: 32bit]
0.208 [Max threads (load/render): 32/6] [Max texture size: 4096] [Tex.Stream.: 1] [Rotation quality: low] [Other: sTDCwt] [B:0,C:0,S:100]
0.239 [Audio] Backend:default; Depth:16, Channel:2, Frequency:44100; MixerQuality:linear
0.410 Loading mod core 0.0.0 (data.lua)
0.527 Loading mod base 1.0.0 (data.lua)
0.802 Loading mod base 1.0.0 (data-updates.lua)
0.953 Checksum for core: 2630831588
0.953 Checksum of base: 3509992273
1.153 Prototype list checksum: 3301461508
1.229 Loading sounds...
1.263 Info PlayerData.cpp:70: Local player-data.json unavailable
1.263 Info PlayerData.cpp:73: Cloud player-data.json available, timestamp 1599183581
1.400 Initial atlas bitmap size is 4096
1.405 Created atlas bitmap 4096x4096 [none]
1.409 Created atlas bitmap 4096x4096 [none]
1.411 Created atlas bitmap 4096x4084 [none]
1.413 Created atlas bitmap 4096x4092 [none]
1.416 Created atlas bitmap 4096x4096 [none]
1.418 Created atlas bitmap 4096x4092 [none]
1.418 Created atlas bitmap 4096x504 [none]
1.418 Created atlas bitmap 4096x2120 [decal]
1.421 Created atlas bitmap 4096x4064 [low-object]
1.421 Created atlas bitmap 4096x1856 [low-object]
1.421 Created atlas bitmap 4096x2272 [mipmap, linear-minification, linear-magnification, linear-mip-level]
1.423 Created atlas bitmap 4096x4096 [terrain, mipmap, linear-minification, linear-mip-level]
1.423 Created atlas bitmap 4096x3104 [terrain, mipmap, linear-minification, linear-mip-level]
1.423 Created atlas bitmap 4096x1632 [terrain-effect-map, mipmap, linear-minification, linear-mip-level]
1.423 Created atlas bitmap 4096x1664 [smoke, mipmap, linear-minification, linear-magnification]
1.423 Created atlas bitmap 4096x928 [mipmap]
1.423 Created atlas bitmap 4096x2336 [icon, not-compressed, mipmap, linear-minification, linear-magnification, linear-mip-level]
1.423 Created atlas bitmap 2048x224 [icon-background, not-compressed, mipmap, linear-minification, linear-magnification, linear-mip-level, ]
1.423 Created atlas bitmap 4096x828 [alpha-mask]
1.428 Created atlas bitmap 4096x4088 [shadow, linear-magnification, alpha-mask]
1.431 Created atlas bitmap 4096x4096 [shadow, linear-magnification, alpha-mask]
1.433 Created atlas bitmap 4096x4080 [shadow, linear-magnification, alpha-mask]
1.434 Created atlas bitmap 4096x3272 [shadow, linear-magnification, alpha-mask]
1.434 Created atlas bitmap 4096x1312 [shadow, mipmap, linear-magnification, alpha-mask]
1.450 Created virtual atlas pages 4096x4096x2
2.304 Error CrashHandler.cpp:621: Received SIGSEGV
Factorio crashed. Generating symbolized stacktrace, please wait ...
#1 0x00000001039bc8b2 in Logger::logStacktrace(StackTraceInfo*) + 0x12
#2 0x0000000102e90899 in CrashHandler::writeStackTrace(CrashHandler::CrashReason) + 0xb9
#3 0x00000001039a00e4 in CrashHandler::commonSignalHandler(int) + 0x74
#4 0x000000010399f5e9 in CrashHandler::SignalHandler(int) + 0x9
#5 0x00007fff6593ef5a in _sigtramp + 0x1a
#6 0x000000010e0a4765 in + 0x0
#7 0x000000010e0a384a in + 0x0
#8 0x000000010e0a3187 in + 0x0
#9 0x000000010e494161 in gldBlitFramebufferData + 0x2c55c6
#10 0x000000010e492d26 in gldBlitFramebufferData + 0x2c418b
#11 0x000000010e492d26 in gldBlitFramebufferData + 0x2c418b
#12 0x000000010e492d26 in gldBlitFramebufferData + 0x2c418b
#13 0x000000010e492d26 in gldBlitFramebufferData + 0x2c418b
#14 0x000000010e492d26 in gldBlitFramebufferData + 0x2c418b
#15 0x000000010e492377 in gldBlitFramebufferData + 0x2c37dc
#16 0x000000010e0a44cc in + 0x0
#17 0x000000010e123ec8 in gldReadTextureData + 0x311a4
#18 0x000000010df0acf1 in + 0x0
#19 0x000000010df0bd5e in + 0x0
#20 0x000000010df11957 in + 0x0
#21 0x000000010df11ff0 in + 0x0
#22 0x000000010e1de080 in gldBlitFramebufferData + 0xf4e5
#23 0x000000010e1de7f3 in gldBlitFramebufferData + 0xfc58
#24 0x000000010e1dee0e in gldBlitFramebufferData + 0x10273
#25 0x000000010e0f21b5 in gldUnbindPipelineProgram + 0x97a
#26 0x000000010e1ddc83 in gldBlitFramebufferData + 0xf0e8
#27 0x000000010e1cc241 in gldUpdateDispatch + 0x354
#28 0x00007fff47e09b33 in gleDoDrawDispatchCoreGL3 + 0x259
#29 0x00007fff47dbad07 in gleDrawArraysOrElements_Entries_Body + 0x77
#30 0x00007fff47db41d0 in glDrawElements_GL3Exec + 0xd2
#31 0x0000000102eabe4f in GraphicsInterfaceOpenGL::drawIndexed(DrawBindings const&, VideoBuffer*, VideoBuffer*, unsigned int, unsigned int) + 0xbf
#32 0x0000000102e1e8f2 in TextureProcessor::testGpuAcceleratedCompression(GraphicsInterface&) + 0xbd2
#33 0x0000000102e10f8a in AtlasSystem::createTextureProcessor(unsigned int) + 0x9a
#34 0x0000000102e0e9b5 in AtlasSystem::loadSprites(bool) + 0x165
#35 0x0000000102e1fb2c in AtlasSystem::tryLoadSpritesWithFallbackToMinimalMode(bool) + 0x2c
#36 0x0000000102df02ad in AtlasSystem::build() + 0x20d
#37 0x000000010290abef in GlobalContext::init(bool, bool, bool, std::__1::optional) + 0x264f
#38 0x00000001029056f9 in MainLoop::run(Filesystem::Path const&, Filesystem::Path const&, bool, bool, std::__1::function, Filesystem::Path const&, MainLoop::HeavyMode) + 0xe9
#39 0x000000010278ec2b in main + 0x1282b
Stack trace logging done
2.322 Error Util.cpp:97: Unexpected error occurred. If you're running the latest version of the game you can help us solve the problem by posting the contents of the log file on the Factorio forums.
Please also include the save file(s), any mods you may be using, and any steps you know of to reproduce the crash.
submitted by derekvonzarovich2 to factorio [link] [comments]

./ 2.12: API, GUI and video games

./ 2.12: API, GUI and video games

./ is a free/libre software that builds native packages for several Linux distributions from DRM-free installers for a collection of commercial games. These packages can then be installed using the standard distribution-provided tools (APT, pacman, emerge, etc.).
A more complete description of ./ has already been posted in linux_gaming a couple months ago: ./, an easy way to install commercial games on GNU/Linux
It's already been one year since version 2.11 was released, in January 2019. We will only briefly review the changelog of version 2.12 and focus on the different points of ./ that kept us busy during all this time, and of which coding was only a small part.

What’s new with 2.12?

Though not the focus of this article, it would be a pity not to present all the added features of this brand new version. ;)
Compared to the usual updates, 2.12 is a major one, especially since for two years, we slowed down the addition of new features. Some patches took dust since the end of 2018 before finally be integrated in this update!
The list of changes for this 2.12 release can be found on our forge. Here is a full copy for convenience:

Development migration


As many free/libre projects, ./ development started on some random sector of a creaking hard drive, and unsurprisingly, a whole part of its history (everything predating version 1.13.15 released on Mars 30th, 2016) disappeared into the limbs because some unwise operation destroyed the only copy of the repository… Lesson learned, what's not shared don't stay long, and so was born the first public Git repository of the project. The easing of collaborative work was only accidentally achieved by this quest for eternity, but wasn't the original motivation for making the repository publicly available.
Following this decision, ./ source code has been hosted successively by many shared forge platforms:

Dedicated forge

As development progressed, ./ began to increase its need for resources, dividing its code into several repositories to improve the workflow of the different aspects of the projects, adding continuous integration tests and their constraints, etc. A furious desire to understand the nooks and crannies behind a forge platform was the last deciding factor towards hosting a dedicated forge.
So it happened, we deployed a forge platform on a dedicated server, hugely benefiting from the tremendous work achieved by the GitLab's package Debian Maintainers team. In return, we tried to contribute our findings in improving this software packaging.
That was not expected, but this migration happened just a little time before the announcement “Déframasoftisons Internet !” (French article) about the planned end of Framagit.
This dedicated instance used to be hosted on a VPS rented from Digital Ocean until the second half of July 2020, and since then has been moved to another VPS, rented from Hetzner. The specifications are similar, as well as the service, but thanks to this migration our hosting costs have been cut in half. Keeping in mind that this is paid by a single person, so any little donation helps a lot on this front. ;)
To the surprise of our system administrator, this last migration took only a couple hours with no service interruption reported by our users.

Forge access

This new forge can be found at Registrations are open to the public, but we ask you to not abuse this, the main restriction being that we do not wish to host projects unrelated to ./ Of course exceptions are made for our active contributors, who are allowed to host some personal projects there.
So, if you wish to use this forge to host your own work, you first need to make some significant contributions to ./


The collection of supported games growing endlessly, we have started the development of a public API allowing access to lots of information related to ./
This API, which is not yet stabilized, is simply an interface to a versioned database containing all the ./ scripts, handled archives, games installable through the project. Relations are, of course, handled between those items, enabling its use for requests like : « What packages are required on my system to install Cæsar Ⅲ ? » or « What are the free (as in beer) games handled via DOSBox ? ».
Originally developed as support for the new, in-development, Web site (we'll talk about it later on), this API should facilitate the development of tools around ./ For example, it'll be useful for whomever would like to build a complete video game handling software (downloading, installation, starting, etc.) using ./ as one of its building bricks.
For those curious about the technical side, it's an API based on Lumeneffectuant that makes requests on a MariaDB database, all self-hosted on a Debian Sid. Not only is the code of the API versioned on our forge, but also the structure and content of the databases, which will allow those who desired it to install a local version easily.

New website

Based on the aforementioned API, a new website is under development and will replace our current website based on DokuWiki.
Indeed, if the lack of database and the plain text files structure of DokuWiki seemed at first attractive, as ./ supported only a handful of games (link in French), this feature became more inconvenient as the library of ./ supported games grew.
We shall make an in-depth presentation of this website for the 2.13 release of ./, but a public demo of the development version from our forge is already available.
If you feel like providing an helping hand on this task, some priority tasks have been identified to allow opening a new Web site able to replace the current one. And for those interested in technical details, this web Site was developed in PHP using the framework Laravel. The current in-development version is hosted for now on the same Debian Sid than the API.


A regular comment that is done about the project is that, if the purpose is to make installing games accessible to everyone without technical skills, having to run scripts in the terminal remains somewhat intimidating. Our answer until now has been that while the project itself doesn't aim to providing a graphical interface (KISS principle "Keep it simple, stupid"), still and always), but that it would be relatively easy to, later on, develop a graphical front-end to it.
Well, it happens that is now reality. Around the time of our latest publication, one of our contributors, using the API we just talked about, developed a small prototype that is usable enough to warrant a little shout out. :-)
In practice, it is some small Python 3 code (an HCI completely in POSIX shell is for a later date :-°), using GTK 3 (and still a VTE terminal to display the commands issued, but the user shouldn't have to input anything in it, except perhaps the root password to install some packages). This allowed to verify that, as we used to say, it would be relatively easy, since a script of less than 500 lines of code (written quickly over a week-end) was enough to do the job !
Of course, this graphical interface project stays independent from the main project, and is maintained in a specific repository. It seems interesting to us to promote it in order to ease the use of ./, but this doesn't prevent any other similar projects to be born, for example using a different language or graphical toolkit (we, globally, don't have any particular affinity towards Python or GTK).
The use of this HCI needs three steps : first, a list of available games is displayed, coming directly from our API. You just need to select in the list (optionally using the search bar) the game you want to install. Then it switches to a second display, which list the required files. If several alternatives are available, the user can select the one he wants to use. All those files must be in the same directory, the address bar on the top enabling to select which one to use (click on the open button on the top opens a filesystem navigation window). Once all those files available (if they can be downloaded, the software will do it automatically), you can move ahead to the third step, which is just watching ./ do its job :-) Once done, a simple click on the button on the bottom will run the game (even if, from this step, the game is fully integrated on your system as usual, you no longer need this tool to run it).
To download potentially missing files, the HCI will use, depending on what's available on the system, either wget, curl or aria2c (this last one also handling torrents), of which the output will be displayed in the terminal of the third phase, just before running the scripts. For privilege escalation to install packages, sudo will be used preferentially if available (with the option to use a third-party application for password input, if the corresponding environment variable is set, which is more user-friendly), else su will be used.
Of course, any suggestion for an improvement will be received with pleasure.

New games

Of course, such an announcement would not be complete without a list of the games that got added to our collection since the 2.11 release… So here you go:
If your favourite game is not supported by ./ yet, you should ask for it in the dedicated tracker on our forge. The only requirement to be a valid request is that there exists a version of the game that is not burdened by DRM.

What’s next?

Our team being inexhaustible, work on the future 2.13 version has already begun…
A few major objectives of this next version are :
If your desired features aren't on this list, don't hesitate to signal it us, in the comments of this news release. ;)


submitted by vv224 to linux_gaming [link] [comments]

Forex Signals Reddit: top providers review (part 1)

Forex Signals Reddit: top providers review (part 1)

Forex Signals - TOP Best Services. Checked!

To invest in the financial markets, we must acquire good tools that help us carry out our operations in the best possible way. In this sense, we always talk about the importance of brokers, however, signal systems must also be taken into account.
The platforms that offer signals to invest in forex provide us with alerts that will help us in a significant way to be able to carry out successful operations.
For this reason, we are going to tell you about the importance of these alerts in relation to the trading we carry out, because, without a doubt, this type of system will provide us with very good information to invest at the right time and in the best assets in the different markets. financial
Within this context, we will focus on Forex signals, since it is the most important market in the world, since in it, multiple transactions are carried out on a daily basis, hence the importance of having an alert system that offers us all the necessary data to invest in currencies.
Also, as we all already know, cryptocurrencies have become a very popular alternative to investing in traditional currencies. Therefore, some trading services/tools have emerged that help us to carry out successful operations in this particular market.
In the following points, we will detail everything you need to know to start operating in the financial markets using trading signals: what are signals, how do they work, because they are a very powerful help, etc. Let's go there!

What are Forex Trading Signals?
Before explaining the importance of Forex signals, let's start by making a small note so that we know what exactly these alerts are.
Thus, we will know that the signals on the currency market are received by traders to know all the information that concerns Forex, both for assets and for the market itself.
These alerts allow us to know the movements that occur in the Forex market and the changes that occur in the different currency pairs. But the great advantage that this type of system gives us is that they provide us with the necessary information, to know when is the right time to carry out our investments.
In other words, through these signals, we will know the opportunities that are presented in the market and we will be able to carry out operations that can become quite profitable.
Profitability is precisely another of the fundamental aspects that must be taken into account when we talk about Forex signals since the vast majority of these alerts offer fairly reliable data on assets. Similarly, these signals can also provide us with recommendations or advice to make our operations more successful.

»Purpose: predict movements to carry out Profitable Operations

In short, Forex signal systems aim to predict the behavior that the different assets that are in the market will present and this is achieved thanks to new technologies, the creation of specialized software, and of course, the work of financial experts.
In addition, it must also be borne in mind that the reliability of these alerts largely lies in the fact that they are prepared by financial professionals. So they turn out to be a perfect tool so that our investments can bring us a greater number of benefits.

The best signal services today

We are going to tell you about the 3 main alert system services that we currently have on the market. There are many more, but I can assure these are not scams and are reliable. Of course, not 100% of trades will be a winner, so please make sure you apply proper money management and risk management system.

1. 1000pipbuilder (top choice)

Fast track your success and follow the high-performance Forex signals from 1000pip Builder. These Forex signals are rated 5 stars on, so you can follow every signal with confidence. All signals are sent by a professional trader with over 10 years investment experience. This is a unique opportunity to see with your own eyes how a professional Forex trader trades the markets.
The 1000pip Builder Membership is ordinarily a signal service for Forex trading. You will get all the facts you need to successfully comply with the trading signals, set your stop loss and take earnings as well as additional techniques and techniques!
You will get easy to use trading indicators for Forex Trades, including your entry, stop loss and take profit. Overall, the earnings target per months is 350 Pips, depending on your funding this can be a high profit per month! (In fact, there is by no means a guarantee, but the past months had been all between 600 – 1000 Pips).
>>>Know more about 1000pipbuilder
Your 1000pip builder membership gives you all in hand you want to start trading Forex with success. Read the directions and wait for the first signals. You can trade them inside your demo account first, so you can take a look at the performance before you make investments real money!
  • Free Trial
  • Forex signals sent by email and SMS
  • Entry price, take profit and stop loss provided
  • Suitable for all time zones (signals sent over 24 hours)
  • MyFXBook verified performance
  • 10 years of investment experience
  • Target 300-400 pips per month
VISIT 1000ipbuilder here

2. DDMarkets

Digital Derivatives Markets (DDMarkets) have been providing trade alert offerings since May 2014 - fully documenting their change ideas in an open and transparent manner.
September 2020 performance report for DD Markets.
Their manner is simple: carry out extensive research, share their evaluation and then deliver a trading sign when triggered. Once issued, daily updates on the trade are despatched to members via email.
It's essential to note that DDMarkets do not tolerate floating in an open drawdown in an effort to earnings at any cost - a common method used by less professional providers to 'fudge' performance statistics.
Verified Statistics: Not independently verified.
Price: plans from $74.40 per month.
Year Founded: 2014
Suitable for Beginners: Yes, (includes handy to follow trade analysis)

3. JKonFX

If you are looking or a forex signal service with a reliable (and profitable) music record you can't go previous Joel Kruger and the team at JKonFX.
Trading performance file for JKonFX.
Joel has delivered a reputable +59.18% journal performance for 2016, imparting real-time technical and fundamental insights, in an extremely obvious manner, to their 30,000+ subscriber base. Considered a low-frequency trader, alerts are only a small phase of the overall JKonFX subscription. If you're searching for hundreds of signals, you may want to consider other options.
Verified Statistics: Not independently verified.
Price: plans from $30 per month.
Year Founded: 2014
Suitable for Beginners: Yes, (includes convenient to follow videos updates).

The importance of signals to invest in Forex

Once we have known what Forex signals are, we must comment on the importance of these alerts in relation to our operations.
As we have already told you in the previous paragraph, having a system of signals to be able to invest is quite advantageous, since, through these alerts, we will obtain quality information so that our operations end up being a true success.

»Use of signals for beginners and experts

In this sense, we have to say that one of the main advantages of Forex signals is that they can be used by both beginners and trading professionals.
As many as others can benefit from using a trading signal system because the more information and resources we have in our hands. The greater probability of success we will have. Let's see how beginners and experts can take advantage of alerts:
  • Beginners: for inexperienced these alerts become even more important since they will thus have an additional tool that will guide them to carry out all operations in the Forex market.
  • Professionals: In the same way, professionals are also recommended to make use of these alerts, so they have adequate information to continue bringing their investments to fruition.
Now that we know that both beginners and experts can use forex signals to invest, let's see what other advantages they have.

»Trading automation

When we dedicate ourselves to working in the financial world, none of us can spend 24 hours in front of the computer waiting to perform the perfect operation, it is impossible.
That is why Forex signals are important, because, in order to carry out our investments, all we will have to do is wait for those signals to arrive, be attentive to all the alerts we receive, and thus, operate at the right time according to the opportunities that have arisen.
It is fantastic to have a tool like this one that makes our work easier in this regard.

»Carry out profitable Forex operations

These signals are also important, because the vast majority of them are usually quite profitable, for this reason, we must get an alert system that provides us with accurate information so that our operations can bring us great benefits.
But in addition, these Forex signals have an added value and that is that they are very easy to understand, therefore, we will have a very useful tool at hand that will not be complicated and will end up being a very beneficial weapon for us.

»Decision support analysis

A system of currency market signals is also very important because it will help us to make our subsequent decisions.
We cannot forget that, to carry out any type of operation in this market, previously, we must meditate well and know the exact moment when we will know that our investments are going to bring us profits .
Therefore, all the information provided by these alerts will be a fantastic basis for future operations that we are going to carry out.

»Trading Signals made by professionals

Finally, we have to recall the idea that these signals are made by the best professionals. Financial experts who know perfectly how to analyze the movements that occur in the market and changes in prices.
Hence the importance of alerts, since they are very reliable and are presented as a necessary tool to operate in Forex and that our operations are as profitable as possible.

What should a signal provider be like?
As you have seen, Forex signal systems are really important for our operations to bring us many benefits. For this reason, at present, there are multiple platforms that offer us these financial services so that investing in currencies is very simple and fast.
Before telling you about the main services that we currently have available in the market, it is recommended that you know what are the main characteristics that a good signal provider should have, so that, at the time of your choice, you are clear that you have selected one of the best systems.

»Must send us information on the main currency pairs

In this sense, one of the first things we have to comment on is that a good signal provider, at a minimum, must send us alerts that offer us information about the 6 main currencies, in this case, we refer to the euro, dollar, The pound, the yen, the Swiss franc, and the Canadian dollar.
Of course, the data you provide us will be related to the pairs that make up all these currencies. Although we can also find systems that offer us information about other minorities, but as we have said, at a minimum, we must know these 6.

»Trading tools to operate better

Likewise, signal providers must also provide us with a large number of tools so that we can learn more about the Forex market.
We refer, for example, to technical analysis above all, which will help us to develop our own strategies to be able to operate in this market.
These analyzes are always prepared by professionals and study, mainly, the assets that we have available to invest.

»Different Forex signals reception channels

They must also make available to us different ways through which they will send us the Forex signals, the usual thing is that we can acquire them through the platform's website, or by a text message and even through our email.
In addition, it is recommended that the signal system we choose sends us a large number of alerts throughout the day, in order to have a wide range of possibilities.

»Free account and customer service

Other aspects that we must take into account to choose a good signal provider is whether we have the option of receiving, for a limited time, alerts for free or the profitability of the signals they emit to us.
Similarly, a final aspect that we must emphasize is that a good signal system must also have excellent customer service, which is available to us 24 hours a day and that we can contact them at through an email, a phone number, or a live chat, for greater immediacy.
Well, having said all this, in our last section we are going to tell you which are the best services currently on the market. That is, the most suitable Forex signal platforms to be able to work with them and carry out good operations. In this case, we will talk about ForexPro Signals, 365 Signals and Binary Signals.

Forex Signals Reddit: conclusion

To be able to invest properly in the Forex market, it is convenient that we get a signal system that provides us with all the necessary information about this market. It must be remembered that Forex is a very volatile market and therefore, many movements tend to occur quickly.
Asset prices can change in a matter of seconds, hence the importance of having a system that helps us analyze the market and thus know, what is the right time for us to start operating.
Therefore, although there are currently many signal systems that can offer us good services, the three that we have mentioned above are the ones that are best valued by users, which is why they are the best signal providers that we can choose to carry out. our investments.
Most of these alerts are quite profitable and in addition, these systems usually emit a large number of signals per day with full guarantees. For all this, SignalsForexPro, Signals365, or SignalsBinary are presented as fundamental tools so that we can obtain a greater number of benefits when we carry out our operations in the currency market.
submitted by kayakero to makemoneyforexreddit [link] [comments]

GE2020: The Roar of the Swing Voter

Hi everyone, this is my first ever post here.
I run a little website called The Thought Experiment where I talk about various issues, some of them Singapore related. And one of my main interests is Singaporean politics. With the GE2020 election results, I thought I should pen down my take on what us as the electorate were trying to say.
If you like what I wrote, I also wrote another article on the state of play for GE2020 during the campaigning period, as well as 2 other articles related to GE2015 back when it was taking place.
If you don't like what I wrote, that's ok! I think the beauty of freedom of expression is that everyone is entitled to their opinion. I'm always happy to get feedback, because I do think that more public discourse about our local politics helps us to be more politically aware as a whole.
Just thought I'll share my article here to see what you guys make of it :D
Article Starts Here:
During the campaigning period, both sides sought to portray an extreme scenario of what would happen if voters did not vote for them. The Peoples’ Action Party (PAP) warned that Singaporeans that their political opponents “might eventually replace the government after July 10”. Meanwhile, the Worker’s Party (WP) stated that “there was a real risk of a wipeout of elected opposition MPs at the July 10 polls”.
Today is July 11th. As we all know, neither of these scenarios came to pass. The PAP comfortably retained its super-majority in Parliament, winning 83 out of 93 elected MP seats. But just as in GE2011, another Group Representation Constituency (GRC) has fallen to the WP. In addition, the PAP saw its vote share drop drastically, down almost 9% to 61.2% from 69.9% in GE2015.
Singapore’s electorate is unique in that a significant proportion is comprised of swing voters: Voters who don’t hold any blind allegiance to any political party, but vote based on a variety of factors both micro and macro. The above extreme scenarios were clearly targeted at these swing voters. Well, the swing voters have made their choice, their roar sending 4 more elected opposition MPs into Parliament. This article aims to unpack that roar and what it means for the state of Singaporean politics going forward.
1. The PAP is still the preferred party to form Singapore’s Government
Yes, this may come across as blindingly obvious, but it still needs to be said. The swing voter is by its very definition, liable to changes of opinion. And a large factor that determines how a swing voter votes is their perception of how their fellow swing voters are voting. If swing voters perceive that most swing voters are leaning towards voting for the opposition, they might feel compelled to vote for the incumbent. And if the reverse is true, swing voters might feel the need to shore up opposition support.
Why is this so? This is because the swing voter is trying to push the vote result into a sweet spot – one that lies between the two extreme scenarios espoused by either side. They don’t want the PAP to sweep all 93 seats in a ‘white tsunami’. Neither do they want the opposition to claim so much territory that the PAP is too weak to form the Government on its own. But because each swing voter only has a binary choice: either they vote for one side or the other (I’m ignoring the third option where they simply spoil their vote), they can’t very well say “I want to vote 0.6 for the PAP and 0.4 for the Opposition with my vote”. And so we can expect the swing voter bloc to continue being a source of uncertainty for both sides in future elections, as long as swing voters are still convinced that the PAP should be the Government.
2. Voters no longer believe that the PAP needs a ‘strong mandate’ to govern. They also don’t buy into the NCMP scheme.
Throughout the campaign period, the PAP repeatedly exhorted voters to vote for them alone. Granted, they couldn’t very well give any ground to the opposition without a fight. And therefore there was an attempt to equate voting for the PAP as voting for Singapore’s best interests. However, the main message that voters got was this: PAP will only be able to steer Singapore out of the Covid-19 pandemic if it has a strong mandate from the people.
What is a strong mandate, you may ask? While no PAP candidate publicly confirmed it, their incessant harping on the Non-Constituency Member of Parliament (NCMP) scheme as the PAP’s win-win solution for having the PAP in power and a largely de-fanged opposition presence in parliament shows that the PAP truly wanted a parliament where it held every single seat.
Clearly, the electorate has different ideas, handing Sengkang GRC to the WP and slashing the PAP’s margins in previous strongholds such as West Coast, Choa Chu Kang and Tanjong Pagar by double digit percentages. There is no doubt from the results that swing voters are convinced that a PAP supermajority is not good for Singapore. They are no longer convinced that to vote for the opposition is a vote against Singapore. They have realized, as members of a maturing democracy surely must, that one can vote for the opposition, yet still be pro-Singapore.
3. Social Media and the Internet are rewriting the electorate’s perception.
In the past, there was no way to have an easily accessible record of historical events. With the only information source available being biased mainstream media, Singaporeans could only rely on that to fill in the gaps in their memories. Therefore, Operation Coldstore became a myth of the past, and Chee Soon Juan became a crackpot in the eyes of the people, someone who should never be allowed into Parliament.
Fast forward to today. Chee won 45.2% of the votes in Bukit Batok’s Single Member Constituency (SMC). His party-mate, Dr. Paul Tambyah did even better, winning 46.26% of the votes in Bukit Panjang SMC. For someone previously seen as unfit for public office, this is an extremely good result.
Chee has been running for elections in Singapore for a long time, and only now is there a significant change in the way he is perceived (and supported) by the electorate. Why? Because of social media and the internet, two things which the PAP does not have absolute control over. With the ability to conduct interviews with social media personalities as well as upload party videos on Youtube, he has been able to display a side of himself to people that the PAP did not want them to see: someone who is merely human just like them, but who is standing up for what he believes in.
4. Reserved Election Shenanigans and Tan Cheng Block: The electorate has not forgotten.
Tan Cheng Bock almost became our President in 2011. There are many who say that if Tan Kin Lian and Tan Jee Say had not run, Tony Tan would not have been elected. In March 2016, Tan Cheng Bock publicly declared his interest to run for the next Presidential Election that would be held in 2017. The close result of 2011 and Tan Cheng Bock’s imminent candidacy made the upcoming Presidential Election one that was eagerly anticipated.
That is, until the PAP shut down his bid for the presidency just a few months later in September 2016, using its supermajority in Parliament to pass a “reserved election” in which only members of a particular race could take part. Under the new rules that they had drawn up for themselves, it was decreed that only Malays could take part. And not just any Malay. The candidate had to either be a senior executive managing a firm that had S$500 million in shareholders’ equity, or be the Speaker of Parliament or a similarly high post in the public sector (the exact criteria are a bit more in-depth than this, but this is the gist of it. You can find the full criteria here). And who was the Speaker of Parliament at the time? Mdm Halimah, who was conveniently of the right race (Although there was some hooha about her actually being Indian). With the extremely strict private sector criteria and the PAP being able to effectively control who the public sector candidate was, it came as no surprise that Mdm Halimah was declared the only eligible candidate on Nomination Day. A day later, she was Singapore’s President. And all without a single vote cast by any Singaporean.
Of course, the PAP denied that this was a move specifically aimed at blocking Tan Cheng Bock’s bid for the presidency. Chan Chun Sing, Singapore’s current Minister of Trade and Industry, stated in 2017 that the Government was prepared to pay the political price over making these changes to the Constitution.
We can clearly see from the GE2020 results that a price was indeed paid. A loss of almost 9% of vote share is very significant, although a combination of the first-past-the-post rule and the GRC system ensured that the PAP still won 89.2% of the seats in Parliament despite only garnering 61.2% of the votes. On the whole, it’s naught but a scratch to the PAP’s overwhelming dominance in Parliament. The PAP still retains its supermajority and can make changes to the Constitution anytime that it likes. But the swing voters have sent a clear signal that they have not been persuaded by the PAP’s rationale.
5. Swing Voters do not want Racial Politics.
In 2019, Heng Swee Keat, Singapore’s Deputy Prime Minister and the man who is next in line to be Prime Minister (PM) commented that Singapore was not ready to have a non-Chinese PM. He further added that race is an issue that always arises at election-time in Singapore.
Let us now consider the GE2015 results. Tharman Shanmugaratnam, Singapore’s Senior Minister and someone whom many have expressed keenness to be Singapore’s next PM, obtained 79.28% of the vote share in Jurong GRC. This was above even the current Prime Minister Lee Hsien Loong, who scored 78.63% in Ang Mo Kio GRC. Tharman’s score was the highest in the entire election.
And now let us consider the GE2020 results. Tharman scored 74.62% in Jurong, again the highest scorer of the entire election, while Hsien Loong scored 71.91%. So Tharman beat the current PM again, and by an even bigger margin than the last time. Furthermore, Swee Keat, who made the infamous comments above, scored just 53.41% in East Coast.
Yes, I know I’m ignoring a lot of other factors that influenced these results. But don’t these results show conclusively that Heng’s comments were wrong? We have an Indian leading both the current and future PM in both elections, but yet PAP still feels the need to say that Singapore “hasn’t arrived” at a stage where we can vote without race in mind. In fact, this was the same rationale that supposedly led to the reserved presidency as mentioned in my earlier point.
The swing voters have spoken, and it is exceedingly clear to me that the electorate does not care what our highest office-holders are in terms of race, whether it be the PM or the President. Our Singapore pledge firmly states “regardless of race”, and I think the results have shown that we as a people have taken it to heart. But has the PAP?
6. Voters will not be so easily manipulated.
On one hand, Singaporeans were exhorted to stay home during the Covid-19 pandemic. Contact tracing became mandatory, and groups of more than 5 are prohibited.
But on the other hand, we are also told that it’s absolutely necessary to hold an election during this same period, for Singaporeans to wait in long lines and in close proximity to each other as we congregate to cast our vote, all because the PAP needs a strong mandate.
On one hand, Heng Swee Keat lambasted the Worker’s Party, claiming that it was “playing games with voters” over their refusal to confirm if they would accept NCMP seats.
But on the other hand, Heng Swee Keat was moved to the East Coast GRC at the eleventh hour in a surprise move to secure the constituency. (As mentioned above, he was aptly rewarded for this with a razor-thin margin of just 53.41% of the votes.)
On one hand, Masagos Zulkifli, PAP Vice-Chairman stated that “candidates should not be defined by a single moment in time or in their career, but judged instead by their growth throughout their life”. He said this in defense of Ivan Lim, who appears to be the very first candidate in Singaporean politics to have been pushed into retracting his candidacy by the power of non-mainstream media.
But on the other hand, the PAP called on the WP to make clear its stand on Raeesah Khan, a WP candidate who ran (and won) in Sengkang GRC for this election, stating that the Police investigation into Raeesah’s comments made on social media was “a serious matter which goes to the fundamental principles on which our country has been built”.
On one hand, Chan Chun Sing stated in 2015, referring to SingFirst’s policies about giving allowances to the young and the elderly, “Some of them promised you $300 per month. I say, please don’t insult my residents. You think…. they are here to be bribed?”
On the other hand, the PAP Government has just given out several handouts under its many budgets to help Singaporeans cope with the Covid-19 situation. [To be clear, I totally approve of these handouts. What I don’t approve is that the PAP felt the need to lambast similar policies as bribery in the past. Comparing a policy with a crime is a political low blow in my book.]
I could go on, but I think I’ve made my point. And so did the electorate in this election, putting their vote where it counted to show their disdain for the heavy-handedness and double standards that the PAP has displayed for this election.
I don’t say the above to put down the PAP. The PAP would have you believe that to not support them is equivalent to not wanting what’s best for Singapore. This is a false dichotomy that must be stamped out, and I am glad to see our swing voters taking a real stand with this election.
No, I say the above as a harsh but ultimately supportive letter to the PAP. As everyone can see from the results, we all still firmly believe that the PAP should be the Government. We still have faith that PAP has the leadership to take us forward and out of the Covid-19 crisis.
But we also want to send the PAP a strong signal with this vote, to bring them down from their ivory towers and down to the ground. Enough with the double standards. Enough with the heavy-handedness. Singaporeans have clearly stated their desire for a more mature democracy, and that means more alternative voices in Parliament. The PAP needs to stop acting as the father who knows it all, and to start acting as the bigger brother who can work hand in hand with his alternative younger brother towards what’s best for the entire family: Singapore.
There is a real chance that the PAP will not listen, though. As Lee Hsien Loong admitted in a rally in 2006, “if there are 10, 20… opposition members in Parliament… I have to spent my time thinking what is the right way to fix them”.
Now, the PAP has POFMA at its disposal. It still has the supermajority in Parliament, making them able to change any law in Singapore, even the Constitution at will. We have already seen them put these tools to use for its own benefit. Let us see if the PAP will continue as it has always done, or will it take this opportunity to change itself for the better. Whatever the case, we will be watching, and we will be waiting to make our roar heard once again five years down the road.
Majulah Singapura!
Article Ends Here.
Here's the link to the actual article:
And here's the link to the other political articles I've written about Singapore:
submitted by sharingan87 to singapore [link] [comments]

Video Encoding in Simple Terms

Video Encoding in Simple Terms
Nowadays, it is difficult to imagine a field of human activity, in which, in one way or another, digital video has not entered. We watch it on TV, mobile devices, and stationary computers; we record it with digital cameras ourselves, or we encounter it on the roads (unpleasant, but true), in stores, hospitals, schools and universities, and in industrial enterprises of various profiles. As a consequence, words and terms that are directly related to the digital representation of video information are becoming more firmly and widely embedded in our lives. From time to time, questions arise in this area. What are the differences between various devices or programs that we use to encode/ decode digital video data, and what do they do? Which of these devices/ programs are better or worse, and in which aspects? What do all these endless MPEG-2, H.264 / AVC, VP9, H.265 / HEVC, etc. mean? Let’s try to understand.

A very brief historical reference

The first generally accepted video compression standard MPEG-2 was finally adopted in 1996, after which a rapid development of digital satellite television began. The next standard was MPEG-4 part 10 (H.264 / AVC), which provides twice the degree of video data compression. It was adopted in 2003, which led to the development of DVB-T/ C systems, Internet TV and the emergence of a variety of video sharing and video communication services. From 2010 to 2013, the Joint Collaborative Team on Video Coding (JCT-VC) was intensively working to create the next video compression standard, which was called High Efficient Video Coding (HEVC) by the developers; it ensured the following twofold increase in the compression ratio of digital video data. This standard was approved in 2013. That same year, the VP9 standard, developed by Google, was adopted, which was supposed to not yield to HEVC in its degree of video data compression.

Basic stages of video encoding

There are a few simple ideas at the core of algorithms for video data compression. If we take some part of an image (in the MPEG-2 and AVC standards this part is called a macroblock), then there is a big possibility that, near this segment in this frame or in neighboring frames, there will be a segment containing a similar image, which differs little in pixel intensity values. Thus, to transmit information about the image in the current segment, it is enough to only transfer its difference from the previously encoded similar segment. The process of finding similar segments among previously encoded images is called Prediction. A set of difference values that determine the difference between the current segment and the found prediction is called the Residual. Here we can distinguish two main types of prediction. In the first one, the Prediction values represent a set of linear combinations of pixels adjacent to the current image segment on the left and on the top. This type of prediction is called Intra Prediction. In the second one, linear combinations of pixels of similar image segments from previously encoded frames are used as prediction (these frames are called Reference). This type of prediction is called Inter Prediction. To restore the image of the current segment, encoded with Inter prediction, when decoding, it is necessary to have information about not only the Residual, but also the frame number, where a similar segment is located, and the coordinates of this segment.
Residual values obtained during prediction obviously contain, on average, less information than the original image and, therefore, require a fewer quantity of bits for image transmission. To further increase the degree of compression of video data in video coding systems, some spectral transformation is used. Typically, this is Fourier cosine transform. Such transformation allows us to select the fundamental harmonics in two-dimensional Residual signal. Such a selection is made at the next stage of coding — quantization. The sequence of quantized spectral coefficients contains a small number of main, large values. The remaining values are very likely to be zero. As a result, the amount of information contained in quantized spectral coefficients is significantly (dozens of times) lower than in the original image.
In the next stage of coding, the obtained set of quantized spectral coefficients, accompanied by the information necessary for performing prediction when decoding, is subjected to entropy coding. The bottom line here is to align the most common values of the encoded stream with the shortest codeword (containing the smallest number of bits). The best compression ratio (close to theoretically achievable) at this stage is provided by arithmetic coding algorithms, which are mainly used in modern video compression systems.
From the above, the main factors affecting the effectiveness of a particular video compression system become apparent. First of all, these are, of course, the factors that determine the effectiveness of the Intra and Inter Predictions. The second set of factors is related to the orthogonal transformation and quantization, which selects the fundamental harmonics in the Residual signal. The third one is determined by the volume and compactness of the representation of additional information accompanying Residual and necessary for making predictions, that is, calculating Prediction, in the decoder. Finally, the fourth set has the factors that determine the effectiveness of the final stage- entropy coding.
Let’s illustrate some possible options (far from all) of the implementation of the coding stages listed above, on the example of H.264 / AVC and HEVC.

AVC Standard

In the AVC standard, the basic structural unit of the image is a macroblock — a square area of 16x16 pixels (Figure 1). When searching for the best possible prediction, the encoder can select one of several options of partitioning each macroblock. With Intra-prediction, there are three options: perform a prediction for the entire block as a whole, break the macroblock into four square blocks of 8x8 size, or into 16 blocks with a size of 4x4 pixels, and perform a prediction for each such block independently. The number of possible options of macroblock partitioning under Inter-prediction is much richer (Figure 1), which provides adaptation of the size and position of the predicted blocks to the position and shape of the object boundaries moving in the video frame.
Fig 1. Macroblocks in AVC and possible partitioning when using Inter-Prediction.
In AVC, pixel values from the column to the left of the predicted block and the row of pixels immediately above it are used for Intra prediction (Figure 2). For blocks of sizes 4x4 and 8x8, 9 methods of prediction are used. In a prediction called DC, all calculated pixels have a single value equal to the arithmetic average of the “neighbor pixels” highlighted in Fig. 2 with a bold line. In other modes, “angular” prediction is performed. In this case, the values of the “neighbor pixels” are placed inside the predicted block in the directions indicated in Fig. 2.
In the event that the predicted pixel gets between “neighbor pixels”, when moving in a given direction, an interpolated value is used for the prediction. For blocks with a size of 16x16 pixels, 4 methods of prediction are used. One of them is the DC-prediction, which was already reviewed. The other two correspond to the “angular” methods, with the directions of prediction 0 and 1. Finally, the fourth — Plane-prediction: the values of the predicted pixels are determined by the equation of the plane. The angular coefficients of the equation are determined by the values of the “neighboring pixels”.
Fig 2. “Neighboring pixels” and angular modes of Intra-Prediction in AVC
Inter- Prediction in AVC can be implemented in one of two ways. Each of these options determines the type of macroblock (P or B). As a prediction of pixel values in P-blocks (Predictive-blocks), the values of pixels from the area located on the previously coded (reference) image, are used. Reference images are not deleted from the RAM buffer, containing decoded frames (decoded picture buffer, or DPB), as long as they are needed for Inter-prediction. A reference list is created in the DPB from the indexes of these images.
The encoder signals to the decoder about the number of the reference image in the list and about the offset of the area used for prediction, with respect to the position of predicted block (this displacement is called motion vector). The offset can be determined with an accuracy of ¼ pixel. In case of prediction with non-integer offset, interpolation is performed. Different blocks in one image can be predicted by areas located on different reference images.
In the second option of Inter Prediction, prediction of the B-block pixel values (bi-predictive block), two reference images are used; their indexes are placed in two lists (list0 and list1) in the DPB. The two indexes of reference images in the lists and two offsets, that determine positions of reference areas, are transmitted to the decoder. The B-block pixel values are calculated as a linear combination of pixel values from the reference areas. For non-integer offsets, interpolation of reference image is used.
As already mentioned, after predicting the values of the encoded block and calculating the Residual signal, the next coding step is spectral transformation. In AVC, there are several options for orthogonal transformations of the Residual signal. When Intra-prediction of a whole macroblock with a size of 16x16 is implemented, the residual signal is divided into 4x4 pixel blocks; each of them is subjected to an integer analog of discrete two-dimensional 4x4 cosine Fourier transform.
The resulting spectral components, corresponding to zero frequency (DC) in each block, are then subjected to additional orthogonal Walsh-Hadamard transform. With Inter-prediction, the Residual signal is divided into blocks of 4x4 pixels or 8x8 pixels. Each block is then subjected to a 4x4 or 8x8 (respectively) two-dimensional discrete cosine Fourier Transform (DCT, from Discrete Cosine Transform).
In the next step, spectral coefficients are subjected to the quantization procedure. This leads to a decrease in bit capacity of digits representing the spectral sample values, and to a significant increase in the number of samples having zero values. These effects provide compression, i.e. reduce the number and bit capacity of digits representing the encoded image. The reverse side of quantization is the distortion of the encoded image. It is clear that the larger the quantization step, the greater is the compression ratio, but also the distortion is greater.
The final stage of encoding in AVC is entropy coding, implemented by the algorithms of Context Adaptive Binary Arithmetic Coding. This stage provides additional compression of video data without distortion in the encoded image.

Ten years later. HEVC standard: what’s new?

The new H.265/HEVC standard is the development of methods and algorithms for compressing video data embedded in H.264/AVC. Let’s briefly review the main differences.
An analog of a macroblock in HEVC is the Coding Unit (CU). Within each block, areas for calculation of Prediction are selected — Prediction Unit (PU). Each CU also specifies the limits within which the areas for calculating the discrete orthogonal transformation from the residual signal are selected. These areas are called the Transform Unit (TU).
The main distinguishing feature of HEVC here is that the split of a video frame into CU is conducted adaptively, so that it is possible to adjust the CU boundaries to the boundaries of objects on the image (Figure 3). Such adaptability allows to achieve an exceptionally high quality of prediction and, as a consequence, a low level of the residual signal.
An undoubted advantage of such an adaptive approach to frame division into blocks is also an extremely compact description of the partition structure. For the entire video sequence, the maximum and minimum possible CU sizes are set (for example, 64x64 is the maximum possible CU, 8x8 is the minimum). The entire frame is covered with the maximum possible CUs, left to right, top-to-bottom.
It is obvious that, for such coverage, transmission of any information is not required. If partition is required within any CU, then this is indicated by a single flag (Split Flag). If this flag is set to 1, then this CU is divided into 4 CUs (with a maximum CU size of 64x64, after partitioning we get 4 CUs of size 32x32 each).
For each of the CUs received, a Split Flag value of 0 or 1 can, in turn, be transmitted. In the latter case, this CU is again divided into 4 CUs of smaller size. The process continues recursively until the Split Flag of all received CUs is equal to 0 or until the minimum possible CU size is reached. Inserted CUs thus form a quad tree (Coding Tree Units, CTU). As already mentioned, within each CU, areas for calculating prediction- Prediction Units (PU) are selected. With Intra Prediction, the CU area can coincide with the PU (2Nx2N mode) or it can be divided into 4 square PUs of twice smaller size (NxN mode, available only for CU of minimum size). With Inter Prediction, there are eight possible options for partitioning each CU into PUs (Figure 3).
Fig.3 Video frame partitioning into CUs is conducted adaptively
The idea of spatial prediction in HEVC remained the same as in AVC. Linear combinations of neighboring pixel values, adjacent to the block on the left and above, are used as predicted sample values in the PU block. However, the set of methods for spatial prediction in HEVC has become significantly richer. In addition to Planar (analogue to Plane in AVC) and DC methods, each PU can be predicted by one of the 33 ways of “angular” prediction. That is, the number of ways, in which the values are calculated by “neighbor”-pixels, is increased by 4 times.
Fig. 4. Possible partitioning of the Coding Unit into Prediction Units with the spatial (Intra) and temporary (Inter) CU prediction modes
We can point out two main differences of Inter- prediction between HEVC and AVC. Firstly, HEVC uses better interpolation filters (with a longer impulse response) when calculating reference images with non-integer offset. The second difference concerns the way the information about the reference area, required by the decoder for performing the prediction, is presented. In HEVC, a “merge mode” is introduced, where different PUs, with the same offsets of reference areas, are combined. For the entire combined area, information about motion (motion vector) is transmitted in the stream once, which allows a significant reduction in the amount of information transmitted.
In HEVC, the size of the discrete two-dimensional transformation, to which the Residual signal is subjected, is determined by the size of the square area called the Transform Unit (TU). Each CU is the root of the TU quad tree. Thus, the TU of the upper level coincides with the CU. The root TU can be divided into 4 parts of half the size, each of which, in turn, is a TU and can be further divided.
The size of discrete transformation is determined by the TU size of the lower level. In HEVC, transforms for blocks of 4 sizes are defined: 4x4, 8x8, 16x16, and 32x32. These transformations are integer analogs of the discrete two-dimensional Fourier cosine transform of corresponding size. For size 4x4 TU with Intra-prediction, there is also a separate discrete transformation, which is an integer analogue of the discrete sine Fourier transform.
The ideas of the procedure of quantizing spectral coefficients of Residual signal, and also entropy coding in AVC and in HEVC, are practically identical.
Let’s note one more point which was not mentioned before. The quality of decoded images and the degree of video data compression are influenced significantly by post-filtering, which decoded images with Inter-prediction undergo before they are placed in the DPB.
In AVC, there is one kind of such filtering — deblocking filter. Application of this filter reduces the block effect resulting from quantization of spectral coefficients after orthogonal transformation of Residual signal.
In HEVC, a similar deblocking filter is used. Besides, an additional non-linear filtering procedure called the Sample Adaptive Offset (SAO) exists. Based on the analysis of pixel value distribution during encoding, a table of corrective offsets, added to the values of a part of CU pixels during decoding, is determined.
In HEVC, the size of the discrete two-dimensional transformation, to which the Residual signal is subjected, is determined by the size of the square area called the Transform Unit (TU). Each CU is the quad-tree of TU’s. Thus, the TU of the upper level coincides with the CU. The root TU can be divided into 4 parts of half the size, each of which, in turn, is a TU and can be further divided.
The size of discrete transformation is determined by the TU size of the lower level. There are four transform block sizes in HEVC: 4x4, 8x8, 16x16, and 32x32. These transforms are discrete two-dimensional Fourier cosine transform of corresponding size. For 4x4 Intra-predicted blocks, could be used another discrete transform — sine Fourier transform.
The quantization of spectral coefficients of residual signal, and entropy coding in AVC and in HEVC, are almost identical.
Let’s note one more point which was not mentioned before. The quality of decoded images, hence the degree of video data compression, is influenced significantly by post-filtering, which applied on decoded Inter-predicted images before they are placed in the DPB.
In AVC, there is one kind of such filtering — deblocking filter. It masking blocking artifacts effect originating from spectral coefficients quantization after orthogonal transformation of residual signal.
In HEVC, a similar deblocking filter is used. Besides, an additional non-linear filtering procedure called the Sample Adaptive Offset (SAO) exists. Sample level correction is based either on local neighborhood or on the intensity level of sample itself. Table of sample level corrections, added to the values of a part of CU pixels during decoding, is determined.

And what is the result?

Figures 4–7 show the results of encoding of several high-resolution (HD) video sequences by two encoders. One of the encoders compresses the video data in the H.265/HEVC standard (marked as HM on all the graphs), and the second one is in the H.264/AVC standard.
Fig. 5. Encoding results of the video sequence Aspen (1920x1080 30 frames per second)
Fig. 6. Encoding results of the video sequence BlueSky (1920x1080 25 frames per second)
Fig. 7. Encoding results of the video sequence PeopleOnStreet (1920x1080 30 frames per second)
Fig. 8. Encoding results of the video sequence Traffic (1920x1080 30 frames per second)
Coding was performed at different quantization values of spectral coefficients, hence with different levels of video image distortion. The results are presented in Bitrate (mbps) — PSNR(dB) coordinates. PSNR values characterize the degree of distortion.
On average, it can be stated that the PSNR range below 36 dB corresponds to a high level of distortion, i.e. low quality video images. The range of 36 to 40 dB corresponds to the average quality. With PSNR values above 40 dB, we can call it a high video quality.
We can roughly estimate the compression ratio provided by the encoding systems. In the medium quality area, the bit rate provided by the HEVC encoder is about 1.5 times less than the bit rate of the AVC encoder. Bitrate of an uncompressed video stream is easily determined as the product of the number of pixels in each video frame (1920 x 1080) by the number of bits required to represent each pixel (8 + 2 + 2 = 12), and the number of frames per second (30).
As a result, we get about 750 Mbps. It can be seen from the graphs that, in the area of average quality, the AVC encoder provides a bit rate of about 10–12 Mbit/s. Thus, the degree of video information compression is about 60–75 times. As already mentioned, the HEVC encoder provides compression ratio 1.5 times higher.

About the author

Oleg Ponomarev, 16 years in video encoding and signal digital processing, expert in Statistical Radiophysics, Radio waves propagation. Assistant Professor, PhD at Tomsk State University, Radiophysics department. Head of Elecard Research Lab.
submitted by VideoCompressionGuru to u/VideoCompressionGuru [link] [comments]

Nothing to see here! pls scroll to next post!

debug.cpp TesterHook.cpp entityidxarray.cpp graph.cpp graphnode.cpp modAI_Memory.cpp aAI_CommsInstructions.cpp aAI_EntityInterface.cpp cAI_Action.cpp cAI_AdminManager.cpp cAI_Agent.cpp cAI_CommsModule.cpp cAI_CommsPrefix.cpp cAI_CommsPrep.cpp cAI_EntityGame.cpp cAI_EntityPlayer.cpp cAI_TransitionData.cpp cAI_Variables.cpp modAI_Audio.cpp modAI_Communication.cpp modAI_Identifier.cpp modAI_Interaction.cpp modAI_Interface.cpp modAI_Senses.cpp modAI_Synchronisation.cpp aAI_PerformTask.cpp cAI_ActionManager.cpp cAI_AnimInterface.cpp cAI_LowLevelInterface.cpp cAI_PerformanceManager.cpp cAI_PerformancePhase.cpp cAI_PerformTaskAction.cpp cAI_PerformTaskAnim.cpp cAI_PerformTaskAudio.cpp cAI_SpeechInterface.cpp aAI_Controller.cpp aAI_ControllerCombat.cpp aAI_Coordinator.cpp aAI_EntityIDArray.cpp aAI_Objective.cpp cAI_ControllerBoundary.cpp cAI_ControllerCamp.cpp cAI_ControllerCombatBlind.cpp cAI_ControllerCombatCover.cpp cAI_ControllerCombatMelee.cpp cAI_ControllerCoverSeek.cpp cAI_ControllerFollow.cpp cAI_ControllerFollowThrough.cpp cAI_ControllerGoto.cpp cAI_ControllerGotoGunfire.cpp cAI_ControllerGuard.cpp cAI_ControllerHide.cpp cAI_ControllerIdle.cpp cAI_ControllerOrbit.cpp cAI_ControllerSearch.cpp cAI_ControllerStop.cpp cAI_CoordinateBoundary.cpp cAI_CoordinateGenericAction.cpp cAI_CoordinateGenericCombat.cpp cAI_CoordinateGuard.cpp cAI_CoordinateIdle.cpp cAI_CoordinateInvestigate.cpp cAI_CoordinateKillEnemy.cpp cAI_CoordinateSearch.cpp cAI_Goal.cpp cAI_GoalDefinition.cpp cAI_IdleActions.cpp cAI_ObjectiveBeBuddy.cpp cAI_ObjectiveHuntEnemy.cpp cAI_ObjectiveIdle.cpp cAI_ObjectiveScriptedAction.cpp cAI_Pack.cpp cAI_Subpack.cpp cAI_HearingSense.cpp cAI_SensesData.cpp cAI_SensingPhase.cpp cAI_VisionSense.cpp meleeTraits.cpp traits.cpp acts.cpp atomicActs.cpp combatUtil.cpp coverActs.cpp gunActBase.cpp meleeActs.cpp pedBodyAnimFSM.cpp pedTorsoAnimFSM.cpp compDriver.cpp weaponController.cpp formation.cpp motion.cpp navigation.cpp navPoint.cpp navTactics.cpp pointTracker.cpp squad.cpp pedSpace.cpp gunPerception.cpp itemPerception.cpp meleeCombatPerception.cpp pedRelationshipPerception.cpp selfPerception.cpp Senses.cpp Vision.cpp AnimBlendAssociation.cpp AnimBlendClumpData.cpp AnimBlendHierarchy.cpp AnimBlendNode.cpp AnimBlendSequence.cpp AnimHierarchy.cpp AnimManager.cpp Compressed.cpp EntityAnim.cpp App.cpp GameTime.cpp AmbientTransitionManager.cpp AudioAnim.cpp audiobloodfx.cpp AudioCollision.cpp audiolog.cpp audioman.cpp AudioMisc.cpp AudioScripted.cpp AudioTextMap.cpp CriAdxStream.cpp CriAixStream.cpp CriInterface.cpp dmaudio.cpp music.cpp SampleManagerChannelFunctions.cpp sampman.cpp ScriptedStream.cpp SpeechManager.cpp VolumeFader.cpp AgeSupport.cpp manager.cpp sfx.cpp system_wii.cpp BufferedSoundWii.cpp CRC.cpp SectorReadables.cpp ColAABox.cpp ColArch.cpp ColData.cpp ColFrustum.cpp ColLine.cpp Collision.cpp ColModelLine.cpp ColModelPoint.cpp ColModelSphere.cpp ColModelTri.cpp ColPrim.cpp ColSphere.cpp ColTri.cpp ContactInfo.cpp ColCylinder.cpp ColModelCylinder.cpp console.cpp skel.cpp wiiplatform.cpp CollectableEffect.cpp CreationManager.cpp Entity.cpp EntityManager.cpp OddEntity.cpp TypeData.cpp Character.cpp ped.cpp pedstates.cpp attackdirectiondata.cpp attackdirectionlookup.cpp pedcombatlookups.cpp pedspinecontrol.cpp pushporter.cpp Climb.cpp Crawl.cpp Crouch.cpp Detector.cpp Dive.cpp Jump.cpp JumpPredictor.cpp autoped.cpp Hunter.cpp Leader.cpp PedHead.cpp delayedHunterSpawn.cpp RsvGoreEffectForExecutions.cpp CameraData.cpp collectable.cpp conveyor.cpp door.cpp EntityLight.cpp Lift.cpp mover.cpp ShotEntity.cpp slidedoor.cpp switch.cpp Trigger.cpp Useable.cpp EntitySound.cpp EnvironmentalExecution.cpp Helicopter.cpp ShadowPlane.cpp FileHandler.cpp FileNames.cpp LoadSave.cpp eyelayerinset.cpp Frontend.cpp FrontendMenu.cpp GameInfo.cpp GameInventory.cpp GameMap.cpp randomuvanimator.cpp tvlayerinset.cpp confirmnewgamepage.cpp inventorystatussettings.cpp layeredbackground.cpp layeredpage.cpp pageeffects.cpp randomoverlay.cpp screenanim.cpp screeneffectsmanager.cpp startpage.cpp texanimator.cpp weaponslotcolours.cpp weaponswapper.cpp weaponswappersettings.cpp backgroundPicAnim.cpp bar.cpp confirmingameQuitPage.cpp ContextButtonDisplay.cpp controllerPage.cpp defaultSettingsPage.cpp ExecutionBox.cpp ExecutionFrame.cpp FlexText.cpp GoalFlexText.cpp hud.cpp hudItem.cpp ingameMainPage.cpp InventorySelector.cpp inventoryStatus.cpp item.cpp LevelNameFlexText.cpp LoadProgressScreen.cpp menu.cpp newGameBrightnessPage.cpp page.cpp radar.cpp saveGamesPage.cpp sceneselectionPage.cpp screen.cpp startLanguageSelectionPage.cpp textures.cpp cGEN_String.cpp cGEN_Timer.cpp gGEN_Globals.cpp gGEN_StandardFunctions.cpp modGEN_Housekeeping.cpp modGEN_Memory.cpp stats.cpp aGEN_Array.cpp cGEN_CharArray.cpp cDBG_DebugFile.cpp modDBG_LowLevelDebug.cpp aGEN_Memory.cpp modGEN_MemoryReporting.cpp rwcore.cpp TextUtils.cpp UniCodeUtils.cpp MhGlobalData.cpp MhLoadSave_Wii.cpp MhPeripherals_Wii.cpp Pad_Wii.cpp WiiLoadSave.cpp CheatHandler.cpp InputManager.cpp WiiAccelerometer.cpp WiiGesture.cpp ActionMapping.cpp KeyCode.cpp Inventory.cpp fx.cpp fxEmitter.cpp fxInfo.cpp fxInterp.cpp fxKeyGen.cpp fxList.cpp fxManager.cpp fxPrim.cpp fxSystem.cpp fxUtils.cpp MHtoFXinterface.cpp Maths.cpp Matrix.cpp Quaternion.cpp Vector.cpp MemManager.cpp PoolAllocationManager.cpp PoolAllocator.cpp CutsceneCamera.cpp EntityFadeController.cpp SimpleLinearAllocator.cpp Cylinder.cpp FrisbeeArm.cpp CriAfsPartition.cpp CriDataStream.cpp DataStreamManager.cpp Portal.cpp StreamedLevelSector.cpp StreamedLevelSectorCore.cpp StreamedLevelSectorManager.cpp StreamedAnimation.cpp StreamedAnimationManager.cpp TexturePool.cpp TexturePoolGroup.cpp TexturePoolManager.cpp AiHelpers.cpp EntityAttrReader.cpp EntityAttrWriter.cpp EntityTextureRenderer.cpp EnvironmentID.cpp PathSearch.cpp RsvDebuggingInfoForUseables.cpp RsvTvpChecker.cpp StringHashing.cpp OverlayMgr.cpp RwRGBA_Globals.cpp ScreenStringsOverlay.cpp TextOverlay.cpp Physics.cpp collisionFrame.cpp camglobals.cpp Crosshair.cpp ExecutionTutorial.cpp handicam.cpp ImpactDamageMap.cpp player.cpp playercam.cpp PLayerLimits.cpp playerstates.cpp WiiExecutionMap.cpp WiiQuickTimeMoment.cpp grenade.cpp responder.cpp Atomic.cpp Camera.cpp CharacterDamageManager.cpp CharacterDamageMap.cpp Clump.cpp ClumpDict.cpp clumplist.cpp collisionmaterial.cpp EntityShadow.cpp EntityShadowManager.cpp Frame.cpp Geometry.cpp Light.cpp lights.cpp material.cpp materiallist.cpp scene.cpp sceneData.cpp skin.cpp spline.cpp texdictionary.cpp texture.cpp tvp.cpp utils.cpp uvanimator.cpp World.cpp WorldSector.cpp CutScene.cpp CutScenePlayed.cpp EntityShadowFader.cpp MaterialMapper.cpp lit_environmentmap.cpp lit_singletexture.cpp lit_singletexture_uvanim.cpp lit_texreconfig.cpp unlit_32indtexture.cpp unlit_notexture.cpp unlit_singletexture.cpp entityData.cpp LoadedScript.cpp ScriptCaseFloat.cpp ScriptCaseGame.cpp ScriptCaseGame2.cpp ScriptCaseGame3.cpp ScriptCaseGameRsv.cpp ScriptCaseInternals.cpp ScriptCaseStandard.cpp ScriptCaseStrings.cpp ScriptLoader.cpp ScriptManager.cpp ScriptVM.cpp BreakingGlass.cpp clouds.cpp Decal.cpp dualtexture.cpp fogpatch.cpp FXMode.cpp LightFX.cpp ParticleEffect.cpp ParticleModel.cpp rats.cpp Renderbuffer.cpp rubbish.cpp SFXManager.cpp StreakEffect.cpp TrailEffect.cpp Weather.cpp jitter.cpp lipsync.cpp spotlight.cpp spotlightcone.cpp throwgraphic.cpp OverbrightEffect.cpp VideoScreenEffect.cpp Str.cpp Timer.cpp Shot.cpp Weapon.cpp WeaponManager.cpp colramp.cpp Gu.cpp GuProfiler.cpp main.cpp renderer.cpp rslengine.cpp shadermgr.cpp vectorASM.cpp volatilemem.cpp WiiGeometry.cpp WiiShader.cpp WorldCollision.cpp actor.c control.c displayObject.c dmabuffer.cpp fileCache.c geoPalette.c GQRSetup.c List.c normalTable.c SKNControl.c SKNMath.c string.c texPalette.c Tree.c HomeButtonMenu.cpp display.cpp binkfunctions.cpp binkplayer.cpp wiitextures.c adler32.c infblock.c infcodes.c inffast.c inflate.c inftrees.c infutil.c zutil.c binkwii.c binkread.c wiiax.c wiifile.c binkacd.c radcb.c expand.c popmal.c radmem.c fft.c dct.c bitplane.c ai.c arc.c AX.c AXAlloc.c AXAux.c AXCL.c AXOut.c AXSPB.c AXVPB.c AXProf.c AXComp.c DSPCode.c AXFXReverbHi.c AXFXReverbHiDpl2.c AXFXReverbHiExp.c AXFXReverbHiExpDpl2.c AXFXReverbStd.c AXFXReverbStdExp.c AXFXHooks.c PPCArch.c gki_buffer.c gki_time.c gki_ppc.c hcisu_h2.c uusb_ppc.c bta_dm_cfg.c bta_hh_cfg.c bta_sys_cfg.c bte_hcisu.c bte_init.c bte_logmsg.c bte_main.c btu_task1.c bd.c bta_sys_conn.c bta_sys_main.c ptim.c utl.c bta_dm_act.c bta_dm_api.c bta_dm_main.c bta_dm_pm.c bta_hh_act.c bta_hh_api.c bta_hh_main.c bta_hh_utils.c btm_acl.c btm_dev.c btm_devctl.c btm_discovery.c btm_inq.c btm_main.c btm_pm.c btm_sco.c btm_sec.c btu_hcif.c btu_init.c wbt_ext.c gap_api.c gap_conn.c gap_utils.c hcicmds.c hidd_api.c hidd_conn.c hidd_mgmt.c hidd_pm.c hidh_api.c hidh_conn.c l2c_api.c l2c_csm.c l2c_link.c l2c_main.c l2c_utils.c port_api.c port_rfc.c port_utils.c rfc_l2cap_if.c rfc_mx_fsm.c rfc_port_fsm.c rfc_port_if.c rfc_ts_frames.c rfc_utils.c sdp_api.c sdp_db.c sdp_discovery.c sdp_main.c sdp_server.c sdp_utils.c db.c dsp.c dsp_debug.c dsp_task.c dvdfs.c dvd.c dvdqueue.c dvderror.c dvdidutils.c dvdFatal.c dvd_broadway.c euart.c EXIBios.c EXIUart.c EXICommon.c fs.c GXInit.c GXFifo.c GXAttr.c GXMisc.c GXGeometry.c GXFrameBuf.c GXLight.c GXTexture.c GXBump.c GXTev.c GXPixel.c GXDisplayList.c GXTransform.c GXPerf.c HBMBase.cpp HBMAnmController.cpp HBMFrameController.cpp HBMGUIManager.cpp HBMController.cpp HBMRemoteSpk.cpp db_assert.cpp db_console.cpp db_DbgPrintBase.cpp db_directPrint.cpp db_mapFile.cpp lyt_animation.cpp lyt_arcResourceAccessor.cpp lyt_bounding.cpp lyt_common.cpp lyt_drawInfo.cpp lyt_group.cpp lyt_layout.cpp lyt_material.cpp lyt_pane.cpp lyt_picture.cpp lyt_resourceAccessor.cpp lyt_textBox.cpp lyt_window.cpp math_triangular.cpp snd_AnimSound.cpp snd_AxManager.cpp snd_AxVoice.cpp snd_Bank.cpp snd_BankFile.cpp snd_BasicSound.cpp snd_Channel.cpp snd_DisposeCallbackManager.cpp snd_DvdSoundArchive.cpp snd_EnvGenerator.cpp snd_ExternalSoundPlayer.cpp snd_FrameHeap.cpp snd_InstancePool.cpp snd_Lfo.cpp snd_MemorySoundArchive.cpp snd_MidiSeqPlayer.cpp snd_MidiSeqTrack.cpp snd_MmlParser.cpp snd_MmlSeqTrack.cpp snd_MmlSeqTrackAllocator.cpp snd_NandSoundArchive.cpp snd_PlayerHeap.cpp snd_RemoteSpeaker.cpp snd_RemoteSpeakerManager.cpp snd_SeqFile.cpp snd_SeqPlayer.cpp snd_SeqSound.cpp snd_SeqSoundHandle.cpp snd_SeqTrack.cpp snd_SoundArchive.cpp snd_SoundArchiveFile.cpp snd_SoundArchiveLoader.cpp snd_SoundArchivePlayer.cpp snd_SoundHandle.cpp snd_SoundHeap.cpp snd_SoundPlayer.cpp snd_SoundStartable.cpp snd_SoundSystem.cpp snd_SoundThread.cpp snd_StrmChannel.cpp snd_StrmFile.cpp snd_StrmPlayer.cpp snd_StrmSound.cpp snd_StrmSoundHandle.cpp snd_TaskManager.cpp snd_TaskThread.cpp snd_Util.cpp snd_WaveFile.cpp snd_WavePlayer.cpp snd_WaveSound.cpp snd_WaveSoundHandle.cpp snd_WsdFile.cpp snd_WsdPlayer.cpp snd_WsdTrack.cpp ut_binaryFileFormat.cpp ut_CharStrmReader.cpp ut_CharWriter.cpp ut_DvdFileStream.cpp ut_DvdLockedFileStream.cpp ut_FileStream.cpp ut_Font.cpp ut_IOStream.cpp ut_LinkList.cpp ut_list.cpp ut_ResFont.cpp ut_ResFontBase.cpp ut_TagProcessorBase.cpp ut_TextWriterBase.cpp ipcMain.c ipcclt.c memory.c ipcProfile.c KPAD.c mem_heapCommon.c mem_expHeap.c mem_frameHeap.c mem_unitHeap.c mem_allocator.c mem_list.c mix.c remote.c mtx.c mtxvec.c mtx44.c vec.c psmtx.c nand.c NANDOpenClose.c NANDCore.c NANDCheck.c OS.c OSAlarm.c OSAlloc.c OSArena.c OSAudioSystem.c OSCache.c OSContext.c OSError.c OSExec.c OSFatal.c OSFont.c OSInterrupt.c OSLink.c OSMessage.c OSMemory.c OSMutex.c OSReboot.c OSReset.c OSRtc.c OSSemaphore.c OSSync.c OSThread.c OSTime.c OSUtf.c OSIpc.c OSStateTM.c __start.c OSPlayRecord.c OSStateFlags.c OSNet.c OSNandbootInfo.c __ppc_eabi_init.cpp Pad.c scsystem.c scapi.c scapi_prdinfo.c seq.c SIBios.c SISamplingRate.c syn.c TPL.c usb.c vi.c i2c.c vi3in1.c wenc.c WPAD.c WPADHIDParser.c WPADEncrypt.c WPADMem.c debug_msg.c WUD.c WUDHidHost.c debug_msg.c DebuggerDriver.c exi2.c float.cpp alloc.c ansi_files.c ansi_fp.c arith.c buffer_io.c ctype.c direct_io.c errno.c file_io.c FILE_POS.C locale.c mbstring.c mem.c mem_funcs.c math_api.c misc_io.c printf.c qsort.c rand.c scanf.c signal.c string.c strtold.c strtoul.c wctype.c wstring.c wchar_io.c uart_console_io_gcn.c abort_exit_ppc_eabi.c math_sun.c extras.c e_atan2.c e_exp.c e_fmod.c e_log.c e_log10.c e_pow.c e_rem_pio2.c k_cos.c k_rem_pio2.c k_sin.c k_tan.c s_atan.c s_ceil.c s_copysign.c s_cos.c s_floor.c s_frexp.c s_ldexp.c s_sin.c s_tan.c w_atan2.c w_exp.c w_fmod.c w_log.c w_log10.c w_pow.c e_sqrt.c math_ppc.c w_sqrt.c __mem.c __va_arg.c global_destructor_chain.c NMWException.cp ptmf.c runtime.c __init_cpp_exceptions.cpp Gecko_ExceptionPPC.cp GCN_mem_alloc.c mainloop.c nubevent.c nubinit.c msg.c msgbuf.c serpoll.c usr_put.c dispatch.c msghndlr.c support.c mutex_TRK.c notify.c flush_cache.c mem_TRK.c string_TRK.c __exception.s targimpl.c targsupp.s mpc_7xx_603e.c mslsupp.c dolphin_trk.c main_TRK.c dolphin_trk_glue.c targcont.c target_options.c UDP_Stubs.c main.c CircleBuffer.c MWCriticalSection_gc.cpp HashKeyFunctions.cpp MemMan.cpp Random.cpp RelocatableChunk.cpp fmod_eventi.cpp fmod_eventsystemi.cpp fmod_sounddef.cpp fmod_eventcategoryi.cpp fmod_eventparameteri.cpp fmod_eventprojecti.cpp fmod_eventgroupi.cpp fmod_reverbdef.cpp fmod_channel_revolution.cpp fmod_os_misc.cpp fmod_os_output.cpp fmod_output_revolution.cpp fmod_sample_revolution.cpp fmod_dsp.cpp fmod_dspi.cpp fmod_codec_aiff.cpp fmod_codec_dsp.cpp fmod_codec_fsb.cpp fmod_codec_user.cpp fmod.cpp fmod_async.cpp fmod_channel.cpp fmod_channel_emulated.cpp fmod_channel_real.cpp fmod_channel_realmanual3d.cpp fmod_channel_stream.cpp fmod_channeli.cpp fmod_channelpool.cpp fmod_channelgroup.cpp fmod_channelgroupi.cpp fmod_codec.cpp fmod_debug.cpp fmod_file.cpp fmod_file_disk.cpp fmod_file_memory.cpp fmod_file_null.cpp fmod_file_user.cpp fmod_listener.cpp fmod_memory.cpp fmod_metadata.cpp fmod_output.cpp fmod_output_emulated.cpp fmod_output_polled.cpp fmod_plugin.cpp fmod_pluginfactory.cpp fmod_sound.cpp fmod_sound_sample.cpp fmod_sound_stream.cpp fmod_soundi.cpp fmod_string.cpp fmod_stringw.cpp fmod_system.cpp fmod_systemi.cpp fmod_thread.cpp fmod_time.cpp fmod_globals.cpp fmod_output_nosound.cpp fmod_output_nosound_nrt.cpp fmod_reverbi.cpp fmod_speakerlevels_pool.cpp
submitted by SSor3nt to ManhuntGames [link] [comments]

Where do Naughty Dog go from here?

I have to admit, I am a lot of a Naughty Dog fanboy. In terms of hours played, Uncharted is almost certainly my favorite franchise (although none of those games are my absolute favorite of all time).
I also love PlayStation. I work all day in front of a computer, so the very last thing I want is to play PC games. Flopping onto my sofa and firing up the PS3/PS4 is just bliss after a hard day's work. I don't necessarily hate XBox, but I was staying at my brother's house a few years ago, and the Internet went down. I thought I would play some XBox while I waited for the Internet to come back online and it literally wouldn't let me play any games without an Internet connection. I know Xbox doesn't do that these days but since I generally despise Microsoft anyway, it was enough for me to abandon their console forever.
I'm afraid this whole episode concerning TLOUII has left a very bad taste in my mouth. This includes Sony and Naughty Dog. I'm seriously considering not buying a PS5 and giving up gaming, if this is how they are going to carry on.
The false advertising, the DMCA takedowns, the obvious shilling by the legacy gaming press. It all adds up to a very bad picture.
Not to mention virtue signalling "#BlackLivesMatter" whilst buying cobalt from mines which literally use black children in near-slavery conditions in the "Democratic Republic" of the Congo . It's disgusting.
I despise the "culture war" and so much of what Sony is doing these days is just a disaster. I don't want this shit in my games. I'm not homophobic - I enjoyed TLOU DLC and I play Bioware games and like them too, to give two examples. I just don't want current-year politics in my video games.
I also want the worlds my games are set in to be logically consistent.
For example, Abby makes no sense. I work out. To get to the size I want to be, I have to spend two-three hours a day working out, eat 6,000+ calories a day, take a load of natural supplements (I don't use steroids or anything like that) and sleep for nine hours when I go to bed.
Even given the abundance of resources we enjoy in our society, doing this is extremely difficult. I can only do this for a few weeks at a time because life gets in the way and I am not a professional athlete. The idea that Abby can do this in an environment where there are no resources and every minute has to be spent foraging to survive is absolutely ridiculous.
Additionally, Sony censoring third-party games ("sexuality", but non-nudity in Anime games (cartoons, FFS) - I don't play these games and have no interest in them, but I 100% defend the right of gamers who do like these titles to experience them as the developers created them), yet allowing the extremely violent TLOUII, replete with an anal sex scene, is just ridiculous.
Many of us knew that Sony moving its HQ to California was going to end up a disaster and here we are.
I know that some people felt that Uncharted: The Last Legacy was a "woke" mess, but I don't feel that way, I genuinely thought that game was amazing. In fact, I think it's my second favorite Uncharted game, after Uncharted 2.
I really want ND to succeed and continue to bring us amazing games. However, I don't believe this is a possibility anymore. Between Druckmann and Sony, I think we are going to be saddled with woke BS going forward.
Let me be clear, I only played TLOUI because my brother wanted to play it as our shared "Christmas Game". This is where (before he got married) we would choose a game to play for the Christmas Holiday and take turns to play.
I hate zombie games, and with the exception of Horizon Zero Dawn and Death Stranding, I'm not a fan of the post-apocalyptic genre either, unless it can offer something genuinely new, which I think those two titles did.
I did appreciate the game for the cordyceps infection - it was something in nature I knew about before and I thought it was genius to incorporate it. I also found the story to be excellent, however, TLOU is a game that I have never replayed, unlike all the Uncharted games that I have completed and Platinumed at least twice (except Last legacy).
I am not really bothered about TLOU that much. I liked it as a one-off experience, but I thought the actual gameplay was boring. I know the story, so I don't really care to play the game ever again, as I know what happens.
To be honest, PS4 has been quite a disappointment - I have spent the lockdown playing mostly PS3 games that I never played before, and have played some absolute classics - Binary Domain, Prince of Persia: The Forgotten Sands, Spec Ops: The Line, Lord of the Rings: War in the North (this game is AMAZING - if you have a PS3 please look at it) and on PS4, the LA Noire remastered game, to name but a few.
What characterizes these games is that they are FUN to play. Druckmann says "we don't talk about fun". I'm sorry, then what the F- is the point? While everyone was saying how un-fun TLOUII was, I was literally laughing every five seconds playing LA Noire, which is a dark game, but is also hilarious and a heap of fun at the same time.
LA Noire PS4 has a 76 score on Metacritic. Is it truly reasonable to say that game is worse than TLOUII?
I don't think so.
Anyway, I hope you get an idea of where I am coming from in this very long preamble.
My questions for you are:
- Uncharted is likely dead - can it be revived? I would like to see a dedicated PS4 (and therefore PS5) remake of Uncharted: Golden Abyss, which would remove all the Vita -specific controls and bring back dedicated treasures. Get Bluepoint to do this. Obviously, this doesn't inject any new Nathan Drake, it's canon. This would at least win back some trust among fans. Do you agree?
- Beyond that, can anything be done with Uncharted? Is it, after that, dead? Would a game with Cutter appease fans?
- TLOU - In my opinion, this franchise didn't need to be a franchise. I don't think this game needed a sequel. Joel and Ellie's tale was told, and when I first heard that TLOUII was a thing, I genuinely thought it was a terrible idea. Unless you were going to tell a different story in the world they created, it just felt like a bad idea to me. I have the same concerns regarding the Horizon Zero Dawn sequel - I just don't know if you can write a sequel as good as the first one, and maybe it should be another story from a different perspective, e.g. set in another continent.
- Are 100% linear games now dead? It seems to me that TLOUII - despite the abysmal plot and writing, could probably have redeemed itself somewhat if the player at least had agency: punishing players for "choices" they were forced into is bollocks. At least Spec Ops: The Line gave you a binary option, and even if both options were horrible, at least the game had a reason to make you live with the consequences of what you chose. Telling the player they are bad people for doing things the game MADE them do is just bad writing.
- What does ND do next? - As above, the low hanging fruit would be a remaster of Golden Abyss, which they don't even need to do themselves. But without Uncharted, and presumably with TLOU also being a dead IP, can they survive?
Do they move away from linear games into a more open world RPG-type genre (BTW, I absolutely HATE the "open world" sections in Uncharted 4 and Last Legacy - I assume TLOUII is the same - either make your games open sandbox/open world with fast travel and all the normal open world stuff, or just don't bother. The ND versions I have played are tedious and painful.
I would be very interested to hear what you have to say. This sub seems to be quite open minded and I didn't know where else to put this.
Tldr; I am a massive ND and Sony fan, but their recent behaviour has me questioning my loyalty going forward. What on Earth do Naughty Dog do going forward, given that their two major IPs from the last decade or so are now effectively dead?
submitted by geraltshairclip to TheLastOfUs2 [link] [comments]

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:

Parts List

To only update the hardware, you'll need:
If you want to update the toolchain, you'll need:
  1. Arduino Mega 2560 (Amazon) to create the programmer.
  2. Ribbon Jumper Cables (Amazon) to connect the Arduino to the breadboard.
  3. 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.
  1. 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.
  2. 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.
  3. 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.
  4. 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):
  1. 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.
  2. 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); }
  3. 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.
  4. Create a char array that contains your program and data. You can use #define to create opcodes like #define LDA 0x01.
  5. 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:
  1. If you're on Windows, you can use the pre-built binaries. Otherwise, you'll need to install Rust and compile via cargo build.
  2. 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].
  3. 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!
  4. 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!
  5. 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!

Step 2: Expand the Control Lines (Image)

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:
  1. Place the two 74LS138 decoders on the far right side of the breadboard with the ROMs. Connect them to power and ground.
  2. You'll likely run out of inverters, so place a 74LS04 on the breadboard above your decoders. Connect it to power and ground.
  3. 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!
  4. 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!
  5. 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!
  6. 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:
  1. Connect A0-A2 of the left 74LS138 to the left ROM's A0-A2.
  2. Connect A0-A2 of the right 74LS138 to the right ROM's A0-A2.
  3. 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.
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.

Step 3: Add a Stack (Image 1, Image 2)

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:
  1. Place a 74LS00 NAND gate, 74LS245 transceiver, and two 74LS193 counters in a row next to your output register. Wire up power and ground.
  2. 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.
  3. 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.
  4. Connect the Load input between the two 193s and to a new active low control line called SI on your 74LS138 decoder.
  5. 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.
  6. 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.
  7. Connect the B1-B8 outputs of the 74LS245 transceiver to the bus.
  8. 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.
  9. 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:
  1. Take the clock from the 74LS08 AND gate and make it an input into two different NAND gates on the 74LS00.
  2. 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.
  3. Wire up a new active high control line called SP from your ROM to the NAND gate going into Count Up.
  4. 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:
  1. Wire up an active high line called SA from the 28C16 ROM to A8 on the Cypress CY7C199 RAM.
  2. 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:
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):
  1. Define all your new control lines, such as #define SI 0x0700 and #define SO 0x0005.
  2. Create two new instructions: PSH (1011) and POP (1100).
  3. 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.
  4. 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.
  5. 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.
  6. We now just need to output the RAM into our A register with RO|AI|SA and then end the instruction with TR.
  7. 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.

Step 4: Add Subroutine Instructions (Image)

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):
  1. 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.
  2. In your traditional int main (void) C function, after initializing with initUCode(), make two arrays: char ucode_upper[2048] and char ucode_lower[2048].
  3. Take your existing loop code that loops through all addresses: for (int address = 0; address < 2048; address++).
  4. Modify instruction to be 5-bit with int instruction = (address & 0b00011111000) >> 3;.
  5. 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;.
  6. 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.
  7. 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:
  1. For jsr, the first three steps are the same as psh: MI|CO, RO|II|CE, MI|SO|SA.
  2. On the next step, instead of AO we use CO to save the program counter to the stack: CO|RI|SP|SA.
  3. We then essentially read the 2nd byte to do a jump and terminate: MI|CO, RO|J.
  4. For rts, the first four steps are the same as pop: MI|CO, RO|II|CE, SM, MI|SO|SA.
  5. On the next step, instead of AI we use J to load the program counter with the contents in stack: RO|J|SA.
  6. 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!


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:
  1. 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).
  2. 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.
  3. LCD output. At this point, adding a 16x2 character LCD like Ben uses in the 6502 is very possible.
  4. 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.
  5. 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.
submitted by MironV to beneater [link] [comments]

Best Binary Options Indicator  Ultimate Trend Signals Binary options trading  Binary options signals - YouTube Binaryoptions Signals - YouTube Binary Options Signals Free Binary Options Signals - YouTube Binary Options Strategy 2020  100% WIN GUARANTEED ...

Auch wenn dieser Binary Signals durchaus einen etwas höheren Preis hat, findet der Preis sich ohne Zweifel in den Kriterien Qualität und Langlebigkeit wider. Binary Signals 24/7 real-time trade signal alerts; real-time trade results and statistics; 24/7 customer support and trading guidance; Over 80% profit rate; Binary Signal (Original Mix) Binary Options: Crash Course! Learn How To Make ... Binary Signals - Die TOP Auswahl unter der Vielzahl an verglichenenBinary Signals. Welche Kauffaktoren es vor dem Kauf Ihres Binary Signals zu beachten gibt . Herzlich Willkommen zu unserem Test. Wir als Seitenbetreiber haben uns der Aufgabe angenommen, Produktvarianten aller Variante zu analysieren, dass die Verbraucher schnell den Binary Signals sich aneignen können, den Sie zuhause für ... Binary Signals - Der absolute Favorit . Jeder unserer Redakteure begrüßt Sie als Interessierten Leser hier bei uns. Unsere Redakteure haben es uns zur Mission gemacht, Verbraucherprodukte unterschiedlichster Art zu analysieren, damit Interessenten einfach den Binary Signals finden können, den Sie als Kunde haben wollen. Pro Signal Robot does not advertise binary options for anyone and does not invite anyone to join binary options trading. Pro Signal Robot has developed software to help traders to execute and monitor trades. Pro Signal Robot is not affiliated, endorsed, or sponsored by any binary options brokers. Also, we do not provide brokerage or trading services. The signals made by our software are based ... Types of Binary Options Signals. There are a variety of different types of binary options trading signals, each with their own pros and cons. We have included a brief description of each to help you determine which type is best for you considering your availability, resources, and level of experience. Binary Signals - Der Testsieger unserer Produkttester. Hallo und Herzlich Willkommen auf unserer Webseite. Unsere Mitarbeiter haben es uns zur Aufgabe gemacht, Produktpaletten verschiedenster Variante zu analysieren, dass Interessenten einfach den Binary Signals auswählen können, den Sie für gut befinden. IQ Option Signals for Binary Options: Currently, IQ Option is one of the leading brokers. Its platform is considered by many to be the best platform in the market. Even if the Signals we refer to on this post can work with other Brokers, the strategy behind the signals are from the IQ Option platform and its indicators. Also, since the expiration time on IQ Option, works differently from other ... Binary Signals - Der absolute Vergleichssieger . Unser Team an Produkttestern hat unterschiedliche Marken ausführlich getestet und wir präsentieren Ihnen als Interessierte hier die Testergebnisse. Natürlich ist jeder Binary Signals direkt bei erhältlich und kann direkt gekauft werden. Während einige Händler seit langem nur noch durch Wucherpreise und vergleichsweise schlechter ... Recent EUR/USD binary signals, success rate : 68%. Disclaimer: Trading Binary Options is highly speculative, carries a level of risk and may not be suitable for all investors. You may lose some or all of your invested capital; therefore, you should not speculate with capital that you cannot afford to lose. You should be aware of all the risks associated with trading Binary Options. Binary ... Videos provide the best way for traders new to binary options to see exactly what they are, how they work and how to start trading. On this page, we have listed a range of useful demo videos. They start explaining the very basics of binary trading and broker platforms, and move on to more advanced topics, such as specific strategies, technical analysis and managing trading funds.

[index] [2208] [10410] [16347] [28806] [14193] [27728] [2680] [20403] [8753] [19311]

Best Binary Options Indicator Ultimate Trend Signals With Binary Signals App, Trading Binary Options has never been Easier! Download Binary Signals to enjoy: 1. Highest winning perce... Binary options trading Binary options signals Hi there! I'm Lady Trader and today I'll show you my binary options strategy 2020 that I use in binary tradin... With Binary Signals App, Trading Binary Options has never been Easier! Download Binary Signals to enjoy: 1. Highest winning percentage Binary Options signals with over 70% ... Trade amazing Binary Options Signals and Forex Signals with Franco on live stream. Welcome to the world of endless earning possibilities, Binary Options, and My Binary Signals would hold your hand ... Nadex Forex and Binary Options Signals with master trader Binaryoptions Signals uploaded a video 6 years ago 6:25. Millionaire Mindset Affirmations - Duration: 6 minutes ... Hi, guys Hi guys and welcome to NerdsHD, In today's Video Binary Options Indicator Ultimate Trend Signals. We will do a short review about Ultimate Trend Signals and how you can use it to increase ... The road to success through trading IQ option Best Bot Reviews Iq Option 2020 ,We make videos using this softwhere bot which aims to make it easier for you t...