[ 3 / biz / cgl / ck / diy / fa / ic / jp / lit / sci / vr / vt ] [ index / top / reports ] [ become a patron ] [ status ]
2023-11: Warosu is now out of extended maintenance.

/vr/ - Retro Games


View post   

File: 28 KB, 768x720, Super Mario Bros. 3Mix.png [View same] [iqdb] [saucenao] [google]
2854976 No.2854976 [Reply] [Original]

Here's some points of discussion:

1.) Project showoffs
2.) Hacking help
3.) ROM hack recommendations

Our ROM hack recommendation list can be found below:

http://pastebin.com/pYxhe4L7

Every hack featured on the list above can be downloaded at:

https://www.mediafire.com/folder/50m95vbbuyf25/vr's_ROM_Hack_Recommendations

>> No.2855204
File: 199 KB, 413x374, 1371147606563.png [View same] [iqdb] [saucenao] [google]
2855204

>>2854976
Last thread was on life support for a good while. I want to get more people interested in hacking and get more of a community going here on /vr/. I realize a lot of what makes the hacking community small is the seemingly insurmountable barrier to entry. Really it's not so bad though once you get used to a few core concepts. To that end I want to help anyone interested in hacking to start taking their first steps into the great unknown. Feel free to ask questions about computer architecture, assembly, consoles, reverse engineering, or suggest simple hacks. The first step is getting some discussion going.

Let's do some cool shit together /vr/.

>> No.2855273

Are any of the Yoshi's Island hacks good?

>> No.2855280

>>2855273

Super Mario Original is a SMW hack that has the graphics and alot of other elements from YI. if you put SMW and YI in a blender you'd get something like it.

>> No.2855504

>>2855204
>I realize a lot of what makes the hacking community small is the seemingly insurmountable barrier to entry.

No. It's just the full-blown autism that goes on in ROM-hacking circles. Everybody acts like a complete megalomaniac, then these communities inevitably collapse in on themselves as a result of infighting.

>Last thread was on life support for a good while.

Take a hint.

>> No.2855529

>>2855504
did a hacker kill your dad or what

>> No.2855580

>>2855204
I'm interested in a way.

Would IDA Pro and any Hex editor help me even though I know nothing about the actual contents of a game?

>> No.2855615
File: 26 KB, 432x450, 1374723441186.jpg [View same] [iqdb] [saucenao] [google]
2855615

>>2855580
Debugging emulators are the way to go. Half the fun of hacking a video game is seeing what weird shit happens when you poke its brain. Hex editors are important when you want to actually make changes to a ROM, but that's typically the last step once you figure out how to do what you want to do.

For instance, when hacking the SNES I typically use Geiger's Snes9x debugging emulator to understand code. Tracing a game as it executes let's me follow the execution of the program instruction-by-instruction. Once I've identified something interesting, I can ask the emulator to pause execution at certain instructions (breakpoints) and let me step through it line by line as I examine memory.

Concerning hex editors, anything will do as long as you can paste into it.

Relatedly, graphics editors can allow you to identify uncompressed graphics in memory if you specify the right format. An ancient editor that I still use is YY-CHR, although there are certainly better options out there.

>> No.2855884

>>2855615
Thanks.

>> No.2855906

>>2855504
nah. this is a fine thread

>> No.2856612

>>2855615
I wish I had someone explain things like this to me back when I was still interested on getting into romhacking.
Keep it up, you're appreciated.

Angry people like >>2855504 can go fuck themselves

>> No.2856614

>>2855204
I've always had an interest in hacking but I've never really knew where to start in terms of coding language and the like, and that's put a damper on my motivation. I know hex is important and the number system itself isn't a hard one to grasp but beyond that I'm at a loss.

>> No.2856614,1 [INTERNAL] 

>>2855504
You're the nigger who shat up the last thread with /pol/, aren't you?

>> No.2857091

Haven't been part of the romhacking community in a year. How are things going?

>> No.2857103

>>2857091
>How are things going?

S'cool.

>> No.2857725
File: 28 KB, 256x256, Protoman_icon593.jpg [View same] [iqdb] [saucenao] [google]
2857725

>>2856614
I guess hexadecimal is somewhere to start.

Being able to read hex is useful primarily because there is a convenient one-to-one mapping between a single hex digit and a group of four binary digits. Essentially it's shorthand for binary numbers. It can be very useful to be able to convert between hex and bin if you need to know what bits are set in a memory location. Memorizing the table below is important, but fluent application takes practice.

bin hex
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F

For example:
0xBABE = 0b1011101010111110 = 0d47806
0b1011000000001011 = 0xB00B = 0d45067
Clearly it's easy to move between hex and binary quickly, but notice no such trivial relationship exists when converting to decimal from these bases; you have to bust out the full base change formulas.

The reason this relationship exists between binary and hex and not decimal is evident when looking at the prime factors of the different bases. Binary is base 2=2^1, while hex is base 16=2^4, which is a power of the binary base 2. Actually octal base 8=2^3 can be used in a similar fashion as hex, differing only by directly substituting 3 binary digits for one octal digit. I guess no one bothers with base 4=2^2 because it isn't effective from keeping your wrist from getting sore. Decimal is base 10=2^2*3. 10 is not a power of 2, so no trivial relationship exists between either binary or hex.

>> No.2857846

>>2857725
Oh that's neat. I didn't know the two mapped together that conveniently, though your explanation does make sense as to why.

What about assembly languages? Are they important to know at all or is a lot of hacking mostly just hex and bin and figuring out what the represent/point to?

>> No.2858014
File: 59 KB, 669x700, oEfjdaW.png [View same] [iqdb] [saucenao] [google]
2858014

soon

>> No.2858524

>>2857846
Assembly is important if you want to do anything more than an uncompressed graphics hack, which is script kiddie level stuff. Assembly lets you read (and write) the program of a game, which allows you to reveres engineer just about anything. Understanding data becomes less trial and error, and more just reading the code. It can be tricky to pick up if you don't know where to start, but ultimately it's pretty straight forward stuff.

To understand assembly, there's a bit more about binary and hex that is useful to know. It is important to understand how to count and do basic mathematical operations in these bases.

Counting in other bases is easy because it works just like in decimal, except that you're working with a different number of symbols than 10 (0-9). For instance, in hex you have 16 symbols (0-F), and when you start counting you go... "0,1,2,3,4,5,6,7,8,9", but instead of like in decimal where after 9 you run out of symbols and have to carry over to the next column saying "10", you continue on with the rest of the symbols "A,B,C,D,E,F" and only then carry over to the next column saying "10,11,12,...,1E,1F,20,21,21,...,FE,FF,100,101,...". Note that this hex number "10" is 16 in decimal, but serves the same purpose that 10 does in decimal. To illustrate my point, in decimal 2*10=20; in hex 0x2*0x10=0x20 = 32.

Binary works the same way, but you carry over a lot more frequently. See my previous post on how to convert between hex and binary on how to count from 0 to 15 in binary. Pretend for a moment that you only had 4 bits to count with like in the post. In that case you could only count to 15 = 0b1111. What happens when you go to the next number? It should be 0b10000, but with only 4 bits it rolls back to 0b0000. This is an important point given the finite amount of memory in a computer.

With this you should now be able to count (with some effort) the natural numbers in binary and hex.

>> No.2858530
File: 8 KB, 640x480, EccoTheDolphin_MegaDrive_09.png [View same] [iqdb] [saucenao] [google]
2858530

>>2855204
I've been somewhat interested in this, but have no experience with either hacking or programming. If I wanted to say, make custom Ecco the Dolphin levels what sort of hoops would I have to go through to learn?

>> No.2858556

>>2855204
What would be the easiest game to hack to learn the basics? Or do the basics vary from game to game and what's learned hacking one can't be applied to hacking another?

>> No.2858565

>>2858556
Anything with a complete commented disassembly, eg. SMB, Sonic.

>> No.2858873

>>2858524
>Assembly is important if you want to do anything more than an uncompressed graphics hack
I wouldn't go that far. You can do level editing without any real knowledge of assembly. Unless you consider knowledge of pointers and pointer tables to be assembly, but that's more just how data is stored in a game rom.

>> No.2859359
File: 189 KB, 700x680, 5cdabe0adb041ed64a3240adc43fbce3-d4gi0l0.jpg [View same] [iqdb] [saucenao] [google]
2859359

>>2854976
Did someone actually make Yoshi possible on a NES?

>> No.2859709
File: 3 KB, 211x238, neeblemanpng.png [View same] [iqdb] [saucenao] [google]
2859709

>>2858873
True, while it's often not difficult to find and understand some types of level data loaded in RAM, other data may be less obvious in structure or function and one might need to resort to disassembly for insight. In addition, level data is almost never uncompressed in ROM, so you have to understand decompression to write a compression routine to insert your own levels, or alternatively disable decompression in code, both assembly hacks.

>>2858530
Ecco may have a relatively simple level structure since the levels themselves are composed of static air, water, rock, and damaging geometry. The levels are large, so there will be decompression. Know a full hack requires editing headers, linking levels, and place enemies.

>>2858556
The basics are pretty much the same game to game, although there is a great variety in implementation. Understanding the basic structure of a game program is the most important thing though. Find a game you like is my suggestion.


=======================
>>2858524
Knowing how to apply 9 mathematical operations split into 3 groups on binary numbers is usually sufficient to work in assembly:

Arithmetic:
1) Addition
2) Subtraction
Logical:
3) And
4) Or
5) Exclusive Or
Shifts:
6) Roll left
7) Shift left
8) Roll right
9) Shift right

