I'm going to run down some of the types of tech data and how to expand them, as well as how to make Hi-Tech aware of the new data. All addresses are for a US ROM.
Hi-Tech.ini
When you first load a ROM, Hi-Tech creates a file called Hi-Tech.ini in your romname.smc.proj folder. It handles all the settings on where data ends for anything that is expandable.
Effect Headers and MP Costs
The pointer to player data is at 0x01D5F0. Each Header is 12 bytes long. No formatting is required. MP Costs are pointed to at 0x01CB5D, and are 1 byte each. There should be a matching number of Effect Headers and MP Costs. The Hi-Tech.ini setting for this is PlayerEffectMax.
Performance Groups
Battle Performance Groups are pointed to at 0x01CBAE, and are three bytes each. The Hi-Tech.ini setting is TotalBattlePerformanceGroups. Each byte is the index of a PC used, or 0xFF for a non-participating party member. Crono single techs would be 00 FF FF.
Menu Performance groups are pointed to at 0x02BBF4, 0x02BCE9, and 0x3FF866, and are 1 byte each. Each PC has a bitflag, with Crono = 0x80, Marle = 0x40, Lucca = 0x20, Robo = 0x10, Frog = 0x08, Ayla = 0x04, and Magus = 0x02. There is a count of menu groups at 0x3FF864.
Both types of performance groups should match. The only differences are format, where they are loaded, and that battle groups may have multiple orders for dual techs.
Hi-Tech reads battle groups, and updates both battle and menu groups to match. As long as you have enough space to write your data, no modification is necessary prior to loading Hi-Tech.
Tech Groups
Tech groups are used to specify where each type of tech starts and ends.
The start tech of one group and first tech of the next group are listed at 0x02BD18, with the end byte being referenced as the next start byte. For example, Crono's data is 01 09, and Marle's data is 09 11, with the ROM listing 01 09 11. The total number of menu performance groups is stored at 0x3FF864. This data must be adjusted manually.
The types of menu performance groups are pointed to at 0x02BCE2, and are two bytes each. The first byte is the index of the first of the type, and the second is the count of groups in the type. This data must be adjusted manually.
More to come.
Edit: Updated performance groups and separated tech groups.