Temat: ASM w Pure Pascalu

No właśnie jak zrobić wstawkę w asemblerze w PP, chodzi o instrukcję MOVE ? Próbowałem ASM, ale nie działa mi to.
Dokładnie to chodzi o ten nieszczęsny odczyt z adresu i zapis pod adres.
Maxon Pascal ma biblio STPascal.UNI i dzięki niemu można użyć PEEK i POKE, a co z tym ziemniaczanym (puree) Pascalem?

Było miło :) Do widzenia.

2

Odp: ASM w Pure Pascalu

Pure Pascal nie ma wstawek. Musisz zrobić osobny plik w asm.
Nie znam Pascala, ale nie ma tam wskaźników jak w C?

What can be asserted without proof can be dismissed without proof.

3

Odp: ASM w Pure Pascalu

sqward napisał/a:

Nie znam Pascala, ale nie ma tam wskaźników jak w C?

Oczywiście, że są.

Po polsku ziemniak to też pyra.
PyraPascal.

Ostatnio edytowany przez qbahusak (2022-11-21 09:02:10)

4

Odp: ASM w Pure Pascalu

Nie wiem jak w Pure Pascalu, ale w Turbo można było po prostu podmapować zmienną pod adres w pamięci. Np.

const
       IOMem = $f0000000;
     
     var
       { This address has no actual meaning }
       MyPort: Byte absolute IOMem + $c030;

Wtedy do pamięci (rejestru) można się odnosić jak do zmiennej.

5

Odp: ASM w Pure Pascalu

Wskaźniki z Pascalu ładnie opisane są na stronie Pascal - Pointers. Jest tam też opis, jak odwoływać się do komórek pamięci.

Zawsze mam rację, tylko nikt mnie nie słucha.

6

Odp: ASM w Pure Pascalu

Dzięki serdeczne za wszelkie podpowiedzi, pytanie zasadnicze jak to jest konkretnie w Puree Pascalu.. Inaczej w Alice, HI, Maxon itd...
Obaczym i napiszem.

Było miło :) Do widzenia.

7

Odp: ASM w Pure Pascalu

artik-wroc napisał/a:

Dokładnie to chodzi o ten nieszczęsny odczyt z adresu i zapis pod adres.

Move da się zrobić na wskaźnikach:

sptr, dptr: ^integer;

sptr := adr1;
dptr := adr2;

dptr^ := sptr^;
Zawsze mam rację, tylko nikt mnie nie słucha.

8

Odp: ASM w Pure Pascalu

Ale jak do jasnej ******* odczytać BAJT z KONKRETNEGO adresu np: $12345. Ja mam mózg zniszczony przez Basic i za ChRL nie rozumiem jego dziadostwa (wskaźników).

Jeżeli chcę odczytywać po bajcie, to deklaruję:

wsk : ^byte;

gdy potem piszę:

wsk := $12345

to jest błąd, że typy niezgodne. Nic z tego nie rozumiem.

Było miło :) Do widzenia.

9

Odp: ASM w Pure Pascalu

Wskaźniki w Pascalu definiuje się jako typy, nie zmienne:

type
   Cptr = ^char;
var
   a : Cptr;

Jeśli po prostu chcesz wypisać zawartość pamięci spod adresu, to powinno wystarczyć:

var
   y: ^word;

begin
   y := $FFFF;
   writeln(y^); 
end.

Ostatnio edytowany przez _tzok_ (2022-11-27 20:06:52)

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

10

Odp: ASM w Pure Pascalu

EDIT: Przemyślę to, bo nic nie kumam

Ostatnio edytowany przez artik-wroc (2022-11-27 20:11:34)

Było miło :) Do widzenia.

11

Odp: ASM w Pure Pascalu

Sorry, pospieszyłem się i nie sprawdziłem, czy poprzedni przykład jest prawidłowy. Spróbuj poniższej konstrukcji. Nie mam chwilowo dostępu do deasemblera, aby sprawdzić, co z tego wychodzi, ale wstępne testy w debuggerze Pure Pascala wydają się być obiecujące.

type
  char_ptr = ^char;
var
  s, d : char_ptr;
begin
  s := char_ptr($12345);
  d := char_ptr($23456);
  s^ := d^
end.
_tzok_ napisał/a:

Wskaźniki w Pascalu definiuje się jako typy, nie zmienne:

Można, ale nie trzeba. Chociaż w moim przykładzie jest to konieczne. :-)

_tzok_ napisał/a:

Jeśli po prostu chcesz wypisać zawartość pamięci spod adresu, to powinno wystarczyć:

var
   y: ^word;

begin
   y := $FFFF;
   writeln(y^); 
end.

Powyższe nie zadziała. Próbujesz przypisać wartość wskaźnikowi. To jest to, na czym się wyłożyłem w poprzednim poście.

Ostatnio edytowany przez Lizard (2022-11-27 23:33:23)

Zawsze mam rację, tylko nikt mnie nie słucha.

12

Odp: ASM w Pure Pascalu

   s := char_ptr($12345);
  d := char_ptr($23456);

No właśnie tak. Swoją drogą nigdzie takiego zapisu nie widziałem. Każda wersja Pascala na Atari pozwala na inne rzeczy, a książki znalazłem tylko do Hi i Personal.

Dostałem podpowiedź:
https://www.atari-forum.com/viewtopic.p … 80#p440880

i faktycznie teraz działa, choć nie w moim przypadku :) Prosty program działa z wpisaniem pod adres i odczytem, ale zapisywanie do rejestrów karty już coś nie bardzo. Mam program który wykrywa kartę SB i odgrywa prostą melodyjkę.
sb

Wersja Maxon (PEEK, POKE) działa, wersja Puree (ze wskaźnikiem) nie. Muszę to jeszcze raz obejrzeć, bo może jest jakiś czeski błąd, albo kwestia ustawień kompilatora, plik wynikowy jest znacznie większy niż pod Maxon'em.

EDIT: Lizard: tylko deklaracja typu, bez zmiennej.
Tak jak podejrzewałem, kwestia wybrania opcji w kompilatorze i gra muzyka :)
Teraz Pinokio idzie dalej sam :) Przynajmniej spróbuję.

Ostatnio edytowany przez artik-wroc (2022-11-28 10:18:18)

Było miło :) Do widzenia.

13

Odp: ASM w Pure Pascalu

Zmienna nie jest potrzebna, jeżeli lubisz takie fikołki składniowe, jak w przytoczonym przykładzie. :-) Osobiście wolę uproszczony zapis.

Nie zastanawiałeś się nad Puree z C? Tam odwołania do pamięci są czymś naturalnym.

Ostatnio edytowany przez Lizard (2022-11-28 10:53:53)

Zawsze mam rację, tylko nikt mnie nie słucha.

14

Odp: ASM w Pure Pascalu

Akurat program który próbuję przerobić jest w Pascalu, więc uznałem że tak będzie szybciej. Na razie zaplątałem się w sieci begin i end :)

Było miło :) Do widzenia.