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

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 Ostatnio edytowany przez qbahusak (2022-11-21 09:02:10)

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.

4

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

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

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

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

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 Ostatnio edytowany przez _tzok_ (2022-11-27 20:06:52)

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.
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 Ostatnio edytowany przez artik-wroc (2022-11-27 20:11:34)

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

Było miło :) Do widzenia.

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

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.

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

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

   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ę.

Było miło :) Do widzenia.

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

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.

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

14

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.