Forth на рк-86

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Короче, с помощью чатика гпт накидал небольшую утилиту на питоне, которая конвертит текстовый файл в бинарник вида output.rk, который я затем подгружаю в эмулятор EMU80 по адресу 2200h, причем эмулятор не проверяет контрольную сумму, там у меня E6 AA AA в конце файла.

Далее, в форте я делаю следующее: 2200 INTERPRET и шихов-форт транслирует исходный текст в новые слова. Сделал с адреса 2200 для того, чтобы форт при запуске не начинал транслировать исходник по умолчанию. Всегда можно сделать COLD и перетранслировать исходник заново.

Получилось вполне удобно, исходник пишу в vim, затем провожу указанные выше манипуляции.

 

Code: Select all


def create_binary_file(input_filename, output_filename):
    try:
        # Открытие файла для чтения текстового файла
        with open(input_filename, 'r', encoding='utf-8') as input_file:
            text = input_file.read()

            # Получение длины текста
            text_length = len(text)

            # Определение начального адреса памяти
            start_address = 0x2200

            output_length = start_address + text_length


            # Открытие бинарного файла для записи
            with open(output_filename, 'wb') as output_file:
                # Запись первых двух байтов (начальный адрес)
                output_file.write(bytes([(start_address >> 8) & 0xFF, start_address & 0xFF]))

                # Запись длины текста (старший байт, затем младший)
                output_file.write(bytes([(output_length >> 8) & 0xFF, output_length & 0xFF]))

                # Запись текста из файла input.frt
                output_file.write(text.encode('utf-8'))

                # Запись четырех нулевых байтов
                output_file.write(b'\x00\x00\x00\x00')

                # Запись байта 0xE6 и двух байтов 0xAA
                output_file.write(b'\xE6\xAA\xAA')

            print(f"Бинарный файл {output_filename} успешно создан.")

    except FileNotFoundError:
        print("Файл input.frt не найден.")

def main():
    input_filename = "input.frt"
    output_filename = "output.rk"
    create_binary_file(input_filename, output_filename)

if __name__ == "__main__":
    main()


kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Никак не давала покоя мысль, зачем нужно слово */MOD, которое реализовано аж в машинном языке в шихов-форте.
Заморочился поисками хоть какого-нибудь примера и вот что нашел интересное: можно, скажем, приблизительно переводить градусы цельсия в фаренгейты:

Code: Select all

>25 9 5 */MOD DROP 32 + .
77
> 
Ну а что, почему бы и нет :ebiggrin:
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Немного офтопа... Я ушел с головой в восстановление своего древнего рк-86, в итоге заставил хотя бы работать процессор пошагово, но две микросхемы почему-то вышли из строя: ВТ57 и ИР12, может быть просто от времени, не знаю... больше 30 лет эта плата провела без движения в разных местах, порой не очень дружественных для электроники. Надеюсь, еще поработает и обзаведется несколькими панельками.