Uppercase keywords were a good idea when syntax highlighting wasn't available.
There are many other reasons why they are a good idea. Some that come to mind are:
a) As long as you avoid all-uppercase identifiers you know you can use *whatever* word is the best choice for a particular variable.
colour := black; type := digital; case := plastic;
now := 2009; then := 1976;
b) It is useful to know that if you avoid using all-uppercase characters in your own identifiers your program will never be invalidated at some future time if, and when, new keywords are added to the language.
c) The language designer has the freedom to select the *most suitable* keyword for a new feature rather than trying to avoid a word that is likely to break existing software.
d) Syntax-highlighting might be useful when working on a screen but monochrome printed program text has yet to disappear altogether.
e) Syntax-highlighting is little benefit for those who suffer from colour blindness. I believe that this problem is more common (particularly for men) than most people imagine.
I am aware that the issue of uppercase keywords has been a favourite weapon for those who wished to attempt to denigrate languages such as Oberon / Modula-2. I believe that the only real reason for complaint might be the attendant practical difficulties of typing sequences of uppercase letters. This has always been a problem for me (a three-fingered typist) as I generally avoid using Caps Lock: I always forget it is on, use the Shift key, and end up with a lowercase letter (grrrr!).
However, once the existence of a smart IDE that is capable of syntax-highlighting can be assumed, then either:
a) auto-capitalisation (as I have implemented in the editor used in both the Armaide and CPIde development systems) or
b) automatic keyword-generating shortcut keys
are really easy ways of overcoming any such practical typing difficulties.
Porting can be supported by a relatively simple tool.
It is not necessarily as simple as it might appear at first e.g. what happens after all keywords have been lower-cased in a program that includes the following:
start := 0;
end := 100;
FOR i := start TO end DO ...
If porting was 'relatively simple' then it would also be feasible (and trivial to implement in a compiler) to allow keywords to be mixed all-uppercase and all-lowercase in the same module.
I thought the initial Zonnon idea (IIRC: only allow either all-uppercase or all-lowercase depending on the case of the word MODULE) to be an excellent compromise. I was surprised to hear that it has not been implemented that way.