The majority of Catch and Hatch Pokémon in the game fall into one of two categories: Common and Rare. The mechanics that determine the encounter rates of each of these Pokémon are outlined on this page. A handful of Pokémon have special mechanics associated with them; this page will detail all such encounters. Information about Groudon, Kyogre, and Rayquaza can be found here.
Jirachi is only obtainable in the Ruins area, by getting the Jirachi Arrival option on the slots. The Ruins location itself requires the player to Travel seven times to access. When the player triggers Jirachi Arrival, Jirachi will appear on the field and float around for thirty seconds. The player must hit it three times in order to catch it.
Because triggering Jirachi's appearance relies on the player getting its option in the slots, the Sapphire field is recommended, since the player can use the Zigzagoon there to stop the slots.
Pichu is obtainable as a Hatch Mode catch on either field. It will only be a Hatch option once the player has captured 5 Pokémon in the current game (indicated by the number at the bottom of the screen). Pichu is also generated as the Hatch encounter separately from all other Hatch Pokémon. The mechanics for encountering Pichu work as follows:
In order for the remainder of 0 divided by 50 to be 0, only 2 values of the possible 100 work: 0 and 50 itself. This means that Pichu has a 2% chance before the player has defeated Rayquaza. After defeating Rayquaza, 100 is used instead of 50, and only 1 value will result in a 0 remainder: 0 itself, meaning Pichu has a 1% chance after defeating Rayquaza.
This information is based on my interpretation of the still-in-progress pret decompilation project for Pinball Ruby & Sapphire; the relevant part of the code is located here. If I am misunderstanding what I'm reading, please contact me to issue a correction.
There is a group of six special Pokémon, consisting of the Lati twins, the Johto starters, and Aerodactyl, who are all generated using the same function in the code. Because they are all generated the same way, they are all discussed in this section. However, the Johto starters and Aerodactyl cannot be obtained without the use of an e-Reader card or hacking the game. This video by gmedley goes into the details and shows off the process of catching them, and it helped me understand how to interpret the code such that I can provide the description below explaining why.
When the player enters Catch Mode, the game has a chance of generating a special Catch Mode encounter instead of a normal encounter. Whether a special encounter is used is determined through the following process:
In order for the remainder of 0 divided by 5100 to be 0, only 1 value of the possible 100 works: 0 itself. This means that any special encounter has a 1% chance before the player has defeated Rayquaza. After defeating Rayquaza, 50 is used instead of 100, and 2 values will result in a 0 remainder: 0 and 50, meaning special encounters have a 2% chance after defeating Rayquaza.
Once the game decides to use a special encounter, it will select which encounter to use in the following manner:
As mentioned above, the game will check each special encounter to see if it has been seen but not caught, and automatically set the species to spawn if this is true. The game will also overwrite its own setting if it encounters another Pokémon the player has seen but not caught. For example, if the player has seen but not caught Aerodactyl, the game will set Aerodactyl as the Pokémon to appear, but if the game gets to Totodile and sees it's also seen but not caught, then Totodile overwrites Aerodactyl. Therefore, if the player has seen but not caught all special Pokémon, they will encounter them in reverse order from how they are checked in the code: Latias/Latios, Cyndaquil, Totodile, Chikorita, and Aerodactyl, until all of them have been caught.
The game requires the player to have registered the Johto starters and Aerodactyl as "seen" in the Pokédex in order to possibly spawn them. However, there is no way to register them as "seen" without the use of e-Reader cards or hacking. This means that the Johto starters and Aerodactyl are impossible to acquire without hacking or using the e-Reader to add them to the Pokédex.
According to WhenGryphonsFly on the pret project, there is also an e-Reader card that can force the Johto starters and Aerodactyl to be the next Pokémon generated by the game, skipping this entire process. There is not a card that does the same for Latias or Latios.
This information is based on my interpretation & discussions about the still-in-progress pret decompilation project for Pinball Ruby & Sapphire; the relevant part of the code is located here. If I am misunderstanding what I'm reading, please contact me to issue a correction.