According to the 2.1 Release Notes, ASCII_VAL() raises an error if the first character of the argument is multi-byte. This makes sense.
In practice, the function fails if the string contains a multi-byte character *anywhere*:
(connection charset is ISO8859_1)
select ascii_val (cast('Hoplala' as char(12) character set utf8)) from rdb$database
select ascii_val (cast('Hopläla' as char(12) character set utf8)) from rdb$database
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets