Позавчера вечером появился еще один повод покопаться в древнем железе. Я поискал эмуляторы 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! Стал набирать исходник :
! 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"
Новый облом: не запускается. Нашел другой вариант:
.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 не вызвал восторга. Взял пример с документации, ассемблер не понял ни одной строчки и не выдал кода. Методом тыка получил код:
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
Комментарии
Отправить комментарий