Ugh, my most mindnumbing debug experience was porting a fat16 filesystem from one assembler to another (same core).
The filesystem was composed of about 100 files, all included into the main "filesystem.asm".
If you had a problem with scope or something, the assembler would give you completely bogus answers about where the problem lay. Nothing like getting "Scope error--assembly halted" after hitting make. After about a week of that crap, I split them into separate files.
Which led me to the next problem. The assembly language had "high level conditionals", a pseudo macro language that would expand if, while, do, etc loops into assembly.
The two brands of assembler decided to use different temporary registers in composing their loops. That was fun trying to find.
Next, the macro expansion systems were different between vendors. with a lot of ifdef <blahlbah> would evaluate to nothing, so entire blocks were being left out silently.
Ah, the joys of obscure platforms.
The filesystem was composed of about 100 files, all included into the main "filesystem.asm".
If you had a problem with scope or something, the assembler would give you completely bogus answers about where the problem lay. Nothing like getting "Scope error--assembly halted" after hitting make. After about a week of that crap, I split them into separate files.
Which led me to the next problem. The assembly language had "high level conditionals", a pseudo macro language that would expand if, while, do, etc loops into assembly.
The two brands of assembler decided to use different temporary registers in composing their loops. That was fun trying to find.
Next, the macro expansion systems were different between vendors. with a lot of ifdef <blahlbah> would evaluate to nothing, so entire blocks were being left out silently.
Ah, the joys of obscure platforms.