The simplest thing to start tuning is fueling. Most OBD1 ECM/PCMs are Speed-Density (SD), so I'll focus on those. I may touch on MAF a bit, but nowhere near the amount of a SD PCM. I don't have nearly as much experience with them.
Fuel: fairly easy to tune as long as all of your sensors are working correctly. A wideband is NOT necessary, though it will make WOT tuning easier. The way GM ECMs account for fuel changes are through BLM and INT. BLM (Block Learn Multiplier) is a long term trim, INT (Integrator) is a short term trim, and is very related to BLM.
Something to keep in mind: BLM moves to keep INT happy. The INT is happy when (stock anyways, since it is an adjustable value) it is ±4 of 128. Once the INT moves beyond that, the BLM moves in the direction of the INT and then the INT will move back toward 128. Luckily, below 128 means the motor WAS running rich, so above 128 means it WAS running lean. As long as the INT is at 128(and in closed loop), the car is at stoich, regardless of what the BLM is at. The BLM just shows how far off the VE tables are.
I just mentioned that it was "lucky" that low BLMs/INTs means rich: assuming your current BLM/INT values are 128, if you divide the values by 128, you will get the number 1. 1 means perfect fueling, which is what you should aim for, though it may be impossible to reach it due to sensor error and table limits. Anything above 1 shows exactly how much more VE should be added to a certain cell to have it correct. Anything less shows exactly how much VE should be taken out to achieve a stoich AFR without O2 correction.
In most speed-density tunes, there are at least two VE tables: Main and Base. The simplest way to explain it is that Base + Main = calculated VE. for example, let's say we are cruising at 55MPH, which is roughly ~1600RPM at 55kPa in 4th gear with a 1990GP 3.1 with 3.33 gears and slightly taller than stock tires. Now we'll play with GM stock BINs since it's much safer to learn where there have been a LOT of fudge factors included. In BFBD, the Main VE at 1600-55 is 29.02. The base is 32.94. Just simply add them, and that is what the ECU expects to be correct before O2 correction. It comes out to 61.96.
In 6D, 88, A1, DF and more, there are actually three VE tables, Main, Base and Idle. Idle is fairly easy to deal with since it's basically the Main table, just at lower RPMs (up to 1600 in A1). It also uses the concept of adding the Base table to it for a total VE number. Now, since fueling differences at idle and non-idle at the same RPM and kPa SHOULDN'T exist (unless the amount of advance is vastly different), we will use the same values for both. Now the Idle table is more defined in the ranges that it applies to, but it's basically wasted since we are just going to interpolate the desired value anyway. I use a spreadsheet for this (and MUCH more) since a computer is much less likely to make a math error than a human.
If there isn't enough adjustability in the main table, you WILL need to play with the base table, or as a last resort, change the base pulse constant. I say last resort since it changes EVERYTHING fuel related, and will require you to re-tune all fuel-related items.
I will continue with all important things based on the A1 definition since it's pretty widely used and documented. DF is also very documented and widely used, but I didn't make the XDF for it, and A1 is a bit more common.
Terms that confuse people:
- Delta: it means difference, as in difference between the last time it was read. It can be 6.25ms, or it can be 1 second, depends on what you're dealing with.
- Alpha-N: Basing fuel(and potentially spark) off of mainly TPS% and RPM.
- Interpolate: this is to look at two values, or more in the case of 3D maps, and then have a weighted average of them based on how close the read value is to the cell values.
Constants:
- Checksum: usually a 2-byte value, it is what the ECM will look at after going through and adding almost every byte in the PROM (very few are left out, only in the beginning of the BIN).
- Mask ID: if it doesn't match your XDF, you have a problem. If it is $AA, then that disables the checksum routine that the ECM/PCM goes through when it first gets power.
- Number of cylinders: not sure of exact operation, but just set to the correct value and forget about it.
- IP Pulse Divisor: you shouldn't need to play with this unless you swap gauge clusters or swap to a different mask. I've written a guide in the A1 XDF on how to use it. It basically is a software based pulse divider; most instrument clusters want to see 4000 pulses per mile, and most VSS reluctors produce a signal much higher, for example, a stock BFBD BIN shows 40,070 pulses per mile due to VSS reluctor and tire combination. Now it also has an IP divider of 160(which corresponds to "divide by 10") and that's how the I/C gets its 4K PPM.
- VSS Constant: this is how you account for changes in tire size. It also takes into account how many notches are on the reluctor wheel in your transaxle for the VSS... It is measured in pulses per mile, so take your tire size, calc out how many revolutions it makes in a mile, multiply it by the number of notches on the reluctor wheel, and you have your number. There MAY be certain restrictions to this (depending on the exact VSS setup), but that will cover most people.
- Recrank no-start timer: I assume this will prevent the injectors from firing for the period of time after a stall. I've never had to mess with it.
- Max RPM for Barometric update: exactly as it sounds, the highest RPM where the ECM will update its barometric value. I would never want to put this value above the peak torque RPM.
- Barometric update rate: just how it sounds, how long the ECM will wait between its updates to the barometric value that it uses for certain functions.
- Time before vehicle not moving bit is set: I assume it's for idle control, but I've never had to adjust it. I'm thinking it starts a timer once the MPH value hits 0 and then waits for this period before setting it.
- Maximum MAP offset for baro adjustment: how far the ECM can adjust the barometric value based on MAP when it's in the correct conditions to update baro.
- VATS minimum/maximum frequencies: this is something the factory setup based on the passkey module installed in the vehicle. I believe most run at either a 30Hz or 50Hz frequency (can't remember ATM), and this is how to tell the ECM what kind of signal to expect and if it goes outside of the range, it considers it a VATS issue and will likely kill the injectors.
- Reset DTCs after this many powerups: how many key-on key-off cycles it takes to clear codes. There may be an actual starting/driving requirement, but it doesn't really matter.
- Manual Value: if you're running anything other than an auto, this needs to read 1. Don’t ask, it just does.
- Redline: not sure why, but there seem to be multiple rev limit constants and this is one of them.
- Fuel delivery mode: determines if the ECM will fire in MPFI or TBI mode and how many cylinders the ECM is expecting.
- PROM ID: useful for a few reasons. For a stock vehicle that's had its MEMCAL sticker rubbed off/removed, it can tell you what you're dealing with. If you're into tuning, you can use it to have a static value (such as putting injector size in the datastream) for using it to aid in tuning.
- EPROM date code/production sequence numbers: pretty much useless. They have no value in anything.
- Customer ID bytes: also useless, but for some reason, they exist.