nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 17 May 2024 14:43



Reply to topic  [ 123 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9
Forth на рк-86 
Author Message
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
Reply with quote
Короче, с помощью чатика гпт накидал небольшую утилиту на питоне, которая конвертит текстовый файл в бинарник вида output.rk, который я затем подгружаю в эмулятор EMU80 по адресу 2200h, причем эмулятор не проверяет контрольную сумму, там у меня E6 AA AA в конце файла.

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

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

 
Code:

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()



03 May 2024 02:15
Profile
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
Reply with quote
Никак не давала покоя мысль, зачем нужно слово */MOD, которое реализовано аж в машинном языке в шихов-форте.
Заморочился поисками хоть какого-нибудь примера и вот что нашел интересное: можно, скажем, приблизительно переводить градусы цельсия в фаренгейты:

Code:
>25 9 5 */MOD DROP 32 + .
77
>


Ну а что, почему бы и нет :ebiggrin:


03 May 2024 06:36
Profile
Novelist

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


14 May 2024 07:49
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 123 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9

Who is online

Users browsing this forum: No registered users and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.