Autor Wątek: PASMO assembler - kod Z80 na x86  (Przeczytany 7935 razy)

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
PASMO assembler - kod Z80 na x86
« dnia: 2016.02.15, 21:47:10 »
Na stronie pasmo.speccy.org wyczytałem coś takiego:
Cytuj
Starting with version 0.5.0, can also generate 8086 code from Z80 sources, in binary format for Ms-dos COM files

Ponieważ interesuję się BIOS'em w komputerach PC x86 mam pytanie. Jak skompilować taki kod asemblera Z80 na plik COM MS-DOS lub jeszcze lepiej plik binarny 16-bit bez nagłówka (nagłówek można chyba ręcznie usunąć z pliku COM). Chodzi o to iż lubię wstawiać nietypowe rzeczy do BIOS'u zwłaszcza AWARD 6.00PG. Do tej pory udało mi się wstawić wiele różnych programów i kilka gier. Oczywiście nie umiem programować w asemblerze ale potrafię skompilować gotowy kod 16-bitowy asemblera w FASM lub NASM i przerobić otrzymany plik binarny na tak zwany Option ROM ISA lub PCI który w łatwy sposób można dodać do BIOS'u. Udało mi się zmodyfikować kod PCI na ISA - tutaj można zobaczyć o co chodzi w maszynie wirtualnej QEMU: ROM OS Protected Mode a tutaj link do wideo jak to samo działa na prawdziwym komputerze PC z BIOS'em AWARD:
https://www.youtube.com/watch?v=xC4BjNRSW_w

Pomyślałem sobie, że można by wstawić dowolny program napisany na Z80. Czy to możliwe? Czy można np. przerobić jakiś nieskomplikowany kod programu dla ZX Spectrum na aplikację MS-DOS? Jeśli tak to poproszę przykłady.

Na wiki x86 pisze, że architektura x86 jest wstecznie zgodna z procesorem 16-bit 8086 więc teoretycznie coś tam powinno działać.
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #1 dnia: 2016.04.05, 12:57:21 »
Tak mnie naszło i sprawdziłem co się stanie jak się jako parametr dla pasmo da opcję --86... Nie wiem jak dokładnie jest robiona translacja, mapowanie rejestrów czy adresowana pamięć, ale to, co wyszło wrzucone w disassembler wygląda mniej więcej tak jak oryginalny kod źródłowy. Plik wynikowy wydaje się być czystym binem bez żadnych nagłówków i innych narzutów, czyli teoretycznie powinien robić to, czego potrzebujesz.

Co do sensowności takiego zastosowania wypowiadał się nie będę - może faktycznie coś ci się z tego urodzi ;)

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #2 dnia: 2016.04.05, 13:11:27 »
Zapodaj binarkę to spróbuję ją przerobić na ISA lub PCI Option ROM i przetestuję w Qemu.

Choć prawdę mówiąc nie bardzo mi się chce wierzyć, że mogłoby coś działać - przecież w MS-DOS są inne tryby graficzne, inna rozdzielczość, usługi BIOS'u i ich wywołania INT za pomocą przerwań IRQ   :-\
Prawdopodobnie może zadziałać jakiś prosty program wykonujący jakieś obliczenia i wyświetlający rezultaty na ekranie, nie wiem może jakaś gra tekstowa? - bo nie wierzę iż odpalę np. ManicMiner na PC :-)
Z drugiej strony - z tego co wiem w pierwszych komputerach PC był BIOS z BASIC który uruchamiał się gdy nie wykrył żadnego napędu. Komputery miały też chyba wejście do podłączenia magnetofonu kasetowego z którego można było wczytać grę za pomocą polecenia LOAD w BASIC.

https://en.wikipedia.org/wiki/IBM_BASIC
https://www.youtube.com/watch?v=k5V-PMZHWM0
« Ostatnia zmiana: 2016.04.05, 13:22:19 wysłana przez Gelip »
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #3 dnia: 2016.04.05, 13:30:01 »
Zapodaj binarkę to spróbuję ją przerobić na ISA lub PCI Option ROM i przetestuję w Qemu.

