The Apple II’s ROM has the 8th bit set for all of its ASCII strings. This convention makes it difficult to search the ROM for hex strings quickly. This Python script takes an ASCII string and returns the HEX string with (and without) the 8th bit set.
Python Code
input_string = "Mega IIe"def string_to_hex_ascii(input_string, set_bit_8=False): hex_values = [] for char in input_string: # Get the ASCII value of the character ord() and convert it string # representing the hex() value # # [2:] strips the '0x' if (set_bit_8): hex_value = (hex(ord(char) | 0x80)).upper() # for Apple II, awww else: hex_value = (hex(ord(char))).upper() hex_values.append(hex_value[2:]) return hex_valuesdef print_list_with_spaces(input_list): # Join the list elements into a single string with spaces in between result = ' '.join(map(str, input_list)) print(result)def print_og_string_formatted(input_string): result = ' '.join(input_string) print(result)# Remind user of stringprint("Og : ", end='')print_og_string_formatted(input_string)# As-is ASCII in Hexhex_values_raw = string_to_hex_ascii(input_string)print("Raw : ", end='')print_list_with_spaces(hex_values_raw)# Hex with 8th bit sethex_values_8bit = string_to_hex_ascii(input_string, True)print("8bit: ", end='')print_list_with_spaces(hex_values_8bit)
Disclaimer: I used ChatGPT to generate an initial script for converting an ASCII string to a list of hex values. Then, I wrote the rest.
ExampleThe Apple IIe Enhanced ROM has the string Apple //e. It is displayed at the top of the screen during boot. Here is the 7-bit ASCII version and the 8-bit version found in the ROM file at address:
Og : A p p l e / / eRaw : 41 70 70 6C 65 20 2F 2F 658bit: C1 F0 F0 EC E5 A0 AF AF E5