Эмуляция Sparc

 

Позавчера вечером появился еще один повод покопаться в древнем железе. Я поискал эмуляторы Sparc, но нашел ничего толкового. Один из вариантов - QEMU. Вчера потратил почти весь день на установку, этот процесс прошел под лозунгом "Никогда не следует недооценивать предсказуемость тупизны".

Нашел запись в блоге, скачал  программы и древний эмулятор qemu-w32-setup-20221230.exe.

Установил, и понеслось - qemu-img ругнулся на отсутствие .dll. Стал искать набор библиотек, на сайте ссылаются на MSYS2. Сам пакет доступен в виде x64, либо без библиотек. Плюнул на эту идею, стал искать в Яндексе. Скачал .dll, запустил - нужна еще одна. Набрал 5-6 файлов, создал образ, запустил эмулятор и новый облом - нужна еще .dll. Я уперся и стал скачивать библиотеки и копировать в папку. Скачал 49 файлов, все время уходит на поиск в Яндексе, переход по ссылке к сайту dll.me, проход ублюдской captcha, ожидание и скачивание. Иногда выскакивает сообщение "Точка входа не найдена в .DLL", тогда поиски затягиваются. Хоть я и пошел на принцип "Кто кого пересидит?", но мне надоели все действия. Пошарил по интернетам, скачал qemu-w32-setup-20220418.exe, распаковал отсутствующие библиотеки, запустил после нескольких сообщений и замены DLL на нужные и стал выполнять действия, как описано в блоге. Подобных описаний нашлось немало, например тут. Загрузился после установки:


Хм, а ассемблера нет. Стал искать дальше, установил пакет, как описано. Ассемблера тоже нет. Скачал пакет gcc-3.3.2-sol26-sparc-local.gz, распаковал, создал .iso и запустил. И тут облом - нет ассемблера и неверная конфигурация, на которую ругается компилятор. Я не пользователь unix, поэтому часть времени ушло на поиски описания команды и описание настроек. Искал другие варианты - бесполезно. Сделал паузу и стал смотреть скачанный новый фильм "Финист. Первый богатырь"., но так и не досмотрел. Новый поиск вывел на binutils-2.20.1-sol26-sparc-local.gz. Скачал, установил - есть файл as!  Стал набирать исходник :

! SPARC assembly for Solaris
! System calls for Solaris:
! 4 for write
! 1 for exit
        .section ".text"
        .align 4
        .global _start
_start:
        ! Save frame pointer
        save    %sp, -96, %sp   ! Create stack frame
        ! Write system call
        mov     4, %g1          ! System call number for write
        mov     1, %i0          ! File descriptor 1 is stdout
        sethi   %hi(message), %i1
        or      %i1, %lo(message), %i1
        mov     14, %i2         ! Message length
        ta      8               ! Make system call
        ! Exit system call
        mov     1, %g1          ! System call number for exit
        mov     0, %i0          ! Return code 0
        ta      8               ! Make system call
        ! Restore frame (we never get here due to exit)
        ret
        restore                 ! Delay slot
        .section ".rodata"
        .align 4
message:
        .asciz "Hello, World!\n"

Компиляция:

as -o main.o main.s
ld -o hello main.o
./hello

Новый облом: не запускается. Нашел другой вариант:

.section ".text"
.global _start
_start:
mov 4,%g1 ! 4 is SYS_write
mov 1,%o0 ! 1 is stdout
set .msg,%o1 ! pointer to buffer
mov (.msgend-.msg),%o2 ! length
ta 8
mov 1,%g1 ! 1 is SYS_exit
clr %o0 ! return status is 0
ta 8
.msg:
.ascii "Hello world!\n"
.msgend:

Несколько правок исходника, запусков, и результат как на картинке в записи. Осталось дочитать документацию и осилить скрипт компиляции, который пока не заработал. Попробую поиграть с другими симуляторами, вдруг что-то и выйдет?

Дополнение. Средства разработки нашлись, нужно выбрать другой тип установки, а не стандартный.

Нашел пару симуляторов:


SparcSim не вызвал восторга. Взял пример с документации, ассемблер не понял ни одной строчки и не выдал кода. Методом тыка получил код:

.align 4
format: .ascii "one %d, two %d, three %d",10,0
        .align 4
arglst: .word format
        .word 1
        .word 2
        .word 3
.global _start
_start:
        sethi arglst/1024,%o0
        add %o0,arglst&0x3FF,%o0
        st %o0,[%g0+IODevPrintfArgs]
.word 0

Если закрыть окно текстового вывода, то оно больше не открывается. 


Сдуру взялся за компиляторы и интерпретаторы и нифига не получил. Установил обе программы с сайта, запустил. Потом собрал в одну папку, написал .bat:
set PATH=%PATH%;%cd%\Tcl\bin\
start wish80.exe tkisem.tcl
Папка Tcl скопирована в папку Isem. Рекомендуется почитать документацию - устройство много что умеет.
Пока всё, осталось осилить доки по опкодам.
Дополнение. Для tkisem неплохо забрать из папки винды as-isem.exe и ld-isem.exe
Еще один эмулятор: SparcSim. С ним как-то грустно всё.

Комментарии