Went over your Guide again looking for any more errors:
- Bit is not a single digit within a word (its not half of a byte). A bit is a binary number (0 or 1) and a group of 4 of these binary values comprise a digit's value. It's why in the thread about rlwinm, i was putting the binary values in groups of 4. 4 bits in a digit, 8 digits in a word, so 32 bits in a word.
- Regarding your quick description of an fpr, you should add in a note that the floating value is in its 64-bit form
- Broadway does not have an 'xnor' instruction. Is it a simplified mnemonic? Is xnor instruction present in other PPC chips?
- Regarding your lis description, you should add a note that whenever lis is executed, the lower 16 bits are always set to null
An Fyi. Li is a simplified mnemonic for addi
i.e. li r1, 1 = addi r1, r0, 1 #Broadway treats r0 as literal 0 when it's used as a source register in this instruction
Lis is simplified mnemonic of addis
i.e. lis r1, 1 = addis r1, r0, 1 #r0 treated as literal 0
There are a lot more instructions (too many to list) that if r0 is the source register, its literal 0
In the Broadway manual i see nothing about bun, bnu, bdznt, bdnzf, and bdz branches. Are these present in other PPC chips? An fyi, the disassembler used in Dolphin is a generic PPC disassembler, so it will show instructions that simply don't exist in Broadway. Maybe these are simplified mnemonics not referenced in the manual?
- Your definition for NOT is incorrect. NOT is not the negative of a value. Its a simplified mnemonic for NOR'ing a register with itself
i.e. not r5, r3 = nor r5, r3, r3
Use the neg instruction instead (i.e. neg r5, r3)
Neg = Negate btw. Positive number becomes negative,negative becomes positive
- Stwu is a store word instruction but the address in the source register gets updated with the value of the previous source register's value + VALUE.
example:
r3 = 0x80000000; VALUE = 0x1500
stwu r0, 0x1500 (r3)
Before instruction was executed; r3 was 0x80000000
After instruction has executed; r3 is now 0x80001500
If you repeat the instruction again for a 2nd time, r3 is now 0x80003000, keep repeating the instruction to keep increasing r3 by 0x1500. This is why some coders use stwu/lwu in certain loops. lwzu is just the opposite of stwu ofc.
Btw, your guide is a good learning bridge as sometimes tutorials (such as mine) can be too technical at times.
- Bit is not a single digit within a word (its not half of a byte). A bit is a binary number (0 or 1) and a group of 4 of these binary values comprise a digit's value. It's why in the thread about rlwinm, i was putting the binary values in groups of 4. 4 bits in a digit, 8 digits in a word, so 32 bits in a word.
- Regarding your quick description of an fpr, you should add in a note that the floating value is in its 64-bit form
- Broadway does not have an 'xnor' instruction. Is it a simplified mnemonic? Is xnor instruction present in other PPC chips?
- Regarding your lis description, you should add a note that whenever lis is executed, the lower 16 bits are always set to null
An Fyi. Li is a simplified mnemonic for addi
i.e. li r1, 1 = addi r1, r0, 1 #Broadway treats r0 as literal 0 when it's used as a source register in this instruction
Lis is simplified mnemonic of addis
i.e. lis r1, 1 = addis r1, r0, 1 #r0 treated as literal 0
There are a lot more instructions (too many to list) that if r0 is the source register, its literal 0
In the Broadway manual i see nothing about bun, bnu, bdznt, bdnzf, and bdz branches. Are these present in other PPC chips? An fyi, the disassembler used in Dolphin is a generic PPC disassembler, so it will show instructions that simply don't exist in Broadway. Maybe these are simplified mnemonics not referenced in the manual?
- Your definition for NOT is incorrect. NOT is not the negative of a value. Its a simplified mnemonic for NOR'ing a register with itself
i.e. not r5, r3 = nor r5, r3, r3
Use the neg instruction instead (i.e. neg r5, r3)
Neg = Negate btw. Positive number becomes negative,negative becomes positive
- Stwu is a store word instruction but the address in the source register gets updated with the value of the previous source register's value + VALUE.
example:
r3 = 0x80000000; VALUE = 0x1500
stwu r0, 0x1500 (r3)
Before instruction was executed; r3 was 0x80000000
After instruction has executed; r3 is now 0x80001500
If you repeat the instruction again for a 2nd time, r3 is now 0x80003000, keep repeating the instruction to keep increasing r3 by 0x1500. This is why some coders use stwu/lwu in certain loops. lwzu is just the opposite of stwu ofc.
Btw, your guide is a good learning bridge as sometimes tutorials (such as mine) can be too technical at times.