Autor Wątek: Problem z kompilacją (BIT, LD)  (Przeczytany 16256 razy)

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #15 dnia: 2017.02.03, 12:37:33 »
LOW i HIGH to zwykle dyrektywy/funkcje assemblera generujące odpowiednio dolną i górną połówkę szesnastobitowej liczby podanej jako parametr. I zwykle zapisuje się operacje z ich użyciem jako np.

LD (hl), LOW k_2

Bez użycia kropek, które pojawiają się u ciebie. Znowu jednak sugeruję - sprawdź w dokumentacji assemblera, którego używasz jak te funkcje albo ich odpowiedniki wyglądają.

A cały kod, który pokazujesz ładuje pod adres z HL adres kawałka kodu od etykiety K_2 - prawdopodobnie jakiś wektor skoku albo kod samomodyfikujący.

Co do drugiej części - nie wiem czym to kompilujesz (sjasm?), ale sprawdź w dokumentacji czy przypadkiem DB nie deklaruje pojedynczego bajtu a do sekwencji bajtów nie ma jakiejś innej dyrektywy. Sprawdź też czy przypadkiem backslash w tym assemblerze nie jest (albo jest) znakiem "escape-ującym" i nie psuje ci sekwencji. A najlepiej byłoby te wszystkie sekwencje zamienić po prostu na ich szesnastkowe lub dziesiętne wartości żeby nie zmuszać kompilatora do niepotrzebnej ekwilibrystyki.

apk

  • ***
  • Wiadomości: 237
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #16 dnia: 2017.02.03, 14:18:37 »
Dziękuję za pomoc, udało się całość skompilować :). Niestety wyszedł kolejny problem :(. Wygląda na to, że ORG nie działa. Kod wygląda tak:

ASTART   EQU  00000H ;ADRES STARTOWY


         ORG  ASTART
CSTART:  LD   SP,0      ;PIERWSZY PUSH FFFE-F
         DI             ;POTRZEBNE PO JP 0000
         JP   CSTART1
 ;
 ;(MIEJSCE NA RESTARTY 08H, 10H, 18H, 20H, 28H, 30H)
 ;


         ORG  ASTART+038H
         EX   AF,AF'


ASTART+038H nie przesuwa kodu do pozycji 038F, tylko umieszcza go bezpośrednio po          JP   CSTART1. Powinienem tam mieć z 50 zer, a nie ma tego.

Używam zgodnie z wcześniejszą radą sjasmplus. Patrzyłem na dokumentację do sjasm, ale nie znalazłem info o ORG.

P.

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #17 dnia: 2017.02.03, 14:36:24 »
Sjasma nie znam - może ma jakiś parametr, żeby ORG dodawał puste segmenty. Ale jak potrzebujesz zrobić "dziurę" to zawsze możesz dać coś takiego:

ds ASTART+038h-$

$ to wbudowany w większość assemblerów symbol oznaczający "adres pamięci do którego zapisany zostanie aktualny kawałek kodu/danych". W tym wypadku wyliczy ci ile miejsca zostało od tego punktu w którym aktualnie się znajdujesz do tego, w którym ma się skończyć dziura (czyli ASTART-$38) i "zarezerwuje" stosowną liczbę bajtów.

steev

  • *****
  • Wiadomości: 1363
  • Miejsce pobytu:
    inode 42
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #18 dnia: 2017.02.03, 15:44:49 »
Poniższy kod nie zadziałał:

         MACRO ROLL 1
         LD   A,(@1)
         XOR  H
         AND  11111000B
         XOR  H
         LD   H,A
         ENDM

Dziwne. U mnie działa.

test.z80
Errors: 0

       1   00:0000
       2   00:0000                               MACRO ROLL 1
       3   00:0000                    <          LD   A,(@1)
       4   00:0000                    <          XOR  H
       5   00:0000                    <          AND  11111000B
       6   00:0000                    <          XOR  H
       7   00:0000                    <          LD   H,A
       8   00:0000                    <          ENDM
       9   00:0000
      10   00:0000                      start:
      11   00:0000                              ROLL $8000
      11   00:0000  3A 00 80          >          LD   A,(@1)
      11   00:0003  AC                >          XOR  H
      11   00:0004  E6 F8             >          AND  11111000B
      11   00:0006  AC                >          XOR  H
      11   00:0007  67                >          LD   H,A
      12   00:0008                              ROLL tpau
      12   00:0008  3A 19 00          >          LD   A,(@1)
      12   00:000B  AC                >          XOR  H
      12   00:000C  E6 F8             >          AND  11111000B
      12   00:000E  AC                >          XOR  H
      12   00:000F  67                >          LD   H,A
      13   00:0010                              ROLL over
      13   00:0010  3A 1A 00          >          LD   A,(@1)
      13   00:0013  AC                >          XOR  H
      13   00:0014  E6 F8             >          AND  11111000B
      13   00:0016  AC                >          XOR  H
      13   00:0017  67                >          LD   H,A
      14   00:0018  76                          halt
      15   00:0019
      16   00:0019  64                  tpau:   db 100
      17   00:001A  00 (1)              over:   ds 1
Machines should work. People should think.

steev

  • *****
  • Wiadomości: 1363
  • Miejsce pobytu:
    inode 42
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #19 dnia: 2017.02.03, 15:51:05 »
Dziękuję za pomoc, udało się całość skompilować :). Niestety wyszedł kolejny problem :(. Wygląda na to, że ORG nie działa. Kod wygląda tak:
[...]
Uroki SJASM... :(

Możesz wymusić lokalizację w ten sposób:

        code !$2000
        org  $2000
Machines should work. People should think.

apk

  • ***
  • Wiadomości: 237
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #20 dnia: 2017.02.03, 23:56:28 »
Spróbowałem na szybko z tym:
ds ASTART+038h-$
i tym:
        code !$2000
        org  $2000

i w obu przypadkach nie działało. Może coś źle wpisałem. W każdym bądź razie zrobiłem prowizorkę i wpisałem odpowiednią ilość razy nop. Kompilacja zakończyła się sukcesem. Dziękuję wszystkim za pomoc :)

A swoją drogą bardzo fajne forum. Dobrze, że tu trafiłem.
Pozdrawiam
P.

steev

  • *****
  • Wiadomości: 1363
  • Miejsce pobytu:
    inode 42
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #21 dnia: 2017.02.04, 00:27:14 »
Jedyne co mi przychodzi do głowy, to to, że zacząłeś pisać od pierwszej linii.
SJASM tego nie lubi. Od pierwszej linii zaczynają się jedynie etykiety, wszystkie rozkazy, makra, polecenia itp. muszą się zaczynać od odstępu (spacje lub taby)

A - i żeby jeszcze bardziej zagmatwać, można zrobić też tak :
        macro odstep 1
        repeat @1 - $
        db 0
        endrepeat
        endm

        org 0
        di
        jp start

        odstep $8
        ret

        odstep $10
        ret

        odstep $18
        ret

        odstep $20
        ret

        odstep $28
        ret

        odstep $30
        ret

        odstep $38
        reti

        odstep $66
        retn

        odstep $100
start:
        ret

;)
Machines should work. People should think.