Let's start with binary addition. Unsurprisingly, it works like in decimal. Below is a binary addition table

0+0=0
0+1=1
1+0=1
1+1=10
1+1+1=11

The first three equations are "obvious". The fourth one might be unsettling, but think about it. You add 0b1 +0b1 = 2, but in binary there is no 2, so you roll the ones column over to 0 and generate a 1 carry that propagates to the next column. In decimal this is illustrated by 5+5=10; there is no single numeral for 10 in decimal, so you roll the ones column over to 0 and generate a 1 carry to the tens column, just like you learned in elementary school. The fifth equation should be "obvious" if you accept the fourth.

Next: Subtraction and 2's complement

>> No.2859713

>>2855273

just the one that removes the crying.

>> No.2859743
File: 15 KB, 336x369, jm.jpg [View same] [iqdb] [saucenao] [google]
2859743

>> No.2861261

>>2855273
I'd say that every single major YI hack (and by that I mean Kamek's Revenge 2.0, NEW! SMW2 and SMW2+ series) is at least worth trying out. Sadly, the YI hacking scene is dead and it doesn't look like it's going to change anytime soon.

>>2859359
Yeah, that screen comes from Super Mario 3Mix. It's gimmick is that it combines elements from every single Mario platformer up until 3D Land into a single all-new game.

>> No.2861842

Bump. The posts in here are extremely helpful for a guy like me treating romhacking as a little hobby.

>> No.2861869

>>2854976
I want some good hacks to play on my SD2SNES. Is there a list of compatible hacks? I've sifted through all of the (well most) Super Mario World hacks and only 3 or 4 of them actually feel like a complete and fun game without any glitches or bugs. It would be nice to have a brief description of each hack and highlight some main details like how often it lets you save(the good hacks save after each level)

>> No.2861914

This thread led me to play SMB 3Mix, and its amazing. Thanks