Nie bardzo jest co zapodawać - test robiłem na kodzie z konkursu generującym szachownicę 1x1 ;)
Sprawdziłem tylko tyle, że to co się kompiluje użytkowo powinno być zgodne z kodem źródłowym.

Cytuj
Choć prawdę mówiąc nie bardzo mi się chce wierzyć, że mogłoby coś działać - przecież w MS-DOS są inne tryby graficzne, inna rozdzielczość, usługi BIOS'u i ich wywołania INT za pomocą przerwań IRQ   :-\

A to jest zupełnie inna kwestia. Trzeba by sprawdzić, czy pasmo mapuje coś na konstrukcje do wywoływania przerwań itp. Poza tym trzeba by sprawdzić czy pozwala w takim trybie używać "dłuższych" adresów. Jeśli tak, to można by się uprzeć i pisać w ten sposób jakieś programy.

Cytuj
Prawdopodobnie może zadziałać jakiś prosty program wykonujący jakieś obliczenia i wyświetlający rezultaty na ekranie, nie wiem może jakaś gra tekstowa? - bo nie wierzę iż odpalę np. ManicMiner na PC :-)

Raczej nic ci nie zadziała tak wprost. Musiałbyś sprawdzić czy/jak są mapowane odpowiedni rozkazy a potem przepisać całe I/O na kod, który w efekcie wykonywał by te same funkcje na PC co jego odpowiednik na maszynce z Z80.

Cytuj
Z drugiej strony - z tego co wiem w pierwszych komputerach PC był BIOS z BASIC który uruchamiał się gdy nie wykrył żadnego napędu. Komputery miały też chyba wejście do podłączenia magnetofonu kasetowego z którego można było wczytać grę za pomocą polecenia LOAD w BASIC.

Miały. Tylko to akurat nie specjalnie ma związek z tematem ;)

Jak pisałem wcześniej - nie specjalnie widzą sensowność takiego zastosowania. Prościej byłoby chyba nauczyć się podstaw assemblera x86 niż walczyć z dostosowywaniem takiego dziwoląga ;)

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #4 dnia: 2016.04.05, 13:35:25 »
Jak pisałem wcześniej - nie specjalnie widzą sensowność takiego zastosowania. Prościej byłoby chyba nauczyć się podstaw assemblera x86 niż walczyć z dostosowywaniem takiego dziwoląga ;)
I tu się z tobą zgadzam  :). Ale nadal nie rozumiem o co chodzi w pasmo z kompilacją kodu źródłowego Z80 jako x86 o którym napisałem w pierwszym poście  :-\
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #5 dnia: 2016.04.05, 13:43:47 »
Ale nadal nie rozumiem o co chodzi w pasmo z kompilacją kodu źródłowego Z80 jako x86 o którym napisałem w pierwszym poście  :-\

Ale co tu jest do rozumienia? x86 jest logicznie zgodny z Z80 co oznacza, że kod dla Z80 da się przetłumaczyć na logicznie odpowiadający mu kod x86 a następnie na wynikowy kod binarny. Tyle, że tutaj autor w ramach eksperymentu pominął krok pośredni i robi go wewnętrznie w trakcie kompilacji. Na oko chyba głównie po to, żeby pokazać, że się da ;)

Choć może było to komuś (autorowi?) do czegoś praktycznego potrzebne.

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #6 dnia: 2016.04.05, 13:49:46 »
Czyli logicznie zgodny ale żadnego pożytku z tego praktycznie nie ma  ???
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #7 dnia: 2016.04.05, 13:59:37 »
A kto powiedział, że musi być? ;)

Gelip

  • *****
  • Wiadomości: 769
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Odp: PASMO assembler - kod Z80 na x86
« Odpowiedź #8 dnia: 2016.04.05, 14:13:10 »
Mnie interesują tylko konkretne, praktyczne zastosowania więc jak dla mnie ta możliwość kompilacji do x86 bez sensu  ::)
"Byte" Personal Computer
Брестское ПО средств вычислительной техники