apk

  • ***
  • Wiadomości: 237
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #22 dnia: 2017.02.06, 10:19:19 »
Wiem, że od lewej to tylko etykiety. Tak jest też w asemblerach na inne procesory. Nie wiem czemu nie zadziałało :(

Mam jeszcze pytanie z innej beczki. Przedmiotowy program powstał 30 lat temu. Jakim asemblerem mógł być kompilowany? Wyboru pewnie dużego nie było, a że program powstał w Polsce to tym bardziej.

Pozdrawiam
P.

nietoperz

  • ****
  • Wiadomości: 400
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #23 dnia: 2017.02.06, 15:19:49 »

matofesi

  • *****
  • Wiadomości: 2049
  • Miejsce pobytu:
    Toruń/Poland
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #24 dnia: 2017.02.06, 15:38:26 »
Mam jeszcze pytanie z innej beczki. Przedmiotowy program powstał 30 lat temu. Jakim asemblerem mógł być kompilowany? Wyboru pewnie dużego nie było, a że program powstał w Polsce to tym bardziej.

Eeee... tak to trochę mało danych jest... Jakbyś pokazał kawałek oryginalnego kodu to pewnie łatwiej by było zgadywać. ;)

Musiałbyś powiedzieć na jaką platformę to miało być robione albo na jakiej platformie było pisane wtedy moglibyśmy zgadywać.

30 lat temu to był 1987 rok - początek pirackiego el dorado. Można było u nas dostać prawie wszystko więc i z assemblerami Z80 nie powinno być problemu. Na Spectrum to GENS, ale chyba jakieś inne też bywały. Na peceta pod DOSa na pewno sporo różności by się znalazło, to samo z CPMem.

apk

  • ***
  • Wiadomości: 237
Odp: Problem z kompilacją (BIT, LD)
« Odpowiedź #25 dnia: 2017.02.06, 17:10:49 »
Jak dla mnie główną wskazówką jest ten dziwny zapis, który stwarzał najwięcej problemów:

BIT  PAUSE,(IY-W+MODE)
LD   (IY-W+ROLLC),23
Sprawdziłem kilka kompilatorów i żaden, poza podpowiedzianym sjasmplus tego nie ruszył.

Poza tym zapis makro, w którym koniec makra zapisywany jest chyba tez inaczej niż zwykle:

         MACRO %ROLL
         LD   A,(\0)
         XOR  H
         AND  11111000B
         XOR  H
         LD   H,A
         ENDMAC

No i jeszcze te zapisy z kropkami - bez kropek dało się skompilować:

         LD   (HL),.LOW.K_2
         INC  HL
         LD   (HL),.HIGH.K_2

Reszta kodu wg mnie wygląda najzupełniej normalnie, zresztą nie sprawiała problemu.

Ostatnia wskazówka jest poniżej. Program, który kompilowałem był w kilku plikach. Jest jeden plik chyba do linkera, który składal wszystko w calośc. Oto jego treść:

         name TERM
 ;
         pstitl 'Term1'
$TGRA11_1.S01
 ;
         pstitl 'Term2'
$TGRA11_2.S01
 ;
         pstitl 'Term3'
$TGRA11_3.S01
 ;
         pstitl 'Term4'
$TGRA11_4.S01
 ;
         endmod
 ;

         END   ;


Program przeznaczony jest dla Z80, na czym był kompilowany - nie wiem.

P.