>>2855280
You sure thats the name? I cant find it :(

>> No.2861936

>>2861869
Did you even read the op? Theres a pastebin
although there's no sd2snes and save description specially for you, im sure its good enough

>> No.2862098

>>2861869
SMW is the only game that really has a problem with playing hacks on flash cart, the reason being that a lot of the older hacks exploited a bug in ZSNES to play music. Generally newer hacks and hacks that don't have custom music are good bets.

>> No.2862132

>>2861914

https://mega.nz/#!dRhzgYJT!QIBexmEEP18mlXziZBiXgzoGwtKEHvkQ96DSEvRHFX4

>> No.2863542

>>2861869
>>2862098

Yeah, pretty much every SMW hack released after 2012/2013 should work on the real hardware.

>> No.2863805
File: 4 KB, 262x312, Shadowman_Megaman_3_Sprite_Standing_Right.png [View same] [iqdb] [saucenao] [google]
2863805

>>2859709
Rather than just math it up, I think side-by-side assembly examples will be helpful. I know 65xx well (used in Apple ][, NES, SNES) so I'm going to give assembly examples in that. It's not representative of most architectures, but once you get how one processor works it's not hard to learn others.

A large part of what a computer does is simply move data around. To give examples, I need to mention some basics about memory, addresses, and load and store instructions.

Computers consist of a hierarchy of memory locations starting with smaller, faster, more capable memories and moving to larger and slower ones. On one extreme of this hierarchy are specialized memory locations that exist within a processor called registers. Register memory is small compared to other types, but all computation is done upon registers so they are of utmost importance. On the other end of the hierarchy are larger and slower external RAM and ROM memory regions. These store program code and data, and are several orders of magnitude larger than register memory.

To do computation, a computer has to specify things to operate on. Registers are typically referred to by instruction name, while external memory locations are specified by "address". Many pins on the outside of a processor are dedicated to the address and data bus. To access external memory, the processor writes a number on the address bus, and the corresponding memory at that address is read on the data bus. Although an address is just a number in the rage of [0,2^(number of address pins)-1], the address bus can be connected to RAM and ROM in non-trivial ways. The way addresses map to memories is uncreatively called a "memory map".

Processors have a register called the "program counter", or PC, that contains the address of the next instruction to be executed. A processor cyclically fetches the instruction pointed to by the PC, increments the PC, decodes the instruction, executes the instruction, and then repeats.

>> No.2863848

What is the best NES emulator to use for NES development/ROM hacking?

>> No.2863865
File: 3 KB, 240x204, index.png [View same] [iqdb] [saucenao] [google]
2863865

>>2863805
[continued]
Let's talk about the most basic instructions of any processor, "immediate" load, and "absolute" load/store. The quoted words in the previous sentence are called "addressing modes" that specify how memory is accessing instructions of the same general nature, such as load commands. Immediate addressing specifies a constant number, while absolute addressing specifies a constant address to find a number. The act of loading moves data from external to register memory and can be logically combined with either of these addresing modes. Storing on the other hand moves data from registers to external memory and can only be used with absolute addressing to store at a constant external address, as storing at a constant number is nonsense.

To illustrate, on the 65816 the address bus (and PC) are 24-bits that specify addresses spanning [$00:0000,$FF:FFFF] (in 65xx assembly "$" is equivalent to the "0x" hex prefix and the ":" is a place holder equivalent to ","). Suppose the PC already points to our code arbitrarily located at address $00:8000 mapped to ROM. We want to load a number from memory address $00:0000 mapped to RAM, add a constant number #$0A55 ("#" denotes immediate addressing), and store it back to $00:0000 We will use the most important register on the 65816, the Accumulator A.

.origin $00:8000 // Start of program code (in ROM)

LDA $00:0000 // Load (RAM) memory address into A
CLC // Clear carry
ADC #$0A55 // Add constant value of #$0A55 to A and store at A
STA $00:0000 // Store A to (RAM) memory address

The first instruction at memory address $00:8000 loads the value at at memory address $00:0000 into register A for manipulation. The next instruction clears input carry to the addition operation (more on this later). The immediate 16-bit value of #$0A55 then is added to A and the result is stored back at A, destroying the previous data. The result is written from A back to memory address $00:0000, storing it for later use. Make sense?

>> No.2865106

Bump.

>> No.2865125

>>2858014
Umihara Kawase? ???

>> No.2866313

http://www.smwcentral.net/?p=section&a=details&id=12721

I'm surprised noone mentioned JUMP yet. It's one of the best Mario hacks ever.

>> No.2866356
File: 151 KB, 604x476, frown.png [View same] [iqdb] [saucenao] [google]
2866356

>>2866313
I don't want to play it but do want to watch someone play through it... can't find a YouTube of it...

>> No.2866420

>>2866356
are you serious man
https://www.youtube.com/watch?v=fyg60cG06Nk&list=PLOK7KdxKklA_qoNX4_Q_4s2PP3skc4Kdp

>> No.2866459

where's that anon interested in hacking Mario RPG? did you give up the idea?

>> No.2866467

>>2866420
Honestly that hack isn't that good. Looks unpolished and a little cheap/Kaizo-ish.

I have ton of ROM hacks from around 1999/2000 and some are really good for being over a decade old. I like my hacks to look like a real Mario game.

>> No.2866867

>>2857725
>>2858524
Wow, thanks guys. This is pretty cool stuff.

I've been playing games all my life, and I would really like to get into this sort of stuff, but unfortunately my knowledge of computers and tech in general leaves much to be desired. I don't really know anything about hardware, software, or how computers really work in general (aside from really basic, surface level knowledge). It just seems that no matter where I try to start I'm missing some key requisite knowledge, then I get discouraged and do something else.

The one thing I have going for me is probably an above average exposure to math and statistics. I've taken calculus 1-3, discrete math, probability/math stats, regression analysis, linear algebra, and introductory abstract algebra. I've also dabbled with propositional and higher order logic and set theory outside of what was required for the proof centered courses.

Although I've never really used binary or hex, I was able to pick up on what you guys were talking about pretty quickly, and (i think) where you were going with it. That is, the one-to-one mapping between the bin set and hex set here >>2857725 is isomorphic with respect to one of the 9 operations here >>2859709, so all of the different theorems of groups can be applied!

I guess what I want to ask is, should I come back after I've learned more about computers, programming, and tech in general, or could this perhaps be the hobby I've been looking for to get me better acquainted with them? I will eventually have to take an introductory programming course for my major, but i was hoping to learn more over Christmas break.

>> No.2867331
File: 3 KB, 300x272, Magnetsprite.gif [View same] [iqdb] [saucenao] [google]
2867331

>>2863865
Going onto subtraction...

The easiest way to think about computer binary subtraction is to think of it as the addition of a negative number. We already know how to do addition, so the question shifts from "what is computer binary subtraction?" to "how do you represent a negative computer binary number?".

Consider the following: Given a positive binary number represented by a finite amount of bits, what number do you add to it to make the sum equal to zero? For argument's sake, let's say you have a 4-bit computer and your positive number is 5. The question then is...

0b0101 + ? = 0b0000

To solve for ?, remember that when you add finite precision numbers, the result can be bigger than what is representable in the given precision. In that case the result is truncated, and appears to roll around to 0. With this knowledge, we can recognize that 0b0000 = 0b10000 in the sense on a 4-bit computer. Solving the above...

0b0101 + 0b1011 = 0b10000 => 0b0000

It seems that the number 0b1011 is equal to negative 0b0101. What gives? Usually 0b1011 is interpreted to be equal to 11. The key is that it can be either depending on interpretation. If you interpret your bits as an "unsigned number", 0b1011 is equal to 11. If you interpret your bits as a "signed number", 0b1011 is equal to -5. This highlights an important point that data and information are distinct. A string of bits is meaningless data until you given it interpretation, which encodes information.

A general pattern emerges that connects the positive numbers with their finite valued negative representations. It's not hard to see what this pattern is. The key is to recognize 0+1 = 0+1 = 1. Given a string of binary digits, you can generate a new string that interchanges 1s and 0s. Adding these two string yields a string of 1s the same length as the original number. Adding 1 to this causes the number to roll over to zero. This is illustrated in the next post:

>> No.2867359
File: 4 KB, 300x300, Geminisprite.gif [View same] [iqdb] [saucenao] [google]
2867359

>>2867331

Given an 8-bit computer, find the negative of 0b00101011.

0b0010 1011 <= Given number = 0x2B =43
+ 0b1101 0100 <= Generate new string interchanging 1s and 0s (NOT)
---------------------
0b1111 1111 <= Resulting sum, a string of 1s
+0b0000 0001 <= Add 1
--------------------
0b1 0000 0000 => 0b0000 0000 <= Resulting sum after truncation to 8-bits, a string of 0s

To generate the negative of a positive number, the pattern is to "NOT" the positive number and add 1 (NOT is a "logical" operation, which will be touched on in a future post). This encoding of negative numbers is called "2's complement". Other encodings have existed to be sure, but 2's complement is very natural when considering finite precision arithmetic, and simplifies circuit design by eliminating the need for a separate subtraction circuit in alongside the addition circuit.

A few things to note about 2's complement signed numbers. Notably, the top most bit is called the "sign bit". The name is obvious when you recognize that the bit is "set" (equal to 1) for negative numbers, and "reset" (equal to 0) for positive numbers. It should also be said that while a 2's complement number has the same amount of combinations as an unsigned number of the same width, the maximum value of the signed number is (roughly) half of the unsigned number. This is because half of the signed numbers must be negative. In fact, given an n-bit number, unsigned values are between [0,2^n-1], while signed are between [-2^(n-1),2^(n-1)-1]. For an 8-bit machine, unsigned numbers have the range [0,255], while signed are [-128,127]. If you've ever dabbled in finding cheat codes, do these numbers seem familiar?

The previous addition program can be a subtraction program:

.origin $00:8000

LDA $00:0000 // Load (RAM) memory address into A
SEC // Set carry (more on this next post)
SBC #$0A55 // Subtract (with carry) constant value of #$0A55 to A and store at A
STA $00:0000 // Store A to (RAM) memory address

>> No.2867412
File: 8 KB, 200x200, dwn_020_hardman_by_jokernaiper-d5p5i66.jpg [View same] [iqdb] [saucenao] [google]
2867412

>>2867359
Before going on to logical operations, I want to mention the processor status flag register. All modern machines have one, and as the name suggests, the register resides on chip. What the status flags are vary by processor, but generally they tell you about results of recent computations and various design-specific settings.

Universally processor status registers have 4 flags relating to arithmetic. They are:

C: Carry
The carry flag has been manipulated in the 65816 code snippets of >>2863865 and >>2867359 by CLC and SEC respectively. The purpose of the C flag is twofold. Firstly it acts as input to the addition/subtraction instructions. Clearing the carry is important when adding, otherwise it's like adding an additional 1 to the result. Setting the carry before subtraction fills the roll of the "+1" in the 2's complement "NOT+1" algorithm. Secondly it acts as output to addition/subtraction, informing when a result is too big for the register. This can be used to add/subtract numbers larger than the precision of the machine by many additions (ie add 16-bit numbers on 8-bit machine using 2 8-bit additions linked by carry).

Z: Zero
The zero flag is updated when the processor performs math operations. If the result is zero, the flag is set, otherwise reset. This is examined when determining if things are equal via subtraction (ie if a-b=0, then b=a).

V: Overflow
This flag tells you when a signed result is too big for the precision of the machine, much like how the output carry works when adding unsigned numbers.

N: Negative
The negative flag is updated to equal the sign bit of the last math operation. This is examined when determining if things are larger or less than each other via subtraction (ie if a-b<0, then a<b)

By the way >>2866867, this is the hardest math you will encounter. Everything else is a cake walk. If you are thinking about isomorphisms between quintets of binary digits and hex digits, then you clearly have a mind for this stuff.

>> No.2867508

Ok, i want to make a romhack. i can read asm. i just think its hard to see why certain numbers are loaded etc. Any tips? i guess just reading and thinking

>> No.2867528

>>2867508
Elaborate some. Reading about the hardware you're programming against (memory map, registers, etc.) sheds light on lots of things. You figure out game-specific stuff by working from there, or by educated guess.

>>2866867
This is a great way to understand how computers work on a fundamental level, if you're into that sort of thing. I mostly owe learning C and hacking to understanding how computers work rather than seeing them as blackboxes.

>> No.2867781

I homebrew general no longer a thing?

>> No.2868445

>>2867412
>>2867528
Cool, so I had a lot of the math I'll need down, and I can practice and pick up what I need along the way. What do you guys suggest I do to learn more about tech/computers? Have any resources? I don't even know how to emulate or torrent. Should I just start learning machine language and then dabble in some lower level language like C?

>> No.2868468

>>2868445
Sorry, I don't mean to detract from the thread. I realize I have a lot of remedial work to do, and that a lot of it will have to be done on my own accord. I asked /g/ for help but they were kind of assholes

>> No.2868919

>>2861869
>>2861936
>>2862098
>>2863542
I've played a lot of good hacks that work on my SD2SNES but I am looking for some other fun games. I am not interested in the boss rush mode of Donkey Kong Country (The only hack on the list) but there was a harder version that somebody made and I couldn't get it to work with my SD2SNES.

I just want some more games that feel close to the original and aren't just "Omg this is no fun because you need to time perfect jumps and don't get any power ups" or people going crazy with a new unique style of gameplay that feels very glitchy. A good example of the unique style was a Super Mario World hack I played where you are Yoshi and it tries to emulate what Yoshi's Island was like but it's not as good and frustrating to play.

It would be nice to get a compatability list going for the SD2SNES and other hardware people are using.

>> No.2868938

>>2868919
It would be much easier to make a list of what doesn't work, and even that would mainly consist of older SMW hacks that used AddMusic.

>> No.2868981

>>2868938
Ok thanks, I'll try and keep track of what does work for me and what is fun and maybe get a list going so other people can know. There are a lot of lame/incomplete hacks out there, especially for SMW.

>> No.2869148
File: 20 KB, 235x234, Top3.gif [View same] [iqdb] [saucenao] [google]
2869148

>>2867412
Addition and subtraction are as hard as the math gets. The rest is easy...

Moving on to the logical operators AND, OR, and XOR (Exclusive OR). These operations are interpreted to operate on the boolean values of "True" and "False", typically encoded as "1" and "0" respectively, and work much like there natural language counterparts. For instance, AND is "True" only when both the first input _and_ second input are "True". OR is "True" only when either the first _or_ second inputs is "True". Notice when we say "or" in natural language we typically mean "either or", but mathematical OR is "True" even if both inputs are "True". If you want to exclude this behavior, XOR is the appropriate operation. Below are the truth tables for the logical operators, much like the addition table of >>2859709.

AND
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

OR
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

XOR
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

Some remarks:
0) Applying these operations to hex or decimal digits produces output with little meaning unless you can quickly convert to binary.
1) These three operations can be used to synthesize any of the 16 total binary logical operations. Such a "complete" set is not unique (actually all you at minimum is NAND or NOR), but these operations are very easy to reason about.
2) AND is often used to reset specific bits, or to isolate bits using by using a "bit mask".
3) OR is often used to set specific bits.
4) XOR is often used to invert bits. XORing a number with a string of 1s is equivalent to NOTing that number.

Logical operators are used mostly to work on bits directly or perform tests that are used to make decisions.

>>2868445
Don't start with machine language. I strongly recommend learning C. The reason is that assembly is unique to every processor, whereas C is essentially portable assembly. You'll appreciate, C, assembly, and computing much more if you master C first. Also asking questions is on topic, not derailment.

>> No.2870579
File: 32 KB, 460x276, 1443212843195.jpg [View same] [iqdb] [saucenao] [google]
2870579

>>2869148

>> No.2870935

>>2862132
Oh, I didn't notice I got this response. Thanks! I just played it. Now you're collection is loaded on my Everdrive

>> No.2870984

>>2868981
Hey there anon, I've got a SuperED, and I've been playing some of the "top tier" hacks for SMW on it to see which ones are actually playable on real hardware. Just a heads up, you may need to do extensive testing. I had been playing through SMW 2+3: The Essence Star and thought it was working fine. After about 5 hours, I encountered something that made it hang the system hard. So far Super Mario Bros. 3 X is working fine though.

Also, The Second Reality Project Reloaded locks up as well, which is a shame.

>> No.2871128
File: 4 KB, 370x400, spark_man_sprite__mm3__by_blue__bomber-d85r7zi.png [View same] [iqdb] [saucenao] [google]
2871128

>>2869148
Next up is the roll/shift operations. These are really easy to grasp.

First, the shifts. There are two types of shift operations, shift left and shift right. They do pretty much what you'd expect; they shift the bits in a number over by one bit in the specified direction, whilst moving in a 0 bit. For example, lets left shift on a 4-bit computer the number 5 = 0b0101:

ShiftLeft(0b0101) => 0b1010 = 10, carry = 0

One thing to notice about the above is that 10 is twice that of 5. This isn't a coincidence. Shifting left is effectively multiplication by 2. A similar thing happens in decimal; when you shift a number left you multiply by 10. In other words shifting left multiplies a number by the base you're shifting in. On a computer you always shift binary numbers, so the factor is always 2. As mentioned, a 0 is shifted into the first position. Furthermore the last bit that gets shifted out is placed into the Carry flag of the program status register (the carry flag gets used for lots of things).

Shift right works exactly like shift left, but the bits move right instead. Likewise this can be thought as division by 2. Furthermore the Carry flag can be interpreted as the remainder of the division.

ShiftRight(0b0101) => 0b0010 = 2, carry = 1

The rolls are very similar to the shifts. The only difference is that instead of always shifting in a 0, the contents of the carry flag gets shifted in. The bit that gets shifted out is still put into the carry. In effect the number that's being shifted and the carry form a circular buffer that can be rolled round and round. For example, let's set the carry to 0 and roll left the number 3 = 0b0011 over and over again:

Number, Carry
0b0011, 0b0
0b0110, 0b0
0b1100, 0b0
0b1000, 0b1
0b0001, 0b1
0b0011, 0b0

After 5 iterations we end up back where we started. Unimaginatively roll right works exactly the same, but shifts right.

Typically these operations are used to manipulate bits or perform simple multiplication/divisions.

>> No.2871218

>>2859709
this is a great post in a great thread, ty

>> No.2871659
File: 12 KB, 200x189, 1307576777001.jpg [View same] [iqdb] [saucenao] [google]
2871659

>romhacking.net/translations shows a malware warning when I try to visit it now

s-should I be worried?

>> No.2871664

>>2871659
>trusting google
>using chrome
yes, you should be worried

>> No.2871681

>>2871664
I'm using firefox

>> No.2872001

>>2869148
>>2871128
Thanks. I have Windows 10, do you know of any good IDEs? I've heard Code::Blocks is good but I couldn't find a download for my OS

>> No.2872158

>>2872001
Or should I even use an IDE? Would that defeat the purpose of learning C since I'm not held as accountable of punctuation/syntax (since it has predictive features built in)?

>> No.2872176
File: 36 KB, 500x469, 1394762680687.jpg [View same] [iqdb] [saucenao] [google]
2872176

>>2872001
I have never used an IDE or a debugger (except to backwards engineer games). I feel they are crutches that foster experimental "shotgun" programming rather than trying to encourage one to reason about their programs. IDE's also make you think programming is some sort of impenetrable subject with all their bells and whistles.

All that is required is a text editor and compiler (I use GCC). You can literally write any application with just those two things, from operating systems to applications.

>> No.2872337

>>2868919
all the good DKC hacks are Japanese, check out the AneSDK series

http://ux.getuploader.com/donkeyhacks/

They work on my Super Everdrive. Make sure that you're managing your headers correctly, if the hack requires you to patch a headered rom then you need to remove the header before putting it on your flash cart.

>> No.2872381

>>2872176
I like your style. And thank you for your patience with my questions. This is the first time I've ever encountered this sort of stuff, but already I feel I've learned a lot.

If I am diligent, how long would you estimate it should take to eventually get to ROM hacking?

Also, what should my plan of attack be after learning C? I'm using this

http://www.moreware.org/books/Kochan%20-%20ProgramminginC.pdf

as a tutorial, and referencing this

https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf

as needed. Thanks again.

>> No.2872861

>>2872381
> how long would you estimate it should take to eventually get to ROM hacking?
I would say download a debugging emulator along with your favorite game and start immediately. It can be informative and fun just messing around with memory and seeing how a game reacts, even if you literally have no idea what you are doing. For instance, you could locate level data in RAM easily by randomly corrupting memory regions and looking for changes in the current level. No assembly required.

> I'm using this ... as a tutorial, and referencing this ...
The first link seems a little verbose to me, but may be perfect if you've never programmed before. The second link is the book written by the designers of C, and is pretty much the bible on the subject. The only thing I need to caution you against is that ancient C had really weird function declarations which are totally obsolete and unused now, but skimming the linked pdf, it appears the modern function prototyping is utilized instead, which is good.

>Also, what should my plan of attack be after learning C?
Honestly C won't directly help you hack a game because you don't have access to source code, but indirectly knowledge of C, structured programming, and how it maps to assembly is terrifically useful in reverse engineering because you'll pick up on coding patterns very quickly.

The last item in the above list "maps to assembly" is the most enlightening one in the context of hacking. C is great because it is essentially portable assembly, but a C novice won't appreciate that. I'd suggest the next step is to see how this mapping works. This will also get your feet wet with the assembly language of your choice. Once you get the gist of this, with some effort you'll be able to decompile code, which is very useful for organizing your understanding.

I like to view hacking as a massive cryptogram or puzzle. Pick something simple in a game that you want to change and enjoy trying to solve how to hack it.

>> No.2872964

I NEED TO KNOW IF BANJO TOOIE EVER HAD ANYTHING MORE INSIDE GRUNTY'S LAIR

THE SECRET HAS BEEN KILLING ME FOR 9 YEARS IT HAS THE TWO DOORWAYS

>> No.2873042
File: 204 KB, 394x523, 1426628965935.png [View same] [iqdb] [saucenao] [google]
2873042

>>2872964
Shit, I forgot this bothered me so much also. I hope they mention it, even if it's brief.

>> No.2873231

>>2872964
>>2873042
If it's not on TCRF it probably doesn't exist

>> No.2873565

Holy shit. The autism and spaghetti is flowing.

http://www.romhacking.net/forum/index.php/topic,20893.msg293512.html#msg293512

Some doofus is claiming responsibility for the malware flags on romhacking.net's pages, and claiming that they've actually infected legitimate downloads with malware.
Dude doesn't even understand how virus scanners and malware work.
Also some retarded ass "we are anonymous" shit.

Worst case scenario: Take the site down for a bit, run all the files through some scanners, set aside flagged shit for further investigation. Get rid of the unmoderated scratchpad, and set up some sort of system to verify file hashes against virustotal (requiring users to run an upload through it before uploading to the site, so the hash would be in the virustotal database), to ensure files are clean.
Sort out the listing on google's malware flagging shit, and life's all good.

I checked the site with virustotal, and the only thing found on the single scanner that flagged it was a link to acmlmDOTkafukaDOTorg.

>> No.2874313

>>2873231
That's a wrong way of thinking. I've found shit on several mainstream games that still aren't on tcrf.
The best way of checking for unused things is not by going to tcrf, but by investigating yourself.

>> No.2874320

>>2874313
Obviously someone has to actually put stuff up on TCRF in the first place. But if you visit the TCRF page for Banjo-Tooie there's enough stuff there that it would be highly unlikely that none of the contributors found a hidden room, that's all I meant. It's just a nicer way of saying "google it".

>> No.2874390

I'm wondering, if the people who made these games tested the games by save stating every five seconds.

>> No.2875448
File: 24 KB, 640x448, Sonic the Hedgehog - Next Level (SHC 2015 Build)000.png [View same] [iqdb] [saucenao] [google]
2875448

http://pastebin.com/pYxhe4L7

Here's a big update adding more than 20 hacks, including Mario Gives Up III, Rockman 5: Double Jumper, Sonic: The Next Level and more.

>> No.2875453

Does anyone know a good guide to getting started programming for PCE using assembler? I've found a few guides for HuC, but that is C and comes with an entire library and all and would feel a bit like cheating.

I'm talking something that would teach me instructions and common memory maps for different thingamajigs etc. Also where to get a good toolkit for assembling and producing rom images (I'm thinking here the HuC kit might have the tools though) using Linux as my OS.

Cheerio.

>> No.2875635

>>2875453
unless you're gonna help with the legend of xanadu translation then give up senpai, there are LITERALLY no other pce games worth translating

>> No.2875879

>>2875635
what about the golden era of Japanese visual novels, anon

>> No.2876151

>>2875635
I was more looking to do some homebrewing, really.

>> No.2877926

>>2871128
Bump. Been away on holiday. I'm glad one person is getting something out of this. Any lurkers?

>> No.2878017

>>2858565
or pokemon

>> No.2878604

Question: Is Toby Fox's Halloween Hack worth playing?
I haven't played Undertale so I don't know if this dude is legit or not. I love Mother 2 though.

>> No.2878658

Is there a torrent of all of those media fire making me sign up for a pro account

>> No.2878659

>>2878604
Toby considers his Halloween hack to be an old shame, he doesn't recommend playing it because it's pretty bad. Undertale I think is actually good though, you have to keep in mind he was younger when he made the Halloween hack.

>> No.2878745

>>2878604
>>2878659
Isn't he a furry?

>> No.2878753
File: 36 KB, 540x675, 1443321101629.gif [View same] [iqdb] [saucenao] [google]
2878753

>>2878745
I'm actually not sure. I wouldn't call Undertale a furry game but it definitely has a few characters that furries have latched on to (unfortunately), the goats especially. Whether they were made with a furry mindset or were made innocently and just overtaken by furries like many anthromorphic animal characters I don't know.

Undertale isn't retro though, sorry if this is derailing.

>> No.2878760 [DELETED] 
File: 452 KB, 416x586, 1449290791266.png [View same] [iqdb] [saucenao] [google]
2878760

>>2878753
Wow undertake? Really I thought we were better than this.
N O T R E T R O
O
T

R
E
T
R
O

>> No.2878761

>>2878659
Oh, ok.
I already played the game with the MaternalBound Omega hack during the summer and I was looking for some more. I'll take a look at the ones recommended in op's link.

