It does still accept 2-digit offsets for V2 code (or more correctly, older wp34s.op files).
The problem is (fully documented in the ASM manual) that the instruction format comes directly from the wp34s.op file. If that file generates an instruction with a 3-digit number, the assembler will be looking for a 3-digit number***. That is the price we are paying to have an assembler that will accept new instructions that were not ever dreamed up when the tool was written. Putting in exceptions to the rule tends to break new, upcoming features.
Technically, a 2-digit BACK/SKIP instruction does not exist in the current machine anymore.
Rather than using SKIP/BACK, use JMP and a symbolic label instead and feed this through the PP. That tool will correctly create 2-digit numbers for V2 code (or older wp34s.op file) and 3-digit numbers for V3 code. If your offset exceeds the maximum allowed, the tool will automatically switch the instruction to a GTO and insert a LBL at the appropriate target location.
PP has the other benefit that if you come back to your code and inject a few more steps between your branch and your target at a later date, PP will regenerate the correct branch offsets for you (or "promote" it to a GTO/LBL) automatically. It also alleviates the need for you to count steps -- which is even more important when the offset limit is north of 200 steps (I guess that should be "south" for those Australians among us)!
Additionally, many of us feel that the PP-ready JMP is much more readable and self documenting than using BACK/SKIP instructions.
In the meantime, you can use this little ditty to convert your older code to the newer style if you want. Simply run it as a filter:
$ skip2.pl < old.wp34s > new.wp34s
(Hopefully there are no bugs :-)
#!/usr/bin/perl -w
# Convert 2-digit BACK/SKIP to 3-digit versions.
while (<>) {
# Look for any 2-digit BACK/SKIP instructions.
if (/(SKIP|BACK)\s+(\d{2})($|\s+)/) {
my $offset2 = $2;
my $offset3 = sprintf "%03d", $offset2;
# Replace the 2-digit SKIP/BACK with a 3-digit variant.
# Be careful to put the white space back exactly as it was found!
s/(SKIP|BACK)(\s+)${offset2}/${1}${2}${offset3}/;
}
print;
}
*** This is a consequence of the instruction lookup method used. A table is built from wp34s.op with all legal instructions (eg: SKIP 000, SKIP 001, etc.). The source instruction is parsed out of the source line and an explicit match is attempted against the legal instructions.