• Jeffrey Lee's avatar
    Fix OS_Byte 166 for high ZeroPage, make read-only · 0595a541
    Jeffrey Lee authored
    Despite never being properly documented in the RISC OS PRMs, there's
    evidence that Acorn were recommending that third-parties used OS_Byte
    166 for locating the OS_Byte variables well into the mid-1990's:
    
    https://www.riscosopen.org/forum/forums/5/topics/14676#posts-94080
    
    Currently OS builds which use zero page relocation will only return the
    low 16 bits of the address from OS_Byte 166, most likely breaking any
    third-party software which is trying to use it. Attempt to restore
    compatibility by having OS_Byte 166 add the missing high address bits
    into the "next location" value returned in R2, and fix OS_Byte 167 in a
    similar manner (adding into R1).
    
    Additionally, make the values read-only, because the kernel is littered
    with code that uses hard-coded OsbyteVars addresses and so is unlikely
    to do anything sensible if someone was to modify the OsbyteVars address
    that's stored in workspace.
    
    Version 6.39. Tagged as 'Kernel-6_39'
    0595a541
osinit 24.3 KB