>> No.2879837
File: 80 KB, 500x442, 1440140066272.jpg [View same] [iqdb] [saucenao] [google]
2879837

Just now finished with family gatherings for Christmas, so bumping to buy time to explore further and formulate meaningful questions

>> No.2879850

So not exactly /vr/, but, if I wanted to play FFV or FFVI what would be the best hacks to use with them? I've played them before in their default forms, but, I want to 'fix' and 'improve' the game if you will.

Also does anyone know what's up with romhacking.net? They seem to be having a lot of issues right now. I need to make an account to download hacks now what?

If it's with the gameboy advance version please spoiler since it's not /vr/.

>> No.2879857

>>2878604

Quick word of advice, friend. It was made by a 15 year old who had a potty mouth, but damn was he a wizard at coding, especially since Mother 2 romhacks were rare because the game was infinitely more complex than a Mario game.It's definitely worth at least one playthrough, if only to hear the final boss's dialogue.

>"I am going to shove your ass down your throat so far that when you fart you'll sing fucking beethoven! tl;dr eat shit faggots!"

It's... charming to say the least.

>> No.2879858

>>2879850

Dunno about FFV, but I will recommend FF6 and the "Brave New World" hack. It fixes everything about the game, adds new AI scripts, new items, a revamped battle system, a revamped magicite system, and even fixes some of the large segments of the story. Also, you can't cheese it anymore by teaching everyone 4x ultima or vanish + doom.

Overall, I give it a hearty clap of applause.

>> No.2879910
File: 103 KB, 506x662, WebDev With Assembly.png [View same] [iqdb] [saucenao] [google]
2879910

>>2854976
Hypothetically, (say with a full team working full time) could a game be ported from the Playstation to the Nintendo 64? I'm especially curious if the tools are even present for such a project.

I'm aware that a number of games were ported from the PSX to the N64 (Mega Man Legends and the Mortal Kombat games, among others) I'd be curious to know if this process was essentially rebuilding the entire game as I assume it was though.

>> No.2879928 [DELETED] 
File: 17 KB, 440x310, autism.jpg [View same] [iqdb] [saucenao] [google]
2879928

>>2879850
>If it's with the gameboy advance version please spoiler since it's not /vr/.
AWWWWWWWWWWWWWWTISM!!

AWWWWWWWWWWWWWWTISM!!

AWWWWWWWWWWWWWWTISM!!

AWWWWWWWWWWWWWWTISM!!

AWWWWWWWWWWWWWWTISM!!

>> No.2880165

>>2855204
>I want to get more people interested in hacking and get more of a community going here on /vr/.
Damn, that would be so good. I haven't hacked anything in more than 10 years, but that's what got me started into pixel art and eventually made turn to programming.
Now thanks to your post I want to hack something again, hope to find the time someday.

>> No.2880479

>>2879857
The Mother 2 editor is super advanced and has a billion features though. I wouldn't say he was a code wizard per se, but... very determined.

>> No.2880658

>>2880479
it's weird how we have all of these great editors for SNES games and nothing but crappy hacks to show for it

>> No.2881043

>>2879858
>4x ultima or vanish + doom
ACTUALLY the most ultimas you can cast in a single turn in vanilla FF6 is 5x, and doing it properly triggers a glitch that causes your ATB to not reset, allowing you to immediately take your next turn

>> No.2882470

>>2879850
I'll second Brave New World. For every stupid reference and dumb script change there's one that's actually good and gameplay-wise it makes FF6 a legitimately challenging game where you can go all out on optimizing your characters and it'll still be a tough game.

And despite what people say, it is entirely possible to beat the game without looking at the printme.

>> No.2883562

bump

>> No.2885204

>>2879910
>I'm especially curious if the tools are even present for such a project.

I've never heard of anything like that. Is Nintendo 64 homebrew scene even a thing?

>> No.2885236
File: 2.28 MB, 1440x1080, amarec20151230-152340.png [View same] [iqdb] [saucenao] [google]
2885236

>>2885204
ehhh not really? I've made a couple things and have friends that poke around various n64 stuff but nothing of too much note

picture is my work

>> No.2885249

>>2879910
>Hypothetically, (say with a full team working full time) could a game be ported from the Playstation to the Nintendo 64?
Theoretically, sure; However if you want the best results, you might as well look for an ex-Angel Studios employee to help you.

>> No.2885398

>>2858014
HYPED

>> No.2885640
File: 2 KB, 82x90, images.png [View same] [iqdb] [saucenao] [google]
2885640

>>2871128
We just got through discussing 9 math operations and 4 status flags that are nearly universal on all processors. I introduced the some assembly and the idea of addresses, the Program Counter (PC), a typical instruction execution cycle, and basic load and store instructions. Now I want to touch a little on program flow.

As mentioned before, the PC holds the address of the next instruction to execute. Therefore the topic of program flow is about how the PC is updated. There are 5 primary mechanisms: vectors, normal execution, jumps, calls, and branches.

When a computer first turns on, some initial value for the PC needs to be set. This is often determined by the data located at a processor-specific memory address called the "RESET" "vector". The data at this vector is simply a number representing the initial PC address. Vectors other than RESET exist and are used to implement various hardware features, most notably interrupts. Once the PC is loaded, the processor cyclically executes instructions.

Under "normal execution", once an instruction is fetched at the address pointed to by the PC, the PC is incremented to point to the next address. When this happens cyclically, a computer executes a program in a linear fashion, much like how you read a set of driving directions or recipe.

To set the PC to an address different than the next greatest address, the most direct way is to simply load a new address into the PC register, also called a "jump". If the new PC is greater than the old PC, this doesn't introduce anything new. If the new PC is less than the old PC, the possibility of a looping program becomes viable. However without decision making, only infinite loops are possible.

>> No.2885661

>>2885236
I thought that demo was really cool. What other projects do you work on?

>> No.2885671
File: 9 KB, 160x160, 1823577-th_rush.png [View same] [iqdb] [saucenao] [google]
2885671

>>2885640
To overcome the limitations of decisionless jumps, conditional "branches" test memory to determine if they need to branch or not. Branches are predicated on the state of a processor status flag as specified by the branching instruction. If the test fails, the PC is incremented normally. If the test passes, the PC is loaded with a new address. Sometimes this new address is specified as a "relative offset", meaning that a number (positive or negative) is added to the PC to yield the new PC. This introduces the possibility of "relocatable code", which doesn't rely on absolute, and is often more memory efficient because a full address doesn't have to be specified.

The last class of program flow instructions are similar to jumps, but different in that they remember from where the jumped from. Such instructions are used to implement function "calls", and are used to modularize and reuse code. Typically when a "subroutine" instruction is executed, the current PC is stored in a specialized data structure called the "stack", and then the PC is loaded with the new address like with a jump. When the subroutine finishes, a "return" instruction is executed that restores the value on the stack to the PC and increments it to point to the instruction following the subroutine call.

More on stacks. A stack is a basic data structure that is implemented in hardware as a register S that hold a memory address. When data is "pushed" onto the stack, the data is stored at the address pointed to by S, and then S is incremented (or decremented, depending on processor). When data is "pulled" from the stack, data is loaded from the address pointed to by S, and then S is decremented (or incremented, see previous note). This happens to be the perfect data structure to implement nested and recursive functions. The stack is useful for other reasons, and can usually be poked at. Be forewarned, anything that goes on the stack, must come off the stack, or else!!

Next: actual assembly

>> No.2885946
File: 145 KB, 640x480, ra54bca7515671b5a8c.png [View same] [iqdb] [saucenao] [google]
2885946

>>2885661
nothing that got completed, besides the 64drive and hdmi project.

here was a model ripped from Fable 3 and rendered on the N64 (it was very slooow..)

>> No.2885949
File: 1.34 MB, 2592x1944, ra54ea2585547d84b43.jpg [View same] [iqdb] [saucenao] [google]
2885949

>>2885946
wrong images, racecar works too

>> No.2886413

Can someone help me figure out how to patch a rom?

I can't get it to load no matter what I do. I use the ips file with lunar ips, it patches the rom successfully. Then when I boot it up, it says bad checksum at the bottom. It loads a white nintendo screen, then hangs on a black screen after that.

The rom is Super Mario World, and the patch is TSRP Reloaded. I got it from their site so I don't see why it would'nt work. Is there something I'm missing? Haven't done this much before

>> No.2886546

>>2886413
For SNES games, the most common issue is that some roms have headers and the patch can only be used on either the headered or the unheadered rom. Sometimes the hack's readme will tell you which one, sometimes it won't. Check which kind of rom you used, and then try the other. Both kinds of roms are commonly available, but there are also ways of adding/removing the header yourself. The header is just 512 bytes of unused data at the beginning of the rom file, so you can put anything you want in there.

>> No.2886654

>>2886546
>>2886413
SMW hacks always requires headered rom.

Run your (original, unpatched) rom through this:
http://www.smwcentral.net/?p=section&a=details&id=12178

Then patch the ips file again and it should work.

>> No.2886669

>>2886654
Never say never. That might be the case if you get the patches from a database with strictly enforced submission guidelines, but it's certainly very easy to create a patch for an unheadered rom from a headered hack, and there certainly are people with a reason to do so and share it.

>> No.2887492

>>2886654
>>2886546
That tool worked like a charm, thanks guys.

>> No.2887530

>>2886654
>>2887492
Actually, after playing it a bit, I've had multiple problems such as the sound going out (once just the music, then all sound) and the screen going completely black, emulator still running of course. TSRP is pretty popular, so I'm guessing it must be on my end. Any ideas?

This has happened with other romhacks in the past, I have bad luck with these things. All other regular roms run fine

>> No.2887549

>>2885236
>>2885946
marshall?

>> No.2887563

>>2887530
Probably the emulator. Using Znes? That one is pretty easy to break.

>> No.2887579

>>2887530
Many older SMW romhacks exploit a glitch in ZSNES to play music. You probably need to use ZSNES to get it to work.

>> No.2887582

>>2887563
no, snes9x. What would you suggest other than those 2?

>> No.2887614

>>2887582
>>2887530
Sadly some old SMW hacks has problems with custom music(and never got updated so that they work on more accurate emulators/real hardware), so if that happens use Zsnes or old snes9x.

>> No.2887695
File: 53 KB, 600x800, C__Data_Users_DefApps_AppData_INTERNETEXPLORER_Temp_Saved Images_CWD2rBVUEAADe9Q.jpg [View same] [iqdb] [saucenao] [google]
2887695

>>2887549
on the internet nobody knows you're a doge

>> No.2888824

Is there still somebody hacking Baroque for the PS1?

>> No.2889374

>>2855204
Ayy, can I do anything with the book that I bought for this purpose? (Note: No prior programming experience on my part.)

https://books.google.com/books/about/Assembly_Language_Programming.html?id=EoUpAQAAMAAJ

>> No.2889391

>>2888824
Hell, has there been any progress on any PS1 game aside from translations and all that? I know there has been some strides regarding the Spyro and Crash series games but that was months ago.

>> No.2889594

>>2889391
Don't forget that one guy who was making a level editor for SotN, up until he decided it would be easier to just rewrite the entire game in Unity or whatever.

>> No.2889951

>>2885671
You truly are the best anon I've seen. Just recently I've gotten into computer science but so far only did math oriented classes, so it was an interesting read for sure. Looking forward to read about assembly. Is there any bibliography on the subject you would recommend to expand on what you wrote/will write or the ever trusty google will do just fine?

>> No.2890094 [DELETED] 
File: 5 KB, 339x53, Mar 13, 2015.png [View same] [iqdb] [saucenao] [google]
2890094

IMMINENT

>> No.2890124
File: 6 KB, 348x253, 34h6pw6.png [View same] [iqdb] [saucenao] [google]
2890124

>>2885671
I have been light on assembly, mainly because specifics are processor dependent. There are common themes across machines, but also much diversity in architecture and capabilities. Most importantly all processors are Turing complete, meaning given enough memory and time can compute any algorithm.

I'll give examples in 65816, part of the 65xx family found in the C64, Apple ][, NES, and SNES. Although its design is quirky, ideas picked up from learning one assembly language transfer quickly to others. Let's talk about the most important aspect of a processor to a programmer: its architecture. Architecture defines what registers are available and their function, what instructions are available, and what addressing modes are available to those instructions.

The 65816 has only 8 registers. Adopting a popular older design, there is just a single general purpose register called the "accumulator" A that performs all math. Two additional "index registers" X and Y assist A, but are more limited in functionality, a feature common to RISC (look it up). The "program status register" P flags "nvzc" are set when operating on A, X, and Y. 65xx unique P flags "mx" control if A, X, and Y are 8-bit or 16-bit, "d" enables decimal arithmetic, and "i" suppresses maskable interrupts (more later). The "program counter" PC is 24-bits, with the complication that the upper 8 bits specify the "program bank" which no code may cross for backwards compatibility reasons. This segmentation strategy makes specifying "data bank" B sometimes necessary. "Stack register" S works as described, but is notably only 16-bits, constrained to always be in bank $00. The "Direct Page" D, used to specify memory efficient addresses (more later), is also always in bank $00.

A : Accumulator (8/16-bit, per m)
X : X index (8/16-bit, per x)
Y : Y index (8/16-bit, per x)
S : Stack (16-bit)
D : Direct Page (16-bit)
P : Processor Status (8-bit, nvmxdizc)
B : Data Bank (8-bit)
PC : Program Counter (24-bit)

>> No.2890614

>>2889374
learning assembly will help but keep in mind that every console uses its own specific flavor of assembly

>> No.2890867

>>2890614
Yes but will I be okay with the book without having any prior programming experience?

>> No.2890990

>>2890124
Should someone make a pastebin for these helpful posts? They're pretty informative and I think it would be a shame to lose them when this thread gets archived.

>> No.2891140

>>2890990
I'm afraid we're getting to the point where pretty informative posts start becoming purely informative. As in, quirks of 65xxx processors won't be of much use for less ancient PlayStation family (MIPS) and Nintendo DS (ARM) game hacking, which are more popular targets for hacking I think.
Here's a real life example of reverse engineering PS2's MIPS game:
http://www.codemasters-project.net/portal-english/apportal/cmp_plugins/content/content.php?content.62
See also Code Guides section there for more PSx hacking examples.
Imageboard isn't as suitable for tutorials as a dedicated website is, and using relatively uncommon examples only worsens the situation.
That said, I'm still grateful for these posts, they make PS2 disasm seem less of a chore in comparison.

>> No.2891223

>>2891140
>Imageboard isn't as suitable for tutorials as a dedicated website is, and using relatively uncommon examples only worsens the situation.
Can't we just save them somewhere else? How the site works shouldn't matter much.

>> No.2892060

>>2890867
Eh, it's hard to say without reading the book myself. There's a good chance it'll skim over topics that it would expect a programmer to be familiar with, like bit arithmetic, loops, and conditionals.

>> No.2892264

>>2892060
Okay, thanks. I bought a udemy course on Ruby so I think that may help me.

Please don't message the mods, but I'm underage. I blew off all my money on Steam games, so I can't buy any udemy courses that decided to go on sale now, like C or binary.

>> No.2893184

>>2878760
Actually relevant to the retro discussion going on.

And it's a good game that started as an Earthbound ROM hack.

>> No.2893396

>>2893184
It's not relevant. Undertale did not "start as an Earthbound ROM hack". The Earthbound Halloween hack is a different game that the developer (barely) re-used assets from.

/vr/ is not for discussion of indie games with a retro aesthetic, we've been over this many times.

>> No.2893725
File: 2 KB, 78x81, santa.jpg [View same] [iqdb] [saucenao] [google]
2893725

>>2890124
Knowing the processor architecture is half of the story. Knowing how that processor is hooked up to the system and memories it controls via its address bus, data bus, and control lines is the other half. This is unique for each system, but once again most concepts transfer quickly.

How the address and data buses are connected to memories defines the memory map. The concept is simple: given an address, what unique memory chip location is accessed? In general an address will reference a RAM location, a ROM location, a hardware register (external to the cpu, more later), or be unmapped. A single address will always be associated with a single memory location (ignoring memory mappers that swap out ROMs via special hardware registers). However a single memory location might be accessed by many addresses. To illustrate all this with a real example, lets examine an (abridged) SNES memory map (see http://www.romhacking net/community/548/):

$00:0000-$00:1FFF : RAM $00:0000-$00:1FFF
$00:2000-$00:7FFF : SNES Hardware registers
$00:8000-$00:FFFF : ROM $00:0000-$00:7FFF

$01:0000-$01:1FFF : RAM $00:0000-$00:1FFF
$01:2000-$01:7FFF : SNES Hardware registers
$01:8000-$01:FFFF : ROM $00:8000-$00:FFFF

...

$7E:0000-$7F:FFFF : RAM $00:0000-$01:FFFF

...

Notice the first $2000 addresses of banks $00, $01, and $7E access the same RAM chip locations, the next $6000 addresses for banks $00 and $01 access the same hardware registers, while the last $8000 addresses of banks $00 and $01 map to different ROM chip locations. The entirety of RAM can be accessed in banks $7E and $7F. This may seem like an extremely odd and wasteful mapping, however this takes great advantage of the banking strategy employed by the 65816 to reduce the number of bytes needed to specify full addresses when programming, substantially reducing both the program size and time needed to access extra instruction data during execution.

Next: Instructions, Opcodes, Operands, and Addressing Modes

>> No.2893772
File: 28 KB, 771x786, 6AYwYVkh.png [View same] [iqdb] [saucenao] [google]
2893772

>>2889374
>>2890867
I learned assembly by myself and a short online tutorial a little before and during learning C freshman year in college. It was incomprehensible at first, but ultimately I picked up low level software engineering better than anyone else I know because of it, granted there aren't many people interested in metal anymore.

Those books cover the 65xx and 68k series, which are used everywhere in retro systems. A manual is much better than an online tutorial, but much more wordy. I suggest you find a system and game you want to hack, learn the assembly with one of those books, and look at some disassembly vomited out by an emulator to see how much you can read as you go.

If you're interested in 65xx, I'd highly suggest this book: http://wiki.nesdev.com/w/images/7/76/Programmanual.pdf

>>2889951
watch this faggot's 6.004 lectures on computer architecture:
https://www.youtube.com/watch?v=CvfifZsmpQ4
they are fucking fantastic. They walk you through building a preocessor from the logic gate up to assembly languages and compilers. I found this guy after learning all of this stuff, but its great to see it all so masterfully covered in such a condensed set of videos.

>>2891140
Eh, commodity retro
processors are pretty much variations on the same design.

>>2893396
Just curious, would a game developed for a retro system be retro?

>> No.2893790

>>2893772
>Just curious, would a game developed for a retro system be retro?
Yeah, I'm pretty sure homebrew is considered retro if it's for a retro system. It's kind of a grey area, just like romhacks.

>> No.2893982

Just saying this here in case anyone who might be interested is unaware, back in 2008 some guy bought some hard drives off of ebay, turned out they contained the source code for B.O.B. Not only is complete professionally made source code neat to look at, but it also has a number of wonderful comments.

>;SCREAMING HAND
>;handtask:
>;ADAM MADE ME TAKE THIS OUT. HE IS SUCH A MEANIE.
>;chris fudge for final boss
>;** entry point for other tasks that want to explode dahling*
>;what should the friggin' borg do now, weeniehead?
>;chase Bob-o, bonehead!***
>;was old puss man boss task deathbosstask:
>;OOOOOOOOOHHHHH... IT'S SHADOW MAN!
>;OK... THIS IS SCARY STUFF, BOYS AND GIRLS!
>@vanish:
>;now shadowman fucks off!
>lda #shadow_vanish
>;skip skipped parts (huh?)
>;send out little fucker
>@killthefucker:
>;the weenie and his partner
>;made me take it out!

Judging by the comments, there was some items the programmers were forced to remove, possibly by some asshole named Adam.

>> No.2894025

>>2893982
Damn, that's a really nice find. I googled it and found the link where it can be downloaded:
http://wiki.superfamicom.org/snes/show/Space+Funky+B.O.B..

>> No.2895545

>>2889391
There's Symphony of the Night Hard Mode. Sadly, there's not much else beyond that. There are a few Crash 2 hacks out there but they only change enemy/crate placement.

>> No.2896680
File: 500 B, 143x154, wilyscare.png [View same] [iqdb] [saucenao] [google]
2896680

So what exactly is assembly? Assembly is the human readable representation of "machine code", the native binary language of a processor. Machine code is composed of binary data representing the instructions, or "operations", of a program broken down into "opcodes" and "operands". Opcodes inform the processor of what operation to perform and what addressing mode to use, while operands are arguments to opcodes that determines what is operated on. Assembly then is the one-to-one mapping of machine code opcodes and operands to text. Operations are represented by short "mnemonics" typically followed by an argument with additional syntax to denote an addressing mode. An "assembler" is simply a program that converts an assembly text file into a binary machine code file. All good assemblers have additional features that facilitate programming, such as identifier declarations or macro expansion.

Let's illustrate these ideas with the 65816 using the SNES memory map in this post >>2893725. Assume the PC is already set to $00:8000 (ROM) somehow. Below is a program that loops forever adding 1 to $00:0000 (RAM) every iteration. This could be used (with some additional ideas) to, say, experimentally count how many operations you can perform per TV frame.

Machine code: (kinda, this is ascii, real machine is in binary. know the difference!)
$00:8000 C2 20
$00:8002 AF 00 00 00
$00:8006 18
$00:8007 69 01 00
$00:800A 8F 00 00 00
$00:800E 80 F6

Assembly:
$00:8000 REP #$20 // m=0, put A into 16-bit mode
$00:8002 LDA $00:0000 // Load $00:0000 into A
Loop:
$00:8006 CLC // c=0, clear carry before each new addition
$00:8007 ADC #$0001 // Add w/carry $0001 (not value at address $0001!!!), store the result in A
$00:800A STA $00:0000 // Store A at $00:0000
$00:800E BRA Loop // Branch always to beginning of loop (ie sets PC to $00:8006)

[cont in next post]

>> No.2896684
File: 5 KB, 268x199, gamma.gif [View same] [iqdb] [saucenao] [google]
2896684

By referencing previous posts, you should be able make out this code snippet, even though REP, BRA, and the label is new. On the left are cpu addresses of the code. On the right is machine code/assembly. Clearly machine code would be a pain to program, so assembly is designed to make it easier to read. Let's look closer at an machine code instruction and see how it maps onto assembly:

address | machine | assembly
$00:8007 , 69 01 00 , ADC #$0001

On the left is the address of the instruction in ROM. This is useful when debugging, but not part of the actual code.

In the middle is the machine code; the first number happens to be the 65816 opcode for "immediate add with carry", while the next 2 numbers are the operand. In this case the argument is the number 1.

On the right is the assembly. "ADC" is the mnemonic for "add with carry". To know what opcode this corresponds to, we need to know the addressing mode. In this case the addressing mode is denoted by the "#" and is "immediate addressing", indicating the number $0001 is the argument (and not the number located at address $0001, a VERY important distinction!).

If instead we use absolute addressing with ADC, the opcode is then $6D.

One thing to notice that's interesting is that the order of the two bytes composing the 16-bit number $0001 are swapped between the machine code and assembly number. This is called "little endian" (as opposed to "big endian") encoding, and is a choice of how to store multibyte numbers in memory. Little endian may seem silly at first because the numbers seem scrambled for no good reason, however the way machines access memory actually make this a good choice when considering adding numbers longer than your machine's word size together; you have to add the "little end" of numbers first to propagate a carry correctly, so you put the "little end" in the smaller addresses! This is almost invisible to programmers but extremely important to know for hackers. Endianess varies by processor.

>> No.2897278

>>2874313
>I've found shit on several mainstream games that still aren't on tcrf.
such as?

>> No.2898417
File: 28 KB, 512x448, Marvelous - Mouhitotsu no Takarajima (J) [T-Eng DackR v1.03]_00000.png [View same] [iqdb] [saucenao] [google]
2898417

>hear Marvelous has a 100% complete translation now
>download it
>boot it up
>see this
what the actual fuck is this blurry mess

>> No.2898467

>>2896680
dude, your approach could use improvement. people who don't know assembly aren't going to read your five paragraphs of generic info, and if they do they won't understand it. you need real examples.

like, start with text. how do i find text? ooh, ascii is easy, it shows up in my hex editor (example link's awakening). huh, i look at pokemon and the text doesn't show up. bam, relative search, oh, i see, text usually follows the pattern "b = a + 1" and ascii isn't the only one.

next step, generic data. check it out, these are the hp boss guy starts with. okay, so these hex byte things in my hex editor are really base 10 numbers represented in a different way. cool, the boss's attacks have numeric ids and i can replace his attacks with whatever attack i want. awesome.

hm, i can change the data in the tables, but i can't add new entries because that causes the game to spaz out. ok, if i move the data to blank space i can expand the size as much as i want. i guess it makes sense that the game has to know where the data is... these "pointer" things aren't so bad.

next step, ram versus rom. okay, i can make some of the changes i want in data tables in rom, but other fun things i just can't do. oh, there's this gameshark code that does what i want. neat, so ram and rom are different things. hey, how do i come up with new gameshark codes? bam, cheat searching / ram dumping / breakpoints.

huh, so the game has this set of byte values that are instructions to manipulate individual memory values. i already have the gameshark code for infinite lives, and you're telling me from that i can figure out how the game subtracts a life each time i die and add it instead? cool. hey, assembly isn't so bad. now i can write code that has more interesting effects than my gameshark. whoa, you're telling me that pointers and half of this gameshark code are the same thing? trippy.

>> No.2898527
File: 1 KB, 80x80, index.png [View same] [iqdb] [saucenao] [google]
2898527

>>2896684
So far I have mentioned "immediate" and "absolute" addressing modes. Let's just enumerate all addressing modes on the 65816.

Due to the 65816Reduced-Instruction-Set-Computer (RISC, pronounced 'risk') design philosophy, not all addressing modes are available for all mnemonics. This is in contrast to Complex-ISC (CISC) computers which try to be "orthogonal". RISCs have won out over the years because they are more simple to implement, more fully utilize the limited number of opcodes available, and more easily allow for unique features.

The 65816 has a wide variety of addressing modes. One major theme is that through certain mechanisms one can specify a full address using fewer bytes than normally required. Understanding how these mechanisms work and how to calculate the "effective address" from knowing the operand and addressing mode is key. Below is a list of addressing modes that specifies the name and syntax of each mode. "ASM" is a placeholder for a valid mnemonic. $??, $????, $??:???? are placeholders for 8-bit, 16-bit, and 24-bit operands respectively. The symbols "," , "()", "[]", "#" have special meaning. I'll explain how to read this in the next post.

Implied // ASM
Accumulator // ASM A

Immediate // ASM #$?? or ASM #$???? (depends on mx flags)

Direct Page // ASM $??
Absolute // ASM $????
Absolute Long // ASM $??:????

Direct Page X Indexed // ASM $??,X
Absolute X Indexed // ASM $????,X
Absolute Long X Indexed // ASM $??:????,X

Direct Page Y Indexed // ASM $??,Y
Absolute Y Indexed // ASM $????,Y

Direct Page Indirect // ASM ($??)
Direct Page X Indexed Indirect // ASM ($??,X)
Direct Page Indirect Y Indexed // ASM ($??),Y
Direct Page Indirect Long // ASM [$??]
Direct Page Indirect Long Y Indexed // ASM [$??],Y
Absolute Indirect // ASM ($????)
Absolute Indexed Indirect // ASM ($????,X)
Absolute Indirect Long // ASM [$????]

Stack Relative // ASM $??,S
Stack Relative Indirect Y Indexed // ASM ($??,S),Y

Block Move // ASM $??,$??

>> No.2898549

>>2898417
There's a bug when using color math and high-res mode at the same time, so I think that only works correctly on higan.

>> No.2898553

>>2898549
as far as I know I'm not using any of those.
really, I'm just using ZMZ with the packed in SNES9x core.

>> No.2898554

>>2898467
Not that poster, but it seems good info. There is no easy way to learn assembly

>> No.2898557

>>2898553
No, the game uses those modes to draw the text and the emulator doesn't handle it right.

>> No.2898559

>>2898557
Oh. Shows how much I know. Thanks for the info then.

>> No.2898562

>>2898467
Yeah, you're totally right. This is kind of me organizing my thoughts on how I would explain it to someone else like a brother or friend, and I definitely would modify my approach if I tried again. I feel that I am kinda going backwards by going from small ideas to big ones, but I hope that will pay off when I actually example hack a game, which will be very soon.

Then again it's hard to condense anything meaningful down to 2000 characters. I want to give some insight into something more than just editing numbers in a binary file, but I sometimes forget how much information there is to pick up at first because I'm fluent in it now.

I hoped people would ask questions if something was unclear. It seems some people are reading, but not participating yet.

I dunno, anyone getting anything out of these last few posts? They're doozies, but I think just being exposed to the terminology and ideas are an important first step.

>> No.2899340

>>2898554
imo, the best way to learn assembly (next to writing it) is to read it. For example take a big disassembly like this:
http://assassin17.brinkster.net/code2i.txt

...and just jump around looking at how various things are implemented. That way you get a real sense of how assembly programs are structured and the practical uses for all of these different addressing modes and shit.

>> No.2899413

>>2899340
I agree. But I think Pokemon is maybe a nicer example. It has the whole game disassembled, including labels for everything and extracting the gfx to png. Plus if you have an assembler you can make your changes and rebuild the modified rom.

https://github.com/pret/pokered
https://github.com/pret/pokecrystal

>> No.2899428

>>2899413
That's good but since it doesn't include the bytecode, it might be difficult for a beginner to see how long the instructions are and try out modifications with a hex editor.

>> No.2899439

>>2899428
It generates a symfile that you can load into BGB, so you can see the bytes and edit them on the fly and save them if you want.

>> No.2899764

Anyone got any reccomendations for games that are /easy to get started hacking with? The only game I'm really familiar with is Earthbound and even then I'm still a fucking noob. I've also wanted to start branching out more and do some technical/ASM stuff, as I've wanted to learn how to do that for a long time. I'm thinking Super Mario World might be okay, maybe some stuff on the NES/GB too.

>> No.2899804

>>2899764
Super Mario Bros on NES. It's fully disassembled and commented, and has been hacked in just about every way you can think of.

SMW on SNES is a good place to start for new hackers, but if you are looking to get deeper, try SMB.

>> No.2900129

>>2875448
>Mario Gives Up III
Oh my god I didn't know this was a thing. I loved the first two games in this series.

>> No.2900135
File: 12 KB, 265x297, oh god.jpg [View same] [iqdb] [saucenao] [google]
2900135

>>2898553
>ZMZ
Ew gross why

>> No.2901078

>>2854976
I had the plan to learn assembly for some time now. I like retrogames, so i figured i would try and get into gameboy assembly. This thread is very nice, i also think these 2 sites have good info:
https://patater.com/gbaguy/gbaasm.htm
http://gameboy.mongenel.com/asmschool.html

>> No.2901305

>>2900135
Your post isn't helpful.

>> No.2901339

>>2901305
Sure it is. He's voicing his dislike for ZMZ, whatever that is.

>> No.2901373

>>2901339
And without presenting the superior alternative, that is useless.

>> No.2901379

>>2898549
Nope, tashi's hack did not display like this. This bullshit is from the change in font.

>> No.2901712
File: 55 KB, 1572x775, zmz snes9x.png [View same] [iqdb] [saucenao] [google]
2901712

Nah, it's because of a lack of video options available in ZSNES, and by extension ZMZ. Even with an SNES9x core running in ZMZ, it doesn't have the output options to make the Hi-Res sprites scale properly, resulting in a blurry mess.
Pic related.

>> No.2901738

>>2901712
>ZSNES
Nope. Just ZMZ. I loaded it up in my copy of ZSNES that I keep around for Mario World hacks and I got the middle picture.

>> No.2902379

>absolutely positive I've gotten all the exits in Mario Gives Up 3
>secret stages still won't let me in them
well fuck

>> No.2903468

Bump.

>> No.2903507

>>2902379
go to the second pipe on the first map and press left
be amazed

>> No.2903973

Man, I wish I kept some of those randomized FF6 roms I made. Lately I can't seem to make any that aren't completely fucked on difficulty. Without Osmose, you don't have access to any way of refilling your MP until the first save point. Naturally, each one I've made recently doesn't give Osmose to any character, or to the starting Esper set. I had one that looked halfway playable since it gave me access to free Kirin and Raid. Regen sucks, but I could sit in early level fights and slowly heal. And the Raid helped keep my main mimic alive. Right until I met an enemy that sucked 300HP out of my mimic through my own Raid.

Anyone have any speedcave seeds with Osmose in the starting Esper set?

>> No.2904739
File: 133 KB, 4352x432, Level105.png [View same] [iqdb] [saucenao] [google]
2904739

>> No.2905441

'Sup, guys?

I'm looking for some kind of definitive Pokémon game, where we could catch all (from actual or last gen) Pokémon, find the legendary ones through events and had enhanced evolving methods, like no trading shit. Do you guys know where I can find this?

Thanks!

>> No.2905449

>>2905441
There's a gorillion hacks for that do that, just look around PokeCommunity's Sideshow Showcase.
If that fails, try Skeetendo.

>> No.2905453
File: 261 KB, 148x111, Whoops!.gif [View same] [iqdb] [saucenao] [google]
2905453

>>2905449
>for that do that

>> No.2905457
File: 41 KB, 157x162, Nonspecific Reaction Face.png [View same] [iqdb] [saucenao] [google]
2905457

>>2905449
>for that do that

>> No.2905467

>>2905449
ORAS based? Haven't found. Seriously.

>> No.2905472

>>2905467
You're looking for ORAS?
Shit, man. I thought you meant Gen 1 or 2.
There's not exactly a 721 Hack yet, but Drayano is basically giving ORAS the Spirit Gold > Sacred Gold Treatment right now.

>> No.2905483

>>2905472
Sorry, I should've specified that.
I wish I could watch him hacking this shit all day while giving him tip about what he should do. Also, wish I could make him my slave.

Thanks!

>> No.2905526

>>2905467
we're on /vr/

>> No.2905527
File: 52 KB, 715x476, f2bc05cd68f329317ca44ec7be4686c8.png [View same] [iqdb] [saucenao] [google]
2905527

>>2905441
Pokemon Gaia will be this. It's basically the front-runner of 3rd-gen technology.
http://www.pokecommunity.com/showthread.php?t=326118

Currently plays up to 6th gym with supposedly lots of content between gyms, but I'm kinda saving myself for its completion so I can't tell you about more than up to the first gym. It supports a full 721 dex, mega evolutions, infinite-use TMs, updated stats and moves, physical/special split, latest abilities, Fairy type, grottos, BW2-style repels, and even some bells and whistles that GameFreak doesn't have, like letter grades beside every stat indicating IVs.

>> No.2905530

>>2905527
I hope this shit's good, but this kind of thing:
> Does this have 721 Pokémon?
> Sort of. All Pokémon are in the game's code, but not all of them have fully working abilities, or sprites, or movesets, and as of the latest release they are not all capturable, either.

Makes me cringe.

>> No.2905826

>>2905527
How is this even possible, jesus christ

>>2905530
It's unfinished, what the fuck do you expect?

>> No.2905830

>>2905826
People have been researching and fucking with Fire Red ever since it came out, it's amazing what you can do with it if you put effort into it.

Emerald's been getting some love recently too, mostly because some people are getting bored of using FR for the billionth time in a row.

>> No.2905840

>>2905527
>>2905826
Platinum Red and Blue is great too.
http://www.pokecommunity.com/showthread.php?t=320333

>> No.2905878

>>2905441
Pokemon Red Emu Edition
Pokemon Crystal Emu Edition

>> No.2905891

>>2905878
This

>> No.2906416
File: 128 KB, 255x223, 2.gif [View same] [iqdb] [saucenao] [google]
2906416

this is pretty neat
https://www.youtube.com/watch?v=ThzYd6sxrBQ
http://www.smwcentral.net/?p=section&a=details&id=13017

>> No.2906510

>>2906416
>38 views
dont viral your autistic shit here

>> No.2906519

Hey Specter, any chance of you uploading zips containing all the romhacks for a system(or a single game like SMW)? I wanna grab a bunch to see which are compatible with everdrives, but mediafire will only let me download one at a time.

>> No.2906591

>>2906519
nah

>> No.2906604

>>2906416
the guy playing this really has nothing to add

>> No.2906616

>>2906591
>no trip
Why are the trolls here actually retarded?

>> No.2906687

https://www.youtube.com/watch?v=FKV3yMUCEPw
Holy shit I cannot wait for this to get finished.
I'm waiting 'till it's done, but it's in open beta and apparently 100% completable.
http://forum.metroidconstruction.com/index.php/topic,3746.0.html

>> No.2906714

>>2906687
that's ingenious

>> No.2906910

>>2906510
What does make you think he didn't just want to show us the hack? aside from showing his face and a chat of course

>> No.2907194

Can anyone recommend to me a good retro game emulator that'll work well on an Android ZTE?

>> No.2907271

>>2906416
>>2906510
Here's some others.
https://www.youtube.com/watch?v=fyMxN1wGmQk
https://www.youtube.com/watch?v=NDmU4vwABfo
https://www.youtube.com/watch?v=l2J-z4p2ras
https://www.youtube.com/watch?v=iE4O4jvzbKA